Botan  1.11.9
tls_alert.cpp
Go to the documentation of this file.
1 /*
2 * Alert Message
3 * (C) 2004-2006,2011 Jack Lloyd
4 *
5 * Released under the terms of the Botan license
6 */
7 
8 #include <botan/tls_alert.h>
9 #include <botan/exceptn.h>
10 
11 namespace Botan {
12 
13 namespace TLS {
14 
16  {
17  if(buf.size() != 2)
18  throw Decoding_Error("Alert: Bad size " + std::to_string(buf.size()) +
19  " for alert message");
20 
21  if(buf[0] == 1) m_fatal = false;
22  else if(buf[0] == 2) m_fatal = true;
23  else
24  throw Decoding_Error("Alert: Bad code for alert level");
25 
26  const byte dc = buf[1];
27 
28  m_type_code = static_cast<Type>(dc);
29  }
30 
31 std::vector<byte> Alert::serialize() const
32  {
33  return std::vector<byte>({
34  static_cast<byte>(is_fatal() ? 2 : 1),
35  static_cast<byte>(type())
36  });
37  }
38 
39 std::string Alert::type_string() const
40  {
41  switch(type())
42  {
43  case CLOSE_NOTIFY:
44  return "close_notify";
45  case UNEXPECTED_MESSAGE:
46  return "unexpected_message";
47  case BAD_RECORD_MAC:
48  return "bad_record_mac";
49  case DECRYPTION_FAILED:
50  return "decryption_failed";
51  case RECORD_OVERFLOW:
52  return "record_overflow";
54  return "decompression_failure";
55  case HANDSHAKE_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";
69  case ILLEGAL_PARAMETER:
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";
79  case EXPORT_RESTRICTION:
80  return "export_restriction";
81  case PROTOCOL_VERSION:
82  return "protocol_version";
84  return "insufficient_security";
85  case INTERNAL_ERROR:
86  return "internal_error";
87  case USER_CANCELED:
88  return "user_canceled";
89  case NO_RENEGOTIATION:
90  return "no_renegotiation";
91 
93  return "unsupported_extension";
95  return "certificate_unobtainable";
96  case UNRECOGNIZED_NAME:
97  return "unrecognized_name";
99  return "bad_certificate_status_response";
101  return "bad_certificate_hash_value";
103  return "unknown_psk_identity";
104 
105  case NULL_ALERT:
106  return "none";
107 
108  case HEARTBEAT_PAYLOAD:
109  return "heartbeat_payload";
110  }
111 
112  /*
113  * This is effectively the default case for the switch above, but we
114  * leave it out so that when an alert type is added to the enum the
115  * compiler can warn us that it is not included in the switch
116  * statement.
117  */
118  return "unrecognized_alert_" + std::to_string(type());
119  }
120 
121 }
122 
123 }
std::vector< byte > serialize() const
Definition: tls_alert.cpp:31
std::string to_string(const BER_Object &obj)
Definition: asn1_obj.cpp:46
std::vector< T, secure_allocator< T >> secure_vector
Definition: secmem.h:92
uint8_t byte
Definition: types.h:30
Type type() const
Definition: tls_alert.h:77
bool is_fatal() const
Definition: tls_alert.h:72
std::string type_string() const
Definition: tls_alert.cpp:39