WL865E4-P  36.07.001
m2mb_ssl.h File Reference

SSL TLS support. More...

#include <stdint.h>
#include <string.h>
#include "m2mb_types.h"
#include "m2mb_os.h"
#include "nwk/m2mb_socket.h"
#include "m2mb_nwif.h"

Go to the source code of this file.

Data Structures

struct  M2MB_SSL_PSK_TABLE_T
 PSK table structure. Structure to hold a preshared key (PSK) used to populate the PSK table. The PSK table is used by TLS PSK cipher suites. More...
 
struct  M2MB_SSL_CERT_T
 SSL certificate information for conversion and storage. More...
 
struct  M2MB_SSL_CA_INFO_T
 SSL certificate authority list information. More...
 
struct  M2MB_SSL_CA_LIST_T
 SSL certificate authority information for conversion and storage. More...
 
struct  M2MB_SSL_CERT_LIST_T
 SSL Cert list structure. More...
 
union  M2MB_SSL_SEC_INFO_U
 SSL Certificate information union. More...
 
struct  M2MB_SSL_CONFIG_VERIFY_POLICY_T
 Structure to specify the certificate verification policy. More...
 
struct  M2MB_SSL_CONFIG_MORE_T
 Additional SSL configurations structure. More...
 
struct  M2MB_SSL_CONFIG_T
 Structure to configure an SSL connection. More...
 
#define M2MB_SSL_FAILURE   -1
 
#define M2MB_SSL_ARG_FAIL   -6
 
#define M2MB_SSL_PLATFORM_FAIL   -7
 
#define M2MB_SSL_MEM_FAIL   -8
 
#define M2MB_SSL_LIMIT_FAIL   -9
 
#define M2MB_SSL_UNSUPPORTED_FAIL   -10
 
#define M2MB_SSL_PROTOCOL_FAIL   -12
 
#define M2MB_SSL_TIMEOUT_FAIL   -13
 
#define M2MB_SSL_INTERRUPT_FAIL   -14
 
#define M2MB_SSL_WRITE_ERROR   -15
 
#define M2MB_SSL_READ_ERROR   -16
 
#define M2MB_SSL_END_OF_FILE   -17
 
#define M2MB_SSL_CLOSE_NOTIFY   -18
 
#define M2MB_SSL_CERT_AUTH_FAIL   -35
 
#define M2MB_SSL_FULL   -50
 
#define M2MB_SSL_ALERT   -54
 
#define M2MB_SSL_FILE_NOT_FOUND   -55
 
#define M2MB_SSL_FALSE   0
 
#define M2MB__SSL_TRUE   1
 
#define M2MB_SSL_MAX_CA_LIST   10
 
#define M2MB_SSL_INVALID_HANDLE   (0)
 
#define M2MB_SSL_MAX_CIPHER_COUNT   64
 
#define M2MB_SSL_MAX_CERT_NAME_LEN   64
 
#define M2MB_SSL_MAX_SNI_NAME_LEN   (64)
 
enum  SSL_CFG_PARAM {
  M2MB_SSL_CONF_INVALID = 0,
  M2MB_SSL_CONF_PROTOCOL,
  M2MB_SSL_CONF_CACERT,
  M2MB_SSL_CONF_CERT,
  M2MB_SSL_CONF_CIPHER,
  M2MB_SSL_CONF_TIME,
  M2MB_SSL_CONF_ALERT,
  M2MB_SSL_CONF_DOMAIN,
  M2MB_SSL_CONF_MAX_FRAG_LEN,
  M2MB_SSL_CONF_NEG_DISABLE,
  M2MB_SSL_CONF_SNI,
  M2MB_SSL_CONF_ALPN
}
 
enum  M2MB_SSL_PROTOCOL_VERSION_E {
  M2MB_SSL_PROTOCOL_TLS_1_0,
  M2MB_SSL_PROTOCOL_TLS_1_1,
  M2MB_SSL_PROTOCOL_TLS_1_2,
  M2MB_SSL_PROTOCOL_DTLS_1_0,
  M2MB_SSL_PROTOCOL_DTLS_1_2
}
 TLS protocol version enum. More...
 
