Botan
3.13.0
Crypto and TLS for C&
src
lib
tls
tls_magic.h
Go to the documentation of this file.
1
/*
2
* SSL/TLS Protocol Constants
3
* (C) 2004-2010 Jack Lloyd
4
*
5
* Botan is released under the Simplified BSD License (see license.txt)
6
*/
7
8
#ifndef BOTAN_TLS_PROTOCOL_MAGIC_H_
9
#define BOTAN_TLS_PROTOCOL_MAGIC_H_
10
11
#include <botan/strong_type.h>
12
#include <botan/types.h>
13
#include <array>
14
#include <vector>
15
16
//BOTAN_FUTURE_INTERNAL_HEADER(tls_magic.h)
17
18
#if defined(BOTAN_HAS_TLS_13) && defined(BOTAN_HAS_TLS_12)
19
#define BOTAN_HAS_TLS_DOWNGRADE_SUPPORT
20
#endif
21
22
namespace
Botan::TLS
{
23
24
/**
25
* Protocol Constants for SSL/TLS
26
*
27
* TODO(Botan4): this should not be an enum at all
28
*/
29
enum
Size_Limits
:
size_t
/* NOLINT(*-enum-size,*-use-enum-class) */
{
30
TLS_HEADER_SIZE
= 5,
31
DTLS_HEADER_SIZE
=
TLS_HEADER_SIZE
+ 8,
32
33
// The "TLSInnerPlaintext" length, i.e. the maximum amount of plaintext
34
// application data that can be transmitted in a single TLS record.
35
MAX_PLAINTEXT_SIZE
= 16 * 1024,
36
37
MAX_COMPRESSED_SIZE
=
MAX_PLAINTEXT_SIZE
+ 1024,
38
MAX_CIPHERTEXT_SIZE
=
MAX_COMPRESSED_SIZE
+ 1024,
39
40
// RFC 8446 5.2:
41
// This limit is derived from the maximum TLSInnerPlaintext length of 2^14
42
// octets + 1 octet for ContentType + the maximum AEAD expansion of 255
43
// octets.
44
MAX_AEAD_EXPANSION_SIZE_TLS13
= 255,
45
MAX_CIPHERTEXT_SIZE_TLS13
=
MAX_PLAINTEXT_SIZE
+
MAX_AEAD_EXPANSION_SIZE_TLS13
+ 1
46
};
47
48
enum class
Connection_Side
: uint8_t {
49
Client
= 1,
50
Server
= 2,
51
52
CLIENT
BOTAN_DEPRECATED
(
"Use Connection_Side::Client"
) =
Client
,
53
SERVER
BOTAN_DEPRECATED
(
"Use Connection_Side::Server"
) =
Server
,
54
};
55
56
enum class
Record_Type
: uint8_t {
57
Invalid
= 0,
// RFC 8446 (TLS 1.3)
58
59
ChangeCipherSpec
= 20,
60
Alert
= 21,
61
Handshake
= 22,
62
ApplicationData
= 23,
63
64
Heartbeat
= 24,
// RFC 6520 (TLS 1.3)
65
};
66
67
enum class
Handshake_Type
: uint8_t {
68
HelloRequest
= 0,
69
ClientHello
= 1,
70
ServerHello
= 2,
71
HelloVerifyRequest
= 3,
72
NewSessionTicket
= 4,
// RFC 5077
73
74
EndOfEarlyData
= 5,
// RFC 8446 (TLS 1.3)
75
EncryptedExtensions
= 8,
// RFC 8446 (TLS 1.3)
76
77
Certificate
= 11,
78
ServerKeyExchange
= 12,
79
CertificateRequest
= 13,
80
ServerHelloDone
= 14,
81
CertificateVerify
= 15,
82
ClientKeyExchange
= 16,
83
Finished
= 20,
84
85
CertificateUrl
= 21,
86
CertificateStatus
= 22,
87
88
KeyUpdate
= 24,
// RFC 8446 (TLS 1.3)
89
90
HelloRetryRequest
= 253,
// Not a wire value (HRR appears as an ordinary Server Hello)
91
HandshakeCCS
= 254,
// Not a wire value (TLS 1.3 uses this value for 'message_hash' -- RFC 8446 4.4.1)
92
None
= 255
// Null value
93
};
94
95
BOTAN_TEST_API
const
char
*
handshake_type_to_string
(
Handshake_Type
t);
96
97
using
Transcript_Hash
= std::vector<uint8_t>;
98
99
/// @brief Used to derive the ticket's PSK from the resumption_master_secret
100
using
Ticket_Nonce
=
Strong<std::vector<uint8_t>
,
struct
Ticket_Nonce_>;
101
102
/**
103
* Magic values used to signal a downgrade request to TLS 1.1.
104
*
105
* RFC 8446 4.1.3:
106
* TLS 1.3 has a downgrade protection mechanism embedded in the server's
107
* random value. TLS 1.3 servers which negotiate TLS 1.2 or below in
108
* response to a ClientHello MUST set the last 8 bytes of their Random
109
* value specially in their ServerHello.
110
*/
111
constexpr
uint64_t
DOWNGRADE_TLS11
= 0x444F574E47524400;
112
113
/**
114
* Magic values used to signal a downgrade request to TLS 1.2.
115
*
116
* RFC 8446 4.1.3:
117
* TLS 1.3 has a downgrade protection mechanism embedded in the server's
118
* random value. TLS 1.3 servers which negotiate TLS 1.2 or below in
119
* response to a ClientHello MUST set the last 8 bytes of their Random
120
* value specially in their ServerHello.
121
*/
122
constexpr
uint64_t
DOWNGRADE_TLS12
= 0x444F574E47524401;
123
124
/**
125
* RFC 8446 4.1.3:
126
* For reasons of backward compatibility with middleboxes, the
127
* HelloRetryRequest message uses the same structure as the ServerHello, but
128
* with Random set to the special value of the SHA-256 of "HelloRetryRequest":
129
*/
130
constexpr
std::array<uint8_t, 32>
HELLO_RETRY_REQUEST_MARKER
= {
131
0xCF, 0x21, 0xAD, 0x74, 0xE5, 0x9A, 0x61, 0x11, 0xBE, 0x1D, 0x8C, 0x02, 0x1E, 0x65, 0xB8, 0x91,
132
0xC2, 0xA2, 0x11, 0x16, 0x7A, 0xBB, 0x8C, 0x5E, 0x07, 0x9E, 0x09, 0xE2, 0xC8, 0xA8, 0x33, 0x9C};
133
134
}
// namespace Botan::TLS
135
136
#endif
BOTAN_DEPRECATED
#define BOTAN_DEPRECATED(msg)
Definition
api.h:73
BOTAN_TEST_API
#define BOTAN_TEST_API
Definition
api.h:41
Botan::Strong
Definition
strong_type.h:298
Botan::TLS::Alert
Definition
tls_alert.h:70
Botan::TLS::Client
Definition
tls_client.h:33
Botan::TLS::Finished
Definition
tls_messages.h:268
Botan::TLS::Server
Definition
tls_server.h:30
Botan::TLS
Definition
asio_context.cpp:18
Botan::TLS::handshake_type_to_string
const char * handshake_type_to_string(Handshake_Type type)
Definition
tls_magic.cpp:15
Botan::TLS::DOWNGRADE_TLS12
constexpr uint64_t DOWNGRADE_TLS12
Definition
tls_magic.h:122
Botan::TLS::Transcript_Hash
std::vector< uint8_t > Transcript_Hash
Definition
tls_magic.h:97
Botan::TLS::Record_Type
Record_Type
Definition
tls_magic.h:56
Botan::TLS::Record_Type::ApplicationData
@ ApplicationData
Definition
tls_magic.h:62
Botan::TLS::Record_Type::Invalid
@ Invalid
Definition
tls_magic.h:57
Botan::TLS::Record_Type::ChangeCipherSpec
@ ChangeCipherSpec
Definition
tls_magic.h:59
Botan::TLS::Record_Type::Handshake
@ Handshake
Definition
tls_magic.h:61
Botan::TLS::Record_Type::Heartbeat
@ Heartbeat
Definition
tls_magic.h:64
Botan::TLS::Size_Limits
Size_Limits
Definition
tls_magic.h:29
Botan::TLS::MAX_CIPHERTEXT_SIZE
@ MAX_CIPHERTEXT_SIZE
Definition
tls_magic.h:38
Botan::TLS::MAX_PLAINTEXT_SIZE
@ MAX_PLAINTEXT_SIZE
Definition
tls_magic.h:35
Botan::TLS::MAX_CIPHERTEXT_SIZE_TLS13
@ MAX_CIPHERTEXT_SIZE_TLS13
Definition
tls_magic.h:45
Botan::TLS::MAX_AEAD_EXPANSION_SIZE_TLS13
@ MAX_AEAD_EXPANSION_SIZE_TLS13
Definition
tls_magic.h:44
Botan::TLS::TLS_HEADER_SIZE
@ TLS_HEADER_SIZE
Definition
tls_magic.h:30
Botan::TLS::MAX_COMPRESSED_SIZE
@ MAX_COMPRESSED_SIZE
Definition
tls_magic.h:37
Botan::TLS::DTLS_HEADER_SIZE
@ DTLS_HEADER_SIZE
Definition
tls_magic.h:31
Botan::TLS::Ticket_Nonce
Strong< std::vector< uint8_t >, struct Ticket_Nonce_ > Ticket_Nonce
Used to derive the ticket's PSK from the resumption_master_secret.
Definition
tls_magic.h:100
Botan::TLS::AlertType::None
@ None
Definition
tls_alert.h:58
Botan::TLS::Connection_Side
Connection_Side
Definition
tls_magic.h:48
Botan::TLS::Connection_Side::SERVER
@ SERVER
Definition
tls_magic.h:53
Botan::TLS::Connection_Side::CLIENT
@ CLIENT
Definition
tls_magic.h:52
Botan::TLS::Handshake_Type
Handshake_Type
Definition
tls_magic.h:67
Botan::TLS::Handshake_Type::HelloRequest
@ HelloRequest
Definition
tls_magic.h:68
Botan::TLS::Handshake_Type::HelloRetryRequest
@ HelloRetryRequest
Definition
tls_magic.h:90
Botan::TLS::Handshake_Type::CertificateUrl
@ CertificateUrl
Definition
tls_magic.h:85
Botan::TLS::Handshake_Type::ClientHello
@ ClientHello
Definition
tls_magic.h:69
Botan::TLS::Handshake_Type::ServerHelloDone
@ ServerHelloDone
Definition
tls_magic.h:80
Botan::TLS::Handshake_Type::CertificateStatus
@ CertificateStatus
Definition
tls_magic.h:86
Botan::TLS::Handshake_Type::HandshakeCCS
@ HandshakeCCS
Definition
tls_magic.h:91
Botan::TLS::Handshake_Type::CertificateVerify
@ CertificateVerify
Definition
tls_magic.h:81
Botan::TLS::Handshake_Type::KeyUpdate
@ KeyUpdate
Definition
tls_magic.h:88
Botan::TLS::Handshake_Type::ClientKeyExchange
@ ClientKeyExchange
Definition
tls_magic.h:82
Botan::TLS::Handshake_Type::EndOfEarlyData
@ EndOfEarlyData
Definition
tls_magic.h:74
Botan::TLS::Handshake_Type::HelloVerifyRequest
@ HelloVerifyRequest
Definition
tls_magic.h:71
Botan::TLS::Handshake_Type::CertificateRequest
@ CertificateRequest
Definition
tls_magic.h:79
Botan::TLS::Handshake_Type::NewSessionTicket
@ NewSessionTicket
Definition
tls_magic.h:72
Botan::TLS::Handshake_Type::ServerHello
@ ServerHello
Definition
tls_magic.h:70
Botan::TLS::Handshake_Type::Certificate
@ Certificate
Definition
tls_magic.h:77
Botan::TLS::Handshake_Type::ServerKeyExchange
@ ServerKeyExchange
Definition
tls_magic.h:78
Botan::TLS::Handshake_Type::EncryptedExtensions
@ EncryptedExtensions
Definition
tls_magic.h:75
Botan::TLS::DOWNGRADE_TLS11
constexpr uint64_t DOWNGRADE_TLS11
Definition
tls_magic.h:111
Botan::TLS::HELLO_RETRY_REQUEST_MARKER
constexpr std::array< uint8_t, 32 > HELLO_RETRY_REQUEST_MARKER
Definition
tls_magic.h:130
Generated by
1.16.1