9 #include "TlsChiper.hpp"
10 #include "LibStreamOut.hpp"
11 #include "LibStreamIn.hpp"
22 RESULT handshake(LibStreamIn& in, LibStreamOut& out);
29 }__attribute__((packed)) PROTOCOL_VERSION;
31 typedef enum :uint8_t {
32 CT_CHANGE_CIPHER_SPEC = 20,
35 CT_APPLICATION_DATA = 23
40 PROTOCOL_VERSION version;
42 }__attribute__((packed)) TLS_HEADER;
44 typedef enum:uint8_t {
49 typedef enum :uint8_t {
51 AD_UNEXPECTED_MESSAGE = 10,
52 AD_BAD_RECORD_MAC = 20,
53 AD_DECRYPTION_FAILED = 21,
54 AD_RECORD_OVERFLOW = 22,
55 AD_DECOMPRESSION_FAILURE = 30,
56 AD_HANDSHAKE_FAILURE = 40,
57 AD_BAD_CERTIFICATE = 42,
58 AD_UNSUPPORTED_CERTIFICATE = 43,
59 AD_CERTIFICATE_REVOKED = 44,
60 AD_CERTIFICATE_EXPIRED = 45,
61 AD_CERTIFICATE_UNKNOWN = 46,
62 AD_ILLEGAL_PARAMETER = 47,
64 AD_ACCESS_DENIED = 49,
66 AD_DECRYPT_ERROR = 51,
67 AD_EXPORT_RESTRICTION = 60,
68 AD_PROTOCOL_VERSION = 70,
69 AD_INSUFFICIENT_SECURITY = 71,
70 AD_INTERNAL_ERROR = 80,
71 AD_USER_CANCELED = 90,
72 AD_NO_RENEGOTIATION = 100,
77 ALERT_DESCRIPTION description;
78 }__attribute__((packed)) Alert;
80 typedef enum :uint8_t {
85 AT_SERVER_KEY_EXCHANGE = 12,
86 AT_CERTIFICATE_REQUEST = 13,
87 AT_SERVER_HELLO_DONE = 14,
88 AT_CERTIFICATE_VERIFY = 15,
89 AT_CLIENT_KEY_EXCHANGE = 16,
94 HANDSHAKE_TYPE msg_type;
97 PROTOCOL_VERSION version;
98 }__attribute__((packed)) HANDSHAKE;
101 uint32_t gmt_unix_time;
102 uint8_t random_bytes[28];
103 }__attribute__((packed)) RANDOM;
106 PROTOCOL_VERSION client_version;
111 }__attribute__((packed)) CLIENT_HELLO;
114 PROTOCOL_VERSION server_version;
119 }__attribute__((packed)) SERVER_HELLO;
127 const static CIPHER_SUITE mCiphers[];
129 const static int CIPHER_COUNT = 2;