1d4afb5ceSopenharmony_ci// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD
2d4afb5ceSopenharmony_ci//
3d4afb5ceSopenharmony_ci// Licensed under the Apache License, Version 2.0 (the "License");
4d4afb5ceSopenharmony_ci// you may not use this file except in compliance with the License.
5d4afb5ceSopenharmony_ci// You may obtain a copy of the License at
6d4afb5ceSopenharmony_ci
7d4afb5ceSopenharmony_ci//     http://www.apache.org/licenses/LICENSE-2.0
8d4afb5ceSopenharmony_ci//
9d4afb5ceSopenharmony_ci// Unless required by applicable law or agreed to in writing, software
10d4afb5ceSopenharmony_ci// distributed under the License is distributed on an "AS IS" BASIS,
11d4afb5ceSopenharmony_ci// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12d4afb5ceSopenharmony_ci// See the License for the specific language governing permissions and
13d4afb5ceSopenharmony_ci// limitations under the License.
14d4afb5ceSopenharmony_ci
15d4afb5ceSopenharmony_ci#ifndef _SSL_H_
16d4afb5ceSopenharmony_ci#define _SSL_H_
17d4afb5ceSopenharmony_ci
18d4afb5ceSopenharmony_ci#ifdef __cplusplus
19d4afb5ceSopenharmony_ci extern "C" {
20d4afb5ceSopenharmony_ci#endif
21d4afb5ceSopenharmony_ci
22d4afb5ceSopenharmony_ci#include <stdlib.h>
23d4afb5ceSopenharmony_ci#include "ssl_x509.h"
24d4afb5ceSopenharmony_ci#include "ssl_pkey.h"
25d4afb5ceSopenharmony_ci
26d4afb5ceSopenharmony_ci/*
27d4afb5ceSopenharmony_ci{
28d4afb5ceSopenharmony_ci*/
29d4afb5ceSopenharmony_ci
30d4afb5ceSopenharmony_ci#define SSL_CB_ALERT 0x4000
31d4afb5ceSopenharmony_ci
32d4afb5ceSopenharmony_ci#define X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT		(1 << 0)
33d4afb5ceSopenharmony_ci#define X509_CHECK_FLAG_NO_WILDCARDS			(1 << 1)
34d4afb5ceSopenharmony_ci#define X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS		(1 << 2)
35d4afb5ceSopenharmony_ci#define X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS		(1 << 3)
36d4afb5ceSopenharmony_ci#define X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS		(1 << 4)
37d4afb5ceSopenharmony_ci
38d4afb5ceSopenharmony_ci mbedtls_x509_crt *
39d4afb5ceSopenharmony_ci ssl_ctx_get_mbedtls_x509_crt(SSL_CTX *ssl_ctx);
40d4afb5ceSopenharmony_ci
41d4afb5ceSopenharmony_ci mbedtls_x509_crt *
42d4afb5ceSopenharmony_ci ssl_get_peer_mbedtls_x509_crt(SSL *ssl);
43d4afb5ceSopenharmony_ci
44d4afb5ceSopenharmony_ci int SSL_set_sni_callback(SSL *ssl, int(*cb)(void *, mbedtls_ssl_context *,
45d4afb5ceSopenharmony_ci 				const unsigned char *, size_t), void *param);
46d4afb5ceSopenharmony_ci
47d4afb5ceSopenharmony_ci void SSL_set_SSL_CTX(SSL *ssl, SSL_CTX *ctx);
48d4afb5ceSopenharmony_ci
49d4afb5ceSopenharmony_ci int SSL_CTX_add_client_CA_ASN1(SSL_CTX *ssl, int len,
50d4afb5ceSopenharmony_ci                 const unsigned char *d);
51d4afb5ceSopenharmony_ci
52d4afb5ceSopenharmony_ci SSL *SSL_SSL_from_mbedtls_ssl_context(mbedtls_ssl_context *msc);
53d4afb5ceSopenharmony_ci
54d4afb5ceSopenharmony_ci mbedtls_ssl_context *SSL_mbedtls_ssl_context_from_SSL(SSL *ssl);
55d4afb5ceSopenharmony_ci
56d4afb5ceSopenharmony_ci/**
57d4afb5ceSopenharmony_ci * @brief create a SSL context
58d4afb5ceSopenharmony_ci *
59d4afb5ceSopenharmony_ci * @param method - the SSL context method point
60d4afb5ceSopenharmony_ci *
61d4afb5ceSopenharmony_ci * @return the context point
62d4afb5ceSopenharmony_ci */
63d4afb5ceSopenharmony_ciSSL_CTX* SSL_CTX_new(const SSL_METHOD *method, void *rngctx);
64d4afb5ceSopenharmony_ci
65d4afb5ceSopenharmony_ci/**
66d4afb5ceSopenharmony_ci * @brief free a SSL context
67d4afb5ceSopenharmony_ci *
68d4afb5ceSopenharmony_ci * @param method - the SSL context point
69d4afb5ceSopenharmony_ci *
70d4afb5ceSopenharmony_ci * @return none
71d4afb5ceSopenharmony_ci */
72d4afb5ceSopenharmony_civoid SSL_CTX_free(SSL_CTX *ctx);
73d4afb5ceSopenharmony_ci
74d4afb5ceSopenharmony_ci/**
75d4afb5ceSopenharmony_ci * @brief create a SSL
76d4afb5ceSopenharmony_ci *
77d4afb5ceSopenharmony_ci * @param ctx - the SSL context point
78d4afb5ceSopenharmony_ci *
79d4afb5ceSopenharmony_ci * @return the SSL point
80d4afb5ceSopenharmony_ci */
81d4afb5ceSopenharmony_ciSSL* SSL_new(SSL_CTX *ctx);
82d4afb5ceSopenharmony_ci
83d4afb5ceSopenharmony_ci/**
84d4afb5ceSopenharmony_ci * @brief free the SSL
85d4afb5ceSopenharmony_ci *
86d4afb5ceSopenharmony_ci * @param ssl - the SSL point
87d4afb5ceSopenharmony_ci *
88d4afb5ceSopenharmony_ci * @return none
89d4afb5ceSopenharmony_ci */
90d4afb5ceSopenharmony_civoid SSL_free(SSL *ssl);
91d4afb5ceSopenharmony_ci
92d4afb5ceSopenharmony_ci/**
93d4afb5ceSopenharmony_ci * @brief connect to the remote SSL server
94d4afb5ceSopenharmony_ci *
95d4afb5ceSopenharmony_ci * @param ssl - the SSL point
96d4afb5ceSopenharmony_ci *
97d4afb5ceSopenharmony_ci * @return result
98d4afb5ceSopenharmony_ci *     1 : OK
99d4afb5ceSopenharmony_ci *    -1 : failed
100d4afb5ceSopenharmony_ci */
101d4afb5ceSopenharmony_ciint SSL_connect(SSL *ssl);
102d4afb5ceSopenharmony_ci
103d4afb5ceSopenharmony_ci/**
104d4afb5ceSopenharmony_ci * @brief accept the remote connection
105d4afb5ceSopenharmony_ci *
106d4afb5ceSopenharmony_ci * @param ssl - the SSL point
107d4afb5ceSopenharmony_ci *
108d4afb5ceSopenharmony_ci * @return result
109d4afb5ceSopenharmony_ci *     1 : OK
110d4afb5ceSopenharmony_ci *    -1 : failed
111d4afb5ceSopenharmony_ci */
112d4afb5ceSopenharmony_ciint SSL_accept(SSL *ssl);
113d4afb5ceSopenharmony_ci
114d4afb5ceSopenharmony_ci/**
115d4afb5ceSopenharmony_ci * @brief read data from to remote
116d4afb5ceSopenharmony_ci *
117d4afb5ceSopenharmony_ci * @param ssl    - the SSL point which has been connected
118d4afb5ceSopenharmony_ci * @param buffer - the received data buffer point
119d4afb5ceSopenharmony_ci * @param len    - the received data length
120d4afb5ceSopenharmony_ci *
121d4afb5ceSopenharmony_ci * @return result
122d4afb5ceSopenharmony_ci *     > 0 : OK, and return received data bytes
123d4afb5ceSopenharmony_ci *     = 0 : connection is closed
124d4afb5ceSopenharmony_ci *     < 0 : an error catch
125d4afb5ceSopenharmony_ci */
126d4afb5ceSopenharmony_ciint SSL_read(SSL *ssl, void *buffer, int len);
127d4afb5ceSopenharmony_ci
128d4afb5ceSopenharmony_ci/**
129d4afb5ceSopenharmony_ci * @brief send the data to remote
130d4afb5ceSopenharmony_ci *
131d4afb5ceSopenharmony_ci * @param ssl    - the SSL point which has been connected
132d4afb5ceSopenharmony_ci * @param buffer - the send data buffer point
133d4afb5ceSopenharmony_ci * @param len    - the send data length
134d4afb5ceSopenharmony_ci *
135d4afb5ceSopenharmony_ci * @return result
136d4afb5ceSopenharmony_ci *     > 0 : OK, and return sent data bytes
137d4afb5ceSopenharmony_ci *     = 0 : connection is closed
138d4afb5ceSopenharmony_ci *     < 0 : an error catch
139d4afb5ceSopenharmony_ci */
140d4afb5ceSopenharmony_ciint SSL_write(SSL *ssl, const void *buffer, int len);
141d4afb5ceSopenharmony_ci
142d4afb5ceSopenharmony_ci/**
143d4afb5ceSopenharmony_ci * @brief get the verifying result of the SSL certification
144d4afb5ceSopenharmony_ci *
145d4afb5ceSopenharmony_ci * @param ssl - the SSL point
146d4afb5ceSopenharmony_ci *
147d4afb5ceSopenharmony_ci * @return the result of verifying
148d4afb5ceSopenharmony_ci */
149d4afb5ceSopenharmony_cilong SSL_get_verify_result(const SSL *ssl);
150d4afb5ceSopenharmony_ci
151d4afb5ceSopenharmony_ci/**
152d4afb5ceSopenharmony_ci * @brief shutdown the connection
153d4afb5ceSopenharmony_ci *
154d4afb5ceSopenharmony_ci * @param ssl - the SSL point
155d4afb5ceSopenharmony_ci *
156d4afb5ceSopenharmony_ci * @return result
157d4afb5ceSopenharmony_ci *     1 : OK
158d4afb5ceSopenharmony_ci *     0 : shutdown is not finished
159d4afb5ceSopenharmony_ci *    -1 : an error catch
160d4afb5ceSopenharmony_ci */
161d4afb5ceSopenharmony_ciint SSL_shutdown(SSL *ssl);
162d4afb5ceSopenharmony_ci
163d4afb5ceSopenharmony_ci/**
164d4afb5ceSopenharmony_ci * @brief bind the socket file description into the SSL
165d4afb5ceSopenharmony_ci *
166d4afb5ceSopenharmony_ci * @param ssl - the SSL point
167d4afb5ceSopenharmony_ci * @param fd  - socket handle
168d4afb5ceSopenharmony_ci *
169d4afb5ceSopenharmony_ci * @return result
170d4afb5ceSopenharmony_ci *     1 : OK
171d4afb5ceSopenharmony_ci *     0 : failed
172d4afb5ceSopenharmony_ci */
173d4afb5ceSopenharmony_ciint SSL_set_fd(SSL *ssl, int fd);
174d4afb5ceSopenharmony_ci
175d4afb5ceSopenharmony_ci/**
176d4afb5ceSopenharmony_ci * @brief These functions load the private key into the SSL_CTX or SSL object
177d4afb5ceSopenharmony_ci *
178d4afb5ceSopenharmony_ci * @param ctx  - the SSL context point
179d4afb5ceSopenharmony_ci * @param pkey - private key object point
180d4afb5ceSopenharmony_ci *
181d4afb5ceSopenharmony_ci * @return result
182d4afb5ceSopenharmony_ci *     1 : OK
183d4afb5ceSopenharmony_ci *     0 : failed
184d4afb5ceSopenharmony_ci */
185d4afb5ceSopenharmony_ciint SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey);
186d4afb5ceSopenharmony_ci
187d4afb5ceSopenharmony_ci/**
188d4afb5ceSopenharmony_ci * @brief These functions load the certification into the SSL_CTX or SSL object
189d4afb5ceSopenharmony_ci *
190d4afb5ceSopenharmony_ci * @param ctx  - the SSL context point
191d4afb5ceSopenharmony_ci * @param pkey - certification object point
192d4afb5ceSopenharmony_ci *
193d4afb5ceSopenharmony_ci * @return result
194d4afb5ceSopenharmony_ci *     1 : OK
195d4afb5ceSopenharmony_ci *     0 : failed
196d4afb5ceSopenharmony_ci */
197d4afb5ceSopenharmony_ciint SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x);
198d4afb5ceSopenharmony_ci
199d4afb5ceSopenharmony_ci/**
200d4afb5ceSopenharmony_ci * @brief create the target SSL context client method
201d4afb5ceSopenharmony_ci *
202d4afb5ceSopenharmony_ci * @param none
203d4afb5ceSopenharmony_ci *
204d4afb5ceSopenharmony_ci * @return the SSLV2.3 version SSL context client method
205d4afb5ceSopenharmony_ci */
206d4afb5ceSopenharmony_ciconst SSL_METHOD* SSLv23_client_method(void);
207d4afb5ceSopenharmony_ci
208d4afb5ceSopenharmony_ci/**
209d4afb5ceSopenharmony_ci * @brief create the target SSL context client method
210d4afb5ceSopenharmony_ci *
211d4afb5ceSopenharmony_ci * @param none
212d4afb5ceSopenharmony_ci *
213d4afb5ceSopenharmony_ci * @return the TLSV1.0 version SSL context client method
214d4afb5ceSopenharmony_ci */
215d4afb5ceSopenharmony_ciconst SSL_METHOD* TLSv1_client_method(void);
216d4afb5ceSopenharmony_ci
217d4afb5ceSopenharmony_ci/**
218d4afb5ceSopenharmony_ci * @brief create the target SSL context client method
219d4afb5ceSopenharmony_ci *
220d4afb5ceSopenharmony_ci * @param none
221d4afb5ceSopenharmony_ci *
222d4afb5ceSopenharmony_ci * @return the SSLV1.0 version SSL context client method
223d4afb5ceSopenharmony_ci */
224d4afb5ceSopenharmony_ciconst SSL_METHOD* SSLv3_client_method(void);
225d4afb5ceSopenharmony_ci
226d4afb5ceSopenharmony_ci/**
227d4afb5ceSopenharmony_ci * @brief create the target SSL context client method
228d4afb5ceSopenharmony_ci *
229d4afb5ceSopenharmony_ci * @param none
230d4afb5ceSopenharmony_ci *
231d4afb5ceSopenharmony_ci * @return the TLSV1.1 version SSL context client method
232d4afb5ceSopenharmony_ci */
233d4afb5ceSopenharmony_ciconst SSL_METHOD* TLSv1_1_client_method(void);
234d4afb5ceSopenharmony_ci
235d4afb5ceSopenharmony_ci/**
236d4afb5ceSopenharmony_ci * @brief create the target SSL context client method
237d4afb5ceSopenharmony_ci *
238d4afb5ceSopenharmony_ci * @param none
239d4afb5ceSopenharmony_ci *
240d4afb5ceSopenharmony_ci * @return the TLSV1.2 version SSL context client method
241d4afb5ceSopenharmony_ci */
242d4afb5ceSopenharmony_ciconst SSL_METHOD* TLSv1_2_client_method(void);
243d4afb5ceSopenharmony_ci
244d4afb5ceSopenharmony_ci/**
245d4afb5ceSopenharmony_ci * @brief create the target SSL context server method
246d4afb5ceSopenharmony_ci *
247d4afb5ceSopenharmony_ci * @param none
248d4afb5ceSopenharmony_ci *
249d4afb5ceSopenharmony_ci * @return the TLS any version SSL context client method
250d4afb5ceSopenharmony_ci */
251d4afb5ceSopenharmony_ciconst SSL_METHOD* TLS_client_method(void);
252d4afb5ceSopenharmony_ci
253d4afb5ceSopenharmony_ci/**
254d4afb5ceSopenharmony_ci * @brief create the target SSL context server method
255d4afb5ceSopenharmony_ci *
256d4afb5ceSopenharmony_ci * @param none
257d4afb5ceSopenharmony_ci *
258d4afb5ceSopenharmony_ci * @return the SSLV2.3 version SSL context server method
259d4afb5ceSopenharmony_ci */
260d4afb5ceSopenharmony_ciconst SSL_METHOD* SSLv23_server_method(void);
261d4afb5ceSopenharmony_ci
262d4afb5ceSopenharmony_ci/**
263d4afb5ceSopenharmony_ci * @brief create the target SSL context server method
264d4afb5ceSopenharmony_ci *
265d4afb5ceSopenharmony_ci * @param none
266d4afb5ceSopenharmony_ci *
267d4afb5ceSopenharmony_ci * @return the TLSV1.1 version SSL context server method
268d4afb5ceSopenharmony_ci */
269d4afb5ceSopenharmony_ciconst SSL_METHOD* TLSv1_1_server_method(void);
270d4afb5ceSopenharmony_ci
271d4afb5ceSopenharmony_ci/**
272d4afb5ceSopenharmony_ci * @brief create the target SSL context server method
273d4afb5ceSopenharmony_ci *
274d4afb5ceSopenharmony_ci * @param none
275d4afb5ceSopenharmony_ci *
276d4afb5ceSopenharmony_ci * @return the TLSV1.2 version SSL context server method
277d4afb5ceSopenharmony_ci */
278d4afb5ceSopenharmony_ciconst SSL_METHOD* TLSv1_2_server_method(void);
279d4afb5ceSopenharmony_ci
280d4afb5ceSopenharmony_ci/**
281d4afb5ceSopenharmony_ci * @brief create the target SSL context server method
282d4afb5ceSopenharmony_ci *
283d4afb5ceSopenharmony_ci * @param none
284d4afb5ceSopenharmony_ci *
285d4afb5ceSopenharmony_ci * @return the TLSV1.0 version SSL context server method
286d4afb5ceSopenharmony_ci */
287d4afb5ceSopenharmony_ciconst SSL_METHOD* TLSv1_server_method(void);
288d4afb5ceSopenharmony_ci
289d4afb5ceSopenharmony_ci/**
290d4afb5ceSopenharmony_ci * @brief create the target SSL context server method
291d4afb5ceSopenharmony_ci *
292d4afb5ceSopenharmony_ci * @param none
293d4afb5ceSopenharmony_ci *
294d4afb5ceSopenharmony_ci * @return the SSLV3.0 version SSL context server method
295d4afb5ceSopenharmony_ci */
296d4afb5ceSopenharmony_ciconst SSL_METHOD* SSLv3_server_method(void);
297d4afb5ceSopenharmony_ci
298d4afb5ceSopenharmony_ci/**
299d4afb5ceSopenharmony_ci * @brief create the target SSL context server method
300d4afb5ceSopenharmony_ci *
301d4afb5ceSopenharmony_ci * @param none
302d4afb5ceSopenharmony_ci *
303d4afb5ceSopenharmony_ci * @return the TLS any version SSL context server method
304d4afb5ceSopenharmony_ci */
305d4afb5ceSopenharmony_ciconst SSL_METHOD* TLS_server_method(void);
306d4afb5ceSopenharmony_ci
307d4afb5ceSopenharmony_ci
308d4afb5ceSopenharmony_ci/**
309d4afb5ceSopenharmony_ci * @brief set the SSL context ALPN select callback function
310d4afb5ceSopenharmony_ci *
311d4afb5ceSopenharmony_ci * @param ctx - SSL context point
312d4afb5ceSopenharmony_ci * @param cb  - ALPN select callback function
313d4afb5ceSopenharmony_ci * @param arg - ALPN select callback function entry private data point
314d4afb5ceSopenharmony_ci *
315d4afb5ceSopenharmony_ci * @return none
316d4afb5ceSopenharmony_ci */
317d4afb5ceSopenharmony_civoid SSL_CTX_set_alpn_select_cb(SSL_CTX *ctx, next_proto_cb cb,
318d4afb5ceSopenharmony_ci                                void *arg);
319d4afb5ceSopenharmony_ci
320d4afb5ceSopenharmony_civoid SSL_set_alpn_select_cb(SSL *ssl, void *arg);
321d4afb5ceSopenharmony_ci
322d4afb5ceSopenharmony_ci/**
323d4afb5ceSopenharmony_ci * @brief set the SSL context ALPN select protocol
324d4afb5ceSopenharmony_ci *
325d4afb5ceSopenharmony_ci * @param ctx        - SSL context point
326d4afb5ceSopenharmony_ci * @param protos     - ALPN protocol name
327d4afb5ceSopenharmony_ci * @param protos_len - ALPN protocol name bytes
328d4afb5ceSopenharmony_ci *
329d4afb5ceSopenharmony_ci * @return result
330d4afb5ceSopenharmony_ci *     0 : OK
331d4afb5ceSopenharmony_ci *     1 : failed
332d4afb5ceSopenharmony_ci */
333d4afb5ceSopenharmony_ciint SSL_CTX_set_alpn_protos(SSL_CTX *ctx, const unsigned char *protos, unsigned int protos_len);
334d4afb5ceSopenharmony_ci
335d4afb5ceSopenharmony_ci/**
336d4afb5ceSopenharmony_ci * @brief set the SSL context next ALPN select callback function
337d4afb5ceSopenharmony_ci *
338d4afb5ceSopenharmony_ci * @param ctx - SSL context point
339d4afb5ceSopenharmony_ci * @param cb  - ALPN select callback function
340d4afb5ceSopenharmony_ci * @param arg - ALPN select callback function entry private data point
341d4afb5ceSopenharmony_ci *
342d4afb5ceSopenharmony_ci * @return none
343d4afb5ceSopenharmony_ci */
344d4afb5ceSopenharmony_civoid SSL_CTX_set_next_proto_select_cb(SSL_CTX *ctx,
345d4afb5ceSopenharmony_ci                                      int (*cb) (SSL *ssl,
346d4afb5ceSopenharmony_ci                                                 unsigned char **out,
347d4afb5ceSopenharmony_ci                                                 unsigned char *outlen,
348d4afb5ceSopenharmony_ci                                                 const unsigned char *in,
349d4afb5ceSopenharmony_ci                                                 unsigned int inlen,
350d4afb5ceSopenharmony_ci                                                 void *arg),
351d4afb5ceSopenharmony_ci                                      void *arg);
352d4afb5ceSopenharmony_ci
353d4afb5ceSopenharmony_civoid SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data,
354d4afb5ceSopenharmony_ci                             unsigned int *len);
355d4afb5ceSopenharmony_ci
356d4afb5ceSopenharmony_civoid _ssl_set_alpn_list(const SSL *ssl);
357d4afb5ceSopenharmony_ci
358d4afb5ceSopenharmony_ci/**
359d4afb5ceSopenharmony_ci * @brief get SSL error code
360d4afb5ceSopenharmony_ci *
361d4afb5ceSopenharmony_ci * @param ssl       - SSL point
362d4afb5ceSopenharmony_ci * @param ret_code  - SSL return code
363d4afb5ceSopenharmony_ci *
364d4afb5ceSopenharmony_ci * @return SSL error number
365d4afb5ceSopenharmony_ci */
366d4afb5ceSopenharmony_ciint SSL_get_error(const SSL *ssl, int ret_code);
367d4afb5ceSopenharmony_ci
368d4afb5ceSopenharmony_ci/**
369d4afb5ceSopenharmony_ci * @brief clear the SSL error code
370d4afb5ceSopenharmony_ci *
371d4afb5ceSopenharmony_ci * @param none
372d4afb5ceSopenharmony_ci *
373d4afb5ceSopenharmony_ci * @return none
374d4afb5ceSopenharmony_ci */
375d4afb5ceSopenharmony_civoid ERR_clear_error(void);
376d4afb5ceSopenharmony_ci
377d4afb5ceSopenharmony_ci/**
378d4afb5ceSopenharmony_ci * @brief get the current SSL error code
379d4afb5ceSopenharmony_ci *
380d4afb5ceSopenharmony_ci * @param none
381d4afb5ceSopenharmony_ci *
382d4afb5ceSopenharmony_ci * @return current SSL error number
383d4afb5ceSopenharmony_ci */
384d4afb5ceSopenharmony_ciint ERR_get_error(void);
385d4afb5ceSopenharmony_ci
386d4afb5ceSopenharmony_ci/**
387d4afb5ceSopenharmony_ci * @brief register the SSL error strings
388d4afb5ceSopenharmony_ci *
389d4afb5ceSopenharmony_ci * @param none
390d4afb5ceSopenharmony_ci *
391d4afb5ceSopenharmony_ci * @return none
392d4afb5ceSopenharmony_ci */
393d4afb5ceSopenharmony_civoid ERR_load_SSL_strings(void);
394d4afb5ceSopenharmony_ci
395d4afb5ceSopenharmony_ci/**
396d4afb5ceSopenharmony_ci * @brief initialize the SSL library
397d4afb5ceSopenharmony_ci *
398d4afb5ceSopenharmony_ci * @param none
399d4afb5ceSopenharmony_ci *
400d4afb5ceSopenharmony_ci * @return none
401d4afb5ceSopenharmony_ci */
402d4afb5ceSopenharmony_civoid SSL_library_init(void);
403d4afb5ceSopenharmony_ci
404d4afb5ceSopenharmony_ci/**
405d4afb5ceSopenharmony_ci * @brief generates a human-readable string representing the error code e
406d4afb5ceSopenharmony_ci *        and store it into the "ret" point memory
407d4afb5ceSopenharmony_ci *
408d4afb5ceSopenharmony_ci * @param e   - error code
409d4afb5ceSopenharmony_ci * @param ret - memory point to store the string
410d4afb5ceSopenharmony_ci *
411d4afb5ceSopenharmony_ci * @return the result string point
412d4afb5ceSopenharmony_ci */
413d4afb5ceSopenharmony_cichar *ERR_error_string(unsigned long e, char *ret);
414d4afb5ceSopenharmony_ci
415d4afb5ceSopenharmony_ci/**
416d4afb5ceSopenharmony_ci * @brief add the SSL context option
417d4afb5ceSopenharmony_ci *
418d4afb5ceSopenharmony_ci * @param ctx - SSL context point
419d4afb5ceSopenharmony_ci * @param opt - new SSL context option
420d4afb5ceSopenharmony_ci *
421d4afb5ceSopenharmony_ci * @return the SSL context option
422d4afb5ceSopenharmony_ci */
423d4afb5ceSopenharmony_ciunsigned long SSL_CTX_set_options(SSL_CTX *ctx, unsigned long opt);
424d4afb5ceSopenharmony_ci
425d4afb5ceSopenharmony_ci/**
426d4afb5ceSopenharmony_ci * @brief add the SSL context mode
427d4afb5ceSopenharmony_ci *
428d4afb5ceSopenharmony_ci * @param ctx - SSL context point
429d4afb5ceSopenharmony_ci * @param mod - new SSL context mod
430d4afb5ceSopenharmony_ci *
431d4afb5ceSopenharmony_ci * @return result
432d4afb5ceSopenharmony_ci *     1 : OK
433d4afb5ceSopenharmony_ci *     0 : failed
434d4afb5ceSopenharmony_ci */
435d4afb5ceSopenharmony_ciint SSL_CTX_set_mode(SSL_CTX *ctx, int mod);
436d4afb5ceSopenharmony_ci
437d4afb5ceSopenharmony_ci/*
438d4afb5ceSopenharmony_ci}
439d4afb5ceSopenharmony_ci*/
440d4afb5ceSopenharmony_ci
441d4afb5ceSopenharmony_ci/**
442d4afb5ceSopenharmony_ci * @brief perform the SSL handshake
443d4afb5ceSopenharmony_ci *
444d4afb5ceSopenharmony_ci * @param ssl - SSL point
445d4afb5ceSopenharmony_ci *
446d4afb5ceSopenharmony_ci * @return result
447d4afb5ceSopenharmony_ci *     1 : OK
448d4afb5ceSopenharmony_ci *     0 : failed
449d4afb5ceSopenharmony_ci *    -1 : a error catch
450d4afb5ceSopenharmony_ci */
451d4afb5ceSopenharmony_ciint SSL_do_handshake(SSL *ssl);
452d4afb5ceSopenharmony_ci
453d4afb5ceSopenharmony_ci/**
454d4afb5ceSopenharmony_ci * @brief get the SSL current version
455d4afb5ceSopenharmony_ci *
456d4afb5ceSopenharmony_ci * @param ssl - SSL point
457d4afb5ceSopenharmony_ci *
458d4afb5ceSopenharmony_ci * @return the version string
459d4afb5ceSopenharmony_ci */
460d4afb5ceSopenharmony_ciconst char *SSL_get_version(const SSL *ssl);
461d4afb5ceSopenharmony_ci
462d4afb5ceSopenharmony_ci/**
463d4afb5ceSopenharmony_ci * @brief set  the SSL context version
464d4afb5ceSopenharmony_ci *
465d4afb5ceSopenharmony_ci * @param ctx  - SSL context point
466d4afb5ceSopenharmony_ci * @param meth - SSL method point
467d4afb5ceSopenharmony_ci *
468d4afb5ceSopenharmony_ci * @return result
469d4afb5ceSopenharmony_ci *     1 : OK
470d4afb5ceSopenharmony_ci *     0 : failed
471d4afb5ceSopenharmony_ci */
472d4afb5ceSopenharmony_ciint SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth);
473d4afb5ceSopenharmony_ci
474d4afb5ceSopenharmony_ci/**
475d4afb5ceSopenharmony_ci * @brief get the bytes numbers which are to be read
476d4afb5ceSopenharmony_ci *
477d4afb5ceSopenharmony_ci * @param ssl  - SSL point
478d4afb5ceSopenharmony_ci *
479d4afb5ceSopenharmony_ci * @return bytes number
480d4afb5ceSopenharmony_ci */
481d4afb5ceSopenharmony_ciint SSL_pending(const SSL *ssl);
482d4afb5ceSopenharmony_ci
483d4afb5ceSopenharmony_ci/**
484d4afb5ceSopenharmony_ci * @brief check if SSL want nothing
485d4afb5ceSopenharmony_ci *
486d4afb5ceSopenharmony_ci * @param ssl - SSL point
487d4afb5ceSopenharmony_ci *
488d4afb5ceSopenharmony_ci * @return result
489d4afb5ceSopenharmony_ci *     0 : false
490d4afb5ceSopenharmony_ci *     1 : true
491d4afb5ceSopenharmony_ci */
492d4afb5ceSopenharmony_ciint SSL_want_nothing(const SSL *ssl);
493d4afb5ceSopenharmony_ci
494d4afb5ceSopenharmony_ci/**
495d4afb5ceSopenharmony_ci * @brief check if SSL want to read
496d4afb5ceSopenharmony_ci *
497d4afb5ceSopenharmony_ci * @param ssl - SSL point
498d4afb5ceSopenharmony_ci *
499d4afb5ceSopenharmony_ci * @return result
500d4afb5ceSopenharmony_ci *     0 : false
501d4afb5ceSopenharmony_ci *     1 : true
502d4afb5ceSopenharmony_ci */
503d4afb5ceSopenharmony_ciint SSL_want_read(const SSL *ssl);
504d4afb5ceSopenharmony_ci
505d4afb5ceSopenharmony_ci/**
506d4afb5ceSopenharmony_ci * @brief check if SSL want to write
507d4afb5ceSopenharmony_ci *
508d4afb5ceSopenharmony_ci * @param ssl - SSL point
509d4afb5ceSopenharmony_ci *
510d4afb5ceSopenharmony_ci * @return result
511d4afb5ceSopenharmony_ci *     0 : false
512d4afb5ceSopenharmony_ci *     1 : true
513d4afb5ceSopenharmony_ci */
514d4afb5ceSopenharmony_ciint SSL_want_write(const SSL *ssl);
515d4afb5ceSopenharmony_ci
516d4afb5ceSopenharmony_ci/**
517d4afb5ceSopenharmony_ci * @brief get the SSL context current method
518d4afb5ceSopenharmony_ci *
519d4afb5ceSopenharmony_ci * @param ctx - SSL context point
520d4afb5ceSopenharmony_ci *
521d4afb5ceSopenharmony_ci * @return the SSL context current method
522d4afb5ceSopenharmony_ci */
523d4afb5ceSopenharmony_ciconst SSL_METHOD *SSL_CTX_get_ssl_method(SSL_CTX *ctx);
524d4afb5ceSopenharmony_ci
525d4afb5ceSopenharmony_ci/**
526d4afb5ceSopenharmony_ci * @brief get the SSL current method
527d4afb5ceSopenharmony_ci *
528d4afb5ceSopenharmony_ci * @param ssl - SSL point
529d4afb5ceSopenharmony_ci *
530d4afb5ceSopenharmony_ci * @return the SSL current method
531d4afb5ceSopenharmony_ci */
532d4afb5ceSopenharmony_ciconst SSL_METHOD *SSL_get_ssl_method(SSL *ssl);
533d4afb5ceSopenharmony_ci
534d4afb5ceSopenharmony_ci/**
535d4afb5ceSopenharmony_ci * @brief set the SSL method
536d4afb5ceSopenharmony_ci *
537d4afb5ceSopenharmony_ci * @param ssl  - SSL point
538d4afb5ceSopenharmony_ci * @param meth - SSL method point
539d4afb5ceSopenharmony_ci *
540d4afb5ceSopenharmony_ci * @return result
541d4afb5ceSopenharmony_ci *     1 : OK
542d4afb5ceSopenharmony_ci *     0 : failed
543d4afb5ceSopenharmony_ci */
544d4afb5ceSopenharmony_ciint SSL_set_ssl_method(SSL *ssl, const SSL_METHOD *method);
545d4afb5ceSopenharmony_ci
546d4afb5ceSopenharmony_ci/**
547d4afb5ceSopenharmony_ci * @brief add CA client certification into the SSL
548d4afb5ceSopenharmony_ci *
549d4afb5ceSopenharmony_ci * @param ssl - SSL point
550d4afb5ceSopenharmony_ci * @param x   - CA certification point
551d4afb5ceSopenharmony_ci *
552d4afb5ceSopenharmony_ci * @return result
553d4afb5ceSopenharmony_ci *     1 : OK
554d4afb5ceSopenharmony_ci *     0 : failed
555d4afb5ceSopenharmony_ci */
556d4afb5ceSopenharmony_ciint SSL_add_client_CA(SSL *ssl, X509 *x);
557d4afb5ceSopenharmony_ci
558d4afb5ceSopenharmony_ci/**
559d4afb5ceSopenharmony_ci * @brief add CA client certification into the SSL context
560d4afb5ceSopenharmony_ci *
561d4afb5ceSopenharmony_ci * @param ctx - SSL context point
562d4afb5ceSopenharmony_ci * @param x   - CA certification point
563d4afb5ceSopenharmony_ci *
564d4afb5ceSopenharmony_ci * @return result
565d4afb5ceSopenharmony_ci *     1 : OK
566d4afb5ceSopenharmony_ci *     0 : failed
567d4afb5ceSopenharmony_ci */
568d4afb5ceSopenharmony_ciint SSL_CTX_add_client_CA(SSL_CTX *ctx, X509 *x);
569d4afb5ceSopenharmony_ci
570d4afb5ceSopenharmony_ci/**
571d4afb5ceSopenharmony_ci * @brief set the SSL CA certification list
572d4afb5ceSopenharmony_ci *
573d4afb5ceSopenharmony_ci * @param ssl       - SSL point
574d4afb5ceSopenharmony_ci * @param name_list - CA certification list
575d4afb5ceSopenharmony_ci *
576d4afb5ceSopenharmony_ci * @return none
577d4afb5ceSopenharmony_ci */
578d4afb5ceSopenharmony_civoid SSL_set_client_CA_list(SSL *ssl, STACK_OF(X509_NAME) *name_list);
579d4afb5ceSopenharmony_ci
580d4afb5ceSopenharmony_ci/**
581d4afb5ceSopenharmony_ci * @brief set the SSL context CA certification list
582d4afb5ceSopenharmony_ci *
583d4afb5ceSopenharmony_ci * @param ctx       - SSL context point
584d4afb5ceSopenharmony_ci * @param name_list - CA certification list
585d4afb5ceSopenharmony_ci *
586d4afb5ceSopenharmony_ci * @return none
587d4afb5ceSopenharmony_ci */
588d4afb5ceSopenharmony_civoid SSL_CTX_set_client_CA_list(SSL_CTX *ctx, STACK_OF(X509_NAME) *name_list);
589d4afb5ceSopenharmony_ci
590d4afb5ceSopenharmony_ci/**
591d4afb5ceSopenharmony_ci * @briefget the SSL CA certification list
592d4afb5ceSopenharmony_ci *
593d4afb5ceSopenharmony_ci * @param ssl - SSL point
594d4afb5ceSopenharmony_ci *
595d4afb5ceSopenharmony_ci * @return CA certification list
596d4afb5ceSopenharmony_ci */
597d4afb5ceSopenharmony_ciSTACK_OF(X509_NAME) *SSL_get_client_CA_list(const SSL *ssl);
598d4afb5ceSopenharmony_ci
599d4afb5ceSopenharmony_ci/**
600d4afb5ceSopenharmony_ci * @brief get the SSL context CA certification list
601d4afb5ceSopenharmony_ci *
602d4afb5ceSopenharmony_ci * @param ctx - SSL context point
603d4afb5ceSopenharmony_ci *
604d4afb5ceSopenharmony_ci * @return CA certification list
605d4afb5ceSopenharmony_ci */
606d4afb5ceSopenharmony_ciSTACK_OF(X509_NAME) *SSL_CTX_get_client_CA_list(const SSL_CTX *ctx);
607d4afb5ceSopenharmony_ci
608d4afb5ceSopenharmony_ci/**
609d4afb5ceSopenharmony_ci * @brief get the SSL certification point
610d4afb5ceSopenharmony_ci *
611d4afb5ceSopenharmony_ci * @param ssl - SSL point
612d4afb5ceSopenharmony_ci *
613d4afb5ceSopenharmony_ci * @return SSL certification point
614d4afb5ceSopenharmony_ci */
615d4afb5ceSopenharmony_ciX509 *SSL_get_certificate(const SSL *ssl);
616d4afb5ceSopenharmony_ci
617d4afb5ceSopenharmony_ci/**
618d4afb5ceSopenharmony_ci * @brief get the SSL private key point
619d4afb5ceSopenharmony_ci *
620d4afb5ceSopenharmony_ci * @param ssl - SSL point
621d4afb5ceSopenharmony_ci *
622d4afb5ceSopenharmony_ci * @return SSL private key point
623d4afb5ceSopenharmony_ci */
624d4afb5ceSopenharmony_ciEVP_PKEY *SSL_get_privatekey(const SSL *ssl);
625d4afb5ceSopenharmony_ci
626d4afb5ceSopenharmony_ci/**
627d4afb5ceSopenharmony_ci * @brief set the SSL information callback function
628d4afb5ceSopenharmony_ci *
629d4afb5ceSopenharmony_ci * @param ssl - SSL point
630d4afb5ceSopenharmony_ci * @param cb  - information callback function
631d4afb5ceSopenharmony_ci *
632d4afb5ceSopenharmony_ci * @return none
633d4afb5ceSopenharmony_ci */
634d4afb5ceSopenharmony_civoid SSL_set_info_callback(SSL *ssl, void (*cb) (const SSL *ssl, int type, int val));
635d4afb5ceSopenharmony_ci
636d4afb5ceSopenharmony_ci/**
637d4afb5ceSopenharmony_ci * @brief get the SSL state
638d4afb5ceSopenharmony_ci *
639d4afb5ceSopenharmony_ci * @param ssl - SSL point
640d4afb5ceSopenharmony_ci *
641d4afb5ceSopenharmony_ci * @return SSL state
642d4afb5ceSopenharmony_ci */
643d4afb5ceSopenharmony_ciOSSL_HANDSHAKE_STATE SSL_get_state(const SSL *ssl);
644d4afb5ceSopenharmony_ci
645d4afb5ceSopenharmony_ci/**
646d4afb5ceSopenharmony_ci * @brief set the SSL context read buffer length
647d4afb5ceSopenharmony_ci *
648d4afb5ceSopenharmony_ci * @param ctx - SSL context point
649d4afb5ceSopenharmony_ci * @param len - read buffer length
650d4afb5ceSopenharmony_ci *
651d4afb5ceSopenharmony_ci * @return none
652d4afb5ceSopenharmony_ci */
653d4afb5ceSopenharmony_civoid SSL_CTX_set_default_read_buffer_len(SSL_CTX *ctx, size_t len);
654d4afb5ceSopenharmony_ci
655d4afb5ceSopenharmony_ci/**
656d4afb5ceSopenharmony_ci * @brief set the SSL read buffer length
657d4afb5ceSopenharmony_ci *
658d4afb5ceSopenharmony_ci * @param ssl - SSL point
659d4afb5ceSopenharmony_ci * @param len - read buffer length
660d4afb5ceSopenharmony_ci *
661d4afb5ceSopenharmony_ci * @return none
662d4afb5ceSopenharmony_ci */
663d4afb5ceSopenharmony_civoid SSL_set_default_read_buffer_len(SSL *ssl, size_t len);
664d4afb5ceSopenharmony_ci
665d4afb5ceSopenharmony_ci/**
666d4afb5ceSopenharmony_ci * @brief set the SSL security level
667d4afb5ceSopenharmony_ci *
668d4afb5ceSopenharmony_ci * @param ssl   - SSL point
669d4afb5ceSopenharmony_ci * @param level - security level
670d4afb5ceSopenharmony_ci *
671d4afb5ceSopenharmony_ci * @return none
672d4afb5ceSopenharmony_ci */
673d4afb5ceSopenharmony_civoid SSL_set_security_level(SSL *ssl, int level);
674d4afb5ceSopenharmony_ci
675d4afb5ceSopenharmony_ci/**
676d4afb5ceSopenharmony_ci * @brief get the SSL security level
677d4afb5ceSopenharmony_ci *
678d4afb5ceSopenharmony_ci * @param ssl - SSL point
679d4afb5ceSopenharmony_ci *
680d4afb5ceSopenharmony_ci * @return security level
681d4afb5ceSopenharmony_ci */
682d4afb5ceSopenharmony_ciint SSL_get_security_level(const SSL *ssl);
683d4afb5ceSopenharmony_ci
684d4afb5ceSopenharmony_ci/**
685d4afb5ceSopenharmony_ci * @brief get the SSL verifying mode of the SSL context
686d4afb5ceSopenharmony_ci *
687d4afb5ceSopenharmony_ci * @param ctx - SSL context point
688d4afb5ceSopenharmony_ci *
689d4afb5ceSopenharmony_ci * @return verifying mode
690d4afb5ceSopenharmony_ci */
691d4afb5ceSopenharmony_ciint SSL_CTX_get_verify_mode(const SSL_CTX *ctx);
692d4afb5ceSopenharmony_ci
693d4afb5ceSopenharmony_ci/**
694d4afb5ceSopenharmony_ci * @brief get the SSL verifying depth of the SSL context
695d4afb5ceSopenharmony_ci *
696d4afb5ceSopenharmony_ci * @param ctx - SSL context point
697d4afb5ceSopenharmony_ci *
698d4afb5ceSopenharmony_ci * @return verifying depth
699d4afb5ceSopenharmony_ci */
700d4afb5ceSopenharmony_ciint SSL_CTX_get_verify_depth(const SSL_CTX *ctx);
701d4afb5ceSopenharmony_ci
702d4afb5ceSopenharmony_ci/**
703d4afb5ceSopenharmony_ci * @brief set the SSL context verifying of the SSL context
704d4afb5ceSopenharmony_ci *
705d4afb5ceSopenharmony_ci * @param ctx             - SSL context point
706d4afb5ceSopenharmony_ci * @param mode            - verifying mode
707d4afb5ceSopenharmony_ci * @param verify_callback - verifying callback function
708d4afb5ceSopenharmony_ci *
709d4afb5ceSopenharmony_ci * @return none
710d4afb5ceSopenharmony_ci */
711d4afb5ceSopenharmony_civoid SSL_CTX_set_verify(SSL_CTX *ctx, int mode, int (*verify_callback)(SSL *, mbedtls_x509_crt *));
712d4afb5ceSopenharmony_ci
713d4afb5ceSopenharmony_ci/**
714d4afb5ceSopenharmony_ci * @brief set the SSL verifying of the SSL context
715d4afb5ceSopenharmony_ci *
716d4afb5ceSopenharmony_ci * @param ctx             - SSL point
717d4afb5ceSopenharmony_ci * @param mode            - verifying mode
718d4afb5ceSopenharmony_ci * @param verify_callback - verifying callback function
719d4afb5ceSopenharmony_ci *
720d4afb5ceSopenharmony_ci * @return none
721d4afb5ceSopenharmony_ci */
722d4afb5ceSopenharmony_civoid SSL_set_verify(SSL *s, int mode, int (*verify_callback)(SSL *, mbedtls_x509_crt *));
723d4afb5ceSopenharmony_ci
724d4afb5ceSopenharmony_ci/**
725d4afb5ceSopenharmony_ci * @brief set the SSL verify depth of the SSL context
726d4afb5ceSopenharmony_ci *
727d4afb5ceSopenharmony_ci * @param ctx   - SSL context point
728d4afb5ceSopenharmony_ci * @param depth - verifying depth
729d4afb5ceSopenharmony_ci *
730d4afb5ceSopenharmony_ci * @return none
731d4afb5ceSopenharmony_ci */
732d4afb5ceSopenharmony_civoid SSL_CTX_set_verify_depth(SSL_CTX *ctx, int depth);
733d4afb5ceSopenharmony_ci
734d4afb5ceSopenharmony_ci/**
735d4afb5ceSopenharmony_ci * @brief certification verifying callback function
736d4afb5ceSopenharmony_ci *
737d4afb5ceSopenharmony_ci * @param preverify_ok - verifying result
738d4afb5ceSopenharmony_ci * @param x509_ctx     - X509 certification point
739d4afb5ceSopenharmony_ci *
740d4afb5ceSopenharmony_ci * @return verifying result
741d4afb5ceSopenharmony_ci */
742d4afb5ceSopenharmony_ciint verify_callback(SSL *, mbedtls_x509_crt *);
743d4afb5ceSopenharmony_ci
744d4afb5ceSopenharmony_ci/**
745d4afb5ceSopenharmony_ci * @brief set the session timeout time
746d4afb5ceSopenharmony_ci *
747d4afb5ceSopenharmony_ci * @param ctx - SSL context point
748d4afb5ceSopenharmony_ci * @param t   - new session timeout time
749d4afb5ceSopenharmony_ci *
750d4afb5ceSopenharmony_ci * @return old session timeout time
751d4afb5ceSopenharmony_ci */
752d4afb5ceSopenharmony_cilong SSL_CTX_set_timeout(SSL_CTX *ctx, long t);
753d4afb5ceSopenharmony_ci
754d4afb5ceSopenharmony_ci/**
755d4afb5ceSopenharmony_ci * @brief get the session timeout time
756d4afb5ceSopenharmony_ci *
757d4afb5ceSopenharmony_ci * @param ctx - SSL context point
758d4afb5ceSopenharmony_ci *
759d4afb5ceSopenharmony_ci * @return current session timeout time
760d4afb5ceSopenharmony_ci */
761d4afb5ceSopenharmony_cilong SSL_CTX_get_timeout(const SSL_CTX *ctx);
762d4afb5ceSopenharmony_ci
763d4afb5ceSopenharmony_ci/**
764d4afb5ceSopenharmony_ci * @brief set the SSL context cipher through the list string
765d4afb5ceSopenharmony_ci *
766d4afb5ceSopenharmony_ci * @param ctx - SSL context point
767d4afb5ceSopenharmony_ci * @param str - cipher controller list string
768d4afb5ceSopenharmony_ci *
769d4afb5ceSopenharmony_ci * @return result
770d4afb5ceSopenharmony_ci *     1 : OK
771d4afb5ceSopenharmony_ci *     0 : failed
772d4afb5ceSopenharmony_ci */
773d4afb5ceSopenharmony_ciint SSL_CTX_set_cipher_list(SSL_CTX *ctx, const char *str);
774d4afb5ceSopenharmony_ci
775d4afb5ceSopenharmony_ci/**
776d4afb5ceSopenharmony_ci * @brief set the SSL cipher through the list string
777d4afb5ceSopenharmony_ci *
778d4afb5ceSopenharmony_ci * @param ssl - SSL point
779d4afb5ceSopenharmony_ci * @param str - cipher controller list string
780d4afb5ceSopenharmony_ci *
781d4afb5ceSopenharmony_ci * @return result
782d4afb5ceSopenharmony_ci *     1 : OK
783d4afb5ceSopenharmony_ci *     0 : failed
784d4afb5ceSopenharmony_ci */
785d4afb5ceSopenharmony_ciint SSL_set_cipher_list(SSL *ssl, const char *str);
786d4afb5ceSopenharmony_ci
787d4afb5ceSopenharmony_ci/**
788d4afb5ceSopenharmony_ci * @brief get the SSL cipher list string
789d4afb5ceSopenharmony_ci *
790d4afb5ceSopenharmony_ci * @param ssl - SSL point
791d4afb5ceSopenharmony_ci *
792d4afb5ceSopenharmony_ci * @return cipher controller list string
793d4afb5ceSopenharmony_ci */
794d4afb5ceSopenharmony_ciconst char *SSL_get_cipher_list(const SSL *ssl, int n);
795d4afb5ceSopenharmony_ci
796d4afb5ceSopenharmony_ci/**
797d4afb5ceSopenharmony_ci * @brief get the SSL cipher
798d4afb5ceSopenharmony_ci *
799d4afb5ceSopenharmony_ci * @param ssl - SSL point
800d4afb5ceSopenharmony_ci *
801d4afb5ceSopenharmony_ci * @return current cipher
802d4afb5ceSopenharmony_ci */
803d4afb5ceSopenharmony_ciconst SSL_CIPHER *SSL_get_current_cipher(const SSL *ssl);
804d4afb5ceSopenharmony_ci
805d4afb5ceSopenharmony_ci/**
806d4afb5ceSopenharmony_ci * @brief get the SSL cipher string
807d4afb5ceSopenharmony_ci *
808d4afb5ceSopenharmony_ci * @param ssl - SSL point
809d4afb5ceSopenharmony_ci *
810d4afb5ceSopenharmony_ci * @return cipher string
811d4afb5ceSopenharmony_ci */
812d4afb5ceSopenharmony_ciconst char *SSL_get_cipher(const SSL *ssl);
813d4afb5ceSopenharmony_ci
814d4afb5ceSopenharmony_ci/**
815d4afb5ceSopenharmony_ci * @brief get the SSL context object X509 certification storage
816d4afb5ceSopenharmony_ci *
817d4afb5ceSopenharmony_ci * @param ctx - SSL context point
818d4afb5ceSopenharmony_ci *
819d4afb5ceSopenharmony_ci * @return x509 certification storage
820d4afb5ceSopenharmony_ci */
821d4afb5ceSopenharmony_ciX509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *ctx);
822d4afb5ceSopenharmony_ci
823d4afb5ceSopenharmony_ci/**
824d4afb5ceSopenharmony_ci * @brief set the SSL context object X509 certification store
825d4afb5ceSopenharmony_ci *
826d4afb5ceSopenharmony_ci * @param ctx   - SSL context point
827d4afb5ceSopenharmony_ci * @param store - X509 certification store
828d4afb5ceSopenharmony_ci *
829d4afb5ceSopenharmony_ci * @return none
830d4afb5ceSopenharmony_ci */
831d4afb5ceSopenharmony_civoid SSL_CTX_set_cert_store(SSL_CTX *ctx, X509_STORE *store);
832d4afb5ceSopenharmony_ci
833d4afb5ceSopenharmony_ci/**
834d4afb5ceSopenharmony_ci * @brief get the SSL specifical statement
835d4afb5ceSopenharmony_ci *
836d4afb5ceSopenharmony_ci * @param ssl - SSL point
837d4afb5ceSopenharmony_ci *
838d4afb5ceSopenharmony_ci * @return specifical statement
839d4afb5ceSopenharmony_ci */
840d4afb5ceSopenharmony_ciint SSL_want(const SSL *ssl);
841d4afb5ceSopenharmony_ci
842d4afb5ceSopenharmony_ci/**
843d4afb5ceSopenharmony_ci * @brief check if the SSL is SSL_X509_LOOKUP state
844d4afb5ceSopenharmony_ci *
845d4afb5ceSopenharmony_ci * @param ssl - SSL point
846d4afb5ceSopenharmony_ci *
847d4afb5ceSopenharmony_ci * @return result
848d4afb5ceSopenharmony_ci *     1 : OK
849d4afb5ceSopenharmony_ci *     0 : failed
850d4afb5ceSopenharmony_ci */
851d4afb5ceSopenharmony_ciint SSL_want_x509_lookup(const SSL *ssl);
852d4afb5ceSopenharmony_ci
853d4afb5ceSopenharmony_ci/**
854d4afb5ceSopenharmony_ci * @brief reset the SSL
855d4afb5ceSopenharmony_ci *
856d4afb5ceSopenharmony_ci * @param ssl - SSL point
857d4afb5ceSopenharmony_ci *
858d4afb5ceSopenharmony_ci * @return result
859d4afb5ceSopenharmony_ci *     1 : OK
860d4afb5ceSopenharmony_ci *     0 : failed
861d4afb5ceSopenharmony_ci */
862d4afb5ceSopenharmony_ciint SSL_clear(SSL *ssl);
863d4afb5ceSopenharmony_ci
864d4afb5ceSopenharmony_ci/**
865d4afb5ceSopenharmony_ci * @brief get the socket handle of the SSL
866d4afb5ceSopenharmony_ci *
867d4afb5ceSopenharmony_ci * @param ssl - SSL point
868d4afb5ceSopenharmony_ci *
869d4afb5ceSopenharmony_ci * @return result
870d4afb5ceSopenharmony_ci *     >= 0 : yes, and return socket handle
871d4afb5ceSopenharmony_ci *      < 0 : a error catch
872d4afb5ceSopenharmony_ci */
873d4afb5ceSopenharmony_ciint SSL_get_fd(const SSL *ssl);
874d4afb5ceSopenharmony_ci
875d4afb5ceSopenharmony_ci/**
876d4afb5ceSopenharmony_ci * @brief get the read only socket handle of the SSL
877d4afb5ceSopenharmony_ci *
878d4afb5ceSopenharmony_ci * @param ssl - SSL point
879d4afb5ceSopenharmony_ci *
880d4afb5ceSopenharmony_ci * @return result
881d4afb5ceSopenharmony_ci *     >= 0 : yes, and return socket handle
882d4afb5ceSopenharmony_ci *      < 0 : a error catch
883d4afb5ceSopenharmony_ci */
884d4afb5ceSopenharmony_ciint SSL_get_rfd(const SSL *ssl);
885d4afb5ceSopenharmony_ci
886d4afb5ceSopenharmony_ci/**
887d4afb5ceSopenharmony_ci * @brief get the write only socket handle of the SSL
888d4afb5ceSopenharmony_ci *
889d4afb5ceSopenharmony_ci * @param ssl - SSL point
890d4afb5ceSopenharmony_ci *
891d4afb5ceSopenharmony_ci * @return result
892d4afb5ceSopenharmony_ci *     >= 0 : yes, and return socket handle
893d4afb5ceSopenharmony_ci *      < 0 : a error catch
894d4afb5ceSopenharmony_ci */
895d4afb5ceSopenharmony_ciint SSL_get_wfd(const SSL *ssl);
896d4afb5ceSopenharmony_ci
897d4afb5ceSopenharmony_ci/**
898d4afb5ceSopenharmony_ci * @brief set the SSL if we can read as many as data
899d4afb5ceSopenharmony_ci *
900d4afb5ceSopenharmony_ci * @param ssl - SSL point
901d4afb5ceSopenharmony_ci * @param yes - enable the function
902d4afb5ceSopenharmony_ci *
903d4afb5ceSopenharmony_ci * @return none
904d4afb5ceSopenharmony_ci */
905d4afb5ceSopenharmony_civoid SSL_set_read_ahead(SSL *s, int yes);
906d4afb5ceSopenharmony_ci
907d4afb5ceSopenharmony_ci/**
908d4afb5ceSopenharmony_ci * @brief set the SSL context if we can read as many as data
909d4afb5ceSopenharmony_ci *
910d4afb5ceSopenharmony_ci * @param ctx - SSL context point
911d4afb5ceSopenharmony_ci * @param yes - enbale the function
912d4afb5ceSopenharmony_ci *
913d4afb5ceSopenharmony_ci * @return none
914d4afb5ceSopenharmony_ci */
915d4afb5ceSopenharmony_civoid SSL_CTX_set_read_ahead(SSL_CTX *ctx, int yes);
916d4afb5ceSopenharmony_ci
917d4afb5ceSopenharmony_ci/**
918d4afb5ceSopenharmony_ci * @brief get the SSL ahead signal if we can read as many as data
919d4afb5ceSopenharmony_ci *
920d4afb5ceSopenharmony_ci * @param ssl - SSL point
921d4afb5ceSopenharmony_ci *
922d4afb5ceSopenharmony_ci * @return SSL context ahead signal
923d4afb5ceSopenharmony_ci */
924d4afb5ceSopenharmony_ciint SSL_get_read_ahead(const SSL *ssl);
925d4afb5ceSopenharmony_ci
926d4afb5ceSopenharmony_ci/**
927d4afb5ceSopenharmony_ci * @brief get the SSL context ahead signal if we can read as many as data
928d4afb5ceSopenharmony_ci *
929d4afb5ceSopenharmony_ci * @param ctx - SSL context point
930d4afb5ceSopenharmony_ci *
931d4afb5ceSopenharmony_ci * @return SSL context ahead signal
932d4afb5ceSopenharmony_ci */
933d4afb5ceSopenharmony_cilong SSL_CTX_get_read_ahead(SSL_CTX *ctx);
934d4afb5ceSopenharmony_ci
935d4afb5ceSopenharmony_ci/**
936d4afb5ceSopenharmony_ci * @brief check if some data can be read
937d4afb5ceSopenharmony_ci *
938d4afb5ceSopenharmony_ci * @param ssl - SSL point
939d4afb5ceSopenharmony_ci *
940d4afb5ceSopenharmony_ci * @return
941d4afb5ceSopenharmony_ci *         1 : there are bytes to be read
942d4afb5ceSopenharmony_ci *         0 : no data
943d4afb5ceSopenharmony_ci */
944d4afb5ceSopenharmony_ciint SSL_has_pending(const SSL *ssl);
945d4afb5ceSopenharmony_ci
946d4afb5ceSopenharmony_ci/**
947d4afb5ceSopenharmony_ci * @brief load the X509 certification into SSL context
948d4afb5ceSopenharmony_ci *
949d4afb5ceSopenharmony_ci * @param ctx - SSL context point
950d4afb5ceSopenharmony_ci * @param x   - X509 certification point
951d4afb5ceSopenharmony_ci *
952d4afb5ceSopenharmony_ci * @return result
953d4afb5ceSopenharmony_ci *     1 : OK
954d4afb5ceSopenharmony_ci *     0 : failed
955d4afb5ceSopenharmony_ci */
956d4afb5ceSopenharmony_ciint SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x);//loads the certificate x into ctx
957d4afb5ceSopenharmony_ci
958d4afb5ceSopenharmony_ci/**
959d4afb5ceSopenharmony_ci * @brief load the ASN1 certification into SSL context
960d4afb5ceSopenharmony_ci *
961d4afb5ceSopenharmony_ci * @param ctx - SSL context point
962d4afb5ceSopenharmony_ci * @param len - certification length
963d4afb5ceSopenharmony_ci * @param d   - data point
964d4afb5ceSopenharmony_ci *
965d4afb5ceSopenharmony_ci * @return result
966d4afb5ceSopenharmony_ci *     1 : OK
967d4afb5ceSopenharmony_ci *     0 : failed
968d4afb5ceSopenharmony_ci */
969d4afb5ceSopenharmony_ciint SSL_CTX_use_certificate_ASN1(SSL_CTX *ctx, int len, const unsigned char *d);
970d4afb5ceSopenharmony_ci
971d4afb5ceSopenharmony_ci/**
972d4afb5ceSopenharmony_ci * @brief load the certification file into SSL context
973d4afb5ceSopenharmony_ci *
974d4afb5ceSopenharmony_ci * @param ctx  - SSL context point
975d4afb5ceSopenharmony_ci * @param file - certification file name
976d4afb5ceSopenharmony_ci * @param type - certification encoding type
977d4afb5ceSopenharmony_ci *
978d4afb5ceSopenharmony_ci * @return result
979d4afb5ceSopenharmony_ci *     1 : OK
980d4afb5ceSopenharmony_ci *     0 : failed
981d4afb5ceSopenharmony_ci */
982d4afb5ceSopenharmony_ciint SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, int type);
983d4afb5ceSopenharmony_ci
984d4afb5ceSopenharmony_ci/**
985d4afb5ceSopenharmony_ci * @brief load the certification chain file into SSL context
986d4afb5ceSopenharmony_ci *
987d4afb5ceSopenharmony_ci * @param ctx  - SSL context point
988d4afb5ceSopenharmony_ci * @param file - certification chain file name
989d4afb5ceSopenharmony_ci *
990d4afb5ceSopenharmony_ci * @return result
991d4afb5ceSopenharmony_ci *     1 : OK
992d4afb5ceSopenharmony_ci *     0 : failed
993d4afb5ceSopenharmony_ci */
994d4afb5ceSopenharmony_ciint SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx, const char *file);
995d4afb5ceSopenharmony_ci
996d4afb5ceSopenharmony_ci
997d4afb5ceSopenharmony_ci/**
998d4afb5ceSopenharmony_ci * @brief load the ASN1 private key into SSL context
999d4afb5ceSopenharmony_ci *
1000d4afb5ceSopenharmony_ci * @param ctx - SSL context point
1001d4afb5ceSopenharmony_ci * @param d   - data point
1002d4afb5ceSopenharmony_ci * @param len - private key length
1003d4afb5ceSopenharmony_ci *
1004d4afb5ceSopenharmony_ci * @return result
1005d4afb5ceSopenharmony_ci *     1 : OK
1006d4afb5ceSopenharmony_ci *     0 : failed
1007d4afb5ceSopenharmony_ci */
1008d4afb5ceSopenharmony_ciint SSL_CTX_use_PrivateKey_ASN1(int pk, SSL_CTX *ctx, const unsigned char *d,  long len);//adds the private key of type pk stored at memory location d (length len) to ctx
1009d4afb5ceSopenharmony_ci
1010d4afb5ceSopenharmony_ci/**
1011d4afb5ceSopenharmony_ci * @brief load the private key file into SSL context
1012d4afb5ceSopenharmony_ci *
1013d4afb5ceSopenharmony_ci * @param ctx  - SSL context point
1014d4afb5ceSopenharmony_ci * @param file - private key file name
1015d4afb5ceSopenharmony_ci * @param type - private key encoding type
1016d4afb5ceSopenharmony_ci *
1017d4afb5ceSopenharmony_ci * @return result
1018d4afb5ceSopenharmony_ci *     1 : OK
1019d4afb5ceSopenharmony_ci *     0 : failed
1020d4afb5ceSopenharmony_ci */
1021d4afb5ceSopenharmony_ciint SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, int type);
1022d4afb5ceSopenharmony_ci
1023d4afb5ceSopenharmony_ci/**
1024d4afb5ceSopenharmony_ci * @brief load the RSA private key into SSL context
1025d4afb5ceSopenharmony_ci *
1026d4afb5ceSopenharmony_ci * @param ctx - SSL context point
1027d4afb5ceSopenharmony_ci * @param x   - RSA private key point
1028d4afb5ceSopenharmony_ci *
1029d4afb5ceSopenharmony_ci * @return result
1030d4afb5ceSopenharmony_ci *     1 : OK
1031d4afb5ceSopenharmony_ci *     0 : failed
1032d4afb5ceSopenharmony_ci */
1033d4afb5ceSopenharmony_ciint SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa);
1034d4afb5ceSopenharmony_ci
1035d4afb5ceSopenharmony_ci/**
1036d4afb5ceSopenharmony_ci * @brief load the RSA ASN1 private key into SSL context
1037d4afb5ceSopenharmony_ci *
1038d4afb5ceSopenharmony_ci * @param ctx - SSL context point
1039d4afb5ceSopenharmony_ci * @param d   - data point
1040d4afb5ceSopenharmony_ci * @param len - RSA private key length
1041d4afb5ceSopenharmony_ci *
1042d4afb5ceSopenharmony_ci * @return result
1043d4afb5ceSopenharmony_ci *     1 : OK
1044d4afb5ceSopenharmony_ci *     0 : failed
1045d4afb5ceSopenharmony_ci */
1046d4afb5ceSopenharmony_ciint SSL_CTX_use_RSAPrivateKey_ASN1(SSL_CTX *ctx, const unsigned char *d, long len);
1047d4afb5ceSopenharmony_ci
1048d4afb5ceSopenharmony_ci/**
1049d4afb5ceSopenharmony_ci * @brief load the RSA private key file into SSL context
1050d4afb5ceSopenharmony_ci *
1051d4afb5ceSopenharmony_ci * @param ctx  - SSL context point
1052d4afb5ceSopenharmony_ci * @param file - RSA private key file name
1053d4afb5ceSopenharmony_ci * @param type - private key encoding type
1054d4afb5ceSopenharmony_ci *
1055d4afb5ceSopenharmony_ci * @return result
1056d4afb5ceSopenharmony_ci *     1 : OK
1057d4afb5ceSopenharmony_ci *     0 : failed
1058d4afb5ceSopenharmony_ci */
1059d4afb5ceSopenharmony_ciint SSL_CTX_use_RSAPrivateKey_file(SSL_CTX *ctx, const char *file, int type);
1060d4afb5ceSopenharmony_ci
1061d4afb5ceSopenharmony_ci
1062d4afb5ceSopenharmony_ci/**
1063d4afb5ceSopenharmony_ci * @brief check if the private key and certification is matched
1064d4afb5ceSopenharmony_ci *
1065d4afb5ceSopenharmony_ci * @param ctx  - SSL context point
1066d4afb5ceSopenharmony_ci *
1067d4afb5ceSopenharmony_ci * @return result
1068d4afb5ceSopenharmony_ci *     1 : OK
1069d4afb5ceSopenharmony_ci *     0 : failed
1070d4afb5ceSopenharmony_ci */
1071d4afb5ceSopenharmony_ciint SSL_CTX_check_private_key(const SSL_CTX *ctx);
1072d4afb5ceSopenharmony_ci
1073d4afb5ceSopenharmony_ci/**
1074d4afb5ceSopenharmony_ci * @brief set the SSL context server information
1075d4afb5ceSopenharmony_ci *
1076d4afb5ceSopenharmony_ci * @param ctx               - SSL context point
1077d4afb5ceSopenharmony_ci * @param serverinfo        - server information string
1078d4afb5ceSopenharmony_ci * @param serverinfo_length - server information length
1079d4afb5ceSopenharmony_ci *
1080d4afb5ceSopenharmony_ci * @return result
1081d4afb5ceSopenharmony_ci *     1 : OK
1082d4afb5ceSopenharmony_ci *     0 : failed
1083d4afb5ceSopenharmony_ci */
1084d4afb5ceSopenharmony_ciint SSL_CTX_use_serverinfo(SSL_CTX *ctx, const unsigned char *serverinfo, size_t serverinfo_length);
1085d4afb5ceSopenharmony_ci
1086d4afb5ceSopenharmony_ci/**
1087d4afb5ceSopenharmony_ci * @brief load  the SSL context server infomation file into SSL context
1088d4afb5ceSopenharmony_ci *
1089d4afb5ceSopenharmony_ci * @param ctx  - SSL context point
1090d4afb5ceSopenharmony_ci * @param file - server information file
1091d4afb5ceSopenharmony_ci *
1092d4afb5ceSopenharmony_ci * @return result
1093d4afb5ceSopenharmony_ci *     1 : OK
1094d4afb5ceSopenharmony_ci *     0 : failed
1095d4afb5ceSopenharmony_ci */
1096d4afb5ceSopenharmony_ciint SSL_CTX_use_serverinfo_file(SSL_CTX *ctx, const char *file);
1097d4afb5ceSopenharmony_ci
1098d4afb5ceSopenharmony_ci/**
1099d4afb5ceSopenharmony_ci * @brief SSL select next function
1100d4afb5ceSopenharmony_ci *
1101d4afb5ceSopenharmony_ci * @param out        - point of output data point
1102d4afb5ceSopenharmony_ci * @param outlen     - output data length
1103d4afb5ceSopenharmony_ci * @param in         - input data
1104d4afb5ceSopenharmony_ci * @param inlen      - input data length
1105d4afb5ceSopenharmony_ci * @param client     - client data point
1106d4afb5ceSopenharmony_ci * @param client_len -client data length
1107d4afb5ceSopenharmony_ci *
1108d4afb5ceSopenharmony_ci * @return NPN state
1109d4afb5ceSopenharmony_ci *         OPENSSL_NPN_UNSUPPORTED : not support
1110d4afb5ceSopenharmony_ci *         OPENSSL_NPN_NEGOTIATED  : negotiated
1111d4afb5ceSopenharmony_ci *         OPENSSL_NPN_NO_OVERLAP  : no overlap
1112d4afb5ceSopenharmony_ci */
1113d4afb5ceSopenharmony_ciint SSL_select_next_proto(unsigned char **out, unsigned char *outlen,
1114d4afb5ceSopenharmony_ci                          const unsigned char *in, unsigned int inlen,
1115d4afb5ceSopenharmony_ci                          const unsigned char *client, unsigned int client_len);
1116d4afb5ceSopenharmony_ci
1117d4afb5ceSopenharmony_ci/**
1118d4afb5ceSopenharmony_ci * @brief load the extra certification chain into the SSL context
1119d4afb5ceSopenharmony_ci *
1120d4afb5ceSopenharmony_ci * @param ctx  - SSL context point
1121d4afb5ceSopenharmony_ci * @param x509 - X509 certification
1122d4afb5ceSopenharmony_ci *
1123d4afb5ceSopenharmony_ci * @return result
1124d4afb5ceSopenharmony_ci *     1 : OK
1125d4afb5ceSopenharmony_ci *     0 : failed
1126d4afb5ceSopenharmony_ci */
1127d4afb5ceSopenharmony_cilong SSL_CTX_add_extra_chain_cert(SSL_CTX *ctx, X509 *);
1128d4afb5ceSopenharmony_ci
1129d4afb5ceSopenharmony_ci/**
1130d4afb5ceSopenharmony_ci * @brief control the SSL context
1131d4afb5ceSopenharmony_ci *
1132d4afb5ceSopenharmony_ci * @param ctx  - SSL context point
1133d4afb5ceSopenharmony_ci * @param cmd  - command
1134d4afb5ceSopenharmony_ci * @param larg - parameter length
1135d4afb5ceSopenharmony_ci * @param parg - parameter point
1136d4afb5ceSopenharmony_ci *
1137d4afb5ceSopenharmony_ci * @return result
1138d4afb5ceSopenharmony_ci *     1 : OK
1139d4afb5ceSopenharmony_ci *     0 : failed
1140d4afb5ceSopenharmony_ci */
1141d4afb5ceSopenharmony_cilong SSL_CTX_ctrl(SSL_CTX *ctx, int cmd, long larg, char *parg);
1142d4afb5ceSopenharmony_ci
1143d4afb5ceSopenharmony_ci/**
1144d4afb5ceSopenharmony_ci * @brief get the SSL context cipher
1145d4afb5ceSopenharmony_ci *
1146d4afb5ceSopenharmony_ci * @param ctx - SSL context point
1147d4afb5ceSopenharmony_ci *
1148d4afb5ceSopenharmony_ci * @return SSL context cipher
1149d4afb5ceSopenharmony_ci */
1150d4afb5ceSopenharmony_ciSTACK *SSL_CTX_get_ciphers(const SSL_CTX *ctx);
1151d4afb5ceSopenharmony_ci
1152d4afb5ceSopenharmony_ci/**
1153d4afb5ceSopenharmony_ci * @brief check if the SSL context can read as many as data
1154d4afb5ceSopenharmony_ci *
1155d4afb5ceSopenharmony_ci * @param ctx - SSL context point
1156d4afb5ceSopenharmony_ci *
1157d4afb5ceSopenharmony_ci * @return result
1158d4afb5ceSopenharmony_ci *     1 : OK
1159d4afb5ceSopenharmony_ci *     0 : failed
1160d4afb5ceSopenharmony_ci */
1161d4afb5ceSopenharmony_cilong SSL_CTX_get_default_read_ahead(SSL_CTX *ctx);
1162d4afb5ceSopenharmony_ci
1163d4afb5ceSopenharmony_ci/**
1164d4afb5ceSopenharmony_ci * @brief get the SSL context extra data
1165d4afb5ceSopenharmony_ci *
1166d4afb5ceSopenharmony_ci * @param ctx - SSL context point
1167d4afb5ceSopenharmony_ci * @param idx - index
1168d4afb5ceSopenharmony_ci *
1169d4afb5ceSopenharmony_ci * @return data point
1170d4afb5ceSopenharmony_ci */
1171d4afb5ceSopenharmony_civoid *SSL_CTX_get_ex_data(const SSL_CTX *ctx, int idx);
1172d4afb5ceSopenharmony_ci
1173d4afb5ceSopenharmony_ci/**
1174d4afb5ceSopenharmony_ci * @brief get the SSL context quiet shutdown option
1175d4afb5ceSopenharmony_ci *
1176d4afb5ceSopenharmony_ci * @param ctx - SSL context point
1177d4afb5ceSopenharmony_ci *
1178d4afb5ceSopenharmony_ci * @return quiet shutdown option
1179d4afb5ceSopenharmony_ci */
1180d4afb5ceSopenharmony_ciint SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx);
1181d4afb5ceSopenharmony_ci
1182d4afb5ceSopenharmony_ci/**
1183d4afb5ceSopenharmony_ci * @brief load the SSL context CA file
1184d4afb5ceSopenharmony_ci *
1185d4afb5ceSopenharmony_ci * @param ctx    - SSL context point
1186d4afb5ceSopenharmony_ci * @param CAfile - CA certification file
1187d4afb5ceSopenharmony_ci * @param CApath - CA certification file path
1188d4afb5ceSopenharmony_ci *
1189d4afb5ceSopenharmony_ci * @return result
1190d4afb5ceSopenharmony_ci *     1 : OK
1191d4afb5ceSopenharmony_ci *     0 : failed
1192d4afb5ceSopenharmony_ci */
1193d4afb5ceSopenharmony_ciint SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile, const char *CApath);
1194d4afb5ceSopenharmony_ci
1195d4afb5ceSopenharmony_ci/**
1196d4afb5ceSopenharmony_ci * @brief add SSL context reference count by '1'
1197d4afb5ceSopenharmony_ci *
1198d4afb5ceSopenharmony_ci * @param ctx - SSL context point
1199d4afb5ceSopenharmony_ci *
1200d4afb5ceSopenharmony_ci * @return result
1201d4afb5ceSopenharmony_ci *     1 : OK
1202d4afb5ceSopenharmony_ci *     0 : failed
1203d4afb5ceSopenharmony_ci */
1204d4afb5ceSopenharmony_ciint SSL_CTX_up_ref(SSL_CTX *ctx);
1205d4afb5ceSopenharmony_ci
1206d4afb5ceSopenharmony_ci/**
1207d4afb5ceSopenharmony_ci * @brief set SSL context application private data
1208d4afb5ceSopenharmony_ci *
1209d4afb5ceSopenharmony_ci * @param ctx - SSL context point
1210d4afb5ceSopenharmony_ci * @param arg - private data
1211d4afb5ceSopenharmony_ci *
1212d4afb5ceSopenharmony_ci * @return result
1213d4afb5ceSopenharmony_ci *     1 : OK
1214d4afb5ceSopenharmony_ci *     0 : failed
1215d4afb5ceSopenharmony_ci */
1216d4afb5ceSopenharmony_ciint SSL_CTX_set_app_data(SSL_CTX *ctx, void *arg);
1217d4afb5ceSopenharmony_ci
1218d4afb5ceSopenharmony_ci/**
1219d4afb5ceSopenharmony_ci * @brief set SSL context client certification callback function
1220d4afb5ceSopenharmony_ci *
1221d4afb5ceSopenharmony_ci * @param ctx - SSL context point
1222d4afb5ceSopenharmony_ci * @param cb  - callback function
1223d4afb5ceSopenharmony_ci *
1224d4afb5ceSopenharmony_ci * @return none
1225d4afb5ceSopenharmony_ci */
1226d4afb5ceSopenharmony_civoid SSL_CTX_set_client_cert_cb(SSL_CTX *ctx, int (*cb)(SSL *ssl, X509 **x509, EVP_PKEY **pkey));
1227d4afb5ceSopenharmony_ci
1228d4afb5ceSopenharmony_ci/**
1229d4afb5ceSopenharmony_ci * @brief set the SSL context if we can read as many as data
1230d4afb5ceSopenharmony_ci *
1231d4afb5ceSopenharmony_ci * @param ctx - SSL context point
1232d4afb5ceSopenharmony_ci * @param m   - enable the fuction
1233d4afb5ceSopenharmony_ci *
1234d4afb5ceSopenharmony_ci * @return none
1235d4afb5ceSopenharmony_ci */
1236d4afb5ceSopenharmony_civoid SSL_CTX_set_default_read_ahead(SSL_CTX *ctx, int m);
1237d4afb5ceSopenharmony_ci
1238d4afb5ceSopenharmony_ci/**
1239d4afb5ceSopenharmony_ci * @brief set SSL context default verifying path
1240d4afb5ceSopenharmony_ci *
1241d4afb5ceSopenharmony_ci * @param ctx - SSL context point
1242d4afb5ceSopenharmony_ci *
1243d4afb5ceSopenharmony_ci * @return result
1244d4afb5ceSopenharmony_ci *     1 : OK
1245d4afb5ceSopenharmony_ci *     0 : failed
1246d4afb5ceSopenharmony_ci */
1247d4afb5ceSopenharmony_ciint SSL_CTX_set_default_verify_paths(SSL_CTX *ctx);
1248d4afb5ceSopenharmony_ci
1249d4afb5ceSopenharmony_ci/**
1250d4afb5ceSopenharmony_ci * @brief set SSL context default verifying directory
1251d4afb5ceSopenharmony_ci *
1252d4afb5ceSopenharmony_ci * @param ctx - SSL context point
1253d4afb5ceSopenharmony_ci *
1254d4afb5ceSopenharmony_ci * @return result
1255d4afb5ceSopenharmony_ci *     1 : OK
1256d4afb5ceSopenharmony_ci *     0 : failed
1257d4afb5ceSopenharmony_ci */
1258d4afb5ceSopenharmony_ciint SSL_CTX_set_default_verify_dir(SSL_CTX *ctx);
1259d4afb5ceSopenharmony_ci
1260d4afb5ceSopenharmony_ci/**
1261d4afb5ceSopenharmony_ci * @brief set SSL context default verifying file
1262d4afb5ceSopenharmony_ci *
1263d4afb5ceSopenharmony_ci * @param ctx - SSL context point
1264d4afb5ceSopenharmony_ci *
1265d4afb5ceSopenharmony_ci * @return result
1266d4afb5ceSopenharmony_ci *     1 : OK
1267d4afb5ceSopenharmony_ci *     0 : failed
1268d4afb5ceSopenharmony_ci */
1269d4afb5ceSopenharmony_ciint SSL_CTX_set_default_verify_file(SSL_CTX *ctx);
1270d4afb5ceSopenharmony_ci
1271d4afb5ceSopenharmony_ci/**
1272d4afb5ceSopenharmony_ci * @brief set SSL context extra data
1273d4afb5ceSopenharmony_ci *
1274d4afb5ceSopenharmony_ci * @param ctx - SSL context point
1275d4afb5ceSopenharmony_ci * @param idx - data index
1276d4afb5ceSopenharmony_ci * @param arg - data point
1277d4afb5ceSopenharmony_ci *
1278d4afb5ceSopenharmony_ci * @return result
1279d4afb5ceSopenharmony_ci *     1 : OK
1280d4afb5ceSopenharmony_ci *     0 : failed
1281d4afb5ceSopenharmony_ci */
1282d4afb5ceSopenharmony_ciint SSL_CTX_set_ex_data(SSL_CTX *s, int idx, char *arg);
1283d4afb5ceSopenharmony_ci
1284d4afb5ceSopenharmony_ci/**
1285d4afb5ceSopenharmony_ci * @brief clear the SSL context option bit of "op"
1286d4afb5ceSopenharmony_ci *
1287d4afb5ceSopenharmony_ci * @param ctx - SSL context point
1288d4afb5ceSopenharmony_ci * @param op  - option
1289d4afb5ceSopenharmony_ci *
1290d4afb5ceSopenharmony_ci * @return SSL context option
1291d4afb5ceSopenharmony_ci */
1292d4afb5ceSopenharmony_ciunsigned long SSL_CTX_clear_options(SSL_CTX *ctx, unsigned long op);
1293d4afb5ceSopenharmony_ci
1294d4afb5ceSopenharmony_ci/**
1295d4afb5ceSopenharmony_ci * @brief get the SSL context option
1296d4afb5ceSopenharmony_ci *
1297d4afb5ceSopenharmony_ci * @param ctx - SSL context point
1298d4afb5ceSopenharmony_ci * @param op  - option
1299d4afb5ceSopenharmony_ci *
1300d4afb5ceSopenharmony_ci * @return SSL context option
1301d4afb5ceSopenharmony_ci */
1302d4afb5ceSopenharmony_ciunsigned long SSL_CTX_get_options(SSL_CTX *ctx);
1303d4afb5ceSopenharmony_ci
1304d4afb5ceSopenharmony_ci/**
1305d4afb5ceSopenharmony_ci * @brief set the SSL context quiet shutdown mode
1306d4afb5ceSopenharmony_ci *
1307d4afb5ceSopenharmony_ci * @param ctx  - SSL context point
1308d4afb5ceSopenharmony_ci * @param mode - mode
1309d4afb5ceSopenharmony_ci *
1310d4afb5ceSopenharmony_ci * @return none
1311d4afb5ceSopenharmony_ci */
1312d4afb5ceSopenharmony_civoid SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx, int mode);
1313d4afb5ceSopenharmony_ci
1314d4afb5ceSopenharmony_ci/**
1315d4afb5ceSopenharmony_ci * @brief get the SSL context X509 certification
1316d4afb5ceSopenharmony_ci *
1317d4afb5ceSopenharmony_ci * @param ctx - SSL context point
1318d4afb5ceSopenharmony_ci *
1319d4afb5ceSopenharmony_ci * @return X509 certification
1320d4afb5ceSopenharmony_ci */
1321d4afb5ceSopenharmony_ciX509 *SSL_CTX_get0_certificate(const SSL_CTX *ctx);
1322d4afb5ceSopenharmony_ci
1323d4afb5ceSopenharmony_ci/**
1324d4afb5ceSopenharmony_ci * @brief get the SSL context private key
1325d4afb5ceSopenharmony_ci *
1326d4afb5ceSopenharmony_ci * @param ctx - SSL context point
1327d4afb5ceSopenharmony_ci *
1328d4afb5ceSopenharmony_ci * @return private key
1329d4afb5ceSopenharmony_ci */
1330d4afb5ceSopenharmony_ciEVP_PKEY *SSL_CTX_get0_privatekey(const SSL_CTX *ctx);
1331d4afb5ceSopenharmony_ci
1332d4afb5ceSopenharmony_ci/**
1333d4afb5ceSopenharmony_ci * @brief set SSL context PSK identity hint
1334d4afb5ceSopenharmony_ci *
1335d4afb5ceSopenharmony_ci * @param ctx  - SSL context point
1336d4afb5ceSopenharmony_ci * @param hint - PSK identity hint
1337d4afb5ceSopenharmony_ci *
1338d4afb5ceSopenharmony_ci * @return result
1339d4afb5ceSopenharmony_ci *     1 : OK
1340d4afb5ceSopenharmony_ci *     0 : failed
1341d4afb5ceSopenharmony_ci */
1342d4afb5ceSopenharmony_ciint SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *hint);
1343d4afb5ceSopenharmony_ci
1344d4afb5ceSopenharmony_ci/**
1345d4afb5ceSopenharmony_ci * @brief set SSL context PSK server callback function
1346d4afb5ceSopenharmony_ci *
1347d4afb5ceSopenharmony_ci * @param ctx      - SSL context point
1348d4afb5ceSopenharmony_ci * @param callback - callback function
1349d4afb5ceSopenharmony_ci *
1350d4afb5ceSopenharmony_ci * @return none
1351d4afb5ceSopenharmony_ci */
1352d4afb5ceSopenharmony_civoid SSL_CTX_set_psk_server_callback(SSL_CTX *ctx,
1353d4afb5ceSopenharmony_ci                                     unsigned int (*callback)(SSL *ssl,
1354d4afb5ceSopenharmony_ci                                                              const char *identity,
1355d4afb5ceSopenharmony_ci                                                              unsigned char *psk,
1356d4afb5ceSopenharmony_ci                                                              int max_psk_len));
1357d4afb5ceSopenharmony_ci/**
1358d4afb5ceSopenharmony_ci * @brief get alert description string
1359d4afb5ceSopenharmony_ci *
1360d4afb5ceSopenharmony_ci * @param value - alert value
1361d4afb5ceSopenharmony_ci *
1362d4afb5ceSopenharmony_ci * @return alert description string
1363d4afb5ceSopenharmony_ci */
1364d4afb5ceSopenharmony_ciconst char *SSL_alert_desc_string(int value);
1365d4afb5ceSopenharmony_ci
1366d4afb5ceSopenharmony_ci/**
1367d4afb5ceSopenharmony_ci * @brief get alert description long string
1368d4afb5ceSopenharmony_ci *
1369d4afb5ceSopenharmony_ci * @param value - alert value
1370d4afb5ceSopenharmony_ci *
1371d4afb5ceSopenharmony_ci * @return alert description long string
1372d4afb5ceSopenharmony_ci */
1373d4afb5ceSopenharmony_ciconst char *SSL_alert_desc_string_long(int value);
1374d4afb5ceSopenharmony_ci
1375d4afb5ceSopenharmony_ci/**
1376d4afb5ceSopenharmony_ci * @brief get alert type string
1377d4afb5ceSopenharmony_ci *
1378d4afb5ceSopenharmony_ci * @param value - alert value
1379d4afb5ceSopenharmony_ci *
1380d4afb5ceSopenharmony_ci * @return alert type string
1381d4afb5ceSopenharmony_ci */
1382d4afb5ceSopenharmony_ciconst char *SSL_alert_type_string(int value);
1383d4afb5ceSopenharmony_ci
1384d4afb5ceSopenharmony_ci/**
1385d4afb5ceSopenharmony_ci * @brief get alert type long string
1386d4afb5ceSopenharmony_ci *
1387d4afb5ceSopenharmony_ci * @param value - alert value
1388d4afb5ceSopenharmony_ci *
1389d4afb5ceSopenharmony_ci * @return alert type long string
1390d4afb5ceSopenharmony_ci */
1391d4afb5ceSopenharmony_ciconst char *SSL_alert_type_string_long(int value);
1392d4afb5ceSopenharmony_ci
1393d4afb5ceSopenharmony_ci/**
1394d4afb5ceSopenharmony_ci * @brief get SSL context of the SSL
1395d4afb5ceSopenharmony_ci *
1396d4afb5ceSopenharmony_ci * @param ssl - SSL point
1397d4afb5ceSopenharmony_ci *
1398d4afb5ceSopenharmony_ci * @return SSL context
1399d4afb5ceSopenharmony_ci */
1400d4afb5ceSopenharmony_ciSSL_CTX *SSL_get_SSL_CTX(const SSL *ssl);
1401d4afb5ceSopenharmony_ci
1402d4afb5ceSopenharmony_ci/**
1403d4afb5ceSopenharmony_ci * @brief get SSL application data
1404d4afb5ceSopenharmony_ci *
1405d4afb5ceSopenharmony_ci * @param ssl - SSL point
1406d4afb5ceSopenharmony_ci *
1407d4afb5ceSopenharmony_ci * @return application data
1408d4afb5ceSopenharmony_ci */
1409d4afb5ceSopenharmony_cichar *SSL_get_app_data(SSL *ssl);
1410d4afb5ceSopenharmony_ci
1411d4afb5ceSopenharmony_ci/**
1412d4afb5ceSopenharmony_ci * @brief get SSL cipher bits
1413d4afb5ceSopenharmony_ci *
1414d4afb5ceSopenharmony_ci * @param ssl - SSL point
1415d4afb5ceSopenharmony_ci * @param alg_bits - algorithm bits
1416d4afb5ceSopenharmony_ci *
1417d4afb5ceSopenharmony_ci * @return strength bits
1418d4afb5ceSopenharmony_ci */
1419d4afb5ceSopenharmony_ciint SSL_get_cipher_bits(const SSL *ssl, int *alg_bits);
1420d4afb5ceSopenharmony_ci
1421d4afb5ceSopenharmony_ci/**
1422d4afb5ceSopenharmony_ci * @brief get SSL cipher name
1423d4afb5ceSopenharmony_ci *
1424d4afb5ceSopenharmony_ci * @param ssl - SSL point
1425d4afb5ceSopenharmony_ci *
1426d4afb5ceSopenharmony_ci * @return SSL cipher name
1427d4afb5ceSopenharmony_ci */
1428d4afb5ceSopenharmony_cichar *SSL_get_cipher_name(const SSL *ssl);
1429d4afb5ceSopenharmony_ci
1430d4afb5ceSopenharmony_ci/**
1431d4afb5ceSopenharmony_ci * @brief get SSL cipher version
1432d4afb5ceSopenharmony_ci *
1433d4afb5ceSopenharmony_ci * @param ssl - SSL point
1434d4afb5ceSopenharmony_ci *
1435d4afb5ceSopenharmony_ci * @return SSL cipher version
1436d4afb5ceSopenharmony_ci */
1437d4afb5ceSopenharmony_cichar *SSL_get_cipher_version(const SSL *ssl);
1438d4afb5ceSopenharmony_ci
1439d4afb5ceSopenharmony_ci/**
1440d4afb5ceSopenharmony_ci * @brief get SSL extra data
1441d4afb5ceSopenharmony_ci *
1442d4afb5ceSopenharmony_ci * @param ssl - SSL point
1443d4afb5ceSopenharmony_ci * @param idx - data index
1444d4afb5ceSopenharmony_ci *
1445d4afb5ceSopenharmony_ci * @return extra data
1446d4afb5ceSopenharmony_ci */
1447d4afb5ceSopenharmony_cichar *SSL_get_ex_data(const SSL *ssl, int idx);
1448d4afb5ceSopenharmony_ci
1449d4afb5ceSopenharmony_ci/**
1450d4afb5ceSopenharmony_ci * @brief get index of the SSL extra data X509 storage context
1451d4afb5ceSopenharmony_ci *
1452d4afb5ceSopenharmony_ci * @param none
1453d4afb5ceSopenharmony_ci *
1454d4afb5ceSopenharmony_ci * @return data index
1455d4afb5ceSopenharmony_ci */
1456d4afb5ceSopenharmony_ciint SSL_get_ex_data_X509_STORE_CTX_idx(void);
1457d4afb5ceSopenharmony_ci
1458d4afb5ceSopenharmony_ci/**
1459d4afb5ceSopenharmony_ci * @brief get peer certification chain
1460d4afb5ceSopenharmony_ci *
1461d4afb5ceSopenharmony_ci * @param ssl - SSL point
1462d4afb5ceSopenharmony_ci *
1463d4afb5ceSopenharmony_ci * @return certification chain
1464d4afb5ceSopenharmony_ci */
1465d4afb5ceSopenharmony_ciSTACK *SSL_get_peer_cert_chain(const SSL *ssl);
1466d4afb5ceSopenharmony_ci
1467d4afb5ceSopenharmony_ci/**
1468d4afb5ceSopenharmony_ci * @brief get peer certification
1469d4afb5ceSopenharmony_ci *
1470d4afb5ceSopenharmony_ci * @param ssl - SSL point
1471d4afb5ceSopenharmony_ci *
1472d4afb5ceSopenharmony_ci * @return certification
1473d4afb5ceSopenharmony_ci */
1474d4afb5ceSopenharmony_ciX509 *SSL_get_peer_certificate(const SSL *ssl);
1475d4afb5ceSopenharmony_ci
1476d4afb5ceSopenharmony_ci/**
1477d4afb5ceSopenharmony_ci * @brief get SSL quiet shutdown mode
1478d4afb5ceSopenharmony_ci *
1479d4afb5ceSopenharmony_ci * @param ssl - SSL point
1480d4afb5ceSopenharmony_ci *
1481d4afb5ceSopenharmony_ci * @return quiet shutdown mode
1482d4afb5ceSopenharmony_ci */
1483d4afb5ceSopenharmony_ciint SSL_get_quiet_shutdown(const SSL *ssl);
1484d4afb5ceSopenharmony_ci
1485d4afb5ceSopenharmony_ci/**
1486d4afb5ceSopenharmony_ci * @brief get SSL read only IO handle
1487d4afb5ceSopenharmony_ci *
1488d4afb5ceSopenharmony_ci * @param ssl - SSL point
1489d4afb5ceSopenharmony_ci *
1490d4afb5ceSopenharmony_ci * @return IO handle
1491d4afb5ceSopenharmony_ci */
1492d4afb5ceSopenharmony_ciBIO *SSL_get_rbio(const SSL *ssl);
1493d4afb5ceSopenharmony_ci
1494d4afb5ceSopenharmony_ci/**
1495d4afb5ceSopenharmony_ci * @brief get SSL shared ciphers
1496d4afb5ceSopenharmony_ci *
1497d4afb5ceSopenharmony_ci * @param ssl - SSL point
1498d4afb5ceSopenharmony_ci * @param buf - buffer to store the ciphers
1499d4afb5ceSopenharmony_ci * @param len - buffer len
1500d4afb5ceSopenharmony_ci *
1501d4afb5ceSopenharmony_ci * @return shared ciphers
1502d4afb5ceSopenharmony_ci */
1503d4afb5ceSopenharmony_cichar *SSL_get_shared_ciphers(const SSL *ssl, char *buf, int len);
1504d4afb5ceSopenharmony_ci
1505d4afb5ceSopenharmony_ci/**
1506d4afb5ceSopenharmony_ci * @brief get SSL shutdown mode
1507d4afb5ceSopenharmony_ci *
1508d4afb5ceSopenharmony_ci * @param ssl - SSL point
1509d4afb5ceSopenharmony_ci *
1510d4afb5ceSopenharmony_ci * @return shutdown mode
1511d4afb5ceSopenharmony_ci */
1512d4afb5ceSopenharmony_ciint SSL_get_shutdown(const SSL *ssl);
1513d4afb5ceSopenharmony_ci
1514d4afb5ceSopenharmony_ci/**
1515d4afb5ceSopenharmony_ci * @brief get SSL session time
1516d4afb5ceSopenharmony_ci *
1517d4afb5ceSopenharmony_ci * @param ssl - SSL point
1518d4afb5ceSopenharmony_ci *
1519d4afb5ceSopenharmony_ci * @return session time
1520d4afb5ceSopenharmony_ci */
1521d4afb5ceSopenharmony_cilong SSL_get_time(const SSL *ssl);
1522d4afb5ceSopenharmony_ci
1523d4afb5ceSopenharmony_ci/**
1524d4afb5ceSopenharmony_ci * @brief get SSL session timeout time
1525d4afb5ceSopenharmony_ci *
1526d4afb5ceSopenharmony_ci * @param ssl - SSL point
1527d4afb5ceSopenharmony_ci *
1528d4afb5ceSopenharmony_ci * @return session timeout time
1529d4afb5ceSopenharmony_ci */
1530d4afb5ceSopenharmony_cilong SSL_get_timeout(const SSL *ssl);
1531d4afb5ceSopenharmony_ci
1532d4afb5ceSopenharmony_ci/**
1533d4afb5ceSopenharmony_ci * @brief get SSL verifying mode
1534d4afb5ceSopenharmony_ci *
1535d4afb5ceSopenharmony_ci * @param ssl - SSL point
1536d4afb5ceSopenharmony_ci *
1537d4afb5ceSopenharmony_ci * @return verifying mode
1538d4afb5ceSopenharmony_ci */
1539d4afb5ceSopenharmony_ciint SSL_get_verify_mode(const SSL *ssl);
1540d4afb5ceSopenharmony_ci
1541d4afb5ceSopenharmony_ci/**
1542d4afb5ceSopenharmony_ci * @brief get SSL verify parameters
1543d4afb5ceSopenharmony_ci *
1544d4afb5ceSopenharmony_ci * @param ssl - SSL point
1545d4afb5ceSopenharmony_ci *
1546d4afb5ceSopenharmony_ci * @return verify parameters
1547d4afb5ceSopenharmony_ci */
1548d4afb5ceSopenharmony_ciX509_VERIFY_PARAM *SSL_get0_param(SSL *ssl);
1549d4afb5ceSopenharmony_ci
1550d4afb5ceSopenharmony_ci/**
1551d4afb5ceSopenharmony_ci * @brief set expected hostname the peer cert CN should have
1552d4afb5ceSopenharmony_ci *
1553d4afb5ceSopenharmony_ci * @param param - verify parameters from SSL_get0_param()
1554d4afb5ceSopenharmony_ci *
1555d4afb5ceSopenharmony_ci * @param name - the expected hostname
1556d4afb5ceSopenharmony_ci *
1557d4afb5ceSopenharmony_ci * @param namelen - the length of the hostname, or 0 if NUL terminated
1558d4afb5ceSopenharmony_ci *
1559d4afb5ceSopenharmony_ci * @return verify parameters
1560d4afb5ceSopenharmony_ci */
1561d4afb5ceSopenharmony_ciint X509_VERIFY_PARAM_set1_host(X509_VERIFY_PARAM *param,
1562d4afb5ceSopenharmony_ci                                const char *name, size_t namelen);
1563d4afb5ceSopenharmony_ci
1564d4afb5ceSopenharmony_ci/**
1565d4afb5ceSopenharmony_ci * @brief set parameters for X509 host verify action
1566d4afb5ceSopenharmony_ci *
1567d4afb5ceSopenharmony_ci * @param param -verify parameters from SSL_get0_param()
1568d4afb5ceSopenharmony_ci *
1569d4afb5ceSopenharmony_ci * @param flags - bitfield of X509_CHECK_FLAG_... parameters to set
1570d4afb5ceSopenharmony_ci *
1571d4afb5ceSopenharmony_ci * @return 1 for success, 0 for failure
1572d4afb5ceSopenharmony_ci */
1573d4afb5ceSopenharmony_ciint X509_VERIFY_PARAM_set_hostflags(X509_VERIFY_PARAM *param,
1574d4afb5ceSopenharmony_ci				    unsigned long flags);
1575d4afb5ceSopenharmony_ci
1576d4afb5ceSopenharmony_ci/**
1577d4afb5ceSopenharmony_ci * @brief clear parameters for X509 host verify action
1578d4afb5ceSopenharmony_ci *
1579d4afb5ceSopenharmony_ci * @param param -verify parameters from SSL_get0_param()
1580d4afb5ceSopenharmony_ci *
1581d4afb5ceSopenharmony_ci * @param flags - bitfield of X509_CHECK_FLAG_... parameters to clear
1582d4afb5ceSopenharmony_ci *
1583d4afb5ceSopenharmony_ci * @return 1 for success, 0 for failure
1584d4afb5ceSopenharmony_ci */
1585d4afb5ceSopenharmony_ciint X509_VERIFY_PARAM_clear_hostflags(X509_VERIFY_PARAM *param,
1586d4afb5ceSopenharmony_ci				      unsigned long flags);
1587d4afb5ceSopenharmony_ci
1588d4afb5ceSopenharmony_ci/**
1589d4afb5ceSopenharmony_ci * @brief get SSL write only IO handle
1590d4afb5ceSopenharmony_ci *
1591d4afb5ceSopenharmony_ci * @param ssl - SSL point
1592d4afb5ceSopenharmony_ci *
1593d4afb5ceSopenharmony_ci * @return IO handle
1594d4afb5ceSopenharmony_ci */
1595d4afb5ceSopenharmony_ciBIO *SSL_get_wbio(const SSL *ssl);
1596d4afb5ceSopenharmony_ci
1597d4afb5ceSopenharmony_ci/**
1598d4afb5ceSopenharmony_ci * @brief load SSL client CA certification file
1599d4afb5ceSopenharmony_ci *
1600d4afb5ceSopenharmony_ci * @param file - file name
1601d4afb5ceSopenharmony_ci *
1602d4afb5ceSopenharmony_ci * @return certification loading object
1603d4afb5ceSopenharmony_ci */
1604d4afb5ceSopenharmony_ciSTACK *SSL_load_client_CA_file(const char *file);
1605d4afb5ceSopenharmony_ci
1606d4afb5ceSopenharmony_ci/**
1607d4afb5ceSopenharmony_ci * @brief add SSL reference by '1'
1608d4afb5ceSopenharmony_ci *
1609d4afb5ceSopenharmony_ci * @param ssl - SSL point
1610d4afb5ceSopenharmony_ci *
1611d4afb5ceSopenharmony_ci * @return result
1612d4afb5ceSopenharmony_ci *     1 : OK
1613d4afb5ceSopenharmony_ci *     0 : failed
1614d4afb5ceSopenharmony_ci */
1615d4afb5ceSopenharmony_ciint SSL_up_ref(SSL *ssl);
1616d4afb5ceSopenharmony_ci
1617d4afb5ceSopenharmony_ci/**
1618d4afb5ceSopenharmony_ci * @brief read and put data into buf, but not clear the SSL low-level storage
1619d4afb5ceSopenharmony_ci *
1620d4afb5ceSopenharmony_ci * @param ssl - SSL point
1621d4afb5ceSopenharmony_ci * @param buf - storage buffer point
1622d4afb5ceSopenharmony_ci * @param num - data bytes
1623d4afb5ceSopenharmony_ci *
1624d4afb5ceSopenharmony_ci * @return result
1625d4afb5ceSopenharmony_ci *     > 0 : OK, and return read bytes
1626d4afb5ceSopenharmony_ci *     = 0 : connect is closed
1627d4afb5ceSopenharmony_ci *     < 0 : a error catch
1628d4afb5ceSopenharmony_ci */
1629d4afb5ceSopenharmony_ciint SSL_peek(SSL *ssl, void *buf, int num);
1630d4afb5ceSopenharmony_ci
1631d4afb5ceSopenharmony_ci/**
1632d4afb5ceSopenharmony_ci * @brief make SSL renegotiate
1633d4afb5ceSopenharmony_ci *
1634d4afb5ceSopenharmony_ci * @param ssl - SSL point
1635d4afb5ceSopenharmony_ci *
1636d4afb5ceSopenharmony_ci * @return result
1637d4afb5ceSopenharmony_ci *     1 : OK
1638d4afb5ceSopenharmony_ci *     0 : failed
1639d4afb5ceSopenharmony_ci */
1640d4afb5ceSopenharmony_ciint SSL_renegotiate(SSL *ssl);
1641d4afb5ceSopenharmony_ci
1642d4afb5ceSopenharmony_ci/**
1643d4afb5ceSopenharmony_ci * @brief get the state string where SSL is reading
1644d4afb5ceSopenharmony_ci *
1645d4afb5ceSopenharmony_ci * @param ssl - SSL point
1646d4afb5ceSopenharmony_ci *
1647d4afb5ceSopenharmony_ci * @return state string
1648d4afb5ceSopenharmony_ci */
1649d4afb5ceSopenharmony_ciconst char *SSL_rstate_string(SSL *ssl);
1650d4afb5ceSopenharmony_ci
1651d4afb5ceSopenharmony_ci/**
1652d4afb5ceSopenharmony_ci * @brief get the statement long string where SSL is reading
1653d4afb5ceSopenharmony_ci *
1654d4afb5ceSopenharmony_ci * @param ssl - SSL point
1655d4afb5ceSopenharmony_ci *
1656d4afb5ceSopenharmony_ci * @return statement long string
1657d4afb5ceSopenharmony_ci */
1658d4afb5ceSopenharmony_ciconst char *SSL_rstate_string_long(SSL *ssl);
1659d4afb5ceSopenharmony_ci
1660d4afb5ceSopenharmony_ci/**
1661d4afb5ceSopenharmony_ci * @brief set SSL accept statement
1662d4afb5ceSopenharmony_ci *
1663d4afb5ceSopenharmony_ci * @param ssl - SSL point
1664d4afb5ceSopenharmony_ci *
1665d4afb5ceSopenharmony_ci * @return none
1666d4afb5ceSopenharmony_ci */
1667d4afb5ceSopenharmony_civoid SSL_set_accept_state(SSL *ssl);
1668d4afb5ceSopenharmony_ci
1669d4afb5ceSopenharmony_ci/**
1670d4afb5ceSopenharmony_ci * @brief set SSL application data
1671d4afb5ceSopenharmony_ci *
1672d4afb5ceSopenharmony_ci * @param ssl - SSL point
1673d4afb5ceSopenharmony_ci * @param arg - SSL application data point
1674d4afb5ceSopenharmony_ci *
1675d4afb5ceSopenharmony_ci * @return none
1676d4afb5ceSopenharmony_ci */
1677d4afb5ceSopenharmony_civoid SSL_set_app_data(SSL *ssl, char *arg);
1678d4afb5ceSopenharmony_ci
1679d4afb5ceSopenharmony_ci/**
1680d4afb5ceSopenharmony_ci * @brief set SSL BIO
1681d4afb5ceSopenharmony_ci *
1682d4afb5ceSopenharmony_ci * @param ssl  - SSL point
1683d4afb5ceSopenharmony_ci * @param rbio - read only IO
1684d4afb5ceSopenharmony_ci * @param wbio - write only IO
1685d4afb5ceSopenharmony_ci *
1686d4afb5ceSopenharmony_ci * @return none
1687d4afb5ceSopenharmony_ci */
1688d4afb5ceSopenharmony_civoid SSL_set_bio(SSL *ssl, BIO *rbio, BIO *wbio);
1689d4afb5ceSopenharmony_ci
1690d4afb5ceSopenharmony_ci/**
1691d4afb5ceSopenharmony_ci * @brief clear SSL option
1692d4afb5ceSopenharmony_ci *
1693d4afb5ceSopenharmony_ci * @param ssl - SSL point
1694d4afb5ceSopenharmony_ci * @param op  - clear option
1695d4afb5ceSopenharmony_ci *
1696d4afb5ceSopenharmony_ci * @return SSL option
1697d4afb5ceSopenharmony_ci */
1698d4afb5ceSopenharmony_ciunsigned long SSL_clear_options(SSL *ssl, unsigned long op);
1699d4afb5ceSopenharmony_ci
1700d4afb5ceSopenharmony_ci/**
1701d4afb5ceSopenharmony_ci * @brief get SSL option
1702d4afb5ceSopenharmony_ci *
1703d4afb5ceSopenharmony_ci * @param ssl - SSL point
1704d4afb5ceSopenharmony_ci *
1705d4afb5ceSopenharmony_ci * @return SSL option
1706d4afb5ceSopenharmony_ci */
1707d4afb5ceSopenharmony_ciunsigned long SSL_get_options(SSL *ssl);
1708d4afb5ceSopenharmony_ci
1709d4afb5ceSopenharmony_ci/**
1710d4afb5ceSopenharmony_ci * @brief clear SSL option
1711d4afb5ceSopenharmony_ci *
1712d4afb5ceSopenharmony_ci * @param ssl - SSL point
1713d4afb5ceSopenharmony_ci * @param op  - setting option
1714d4afb5ceSopenharmony_ci *
1715d4afb5ceSopenharmony_ci * @return SSL option
1716d4afb5ceSopenharmony_ci */
1717d4afb5ceSopenharmony_ciunsigned long SSL_set_options(SSL *ssl, unsigned long op);
1718d4afb5ceSopenharmony_ci
1719d4afb5ceSopenharmony_ci/**
1720d4afb5ceSopenharmony_ci * @brief set SSL quiet shutdown mode
1721d4afb5ceSopenharmony_ci *
1722d4afb5ceSopenharmony_ci * @param ssl  - SSL point
1723d4afb5ceSopenharmony_ci * @param mode - quiet shutdown mode
1724d4afb5ceSopenharmony_ci *
1725d4afb5ceSopenharmony_ci * @return none
1726d4afb5ceSopenharmony_ci */
1727d4afb5ceSopenharmony_civoid SSL_set_quiet_shutdown(SSL *ssl, int mode);
1728d4afb5ceSopenharmony_ci
1729d4afb5ceSopenharmony_ci/**
1730d4afb5ceSopenharmony_ci * @brief set SSL shutdown mode
1731d4afb5ceSopenharmony_ci *
1732d4afb5ceSopenharmony_ci * @param ssl  - SSL point
1733d4afb5ceSopenharmony_ci * @param mode - shutdown mode
1734d4afb5ceSopenharmony_ci *
1735d4afb5ceSopenharmony_ci * @return none
1736d4afb5ceSopenharmony_ci */
1737d4afb5ceSopenharmony_civoid SSL_set_shutdown(SSL *ssl, int mode);
1738d4afb5ceSopenharmony_ci
1739d4afb5ceSopenharmony_ci/**
1740d4afb5ceSopenharmony_ci * @brief set SSL session time
1741d4afb5ceSopenharmony_ci *
1742d4afb5ceSopenharmony_ci * @param ssl - SSL point
1743d4afb5ceSopenharmony_ci * @param t   - session time
1744d4afb5ceSopenharmony_ci *
1745d4afb5ceSopenharmony_ci * @return session time
1746d4afb5ceSopenharmony_ci */
1747d4afb5ceSopenharmony_cilong SSL_set_time(SSL *ssl, long t);
1748d4afb5ceSopenharmony_ci
1749d4afb5ceSopenharmony_ci/**
1750d4afb5ceSopenharmony_ci * @brief set SSL session timeout time
1751d4afb5ceSopenharmony_ci *
1752d4afb5ceSopenharmony_ci * @param ssl - SSL point
1753d4afb5ceSopenharmony_ci * @param t   - session timeout time
1754d4afb5ceSopenharmony_ci *
1755d4afb5ceSopenharmony_ci * @return session timeout time
1756d4afb5ceSopenharmony_ci */
1757d4afb5ceSopenharmony_cilong SSL_set_timeout(SSL *ssl, long t);
1758d4afb5ceSopenharmony_ci
1759d4afb5ceSopenharmony_ci/**
1760d4afb5ceSopenharmony_ci * @brief get SSL statement string
1761d4afb5ceSopenharmony_ci *
1762d4afb5ceSopenharmony_ci * @param ssl - SSL point
1763d4afb5ceSopenharmony_ci *
1764d4afb5ceSopenharmony_ci * @return SSL statement string
1765d4afb5ceSopenharmony_ci */
1766d4afb5ceSopenharmony_cichar *SSL_state_string(const SSL *ssl);
1767d4afb5ceSopenharmony_ci
1768d4afb5ceSopenharmony_ci/**
1769d4afb5ceSopenharmony_ci * @brief get SSL statement long string
1770d4afb5ceSopenharmony_ci *
1771d4afb5ceSopenharmony_ci * @param ssl - SSL point
1772d4afb5ceSopenharmony_ci *
1773d4afb5ceSopenharmony_ci * @return SSL statement long string
1774d4afb5ceSopenharmony_ci */
1775d4afb5ceSopenharmony_cichar *SSL_state_string_long(const SSL *ssl);
1776d4afb5ceSopenharmony_ci
1777d4afb5ceSopenharmony_ci/**
1778d4afb5ceSopenharmony_ci * @brief get SSL renegotiation count
1779d4afb5ceSopenharmony_ci *
1780d4afb5ceSopenharmony_ci * @param ssl - SSL point
1781d4afb5ceSopenharmony_ci *
1782d4afb5ceSopenharmony_ci * @return renegotiation count
1783d4afb5ceSopenharmony_ci */
1784d4afb5ceSopenharmony_cilong SSL_total_renegotiations(SSL *ssl);
1785d4afb5ceSopenharmony_ci
1786d4afb5ceSopenharmony_ci/**
1787d4afb5ceSopenharmony_ci * @brief get SSL version
1788d4afb5ceSopenharmony_ci *
1789d4afb5ceSopenharmony_ci * @param ssl - SSL point
1790d4afb5ceSopenharmony_ci *
1791d4afb5ceSopenharmony_ci * @return SSL version
1792d4afb5ceSopenharmony_ci */
1793d4afb5ceSopenharmony_ciint SSL_version(const SSL *ssl);
1794d4afb5ceSopenharmony_ci
1795d4afb5ceSopenharmony_ci/**
1796d4afb5ceSopenharmony_ci * @brief set SSL PSK identity hint
1797d4afb5ceSopenharmony_ci *
1798d4afb5ceSopenharmony_ci * @param ssl  - SSL point
1799d4afb5ceSopenharmony_ci * @param hint - identity hint
1800d4afb5ceSopenharmony_ci *
1801d4afb5ceSopenharmony_ci * @return result
1802d4afb5ceSopenharmony_ci *     1 : OK
1803d4afb5ceSopenharmony_ci *     0 : failed
1804d4afb5ceSopenharmony_ci */
1805d4afb5ceSopenharmony_ciint SSL_use_psk_identity_hint(SSL *ssl, const char *hint);
1806d4afb5ceSopenharmony_ci
1807d4afb5ceSopenharmony_ci/**
1808d4afb5ceSopenharmony_ci * @brief get SSL PSK identity hint
1809d4afb5ceSopenharmony_ci *
1810d4afb5ceSopenharmony_ci * @param ssl - SSL point
1811d4afb5ceSopenharmony_ci *
1812d4afb5ceSopenharmony_ci * @return identity hint
1813d4afb5ceSopenharmony_ci */
1814d4afb5ceSopenharmony_ciconst char *SSL_get_psk_identity_hint(SSL *ssl);
1815d4afb5ceSopenharmony_ci
1816d4afb5ceSopenharmony_ci/**
1817d4afb5ceSopenharmony_ci * @brief get SSL PSK identity
1818d4afb5ceSopenharmony_ci *
1819d4afb5ceSopenharmony_ci * @param ssl - SSL point
1820d4afb5ceSopenharmony_ci *
1821d4afb5ceSopenharmony_ci * @return identity
1822d4afb5ceSopenharmony_ci */
1823d4afb5ceSopenharmony_ciconst char *SSL_get_psk_identity(SSL *ssl);
1824d4afb5ceSopenharmony_ci
1825d4afb5ceSopenharmony_ci#ifdef __cplusplus
1826d4afb5ceSopenharmony_ci}
1827d4afb5ceSopenharmony_ci#endif
1828d4afb5ceSopenharmony_ci
1829d4afb5ceSopenharmony_ci#endif
1830