32 #define TRACE_LEVEL CRYPTO_TRACE_LEVEL
35 #include "fsl_device_registers.h"
46 #if (MIMXRT1160_CRYPTO_CIPHER_SUPPORT == ENABLED)
49 #if defined(__ICCARM__)
52 #pragma data_alignment = 16
56 #pragma data_alignment = 16
60 #pragma data_alignment = 16
61 uint8_t caamInitVector[16];
75 uint8_t caamInitVector[16]
80 #if (DES_SUPPORT == ENABLED)
93 if(context == NULL || key == NULL)
109 #if (ECB_SUPPORT == ENABLED)
122 const uint8_t *
p, uint8_t *
c,
size_t length)
127 status = kStatus_Success;
129 #if (DES_SUPPORT == ENABLED)
143 caam_handle_t caamHandle;
149 caamHandle.jobRing = kCAAM_JobRing0;
155 for(i = 0; i <
length && status == kStatus_Success; i +=
n)
163 status = CAAM_DES_EncryptEcb(CAAM, &caamHandle, caamBufferIn,
164 caamBufferOut,
n, (
const uint8_t *) desContext->
ks);
167 if(status == kStatus_Success)
180 status = kStatus_InvalidArgument;
185 #if (DES3_SUPPORT == ENABLED)
199 caam_handle_t caamHandle;
205 caamHandle.jobRing = kCAAM_JobRing0;
211 for(i = 0; i <
length && status == kStatus_Success; i +=
n)
219 status = CAAM_DES3_EncryptEcb(CAAM, &caamHandle, caamBufferIn,
220 caamBufferOut,
n, (
const uint8_t *) des3Context->
k1.
ks,
221 (
const uint8_t *) des3Context->
k2.
ks,
222 (
const uint8_t *) des3Context->
k3.
ks);
225 if(status == kStatus_Success)
238 status = kStatus_InvalidArgument;
243 #if (AES_SUPPORT == ENABLED)
258 caam_handle_t caamHandle;
264 if(aesContext->
nr == 10)
269 else if(aesContext->
nr == 12)
274 else if(aesContext->
nr == 14)
282 status = kStatus_Fail;
286 if(status == kStatus_Success)
289 caamHandle.jobRing = kCAAM_JobRing0;
295 for(i = 0; i <
length && status == kStatus_Success; i +=
n)
303 status = CAAM_AES_EncryptEcb(CAAM, &caamHandle, caamBufferIn,
304 caamBufferOut,
n, (
const uint8_t *) aesContext->
ek, keySize);
307 if(status == kStatus_Success)
321 status = kStatus_InvalidArgument;
343 status = kStatus_InvalidArgument;
363 const uint8_t *
c, uint8_t *
p,
size_t length)
368 status = kStatus_Success;
370 #if (DES_SUPPORT == ENABLED)
384 caam_handle_t caamHandle;
390 caamHandle.jobRing = kCAAM_JobRing0;
396 for(i = 0; i <
length && status == kStatus_Success; i +=
n)
404 status = CAAM_DES_DecryptEcb(CAAM, &caamHandle, caamBufferIn,
405 caamBufferOut,
n, (
const uint8_t *) desContext->
ks);
408 if(status == kStatus_Success)
421 status = kStatus_InvalidArgument;
426 #if (DES3_SUPPORT == ENABLED)
440 caam_handle_t caamHandle;
446 caamHandle.jobRing = kCAAM_JobRing0;
452 for(i = 0; i <
length && status == kStatus_Success; i +=
n)
460 status = CAAM_DES3_DecryptEcb(CAAM, &caamHandle, caamBufferIn,
461 caamBufferOut,
n, (
const uint8_t *) des3Context->
k1.
ks,
462 (
const uint8_t *) des3Context->
k2.
ks,
463 (
const uint8_t *) des3Context->
k3.
ks);
466 if(status == kStatus_Success)
479 status = kStatus_InvalidArgument;
484 #if (AES_SUPPORT == ENABLED)
499 caam_handle_t caamHandle;
505 if(aesContext->
nr == 10)
510 else if(aesContext->
nr == 12)
515 else if(aesContext->
nr == 14)
523 status = kStatus_Fail;
527 if(status == kStatus_Success)
530 caamHandle.jobRing = kCAAM_JobRing0;
536 for(i = 0; i <
length && status == kStatus_Success; i +=
n)
544 status = CAAM_AES_DecryptEcb(CAAM, &caamHandle, caamBufferIn,
545 caamBufferOut,
n, (
const uint8_t *) aesContext->
ek, keySize);
548 if(status == kStatus_Success)
562 status = kStatus_InvalidArgument;
584 status = kStatus_InvalidArgument;
593 #if (CBC_SUPPORT == ENABLED)
607 uint8_t *
iv,
const uint8_t *
p, uint8_t *
c,
size_t length)
612 status = kStatus_Success;
614 #if (DES_SUPPORT == ENABLED)
628 caam_handle_t caamHandle;
634 caamHandle.jobRing = kCAAM_JobRing0;
640 for(i = 0; i <
length && status == kStatus_Success; i +=
n)
648 status = CAAM_DES_EncryptCbc(CAAM, &caamHandle, caamBufferIn,
649 caamBufferOut,
n,
iv, (
const uint8_t *) desContext->
ks);
652 if(status == kStatus_Success)
667 status = kStatus_InvalidArgument;
672 #if (DES3_SUPPORT == ENABLED)
686 caam_handle_t caamHandle;
692 caamHandle.jobRing = kCAAM_JobRing0;
698 for(i = 0; i <
length && status == kStatus_Success; i +=
n)
706 status = CAAM_DES3_EncryptCbc(CAAM, &caamHandle, caamBufferIn,
707 caamBufferOut,
n,
iv, (
const uint8_t *) des3Context->
k1.
ks,
708 (
const uint8_t *) des3Context->
k2.
ks,
709 (
const uint8_t *) des3Context->
k3.
ks);
712 if(status == kStatus_Success)
727 status = kStatus_InvalidArgument;
732 #if (AES_SUPPORT == ENABLED)
747 caam_handle_t caamHandle;
753 if(aesContext->
nr == 10)
758 else if(aesContext->
nr == 12)
763 else if(aesContext->
nr == 14)
771 status = kStatus_Fail;
775 if(status == kStatus_Success)
778 caamHandle.jobRing = kCAAM_JobRing0;
784 for(i = 0; i <
length && status == kStatus_Success; i +=
n)
792 status = CAAM_AES_EncryptCbc(CAAM, &caamHandle, caamBufferIn,
793 caamBufferOut,
n,
iv, (
const uint8_t *) aesContext->
ek, keySize);
796 if(status == kStatus_Success)
812 status = kStatus_InvalidArgument;
846 status = kStatus_InvalidArgument;
867 uint8_t *
iv,
const uint8_t *
c, uint8_t *
p,
size_t length)
872 status = kStatus_Success;
874 #if (DES_SUPPORT == ENABLED)
888 caam_handle_t caamHandle;
895 caamHandle.jobRing = kCAAM_JobRing0;
901 for(i = 0; i <
length && status == kStatus_Success; i +=
n)
911 status = CAAM_DES_DecryptCbc(CAAM, &caamHandle, caamBufferIn,
912 caamBufferOut,
n,
iv, (
const uint8_t *) desContext->
ks);
915 if(status == kStatus_Success)
930 status = kStatus_InvalidArgument;
935 #if (DES3_SUPPORT == ENABLED)
949 caam_handle_t caamHandle;
956 caamHandle.jobRing = kCAAM_JobRing0;
962 for(i = 0; i <
length && status == kStatus_Success; i +=
n)
972 status = CAAM_DES3_DecryptCbc(CAAM, &caamHandle, caamBufferIn,
973 caamBufferOut,
n,
iv, (
const uint8_t *) des3Context->
k1.
ks,
974 (
const uint8_t *) des3Context->
k2.
ks,
975 (
const uint8_t *) des3Context->
k3.
ks);
978 if(status == kStatus_Success)
993 status = kStatus_InvalidArgument;
998 #if (AES_SUPPORT == ENABLED)
1013 caam_handle_t caamHandle;
1020 if(aesContext->
nr == 10)
1025 else if(aesContext->
nr == 12)
1030 else if(aesContext->
nr == 14)
1038 status = kStatus_Fail;
1042 if(status == kStatus_Success)
1045 caamHandle.jobRing = kCAAM_JobRing0;
1051 for(i = 0; i <
length && status == kStatus_Success; i +=
n)
1061 status = CAAM_AES_DecryptCbc(CAAM, &caamHandle, caamBufferIn,
1062 caamBufferOut,
n,
iv, (
const uint8_t *) aesContext->
ek, keySize);
1065 if(status == kStatus_Success)
1081 status = kStatus_InvalidArgument;
1118 status = kStatus_InvalidArgument;
1127 #if (CTR_SUPPORT == ENABLED)
1142 uint8_t *
t,
const uint8_t *
p, uint8_t *
c,
size_t length)
1147 status = kStatus_Success;
1149 #if (AES_SUPPORT == ENABLED)
1167 caam_handle_t caamHandle;
1173 if(aesContext->
nr == 10)
1178 else if(aesContext->
nr == 12)
1183 else if(aesContext->
nr == 14)
1191 status = kStatus_Fail;
1195 if(status == kStatus_Success)
1198 caamHandle.jobRing = kCAAM_JobRing0;
1204 for(i = 0; i <
length && status == kStatus_Success; i +=
n)
1214 status = CAAM_AES_CryptCtr(CAAM, &caamHandle,
1215 caamBufferIn, caamBufferOut,
n, caamInitVector,
1216 (
const uint8_t *) aesContext->
ek, keySize, NULL, NULL);
1219 if(status == kStatus_Success)
1235 status = kStatus_InvalidArgument;
1241 status = kStatus_InvalidArgument;
1270 for(i = 0; i <
n; i++)
1276 for(temp = 1, i = 1; i <=
m; i++)
1293 status = kStatus_InvalidArgument;
1302 #if (GCM_SUPPORT == ENABLED && AES_SUPPORT == ENABLED)
1313 void *cipherContext)
1316 if(context == NULL || cipherContext == NULL)
1348 size_t ivLen,
const uint8_t *
a,
size_t aLen,
const uint8_t *
p,
1349 uint8_t *
c,
size_t length, uint8_t *
t,
size_t tLen)
1353 caam_handle_t caamHandle;
1361 if(tLen < 4 || tLen > 16)
1365 status = kStatus_Success;
1371 if(aesContext->
nr == 10)
1376 else if(aesContext->
nr == 12)
1381 else if(aesContext->
nr == 14)
1389 status = kStatus_Fail;
1393 if(status == kStatus_Success)
1396 caamHandle.jobRing = kCAAM_JobRing0;
1402 status = CAAM_AES_EncryptTagGcm(CAAM, &caamHandle,
p,
c,
length,
iv,
1403 ivLen,
a, aLen, (
const uint8_t *) aesContext->
ek, keySize,
t, tLen);
1430 size_t ivLen,
const uint8_t *
a,
size_t aLen,
const uint8_t *
c,
1431 uint8_t *
p,
size_t length,
const uint8_t *
t,
size_t tLen)
1435 caam_handle_t caamHandle;
1443 if(tLen < 4 || tLen > 16)
1447 status = kStatus_Success;
1453 if(aesContext->
nr == 10)
1458 else if(aesContext->
nr == 12)
1463 else if(aesContext->
nr == 14)
1471 status = kStatus_Fail;
1475 if(status == kStatus_Success)
1478 caamHandle.jobRing = kCAAM_JobRing0;
1484 status = CAAM_AES_DecryptTagGcm(CAAM, &caamHandle,
c,
p,
length,
iv,
1485 ivLen,
a, aLen, (
const uint8_t *) aesContext->
ek, keySize,
t, tLen);
Collection of AEAD algorithms.
Block cipher modes of operation.
General definitions for cryptographic algorithms.
@ ERROR_INVALID_KEY_LENGTH
@ ERROR_FAILURE
Generic error code.
@ ERROR_INVALID_PARAMETER
Invalid parameter.
OsMutex mimxrt1160CryptoMutex
i.MX RT1160 hardware cryptographic accelerator (CAAM)
#define MIMXRT1160_CAAM_BUFFER_SIZE
error_t gcmEncrypt(GcmContext *context, const uint8_t *iv, size_t ivLen, const uint8_t *a, size_t aLen, const uint8_t *p, uint8_t *c, size_t length, uint8_t *t, size_t tLen)
Authenticated encryption using GCM.
error_t ctrEncrypt(const CipherAlgo *cipher, void *context, uint_t m, uint8_t *t, const uint8_t *p, uint8_t *c, size_t length)
CTR encryption.
error_t cbcEncrypt(const CipherAlgo *cipher, void *context, uint8_t *iv, const uint8_t *p, uint8_t *c, size_t length)
CBC encryption.
uint8_t caamBufferIn[MIMXRT1160_CAAM_BUFFER_SIZE] __attribute__((aligned(16)))
error_t cbcDecrypt(const CipherAlgo *cipher, void *context, uint8_t *iv, const uint8_t *c, uint8_t *p, size_t length)
CBC decryption.
error_t gcmDecrypt(GcmContext *context, const uint8_t *iv, size_t ivLen, const uint8_t *a, size_t aLen, const uint8_t *c, uint8_t *p, size_t length, const uint8_t *t, size_t tLen)
Authenticated decryption using GCM.
error_t ecbEncrypt(const CipherAlgo *cipher, void *context, const uint8_t *p, uint8_t *c, size_t length)
ECB encryption.
error_t gcmInit(GcmContext *context, const CipherAlgo *cipherAlgo, void *cipherContext)
Initialize GCM context.
error_t desInit(DesContext *context, const uint8_t *key, size_t keyLen)
Initialize a DES context using the supplied key.
error_t ecbDecrypt(const CipherAlgo *cipher, void *context, const uint8_t *c, uint8_t *p, size_t length)
ECB decryption.
i.MX RT1160 cipher hardware accelerator
#define osMemcpy(dest, src, length)
void osAcquireMutex(OsMutex *mutex)
Acquire ownership of the specified mutex object.
void osReleaseMutex(OsMutex *mutex)
Release ownership of the specified mutex object.
Common interface for encryption algorithms.
CipherAlgoEncryptBlock encryptBlock
CipherAlgoDecryptBlock decryptBlock
Triple DES algorithm context.
const CipherAlgo * cipherAlgo
Cipher algorithm.
void * cipherContext
Cipher algorithm context.