cmac.h
mbedtls/private_access.h
mbedtls/build_info.h
mbedtls/cipher.h
crypto_builtin_composites.h
mbedtls/build_info.h
mbedtls/check_config.h
mbedtls/cipher.h
cmac.h
mbedtls/config_adjust_legacy_crypto.h
mbedtls/config_adjust_psa_from_legacy.h
mbedtls/config_adjust_psa_superset_legacy.h
mbedtls/config_adjust_ssl.h
mbedtls/config_adjust_x509.h
mbedtls/config_psa.h
mbedtls/mbedtls_config.h
mbedtls/platform_time.h
mbedtls/platform_util.h
mbedtls/private_access.h
psa/crypto_adjust_auto_enabled.h
psa/crypto_adjust_config_dependencies.h
psa/crypto_adjust_config_key_pair_types.h
psa/crypto_adjust_config_synonyms.h
psa/crypto_legacy.h
inttypes.h
limits.h
stddef.h
stdint.h
time.h
cmac.h
debug.h
net_sockets.h
oid.h
pk.h
pkcs7.h
psa_util.h
ssl.h
ssl_cache.h
ssl_ciphersuites.h
ssl_cookie.h
ssl_ticket.h
x509.h
x509_crl.h
x509_crt.h
x509_csr.h
crypto.h
crypto_builtin_composites.h
crypto_driver_contexts_composites.h
crypto_struct.h
mbedtls_cmac_context_t
MBEDTLS_AES_BLOCK_SIZE
16
MBEDTLS_DES3_BLOCK_SIZE
8
MBEDTLS_CMAC_MAX_BLOCK_SIZE
16

The longest block used by CMAC is that of AES.

MBEDTLS_CIPHER_BLKSIZE_MAX
MBEDTLS_MAX_BLOCK_LENGTH

The longest block supported by the cipher module.

Deprecated

For the maximum block size of a cipher supported by the CMAC module, use MBEDTLS_CMAC_MAX_BLOCK_SIZE. For the maximum block size of a cipher supported by the cipher module, use MBEDTLS_MAX_BLOCK_LENGTH.

int int mbedtls_cipher_cmac_starts (mbedtls_cipher_context_t *ctx, const unsigned char *key, size_t keybits) mbedtls_cipher_cmac_starts mbedtls_cipher_context_t * ctx const unsigned char * key size_t keybits

This function starts a new CMAC computation by setting the CMAC key, and preparing to authenticate the input data. It must be called with an initialized cipher context.

Once this function has completed, data can be supplied to the CMAC computation by calling mbedtls_cipher_cmac_update().

To start a CMAC computation using the same key as a previous CMAC computation, use mbedtls_cipher_cmac_finish().

