27 #ifndef M2M_M2MB_SSL_H
28 #define M2M_M2MB_SSL_H
33 #define M2MB_SSL_SUCCESS 0
34 #define M2MB_SSL_FAILURE -1
35 #define M2MB_SSL_ARG_FAIL -6
36 #define M2MB_SSL_PLATFORM_FAIL -7
37 #define M2MB_SSL_MEM_FAIL -8
38 #define M2MB_SSL_LIMIT_FAIL -9
39 #define M2MB_SSL_UNSUPPORTED_FAIL -10
40 #define M2MB_SSL_PROTOCOL_FAIL -12
41 #define M2MB_SSL_TIMEOUT_FAIL -13
42 #define M2MB_SSL_INTERRUPT_FAIL -14
43 #define M2MB_SSL_WRITE_ERROR -15
44 #define M2MB_SSL_READ_ERROR -16
45 #define M2MB_SSL_END_OF_FILE -17
46 #define M2MB_SSL_CLOSE_NOTIFY -18
47 #define M2MB_SSL_CERT_AUTH_FAIL -35
48 #define M2MB_SSL_FULL -50
49 #define M2MB_SSL_ALERT -54
50 #define M2MB_SSL_FILE_NOT_FOUND -55
52 #define M2MB_SSL_FALSE 0
53 #define M2MB__SSL_TRUE 1
55 #define M2MB_SSL_MAX_CA_LIST 10
56 #define M2MB_SSL_MAX_CIPHERSUITES 8
58 #define M2MB_QC_NOT_VALID_CIPHER 0
62 typedef HANDLE M2MB_SSL_CTXT_HANDLE;
63 typedef HANDLE M2MB_SSL_CONFIG_HANDLE;
64 typedef uiHANDLE M2MB_SSL_CONNECTION_HANDLE;
67 typedef enum M2MB_SSL_PROTOCOL_VERSION_E
69 M2MB_SSL_PROTOCOL_TLS_1_0,
70 M2MB_SSL_PROTOCOL_TLS_1_1,
71 M2MB_SSL_PROTOCOL_TLS_1_2,
72 M2MB_SSL_PROTOCOL_TLS_1_3,
73 M2MB_SSL_PROTOCOL_DTLS_1_0,
74 M2MB_SSL_PROTOCOL_DTLS_1_2,
76 } M2MB_SSL_PROTOCOL_VERSION_E;
79 typedef enum M2MB_SSL_CIPHER_SUITE_E
81 M2MB_TLS_PSK_WITH_RC4_128_SHA,
82 M2MB_TLS_PSK_WITH_3DES_EDE_CBC_SHA,
83 M2MB_TLS_PSK_WITH_AES_128_CBC_SHA,
84 M2MB_TLS_PSK_WITH_AES_256_CBC_SHA,
85 M2MB_TLS_PSK_WITH_AES_128_GCM_SHA256,
86 M2MB_TLS_PSK_WITH_AES_256_GCM_SHA384,
87 M2MB_TLS_PSK_WITH_AES_128_CBC_SHA256,
88 M2MB_TLS_PSK_WITH_AES_256_CBC_SHA384,
89 M2MB_TLS_RSA_WITH_AES_128_CBC_SHA,
90 M2MB_TLS_DHE_RSA_WITH_AES_128_CBC_SHA,
91 M2MB_TLS_RSA_WITH_AES_256_CBC_SHA,
92 M2MB_TLS_DHE_RSA_WITH_AES_256_CBC_SHA,
93 M2MB_TLS_RSA_WITH_AES_128_CBC_SHA256,
94 M2MB_TLS_RSA_WITH_AES_256_CBC_SHA256,
95 M2MB_TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,
96 M2MB_TLS_DHE_RSA_WITH_AES_256_CBC_SHA256,
97 M2MB_TLS_RSA_WITH_AES_128_GCM_SHA256,
98 M2MB_TLS_RSA_WITH_AES_256_GCM_SHA384,
99 M2MB_TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,
100 M2MB_TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,
101 M2MB_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA,
102 M2MB_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA,
103 M2MB_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
104 M2MB_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
105 M2MB_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA,
106 M2MB_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA,
107 M2MB_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
108 M2MB_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
109 M2MB_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,
110 M2MB_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,
111 M2MB_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256,
112 M2MB_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384,
113 M2MB_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,
114 M2MB_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,
115 M2MB_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256,
116 M2MB_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384,
117 M2MB_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
118 M2MB_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
119 M2MB_TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256,
120 M2MB_TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384,
121 M2MB_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
122 M2MB_TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
123 M2MB_TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256,
124 M2MB_TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384,
125 M2MB_TLS_RSA_WITH_AES_128_CCM,
126 M2MB_TLS_RSA_WITH_AES_256_CCM,
127 M2MB_TLS_DHE_RSA_WITH_AES_128_CCM,
128 M2MB_TLS_DHE_RSA_WITH_AES_256_CCM,
129 M2MB_TLS_RSA_WITH_AES_128_CCM_8,
130 M2MB_TLS_RSA_WITH_AES_256_CCM_8,
131 M2MB_TLS_DHE_RSA_WITH_AES_128_CCM_8,
132 M2MB_TLS_DHE_RSA_WITH_AES_256_CCM_8,
133 M2MB_TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256,
134 M2MB_TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256,
135 M2MB_TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256,
138 M2MB_TLS_AES_128_GCM_SHA256,
139 M2MB_TLS_AES_256_GCM_SHA384,
140 M2MB_TLS_CHACHA20_POLY1305_SHA256,
141 M2MB_TLS_AES_128_CCM_SHA256,
142 M2MB_TLS_AES_128_CCM_8_SHA256,
143 } M2MB_SSL_CIPHER_SUITE_E;
145 typedef enum M2MB_SSL_CERT_TYPE_E
150 } M2MB_SSL_CERT_TYPE_E;
197 typedef enum M2MB_SSL_AUTH_TYPE_E
200 M2MB_SSL_SERVER_AUTH,
201 M2MB_SSL_SERVER_CLIENT_AUTH
202 } M2MB_SSL_AUTH_TYPE_E;
206 M2MB_SSL_PROTOCOL_VERSION_E ProtVers;
207 M2MB_SSL_AUTH_TYPE_E AuthType;
208 M2MB_SSL_CIPHER_SUITE_E *CipherSuites;
209 UINT8 CipherSuitesNum;
214 M2MB_SSL_NAME_CHECK = 0,
215 M2MB_SSL_NAME_SNI = 1,
216 M2MB_SSL_DTLS_SET_SOCKET_NAME = 2,
217 ENUM_TO_INT( M2MB_SSL_CONF_REQUEST_E )
218 } M2MB_SSL_CONF_REQUEST_E;
495 M2MB_SSL_CONNECTION_HANDLE
m2mb_ssl_secure_socket( M2MB_SSL_CONFIG_HANDLE sslConfigHndl, M2MB_SSL_CTXT_HANDLE sslCtxtHndl, M2MB_SOCKET_BSD_SOCKET socket_fd, INT32 *result );
579 INT32
m2mb_ssl_write( M2MB_SSL_CONNECTION_HANDLE sslConnectionHandle,
void *buf, UINT32 len );
623 INT32
m2mb_ssl_read( M2MB_SSL_CONNECTION_HANDLE sslConnectionHandle,
void *buf, UINT32 len );
781 INT32
m2mb_ssl_cert_load( M2MB_SSL_CTXT_HANDLE sslCtxtHndl, M2MB_SSL_CERT_TYPE_E sslCertType, CHAR *name );
900 INT32
m2mb_ssl_config( M2MB_SSL_CONFIG_HANDLE sslConfigHndl, INT32 cmd,
void *argp );