Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: TYBLE16_simple_data_logger TYBLE16_MP3_Air
ccm.h File Reference
This file provides an API for the CCM authenticated encryption mode for block ciphers. More...
Go to the source code of this file.
Data Structures | |
struct | mbedtls_ccm_context |
The CCM context-type definition. More... | |
Typedefs | |
typedef struct mbedtls_ccm_context | mbedtls_ccm_context |
The CCM context-type definition. | |
Functions | |
void | mbedtls_ccm_init (mbedtls_ccm_context *ctx) |
This function initializes the specified CCM context, to make references valid, and prepare the context for mbedtls_ccm_setkey() or mbedtls_ccm_free(). | |
int | mbedtls_ccm_setkey (mbedtls_ccm_context *ctx, mbedtls_cipher_id_t cipher, const unsigned char *key, unsigned int keybits) |
This function initializes the CCM context set in the ctx parameter and sets the encryption key. | |
void | mbedtls_ccm_free (mbedtls_ccm_context *ctx) |
This function releases and clears the specified CCM context and underlying cipher sub-context. | |
int | mbedtls_ccm_encrypt_and_tag (mbedtls_ccm_context *ctx, size_t length, const unsigned char *iv, size_t iv_len, const unsigned char *add, size_t add_len, const unsigned char *input, unsigned char *output, unsigned char *tag, size_t tag_len) |
This function encrypts a buffer using CCM. | |
int | mbedtls_ccm_star_encrypt_and_tag (mbedtls_ccm_context *ctx, size_t length, const unsigned char *iv, size_t iv_len, const unsigned char *add, size_t add_len, const unsigned char *input, unsigned char *output, unsigned char *tag, size_t tag_len) |
This function encrypts a buffer using CCM*. | |
int | mbedtls_ccm_auth_decrypt (mbedtls_ccm_context *ctx, size_t length, const unsigned char *iv, size_t iv_len, const unsigned char *add, size_t add_len, const unsigned char *input, unsigned char *output, const unsigned char *tag, size_t tag_len) |
This function performs a CCM authenticated decryption of a buffer. | |
int | mbedtls_ccm_star_auth_decrypt (mbedtls_ccm_context *ctx, size_t length, const unsigned char *iv, size_t iv_len, const unsigned char *add, size_t add_len, const unsigned char *input, unsigned char *output, const unsigned char *tag, size_t tag_len) |
This function performs a CCM* authenticated decryption of a buffer. | |
int | mbedtls_ccm_self_test (int verbose) |
The CCM checkup routine. |
Detailed Description
This file provides an API for the CCM authenticated encryption mode for block ciphers.
CCM combines Counter mode encryption with CBC-MAC authentication for 128-bit block ciphers.
Input to CCM includes the following elements:
- Payload - data that is both authenticated and encrypted.
- Associated data (Adata) - data that is authenticated but not encrypted, For example, a header.
- Nonce - A unique value that is assigned to the payload and the associated data.
Definition of CCM: http://csrc.nist.gov/publications/nistpubs/800-38C/SP800-38C_updated-July20_2007.pdf RFC 3610 "Counter with CBC-MAC (CCM)"
Related: RFC 5116 "An Interface and Algorithms for Authenticated Encryption"
Definition of CCM*: IEEE 802.15.4 - IEEE Standard for Local and metropolitan area networks Integer representation is fixed most-significant-octet-first order and the representation of octets is most-significant-bit-first order. This is consistent with RFC 3610.
Definition in file ccm.h.
Typedef Documentation
typedef struct mbedtls_ccm_context mbedtls_ccm_context |
The CCM context-type definition.
The CCM context is passed to the APIs called.
Function Documentation
int mbedtls_ccm_auth_decrypt | ( | mbedtls_ccm_context * | ctx, |
size_t | length, | ||
const unsigned char * | iv, | ||
size_t | iv_len, | ||
const unsigned char * | add, | ||
size_t | add_len, | ||
const unsigned char * | input, | ||
unsigned char * | output, | ||
const unsigned char * | tag, | ||
size_t | tag_len | ||
) |
This function performs a CCM authenticated decryption of a buffer.
- Parameters:
-
ctx The CCM context to use for decryption. This must be initialized and bound to a key. length The length of the input data in Bytes. iv The initialization vector (nonce). This must be a readable buffer of at least iv_len
Bytes.iv_len The length of the nonce in Bytes: 7, 8, 9, 10, 11, 12, or 13. The length L of the message length field is 15 - iv_len
.add The additional data field. This must be a readable buffer of at least that add_len
Bytes..add_len The length of additional data in Bytes. This must be less than 2^16 - 2^8. input The buffer holding the input data. If length
is greater than zero,input
must be a readable buffer of at least that length.output The buffer holding the output data. If length
is greater than zero,output
must be a writable buffer of at least that length.tag The buffer holding the authentication field. This must be a readable buffer of at least tag_len
Bytes.tag_len The length of the authentication field to generate in Bytes: 4, 6, 8, 10, 12, 14 or 16.
- Returns:
0
on success. This indicates that the message is authentic.- MBEDTLS_ERR_CCM_AUTH_FAILED if the tag does not match.
- A cipher-specific error code on calculation failure.
int mbedtls_ccm_encrypt_and_tag | ( | mbedtls_ccm_context * | ctx, |
size_t | length, | ||
const unsigned char * | iv, | ||
size_t | iv_len, | ||
const unsigned char * | add, | ||
size_t | add_len, | ||
const unsigned char * | input, | ||
unsigned char * | output, | ||
unsigned char * | tag, | ||
size_t | tag_len | ||
) |
This function encrypts a buffer using CCM.
- Note:
- The tag is written to a separate buffer. To concatenate the
tag
with theoutput
, as done in RFC-3610: Counter with CBC-MAC (CCM), usetag
=output
+length
, and make sure that the output buffer is at leastlength
+tag_len
wide.
- Parameters:
-
ctx The CCM context to use for encryption. This must be initialized and bound to a key. length The length of the input data in Bytes. iv The initialization vector (nonce). This must be a readable buffer of at least iv_len
Bytes.iv_len The length of the nonce in Bytes: 7, 8, 9, 10, 11, 12, or 13. The length L of the message length field is 15 - iv_len
.add The additional data field. If add_len
is greater than zero,add
must be a readable buffer of at least that length.add_len The length of additional data in Bytes. This must be less than `2^16 - 2^8`. input The buffer holding the input data. If length
is greater than zero,input
must be a readable buffer of at least that length.output The buffer holding the output data. If length
is greater than zero,output
must be a writable buffer of at least that length.tag The buffer holding the authentication field. This must be a readable buffer of at least tag_len
Bytes.tag_len The length of the authentication field to generate in Bytes: 4, 6, 8, 10, 12, 14 or 16.
- Returns:
0
on success.- A CCM or cipher-specific error code on failure.
void mbedtls_ccm_free | ( | mbedtls_ccm_context * | ctx ) |
void mbedtls_ccm_init | ( | mbedtls_ccm_context * | ctx ) |
This function initializes the specified CCM context, to make references valid, and prepare the context for mbedtls_ccm_setkey() or mbedtls_ccm_free().
- Parameters:
-
ctx The CCM context to initialize. This must not be NULL
.
int mbedtls_ccm_self_test | ( | int | verbose ) |
int mbedtls_ccm_setkey | ( | mbedtls_ccm_context * | ctx, |
mbedtls_cipher_id_t | cipher, | ||
const unsigned char * | key, | ||
unsigned int | keybits | ||
) |
This function initializes the CCM context set in the ctx
parameter and sets the encryption key.
- Parameters:
-
ctx The CCM context to initialize. This must be an initialized context. cipher The 128-bit block cipher to use. key The encryption key. This must not be NULL
.keybits The key size in bits. This must be acceptable by the cipher.
- Returns:
0
on success.- A CCM or cipher-specific error code on failure.
int mbedtls_ccm_star_auth_decrypt | ( | mbedtls_ccm_context * | ctx, |
size_t | length, | ||
const unsigned char * | iv, | ||
size_t | iv_len, | ||
const unsigned char * | add, | ||
size_t | add_len, | ||
const unsigned char * | input, | ||
unsigned char * | output, | ||
const unsigned char * | tag, | ||
size_t | tag_len | ||
) |
This function performs a CCM* authenticated decryption of a buffer.
- Note:
- When using this function in a variable tag length context, the tag length has to be decoded from
iv
and passed to this function astag_len
. (tag
needs to be adjusted accordingly.)
- Parameters:
-
ctx The CCM context to use for decryption. This must be initialized and bound to a key. length The length of the input data in Bytes. iv The initialization vector (nonce). This must be a readable buffer of at least iv_len
Bytes.iv_len The length of the nonce in Bytes: 7, 8, 9, 10, 11, 12, or 13. The length L of the message length field is 15 - iv_len
.add The additional data field. This must be a readable buffer of at least that add_len
Bytes.add_len The length of additional data in Bytes. This must be less than 2^16 - 2^8. input The buffer holding the input data. If length
is greater than zero,input
must be a readable buffer of at least that length.output The buffer holding the output data. If length
is greater than zero,output
must be a writable buffer of at least that length.tag The buffer holding the authentication field. This must be a readable buffer of at least tag_len
Bytes.tag_len The length of the authentication field in Bytes. 0, 4, 6, 8, 10, 12, 14 or 16.
- Warning:
- Passing
0
astag_len
means that the message is nos longer authenticated.
- Returns:
0
on success.- MBEDTLS_ERR_CCM_AUTH_FAILED if the tag does not match.
- A cipher-specific error code on calculation failure.
int mbedtls_ccm_star_encrypt_and_tag | ( | mbedtls_ccm_context * | ctx, |
size_t | length, | ||
const unsigned char * | iv, | ||
size_t | iv_len, | ||
const unsigned char * | add, | ||
size_t | add_len, | ||
const unsigned char * | input, | ||
unsigned char * | output, | ||
unsigned char * | tag, | ||
size_t | tag_len | ||
) |
This function encrypts a buffer using CCM*.
- Note:
- The tag is written to a separate buffer. To concatenate the
tag
with theoutput
, as done in RFC-3610: Counter with CBC-MAC (CCM), usetag
=output
+length
, and make sure that the output buffer is at leastlength
+tag_len
wide. -
When using this function in a variable tag length context, the tag length has to be encoded into the
iv
passed to this function.
- Parameters:
-
ctx The CCM context to use for encryption. This must be initialized and bound to a key. length The length of the input data in Bytes. iv The initialization vector (nonce). This must be a readable buffer of at least iv_len
Bytes.iv_len The length of the nonce in Bytes: 7, 8, 9, 10, 11, 12, or 13. The length L of the message length field is 15 - iv_len
.add The additional data field. This must be a readable buffer of at least add_len
Bytes.add_len The length of additional data in Bytes. This must be less than 2^16 - 2^8. input The buffer holding the input data. If length
is greater than zero,input
must be a readable buffer of at least that length.output The buffer holding the output data. If length
is greater than zero,output
must be a writable buffer of at least that length.tag The buffer holding the authentication field. This must be a readable buffer of at least tag_len
Bytes.tag_len The length of the authentication field to generate in Bytes: 0, 4, 6, 8, 10, 12, 14 or 16.
- Warning:
- Passing
0
astag_len
means that the message is no longer authenticated.
- Returns:
0
on success.- A CCM or cipher-specific error code on failure.
Generated on Tue Jul 12 2022 13:55:06 by
