blob: 8455f7be487f17cc0cc39f0e1fe098b703f2594b [file] [log] [blame]
Qiufang Dai35c31332020-05-13 15:29:06 +08001/*
2 * Amazon FreeRTOS
3 * Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
4 *
5 * Permission is hereby granted, free of charge, to any person obtaining a copy of
6 * this software and associated documentation files (the "Software"), to deal in
7 * the Software without restriction, including without limitation the rights to
8 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9 * the Software, and to permit persons to whom the Software is furnished to do so,
10 * subject to the following conditions:
11 *
12 * The above copyright notice and this permission notice shall be included in all
13 * copies or substantial portions of the Software.
14 *
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17 * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18 * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19 * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 *
22 * http://aws.amazon.com/freertos
23 * http://www.FreeRTOS.org
24 */
25
26
27#ifndef __AWS__TLS__H__
28#define __AWS__TLS__H__
29
30/**
31 * @brief Defines callback type for receiving bytes from the network.
32 *
33 * @param[in] pvCallerContext Opaque context handle provided by caller.
34 * @param[out] pucReceiveBuffer Buffer to fill with received data.
35 * @param[in] xReceiveLength Length of previous parameter in bytes.
36 *
37 * @return The number of bytes actually read.
38 */
39typedef BaseType_t ( * NetworkRecv_t ) ( void * pvCallerContext,
40 unsigned char * pucReceiveBuffer,
41 size_t xReceiveLength );
42
43/**
44 * @brief Defines callback type for sending bytes to the network.
45 *
46 * @param[in] pvCallerContext Opaque context handle provided by caller.
47 * @param[out] pucReceiveBuffer Buffer of data to send.
48 * @param[in] xReceiveLength Length of previous parameter in bytes.
49 *
50 * @return The number of bytes actually sent.
51 */
52typedef BaseType_t ( * NetworkSend_t ) ( void * pvCallerContext,
53 const unsigned char * pucData,
54 size_t xDataLength );
55
56/**
57 * @brief Defines parameter structure for initializing the TLS interface.
58 *
59 * @param[in] ulSize Size of the structure in bytes.
60 * @param[in] pcDestination Network name of the TLS server.
61 * @param[in] pcServerCertificate PEM encoded server certificate to trust.
62 * @param[in] ulServerCertificateLength Length in bytes of the encoded server
63 * certificate. The length must include the null terminator.
64 * @param[in] pxNetworkRecv Caller-defined network receive function pointer.
65 * @param[in] pxNetworkSend Caller-defined network send function pointer.
66 * @param[in] pvCallerContext Caller-defined context handle to be used with callback
67 * functions.
68 */
69typedef struct xTLS_PARAMS
70{
71 uint32_t ulSize;
72 const char * pcDestination;
73 const char * pcServerCertificate;
74 uint32_t ulServerCertificateLength;
75 const char ** ppcAlpnProtocols;
76 uint32_t ulAlpnProtocolsCount;
77
78 NetworkRecv_t pxNetworkRecv;
79 NetworkSend_t pxNetworkSend;
80 void * pvCallerContext;
81} TLSParams_t;
82
83/**
84 * @brief Initializes the TLS context.
85 *
86 * @param[out] ppvContext Opaque context handle returned by the TLS library.
87 * @param[in] pxParams Connection parameters specified by caller.
88 *
89 * @return Zero on success. Error return codes have the high bit set.
90 */
91BaseType_t TLS_Init( void ** ppvContext,
92 TLSParams_t * pxParams );
93
94/**
95 * @brief Negotiates TLS and connects to the server.
96 *
97 * @param pvContext Opaque context handle for TLS library.
98 *
99 * @return Zero on success. Error return codes have the high bit set.
100 */
101BaseType_t TLS_Connect( void * pvContext );
102
103/**
104 * @brief Reads the requested number of bytes from the secure connection
105 *
106 * @param pvContext Opaque context handle for TLS library.
107 * @param pucReadBuffer Byte array for storing (decrypted) data read from the
108 * network.
109 * @param xReadLength Length in bytes of read buffer.
110 *
111 * @return Number of bytes read. Error return codes have the high bit set.
112 */
113BaseType_t TLS_Recv( void * pvContext,
114 unsigned char * pucReadBuffer,
115 size_t xReadLength );
116
117/**
118 * @brief Writes the requested number of bytes to the secure connection.
119 *
120 * @param pvContext Opaque context handle for TLS library.
121 * @param pucMsg Byte array of data to be encrypted and then sent to the network.
122 * @param xMsgLength Length in bytes of write buffer.
123 *
124 * @return Number of bytes read. Error return codes have the high bit set.
125 */
126BaseType_t TLS_Send( void * pvContext,
127 const unsigned char * pucMsg,
128 size_t xMsgLength );
129
130/**
131 * @brief Frees resources consumed by the TLS context.
132 *
133 * @param pvContext Opaque context handle for TLS library.
134 */
135void TLS_Cleanup( void * pvContext );
136
137#endif /* ifndef __AWS__TLS__H__ */