enum  M2MB_SSL_CIPHER_SUITE_E {
  M2MB_TLS_PSK_WITH_RC4_128_SHA,
  M2MB_TLS_PSK_WITH_3DES_EDE_CBC_SHA,
  M2MB_TLS_PSK_WITH_AES_128_CBC_SHA,
  M2MB_TLS_PSK_WITH_AES_256_CBC_SHA,
  M2MB_TLS_PSK_WITH_AES_128_GCM_SHA256,
  M2MB_TLS_PSK_WITH_AES_256_GCM_SHA384,
  M2MB_TLS_PSK_WITH_AES_128_CBC_SHA256,
  M2MB_TLS_PSK_WITH_AES_256_CBC_SHA384,
  M2MB_TLS_RSA_WITH_AES_128_CBC_SHA,
  M2MB_TLS_DHE_RSA_WITH_AES_128_CBC_SHA,
  M2MB_TLS_RSA_WITH_AES_256_CBC_SHA,
  M2MB_TLS_DHE_RSA_WITH_AES_256_CBC_SHA,
  M2MB_TLS_RSA_WITH_AES_128_CBC_SHA256,
  M2MB_TLS_RSA_WITH_AES_256_CBC_SHA256,
  M2MB_TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,
  M2MB_TLS_DHE_RSA_WITH_AES_256_CBC_SHA256,
  M2MB_TLS_RSA_WITH_AES_128_GCM_SHA256,
  M2MB_TLS_RSA_WITH_AES_256_GCM_SHA384,
  M2MB_TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,
  M2MB_TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,
  M2MB_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA,
  M2MB_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA,
  M2MB_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
  M2MB_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
  M2MB_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA,
  M2MB_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA,
  M2MB_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
  M2MB_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
  M2MB_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,
  M2MB_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,
  M2MB_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256,
  M2MB_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384,
  M2MB_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,
  M2MB_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,
  M2MB_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256,
  M2MB_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384,
  M2MB_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
  M2MB_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
  M2MB_TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256,
  M2MB_TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384,
  M2MB_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
  M2MB_TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
  M2MB_TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256,
  M2MB_TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384,
  M2MB_TLS_RSA_WITH_AES_128_CCM,
  M2MB_TLS_RSA_WITH_AES_256_CCM,
  M2MB_TLS_DHE_RSA_WITH_AES_128_CCM,
  M2MB_TLS_DHE_RSA_WITH_AES_256_CCM,
  M2MB_TLS_RSA_WITH_AES_128_CCM_8,
  M2MB_TLS_RSA_WITH_AES_256_CCM_8,
  M2MB_TLS_DHE_RSA_WITH_AES_128_CCM_8,
  M2MB_TLS_DHE_RSA_WITH_AES_256_CCM_8,
  M2MB_TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256,
  M2MB_TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256,
  M2MB_TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256
}
 TLS ciphersuites enum. More...
 
enum  M2MB_SSL_CERT_TYPE_E {
  M2MB_SSL_CACERT,
  M2MB_SSL_CERT,
  M2MB_SSL_PRIVKEY,
  M2MB_SSL_PSKTABLE,
  M2MB_SSL_CERTALL
}
 SSL certificate type enum. More...
 
enum  M2MB_SSL_PEMCERT_TYPE_E {
  M2MB_SSL_PEM_CERT,
  M2MB_SSL_PEM_PKCS1_PRIVKEY,
  M2MB_SSL_PEM_PKCS8_PRIVKEY,
  M2MB_SSL_PEM_PKCS8_ENC_PRIVKEY,
  M2MB_SSL_PEM_EC_PRIVKEY
}
 SSL certificate type enum. More...
 
enum  M2MB_SSL_CERT_FMT_E {
  M2MB_SSL_DER,
  M2MB_SSL_PEM
}
 SSL certificate format enum. More...
 
enum  M2MB_SSL_UPPROTO_TYPE {
  M2MB_SSL_CLIENT,
  M2MB_SSL_HTTPC,
  M2MB_SSL_HTTPD,
  M2MB_SSL_MQTT,
  M2MB_SSL_WEBSOCKET
}
 
enum  M2MB_SSL_AUTH_TYPE_E {
  M2MB_SSL_NO_AUTH,
  M2MB_SSL_SERVER_AUTH,
  M2MB_SSL_SERVER_CLIENT_AUTH
}
 SSL authentication types enum. More...
 
enum  M2MB_SSL_SSL_ROLE_E {
  M2MB_SSL_SSL_ROLE_SERVER_E = 0,
  M2MB_SSL_SSL_ROLE_CLIENT_E = 1
}
 SSL object role. More...
 
typedef enum SSL_CFG_PARAM SSL_CFG_PARAM_E
 
typedef HANDLE M2MB_SSL_CTXT_HANDLE
 SSL context handle.