When the CMAC implementation is supplied by an alternate implementation (through #MBEDTLS_CMAC_ALT), some ciphers may not be supported by that implementation, and thus return an error. Alternate implementations must support AES-128 and AES-256, and may support AES-192 and 3DES.

ctx

The cipher context used for the CMAC operation, initialized as one of the following types: MBEDTLS_CIPHER_AES_128_ECB, MBEDTLS_CIPHER_AES_192_ECB, MBEDTLS_CIPHER_AES_256_ECB, or MBEDTLS_CIPHER_DES_EDE3_ECB.

key

The CMAC key.

keybits

The length of the CMAC key in bits. Must be supported by the cipher.

`0` on success.

A cipher-specific error code on failure.

int int mbedtls_cipher_cmac_update (mbedtls_cipher_context_t *ctx, const unsigned char *input, size_t ilen) mbedtls_cipher_cmac_update mbedtls_cipher_context_t * ctx const unsigned char * input size_t ilen

This function feeds an input buffer into an ongoing CMAC computation.

The CMAC computation must have previously been started by calling mbedtls_cipher_cmac_starts() or mbedtls_cipher_cmac_reset().

Call this function as many times as needed to input the data to be authenticated. Once all of the required data has been input, call mbedtls_cipher_cmac_finish() to obtain the result of the CMAC operation.

ctx

The cipher context used for the CMAC operation.

input

The buffer holding the input data.

ilen

The length of the input data.

`0` on success.

MBEDTLS_ERR_MD_BAD_INPUT_DATA if parameter verification fails.

int int mbedtls_cipher_cmac_finish (mbedtls_cipher_context_t *ctx, unsigned char *output) mbedtls_cipher_cmac_finish mbedtls_cipher_context_t * ctx unsigned char * output

This function finishes an ongoing CMAC operation, and writes the result to the output buffer.

It should be followed either by mbedtls_cipher_cmac_reset(), which starts another CMAC operation with the same key, or mbedtls_cipher_free(), which clears the cipher context.

ctx

The cipher context used for the CMAC operation.

output

The output buffer for the CMAC checksum result.

`0` on success.

MBEDTLS_ERR_MD_BAD_INPUT_DATA if parameter verification fails.

int int mbedtls_cipher_cmac_reset (mbedtls_cipher_context_t *ctx) mbedtls_cipher_cmac_reset mbedtls_cipher_context_t * ctx

This function starts a new CMAC operation with the same key as the previous one.

It should be called after finishing the previous CMAC operation with mbedtls_cipher_cmac_finish(). After calling this function, call mbedtls_cipher_cmac_update() to supply the new CMAC operation with data.

ctx

The cipher context used for the CMAC operation.

`0` on success.

MBEDTLS_ERR_MD_BAD_INPUT_DATA if parameter verification fails.

int int mbedtls_cipher_cmac (const mbedtls_cipher_info_t *cipher_info, const unsigned char *key, size_t keylen, const unsigned char *input, size_t ilen, unsigned char *output) mbedtls_cipher_cmac const mbedtls_cipher_info_t * cipher_info const unsigned char * key size_t keylen const unsigned char * input size_t ilen unsigned char * output

This function calculates the full generic CMAC on the input buffer with the provided key.

The function allocates the context, performs the calculation, and frees the context.

The CMAC result is calculated as output = generic CMAC(cmac key, input buffer).

When the CMAC implementation is supplied by an alternate implementation (through #MBEDTLS_CMAC_ALT), some ciphers may not be supported by that implementation, and thus return an error. Alternate implementations must support AES-128 and AES-256, and may support AES-192 and 3DES.

cipher_info

The cipher information.

key

The CMAC key.

keylen

The length of the CMAC key in bits.

input

The buffer holding the input data.

ilen

The length of the input data.

output

The buffer for the generic CMAC result.

`0` on success.

MBEDTLS_ERR_MD_BAD_INPUT_DATA if parameter verification fails.

int int mbedtls_aes_cmac_prf_128 (const unsigned char *key, size_t key_len, const unsigned char *input, size_t in_len, unsigned char output[16]) mbedtls_aes_cmac_prf_128 const unsigned char * key size_t key_len const unsigned char * input size_t in_len unsigned char output [16]

This function implements the AES-CMAC-PRF-128 pseudorandom function, as defined in RFC-4615: The Advanced Encryption Standard-Cipher-based Message Authentication Code-Pseudo-Random Function-128 (AES-CMAC-PRF-128) Algorithm for the Internet Key Exchange Protocol (IKE)..

key

The key to use.

key_len

The key length in Bytes.

input

The buffer holding the input data.

in_len

The length of the input data in Bytes.

output

The buffer holding the generated 16 Bytes of pseudorandom output.

`0` on success.

int int mbedtls_cmac_self_test (int verbose) mbedtls_cmac_self_test int verbose

The CMAC checkup routine.

In case the CMAC routines are provided by an alternative implementation (i.e. #MBEDTLS_CMAC_ALT is defined), the checkup routine will succeed even if the implementation does not support the less widely used AES-192 or 3DES primitives. The self-test requires at least AES-128 and AES-256 to be supported by the underlying implementation.

`0` on success.

`1` on failure.

This file contains CMAC definitions and functions.

The Cipher-based Message Authentication Code (CMAC) Mode for Authentication is defined in RFC-4493: The AES-CMAC Algorithm. It is supported with AES and DES.

    /*
    *CopyrightTheMbedTLSContributors
    *SPDX-License-Identifier:Apache-2.0ORGPL-2.0-or-later
    */

    #ifndefMBEDTLS_CMAC_H
    #defineMBEDTLS_CMAC_H
    #include"mbedtls/private_access.h"

    #include"mbedtls/build_info.h"

    #include"mbedtls/cipher.h"

    #ifdef__cplusplus
    extern"C"{
    #endif

    #defineMBEDTLS_AES_BLOCK_SIZE16
    #defineMBEDTLS_DES3_BLOCK_SIZE8

    /*Wedon'tsupportCamelliaorARIAinthismodule*/
    #ifdefined(MBEDTLS_AES_C)
    #defineMBEDTLS_CMAC_MAX_BLOCK_SIZE16
    #else
    #defineMBEDTLS_CMAC_MAX_BLOCK_SIZE8
    #endif

    #if!defined(MBEDTLS_DEPRECATED_REMOVED)
    /*BeforeMbedTLS3.5,thiswasthemaximumblocksizesupportedbytheCMAC
    *module,soitdidn'ttakeCamelliaorARIAintoaccount.Sincethename
    *ofthemacrodoesn'tevenconvey"CMAC",thiswasmisleading.Nowthesize
    *issufficientforanycipher,butthenameisdefinedincmac.hfor
    *backwardcompatibility.*/
    #defineMBEDTLS_CIPHER_BLKSIZE_MAXMBEDTLS_MAX_BLOCK_LENGTH
    #endif/*MBEDTLS_DEPRECATED_REMOVED*/

    #if!defined(MBEDTLS_CMAC_ALT)

    structmbedtls_cmac_context_t{
    unsignedcharMBEDTLS_PRIVATE(state)[MBEDTLS_CMAC_MAX_BLOCK_SIZE];

    unsignedcharMBEDTLS_PRIVATE(unprocessed_block)[MBEDTLS_CMAC_MAX_BLOCK_SIZE];

    size_tMBEDTLS_PRIVATE(unprocessed_len);
    };

    #else/*!MBEDTLS_CMAC_ALT*/
    #include"cmac_alt.h"
    #endif/*!MBEDTLS_CMAC_ALT*/

    intmbedtls_cipher_cmac_starts(mbedtls_cipher_context_t*ctx,
    constunsignedchar*key,size_tkeybits);

    intmbedtls_cipher_cmac_update(mbedtls_cipher_context_t*ctx,
    constunsignedchar*input,size_tilen);

    intmbedtls_cipher_cmac_finish(mbedtls_cipher_context_t*ctx,
    unsignedchar*output);

    intmbedtls_cipher_cmac_reset(mbedtls_cipher_context_t*ctx);

    intmbedtls_cipher_cmac(constmbedtls_cipher_info_t*cipher_info,
    constunsignedchar*key,size_tkeylen,
    constunsignedchar*input,size_tilen,
    unsignedchar*output);

    #ifdefined(MBEDTLS_AES_C)
    intmbedtls_aes_cmac_prf_128(constunsignedchar*key,size_tkey_len,
    constunsignedchar*input,size_tin_len,
    unsignedcharoutput[16]);
    #endif/*MBEDTLS_AES_C*/

    #ifdefined(MBEDTLS_SELF_TEST)&&(defined(MBEDTLS_AES_C)||defined(MBEDTLS_DES_C))
    intmbedtls_cmac_self_test(intverbose);
    #endif/*MBEDTLS_SELF_TEST&&(MBEDTLS_AES_C||MBEDTLS_DES_C)*/

    #ifdef__cplusplus
    }
    #endif

    #endif/*MBEDTLS_CMAC_H*/