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 /** Datagram Transport Layer Security (DTLS) */ 18 /** */ 19 /**************************************************************************/ 20 /**************************************************************************/ 21 22 23 /**************************************************************************/ 24 /* */ 25 /* APPLICATION INTERFACE DEFINITION RELEASE */ 26 /* */ 27 /* nx_secure_dtls_api.h PORTABLE C */ 28 /* 6.1 */ 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 DTLS 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 /* */ 47 /**************************************************************************/ 48 49 50 #ifndef SRC_NX_SECURE_DTLS_API_H_ 51 #define SRC_NX_SECURE_DTLS_API_H_ 52 53 /* Determine if a C++ compiler is being used. If so, ensure that standard 54 C is used to process the API information. */ 55 #ifdef __cplusplus 56 57 /* Yes, C++ compiler is present. Use standard C. */ 58 extern "C" { 59 60 #endif 61 62 /* Include the ThreadX and port-specific data type file. */ 63 64 #include "nx_api.h" 65 #include "nx_secure_tls_api.h" 66 #include "nx_secure_dtls.h" 67 68 #ifndef NX_SECURE_SOURCE_CODE 69 /* Services without error checking. */ 70 #ifdef NX_SECURE_DISABLE_ERROR_CHECKING 71 #define nx_secure_dtls_initialize _nx_secure_dtls_initialize 72 #define nx_secure_dtls_session_create _nx_secure_dtls_session_create 73 #define nx_secure_dtls_session_delete _nx_secure_dtls_session_delete 74 #define nx_secure_dtls_session_end _nx_secure_dtls_session_end 75 #define nx_secure_dtls_session_receive _nx_secure_dtls_session_receive 76 #define nx_secure_dtls_session_reset _nx_secure_dtls_session_reset 77 #define nx_secure_dtls_session_send _nx_secure_dtls_session_send 78 #define nx_secure_dtls_server_session_send _nx_secure_dtls_server_session_send 79 #define nx_secure_dtls_client_session_send _nx_secure_dtls_server_session_send 80 #define nx_secure_dtls_session_start _nx_secure_dtls_session_start 81 #define nx_secure_dtls_packet_allocate _nx_secure_dtls_packet_allocate 82 #define nx_secure_dtls_client_session_start _nx_secure_dtls_client_session_start 83 #define nx_secure_dtls_server_session_start _nx_secure_dtls_server_session_start 84 #define nx_secure_dtls_server_create _nx_secure_dtls_server_create 85 #define nx_secure_dtls_server_delete _nx_secure_dtls_server_delete 86 #define nx_secure_dtls_server_local_certificate_add _nx_secure_dtls_server_local_certificate_add 87 #define nx_secure_dtls_server_local_certificate_remove _nx_secure_dtls_server_local_certificate_remove 88 #define nx_secure_dtls_server_notify_set _nx_secure_dtls_server_notify_set 89 #define nx_secure_dtls_server_start _nx_secure_dtls_server_start 90 #define nx_secure_dtls_server_stop _nx_secure_dtls_server_stop 91 #define nx_secure_dtls_server_trusted_certificate_add _nx_secure_dtls_server_trusted_certificate_add 92 #define nx_secure_dtls_server_trusted_certificate_remove _nx_secure_dtls_server_trusted_certificate_remove 93 #define nx_secure_dtls_server_x509_client_verify_configure _nx_secure_dtls_server_x509_client_verify_configure 94 #define nx_secure_dtls_server_x509_client_verify_disable _nx_secure_dtls_server_x509_client_verify_disable 95 #define nx_secure_dtls_session_client_info_get _nx_secure_dtls_session_client_info_get 96 #define nx_secure_dtls_psk_add _nx_secure_dtls_psk_add 97 #define nx_secure_dtls_session_local_certificate_add _nx_secure_dtls_session_local_certificate_add 98 #define nx_secure_dtls_session_local_certificate_remove _nx_secure_dtls_session_local_certificate_remove 99 #define nx_secure_dtls_session_trusted_certificate_add _nx_secure_dtls_session_trusted_certificate_add 100 #define nx_secure_dtls_session_trusted_certificate_remove _nx_secure_dtls_session_trusted_certificate_remove 101 #define nx_secure_dtls_server_psk_add _nx_secure_dtls_server_psk_add 102 #define nx_secure_dtls_client_protocol_version_override _nx_secure_dtls_client_protocol_version_override 103 #define nx_secure_dtls_server_protocol_version_override _nx_secure_dtls_server_protocol_version_override 104 #define nx_secure_dtls_ecc_initialize _nx_secure_dtls_ecc_initialize 105 #define nx_secure_dtls_server_ecc_initialize _nx_secure_dtls_server_ecc_initialize 106 #else 107 /* Services with error checking. */ 108 #define nx_secure_dtls_initialize _nx_secure_dtls_initialize 109 #define nx_secure_dtls_session_create _nxe_secure_dtls_session_create 110 #define nx_secure_dtls_session_delete _nxe_secure_dtls_session_delete 111 #define nx_secure_dtls_session_end _nxe_secure_dtls_session_end 112 #define nx_secure_dtls_session_receive _nxe_secure_dtls_session_receive 113 #define nx_secure_dtls_session_reset _nxe_secure_dtls_session_reset 114 #define nx_secure_dtls_session_send _nxe_secure_dtls_session_send 115 #define nx_secure_dtls_server_session_send _nxe_secure_dtls_server_session_send 116 #define nx_secure_dtls_client_session_send _nxe_secure_dtls_server_session_send 117 #define nx_secure_dtls_session_start _nxe_secure_dtls_session_start 118 #define nx_secure_dtls_packet_allocate _nxe_secure_dtls_packet_allocate 119 #define nx_secure_dtls_client_session_start _nxe_secure_dtls_client_session_start 120 #define nx_secure_dtls_server_session_start _nxe_secure_dtls_server_session_start 121 #define nx_secure_dtls_server_create _nxe_secure_dtls_server_create 122 #define nx_secure_dtls_server_delete _nxe_secure_dtls_server_delete 123 #define nx_secure_dtls_server_local_certificate_add _nxe_secure_dtls_server_local_certificate_add 124 #define nx_secure_dtls_server_local_certificate_remove _nxe_secure_dtls_server_local_certificate_remove 125 #define nx_secure_dtls_server_notify_set _nxe_secure_dtls_server_notify_set 126 #define nx_secure_dtls_server_start _nxe_secure_dtls_server_start 127 #define nx_secure_dtls_server_stop _nxe_secure_dtls_server_stop 128 #define nx_secure_dtls_server_trusted_certificate_add _nxe_secure_dtls_server_trusted_certificate_add 129 #define nx_secure_dtls_server_trusted_certificate_remove _nxe_secure_dtls_server_trusted_certificate_remove 130 #define nx_secure_dtls_server_x509_client_verify_configure _nxe_secure_dtls_server_x509_client_verify_configure 131 #define nx_secure_dtls_server_x509_client_verify_disable _nxe_secure_dtls_server_x509_client_verify_disable 132 #define nx_secure_dtls_session_client_info_get _nxe_secure_dtls_session_client_info_get 133 #define nx_secure_dtls_psk_add _nxe_secure_dtls_psk_add 134 #define nx_secure_dtls_session_local_certificate_add _nxe_secure_dtls_session_local_certificate_add 135 #define nx_secure_dtls_session_local_certificate_remove _nxe_secure_dtls_session_local_certificate_remove 136 #define nx_secure_dtls_session_trusted_certificate_add _nxe_secure_dtls_session_trusted_certificate_add 137 #define nx_secure_dtls_session_trusted_certificate_remove _nxe_secure_dtls_session_trusted_certificate_remove 138 #define nx_secure_dtls_server_psk_add _nxe_secure_dtls_server_psk_add 139 #define nx_secure_dtls_client_protocol_version_override _nxe_secure_dtls_client_protocol_version_override 140 #define nx_secure_dtls_server_protocol_version_override _nxe_secure_dtls_server_protocol_version_override 141 #define nx_secure_dtls_ecc_initialize _nxe_secure_dtls_ecc_initialize 142 #define nx_secure_dtls_server_ecc_initialize _nxe_secure_dtls_server_ecc_initialize 143 #endif /* NX_SECURE_DISABLE_ERROR_CHECKING */ 144 145 /* Define the function prototypes of the DTLS API. */ 146 VOID nx_secure_dtls_initialize(VOID); 147 148 UINT nx_secure_dtls_session_create(NX_SECURE_DTLS_SESSION *session_ptr, 149 const NX_SECURE_TLS_CRYPTO *crypto_table, 150 VOID *metadata_buffer, ULONG metadata_size, 151 UCHAR *packet_reassembly_buffer, UINT packet_reassembly_buffer_size, 152 UINT certs_number, 153 UCHAR *remote_certificate_buffer, ULONG remote_certificate_buffer_size); 154 155 UINT nx_secure_dtls_session_delete(NX_SECURE_DTLS_SESSION *dtls_session); 156 UINT nx_secure_dtls_session_end(NX_SECURE_DTLS_SESSION *dtls_session, UINT wait_option); 157 UINT nx_secure_dtls_session_receive(NX_SECURE_DTLS_SESSION *dtls_session, 158 NX_PACKET **packet_ptr_ptr, ULONG wait_option); 159 UINT nx_secure_dtls_session_reset(NX_SECURE_DTLS_SESSION *session_ptr); 160 UINT nx_secure_dtls_session_send(NX_SECURE_DTLS_SESSION *dtls_session, NX_PACKET *packet_ptr, 161 NXD_ADDRESS *ip_address, UINT port); 162 UINT nx_secure_dtls_server_session_send(NX_SECURE_DTLS_SESSION *dtls_session, NX_PACKET *packet_ptr); 163 UINT nx_secure_dtls_session_start(NX_SECURE_DTLS_SESSION *dtls_session, NX_UDP_SOCKET *udp_socket, 164 UINT is_client, UINT wait_option); 165 UINT nx_secure_dtls_packet_allocate(NX_SECURE_DTLS_SESSION *dtls_session, NX_PACKET_POOL *pool_ptr, 166 NX_PACKET **packet_ptr, ULONG wait_option); 167 168 UINT nx_secure_dtls_client_session_start(NX_SECURE_DTLS_SESSION *dtls_session, NX_UDP_SOCKET *udp_socket, NXD_ADDRESS *ip_address, UINT port, UINT wait_option); 169 UINT nx_secure_dtls_server_session_start(NX_SECURE_DTLS_SESSION *dtls_session, UINT wait_option); 170 171 UINT nx_secure_dtls_server_create(NX_SECURE_DTLS_SERVER *server_ptr, NX_IP *ip_ptr, UINT port, ULONG timeout, 172 VOID *session_buffer, UINT session_buffer_size, 173 const NX_SECURE_TLS_CRYPTO *crypto_table, 174 VOID *crypto_metadata_buffer, ULONG crypto_metadata_size, 175 UCHAR *packet_reassembly_buffer, UINT packet_reassembly_buffer_size, 176 UINT (*connect_notify)(NX_SECURE_DTLS_SESSION *dtls_session, NXD_ADDRESS *ip_address, UINT port), 177 UINT (*receive_notify)(NX_SECURE_DTLS_SESSION *dtls_session)); 178 179 UINT nx_secure_dtls_server_delete(NX_SECURE_DTLS_SERVER *server_ptr); 180 181 182 UINT nx_secure_dtls_server_local_certificate_add(NX_SECURE_DTLS_SERVER *server_ptr, 183 NX_SECURE_X509_CERT *certificate, UINT cert_id); 184 185 UINT nx_secure_dtls_server_local_certificate_remove(NX_SECURE_DTLS_SERVER *server_ptr, 186 UCHAR *common_name, UINT common_name_length, UINT cert_id); 187 188 189 UINT nx_secure_dtls_server_notify_set(NX_SECURE_DTLS_SERVER *server_ptr, 190 UINT (*disconnect_notify)(NX_SECURE_DTLS_SESSION *dtls_session), 191 UINT (*error_notify)(NX_SECURE_DTLS_SESSION *dtls_session, UINT error_code)); 192 193 UINT nx_secure_dtls_server_start(NX_SECURE_DTLS_SERVER *server_ptr); 194 195 UINT nx_secure_dtls_server_stop(NX_SECURE_DTLS_SERVER *server_ptr); 196 197 UINT nx_secure_dtls_server_trusted_certificate_add(NX_SECURE_DTLS_SERVER *server_ptr, 198 NX_SECURE_X509_CERT *certificate, UINT cert_id); 199 200 201 UINT nx_secure_dtls_server_trusted_certificate_remove(NX_SECURE_DTLS_SERVER *server_ptr, 202 UCHAR *common_name, UINT common_name_length, UINT cert_id); 203 204 UINT nx_secure_dtls_server_psk_add(NX_SECURE_DTLS_SERVER *server_ptr, UCHAR *pre_shared_key, 205 UINT psk_length, UCHAR *psk_identity, UINT identity_length, UCHAR *hint, 206 UINT hint_length); 207 208 UINT nx_secure_dtls_server_x509_client_verify_configure(NX_SECURE_DTLS_SERVER *server_ptr, UINT certs_per_session, 209 UCHAR *certs_buffer, ULONG buffer_size); 210 211 UINT nx_secure_dtls_server_x509_client_verify_disable(NX_SECURE_DTLS_SERVER *server_ptr); 212 213 UINT nx_secure_dtls_session_client_info_get(NX_SECURE_DTLS_SESSION *dtls_session, 214 NXD_ADDRESS *client_ip_address, UINT *client_port, UINT *local_port); 215 216 217 UINT nx_secure_dtls_session_local_certificate_add(NX_SECURE_DTLS_SESSION *dtls_session, 218 NX_SECURE_X509_CERT *certificate, UINT cert_id); 219 UINT nx_secure_dtls_session_local_certificate_remove(NX_SECURE_DTLS_SESSION *dtls_session, 220 UCHAR *common_name, UINT common_name_length, UINT cert_id); 221 UINT nx_secure_dtls_session_trusted_certificate_add(NX_SECURE_DTLS_SESSION *dtls_session, 222 NX_SECURE_X509_CERT *certificate, UINT cert_id); 223 UINT nx_secure_dtls_session_trusted_certificate_remove(NX_SECURE_DTLS_SESSION *dtls_session, 224 UCHAR *common_name, UINT common_name_length, UINT cert_id); 225 UINT nx_secure_dtls_psk_add(NX_SECURE_DTLS_SESSION *dtls_session, UCHAR *pre_shared_key, 226 UINT psk_length, UCHAR *psk_identity, UINT identity_length, UCHAR *hint, 227 UINT hint_length); 228 UINT nx_secure_dtls_client_protocol_version_override(NX_SECURE_DTLS_SESSION *dtls_session, 229 USHORT protocol_version); 230 UINT nx_secure_dtls_server_protocol_version_override(NX_SECURE_DTLS_SERVER *dtls_server, 231 USHORT protocol_version); 232 233 234 #endif /* NX_SECURE_SOURCE_CODE */ 235 236 237 #ifdef __cplusplus 238 } 239 #endif 240 241 #endif /* SRC_NX_SECURE_DTLS_API_H_ */ 242 243