Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
SSLTypes.h
Go to the documentation of this file.
1 //
5 //
6 #ifndef _INC_SSLTypes_H
7 #define _INC_SSLTypes_H
8 #ifndef NO_PRAGMA_ONCE
9 #pragma once
10 #endif
11 
12 #include "../GrayLibBase.h"
13 #include "../Hash/cHashCode.h"
14 #include "../Key/cKeyBase.h"
16 
17 namespace GrayLib
18 {
20  {
23 
24  SSL_Unknown = 0, // Maybe disconnected?
25  SSL_ClientHello, // Ready to send ClientHello (if client) or waiting to receive hello (if server)
26  SSL_ServerHello, // Ready to send ServerHello (if server) or waiting to receive hello (if client)
40  SSL_HANDSHAKE_COMPLETE, // normal data mode.
41  // SSL_SERVER_NEW_SESSION_TICKET,
42  };
43 
45  {
49 
55 
56  SSL_MSG_V2 = 0x80,
57  };
58 
60 
61  enum SSL_VERSION_MAJOR_TYPE // First byte for SSL_VERSION_t
62  {
63  SSL_VERSION_MAJOR_BYTE = 3, // The first byte of the SSL_VERSION_t WORD is ALWAYS 3.
64  };
65  enum SSL_VERSION_TYPE // Second byte for SSL_VERSION_t. the only one the matters at this time.
66  {
76  };
77 
79  {
84  };
85  typedef BYTE SSL_Compress_t; // stored as a byte.
86 
88  {
99 
101 
103  SSL_FALLBACK_SCSV = 0x5600,
104 
105 #define CIPHERSUITEDEF(a,b,c,d,e,f,g,h,i) a = b,
106 #include "cSSLCipherSuite.tbl"
107 #undef CIPHERSUITEDEF
108 
109  };
110  typedef WORD SSL_CipherSuite_t;
111 
113  {
116 
122  SSL_KeyExchange_PSK, // NOT with Cert.
128  };
129  typedef BYTE SSL_KeyEx_t; // stored as a byte.
130 
131  enum SSL_SIG_TYPE // BYTE
132  {
137  SSL_SIG_RSA = 1, // KeyType_RSA
138  SSL_SIG_ECDSA = 3, // KeyType_ECDSA ECP
139  };
140 
142  {
149  };
150 
152  {
155 
167  };
168 
170  {
175 
176  // Convert MaxFragmentLength codes to length.
177  // RFC 6066 says:
178  // enum {
179  // 2^9(1), 2^10(2), 2^11(3), 2^12(4), (255)
180  // } MaxFragmentLength;
181  // and we add 0 -> extension unused
182 
189  };
190 
192  {
195 
198 
201 
204 
206 
208 
210  TLS_EXT_ExtendedMasterSecret = 23, // 23 = 0x17
212 
213  TLS_EXT_renegotiation_info = 0xFF01, // 65281
214  };
215 
217  {
221 
224  };
225 
226  enum SSL_ALERT_LEVEL_TYPE // _TYPE??
227  {
232  };
233 
235  {
238  SSL_ALERT_SSL3_CLOSE_NOTIFY = 0, // we are about to legit close the channel.
239  SSL_ALERT_SSL3_UNEXPECTED_MESSAGE = 10, // x'0A' An inappropriate message was received. This alert is always fatal and should never be observed in communication between proper implementations.
240  SSL_ALERT_SSL3_BAD_RECORD_MAC = 20, // x'14' SSL3
242  SSL_ALERT_TLS1_RECORD_OVERFLOW = 22, // x'16' SSL3
245  SSL_ALERT_SSL3_NO_CERTIFICATE = 41, // x'29' SSL3
246  SSL_ALERT_SSL3_BAD_CERTIFICATE = 42, // x'2A' SSL3
252  SSL_ALERT_TLS1_UNKNOWN_CA = 48, // x'30' SSL3
253  SSL_ALERT_TLS1_ACCESS_DENIED = 49, // x'31' SSL3
254  SSL_ALERT_TLS1_DECODE_ERROR = 50, // x'32' TLS1
255  SSL_ALERT_TLS1_DECRYPT_ERROR = 51, // x'33' TLS1
259  SSL_ALERT_TLS1_INTERNAL_ERROR = 80, // x'50' TLS1
261  SSL_ALERT_TLS1_USER_CANCELLED = 90, // x'5A' TLS1
262  SSL_ALERT_TLS1_NO_RENEGOTIATION = 100, // x'64' TLS1
267  };
268 
269  struct GRAYLIB_LINK cSSL // static helpers.
270  {
273 
274  static const size_t k_PSK_Size_Max = 32;
275  static const size_t k_MAC_Size_Max = 48;
276  static const size_t k_Number_Size_Max = 1024;
277 
280  static const size_t k_Content_Size_Max = 16384;
281 
282  static const WORD k_MaxFragLens[SSL_MAX_FRAG_LEN_QTY]; // SSL_MAX_FRAG_TYPE allowed.
283  };
284 }
285 
286 #endif
#define GRAYLIB_LINK
Definition: GrayLibBase.h:35
Definition: cMesh.h:22
SSL_SIG_TYPE
Definition: SSLTypes.h:132
@ SSL_SIG_RSA
Definition: SSLTypes.h:137
@ SSL_SIG_ECDSA
Definition: SSLTypes.h:138
@ SSL_SIG_ANON
Definition: SSLTypes.h:136
TLS_EXT_TYPE
Definition: SSLTypes.h:192
@ TLS_EXT_status_request
Definition: SSLTypes.h:200
@ TLS_EXT_TruncatedHMAC
Definition: SSLTypes.h:199
@ TLS_EXT_server_name
Definition: SSLTypes.h:196
@ TLS_EXT_MaxFragmentLength
Definition: SSLTypes.h:197
@ TLS_EXT_ExtendedMasterSecret
Definition: SSLTypes.h:210
@ TLS_EXT_signature_algorithms
signature_algorithms
Definition: SSLTypes.h:205
@ TLS_EXT_SessionTicket
session ticket extension "SessionTicket TLS"
Definition: SSLTypes.h:211
@ TLS_EXT_ALPN
application_layer_protocol_negotiation. // RFC 7301 Application Layer Protocol Negotiation.
Definition: SSLTypes.h:207
@ TLS_EXT_ec_point_formats
ec_point_formats
Definition: SSLTypes.h:203
@ TLS_EXT_supported_groups
supported_groups renamed from "elliptic_curves")
Definition: SSLTypes.h:202
@ TLS_EXT_EncryptThenMac
Definition: SSLTypes.h:209
@ TLS_EXT_renegotiation_info
Definition: SSLTypes.h:213
SSL_MAX_FRAG_TYPE
Definition: SSLTypes.h:170
@ SSL_MAX_FRAG_LEN_NONE
don't use this extension
Definition: SSLTypes.h:183
@ SSL_MAX_FRAG_LEN_512
MaxFragmentLength 2^9.
Definition: SSLTypes.h:184
@ SSL_MAX_FRAG_LEN_1024
MaxFragmentLength 2^10.
Definition: SSLTypes.h:185
@ SSL_MAX_FRAG_LEN_4096
MaxFragmentLength 2^12.
Definition: SSLTypes.h:187
@ SSL_MAX_FRAG_LEN_2048
MaxFragmentLength 2^11.
Definition: SSLTypes.h:186
@ SSL_MAX_FRAG_LEN_QTY
first invalid value. Max Must be <= 16384
Definition: SSLTypes.h:188
SSL_MSG_TYPE
Definition: SSLTypes.h:45
@ SSL_MSG_APPLICATION_DATA
0x17 = any application defined data.
Definition: SSLTypes.h:54
@ SSL_MSG_UNK
Definition: SSLTypes.h:50
@ SSL_MSG_ALERT
0x15 = closing or some error.
Definition: SSLTypes.h:52
@ SSL_MSG_V2
Weird first byte of v2 ClientHello.
Definition: SSLTypes.h:56
@ SSL_MSG_CHANGE_CIPHER_SPEC
0x14 = switch to the negotiated encryption.
Definition: SSLTypes.h:51
@ SSL_MSG_HANDSHAKE
0x16 = get this first. SSL3_RT_HANDSHAKE. negotiate the channel. SSL_HAND_TYPE
Definition: SSLTypes.h:53
BYTE SSL_KeyEx_t
Definition: SSLTypes.h:129
SSL_ALERT_TYPE
Definition: SSLTypes.h:235
@ SSL_ALERT_SSL3_BAD_RECORD_MAC
Definition: SSLTypes.h:240
@ SSL_ALERT_SSL3_ILLEGAL_PARAMETER
Definition: SSLTypes.h:251
@ SSL_ALERT_TLS1_ACCESS_DENIED
Definition: SSLTypes.h:253
@ SSL_ALERT_TLS1_DECRYPTION_FAILED
Definition: SSLTypes.h:241
@ SSL_ALERT_UNRECOGNIZED_NAME
Definition: SSLTypes.h:264
@ SSL_ALERT_TLS1_USER_CANCELLED
Definition: SSLTypes.h:261
@ SSL_ALERT_TLS1_PROTOCOL_VERSION
Definition: SSLTypes.h:257
@ SSL_ALERT_SSL3_UNEXPECTED_MESSAGE
Definition: SSLTypes.h:239
@ SSL_ALERT_SSL3_CLOSE_NOTIFY
Definition: SSLTypes.h:238
@ SSL_ALERT_SSL3_HANDSHAKE_FAILURE
Definition: SSLTypes.h:244
@ SSL_ALERT_SSL3_DECOMPRESSION_FAILURE
Definition: SSLTypes.h:243
@ SSL_ALERT_INAPROPRIATE_FALLBACK
Definition: SSLTypes.h:260
@ SSL_ALERT_TLS1_EXPORT_RESTRICTION
Definition: SSLTypes.h:256
@ SSL_ALERT_SSL3_CERTIFICATE_REVOKED
Definition: SSLTypes.h:248
@ SSL_ALERT_SSL3_NO_CERTIFICATE
Definition: SSLTypes.h:245
@ SSL_ALERT_NO_APPLICATION_PROTOCOL
Definition: SSLTypes.h:266
@ SSL_ALERT_TLS1_UNKNOWN_CA
Definition: SSLTypes.h:252
@ SSL_ALERT_SSL3_CERTIFICATE_UNKNOWN
Definition: SSLTypes.h:250
@ SSL_ALERT_SSL3_BAD_CERTIFICATE
Definition: SSLTypes.h:246
@ SSL_ALERT_TLS1_DECRYPT_ERROR
Definition: SSLTypes.h:255
@ SSL_ALERT_UNKNOWN_PSK_IDENTITY
Definition: SSLTypes.h:265
@ SSL_ALERT_TLS1_INSUFFICIENT_SECURITY
Definition: SSLTypes.h:258
@ SSL_ALERT_TLS1_RECORD_OVERFLOW
Definition: SSLTypes.h:242
@ SSL_ALERT_UNSUPPORTED_EXT
Definition: SSLTypes.h:263
@ SSL_ALERT_SSL3_CERTIFICATE_EXPIRED
Definition: SSLTypes.h:249
@ SSL_ALERT_TLS1_DECODE_ERROR
Definition: SSLTypes.h:254
@ SSL_ALERT_TLS1_INTERNAL_ERROR
Definition: SSLTypes.h:259
@ SSL_ALERT_TLS1_NO_RENEGOTIATION
Definition: SSLTypes.h:262
@ SSL_ALERT_SSL3_UNSUPPORTED_CERTIFICATE
Definition: SSLTypes.h:247
SSL_KeyExchange_TYPE
Definition: SSLTypes.h:113
@ SSL_KeyExchange_RSA_PSK
DHE = Diffie–Hellman key exchange http://en.wikipedia.org/wiki/Diffie-Hellman_key_exchange ....
Definition: SSLTypes.h:124
@ SSL_KeyExchange_ECDHE_RSA
Definition: SSLTypes.h:120
@ SSL_KeyExchange_ECDH_ECDSA
Definition: SSLTypes.h:127
@ SSL_KeyExchange_ECDHE_PSK
Definition: SSLTypes.h:125
@ SSL_KeyExchange_ECDHE_ECDSA
Definition: SSLTypes.h:121
@ SSL_KeyExchange_NONE
Definition: SSLTypes.h:117
@ SSL_KeyExchange_ECDH_RSA
Definition: SSLTypes.h:126
@ SSL_KeyExchange_DHE_RSA
Definition: SSLTypes.h:119
@ SSL_KeyExchange_RSA
Definition: SSLTypes.h:118
@ SSL_KeyExchange_PSK
Definition: SSLTypes.h:122
@ SSL_KeyExchange_DHE_PSK
Definition: SSLTypes.h:123
SSL_CERT_TYPE
Definition: SSLTypes.h:142
@ SSL_CERT_TYPE_ECDSA_SIGN
Definition: SSLTypes.h:148
@ SSL_CERT_NULL
Definition: SSLTypes.h:146
@ SSL_CERT_TYPE_RSA_SIGN
Definition: SSLTypes.h:147
SSL_COMPRESS_TYPE
Definition: SSLTypes.h:79
@ SSL_COMPRESS_DEFLATE
USE_ZLIB.
Definition: SSLTypes.h:83
@ SSL_COMPRESS_NULL
Definition: SSLTypes.h:82
BYTE SSL_Compress_t
Definition: SSLTypes.h:85
SSL_VERSION_TYPE
Definition: SSLTypes.h:66
@ SSL_VER_TLS_1_0
TLS v1.0 = tls1 = 0x0301.
Definition: SSLTypes.h:71
@ SSL_VERSION_NULL
Definition: SSLTypes.h:69
@ SSL_VERSION_SUPPORT_MAX
Definition: SSLTypes.h:74
@ SSL_VER_SSL_3
SSL v3.0 = ssl3 = 0x0300.
Definition: SSLTypes.h:70
@ SSL_VER_TLS_1_1
TLS v1.1 = tls1_1 = 0x0302.
Definition: SSLTypes.h:72
@ SSL_VERSION_QTY
Definition: SSLTypes.h:75
@ SSL_VER_TLS_1_2
TLS v1.2 = tls1_2 = 0x0303.
Definition: SSLTypes.h:73
TLS_ECP_PF_t
Definition: SSLTypes.h:217
@ TLS_ECP_PF_COMPRESSED
Compressed point format.
Definition: SSLTypes.h:223
@ TLS_ECP_PF_UNCOMPRESSED
Uncompressed point format.
Definition: SSLTypes.h:222
SSL_HAND_TYPE
Definition: SSLTypes.h:152
@ SSL_HAND_CertificateRequest
Definition: SSLTypes.h:162
@ SSL_HAND_ClientHello
Sent from client to server. Challenge to the server. cSSLMsgHandHello.
Definition: SSLTypes.h:157
@ SSL_HAND_CertificateVerify
Definition: SSLTypes.h:164
@ SSL_HAND_ServerKeyExchange
Definition: SSLTypes.h:161
@ SSL_HAND_Certificate
both directions.
Definition: SSLTypes.h:160
@ SSL_HAND_ServerHello
sent from server back to client. cSSLMsgHandHello
Definition: SSLTypes.h:158
@ SSL_HAND_ServerHelloDone
SSL3_MT_SERVER_DONE.
Definition: SSLTypes.h:163
@ SSL_HAND_NEW_SESSION_TICKET
Definition: SSLTypes.h:159
@ SSL_HAND_Finished
Definition: SSLTypes.h:166
@ SSL_HAND_ClientKeyExchange
Definition: SSLTypes.h:165
@ SSL_HAND_HelloRequest
Server can send this to the client.
Definition: SSLTypes.h:156
SSL_VERSION_MAJOR_TYPE
Version as Major, minor byte order. 0x300=SSL 3.0, 0x301=TLS 1.0, 0x303=TLS 1.2.
Definition: SSLTypes.h:62
@ SSL_VERSION_MAJOR_BYTE
Definition: SSLTypes.h:63
SSL_STATE_TYPE
Definition: SSLTypes.h:20
@ SSL_Unknown
Definition: SSLTypes.h:24
@ SSL_CLIENT_FINISHED
Definition: SSLTypes.h:35
@ SSL_ServerHello_DONE
Definition: SSLTypes.h:30
@ SSL_SERVER_CERTIFICATE
Definition: SSLTypes.h:27
@ SSL_CLIENT_KEY_EXCHANGE
Definition: SSLTypes.h:32
@ SSL_SERVER_KEY_EXCHANGE
Definition: SSLTypes.h:28
@ SSL_HANDSHAKE_WRAPUP
Definition: SSLTypes.h:39
@ SSL_SERVER_CHANGE_CIPHER_SPEC
Definition: SSLTypes.h:36
@ SSL_FLUSH_BUFFERS
Definition: SSLTypes.h:38
@ SSL_CERTIFICATE_VERIFY
Definition: SSLTypes.h:33
@ SSL_CLIENT_CERTIFICATE
Definition: SSLTypes.h:31
@ SSL_ServerHello
Definition: SSLTypes.h:26
@ SSL_CERTIFICATE_REQUEST
Definition: SSLTypes.h:29
@ SSL_CLIENT_CHANGE_CIPHER_SPEC
Definition: SSLTypes.h:34
@ SSL_ClientHello
Definition: SSLTypes.h:25
@ SSL_SERVER_FINISHED
Definition: SSLTypes.h:37
@ SSL_HANDSHAKE_COMPLETE
Definition: SSLTypes.h:40
WORD SSL_CipherSuite_t
SSL_CipherSuite_TYPE stored as 2 bytes.
Definition: SSLTypes.h:110
SSL_CipherSuite_TYPE
Definition: SSLTypes.h:88
@ SSL_EMPTY_RENEGOTIATION_INFO
Indicate no suite selected yet.
Definition: SSLTypes.h:102
@ SSL_FALLBACK_SCSV
draft-ietf-tls-downgrade-scsv-00
Definition: SSLTypes.h:103
@ TLS_NULL_WITH_NULL_NULL
Definition: SSLTypes.h:100
SSL_ALERT_LEVEL_TYPE
Definition: SSLTypes.h:227
@ SSL_ALERT_LEVEL_WARNING
Definition: SSLTypes.h:230
@ SSL_ALERT_LEVEL_FATAL
Definition: SSLTypes.h:231
Definition: SSLTypes.h:270