WL865E4-P  36.07.001
m2mb_ssl.h
Go to the documentation of this file.
1 /*===============================================================================================*/
2 /* >>> Copyright (C) Telit Communications S.p.A. Italy All Rights Reserved. <<< */
28 /* Global declarations ==========================================================================*/
29 #ifndef M2MB_SSL_H_
30 #define M2MB_SSL_H_
31 /* Failure return codes MUST be < 0 */
32 #include <stdint.h>
33 #include <string.h>
34 #include "m2mb_types.h"
35 #include "m2mb_os.h"
36 #include "nwk/m2mb_socket.h"
37 #include "m2mb_nwif.h"
38 
39 
53 /*-----------------------------------------------------------------------------------------------*/
54 
59 /*-----------------------------------------------------------------------------------------------*/
60 
61 #define M2MB_SSL_FAILURE -1
62 #define M2MB_SSL_ARG_FAIL -6
63 #define M2MB_SSL_PLATFORM_FAIL -7
64 #define M2MB_SSL_MEM_FAIL -8
65 #define M2MB_SSL_LIMIT_FAIL -9
66 #define M2MB_SSL_UNSUPPORTED_FAIL -10
67 #define M2MB_SSL_PROTOCOL_FAIL -12
68 #define M2MB_SSL_TIMEOUT_FAIL -13
69 #define M2MB_SSL_INTERRUPT_FAIL -14
70 #define M2MB_SSL_WRITE_ERROR -15
71 #define M2MB_SSL_READ_ERROR -16
72 #define M2MB_SSL_END_OF_FILE -17
73 #define M2MB_SSL_CLOSE_NOTIFY -18
74 #define M2MB_SSL_CERT_AUTH_FAIL -35
75 #define M2MB_SSL_FULL -50
76 #define M2MB_SSL_ALERT -54
77 #define M2MB_SSL_FILE_NOT_FOUND -55
79 #define M2MB_SSL_FALSE 0
80 #define M2MB__SSL_TRUE 1
81 #define M2MB_SSL_MAX_CA_LIST 10
83 #define M2MB_SSL_INVALID_HANDLE (0)
85 typedef enum SSL_CFG_PARAM
86 {
100 
101 
102 /* Global typedefs ==============================================================================*/
103 
104 //typedef HANDLE M2MB_SSL_LOCATIONS_STORE;
108 
111 {
118 
121 {
178 
181 {
188 
189 
192 {
199 
200 
203 {
207 
208 
210 {
217 
218 
223 typedef struct M2MB_SSL_PSK_TABLE_T
224 {
230 
232 typedef struct M2MB_SSL_CERT_T
233 {
240 
242 typedef struct M2MB_SSL_CA_INFO_T
243 {
247 
249 typedef struct M2MB_SSL_CA_LIST_T
250 {
254 
256 typedef struct M2MB_SSL_CERT_LIST_T {
257  char name[10][64];
259 
261 typedef union
262 {
267 
270 {
275 
278 {
283 
284 
285 #define M2MB_SSL_MAX_CIPHER_COUNT 64
286 #define M2MB_SSL_MAX_CERT_NAME_LEN 64
287 #define M2MB_SSL_MAX_SNI_NAME_LEN (64)
290 typedef struct {
291  uint8_t domain ;
294  uint8_t time_Validity ;
297  uint8_t send_Alert ;
300  char match_Name[M2MB_SSL_MAX_CERT_NAME_LEN];
303 
305 typedef struct {
306 
308  /*<* Role of the SSL instance- Client/Server */
309 #if 0
310  UINT32 CipherSuitesNum;
311 
312  UINT32 CipherSuites[M2MB_SSL_MAX_CIPHER_COUNT];
315  //uint16_t sni_name_size;
317 #endif
318 
319  uint16_t max_frag_Len;
328  void *alpn;
331  void *extensions;
336 
338 typedef struct M2MB_SSL_CONFIG_T
339 {
352 
353 
354 
355 #endif
356 
357 /* Global functions =============================================================================*/
358 /* ======================================================================= */
359 
360 
361 /*-----------------------------------------------------------------------------------------------*/
362 
390 /*-----------------------------------------------------------------------------------------------*/
392 
393 /*-----------------------------------------------------------------------------------------------*/
476 /*-----------------------------------------------------------------------------------------------*/
477 INT32 m2mb_ssl_set_config( M2MB_SSL_CTXT_HANDLE sslContextHndl, SSL_CFG_PARAM_E CONF_ID, INT8* CONF_VAL );
478 
479 
515 /*-----------------------------------------------------------------------------------------------*/
516 void m2mb_ssl_close( M2MB_SSL_CTXT_HANDLE sslContextHndl );
517 
518 
569 /*-----------------------------------------------------------------------------------------------*/
570 INT32 m2mb_ssl_secure_protocol(M2MB_SSL_CTXT_HANDLE sslContextHndl, M2MB_SSL_UPPROTO_TYPE_E protoType, VOID *protoCtxHndl);
571 
631 /*-----------------------------------------------------------------------------------------------*/
633 
634 
701 /*-----------------------------------------------------------------------------------------------*/
702 INT32 m2mb_ssl_write( M2MB_SSL_CTXT_HANDLE sslContextHndl, void *buf, UINT32 len );
703 
772 /*-----------------------------------------------------------------------------------------------*/
773 INT32 m2mb_ssl_read( M2MB_SSL_CTXT_HANDLE sslContextHndl, void *buf, UINT32 len );
774 
775 
845 /*-----------------------------------------------------------------------------------------------*/
847 
848 
901 /*-----------------------------------------------------------------------------------------------*/
902 
903 INT32 m2mb_ssl_cert_load( M2MB_SSL_CTXT_HANDLE sslCtxtHndl, M2MB_SSL_CERT_TYPE_E sslCertType, CHAR *name );
904 
905 
950 /*-----------------------------------------------------------------------------------------------*/
951 
953 
954 
994 /*-----------------------------------------------------------------------------------------------*/
996 
997 
1035  /*-----------------------------------------------------------------------------------------------*/
1036  INT32
1037 m2mb_ssl_status(M2MB_SSL_CTXT_HANDLE sslContextHndl);
1038 
1039 
1094  /*-----------------------------------------------------------------------------------------------*/
1095 
1096  INT32
1097  m2mb_ssl_accept( M2MB_SSL_CTXT_HANDLE sslSvrContextHndl, M2MB_SOCKET_BSD_SOCKET socket_fd,
1098  M2MB_SSL_CTXT_HANDLE* sslClientCtxHndl);
1099 
1133 /*-----------------------------------------------------------------------------------------------*/
1134 
1136 
1167 /*-----------------------------------------------------------------------------------------------*/
1168 
1169 
1171 
1202 /*-----------------------------------------------------------------------------------------------*/
1203 
1204 INT32 m2mb_ssl_cert_search(M2MB_SSL_CERT_TYPE_E sslCertType , CHAR *certName);
1205 
1206 
1210 /*-----------------------------------------------------------------------------------------------*/
1211 
1212 
1213 
M2MB_SSL_CERT_FMT_E
SSL certificate format enum.
Definition: m2mb_ssl.h:202
unsigned char UINT8
Definition: m2mb_types.h:83
INT32 m2mb_ssl_set_config(M2MB_SSL_CTXT_HANDLE sslContextHndl, SSL_CFG_PARAM_E CONF_ID, INT8 *CONF_VAL)
Set SSL configuration on the previously created SSL context.
uint16_t max_frag_fen_neg_disable
Definition: m2mb_ssl.h:322
M2MB_SSL_CA_INFO_T * ca_Info[M2MB_SSL_MAX_CA_LIST]
Definition: m2mb_ssl.h:252
enum SSL_CFG_PARAM SSL_CFG_PARAM_E
INT32 m2mb_ssl_cert_store(M2MB_SSL_CERT_TYPE_E sslCertType, M2MB_SSL_SEC_INFO_U sslSecInfo, CHAR *name, M2MB_SSL_CERT_FMT_E format)
Store certificates from buffer.
INT32 m2mb_ssl_cert_delete(M2MB_SSL_CERT_TYPE_E sslCertType, CHAR *name)
Delete certificates.
UINT32 key_Size
Definition: m2mb_ssl.h:237
#define M2MB_SSL_MAX_CA_LIST
Definition: m2mb_ssl.h:81
HANDLE M2MB_SSL_CTXT_HANDLE
SSL context handle. This is obtained from m2mb_ssl_create_ctxt API and then used in subsequent SSL ...
Definition: m2mb_ssl.h:107
M2MB_SSL_PSK_TABLE_T psk_Tbl
Definition: m2mb_ssl.h:265
INT32 m2mb_ssl_write(M2MB_SSL_CTXT_HANDLE sslContextHndl, void *buf, UINT32 len)
Writes data to the SSL connection.
M2MB_SSL_CONFIG_MORE_T cfg
Definition: m2mb_ssl.h:349
M2MB_SSL_CA_LIST_T ca_List
Definition: m2mb_ssl.h:264
INT32 m2mb_ssl_cert_search(M2MB_SSL_CERT_TYPE_E sslCertType, CHAR *certName)
Search for the given certificate in the system.
INT32 m2mb_ssl_read(M2MB_SSL_CTXT_HANDLE sslContextHndl, void *buf, UINT32 len)
Read len bytes from SSL connection into buf.
#define M2MB_SSL_MAX_SNI_NAME_LEN
Definition: m2mb_ssl.h:287
Network Interface.
UINT8 m2mb_ssl_get_certloadStatus(M2MB_SSL_CTXT_HANDLE sslCtxtHndl, M2MB_SSL_CERT_TYPE_E sslCertType)
Check if the certificate is loaded in the SSL context.
M2MB_SSL_CIPHER_SUITE_E
TLS ciphersuites enum.
Definition: m2mb_ssl.h:120
INT32 m2mb_ssl_cert_load(M2MB_SSL_CTXT_HANDLE sslCtxtHndl, M2MB_SSL_CERT_TYPE_E sslCertType, CHAR *name)
Load certificates in the SSL context.
INT32 m2mb_ssl_status(M2MB_SSL_CTXT_HANDLE sslContextHndl)
Returns the status of an SSL connection.
M2MB_SSL_UPPROTO_TYPE
Definition: m2mb_ssl.h:209
M2MB_SSL_SSL_ROLE_E role
Definition: m2mb_ssl.h:307
signed char INT8
Definition: m2mb_types.h:78
INT32 m2mb_ssl_cert_get(M2MB_SSL_CERT_TYPE_E sslCertType, M2MB_SSL_CERT_LIST_T *sslCertList)
It gets the list of the certificates stored.
Basic functionality of Operating systems.
M2MB_SSL_CERT_T cert
Definition: m2mb_ssl.h:263
SSL Cert list structure.
Definition: m2mb_ssl.h:256
M2MB_SSL_CIPHER_SUITE_E CipherSuites[M2MB_SSL_MAX_CIPHER_COUNT]
Definition: m2mb_ssl.h:344
struct M2MB_SSL_CONFIG_T M2MB_SSL_CONFIG_T
Structure to configure an SSL connection.
unsigned long int UINT32
Definition: m2mb_types.h:85
M2MB_SSL_AUTH_TYPE_E AuthType
Definition: m2mb_ssl.h:342
char CHAR
Definition: m2mb_types.h:74
M2MB_SSL_SSL_ROLE_E
SSL object role.
Definition: m2mb_ssl.h:277
UINT32 cert_Size
Definition: m2mb_ssl.h:235
UINT8 * pass_Key
Definition: m2mb_ssl.h:238
#define M2MB_SSL_MAX_CIPHER_COUNT
Definition: m2mb_ssl.h:285
UINT8 CipherSuitesNum
Definition: m2mb_ssl.h:347
UINT8 * cert_Buf
Definition: m2mb_ssl.h:234
struct M2MB_SSL_PSK_TABLE_T M2MB_SSL_PSK_TABLE_T
PSK table structure. Structure to hold a preshared key (PSK) used to populate the PSK table...
char name[10][64]
Definition: m2mb_ssl.h:257
struct M2MB_SSL_CERT_T M2MB_SSL_CERT_T
SSL certificate information for conversion and storage.
SSL certificate information for conversion and storage.
Definition: m2mb_ssl.h:232
void VOID
Definition: m2mb_types.h:72
void m2mb_ssl_close(M2MB_SSL_CTXT_HANDLE sslContextHndl)
deletes an m2mb SSL context created during m2mb_ssl_init()
M2MB_SSL_AUTH_TYPE_E
SSL authentication types enum.
Definition: m2mb_ssl.h:269
struct M2MB_SSL_CA_INFO_T M2MB_SSL_CA_INFO_T
SSL certificate authority list information.
general Socket support
INT32 m2mb_ssl_secure_protocol(M2MB_SSL_CTXT_HANDLE sslContextHndl, M2MB_SSL_UPPROTO_TYPE_E protoType, VOID *protoCtxHndl)
Configures the SSL security on the given protocol connection.
M2MB_SSL_CONFIG_VERIFY_POLICY_T policy
Definition: m2mb_ssl.h:334
Structure to specify the certificate verification policy.
Definition: m2mb_ssl.h:290
M2MB_SSL_CTXT_HANDLE m2mb_ssl_init(M2MB_SSL_SSL_ROLE_E role)
Initialize SSL TLS context.
void * HANDLE
Definition: m2mb_types.h:95
signed int INT32
Definition: m2mb_types.h:80
struct M2MB_SSL_CA_LIST_T M2MB_SSL_CA_LIST_T
SSL certificate authority information for conversion and storage.
SSL certificate authority information for conversion and storage.
Definition: m2mb_ssl.h:249
PSK table structure. Structure to hold a preshared key (PSK) used to populate the PSK table...
Definition: m2mb_ssl.h:223
INT32 m2mb_ssl_connect(M2MB_SSL_CTXT_HANDLE sslContextHndl, M2MB_SOCKET_BSD_SOCKET socket_fd)
Performs SSL Client connection.
M2MB_SSL_PEMCERT_TYPE_E
SSL certificate type enum.
Definition: m2mb_ssl.h:191
enum M2MB_SSL_UPPROTO_TYPE M2MB_SSL_UPPROTO_TYPE_E
Structure to configure an SSL connection.
Definition: m2mb_ssl.h:338
M2M base types (ver. )
SSL Certificate information union.
Definition: m2mb_ssl.h:261
iHANDLE M2MB_SOCKET_BSD_SOCKET
Definition: m2mb_socket.h:228
UINT32 m2mb_ssl_get_internal_ssl_obj(M2MB_SSL_CTXT_HANDLE sslContextHndl)
It get the list of certificates stored.
SSL certificate authority list information.
Definition: m2mb_ssl.h:242
struct M2MB_SSL_CERT_LIST_T M2MB_SSL_CERT_LIST_T
SSL Cert list structure.
UINT8 * key_Buf
Definition: m2mb_ssl.h:236
INT32 m2mb_ssl_accept(M2MB_SSL_CTXT_HANDLE sslSvrContextHndl, M2MB_SOCKET_BSD_SOCKET socket_fd, M2MB_SSL_CTXT_HANDLE *sslClientCtxHndl)
Accepts an incoming SSL connection from the client.
M2MB_SSL_PROTOCOL_VERSION_E ProtVers
Definition: m2mb_ssl.h:340
M2MB_SSL_PROTOCOL_VERSION_E
TLS protocol version enum.
Definition: m2mb_ssl.h:110
Additional SSL configurations structure.
Definition: m2mb_ssl.h:305
#define M2MB_SSL_MAX_CERT_NAME_LEN
Definition: m2mb_ssl.h:286
M2MB_SSL_CERT_TYPE_E
SSL certificate type enum.
Definition: m2mb_ssl.h:180