xref: /nrf52832-nimble/rt-thread/components/net/sal_socket/include/sal_tls.h (revision 104654410c56c573564690304ae786df310c91fc)
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