32 #define TRACE_LEVEL CRYPTO_TRACE_LEVEL
35 #include "fsl_device_registers.h"
36 #include "ele_crypto.h"
46 #if (MIMXRT1180_CRYPTO_CIPHER_SUPPORT == ENABLED && AES_SUPPORT == ENABLED)
55 #if (ECB_SUPPORT == ENABLED)
68 const uint8_t *
p, uint8_t *
c,
size_t length)
71 ele_generic_cipher_t genericCipher;
74 status = kStatus_Success;
95 if(aesContext->
nr == 10)
100 else if(aesContext->
nr == 12)
105 else if(aesContext->
nr == 14)
113 status = kStatus_Fail;
117 if(status == kStatus_Success)
123 for(i = 0; i <
length && status == kStatus_Success; i +=
n)
131 genericCipher.data = (uint32_t) eleBufferIn;
132 genericCipher.output = (uint32_t) eleBufferOut;
133 genericCipher.size =
n;
134 genericCipher.key = (uint32_t) aesContext->
ek;
135 genericCipher.key_size = keySize;
136 genericCipher.iv = NULL;
137 genericCipher.iv_size = 0;
138 genericCipher.algo = kAES_ECB;
139 genericCipher.mode = kEncrypt;
142 status = ELE_GenericCipher(MU_APPS_S3MUA, &genericCipher);
145 if(status == kStatus_Success)
159 status = kStatus_InvalidArgument;
180 status = kStatus_InvalidArgument;
200 const uint8_t *
c, uint8_t *
p,
size_t length)
203 ele_generic_cipher_t genericCipher;
206 status = kStatus_Success;
227 if(aesContext->
nr == 10)
232 else if(aesContext->
nr == 12)
237 else if(aesContext->
nr == 14)
245 status = kStatus_Fail;
249 if(status == kStatus_Success)
255 for(i = 0; i <
length && status == kStatus_Success; i +=
n)
263 genericCipher.data = (uint32_t) eleBufferIn;
264 genericCipher.output = (uint32_t) eleBufferOut;
265 genericCipher.size =
n;
266 genericCipher.key = (uint32_t) aesContext->
ek;
267 genericCipher.key_size = keySize;
268 genericCipher.iv = NULL;
269 genericCipher.iv_size = 0;
270 genericCipher.algo = kAES_ECB;
271 genericCipher.mode = kDecrypt;
274 status = ELE_GenericCipher(MU_APPS_S3MUA, &genericCipher);
277 if(status == kStatus_Success)
291 status = kStatus_InvalidArgument;
312 status = kStatus_InvalidArgument;
321 #if (CBC_SUPPORT == ENABLED)
335 uint8_t *
iv,
const uint8_t *
p, uint8_t *
c,
size_t length)
338 ele_generic_cipher_t genericCipher;
341 status = kStatus_Success;
362 if(aesContext->
nr == 10)
367 else if(aesContext->
nr == 12)
372 else if(aesContext->
nr == 14)
380 status = kStatus_Fail;
384 if(status == kStatus_Success)
390 for(i = 0; i <
length && status == kStatus_Success; i +=
n)
398 genericCipher.data = (uint32_t) eleBufferIn;
399 genericCipher.output = (uint32_t) eleBufferOut;
400 genericCipher.size =
n;
401 genericCipher.key = (uint32_t) aesContext->
ek;
402 genericCipher.key_size = keySize;
403 genericCipher.iv = (uint32_t)
iv;
405 genericCipher.algo = kAES_CBC;
406 genericCipher.mode = kEncrypt;
409 status = ELE_GenericCipher(MU_APPS_S3MUA, &genericCipher);
412 if(status == kStatus_Success)
428 status = kStatus_InvalidArgument;
461 status = kStatus_InvalidArgument;
482 uint8_t *
iv,
const uint8_t *
c, uint8_t *
p,
size_t length)
485 ele_generic_cipher_t genericCipher;
488 status = kStatus_Success;
510 if(aesContext->
nr == 10)
515 else if(aesContext->
nr == 12)
520 else if(aesContext->
nr == 14)
528 status = kStatus_Fail;
532 if(status == kStatus_Success)
538 for(i = 0; i <
length && status == kStatus_Success; i +=
n)
548 genericCipher.data = (uint32_t) eleBufferIn;
549 genericCipher.output = (uint32_t) eleBufferOut;
550 genericCipher.size =
n;
551 genericCipher.key = (uint32_t) aesContext->
ek;
552 genericCipher.key_size = keySize;
553 genericCipher.iv = (uint32_t)
iv;
555 genericCipher.algo = kAES_CBC;
556 genericCipher.mode = kDecrypt;
559 status = ELE_GenericCipher(MU_APPS_S3MUA, &genericCipher);
562 if(status == kStatus_Success)
578 status = kStatus_InvalidArgument;
614 status = kStatus_InvalidArgument;
623 #if (CTR_SUPPORT == ENABLED)
638 uint8_t *
t,
const uint8_t *
p, uint8_t *
c,
size_t length)
641 ele_generic_cipher_t genericCipher;
644 status = kStatus_Success;
666 if(aesContext->
nr == 10)
671 else if(aesContext->
nr == 12)
676 else if(aesContext->
nr == 14)
684 status = kStatus_Fail;
688 if(status == kStatus_Success)
694 for(i = 0; i <
length && status == kStatus_Success; i +=
n)
709 genericCipher.data = (uint32_t) eleBufferIn;
710 genericCipher.output = (uint32_t) eleBufferOut;
712 genericCipher.key = (uint32_t) aesContext->
ek;
713 genericCipher.key_size = keySize;
714 genericCipher.iv = (uint32_t) eleInitVector;
716 genericCipher.algo = kAES_CTR;
717 genericCipher.mode = kEncrypt;
720 status = ELE_GenericCipher(MU_APPS_S3MUA, &genericCipher);
723 if(status == kStatus_Success)
753 for(i = 0; i <
n; i++)
771 status = kStatus_InvalidArgument;
779 #if (GCM_SUPPORT == ENABLED)
793 if(context == NULL || cipherContext == NULL)
825 size_t ivLen,
const uint8_t *
a,
size_t aLen,
const uint8_t *
p,
826 uint8_t *
c,
size_t length, uint8_t *
t,
size_t tLen)
831 ele_generic_aead_t genericAead;
838 if(tLen < 4 || tLen > 16)
842 status = kStatus_Success;
848 if(aesContext->
nr == 10)
853 else if(aesContext->
nr == 12)
858 else if(aesContext->
nr == 14)
866 status = kStatus_Fail;
870 if(status == kStatus_Success)
876 genericAead.data = (uint32_t)
p;
877 genericAead.output = (uint32_t)
c;
878 genericAead.size =
length;
879 genericAead.key = (uint32_t) aesContext->
ek;
880 genericAead.key_size = keySize;
881 genericAead.iv = (uint32_t)
iv;
882 genericAead.iv_size = ivLen;
883 genericAead.aad = (uint32_t)
a;
884 genericAead.aad_size = aLen;
885 genericAead.tag = (uint32_t)
t;
886 genericAead.tag_size = tLen;
887 genericAead.algo = kAES_GCM;
888 genericAead.mode = kEncrypt;
891 status = ELE_GenericAead(MU_APPS_S3MUA, &genericAead);
918 size_t ivLen,
const uint8_t *
a,
size_t aLen,
const uint8_t *
c,
919 uint8_t *
p,
size_t length,
const uint8_t *
t,
size_t tLen)
924 ele_generic_aead_t genericAead;
931 if(tLen < 4 || tLen > 16)
935 status = kStatus_Success;
941 if(aesContext->
nr == 10)
946 else if(aesContext->
nr == 12)
951 else if(aesContext->
nr == 14)
959 status = kStatus_Fail;
963 if(status == kStatus_Success)
969 genericAead.data = (uint32_t)
c;
970 genericAead.output = (uint32_t)
p;
971 genericAead.size =
length;
972 genericAead.key = (uint32_t) aesContext->
ek;
973 genericAead.key_size = keySize;
974 genericAead.iv = (uint32_t)
iv;
975 genericAead.iv_size = ivLen;
976 genericAead.aad = (uint32_t)
a;
977 genericAead.aad_size = aLen;
978 genericAead.tag = (uint32_t)
t;
979 genericAead.tag_size = tLen;
980 genericAead.algo = kAES_GCM;
981 genericAead.mode = kDecrypt;
984 status = ELE_GenericAead(MU_APPS_S3MUA, &genericAead);
995 #if (CCM_SUPPORT == ENABLED)
1014 size_t nLen,
const uint8_t *
a,
size_t aLen,
const uint8_t *
p, uint8_t *
c,
1015 size_t length, uint8_t *
t,
size_t tLen)
1020 ele_generic_aead_t genericAead;
1027 if(tLen < 4 || tLen > 16)
1031 status = kStatus_Success;
1037 if(aesContext->
nr == 10)
1042 else if(aesContext->
nr == 12)
1047 else if(aesContext->
nr == 14)
1055 status = kStatus_Fail;
1059 if(status == kStatus_Success)
1065 genericAead.data = (uint32_t)
p;
1066 genericAead.output = (uint32_t)
c;
1067 genericAead.size =
length;
1068 genericAead.key = (uint32_t) aesContext->
ek;
1069 genericAead.key_size = keySize;
1070 genericAead.iv = (uint32_t)
n;
1071 genericAead.iv_size = nLen;
1072 genericAead.aad = (uint32_t)
a;
1073 genericAead.aad_size = aLen;
1074 genericAead.tag = (uint32_t)
t;
1075 genericAead.tag_size = tLen;
1076 genericAead.algo = kAES_CCM;
1077 genericAead.mode = kEncrypt;
1080 status = ELE_GenericAead(MU_APPS_S3MUA, &genericAead);
1108 size_t nLen,
const uint8_t *
a,
size_t aLen,
const uint8_t *
c, uint8_t *
p,
1109 size_t length,
const uint8_t *
t,
size_t tLen)
1114 ele_generic_aead_t genericAead;
1121 if(tLen < 4 || tLen > 16)
1125 status = kStatus_Success;
1131 if(aesContext->
nr == 10)
1136 else if(aesContext->
nr == 12)
1141 else if(aesContext->
nr == 14)
1149 status = kStatus_Fail;
1153 if(status == kStatus_Success)
1159 genericAead.data = (uint32_t)
c;
1160 genericAead.output = (uint32_t)
p;
1161 genericAead.size =
length;
1162 genericAead.key = (uint32_t) aesContext->
ek;
1163 genericAead.key_size = keySize;
1164 genericAead.iv = (uint32_t)
n;
1165 genericAead.iv_size = nLen;
1166 genericAead.aad = (uint32_t)
a;
1167 genericAead.aad_size = aLen;
1168 genericAead.tag = (uint32_t)
t;
1169 genericAead.tag_size = tLen;
1170 genericAead.algo = kAES_CCM;
1171 genericAead.mode = kDecrypt;
1174 status = ELE_GenericAead(MU_APPS_S3MUA, &genericAead);