32 #define TRACE_LEVEL CRYPTO_TRACE_LEVEL
35 #include "hw_sce_private.h"
36 #include "hw_sce_ra_private.h"
37 #include "hw_sce_aes_private.h"
47 #if (RA8_CRYPTO_CIPHER_SUPPORT == ENABLED && AES_SUPPORT == ENABLED)
62 uint8_t *output,
size_t length, uint32_t command)
83 status = HW_SCE_Aes128EncryptDecryptInitSub(&keyType, &command,
84 context->
ek, &dummy, (
const uint32_t *)
iv);
86 else if(context->
nr == 12)
88 status = HW_SCE_Aes192EncryptDecryptInitSub(&keyType, &command,
89 context->
ek, &dummy, (
const uint32_t *)
iv);
91 else if(context->
nr == 14)
93 status = HW_SCE_Aes256EncryptDecryptInitSub(&keyType, &command,
94 context->
ek, &dummy, (
const uint32_t *)
iv);
98 status = FSP_ERR_CRYPTO_NOT_IMPLEMENTED;
102 if(status == FSP_SUCCESS)
108 if(context->
nr == 10)
110 HW_SCE_Aes128EncryptDecryptUpdateSub((
const uint32_t *) input,
111 (uint32_t *) output, (
length -
n) / 4);
113 else if(context->
nr == 12)
115 HW_SCE_Aes192EncryptDecryptUpdateSub((
const uint32_t *) input,
116 (uint32_t *) output, (
length -
n) / 4);
120 HW_SCE_Aes256EncryptDecryptUpdateSub((
const uint32_t *) input,
121 (uint32_t *) output, (
length -
n) / 4);
132 if(context->
nr == 10)
134 HW_SCE_Aes128EncryptDecryptUpdateSub(
block,
block,
137 else if(context->
nr == 12)
139 HW_SCE_Aes192EncryptDecryptUpdateSub(
block,
block,
144 HW_SCE_Aes256EncryptDecryptUpdateSub(
block,
block,
154 if(status == FSP_SUCCESS)
157 if(context->
nr == 10)
159 status = HW_SCE_Aes128EncryptDecryptFinalSub();
161 else if(context->
nr == 12)
163 status = HW_SCE_Aes192EncryptDecryptFinalSub();
165 else if(context->
nr == 14)
167 status = HW_SCE_Aes256EncryptDecryptFinalSub();
171 status = FSP_ERR_CRYPTO_NOT_IMPLEMENTED;
176 if(status != FSP_SUCCESS)
202 if(context == NULL || key == NULL)
215 status = HW_SCE_GenerateOemKeyIndexPrivate(SCE_OEM_KEY_TYPE_PLAIN,
216 SCE_OEM_CMD_AES128, NULL, NULL, key, context->
ek);
218 else if(keyLen == 24)
224 status = HW_SCE_GenerateOemKeyIndexPrivate(SCE_OEM_KEY_TYPE_PLAIN,
225 SCE_OEM_CMD_AES192, NULL, NULL, key, context->
ek);
227 else if(keyLen == 32)
233 status = HW_SCE_GenerateOemKeyIndexPrivate(SCE_OEM_KEY_TYPE_PLAIN,
234 SCE_OEM_CMD_AES256, NULL, NULL, key, context->
ek);
239 status = FSP_ERR_CRYPTO_NOT_IMPLEMENTED;
261 SCE_AES_IN_DATA_CMD_ECB_ENCRYPTION);
276 SCE_AES_IN_DATA_CMD_ECB_DECRYPTION);
280 #if (ECB_SUPPORT == ENABLED)
293 const uint8_t *
p, uint8_t *
c,
size_t length)
312 SCE_AES_IN_DATA_CMD_ECB_ENCRYPTION);
357 const uint8_t *
c, uint8_t *
p,
size_t length)
376 SCE_AES_IN_DATA_CMD_ECB_DECRYPTION);
410 #if (CBC_SUPPORT == ENABLED)
424 uint8_t *
iv,
const uint8_t *
p, uint8_t *
c,
size_t length)
443 SCE_AES_IN_DATA_CMD_CBC_ENCRYPTION);
508 uint8_t *
iv,
const uint8_t *
c, uint8_t *
p,
size_t length)
532 SCE_AES_IN_DATA_CMD_CBC_DECRYPTION);
588 #if (CTR_SUPPORT == ENABLED)
603 uint8_t *
t,
const uint8_t *
p, uint8_t *
c,
size_t length)
624 while(
length > 0 && !error)
633 SCE_AES_IN_DATA_CMD_CTR_ENCRYPTION_DECRYPTION);
660 for(i = 0; i <
n; i++)
686 #if (GCM_SUPPORT == ENABLED)
700 if(context == NULL || cipherContext == NULL)
732 size_t ivLen,
const uint8_t *
a,
size_t aLen,
const uint8_t *
p,
733 uint8_t *
c,
size_t length, uint8_t *
t,
size_t tLen)
755 if(tLen < 4 || tLen > 16)
777 if(aesContext->
nr == 10)
779 status = HW_SCE_Aes128GcmEncryptInitSub(&keyType, aesContext->
ek, &dummy,
782 else if(aesContext->
nr == 12)
784 status = HW_SCE_Aes192GcmEncryptInitSub(&keyType, aesContext->
ek, &dummy,
787 else if(aesContext->
nr == 14)
789 status = HW_SCE_Aes256GcmEncryptInitSub(&keyType, aesContext->
ek, &dummy,
794 status = FSP_ERR_CRYPTO_NOT_IMPLEMENTED;
798 if(status == FSP_SUCCESS)
810 if(aesContext->
nr == 10)
812 HW_SCE_Aes128GcmEncryptUpdateAADSub((uint32_t *)
a,
n / 4);
814 else if(aesContext->
nr == 12)
816 HW_SCE_Aes192GcmEncryptUpdateAADSub((uint32_t *)
a,
n / 4);
820 HW_SCE_Aes256GcmEncryptUpdateAADSub((uint32_t *)
a,
n / 4);
835 if(aesContext->
nr == 10)
837 HW_SCE_Aes128GcmEncryptUpdateAADSub(
block, 1);
839 else if(aesContext->
nr == 12)
841 HW_SCE_Aes192GcmEncryptUpdateAADSub(
block, 1);
845 HW_SCE_Aes256GcmEncryptUpdateAADSub(
block, 1);
850 if(aesContext->
nr == 10)
852 HW_SCE_Aes128GcmEncryptUpdateTransitionSub();
854 else if(aesContext->
nr == 12)
856 HW_SCE_Aes192GcmEncryptUpdateTransitionSub();
860 HW_SCE_Aes256GcmEncryptUpdateTransitionSub();
873 if(aesContext->
nr == 10)
875 HW_SCE_Aes128GcmEncryptUpdateSub((uint32_t *)
p, (uint32_t *)
c,
878 else if(aesContext->
nr == 12)
880 HW_SCE_Aes192GcmEncryptUpdateSub((uint32_t *)
p, (uint32_t *)
c,
885 HW_SCE_Aes256GcmEncryptUpdateSub((uint32_t *)
p, (uint32_t *)
c,
912 if(aesContext->
nr == 10)
914 status = HW_SCE_Aes128GcmEncryptFinalSub(
block, temp, temp + 2,
917 else if(aesContext->
nr == 12)
919 status = HW_SCE_Aes192GcmEncryptFinalSub(
block, temp, temp + 2,
922 else if(aesContext->
nr == 14)
924 status = HW_SCE_Aes256GcmEncryptFinalSub(
block, temp, temp + 2,
929 status = FSP_ERR_CRYPTO_NOT_IMPLEMENTED;
934 if(status == FSP_SUCCESS)
966 size_t ivLen,
const uint8_t *
a,
size_t aLen,
const uint8_t *
c,
967 uint8_t *
p,
size_t length,
const uint8_t *
t,
size_t tLen)
989 if(tLen < 4 || tLen > 16)
1011 if(aesContext->
nr == 10)
1013 status = HW_SCE_Aes128GcmDecryptInitSub(&keyType, aesContext->
ek, &dummy,
1016 else if(aesContext->
nr == 12)
1018 status = HW_SCE_Aes192GcmDecryptInitSub(&keyType, aesContext->
ek, &dummy,
1021 else if(aesContext->
nr == 14)
1023 status = HW_SCE_Aes256GcmDecryptInitSub(&keyType, aesContext->
ek, &dummy,
1028 status = FSP_ERR_CRYPTO_NOT_IMPLEMENTED;
1032 if(status == FSP_SUCCESS)
1044 if(aesContext->
nr == 10)
1046 HW_SCE_Aes128GcmDecryptUpdateAADSub((uint32_t *)
a,
n / 4);
1048 else if(aesContext->
nr == 12)
1050 HW_SCE_Aes192GcmDecryptUpdateAADSub((uint32_t *)
a,
n / 4);
1054 HW_SCE_Aes256GcmDecryptUpdateAADSub((uint32_t *)
a,
n / 4);
1069 if(aesContext->
nr == 10)
1071 HW_SCE_Aes128GcmDecryptUpdateAADSub(
block, 1);
1073 else if(aesContext->
nr == 12)
1075 HW_SCE_Aes192GcmDecryptUpdateAADSub(
block, 1);
1079 HW_SCE_Aes256GcmDecryptUpdateAADSub(
block, 1);
1084 if(aesContext->
nr == 10)
1086 HW_SCE_Aes128GcmDecryptUpdateTransitionSub();
1088 else if(aesContext->
nr == 12)
1090 HW_SCE_Aes192GcmDecryptUpdateTransitionSub();
1094 HW_SCE_Aes256GcmDecryptUpdateTransitionSub();
1107 if(aesContext->
nr == 10)
1109 HW_SCE_Aes128GcmDecryptUpdateSub((uint32_t *)
c, (uint32_t *)
p,
1112 else if(aesContext->
nr == 12)
1114 HW_SCE_Aes192GcmDecryptUpdateSub((uint32_t *)
c, (uint32_t *)
p,
1119 HW_SCE_Aes256GcmDecryptUpdateSub((uint32_t *)
c, (uint32_t *)
p,
1149 osMemset(authTag, 0,
sizeof(authTag));
1153 if(aesContext->
nr == 10)
1155 status = HW_SCE_Aes128GcmDecryptFinalSub(
block, temp, temp + 2,
1156 authTag, temp + 4,
block);
1158 else if(aesContext->
nr == 12)
1160 status = HW_SCE_Aes192GcmDecryptFinalSub(
block, temp, temp + 2,
1161 authTag, temp + 4,
block);
1163 else if(aesContext->
nr == 14)
1165 status = HW_SCE_Aes256GcmDecryptFinalSub(
block, temp, temp + 2,
1166 authTag, temp + 4,
block);
1170 status = FSP_ERR_CRYPTO_NOT_IMPLEMENTED;
1175 if(status == FSP_SUCCESS)
1189 #if (CCM_SUPPORT == ENABLED)
1208 size_t nLen,
const uint8_t *
a,
size_t aLen,
const uint8_t *
p, uint8_t *
c,
1209 size_t length, uint8_t *
t,
size_t tLen)
1221 uint32_t authTag[4];
1234 if(aLen > (
sizeof(header) - 18))
1248 osMemset(header, 0,
sizeof(header));
1265 osMemcpy(header + headerLen + 2,
a, aLen);
1267 headerLen += 2 + aLen;
1277 if(aesContext->
nr == 10)
1279 status = HW_SCE_Aes128CcmEncryptInitSubGeneral(&keyType, &dataType,
1280 &command, &textLen, aesContext->
ek,
block, (uint32_t *) header,
1281 &
seqNum, (headerLen + 3) / 4);
1283 else if(aesContext->
nr == 12)
1285 status = HW_SCE_Aes192CcmEncryptInitSubGeneral(&keyType, &dataType,
1286 &command, &textLen, aesContext->
ek,
block, (uint32_t *) header,
1287 &
seqNum, (headerLen + 3) / 4);
1289 else if(aesContext->
nr == 14)
1291 status = HW_SCE_Aes256CcmEncryptInitSubGeneral(&keyType, &dataType,
1292 &command, &textLen, aesContext->
ek,
block, (uint32_t *) header,
1293 &
seqNum, (headerLen + 3) / 4);
1297 status = FSP_ERR_CRYPTO_NOT_IMPLEMENTED;
1301 if(status == FSP_SUCCESS)
1310 if(aesContext->
nr == 10)
1312 HW_SCE_Aes128CcmEncryptUpdateSub((uint32_t *)
p, (uint32_t *)
c,
1315 else if(aesContext->
nr == 12)
1317 HW_SCE_Aes192CcmEncryptUpdateSub((uint32_t *)
p, (uint32_t *)
c,
1322 HW_SCE_Aes256CcmEncryptUpdateSub((uint32_t *)
p, (uint32_t *)
c,
1341 if(aesContext->
nr == 10)
1343 status = HW_SCE_Aes128CcmEncryptFinalSubGeneral(
block, &textLen,
1346 else if(aesContext->
nr == 12)
1348 status = HW_SCE_Aes192CcmEncryptFinalSub(
block, &textLen,
block,
1351 else if(aesContext->
nr == 14)
1353 status = HW_SCE_Aes256CcmEncryptFinalSub(
block, &textLen,
block,
1358 status = FSP_ERR_CRYPTO_NOT_IMPLEMENTED;
1363 if(status == FSP_SUCCESS)
1396 size_t nLen,
const uint8_t *
a,
size_t aLen,
const uint8_t *
c, uint8_t *
p,
1397 size_t length,
const uint8_t *
t,
size_t tLen)
1406 uint32_t authTagLen;
1410 uint32_t authTag[4];
1423 if(aLen > (
sizeof(header) - 18))
1438 osMemset(header, 0,
sizeof(header));
1455 osMemcpy(header + headerLen + 2,
a, aLen);
1457 headerLen += 2 + aLen;
1467 if(aesContext->
nr == 10)
1469 status = HW_SCE_Aes128CcmDecryptInitSubGeneral(&keyType, &dataType,
1470 &command, &textLen, &authTagLen, aesContext->
ek,
block,
1471 (uint32_t *) header, &
seqNum, (headerLen + 3) / 4);
1473 else if(aesContext->
nr == 12)
1475 status = HW_SCE_Aes192CcmDecryptInitSubGeneral(&keyType, &dataType,
1476 &command, &textLen, &authTagLen, aesContext->
ek,
block,
1477 (uint32_t *) header, &
seqNum, (headerLen + 3) / 4);
1479 else if(aesContext->
nr == 14)
1481 status = HW_SCE_Aes256CcmDecryptInitSubGeneral(&keyType, &dataType,
1482 &command, &textLen, &authTagLen, aesContext->
ek,
block,
1483 (uint32_t *) header, &
seqNum, (headerLen + 3) / 4);
1487 status = FSP_ERR_CRYPTO_NOT_IMPLEMENTED;
1491 if(status == FSP_SUCCESS)
1500 if(aesContext->
nr == 10)
1502 HW_SCE_Aes128CcmDecryptUpdateSub((uint32_t *)
c, (uint32_t *)
p,
1505 else if(aesContext->
nr == 12)
1507 HW_SCE_Aes192CcmDecryptUpdateSub((uint32_t *)
c, (uint32_t *)
p,
1512 HW_SCE_Aes256CcmDecryptUpdateSub((uint32_t *)
c, (uint32_t *)
p,
1531 osMemset(authTag, 0,
sizeof(authTag));
1535 if(aesContext->
nr == 10)
1537 status = HW_SCE_Aes128CcmDecryptFinalSubGeneral(
block, &textLen,
1538 authTag, &authTagLen,
block);
1540 else if(aesContext->
nr == 12)
1542 status = HW_SCE_Aes192CcmDecryptFinalSub(
block, &textLen,
1543 authTag, &authTagLen,
block);
1545 else if(aesContext->
nr == 14)
1547 status = HW_SCE_Aes256CcmDecryptFinalSub(
block, &textLen,
1548 authTag, &authTagLen,
block);
1552 status = FSP_ERR_CRYPTO_NOT_IMPLEMENTED;
1557 if(status == FSP_SUCCESS)