Source code

Revision control

Copy as Markdown

Other Tools

/*
* 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