This is obtained from m2mb_ssl_create_ctxt API and then used in subsequent SSL APIs. More...
 
typedef enum M2MB_SSL_PROTOCOL_VERSION_E M2MB_SSL_PROTOCOL_VERSION_E
 TLS protocol version enum. More...
 
typedef enum M2MB_SSL_CIPHER_SUITE_E M2MB_SSL_CIPHER_SUITE_E
 TLS ciphersuites enum. More...
 
typedef enum M2MB_SSL_CERT_TYPE_E M2MB_SSL_CERT_TYPE_E
 SSL certificate type enum. More...
 
typedef enum M2MB_SSL_PEMCERT_TYPE_E M2MB_SSL_PEMCERT_TYPE_E
 SSL certificate type enum. More...
 
typedef enum M2MB_SSL_CERT_FMT_E M2MB_SSL_CERT_FMT_E
 SSL certificate format enum. More...
 
typedef enum M2MB_SSL_UPPROTO_TYPE M2MB_SSL_UPPROTO_TYPE_E
 
typedef 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. The PSK table is used by TLS PSK cipher suites. More...
 
typedef struct M2MB_SSL_CERT_T M2MB_SSL_CERT_T
 SSL certificate information for conversion and storage. More...
 
typedef struct M2MB_SSL_CA_INFO_T M2MB_SSL_CA_INFO_T
 SSL certificate authority list information. More...
 
typedef struct M2MB_SSL_CA_LIST_T M2MB_SSL_CA_LIST_T
 SSL certificate authority information for conversion and storage. More...
 
typedef struct M2MB_SSL_CERT_LIST_T M2MB_SSL_CERT_LIST_T
 SSL Cert list structure. More...
 
typedef enum M2MB_SSL_AUTH_TYPE_E M2MB_SSL_AUTH_TYPE_E
 SSL authentication types enum. More...
 
typedef enum M2MB_SSL_SSL_ROLE_E M2MB_SSL_SSL_ROLE_E
 SSL object role. More...
 
typedef struct M2MB_SSL_CONFIG_T M2MB_SSL_CONFIG_T
 Structure to configure an SSL connection. More...
 
M2MB_SSL_CTXT_HANDLE m2mb_ssl_init (M2MB_SSL_SSL_ROLE_E role)
 Initialize SSL TLS context. More...
 
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. More...
 
void m2mb_ssl_close (M2MB_SSL_CTXT_HANDLE sslContextHndl)
 deletes an m2mb SSL context created during m2mb_ssl_init() More...
 
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. More...
 
INT32 m2mb_ssl_connect (M2MB_SSL_CTXT_HANDLE sslContextHndl, M2MB_SOCKET_BSD_SOCKET socket_fd)
 Performs SSL Client connection. More...
 
INT32 m2mb_ssl_write (M2MB_SSL_CTXT_HANDLE sslContextHndl, void *buf, UINT32 len)
 Writes data to the SSL connection. More...
 
INT32 m2mb_ssl_read (M2MB_SSL_CTXT_HANDLE sslContextHndl, void *buf, UINT32 len)
 Read len bytes from SSL connection into buf. More...
 
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. More...
 
INT32 m2mb_ssl_cert_load (M2MB_SSL_CTXT_HANDLE sslCtxtHndl, M2MB_SSL_CERT_TYPE_E sslCertType, CHAR *name)
 Load certificates in the SSL context. More...
 
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. More...
 
INT32 m2mb_ssl_cert_delete (M2MB_SSL_CERT_TYPE_E sslCertType, CHAR *name)
 Delete certificates. More...
 
INT32 m2mb_ssl_status (M2MB_SSL_CTXT_HANDLE sslContextHndl)
 Returns the status of an SSL connection. More...
 
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. More...
 
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. More...
 
UINT32 m2mb_ssl_get_internal_ssl_obj (M2MB_SSL_CTXT_HANDLE sslContextHndl)
 It get the list of certificates stored. More...
 
INT32 m2mb_ssl_cert_search (M2MB_SSL_CERT_TYPE_E sslCertType, CHAR *certName)
 Search for the given certificate in the system. More...
 

Detailed Description

SSL TLS support.

we866e4/epl/inc/nwk/m2mb_ssl.h

SSL TLS secure socket APIs

Note
Dependencies:
"#include <m2mb_types.h>"
"#include <m2mb_socket.h>"
"#include <m2mb_trace.h>"
Author
Oshin Bhatia
Date
15/04/2018

Definition in file m2mb_ssl.h.