Qiufang Dai | 35c3133 | 2020-05-13 15:29:06 +0800 | [diff] [blame] | 1 | /* |
| 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 | */ |
| 39 | typedef 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 | */ |
| 52 | typedef 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 | */ |
| 69 | typedef 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 | */ |
| 91 | BaseType_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 | */ |
| 101 | BaseType_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 | */ |
| 113 | BaseType_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 | */ |
| 126 | BaseType_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 | */ |
| 135 | void TLS_Cleanup( void * pvContext ); |
| 136 | |
| 137 | #endif /* ifndef __AWS__TLS__H__ */ |