1*10465441SEvalZero /* 2*10465441SEvalZero * Copyright (c) 2006-2018, RT-Thread Development Team 3*10465441SEvalZero * 4*10465441SEvalZero * SPDX-License-Identifier: Apache-2.0 5*10465441SEvalZero * 6*10465441SEvalZero * Change Logs: 7*10465441SEvalZero * Date Author Notes 8*10465441SEvalZero * 2018-11-10 ChenYong First version 9*10465441SEvalZero */ 10*10465441SEvalZero #ifndef __SAL_TLS_H__ 11*10465441SEvalZero #define __SAL_TLS_H__ 12*10465441SEvalZero 13*10465441SEvalZero #ifdef __cplusplus 14*10465441SEvalZero extern "C" { 15*10465441SEvalZero #endif 16*10465441SEvalZero 17*10465441SEvalZero #include <rtthread.h> 18*10465441SEvalZero 19*10465441SEvalZero /* Protocol level for TLS. 20*10465441SEvalZero * Here, the same socket protocol level for TLS as in Linux was used. 21*10465441SEvalZero */ 22*10465441SEvalZero #define SOL_TLS 282 23*10465441SEvalZero 24*10465441SEvalZero /* Socket options for TLS */ 25*10465441SEvalZero 26*10465441SEvalZero /* Socket option to select TLS credentials to use. */ 27*10465441SEvalZero #define TLS_CRET_LIST 1 28*10465441SEvalZero /* Socket option to set select ciphersuites to use. */ 29*10465441SEvalZero #define TLS_CIPHERSUITE_LIST 2 30*10465441SEvalZero /* Socket option to set peer verification level for TLS connection. */ 31*10465441SEvalZero #define TLS_PEER_VERIFY 3 32*10465441SEvalZero /* Socket option to set role for DTLS connection. */ 33*10465441SEvalZero #define TLS_DTLS_ROLE 4 34*10465441SEvalZero 35*10465441SEvalZero /* Protocol numbers for TLS protocols */ 36*10465441SEvalZero #define PROTOCOL_TLS 256 37*10465441SEvalZero #define PROTOCOL_DTLS 257 38*10465441SEvalZero 39*10465441SEvalZero 40*10465441SEvalZero struct sal_proto_tls_ops 41*10465441SEvalZero { 42*10465441SEvalZero int (*init)(void); 43*10465441SEvalZero void* (*socket)(int socket); 44*10465441SEvalZero int (*connect)(void *sock); 45*10465441SEvalZero int (*send)(void *sock, const void *data, size_t size); 46*10465441SEvalZero int (*recv)(void *sock, void *mem, size_t len); 47*10465441SEvalZero int (*closesocket)(void *sock); 48*10465441SEvalZero 49*10465441SEvalZero int (*set_cret_list)(void *sock, const void *cert, size_t size); /* Set TLS credentials */ 50*10465441SEvalZero int (*set_ciphersurite)(void *sock, const void* ciphersurite, size_t size); /* Set select ciphersuites */ 51*10465441SEvalZero int (*set_peer_verify)(void *sock, const void* peer_verify, size_t size); /* Set peer verification */ 52*10465441SEvalZero int (*set_dtls_role)(void *sock, const void *dtls_role, size_t size); /* Set role for DTLS */ 53*10465441SEvalZero }; 54*10465441SEvalZero 55*10465441SEvalZero struct sal_proto_tls 56*10465441SEvalZero { 57*10465441SEvalZero char name[RT_NAME_MAX]; /* TLS protocol name */ 58*10465441SEvalZero const struct sal_proto_tls_ops *ops; /* SAL TLS protocol options */ 59*10465441SEvalZero }; 60*10465441SEvalZero 61*10465441SEvalZero /* SAL TLS protocol register */ 62*10465441SEvalZero int sal_proto_tls_register(const struct sal_proto_tls *pt); 63*10465441SEvalZero 64*10465441SEvalZero #ifdef __cplusplus 65*10465441SEvalZero } 66*10465441SEvalZero #endif 67*10465441SEvalZero 68*10465441SEvalZero #endif /* __SAL_TLS_H__ */ 69