MCUXpresso SDK API Reference Manual  Rev. 0
NXP Semiconductors
 All Data Structures Functions Variables Typedefs Enumerations Enumerator Groups Pages
LTC AES driver

Overview

This section describes the programming interface of the LTC AES driver.

Macros

#define LTC_AES_BLOCK_SIZE   16
 AES block size in bytes.
 
#define LTC_AES_IV_SIZE   16
 AES Input Vector size in bytes.
 
#define LTC_AES_DecryptCtr(base, input, output, size, counter, key, keySize, counterlast, szLeft)   LTC_AES_CryptCtr(base, input, output, size, counter, key, keySize, counterlast, szLeft)
 AES CTR decrypt is mapped to the AES CTR generic operation.
 
#define LTC_AES_EncryptCtr(base, input, output, size, counter, key, keySize, counterlast, szLeft)   LTC_AES_CryptCtr(base, input, output, size, counter, key, keySize, counterlast, szLeft)
 AES CTR encrypt is mapped to the AES CTR generic operation.
 

Enumerations

enum  ltc_aes_key_t {
  kLTC_EncryptKey = 0U,
  kLTC_DecryptKey = 1U
}
 Type of AES key for ECB and CBC decrypt operations. More...
 

Functions

status_t LTC_AES_GenerateDecryptKey (LTC_Type *base, const uint8_t *encryptKey, uint8_t *decryptKey, uint32_t keySize)
 Transforms an AES encrypt key (forward AES) into the decrypt key (inverse AES). More...
 
status_t LTC_AES_EncryptEcb (LTC_Type *base, const uint8_t *plaintext, uint8_t *ciphertext, uint32_t size, const uint8_t *key, uint32_t keySize)
 Encrypts AES using the ECB block mode. More...
 
status_t LTC_AES_DecryptEcb (LTC_Type *base, const uint8_t *ciphertext, uint8_t *plaintext, uint32_t size, const uint8_t *key, uint32_t keySize, ltc_aes_key_t keyType)
 Decrypts AES using ECB block mode. More...
 
status_t LTC_AES_EncryptCbc (LTC_Type *base, const uint8_t *plaintext, uint8_t *ciphertext, uint32_t size, const uint8_t iv[LTC_AES_IV_SIZE], const uint8_t *key, uint32_t keySize)
 Encrypts AES using CBC block mode. More...
 
status_t LTC_AES_DecryptCbc (LTC_Type *base, const uint8_t *ciphertext, uint8_t *plaintext, uint32_t size, const uint8_t iv[LTC_AES_IV_SIZE], const uint8_t *key, uint32_t keySize, ltc_aes_key_t keyType)
 Decrypts AES using CBC block mode. More...
 
status_t LTC_AES_CryptCtr (LTC_Type *base, const uint8_t *input, uint8_t *output, uint32_t size, uint8_t counter[LTC_AES_BLOCK_SIZE], const uint8_t *key, uint32_t keySize, uint8_t counterlast[LTC_AES_BLOCK_SIZE], uint32_t *szLeft)
 Encrypts or decrypts AES using CTR block mode. More...
 
status_t LTC_AES_EncryptTagCcm (LTC_Type *base, const uint8_t *plaintext, uint8_t *ciphertext, uint32_t size, const uint8_t *iv, uint32_t ivSize, const uint8_t *aad, uint32_t aadSize, const uint8_t *key, uint32_t keySize, uint8_t *tag, uint32_t tagSize)
 Encrypts AES and tags using CCM block mode. More...
 
status_t LTC_AES_DecryptTagCcm (LTC_Type *base, const uint8_t *ciphertext, uint8_t *plaintext, uint32_t size, const uint8_t *iv, uint32_t ivSize, const uint8_t *aad, uint32_t aadSize, const uint8_t *key, uint32_t keySize, const uint8_t *tag, uint32_t tagSize)
 Decrypts AES and authenticates using CCM block mode. More...
 

Enumeration Type Documentation

Enumerator
kLTC_EncryptKey 

Input key is an encrypt key.

kLTC_DecryptKey 

Input key is a decrypt key.

Function Documentation

status_t LTC_AES_GenerateDecryptKey ( LTC_Type *  base,
const uint8_t *  encryptKey,
uint8_t *  decryptKey,
uint32_t  keySize 
)

Transforms the AES encrypt key (forward AES) into the decrypt key (inverse AES). The key derived by this function can be used as a direct load decrypt key for AES ECB and CBC decryption operations (keyType argument).

Parameters
baseLTC peripheral base address
encryptKeyInput key for decrypt key transformation
[out]decryptKeyOutput key, the decrypt form of the AES key.
keySizeSize of the input key and output key in bytes. Must be 16, 24, or 32.
Returns
Status from key generation operation
status_t LTC_AES_EncryptEcb ( LTC_Type *  base,
const uint8_t *  plaintext,
uint8_t *  ciphertext,
uint32_t  size,
const uint8_t *  key,
uint32_t  keySize 
)

Encrypts AES using the ECB block mode.

Parameters
baseLTC peripheral base address
plaintextInput plain text to encrypt
[out]ciphertextOutput cipher text
sizeSize of input and output data in bytes. Must be multiple of 16 bytes.
keyInput key to use for encryption
keySizeSize of the input key, in bytes. Must be 16, 24, or 32.
Returns
Status from encrypt operation
status_t LTC_AES_DecryptEcb ( LTC_Type *  base,
const uint8_t *  ciphertext,
uint8_t *  plaintext,
uint32_t  size,
const uint8_t *  key,
uint32_t  keySize,
ltc_aes_key_t  keyType 
)

Decrypts AES using ECB block mode.

