Go to the documentation of this file.
37 #define TRACE_LEVEL CRYPTO_TRACE_LEVEL
45 #if (KBKDF_SUPPORT == ENABLED)
62 size_t kiLen,
const uint8_t *fixedData,
size_t fixedDataLen, uint8_t *ko,
66 #if (HMAC_SUPPORT == ENABLED)
71 #if (CRYPTO_STATIC_MEM_SUPPORT == DISABLED)
78 if(hashAlgo == NULL || ki == NULL || ko == NULL)
82 if(fixedData == NULL && fixedDataLen != 0)
86 if(
r != 8 &&
r != 16 &&
r != 24 &&
r != 32)
93 if(r < 32 && n >= (1U <<
r))
99 #if (CRYPTO_STATIC_MEM_SUPPORT == DISABLED)
103 if(hmacContext == NULL)
108 for(i = 1; koLen > 0; i++)
117 hmacInit(hmacContext, hashAlgo, ki, kiLen);
119 hmacUpdate(hmacContext, fixedData, fixedDataLen);
130 #if (CRYPTO_STATIC_MEM_SUPPORT == DISABLED)
158 const uint8_t *ki,
size_t kiLen,
const uint8_t *fixedData,
159 size_t fixedDataLen, uint8_t *ko,
size_t koLen)
161 #if (CMAC_SUPPORT == ENABLED)
166 #if (CRYPTO_STATIC_MEM_SUPPORT == DISABLED)
173 if(cipherAlgo == NULL || ki == NULL || ko == NULL)
177 if(fixedData == NULL && fixedDataLen != 0)
181 if(
r != 8 &&
r != 16 &&
r != 24 &&
r != 32)
188 if(r < 32 && n >= (1U <<
r))
194 #if (CRYPTO_STATIC_MEM_SUPPORT == DISABLED)
198 if(cmacContext == NULL)
206 for(i = 1; koLen > 0 && !error; i++)
212 error =
cmacInit(cmacContext, cipherAlgo, ki, kiLen);
222 cmacUpdate(cmacContext, fixedData, fixedDataLen);
233 #if (CRYPTO_STATIC_MEM_SUPPORT == DISABLED)
263 size_t kiLen,
const uint8_t *
iv,
size_t ivLen,
const uint8_t *fixedData,
264 size_t fixedDataLen, uint8_t *ko,
size_t koLen)
266 #if (HMAC_SUPPORT == ENABLED)
273 #if (CRYPTO_STATIC_MEM_SUPPORT == DISABLED)
280 if(hashAlgo == NULL || ki == NULL || ko == NULL)
284 if(
iv == NULL && ivLen != 0)
288 if(fixedData == NULL && fixedDataLen != 0)
292 if(
r != 0 &&
r != 8 &&
r != 16 &&
r != 24 &&
r != 32)
298 #if (CRYPTO_STATIC_MEM_SUPPORT == DISABLED)
302 if(hmacContext == NULL)
311 for(i = 1; koLen > 0; i++)
320 hmacInit(hmacContext, hashAlgo, ki, kiLen);
323 hmacUpdate(hmacContext, fixedData, fixedDataLen);
338 #if (CRYPTO_STATIC_MEM_SUPPORT == DISABLED)
368 const uint8_t *ki,
size_t kiLen,
const uint8_t *
iv,
size_t ivLen,
369 const uint8_t *fixedData,
size_t fixedDataLen, uint8_t *ko,
size_t koLen)
371 #if (CMAC_SUPPORT == ENABLED)
378 #if (CRYPTO_STATIC_MEM_SUPPORT == DISABLED)
385 if(cipherAlgo == NULL || ki == NULL || ko == NULL)
389 if(
iv == NULL && ivLen != 0)
393 if(fixedData == NULL && fixedDataLen != 0)
397 if(
r != 0 &&
r != 8 &&
r != 16 &&
r != 24 &&
r != 32)
403 #if (CRYPTO_STATIC_MEM_SUPPORT == DISABLED)
407 if(cmacContext == NULL)
419 for(i = 1; koLen > 0 && !error; i++)
425 error =
cmacInit(cmacContext, cipherAlgo, ki, kiLen);
436 cmacUpdate(cmacContext, fixedData, fixedDataLen);
451 #if (CRYPTO_STATIC_MEM_SUPPORT == DISABLED)
479 const uint8_t *ki,
size_t kiLen,
const uint8_t *fixedData,
480 size_t fixedDataLen, uint8_t *ko,
size_t koLen)
483 #if (HMAC_SUPPORT == ENABLED)
491 #if (CRYPTO_STATIC_MEM_SUPPORT == DISABLED)
498 if(hashAlgo == NULL || ki == NULL || ko == NULL)
502 if(fixedData == NULL && fixedDataLen != 0)
506 if(
r != 0 &&
r != 8 &&
r != 16 &&
r != 24 &&
r != 32)
512 #if (CRYPTO_STATIC_MEM_SUPPORT == DISABLED)
516 if(hmacContext == NULL)
522 prevLen = fixedDataLen;
525 for(i = 1; koLen > 0; i++)
534 hmacInit(hmacContext, hashAlgo, ki, kiLen);
539 hmacInit(hmacContext, hashAlgo, ki, kiLen);
542 hmacUpdate(hmacContext, fixedData, fixedDataLen);
557 #if (CRYPTO_STATIC_MEM_SUPPORT == DISABLED)
585 const uint8_t *ki,
size_t kiLen,
const uint8_t *fixedData,
586 size_t fixedDataLen, uint8_t *ko,
size_t koLen)
588 #if (CMAC_SUPPORT == ENABLED)
596 #if (CRYPTO_STATIC_MEM_SUPPORT == DISABLED)
603 if(cipherAlgo == NULL || ki == NULL || ko == NULL)
607 if(fixedData == NULL && fixedDataLen != 0)
611 if(
r != 0 &&
r != 8 &&
r != 16 &&
r != 24 &&
r != 32)
617 #if (CRYPTO_STATIC_MEM_SUPPORT == DISABLED)
621 if(cmacContext == NULL)
630 prevLen = fixedDataLen;
633 for(i = 1; koLen > 0 && !error; i++)
639 error =
cmacInit(cmacContext, cipherAlgo, ki, kiLen);
655 error =
cmacInit(cmacContext, cipherAlgo, ki, kiLen);
667 cmacUpdate(cmacContext, fixedData, fixedDataLen);
682 #if (CRYPTO_STATIC_MEM_SUPPORT == DISABLED)
712 const uint8_t *context,
size_t contextLen,
const char_t *label,
713 size_t labelLen, uint8_t *ko,
size_t koLen)
715 #if (KMAC_SUPPORT == ENABLED)
717 return kmacCompute(strength, ki, kiLen, context, contextLen, label, labelLen,
error_t kbkdfKmac(uint_t strength, const uint8_t *ki, size_t kiLen, const uint8_t *context, size_t contextLen, const char_t *label, size_t labelLen, uint8_t *ko, size_t koLen)
KBKDF key derivation function (using KMAC)
error_t kbkdfCounterHmac(const HashAlgo *hashAlgo, uint_t r, const uint8_t *ki, size_t kiLen, const uint8_t *fixedData, size_t fixedDataLen, uint8_t *ko, size_t koLen)
KBKDF key derivation function (counter mode with HMAC)
error_t kmacCompute(uint_t strength, const void *key, size_t keyLen, const void *data, size_t dataLen, const char_t *custom, size_t customLen, uint8_t *mac, size_t macLen)
Compute KMAC message authentication code.
#define MAX_CIPHER_BLOCK_SIZE
#define MAX_HASH_DIGEST_SIZE
@ ERROR_INVALID_PARAMETER
Invalid parameter.
error_t kbkdfDoublePipelineCmac(const CipherAlgo *cipherAlgo, uint_t r, const uint8_t *ki, size_t kiLen, const uint8_t *fixedData, size_t fixedDataLen, uint8_t *ko, size_t koLen)
KBKDF key derivation function (double-pipeline mode with CMAC)
#define osMemcpy(dest, src, length)
General definitions for cryptographic algorithms.
SP 800-108 key derivation function.
error_t kbkdfFeedbackCmac(const CipherAlgo *cipherAlgo, uint_t r, const uint8_t *ki, size_t kiLen, const uint8_t *iv, size_t ivLen, const uint8_t *fixedData, size_t fixedDataLen, uint8_t *ko, size_t koLen)
KBKDF key derivation function (feedback mode with CMAC)
__weak_func void hmacUpdate(HmacContext *context, const void *data, size_t length)
Update the HMAC context with a portion of the message being hashed.
__weak_func void hmacFinal(HmacContext *context, uint8_t *digest)
Finish the HMAC calculation.
Common interface for encryption algorithms.
error_t cmacInit(CmacContext *context, const CipherAlgo *cipher, const void *key, size_t keyLen)
Initialize CMAC calculation.
#define cryptoAllocMem(size)
void cmacUpdate(CmacContext *context, const void *data, size_t dataLen)
Update the CMAC context with a portion of the message being hashed.
Collection of MAC algorithms.
Common interface for hash algorithms.
error_t kbkdfCounterCmac(const CipherAlgo *cipherAlgo, uint_t r, const uint8_t *ki, size_t kiLen, const uint8_t *fixedData, size_t fixedDataLen, uint8_t *ko, size_t koLen)
KBKDF key derivation function (counter mode with CMAC)
__weak_func error_t hmacInit(HmacContext *context, const HashAlgo *hash, const void *key, size_t keyLen)
Initialize HMAC calculation.
error_t kbkdfFeedbackHmac(const HashAlgo *hashAlgo, uint_t r, const uint8_t *ki, size_t kiLen, const uint8_t *iv, size_t ivLen, const uint8_t *fixedData, size_t fixedDataLen, uint8_t *ko, size_t koLen)
KBKDF key derivation function (feedback mode with HMAC)
error_t cmacFinal(CmacContext *context, uint8_t *mac, size_t macLen)
Finish the CMAC calculation.
error_t kbkdfDoublePipelineHmac(const HashAlgo *hashAlgo, uint_t r, const uint8_t *ki, size_t kiLen, const uint8_t *fixedData, size_t fixedDataLen, uint8_t *ko, size_t koLen)
KBKDF key derivation function (double-pipeline mode with HMAC)