Botan 2.19.3
Crypto and TLS for C&
Public Types | Public Member Functions | List of all members
Botan::TLS::Alert Class Referencefinal

#include <tls_alert.h>

Public Types

enum  Type {
  CLOSE_NOTIFY = 0 , UNEXPECTED_MESSAGE = 10 , BAD_RECORD_MAC = 20 , DECRYPTION_FAILED = 21 ,
  RECORD_OVERFLOW = 22 , DECOMPRESSION_FAILURE = 30 , HANDSHAKE_FAILURE = 40 , NO_CERTIFICATE = 41 ,
  BAD_CERTIFICATE = 42 , UNSUPPORTED_CERTIFICATE = 43 , CERTIFICATE_REVOKED = 44 , CERTIFICATE_EXPIRED = 45 ,
  CERTIFICATE_UNKNOWN = 46 , ILLEGAL_PARAMETER = 47 , UNKNOWN_CA = 48 , ACCESS_DENIED = 49 ,
  DECODE_ERROR = 50 , DECRYPT_ERROR = 51 , EXPORT_RESTRICTION = 60 , PROTOCOL_VERSION = 70 ,
  INSUFFICIENT_SECURITY = 71 , INTERNAL_ERROR = 80 , INAPPROPRIATE_FALLBACK = 86 , USER_CANCELED = 90 ,
  NO_RENEGOTIATION = 100 , UNSUPPORTED_EXTENSION = 110 , CERTIFICATE_UNOBTAINABLE = 111 , UNRECOGNIZED_NAME = 112 ,
  BAD_CERTIFICATE_STATUS_RESPONSE = 113 , BAD_CERTIFICATE_HASH_VALUE = 114 , UNKNOWN_PSK_IDENTITY = 115 , CERTIFICATE_REQUIRED = 116 ,
  NO_APPLICATION_PROTOCOL = 120 , NULL_ALERT = 256
}
 

Public Member Functions

 Alert ()
 
 Alert (const secure_vector< uint8_t > &buf)
 
 Alert (Type type_code, bool fatal=false)
 
bool is_fatal () const
 
bool is_valid () const
 
std::vector< uint8_t > serialize () const
 
Type type () const
 
std::string type_string () const
 

Detailed Description

SSL/TLS Alert Message

Definition at line 21 of file tls_alert.h.

Member Enumeration Documentation

◆ Type

Type codes for TLS alerts

Enumerator
CLOSE_NOTIFY 
UNEXPECTED_MESSAGE 
BAD_RECORD_MAC 
DECRYPTION_FAILED 
RECORD_OVERFLOW 
DECOMPRESSION_FAILURE 
HANDSHAKE_FAILURE 
NO_CERTIFICATE 
BAD_CERTIFICATE 
UNSUPPORTED_CERTIFICATE 
CERTIFICATE_REVOKED 
CERTIFICATE_EXPIRED 
CERTIFICATE_UNKNOWN 
ILLEGAL_PARAMETER 
UNKNOWN_CA 
ACCESS_DENIED 
DECODE_ERROR 
DECRYPT_ERROR 
EXPORT_RESTRICTION 
PROTOCOL_VERSION 
INSUFFICIENT_SECURITY 
INTERNAL_ERROR 
INAPPROPRIATE_FALLBACK 
USER_CANCELED 
NO_RENEGOTIATION 
UNSUPPORTED_EXTENSION 
CERTIFICATE_UNOBTAINABLE 
UNRECOGNIZED_NAME 
BAD_CERTIFICATE_STATUS_RESPONSE 
BAD_CERTIFICATE_HASH_VALUE 
UNKNOWN_PSK_IDENTITY 
CERTIFICATE_REQUIRED 
NO_APPLICATION_PROTOCOL 
NULL_ALERT 

Definition at line 27 of file tls_alert.h.

27 {
28 CLOSE_NOTIFY = 0,
30 BAD_RECORD_MAC = 20,
32 RECORD_OVERFLOW = 22,
35 NO_CERTIFICATE = 41, // SSLv3 only
36 BAD_CERTIFICATE = 42,
42 UNKNOWN_CA = 48,
43 ACCESS_DENIED = 49,
44 DECODE_ERROR = 50,
45 DECRYPT_ERROR = 51,
49 INTERNAL_ERROR = 80,
51 USER_CANCELED = 90,
52 NO_RENEGOTIATION = 100,
59 CERTIFICATE_REQUIRED = 116, // RFC 8446
60
61 NO_APPLICATION_PROTOCOL = 120, // RFC 7301
62
63 // pseudo alert values
64 NULL_ALERT = 256
65 };
@ BAD_CERTIFICATE_STATUS_RESPONSE
Definition tls_alert.h:56

Constructor & Destructor Documentation

◆ Alert() [1/3]

Botan::TLS::Alert::Alert ( const secure_vector< uint8_t > &  buf)
explicit

Deserialize an Alert message

Parameters
bufthe serialized alert

Definition at line 15 of file tls_alert.cpp.

16 {
17 if(buf.size() != 2)
18 throw Decoding_Error("Bad size (" + std::to_string(buf.size()) +
19 ") for TLS alert message");
20
21 if(buf[0] == 1) m_fatal = false;
22 else if(buf[0] == 2) m_fatal = true;
23 else
24 throw TLS_Exception(Alert::ILLEGAL_PARAMETER, "Bad code for TLS alert level");
25
26 const uint8_t dc = buf[1];
27
28 m_type_code = static_cast<Type>(dc);
29 }

