Botan 2.19.1
Crypto and TLS for C&
tls_alert.cpp
Go to the documentation of this file.
1/*
2* Alert Message
3* (C) 2004-2006,2011 Jack Lloyd
4*
5* Botan is released under the Simplified BSD License (see license.txt)
6*/
7
8#include <botan/tls_alert.h>
9#include <botan/tls_exceptn.h>
10
11namespace Botan {
12
13namespace TLS {
14
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 }
30
31std::vector<uint8_t> Alert::serialize() const
32 {
33 return std::vector<uint8_t>({
34 static_cast<uint8_t>(is_fatal() ? 2 : 1),
35 static_cast<uint8_t>(type())
36 });
37 }
38
39std::string Alert::type_string() const
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 }
123
124}
125
126}
@ BAD_CERTIFICATE_STATUS_RESPONSE
Definition: tls_alert.h:56
@ BAD_CERTIFICATE_HASH_VALUE
Definition: tls_alert.h:57
@ CERTIFICATE_UNOBTAINABLE
Definition: tls_alert.h:54
std::vector< uint8_t > serialize() const
Definition: tls_alert.cpp:31
std::string type_string() const
Definition: tls_alert.cpp:39
bool is_fatal() const
Definition: tls_alert.h:75
Type type() const
Definition: tls_alert.h:80
std::string to_string(const BER_Object &obj)
Definition: asn1_obj.cpp:213
Definition: alg_id.cpp:13
std::vector< T, secure_allocator< T > > secure_vector
Definition: secmem.h:65