32 #define TRACE_LEVEL CRYPTO_TRACE_LEVEL
35 #include "hw_sce_private.h"
36 #include "hw_sce_tdes_private.h"
37 #include "hw_sce_aes_private.h"
47 #if (S7G2_CRYPTO_CIPHER_SUPPORT == ENABLED)
48 #if (DES3_SUPPORT == ENABLED)
62 if(context == NULL || key == NULL)
127 (
const uint32_t *) input, (uint32_t *) output);
130 if(status != SSP_SUCCESS)
156 (
const uint32_t *) input, (uint32_t *) output);
159 if(status != SSP_SUCCESS)
169 #if (AES_SUPPORT == ENABLED)
184 if(context == NULL || key == NULL)
188 status = SSP_SUCCESS;
198 else if(keyLen == 24)
205 else if(keyLen == 32)
215 status = SSP_ERR_CRYPTO_NOT_IMPLEMENTED;
238 if(context->
nr == 10)
242 (
const uint32_t *) input, (uint32_t *) output);
244 else if(context->
nr == 12)
248 (
const uint32_t *) input, (uint32_t *) output);
250 else if(context->
nr == 14)
254 (
const uint32_t *) input, (uint32_t *) output);
259 status = SSP_ERR_CRYPTO_NOT_IMPLEMENTED;
263 if(status != SSP_SUCCESS)
288 if(context->
nr == 10)
292 (
const uint32_t *) input, (uint32_t *) output);
294 else if(context->
nr == 12)
298 (
const uint32_t *) input, (uint32_t *) output);
300 else if(context->
nr == 14)
304 (
const uint32_t *) input, (uint32_t *) output);
309 status = SSP_ERR_CRYPTO_NOT_IMPLEMENTED;
313 if(status != SSP_SUCCESS)
323 #if (ECB_SUPPORT == ENABLED)
336 const uint8_t *
p, uint8_t *
c,
size_t length)
341 status = SSP_SUCCESS;
343 #if (DES3_SUPPORT == ENABLED)
363 status = HW_SCE_TDES_192EcbEncrypt(des3Context->
k1.
ks,
length / 4,
364 (
const uint32_t *)
p, (uint32_t *)
c);
372 status = SSP_ERR_CRYPTO_INVALID_SIZE;
377 #if (AES_SUPPORT == ENABLED)
397 if(aesContext->
nr == 10)
400 status = HW_SCE_AES_128EcbEncrypt(aesContext->
ek,
length / 4,
401 (
const uint32_t *)
p, (uint32_t *)
c);
403 else if(aesContext->
nr == 12)
406 status = HW_SCE_AES_192EcbEncrypt(aesContext->
ek,
length / 4,
407 (
const uint32_t *)
p, (uint32_t *)
c);
409 else if(aesContext->
nr == 14)
412 status = HW_SCE_AES_256EcbEncrypt(aesContext->
ek,
length / 4,
413 (
const uint32_t *)
p, (uint32_t *)
c);
418 status = SSP_ERR_CRYPTO_NOT_IMPLEMENTED;
427 status = SSP_ERR_CRYPTO_INVALID_SIZE;
449 status = SSP_ERR_CRYPTO_INVALID_SIZE;
469 const uint8_t *
c, uint8_t *
p,
size_t length)
474 status = SSP_SUCCESS;
476 #if (DES3_SUPPORT == ENABLED)
496 status = HW_SCE_TDES_192EcbDecrypt(des3Context->
k1.
ks,
length / 4,
497 (
const uint32_t *)
p, (uint32_t *)
c);
505 status = SSP_ERR_CRYPTO_INVALID_SIZE;
510 #if (AES_SUPPORT == ENABLED)
530 if(aesContext->
nr == 10)
533 status = HW_SCE_AES_128EcbDecrypt(aesContext->
ek,
length / 4,
534 (
const uint32_t *)
c, (uint32_t *)
p);
536 else if(aesContext->
nr == 12)
539 status = HW_SCE_AES_192EcbDecrypt(aesContext->
ek,
length / 4,
540 (
const uint32_t *)
c, (uint32_t *)
p);
542 else if(aesContext->
nr == 14)
545 status = HW_SCE_AES_256EcbDecrypt(aesContext->
ek,
length / 4,
546 (
const uint32_t *)
c, (uint32_t *)
p);
551 status = SSP_ERR_CRYPTO_NOT_IMPLEMENTED;
560 status = SSP_ERR_CRYPTO_INVALID_SIZE;
582 status = SSP_ERR_CRYPTO_INVALID_SIZE;
591 #if (CBC_SUPPORT == ENABLED)
605 uint8_t *
iv,
const uint8_t *
p, uint8_t *
c,
size_t length)
610 status = SSP_SUCCESS;
612 #if (DES3_SUPPORT == ENABLED)
632 status = HW_SCE_TDES_192CbcEncrypt(des3Context->
k1.
ks,
633 (
const uint32_t *)
iv,
length / 4, (
const uint32_t *)
p,
634 (uint32_t *)
c, (uint32_t *)
iv);
642 status = SSP_ERR_CRYPTO_INVALID_SIZE;
647 #if (AES_SUPPORT == ENABLED)
667 if(aesContext->
nr == 10)
670 status = HW_SCE_AES_128CbcEncrypt(aesContext->
ek,
671 (
const uint32_t *)
iv,
length / 4, (
const uint32_t *)
p,
672 (uint32_t *)
c, (uint32_t *)
iv);
674 else if(aesContext->
nr == 12)
677 status = HW_SCE_AES_192CbcEncrypt(aesContext->
ek,
678 (
const uint32_t *)
iv,
length / 4, (
const uint32_t *)
p,
679 (uint32_t *)
c, (uint32_t *)
iv);
681 else if(aesContext->
nr == 14)
684 status = HW_SCE_AES_256CbcEncrypt(aesContext->
ek,
685 (
const uint32_t *)
iv,
length / 4, (
const uint32_t *)
p,
686 (uint32_t *)
c, (uint32_t *)
iv);
691 status = SSP_ERR_CRYPTO_NOT_IMPLEMENTED;
700 status = SSP_ERR_CRYPTO_INVALID_SIZE;
734 status = SSP_ERR_CRYPTO_INVALID_SIZE;
755 uint8_t *
iv,
const uint8_t *
c, uint8_t *
p,
size_t length)
760 status = SSP_SUCCESS;
762 #if (DES3_SUPPORT == ENABLED)
782 status = HW_SCE_TDES_192CbcDecrypt(des3Context->
k1.
ks,
783 (
const uint32_t *)
iv,
length / 4, (
const uint32_t *)
c,
784 (uint32_t *)
p, (uint32_t *)
iv);
792 status = SSP_ERR_CRYPTO_INVALID_SIZE;
797 #if (AES_SUPPORT == ENABLED)
817 if(aesContext->
nr == 10)
820 status = HW_SCE_AES_128CbcDecrypt(aesContext->
ek,
821 (
const uint32_t *)
iv,
length / 4, (
const uint32_t *)
c,
822 (uint32_t *)
p, (uint32_t *)
iv);
824 else if(aesContext->
nr == 12)
827 status = HW_SCE_AES_192CbcDecrypt(aesContext->
ek,
828 (
const uint32_t *)
iv,
length / 4, (
const uint32_t *)
c,
829 (uint32_t *)
p, (uint32_t *)
iv);
831 else if(aesContext->
nr == 14)
834 status = HW_SCE_AES_256CbcDecrypt(aesContext->
ek,
835 (
const uint32_t *)
iv,
length / 4, (
const uint32_t *)
c,
836 (uint32_t *)
p, (uint32_t *)
iv);
841 status = SSP_ERR_CRYPTO_NOT_IMPLEMENTED;
850 status = SSP_ERR_CRYPTO_INVALID_SIZE;
887 status = SSP_ERR_CRYPTO_INVALID_SIZE;
896 #if (CTR_SUPPORT == ENABLED)
911 uint8_t *
t,
const uint8_t *
p, uint8_t *
c,
size_t length)
916 status = SSP_SUCCESS;
925 #if (DES3_SUPPORT == ENABLED)
948 while(
length > 0 && status == SSP_SUCCESS)
956 status = HW_SCE_TDES_192CtrEncrypt(des3Context->
k1.
ks,
957 (
const uint32_t *)
t,
n / 4, (
const uint32_t *)
p,
958 (uint32_t *)
c, (uint32_t *) temp);
975 status = SSP_ERR_CRYPTO_INVALID_SIZE;
980 #if (AES_SUPPORT == ENABLED)
1003 while(
length > 0 && status == SSP_SUCCESS)
1011 if(aesContext->
nr == 10)
1014 status = HW_SCE_AES_128CtrEncrypt(aesContext->
ek,
1015 (
const uint32_t *)
t,
n / 4, (
const uint32_t *)
p,
1016 (uint32_t *)
c, (uint32_t *) temp);
1018 else if(aesContext->
nr == 12)
1021 status = HW_SCE_AES_192CtrEncrypt(aesContext->
ek,
1022 (
const uint32_t *)
t,
n / 4, (
const uint32_t *)
p,
1023 (uint32_t *)
c, (uint32_t *) temp);
1025 else if(aesContext->
nr == 14)
1028 status = HW_SCE_AES_256CtrEncrypt(aesContext->
ek,
1029 (
const uint32_t *)
t,
n / 4, (
const uint32_t *)
p,
1030 (uint32_t *)
c, (uint32_t *) temp);
1035 status = SSP_ERR_CRYPTO_NOT_IMPLEMENTED;
1053 status = SSP_ERR_CRYPTO_INVALID_SIZE;
1074 for(i = 0; i <
n; i++)
1092 status = SSP_ERR_CRYPTO_NOT_IMPLEMENTED;
1100 #if (GCM_SUPPORT == ENABLED && AES_SUPPORT == ENABLED)
1111 void *cipherContext)
1133 context->
m[0][0] =
h[0];
1134 context->
m[0][1] =
h[1];
1135 context->
m[0][2] =
h[2];
1136 context->
m[0][3] =
h[3];
1159 size_t ivLen,
const uint8_t *
a,
size_t aLen,
const uint8_t *
p,
1160 uint8_t *
c,
size_t length, uint8_t *
t,
size_t tLen)
1179 if(tLen < 4 || tLen > 16)
1186 if(aesContext->
nr != 10 && aesContext->
nr != 12 && aesContext->
nr != 14)
1221 HW_SCE_AES_Ghash(context->
m[0], j, k / 4, (
const uint32_t *)
iv, j);
1236 HW_SCE_AES_Ghash(context->
m[0], j, 4,
b, j);
1249 HW_SCE_AES_Ghash(context->
m[0], j, 4,
b, j);
1253 if(aesContext->
nr == 10)
1255 HW_SCE_AES_128EcbEncrypt(aesContext->
ek, 4, j,
b);
1257 else if(aesContext->
nr == 12)
1259 HW_SCE_AES_192EcbEncrypt(aesContext->
ek, 4, j,
b);
1263 HW_SCE_AES_256EcbEncrypt(aesContext->
ek, 4, j,
b);
1290 HW_SCE_AES_Ghash(context->
m[0],
s, k / 4, (
const uint32_t *)
a,
s);
1305 HW_SCE_AES_Ghash(context->
m[0],
s, 4,
b,
s);
1319 if(aesContext->
nr == 10)
1321 HW_SCE_AES_128GctrEncrypt(aesContext->
ek, j, k / 4,
1322 (
const uint32_t *)
p, (uint32_t *)
c, j);
1324 else if(aesContext->
nr == 12)
1326 HW_SCE_AES_192GctrEncrypt(aesContext->
ek, j, k / 4,
1327 (
const uint32_t *)
p, (uint32_t *)
c, j);
1331 HW_SCE_AES_256GctrEncrypt(aesContext->
ek, j, k / 4,
1332 (
const uint32_t *)
p, (uint32_t *)
c, j);
1336 HW_SCE_AES_Ghash(context->
m[0],
s, k / 4, (
const uint32_t *)
c,
s);
1352 if(aesContext->
nr == 10)
1354 HW_SCE_AES_128GctrEncrypt(aesContext->
ek, j, 4,
b,
b, j);
1356 else if(aesContext->
nr == 12)
1358 HW_SCE_AES_192GctrEncrypt(aesContext->
ek, j, 4,
b,
b, j);
1362 HW_SCE_AES_256GctrEncrypt(aesContext->
ek, j, 4,
b,
b, j);
1369 HW_SCE_AES_Ghash(context->
m[0],
s, 4,
b,
s);
1386 HW_SCE_AES_Ghash(context->
m[0],
s, 4,
b,
s);
1415 size_t ivLen,
const uint8_t *
a,
size_t aLen,
const uint8_t *
c,
1416 uint8_t *
p,
size_t length,
const uint8_t *
t,
size_t tLen)
1437 if(tLen < 4 || tLen > 16)
1444 if(aesContext->
nr != 10 && aesContext->
nr != 12 && aesContext->
nr != 14)
1479 HW_SCE_AES_Ghash(context->
m[0], j, k / 4, (
const uint32_t *)
iv, j);
1494 HW_SCE_AES_Ghash(context->
m[0], j, 4,
b, j);
1507 HW_SCE_AES_Ghash(context->
m[0], j, 4,
b, j);
1511 if(aesContext->
nr == 10)
1513 HW_SCE_AES_128EcbEncrypt(aesContext->
ek, 4, j,
b);
1515 else if(aesContext->
nr == 12)
1517 HW_SCE_AES_192EcbEncrypt(aesContext->
ek, 4, j,
b);
1521 HW_SCE_AES_256EcbEncrypt(aesContext->
ek, 4, j,
b);
1548 HW_SCE_AES_Ghash(context->
m[0],
s, k / 4, (
const uint32_t *)
a,
s);
1563 HW_SCE_AES_Ghash(context->
m[0],
s, 4,
b,
s);
1577 HW_SCE_AES_Ghash(context->
m[0],
s, k / 4, (
const uint32_t *)
c,
s);
1580 if(aesContext->
nr == 10)
1582 HW_SCE_AES_128GctrEncrypt(aesContext->
ek, j, k / 4,
1583 (
const uint32_t *)
c, (uint32_t *)
p, j);
1585 else if(aesContext->
nr == 12)
1587 HW_SCE_AES_192GctrEncrypt(aesContext->
ek, j, k / 4,
1588 (
const uint32_t *)
c, (uint32_t *)
p, j);
1592 HW_SCE_AES_256GctrEncrypt(aesContext->
ek, j, k / 4,
1593 (
const uint32_t *)
c, (uint32_t *)
p, j);
1610 HW_SCE_AES_Ghash(context->
m[0],
s, 4,
b,
s);
1613 if(aesContext->
nr == 10)
1615 HW_SCE_AES_128GctrEncrypt(aesContext->
ek, j, 4,
b,
b, j);
1617 else if(aesContext->
nr == 12)
1619 HW_SCE_AES_192GctrEncrypt(aesContext->
ek, j, 4,
b,
b, j);
1623 HW_SCE_AES_256GctrEncrypt(aesContext->
ek, j, 4,
b,
b, j);
1641 HW_SCE_AES_Ghash(context->
m[0],
s, 4,
b,
s);
1648 for(
mask = 0,
n = 0;
n < tLen;
n++)