summaryrefslogtreecommitdiffstats
path: root/comm/third_party/botan/src/lib/tls/tls_alert.h
diff options
context:
space:
mode:
Diffstat (limited to 'comm/third_party/botan/src/lib/tls/tls_alert.h')
-rw-r--r--comm/third_party/botan/src/lib/tls/tls_alert.h116
1 files changed, 116 insertions, 0 deletions
diff --git a/comm/third_party/botan/src/lib/tls/tls_alert.h b/comm/third_party/botan/src/lib/tls/tls_alert.h
new file mode 100644
index 0000000000..d9d3fe3136
--- /dev/null
+++ b/comm/third_party/botan/src/lib/tls/tls_alert.h
@@ -0,0 +1,116 @@
+/*
+* Alert Message
+* (C) 2004-2006,2011,2012 Jack Lloyd
+*
+* Botan is released under the Simplified BSD License (see license.txt)
+*/
+
+#ifndef BOTAN_TLS_ALERT_H_
+#define BOTAN_TLS_ALERT_H_
+
+#include <botan/secmem.h>
+#include <string>
+
+namespace Botan {
+
+namespace TLS {
+
+/**
+* SSL/TLS Alert Message
+*/
+class BOTAN_PUBLIC_API(2,0) Alert final
+ {
+ public:
+ /**
+ * Type codes for TLS alerts
+ */
+ 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, // SSLv3 only
+ 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, // RFC 8446
+
+ NO_APPLICATION_PROTOCOL = 120, // RFC 7301
+
+ // pseudo alert values
+ NULL_ALERT = 256
+ };
+
+ /**
+ * @return true iff this alert is non-empty
+ */
+ bool is_valid() const { return (m_type_code != NULL_ALERT); }
+
+ /**
+ * @return if this alert is a fatal one or not
+ */
+ bool is_fatal() const { return m_fatal; }
+
+ /**
+ * @return type of alert
+ */
+ Type type() const { return m_type_code; }
+
+ /**
+ * @return type of alert
+ */
+ std::string type_string() const;
+
+ /**
+ * Serialize an alert
+ */
+ std::vector<uint8_t> serialize() const;
+
+ /**
+ * Deserialize an Alert message
+ * @param buf the serialized alert
+ */
+ explicit Alert(const secure_vector<uint8_t>& buf);
+
+ /**
+ * Create a new Alert
+ * @param type_code the type of alert
+ * @param fatal specifies if this is a fatal alert
+ */
+ Alert(Type type_code, bool fatal = false) :
+ m_fatal(fatal), m_type_code(type_code) {}
+
+ Alert() : m_fatal(false), m_type_code(NULL_ALERT) {}
+ private:
+ bool m_fatal;
+ Type m_type_code;
+ };
+
+}
+
+}
+
+#endif