Bluetooth: Move Mesh CCM into a separate module
Moves the Mesh AES-CCM module out into a separate module, to make it accessible from other subsystems. Adds the new CCM API in include/bluetooth/crypto.h along with the bt_encrypt functions. Signed-off-by: Trond Einar Snekvik <Trond.Einar.Snekvik@nordicsemi.no>
This commit is contained in:
parent
e02eb4e511
commit
4ea59711d2
6 changed files with 301 additions and 229 deletions
|
@ -3,7 +3,7 @@
|
|||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2017 Nordic Semiconductor ASA
|
||||
* Copyright (c) 2017-2020 Nordic Semiconductor ASA
|
||||
* Copyright (c) 2015-2017 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
|
@ -67,6 +67,55 @@ int bt_encrypt_le(const u8_t key[16], const u8_t plaintext[16],
|
|||
int bt_encrypt_be(const u8_t key[16], const u8_t plaintext[16],
|
||||
u8_t enc_data[16]);
|
||||
|
||||
|
||||
/** @brief Decrypt big-endian data with AES-CCM.
|
||||
*
|
||||
* Decrypts and authorizes @c enc_data with AES-CCM, as described in
|
||||
* https://tools.ietf.org/html/rfc3610.
|
||||
*
|
||||
* Assumes that the MIC follows directly after the encrypted data.
|
||||
*
|
||||
* @param key 128 bit MS byte first key
|
||||
* @param nonce 13 byte MS byte first nonce
|
||||
* @param enc_data Encrypted data
|
||||
* @param len Length of the encrypted data
|
||||
* @param aad Additional input data
|
||||
* @param aad_len Additional input data length
|
||||
* @param plaintext Plaintext buffer to place result in
|
||||
* @param mic_size Size of the trailing MIC (in bytes)
|
||||
*
|
||||
* @retval 0 Successfully decrypted the data.
|
||||
* @retval -EINVAL Invalid parameters.
|
||||
* @retval -EBADMSG Authentication failed.
|
||||
*/
|
||||
int bt_ccm_decrypt(const u8_t key[16], u8_t nonce[13], const u8_t *enc_data,
|
||||
size_t len, const u8_t *aad, size_t aad_len,
|
||||
u8_t *plaintext, size_t mic_size);
|
||||
|
||||
|
||||
/** @brief Encrypt big-endian data with AES-CCM.
|
||||
*
|
||||
* Encrypts and generates a MIC from @c plaintext with AES-CCM, as described in
|
||||
* https://tools.ietf.org/html/rfc3610.
|
||||
*
|
||||
* Places the MIC directly after the encrypted data.
|
||||
*
|
||||
* @param key 128 bit MS byte first key
|
||||
* @param nonce 13 byte MS byte first nonce
|
||||
* @param enc_data Buffer to place encrypted data in
|
||||
* @param len Length of the encrypted data
|
||||
* @param aad Additional input data
|
||||
* @param aad_len Additional input data length
|
||||
* @param plaintext Plaintext buffer to encrypt
|
||||
* @param mic_size Size of the trailing MIC (in bytes)
|
||||
*
|
||||
* @retval 0 Successfully encrypted the data.
|
||||
* @retval -EINVAL Invalid parameters.
|
||||
*/
|
||||
int bt_ccm_encrypt(const u8_t key[16], u8_t nonce[13], const u8_t *enc_data,
|
||||
size_t len, const u8_t *aad, size_t aad_len,
|
||||
u8_t *plaintext, size_t mic_size);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue