1 /*************************************************************************** 2 * Copyright (c) 2024 Microsoft Corporation 3 * 4 * This program and the accompanying materials are made available under the 5 * terms of the MIT License which is available at 6 * https://opensource.org/licenses/MIT. 7 * 8 * SPDX-License-Identifier: MIT 9 **************************************************************************/ 10 11 12 /**************************************************************************/ 13 /**************************************************************************/ 14 /** */ 15 /** NetX Secure Component */ 16 /** */ 17 /** Transport Layer Security (TLS) */ 18 /** */ 19 /**************************************************************************/ 20 /**************************************************************************/ 21 22 23 /**************************************************************************/ 24 /* */ 25 /* APPLICATION INTERFACE DEFINITION RELEASE */ 26 /* */ 27 /* nx_secure_tls_api.h PORTABLE C */ 28 /* 6.2.0 */ 29 /* AUTHOR */ 30 /* */ 31 /* Timothy Stapko, Microsoft Corporation */ 32 /* */ 33 /* DESCRIPTION */ 34 /* */ 35 /* This file defines the basic Application Interface (API) to the */ 36 /* high-performance TLS implementation for the NetXDuo TCP/IP */ 37 /* protocol. */ 38 /* */ 39 /* RELEASE HISTORY */ 40 /* */ 41 /* DATE NAME DESCRIPTION */ 42 /* */ 43 /* 05-19-2020 Timothy Stapko Initial Version 6.0 */ 44 /* 09-30-2020 Timothy Stapko Modified comment(s), */ 45 /* resulting in version 6.1 */ 46 /* 10-31-2022 Yanwu Cai Modified comment(s), and added*/ 47 /* API to set packet pool, */ 48 /* resulting in version 6.2.0 */ 49 /* */ 50 /**************************************************************************/ 51 52 #ifndef SRC_NX_SECURE_TLS_API_H_ 53 #define SRC_NX_SECURE_TLS_API_H_ 54 55 /* Determine if a C++ compiler is being used. If so, ensure that standard 56 C is used to process the API information. */ 57 #ifdef __cplusplus 58 59 /* Yes, C++ compiler is present. Use standard C. */ 60 extern "C" { 61 62 #endif 63 64 /* Include the ThreadX and port-specific data type file. */ 65 66 67 68 #include "tx_api.h" 69 #include "nx_port.h" 70 #include "nx_api.h" 71 #include "nx_secure_tls.h" 72 73 #ifndef NX_SECURE_SOURCE_CODE 74 75 #ifdef NX_SECURE_DISABLE_ERROR_CHECKING 76 #define nx_secure_tls_active_certificate_set _nx_secure_tls_active_certificate_set 77 #define nx_secure_tls_initialize _nx_secure_tls_initialize 78 #define nx_secure_tls_shutdown _nx_secure_tls_shutdown 79 #define nx_secure_tls_local_certificate_add _nx_secure_tls_local_certificate_add 80 #define nx_secure_tls_local_certificate_find _nx_secure_tls_local_certificate_find 81 #define nx_secure_tls_local_certificate_remove _nx_secure_tls_local_certificate_remove 82 #define nx_secure_tls_metadata_size_calculate _nx_secure_tls_metadata_size_calculate 83 #define nx_secure_tls_remote_certificate_allocate _nx_secure_tls_remote_certificate_allocate 84 #define nx_secure_tls_remote_certificate_buffer_allocate _nx_secure_tls_remote_certificate_buffer_allocate 85 #define nx_secure_tls_remote_certificate_free_all _nx_secure_tls_remote_certificate_free_all 86 #define nx_secure_tls_server_certificate_add _nx_secure_tls_server_certificate_add 87 #define nx_secure_tls_server_certificate_find _nx_secure_tls_server_certificate_find 88 #define nx_secure_tls_server_certificate_remove _nx_secure_tls_server_certificate_remove 89 #define nx_secure_tls_session_alert_value_get _nx_secure_tls_session_alert_value_get 90 #define nx_secure_tls_session_certificate_callback_set _nx_secure_tls_session_certificate_callback_set 91 #define nx_secure_tls_session_client_callback_set _nx_secure_tls_session_client_callback_set 92 #define nx_secure_tls_session_client_verify_disable _nx_secure_tls_session_client_verify_disable 93 #define nx_secure_tls_session_client_verify_enable _nx_secure_tls_session_client_verify_enable 94 #define nx_secure_tls_session_x509_client_verify_configure _nx_secure_tls_session_x509_client_verify_configure 95 #define nx_secure_tls_session_create _nx_secure_tls_session_create 96 #define nx_secure_tls_session_delete _nx_secure_tls_session_delete 97 #define nx_secure_tls_session_end _nx_secure_tls_session_end 98 #define nx_secure_tls_session_packet_buffer_set _nx_secure_tls_session_packet_buffer_set 99 #define nx_secure_tls_session_packet_pool_set _nx_secure_tls_session_packet_pool_set 100 #define nx_secure_tls_session_protocol_version_override _nx_secure_tls_session_protocol_version_override 101 #define nx_secure_tls_session_receive _nx_secure_tls_session_receive 102 #define nx_secure_tls_session_renegotiate _nx_secure_tls_session_renegotiate 103 #define nx_secure_tls_session_renegotiate_callback_set _nx_secure_tls_session_renegotiate_callback_set 104 #define nx_secure_tls_session_reset _nx_secure_tls_session_reset 105 #define nx_secure_tls_session_send _nx_secure_tls_session_send 106 #define nx_secure_tls_session_server_callback_set _nx_secure_tls_session_server_callback_set 107 #define nx_secure_tls_session_sni_extension_parse _nx_secure_tls_session_sni_extension_parse 108 #define nx_secure_tls_session_sni_extension_set _nx_secure_tls_session_sni_extension_set 109 #define nx_secure_tls_session_start _nx_secure_tls_session_start 110 #define nx_secure_tls_session_time_function_set _nx_secure_tls_session_time_function_set 111 #define nx_secure_tls_trusted_certificate_add _nx_secure_tls_trusted_certificate_add 112 #define nx_secure_tls_trusted_certificate_remove _nx_secure_tls_trusted_certificate_remove 113 #define nx_secure_tls_packet_allocate _nx_secure_tls_packet_allocate 114 #if defined(NX_SECURE_ENABLE_PSK_CIPHERSUITES) || defined(NX_SECURE_ENABLE_ECJPAKE_CIPHERSUITE) 115 #define nx_secure_tls_client_psk_set _nx_secure_tls_client_psk_set 116 #define nx_secure_tls_psk_add _nx_secure_tls_psk_add 117 #endif /* defined(NX_SECURE_ENABLE_PSK_CIPHERSUITES) || defined(NX_SECURE_ENABLE_ECJPAKE_CIPHERSUITE) */ 118 #else /* !NX_SEURE_DISABLE_ERROR_CHECKING */ 119 #define nx_secure_tls_active_certificate_set _nxe_secure_tls_active_certificate_set 120 #define nx_secure_tls_initialize _nx_secure_tls_initialize 121 #define nx_secure_tls_shutdown _nx_secure_tls_shutdown 122 #define nx_secure_tls_local_certificate_add _nxe_secure_tls_local_certificate_add 123 #define nx_secure_tls_local_certificate_find _nxe_secure_tls_local_certificate_find 124 #define nx_secure_tls_local_certificate_remove _nxe_secure_tls_local_certificate_remove 125 #define nx_secure_tls_metadata_size_calculate _nxe_secure_tls_metadata_size_calculate 126 #define nx_secure_tls_remote_certificate_allocate _nxe_secure_tls_remote_certificate_allocate 127 #define nx_secure_tls_remote_certificate_buffer_allocate _nxe_secure_tls_remote_certificate_buffer_allocate 128 #define nx_secure_tls_remote_certificate_free_all _nxe_secure_tls_remote_certificate_free_all 129 #define nx_secure_tls_server_certificate_add _nxe_secure_tls_server_certificate_add 130 #define nx_secure_tls_server_certificate_find _nxe_secure_tls_server_certificate_find 131 #define nx_secure_tls_server_certificate_remove _nxe_secure_tls_server_certificate_remove 132 #define nx_secure_tls_session_alert_value_get _nxe_secure_tls_session_alert_value_get 133 #define nx_secure_tls_session_certificate_callback_set _nxe_secure_tls_session_certificate_callback_set 134 #define nx_secure_tls_session_client_callback_set _nxe_secure_tls_session_client_callback_set 135 #define nx_secure_tls_session_client_verify_disable _nxe_secure_tls_session_client_verify_disable 136 #define nx_secure_tls_session_client_verify_enable _nxe_secure_tls_session_client_verify_enable 137 #define nx_secure_tls_session_x509_client_verify_configure _nxe_secure_tls_session_x509_client_verify_configure 138 #define nx_secure_tls_session_create _nxe_secure_tls_session_create 139 #define nx_secure_tls_session_delete _nxe_secure_tls_session_delete 140 #define nx_secure_tls_session_end _nxe_secure_tls_session_end 141 #define nx_secure_tls_session_packet_buffer_set _nxe_secure_tls_session_packet_buffer_set 142 #define nx_secure_tls_session_packet_pool_set _nxe_secure_tls_session_packet_pool_set 143 #define nx_secure_tls_session_protocol_version_override _nxe_secure_tls_session_protocol_version_override 144 #define nx_secure_tls_session_receive _nxe_secure_tls_session_receive 145 #define nx_secure_tls_session_renegotiate _nxe_secure_tls_session_renegotiate 146 #define nx_secure_tls_session_renegotiate_callback_set _nxe_secure_tls_session_renegotiate_callback_set 147 #define nx_secure_tls_session_reset _nxe_secure_tls_session_reset 148 #define nx_secure_tls_session_send _nxe_secure_tls_session_send 149 #define nx_secure_tls_session_server_callback_set _nxe_secure_tls_session_server_callback_set 150 #define nx_secure_tls_session_sni_extension_parse _nxe_secure_tls_session_sni_extension_parse 151 #define nx_secure_tls_session_sni_extension_set _nxe_secure_tls_session_sni_extension_set 152 #define nx_secure_tls_session_start _nxe_secure_tls_session_start 153 #define nx_secure_tls_session_time_function_set _nxe_secure_tls_session_time_function_set 154 #define nx_secure_tls_trusted_certificate_add _nxe_secure_tls_trusted_certificate_add 155 #define nx_secure_tls_trusted_certificate_remove _nxe_secure_tls_trusted_certificate_remove 156 #define nx_secure_tls_packet_allocate _nxe_secure_tls_packet_allocate 157 #if defined(NX_SECURE_ENABLE_PSK_CIPHERSUITES) || defined(NX_SECURE_ENABLE_ECJPAKE_CIPHERSUITE) 158 #define nx_secure_tls_client_psk_set _nxe_secure_tls_client_psk_set 159 #define nx_secure_tls_psk_add _nxe_secure_tls_psk_add 160 #endif /* defined(NX_SECURE_ENABLE_PSK_CIPHERSUITES) || defined(NX_SECURE_ENABLE_ECJPAKE_CIPHERSUITE) */ 161 #endif /* NX_SECURE_DISABLE_ERROR_CHECKING */ 162 #define nx_secure_crypto_table_self_test _nx_secure_crypto_table_self_test 163 #define nx_secure_crypto_rng_self_test _nx_secure_crypto_rng_self_test 164 #ifdef NX_SECURE_ENABLE_ECC_CIPHERSUITE 165 #define nx_secure_tls_ecc_initialize _nx_secure_tls_ecc_initialize 166 #endif /* NX_SECURE_ENABLE_ECC_CIPHERSUITE */ 167 168 UINT nx_secure_crypto_table_self_test(const NX_SECURE_TLS_CRYPTO *crypto_table, 169 VOID *metadata, UINT metadata_size); 170 UINT nx_secure_crypto_rng_self_test(); 171 UINT nx_secure_module_hash_compute(NX_CRYPTO_METHOD *hmac_ptr, 172 UINT start_address, 173 UINT end_address, 174 UCHAR *key, UINT key_length, 175 VOID *metadata, UINT metadata_size, 176 UCHAR *output_buffer, UINT output_buffer_size, UINT *actual_size); 177 178 179 UINT nx_secure_tls_active_certificate_set(NX_SECURE_TLS_SESSION *tls_session, 180 NX_SECURE_X509_CERT *certificate); 181 VOID nx_secure_tls_initialize(VOID); 182 UINT nx_secure_tls_shutdown(VOID); 183 UINT nx_secure_tls_local_certificate_add(NX_SECURE_TLS_SESSION *tls_session, 184 NX_SECURE_X509_CERT *certificate); 185 UINT nx_secure_tls_local_certificate_find(NX_SECURE_TLS_SESSION *tls_session, 186 NX_SECURE_X509_CERT **certificate, UCHAR *common_name, 187 UINT name_length); 188 UINT nx_secure_tls_local_certificate_remove(NX_SECURE_TLS_SESSION *tls_session, UCHAR *common_name, 189 UINT common_name_length); 190 UINT nx_secure_tls_metadata_size_calculate(const NX_SECURE_TLS_CRYPTO *cipher_table, 191 ULONG *metadata_size); 192 UINT nx_secure_tls_remote_certificate_allocate(NX_SECURE_TLS_SESSION *tls_session, 193 NX_SECURE_X509_CERT *certificate, 194 UCHAR *raw_certificate_buffer, UINT buffer_size); 195 UINT nx_secure_tls_remote_certificate_buffer_allocate(NX_SECURE_TLS_SESSION *tls_session, 196 UINT certs_number, VOID *certificate_buffer, ULONG buffer_size); 197 UINT nx_secure_tls_remote_certificate_free_all(NX_SECURE_TLS_SESSION *tls_session); 198 UINT nx_secure_tls_server_certificate_add(NX_SECURE_TLS_SESSION *tls_session, 199 NX_SECURE_X509_CERT *certificate, UINT cert_id); 200 UINT nx_secure_tls_server_certificate_find(NX_SECURE_TLS_SESSION *tls_session, 201 NX_SECURE_X509_CERT **certificate, UINT cert_id); 202 UINT nx_secure_tls_server_certificate_remove(NX_SECURE_TLS_SESSION *tls_session, UINT cert_id); 203 UINT nx_secure_tls_session_alert_value_get(NX_SECURE_TLS_SESSION *tls_session, 204 UINT *alert_level, UINT *alert_value); 205 UINT nx_secure_tls_session_certificate_callback_set(NX_SECURE_TLS_SESSION *tls_session, 206 ULONG (*func_ptr)(NX_SECURE_TLS_SESSION *session, 207 NX_SECURE_X509_CERT *certificate)); 208 UINT nx_secure_tls_session_client_callback_set(NX_SECURE_TLS_SESSION *tls_session, 209 ULONG (*func_ptr)(NX_SECURE_TLS_SESSION *tls_session, 210 NX_SECURE_TLS_HELLO_EXTENSION *extensions, 211 UINT num_extensions)); 212 UINT nx_secure_tls_session_client_verify_disable(NX_SECURE_TLS_SESSION *tls_session); 213 UINT nx_secure_tls_session_client_verify_enable(NX_SECURE_TLS_SESSION *tls_session); 214 UINT nx_secure_tls_session_x509_client_verify_configure(NX_SECURE_TLS_SESSION *tls_session, UINT certs_number, 215 VOID *certificate_buffer, ULONG buffer_size); 216 217 UINT nx_secure_tls_session_create(NX_SECURE_TLS_SESSION *session_ptr, 218 const NX_SECURE_TLS_CRYPTO *cipher_table, 219 VOID *metadata_area, 220 ULONG metadata_size); 221 UINT nx_secure_tls_session_delete(NX_SECURE_TLS_SESSION *tls_session); 222 UINT nx_secure_tls_session_end(NX_SECURE_TLS_SESSION *tls_session, UINT wait_option); 223 UINT nx_secure_tls_session_packet_buffer_set(NX_SECURE_TLS_SESSION *session_ptr, 224 UCHAR *buffer_ptr, ULONG buffer_size); 225 UINT nx_secure_tls_session_packet_pool_set(NX_SECURE_TLS_SESSION *tls_session, 226 NX_PACKET_POOL *packet_pool); 227 UINT nx_secure_tls_session_protocol_version_override(NX_SECURE_TLS_SESSION *tls_session, 228 USHORT protocol_version); 229 UINT nx_secure_tls_session_receive(NX_SECURE_TLS_SESSION *tls_session, NX_PACKET **packet_ptr_ptr, 230 ULONG wait_option); 231 UINT nx_secure_tls_session_renegotiate(NX_SECURE_TLS_SESSION *tls_session, UINT wait_option); 232 UINT nx_secure_tls_session_renegotiate_callback_set(NX_SECURE_TLS_SESSION *tls_session, 233 ULONG (*func_ptr)(NX_SECURE_TLS_SESSION *session)); 234 UINT nx_secure_tls_session_reset(NX_SECURE_TLS_SESSION *tls_session); 235 UINT nx_secure_tls_session_send(NX_SECURE_TLS_SESSION *tls_session, NX_PACKET *packet_ptr, 236 ULONG wait_option); 237 UINT nx_secure_tls_session_server_callback_set(NX_SECURE_TLS_SESSION *tls_session, 238 ULONG (*func_ptr)(NX_SECURE_TLS_SESSION *tls_session, 239 NX_SECURE_TLS_HELLO_EXTENSION *extensions, 240 UINT num_extensions)); 241 UINT nx_secure_tls_session_sni_extension_parse(NX_SECURE_TLS_SESSION *tls_session, 242 NX_SECURE_TLS_HELLO_EXTENSION *extensions, 243 UINT num_extensions, NX_SECURE_X509_DNS_NAME *dns_name); 244 UINT nx_secure_tls_session_sni_extension_set(NX_SECURE_TLS_SESSION *tls_session, 245 NX_SECURE_X509_DNS_NAME *dns_name); 246 UINT nx_secure_tls_session_start(NX_SECURE_TLS_SESSION *tls_session, NX_TCP_SOCKET *tcp_socket, 247 UINT wait_option); 248 UINT nx_secure_tls_session_time_function_set(NX_SECURE_TLS_SESSION *tls_session, 249 ULONG (*time_func_ptr)(VOID)); 250 UINT nx_secure_tls_trusted_certificate_add(NX_SECURE_TLS_SESSION *tls_session, 251 NX_SECURE_X509_CERT *certificate); 252 UINT nx_secure_tls_trusted_certificate_remove(NX_SECURE_TLS_SESSION *tls_session, UCHAR *common_name, 253 UINT common_name_length); 254 UINT nx_secure_tls_packet_allocate(NX_SECURE_TLS_SESSION *tls_session, NX_PACKET_POOL *pool_ptr, 255 NX_PACKET **packet_ptr, ULONG wait_option); 256 #ifdef NX_SECURE_ENABLE_PSK_CIPHERSUITES 257 UINT nx_secure_tls_psk_add(NX_SECURE_TLS_SESSION *tls_session, UCHAR *pre_shared_key, UINT psk_length, 258 UCHAR *psk_identity, UINT identity_length, UCHAR *hint, UINT hint_length); 259 260 UINT nx_secure_tls_client_psk_set(NX_SECURE_TLS_SESSION *tls_session, UCHAR *pre_shared_key, UINT psk_length, 261 UCHAR *psk_identity, UINT identity_length, UCHAR *hint, UINT hint_length); 262 #endif 263 #ifdef NX_SECURE_ENABLE_ECC_CIPHERSUITE 264 UINT nx_secure_tls_ecc_initialize(NX_SECURE_TLS_SESSION *tls_session, 265 const USHORT *supported_groups, USHORT supported_group_count, 266 const NX_CRYPTO_METHOD **curves); 267 #endif /* NX_SECURE_ENABLE_ECC_CIPHERSUITE */ 268 #endif /* NX_SECURE_SOURCE_CODE */ 269 270 271 #ifdef __cplusplus 272 } 273 #endif 274 275 #endif /* SRC_NX_SECURE_TLS_H_ */ 276 277