Parameters
baseLTC peripheral base address
ciphertextInput cipher text to decrypt
[out]plaintextOutput plain text
sizeSize of input and output data in bytes. Must be multiple of 16 bytes.
keyInput key.
keySizeSize of the input key, in bytes. Must be 16, 24, or 32.
keyTypeInput type of the key (allows to directly load decrypt key for AES ECB decrypt operation.)
Returns
Status from decrypt operation
status_t LTC_AES_EncryptCbc ( LTC_Type *  base,
const uint8_t *  plaintext,
uint8_t *  ciphertext,
uint32_t  size,
const uint8_t  iv[LTC_AES_IV_SIZE],
const uint8_t *  key,
uint32_t  keySize 
)
Parameters
baseLTC peripheral base address
plaintextInput plain text to encrypt
[out]ciphertextOutput cipher text
sizeSize of input and output data in bytes. Must be multiple of 16 bytes.
ivInput initial vector to combine with the first input block.
keyInput key to use for encryption
keySizeSize of the input key, in bytes. Must be 16, 24, or 32.
Returns
Status from encrypt operation
status_t LTC_AES_DecryptCbc ( LTC_Type *  base,
const uint8_t *  ciphertext,
uint8_t *  plaintext,
uint32_t  size,
const uint8_t  iv[LTC_AES_IV_SIZE],
const uint8_t *  key,
uint32_t  keySize,
ltc_aes_key_t  keyType 
)
Parameters
baseLTC peripheral base address
ciphertextInput cipher text to decrypt
[out]plaintextOutput plain text
sizeSize of input and output data in bytes. Must be multiple of 16 bytes.
ivInput initial vector to combine with the first input block.
keyInput key to use for decryption
keySizeSize of the input key, in bytes. Must be 16, 24, or 32.
keyTypeInput type of the key (allows to directly load decrypt key for AES CBC decrypt operation.)
Returns
Status from decrypt operation
status_t LTC_AES_CryptCtr ( LTC_Type *  base,
const uint8_t *  input,
uint8_t *  output,
uint32_t  size,
uint8_t  counter[LTC_AES_BLOCK_SIZE],
const uint8_t *  key,
uint32_t  keySize,
uint8_t  counterlast[LTC_AES_BLOCK_SIZE],
uint32_t *  szLeft 
)

Encrypts or decrypts AES using CTR block mode. AES CTR mode uses only forward AES cipher and same algorithm for encryption and decryption. The only difference between encryption and decryption is that, for encryption, the input argument is plain text and the output argument is cipher text. For decryption, the input argument is cipher text and the output argument is plain text.

Parameters
baseLTC peripheral base address
inputInput data for CTR block mode
[out]outputOutput data for CTR block mode
sizeSize of input and output data in bytes
[in,out]counterInput counter (updates on return)
keyInput key to use for forward AES cipher
keySizeSize of the input key, in bytes. Must be 16, 24, or 32.
[out]counterlastOutput cipher of last counter, for chained CTR calls. NULL can be passed if chained calls are not used.
[out]szLeftOutput number of bytes in left unused in counterlast block. NULL can be passed if chained calls are not used.
Returns
Status from encrypt operation
status_t LTC_AES_EncryptTagCcm ( LTC_Type *  base,
const uint8_t *  plaintext,
uint8_t *  ciphertext,
uint32_t  size,
const uint8_t *  iv,
uint32_t  ivSize,
const uint8_t *  aad,
uint32_t  aadSize,
const uint8_t *  key,
uint32_t  keySize,
uint8_t *  tag,
uint32_t  tagSize 
)

Encrypts AES and optionally tags using CCM block mode.

Parameters
baseLTC peripheral base address
plaintextInput plain text to encrypt
[out]ciphertextOutput cipher text.
sizeSize of input and output data in bytes. Zero means authentication only.
ivNonce
ivSizeLength of the Nonce in bytes. Must be 7, 8, 9, 10, 11, 12, or 13.
aadInput additional authentication data. Can be NULL if aadSize is zero.
aadSizeInput size in bytes of AAD. Zero means data mode only (authentication skipped).
keyInput key to use for encryption
keySizeSize of the input key, in bytes. Must be 16, 24, or 32.
[out]tagGenerated output tag. Set to NULL to skip tag processing.
tagSizeInput size of the tag to generate, in bytes. Must be 4, 6, 8, 10, 12, 14, or 16.
Returns
Status from encrypt operation
status_t LTC_AES_DecryptTagCcm ( LTC_Type *  base,
const uint8_t *  ciphertext,
uint8_t *  plaintext,
uint32_t  size,
const uint8_t *  iv,
uint32_t  ivSize,
const uint8_t *  aad,
uint32_t  aadSize,
const uint8_t *  key,
uint32_t  keySize,
const uint8_t *  tag,
uint32_t  tagSize 
)

Decrypts AES and optionally authenticates using CCM block mode.

Parameters
baseLTC peripheral base address
ciphertextInput cipher text to decrypt
[out]plaintextOutput plain text.
sizeSize of input and output data in bytes. Zero means authentication only.
ivNonce
ivSizeLength of the Nonce in bytes. Must be 7, 8, 9, 10, 11, 12, or 13.
aadInput additional authentication data. Can be NULL if aadSize is zero.
aadSizeInput size in bytes of AAD. Zero means data mode only (authentication skipped).
keyInput key to use for decryption
keySizeSize of the input key, in bytes. Must be 16, 24, or 32.
tagReceived tag. Set to NULL to skip tag processing.
tagSizeInput size of the received tag to compare with the computed tag, in bytes. Must be 4, 6, 8, 10, 12, 14, or 16.
Returns
Status from decrypt operation