References ILLEGAL_PARAMETER.

◆ Alert() [2/3]

Botan::TLS::Alert::Alert ( Type  type_code,
bool  fatal = false 
)
inline

Create a new Alert

Parameters
type_codethe type of alert
fatalspecifies if this is a fatal alert

Definition at line 103 of file tls_alert.h.

103 :
104 m_fatal(fatal), m_type_code(type_code) {}

◆ Alert() [3/3]

Botan::TLS::Alert::Alert ( )
inline

Definition at line 106 of file tls_alert.h.

106: m_fatal(false), m_type_code(NULL_ALERT) {}

Member Function Documentation

◆ is_fatal()

bool Botan::TLS::Alert::is_fatal ( ) const
inline
Returns
if this alert is a fatal one or not

Definition at line 75 of file tls_alert.h.

75{ return m_fatal; }

Referenced by Botan::TLS::Channel::send_alert(), and serialize().

◆ is_valid()

bool Botan::TLS::Alert::is_valid ( ) const
inline
Returns
true iff this alert is non-empty

Definition at line 70 of file tls_alert.h.

70{ return (m_type_code != NULL_ALERT); }

Referenced by Botan::TLS::Channel::send_alert().

◆ serialize()

std::vector< uint8_t > Botan::TLS::Alert::serialize ( ) const

Serialize an alert

Definition at line 31 of file tls_alert.cpp.

32 {
33 return std::vector<uint8_t>({
34 static_cast<uint8_t>(is_fatal() ? 2 : 1),
35 static_cast<uint8_t>(type())
36 });
37 }
bool is_fatal() const
Definition tls_alert.h:75
Type type() const
Definition tls_alert.h:80

References is_fatal(), and type().

Referenced by Botan::TLS::Channel::send_alert().

◆ type()

Type Botan::TLS::Alert::type ( ) const
inline
Returns
type of alert

Definition at line 80 of file tls_alert.h.

80{ return m_type_code; }

Referenced by Botan::TLS::Channel::send_alert(), serialize(), Botan::TLS::Stream< StreamLayer, ChannelT >::StreamCore::tls_alert(), and type_string().

◆ type_string()

std::string Botan::TLS::Alert::type_string ( ) const
Returns
type of alert

Definition at line 39 of file tls_alert.cpp.

40 {
41 switch(type())
42 {
43 case CLOSE_NOTIFY:
44 return "close_notify";
46 return "unexpected_message";
47 case BAD_RECORD_MAC:
48 return "bad_record_mac";
50 return "decryption_failed";
51 case RECORD_OVERFLOW:
52 return "record_overflow";
54 return "decompression_failure";
56 return "handshake_failure";
57 case NO_CERTIFICATE:
58 return "no_certificate";
59 case BAD_CERTIFICATE:
60 return "bad_certificate";
62 return "unsupported_certificate";
64 return "certificate_revoked";
66 return "certificate_expired";
68 return "certificate_unknown";
70 return "illegal_parameter";
71 case UNKNOWN_CA:
72 return "unknown_ca";
73 case ACCESS_DENIED:
74 return "access_denied";
75 case DECODE_ERROR:
76 return "decode_error";
77 case DECRYPT_ERROR:
78 return "decrypt_error";
80 return "export_restriction";
82 return "protocol_version";
84 return "insufficient_security";
85 case INTERNAL_ERROR:
86 return "internal_error";
88 return "inappropriate_fallback";
89 case USER_CANCELED:
90 return "user_canceled";
92 return "no_renegotiation";
93
95 return "unsupported_extension";
97 return "certificate_unobtainable";
99 return "unrecognized_name";
101 return "bad_certificate_status_response";
103 return "bad_certificate_hash_value";
105 return "unknown_psk_identity";
107 return "certificate_required";
109 return "no_application_protocol";
110
111 case NULL_ALERT:
112 return "none";
113 }
114
115 /*
116 * This is effectively the default case for the switch above, but we
117 * leave it out so that when an alert type is added to the enum the
118 * compiler can warn us that it is not included in the switch
119 * statement.
120 */
121 return "unrecognized_alert_" + std::to_string(type());
122 }

References ACCESS_DENIED, BAD_CERTIFICATE, BAD_CERTIFICATE_HASH_VALUE, BAD_CERTIFICATE_STATUS_RESPONSE, BAD_RECORD_MAC, CERTIFICATE_EXPIRED, CERTIFICATE_REQUIRED, CERTIFICATE_REVOKED, CERTIFICATE_UNKNOWN, CERTIFICATE_UNOBTAINABLE, CLOSE_NOTIFY, DECODE_ERROR, DECOMPRESSION_FAILURE, DECRYPT_ERROR, DECRYPTION_FAILED, EXPORT_RESTRICTION, HANDSHAKE_FAILURE, ILLEGAL_PARAMETER, INAPPROPRIATE_FALLBACK, INSUFFICIENT_SECURITY, INTERNAL_ERROR, NO_APPLICATION_PROTOCOL, NO_CERTIFICATE, NO_RENEGOTIATION, NULL_ALERT, PROTOCOL_VERSION, RECORD_OVERFLOW, type(), UNEXPECTED_MESSAGE, UNKNOWN_CA, UNKNOWN_PSK_IDENTITY, UNRECOGNIZED_NAME, UNSUPPORTED_CERTIFICATE, UNSUPPORTED_EXTENSION, and USER_CANCELED.

Referenced by Botan::TLS::BotanAlertCategory::message().


The documentation for this class was generated from the following files: