| /* |
| * Copyright (c) 2018 Nordic Semiconductor ASA |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| /** @file |
| * @brief TLS credentials management |
| * |
| * An API for applications to configure TLS credentials. |
| */ |
| |
| #ifndef ZEPHYR_INCLUDE_NET_TLS_CREDENTIALS_H_ |
| #define ZEPHYR_INCLUDE_NET_TLS_CREDENTIALS_H_ |
| |
| /** |
| * @brief TLS credentials management |
| * @defgroup tls_credentials TLS credentials management |
| * @ingroup networking |
| * @{ |
| */ |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| /** TLS credential types */ |
| enum tls_credential_type { |
| /** Unspecified credential. */ |
| TLS_CREDENTIAL_NONE, |
| |
| /** A trusted CA certificate. Use this to authenticate remote servers. |
| * Used with certificate-based ciphersuites. |
| */ |
| TLS_CREDENTIAL_CA_CERTIFICATE, |
| |
| /** A public server certificate. Use this to register your own server |
| * certificate. Should be registered together with a corresponding |
| * private key. Used with certificate-based ciphersuites. |
| */ |
| TLS_CREDENTIAL_SERVER_CERTIFICATE, |
| |
| /** Private key. Should be registered together with a corresponding |
| * public certificate. Used with certificate-based ciphersuites. |
| */ |
| TLS_CREDENTIAL_PRIVATE_KEY, |
| |
| /** Pre-shared key. Should be registered together with a corresponding |
| * PSK identity. Used with PSK-based ciphersuites. |
| */ |
| TLS_CREDENTIAL_PSK, |
| |
| /** Pre-shared key identity. Should be registered together with a |
| * corresponding PSK. Used with PSK-based ciphersuites. |
| */ |
| TLS_CREDENTIAL_PSK_ID |
| }; |
| |
| /** Secure tag, a reference to TLS credential |
| * |
| * Secure tag can be used to reference credential after it was registered |
| * in the system. |
| * |
| * @note Some TLS credentials come in pairs: |
| * - TLS_CREDENTIAL_SERVER_CERTIFICATE with TLS_CREDENTIAL_PRIVATE_KEY, |
| * - TLS_CREDENTIAL_PSK with TLS_CREDENTIAL_PSK_ID. |
| * Such pairs of credentials must be assigned the same secure tag to be |
| * correctly handled in the system. |
| */ |
| typedef int sec_tag_t; |
| |
| /** |
| * @brief Add a TLS credential. |
| * |
| * @details This function adds a TLS credential, that can be used |
| * by TLS/DTLS for authentication. |
| * |
| * @param tag A security tag that credential will be referenced with. |
| * @param type A TLS/DTLS credential type. |
| * @param cred A TLS/DTLS credential. |
| * @param credlen A TLS/DTLS credential length. |
| * |
| * @retval 0 TLS credential successfully added. |
| * @retval -EACCES Access to the TLS credential subsystem was denied. |
| * @retval -ENOMEM Not enough memory to add new TLS credential. |
| * @retval -EEXIST TLS credential of specific tag and type already exists. |
| */ |
| int tls_credential_add(sec_tag_t tag, enum tls_credential_type type, |
| const void *cred, size_t credlen); |
| |
| /** |
| * @brief Get a TLS credential. |
| * |
| * @details This function gets an already registered TLS credential, |
| * referenced by @p tag secure tag of @p type. |
| * |
| * @param tag A security tag of requested credential. |
| * @param type A TLS/DTLS credential type of requested credential. |
| * @param cred A buffer for TLS/DTLS credential. |
| * @param credlen A buffer size on input. TLS/DTLS credential length on output. |
| * |
| * @retval 0 TLS credential successfully obtained. |
| * @retval -EACCES Access to the TLS credential subsystem was denied. |
| * @retval -ENOENT Requested TLS credential was not found. |
| * @retval -EFBIG Requested TLS credential does not fit in the buffer provided. |
| */ |
| int tls_credential_get(sec_tag_t tag, enum tls_credential_type type, |
| void *cred, size_t *credlen); |
| |
| /** |
| * @brief Delete a TLS credential. |
| * |
| * @details This function removes a TLS credential, referenced by @p tag |
| * secure tag of @p type. |
| * |
| * @param tag A security tag corresponding to removed credential. |
| * @param type A TLS/DTLS credential type of removed credential. |
| * |
| * @retval 0 TLS credential successfully deleted. |
| * @retval -EACCES Access to the TLS credential subsystem was denied. |
| * @retval -ENOENT Requested TLS credential was not found. |
| */ |
| int tls_credential_delete(sec_tag_t tag, enum tls_credential_type type); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| /** |
| * @} |
| */ |
| |
| #endif /* ZEPHYR_INCLUDE_NET_TLS_CREDENTIALS_H_ */ |