diff --git a/IDE/Renesas/e2studio/RZN2L/README.md b/IDE/Renesas/e2studio/RZN2L/README.md
index 8cba34e5e..29d26bd51 100644
--- a/IDE/Renesas/e2studio/RZN2L/README.md
+++ b/IDE/Renesas/e2studio/RZN2L/README.md
@@ -482,52 +482,52 @@ Test complete
Sample Output
```
-Started Serial I/O interface. Start wolfCrypt Benchmark
+ Started Serial I/O interface. Start wolfCrypt Benchmark
wolfCrypt Benchmark (block bytes 1024, min 1.0 sec each)
-RNG 825.0 KiB took 1.021 seconds, 808.031 KiB/s
-AES-128-CBC-enc 1.0 MiB took 1.006 seconds, 1.189 MiB/s
-AES-128-CBC-dec 1.0 MiB took 1.000 seconds, 1.221 MiB/s
-AES-192-CBC-enc 1.0 MiB took 1.015 seconds, 1.058 MiB/s
-AES-192-CBC-dec 1.0 MiB took 1.020 seconds, 1.077 MiB/s
-AES-256-CBC-enc 1000.0 KiB took 1.020 seconds, 980.392 KiB/s
-AES-256-CBC-dec 1000.0 KiB took 1.010 seconds, 990.099 KiB/s
-AES-128-GCM-enc 400.0 KiB took 1.019 seconds, 392.542 KiB/s
-AES-128-GCM-dec 400.0 KiB took 1.019 seconds, 392.542 KiB/s
-AES-192-GCM-enc 400.0 KiB took 1.061 seconds, 377.003 KiB/s
-AES-192-GCM-dec 400.0 KiB took 1.061 seconds, 377.003 KiB/s
-AES-256-GCM-enc 375.0 KiB took 1.034 seconds, 362.669 KiB/s
-AES-256-GCM-dec 375.0 KiB took 1.033 seconds, 363.020 KiB/s
-AES-128-GCM-enc-no_AAD 400.0 KiB took 1.009 seconds, 396.432 KiB/s
-AES-128-GCM-dec-no_AAD 400.0 KiB took 1.008 seconds, 396.825 KiB/s
-AES-192-GCM-enc-no_AAD 400.0 KiB took 1.051 seconds, 380.590 KiB/s
-AES-192-GCM-dec-no_AAD 400.0 KiB took 1.051 seconds, 380.590 KiB/s
-AES-256-GCM-enc-no_AAD 375.0 KiB took 1.023 seconds, 366.569 KiB/s
-AES-256-GCM-dec-no_AAD 375.0 KiB took 1.024 seconds, 366.211 KiB/s
-GMAC Default 589.0 KiB took 1.001 seconds, 588.412 KiB/s
-3DES 325.0 KiB took 1.043 seconds, 311.601 KiB/s
-MD5 12.0 MiB took 1.000 seconds, 12.231 MiB/s
-SHA 2.0 MiB took 1.001 seconds, 2.171 MiB/s
-SHA-224 2.0 MiB took 1.001 seconds, 2.171 MiB/s
-SHA-256 2.0 MiB took 1.002 seconds, 2.169 MiB/s
-SHA-384 2.0 MiB took 1.001 seconds, 2.171 MiB/s
-SHA-512 2.0 MiB took 1.002 seconds, 2.169 MiB/s
-SHA-512/224 2.0 MiB took 1.002 seconds, 2.169 MiB/s
-SHA-512/256 2.0 MiB took 1.002 seconds, 2.169 MiB/s
-HMAC-MD5 12.0 MiB took 1.001 seconds, 12.195 MiB/s
-HMAC-SHA 2.0 MiB took 1.001 seconds, 2.146 MiB/s
-HMAC-SHA224 2.0 MiB took 1.001 seconds, 2.146 MiB/s
-HMAC-SHA256 2.0 MiB took 1.002 seconds, 2.144 MiB/s
-HMAC-SHA384 2.0 MiB took 1.007 seconds, 2.134 MiB/s
-HMAC-SHA512 2.0 MiB took 1.007 seconds, 2.134 MiB/s
-PBKDF2 288.0 bytes took 1.025 seconds, 280.976 bytes/s
-RSA 2048 public 48 ops took 1.028 sec, avg 21.417 ms, 46.693 ops/sec
-RSA 2048 private 2 ops took 2.787 sec, avg 1393.500 ms, 0.718 ops/sec
-ECC [ SECP256R1] 256 key gen 2 ops took 1.467 sec, avg 733.500 ms, 1.363 ops/sec
-ECDHE [ SECP256R1] 256 agree 2 ops took 1.465 sec, avg 732.500 ms, 1.365 ops/sec
-ECDSA [ SECP256R1] 256 sign 2 ops took 8.049 sec, avg 4024.500 ms, 0.248 ops/sec
-ECDSA [ SECP256R1] 256 verify 2 ops took 2.794 sec, avg 1396.1000 ms, 0.716 ops/sec
-CURVE 25519 key gen 2 ops took 1.077 sec, avg 538.500 ms, 1.857 ops/sec
-CURVE 25519 agree 2 ops took 1.077 sec, avg 538.500 ms, 1.857 ops/sec
+RNG 525.0 KiB took 1.038 seconds, 505.780 KiB/s
+AES-128-CBC-enc 2.0 MiB took 1.011 seconds, 2.028 MiB/s
+AES-128-CBC-dec 1.1 MiB took 1.003 seconds, 1.972 MiB/s
+AES-192-CBC-enc 1.1 MiB took 1.007 seconds, 1.721 MiB/s
+AES-192-CBC-dec 1.1 MiB took 1.004 seconds, 1.678 MiB/s
+AES-256-CBC-enc 1.1 MiB took 1.015 seconds, 1.515 MiB/s
+AES-256-CBC-dec 1.0 MiB took 1.008 seconds, 1.477 MiB/s
+AES-128-GCM-enc 575.0 KiB took 1.014 seconds, 567.061 KiB/s
+AES-128-GCM-dec 575.0 KiB took 1.013 seconds, 567.621 KiB/s
+AES-192-GCM-enc 550.0 KiB took 1.017 seconds, 540.806 KiB/s
+AES-192-GCM-dec 550.0 KiB took 1.017 seconds, 540.806 KiB/s
+AES-256-GCM-enc 525.0 KiB took 1.012 seconds, 518.775 KiB/s
+AES-256-GCM-dec 525.0 KiB took 1.011 seconds, 519.288 KiB/s
+AES-128-GCM-enc-no_AAD 575.0 KiB took 1.003 seconds, 573.280 KiB/s
+AES-128-GCM-dec-no_AAD 575.0 KiB took 1.003 seconds, 573.280 KiB/s
+AES-192-GCM-enc-no_AAD 550.0 KiB took 1.006 seconds, 546.720 KiB/s
+AES-192-GCM-dec-no_AAD 550.0 KiB took 1.006 seconds, 546.720 KiB/s
+AES-256-GCM-enc-no_AAD 525.0 KiB took 1.001 seconds, 524.476 KiB/s
+AES-256-GCM-dec-no_AAD 525.0 KiB took 1.000 seconds, 525.000 KiB/s
+GMAC Default 791.0 KiB took 1.001 seconds, 790.210 KiB/s
+3DES 425.0 KiB took 1.025 seconds, 414.634 KiB/s
+MD5 12.0 MiB took 1.001 seconds, 12.439 MiB/s
+SHA 21.1 MiB took 1.000 seconds, 21.558 MiB/s
+SHA-224 21.0 MiB took 1.000 seconds, 21.362 MiB/s
+SHA-256 21.0 MiB took 1.000 seconds, 21.216 MiB/s
+SHA-384 19.1 MiB took 1.000 seconds, 19.897 MiB/s
+SHA-512 19.1 MiB took 1.000 seconds, 19.824 MiB/s
+SHA-512/224 20.0 MiB took 1.000 seconds, 20.117 MiB/s
+SHA-512/256 19.1 MiB took 1.000 seconds, 19.946 MiB/s
+HMAC-MD5 12.0 MiB took 1.000 seconds, 12.329 MiB/s
+HMAC-SHA 20.0 MiB took 1.000 seconds, 20.093 MiB/s
+HMAC-SHA224 19.1 MiB took 1.000 seconds, 19.922 MiB/s
+HMAC-SHA256 19.1 MiB took 1.000 seconds, 19.751 MiB/s
+HMAC-SHA384 18.0 MiB took 1.000 seconds, 18.457 MiB/s
+HMAC-SHA512 18.0 MiB took 1.000 seconds, 18.384 MiB/s
+PBKDF2 288.0 bytes took 1.082 seconds, 266.174 bytes/s
+RSA 2048 public 56 ops took 1.007 sec, avg 17.982 ms, 55.611 ops/sec
+RSA 2048 private 2 ops took 2.391 sec, avg 1195.500 ms, 0.836 ops/sec
+ECC [ SECP256R1] 256 key gen 2 ops took 1.213 sec, avg 606.500 ms, 1.649 ops/sec
+ECDHE [ SECP256R1] 256 agree 2 ops took 1.211 sec, avg 605.500 ms, 1.652 ops/sec
+ECDSA [ SECP256R1] 256 sign 2 ops took 1.224 sec, avg 612.000 ms, 1.634 ops/sec
+ECDSA [ SECP256R1] 256 verify 2 ops took 2.312 sec, avg 1155.1000 ms, 0.865 ops/sec
+CURVE 25519 key gen 2 ops took 1.061 sec, avg 530.500 ms, 1.885 ops/sec
+CURVE 25519 agree 2 ops took 1.060 sec, avg 530.000 ms, 1.887 ops/sec
Benchmark complete
End wolfCrypt Benchmark
```
diff --git a/IDE/Renesas/e2studio/RZN2L/test/.cproject b/IDE/Renesas/e2studio/RZN2L/test/.cproject
index a10ae077d..98caa7842 100644
--- a/IDE/Renesas/e2studio/RZN2L/test/.cproject
+++ b/IDE/Renesas/e2studio/RZN2L/test/.cproject
@@ -25,7 +25,7 @@
-
+
diff --git a/IDE/Renesas/e2studio/RZN2L/test/src/test/wolfssl_rsip_unit_test.c b/IDE/Renesas/e2studio/RZN2L/test/src/test/wolfssl_rsip_unit_test.c
index 9e943259c..4f437bc7d 100644
--- a/IDE/Renesas/e2studio/RZN2L/test/src/test/wolfssl_rsip_unit_test.c
+++ b/IDE/Renesas/e2studio/RZN2L/test/src/test/wolfssl_rsip_unit_test.c
@@ -1305,6 +1305,12 @@ int rsip_crypt_test()
printf(" multi Aes Gcm thread test\n");
ret = rsip_crypt_AesGcm_multitest();
}
+
+ if (ret == 0) {
+ printf("rsip_crypt_Sha_AesCbcGcm_multitest\n");
+ ret = rsip_crypt_Sha_AesCbcGcm_multitest();
+ }
+
#if defined(WOLFSSL_RENESAS_RSIP_CRYPTONLY)
Clr_CallbackCtx(&gCbInfo);
Clr_CallbackCtx(&gCbInfo_a);
diff --git a/wolfcrypt/src/port/Renesas/renesas_fspsm_sha.c b/wolfcrypt/src/port/Renesas/renesas_fspsm_sha.c
index 5cc02a121..52df6da3d 100644
--- a/wolfcrypt/src/port/Renesas/renesas_fspsm_sha.c
+++ b/wolfcrypt/src/port/Renesas/renesas_fspsm_sha.c
@@ -99,10 +99,33 @@ static void FSPSM_HashFree(wolfssl_FSPSM_Hash* hash)
if (hash == NULL)
return;
+#if defined(WOLFSSL_RENESAS_SCEPROTECT)
if (hash->msg != NULL) {
XFREE(hash->msg, hash->heap, DYNAMIC_TYPE_TMP_BUFFER);
hash->msg = NULL;
}
+#endif
+
+}
+/* copy hash result from src to dst */
+static int FSPSM_HashCopy(wolfssl_FSPSM_Hash* src, wolfssl_FSPSM_Hash* dst)
+{
+ if (src == NULL || dst == NULL) {
+ return BAD_FUNC_ARG;
+ }
+
+ XMEMCPY(dst, src, sizeof(wolfssl_FSPSM_Hash));
+
+#if defined(WOLFSSL_RENESAS_SCEPROTECT)
+ if (src->len > 0 && src->msg != NULL) {
+ dst->msg = (byte*)XMALLOC(src->len, dst->heap, DYNAMIC_TYPE_TMP_BUFFER);
+ if (dst->msg == NULL) {
+ return MEMORY_E;
+ }
+ XMEMCPY(dst->msg, src->msg, src->len);
+ }
+#endif
+ return 0;
}
/* Initialize Hash object
*
@@ -114,18 +137,56 @@ static void FSPSM_HashFree(wolfssl_FSPSM_Hash* hash)
static int FSPSM_HashInit(wolfssl_FSPSM_Hash* hash, void* heap, int devId,
word32 sha_type)
{
+#if defined(WOLFSSL_RENESAS_RSIP)
+ int ret;
+ fsp_err_t (*Init)(FSPSM_SHA_HANDLE*);
+#endif
if (hash == NULL) {
return BAD_FUNC_ARG;
}
(void)devId;
XMEMSET(hash, 0, sizeof(wolfssl_FSPSM_Hash));
-
+ hash->sha_type = sha_type;
hash->heap = heap;
+
+#if defined(WOLFSSL_RENESAS_SCEPROTECT)
hash->len = 0;
hash->used = 0;
hash->msg = NULL;
- hash->sha_type = sha_type;
+
+#elif defined(WOLFSSL_RENESAS_RSIP)
+
+ switch(hash->sha_type) {
+ case FSPSM_SHA1:
+ Init = FSPSM_SHA1_Init;
+ break;
+ case FSPSM_SHA256:
+ Init = FSPSM_SHA256_Init;
+ break;
+ case FSPSM_SHA224:
+ Init = FSPSM_SHA224_Init;
+ break;
+ case FSPSM_SHA384:
+ Init = FSPSM_SHA384_Init;
+ break;
+ case FSPSM_SHA512:
+ Init = FSPSM_SHA512_Init;
+ break;
+ case FSPSM_SHA512_224:
+ Init = FSPSM_SHA512_224_Init;
+ break;
+ case FSPSM_SHA512_256:
+ Init = FSPSM_SHA512_256_Init;
+ break;
+ default:
+ return BAD_FUNC_ARG;
+ }
+ wc_fspsm_hw_lock();
+ ret = Init(&hash->handle);
+ wc_fspsm_hw_unlock();
+ return ret;
+#endif
return 0;
}
@@ -140,10 +201,16 @@ static int FSPSM_HashInit(wolfssl_FSPSM_Hash* hash, void* heap, int devId,
static int FSPSM_HashUpdate(wolfssl_FSPSM_Hash* hash,
const byte* data, word32 sz)
{
+#if defined(WOLFSSL_RENESAS_RSIP)
+ int ret;
+ fsp_err_t (*Update)(FSPSM_SHA_HANDLE*, uint8_t*, uint32_t);
+#endif
+
if (hash == NULL || (sz > 0 && data == NULL)) {
return BAD_FUNC_ARG;
}
+#if defined(WOLFSSL_RENESAS_SCEPROTECT)
if (hash->len < hash->used + sz) {
if (hash->msg == NULL) {
hash->msg = (byte*)XMALLOC(hash->used + sz, hash->heap,
@@ -176,7 +243,38 @@ static int FSPSM_HashUpdate(wolfssl_FSPSM_Hash* hash,
}
XMEMCPY(hash->msg + hash->used, data , sz);
hash->used += sz;
-
+#elif defined(WOLFSSL_RENESAS_RSIP)
+
+ switch(hash->sha_type) {
+ case FSPSM_SHA1:
+ Update = FSPSM_SHA1_Up;
+ break;
+ case FSPSM_SHA256:
+ Update = FSPSM_SHA256_Up;
+ break;
+ case FSPSM_SHA224:
+ Update = FSPSM_SHA224_Up;
+ break;
+ case FSPSM_SHA384:
+ Update = FSPSM_SHA384_Up;
+ break;
+ case FSPSM_SHA512:
+ Update = FSPSM_SHA512_Up;
+ break;
+ case FSPSM_SHA512_224:
+ Update = FSPSM_SHA512_224_Up;
+ break;
+ case FSPSM_SHA512_256:
+ Update = FSPSM_SHA512_256_Up;
+ break;
+ default:
+ return BAD_FUNC_ARG;
+ }
+ wc_fspsm_hw_lock();
+ ret = Update(&hash->handle, data, sz);
+ wc_fspsm_hw_unlock();
+ return ret;
+#endif
return 0;
}
@@ -191,15 +289,15 @@ static int FSPSM_HashUpdate(wolfssl_FSPSM_Hash* hash,
static int FSPSM_HashFinal(wolfssl_FSPSM_Hash* hash, byte* out, word32 outSz)
{
int ret = FSP_SUCCESS;
- void* heap;
- FSPSM_SHA_HANDLE handle;
+ fsp_err_t (*Final )(FSPSM_SHA_HANDLE*, uint8_t*, uint32_t*);
uint32_t sz;
-
+ void* heap;
(void) outSz;
+#if defined(WOLFSSL_RENESAS_SCEPROTECT)
+ FSPSM_SHA_HANDLE handle;
fsp_err_t (*Init)(FSPSM_SHA_HANDLE*);
fsp_err_t (*Update)(FSPSM_SHA_HANDLE*, uint8_t*, uint32_t);
- fsp_err_t (*Final )(FSPSM_SHA_HANDLE*, uint8_t*, uint32_t*);
if (hash == NULL || out == NULL) {
return BAD_FUNC_ARG;
@@ -209,37 +307,9 @@ static int FSPSM_HashFinal(wolfssl_FSPSM_Hash* hash, byte* out, word32 outSz)
Init = FSPSM_SHA256_Init;
Update = FSPSM_SHA256_Up;
Final = FSPSM_SHA256_Final;
-#if defined(WOLFSSL_RENESAS_RSIP)
- } else if (hash->sha_type == FSPSM_SHA1) {
- Init = FSPSM_SHA1_Init;
- Update = FSPSM_SHA1_Up;
- Final = FSPSM_SHA1_Final;
- } else if (hash->sha_type == FSPSM_SHA224) {
- Init = FSPSM_SHA224_Init;
- Update = FSPSM_SHA224_Up;
- Final = FSPSM_SHA224_Final;
- } else if (hash->sha_type == FSPSM_SHA384) {
- Init = FSPSM_SHA384_Init;
- Update = FSPSM_SHA384_Up;
- Final = FSPSM_SHA384_Final;
- } else if (hash->sha_type == FSPSM_SHA512) {
- Init = FSPSM_SHA512_Init;
- Update = FSPSM_SHA512_Up;
- Final = FSPSM_SHA512_Final;
- } else if (hash->sha_type == FSPSM_SHA512_224) {
- Init = FSPSM_SHA512_224_Init;
- Update = FSPSM_SHA512_224_Up;
- Final = FSPSM_SHA512_224_Final;
- } else if (hash->sha_type == FSPSM_SHA512_256) {
- Init = FSPSM_SHA512_256_Init;
- Update = FSPSM_SHA512_256_Up;
- Final = FSPSM_SHA512_256_Final;
-#endif
} else
return BAD_FUNC_ARG;
-
- heap = hash->heap;
-
+
wc_fspsm_hw_lock();
if (Init(&handle) == FSP_SUCCESS) {
@@ -258,6 +328,45 @@ static int FSPSM_HashFinal(wolfssl_FSPSM_Hash* hash, byte* out, word32 outSz)
}
}
wc_fspsm_hw_unlock();
+
+#elif defined(WOLFSSL_RENESAS_RSIP)
+ switch(hash->sha_type) {
+ case FSPSM_SHA1:
+ Final = FSPSM_SHA1_Final;
+ break;
+ case FSPSM_SHA256:
+ Final = FSPSM_SHA256_Final;
+ break;
+ case FSPSM_SHA224:
+ Final = FSPSM_SHA224_Final;
+ break;
+ case FSPSM_SHA384:
+ Final = FSPSM_SHA384_Final;
+ break;
+ case FSPSM_SHA512:
+ Final = FSPSM_SHA512_Final;
+ break;
+ case FSPSM_SHA512_224:
+ Final = FSPSM_SHA512_224_Final;
+ break;
+ case FSPSM_SHA512_256:
+ Final = FSPSM_SHA512_256_Final;
+ break;
+ default:
+ return BAD_FUNC_ARG;
+ }
+
+ wc_fspsm_hw_lock();
+ ret = Final(&hash->handle, out, (uint32_t*)&sz);
+ if (ret != FSP_SUCCESS) {
+ WOLFSSL_MSG("Sha operation failed");
+ WOLFSSL_ERROR(WC_HW_E);
+ ret = WC_HW_E;
+ }
+ wc_fspsm_hw_unlock();
+#endif
+
+ heap = hash->heap;
FSPSM_HashFree(hash);
FSPSM_HashInit(hash, heap, 0, hash->sha_type);
@@ -268,54 +377,32 @@ static int FSPSM_HashFinal(wolfssl_FSPSM_Hash* hash, byte* out, word32 outSz)
static int FSPSM_HashGet(wolfssl_FSPSM_Hash* hash, byte* out, word32 outSz)
{
int ret = FSP_SUCCESS;
- FSPSM_SHA_HANDLE handle;
+ fsp_err_t (*Final )(FSPSM_SHA_HANDLE*, uint8_t*, uint32_t*);
uint32_t sz = 0;
-
(void) outSz;
-
+
+#if defined(WOLFSSL_RENESAS_SCEPROTECT)
+ FSPSM_SHA_HANDLE handle;
fsp_err_t (*Init)(FSPSM_SHA_HANDLE*);
fsp_err_t (*Update)(FSPSM_SHA_HANDLE*, uint8_t*, uint32_t);
- fsp_err_t (*Final )(FSPSM_SHA_HANDLE*, uint8_t*, uint32_t*);
+#elif defined(WOLFSSL_RENESAS_RSIP)
+ wolfssl_FSPSM_Hash hashCopy;
+#endif
+
if (hash == NULL || out == NULL) {
return BAD_FUNC_ARG;
}
+#if defined(WOLFSSL_RENESAS_SCEPROTECT)
if (hash->sha_type == FSPSM_SHA256) {
Init = FSPSM_SHA256_Init;
Update = FSPSM_SHA256_Up;
Final = FSPSM_SHA256_Final;
-#if defined(WOLFSSL_RENESAS_RSIP)
- } else if (hash->sha_type == FSPSM_SHA1) {
- Init = FSPSM_SHA1_Init;
- Update = FSPSM_SHA1_Up;
- Final = FSPSM_SHA1_Final;
- } else if (hash->sha_type == FSPSM_SHA224) {
- Init = FSPSM_SHA224_Init;
- Update = FSPSM_SHA224_Up;
- Final = FSPSM_SHA224_Final;
- } else if (hash->sha_type == FSPSM_SHA384) {
- Init = FSPSM_SHA384_Init;
- Update = FSPSM_SHA384_Up;
- Final = FSPSM_SHA384_Final;
- } else if (hash->sha_type == FSPSM_SHA512) {
- Init = FSPSM_SHA512_Init;
- Update = FSPSM_SHA512_Up;
- Final = FSPSM_SHA512_Final;
- } else if (hash->sha_type == FSPSM_SHA512_224) {
- Init = FSPSM_SHA512_224_Init;
- Update = FSPSM_SHA512_224_Up;
- Final = FSPSM_SHA512_224_Final;
- } else if (hash->sha_type == FSPSM_SHA512_256) {
- Init = FSPSM_SHA512_256_Init;
- Update = FSPSM_SHA512_256_Up;
- Final = FSPSM_SHA512_256_Final;
-#endif
} else
return BAD_FUNC_ARG;
-
+
wc_fspsm_hw_lock();
-
if (Init(&handle) == FSP_SUCCESS) {
ret = Update(&handle, (uint8_t*)hash->msg, hash->used);
if (ret == FSP_SUCCESS) {
@@ -331,30 +418,56 @@ static int FSPSM_HashGet(wolfssl_FSPSM_Hash* hash, byte* out, word32 outSz)
}
}
}
-
wc_fspsm_hw_unlock();
+
+#elif defined(WOLFSSL_RENESAS_RSIP)
+ switch(hash->sha_type) {
+ case FSPSM_SHA1:
+ Final = FSPSM_SHA1_Final;
+ break;
+ case FSPSM_SHA256:
+ Final = FSPSM_SHA256_Final;
+ break;
+ case FSPSM_SHA224:
+ Final = FSPSM_SHA224_Final;
+ break;
+ case FSPSM_SHA384:
+ Final = FSPSM_SHA384_Final;
+ break;
+ case FSPSM_SHA512:
+ Final = FSPSM_SHA512_Final;
+ break;
+ case FSPSM_SHA512_224:
+ Final = FSPSM_SHA512_224_Final;
+ break;
+ case FSPSM_SHA512_256:
+ Final = FSPSM_SHA512_256_Final;
+ break;
+ default:
+ return BAD_FUNC_ARG;
+ }
+
+
+ if(FSPSM_HashCopy(hash, &hashCopy) != 0) {
+ WOLFSSL_MSG("ShaCopy operation failed");
+ WOLFSSL_ERROR(WC_HW_E);
+ ret = WC_HW_E;
+ }
+ wc_fspsm_hw_lock();
+ ret = Final(&hashCopy.handle, out, (uint32_t*)&sz);
+ if (ret != FSP_SUCCESS) {
+ WOLFSSL_MSG("Sha operation failed");
+ WOLFSSL_ERROR(WC_HW_E);
+ ret = WC_HW_E;
+ }
+ wc_fspsm_hw_unlock();
+
+#endif
return ret;
}
-/* copy hash result from src to dst */
-static int FSPSM_HashCopy(wolfssl_FSPSM_Hash* src, wolfssl_FSPSM_Hash* dst)
-{
- if (src == NULL || dst == NULL) {
- return BAD_FUNC_ARG;
- }
- XMEMCPY(dst, src, sizeof(wolfssl_FSPSM_Hash));
- if (src->len > 0 && src->msg != NULL) {
- dst->msg = (byte*)XMALLOC(src->len, dst->heap, DYNAMIC_TYPE_TMP_BUFFER);
- if (dst->msg == NULL) {
- return MEMORY_E;
- }
- XMEMCPY(dst->msg, src->msg, src->len);
- }
-
- return 0;
-}
#if !defined(NO_SHA) && defined(WOLFSSL_RENESAS_RSIP) && \
!defined(NO_WOLFSSL_RENESAS_TSIP_CRYPT_HASH)
diff --git a/wolfcrypt/src/sha.c b/wolfcrypt/src/sha.c
index d1d1b57f4..7e9bbccef 100644
--- a/wolfcrypt/src/sha.c
+++ b/wolfcrypt/src/sha.c
@@ -919,8 +919,6 @@ void wc_ShaFree(wc_Sha* sha)
#if (defined(WOLFSSL_RENESAS_TSIP_TLS) || \
defined(WOLFSSL_RENESAS_TSIP_CRYPTONLY)) && \
!defined(NO_WOLFSSL_RENESAS_TSIP_CRYPT_HASH) || \
- (defined(WOLFSSL_RENESAS_RSIP) && \
- !defined(NO_WOLFSSL_RENESAS_FSPSM_HASH)) || \
defined(WOLFSSL_RENESAS_RX64_HASH)
if (sha->msg != NULL) {
XFREE(sha->msg, sha->heap, DYNAMIC_TYPE_TMP_BUFFER);
diff --git a/wolfcrypt/src/sha256.c b/wolfcrypt/src/sha256.c
index beda2e30a..89c33bc71 100644
--- a/wolfcrypt/src/sha256.c
+++ b/wolfcrypt/src/sha256.c
@@ -1715,9 +1715,7 @@ static int InitSha256(wc_Sha256* sha256)
#if defined(WOLFSSL_KCAPI_HASH)
KcapiHashFree(&sha224->kcapi);
#endif
- #if defined(WOLFSSL_RENESAS_RX64_HASH) || \
- (defined(WOLFSSL_RENESAS_RSIP) && \
- !defined(NO_WOLFSSL_RENESAS_FSPSM_HASH))
+ #if defined(WOLFSSL_RENESAS_RX64_HASH)
if (sha224->msg != NULL) {
ForceZero(sha224->msg, sha224->len);
XFREE(sha224->msg, sha224->heap, DYNAMIC_TYPE_TMP_BUFFER);
@@ -1780,7 +1778,7 @@ void wc_Sha256Free(wc_Sha256* sha256)
((defined(WOLFSSL_RENESAS_TSIP_TLS) || \
defined(WOLFSSL_RENESAS_TSIP_CRYPTONLY)) && \
!defined(NO_WOLFSSL_RENESAS_TSIP_CRYPT_HASH)) || \
- ((defined(WOLFSSL_RENESAS_SCEPROTECT) || defined(WOLFSSL_RENESAS_RSIP)) && \
+ (defined(WOLFSSL_RENESAS_SCEPROTECT) && \
!defined(NO_WOLFSSL_RENESAS_FSPSM_HASH)) || \
defined(WOLFSSL_RENESAS_RX64_HASH) || \
defined(WOLFSSL_HASH_KEEP)
diff --git a/wolfcrypt/src/sha512.c b/wolfcrypt/src/sha512.c
index 16c119295..0ef343652 100644
--- a/wolfcrypt/src/sha512.c
+++ b/wolfcrypt/src/sha512.c
@@ -1148,9 +1148,7 @@ void wc_Sha512Free(wc_Sha512* sha512)
KcapiHashFree(&sha512->kcapi);
#endif
-#if defined(WOLFSSL_HASH_KEEP) || \
- (defined(WOLFSSL_RENESAS_RSIP) && \
- !defined(NO_WOLFSSL_RENESAS_FSPSM_HASH))
+#if defined(WOLFSSL_HASH_KEEP)
if (sha512->msg != NULL) {
ForceZero(sha512->msg, sha512->len);
XFREE(sha512->msg, sha512->heap, DYNAMIC_TYPE_TMP_BUFFER);
@@ -1479,8 +1477,7 @@ void wc_Sha384Free(wc_Sha384* sha384)
KcapiHashFree(&sha384->kcapi);
#endif
-#if defined(WOLFSSL_HASH_KEEP) || \
- (defined(WOLFSSL_RENESAS_RSIP) && !defined(NO_WOLFSSL_RENESAS_HASH))
+#if defined(WOLFSSL_HASH_KEEP)
if (sha384->msg != NULL) {
ForceZero(sha384->msg, sha384->len);
XFREE(sha384->msg, sha384->heap, DYNAMIC_TYPE_TMP_BUFFER);
diff --git a/wolfcrypt/test/test.c b/wolfcrypt/test/test.c
index 002437f9e..a9edce1fa 100644
--- a/wolfcrypt/test/test.c
+++ b/wolfcrypt/test/test.c
@@ -405,7 +405,6 @@ const byte const_byte_array[] = "A+Gd\0\0\0";
#endif
#if defined(WOLFSSL_RENESAS_TSIP) || defined(WOLFSSL_RENESAS_SCEPROTECT) || \
- defined(WOLFSSL_RENESAS_RSIP) || \
defined(WOLFSSL_RENESAS_SCEPROTECT_CRYPTONLY) || \
defined(WOLFSSL_SECO_CAAM)
#define HASH_SIZE_LIMIT
@@ -2709,7 +2708,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t sha_test(void)
/* BEGIN LARGE HASH TEST */ {
byte large_input[1024];
#if defined(WOLFSSL_RENESAS_TSIP) || defined(WOLFSSL_RENESAS_SCEPROTECT) || \
- defined(WOLFSSL_RENESAS_RSIP) || defined(HASH_SIZE_LIMIT)
+ defined(HASH_SIZE_LIMIT)
const char* large_digest =
"\x1d\x6a\x5a\xf6\xe5\x7c\x86\xce\x7f\x7c\xaf\xd5\xdb\x08\xcd\x59"
"\x15\x8c\x6d\xb6";
@@ -2722,7 +2721,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t sha_test(void)
large_input[i] = (byte)(i & 0xFF);
}
#if defined(WOLFSSL_RENESAS_TSIP) || defined(WOLFSSL_RENESAS_SCEPROTECT) || \
- defined(WOLFSSL_RENESAS_RSIP) || defined(HASH_SIZE_LIMIT)
+ defined(HASH_SIZE_LIMIT)
times = 20;
#else
times = 100;
diff --git a/wolfssl/wolfcrypt/port/Renesas/renesas-fspsm-crypt.h b/wolfssl/wolfcrypt/port/Renesas/renesas-fspsm-crypt.h
index 443540179..b300e2270 100644
--- a/wolfssl/wolfcrypt/port/Renesas/renesas-fspsm-crypt.h
+++ b/wolfssl/wolfcrypt/port/Renesas/renesas-fspsm-crypt.h
@@ -174,11 +174,16 @@ typedef enum {
} FSPSM_SHA_TYPE;
typedef struct {
- byte* msg;
void* heap;
+ word32 sha_type;
+#if defined(WOLFSSL_RENESAS_SCEPROTECT)
word32 used;
word32 len;
- word32 sha_type;
+ byte* msg;
+#endif
+#if defined(WOLFSSL_RENESAS_RSIP)
+ FSPSM_SHA_HANDLE handle;
+#endif
#if defined(WOLF_CRYPTO_CB)
word32 flags;
int devId;