change sha h/w acceleration implementation

pull/6819/head
Hideki Miyazaki 2023-09-29 16:22:16 +09:00
parent aedebac649
commit e092c57675
9 changed files with 264 additions and 148 deletions

View File

@ -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
```

View File

@ -25,7 +25,7 @@
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.createlisting.1459372610" name="Create extended listing" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.createlisting"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.printsize.1079284630" name="Print size" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.printsize" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.showCommand.231411189" name="Echo tool command" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.showCommand"/>
<option id="com.renesas.cdt.managedbuild.gcc.rz.option.optimizationLevel.104813302" name="Optimization Level" superClass="com.renesas.cdt.managedbuild.gcc.rz.option.optimizationLevel" value="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level.debug" valueType="enumerated"/>
<option id="com.renesas.cdt.managedbuild.gcc.rz.option.optimizationLevel.104813302" name="Optimization Level" superClass="com.renesas.cdt.managedbuild.gcc.rz.option.optimizationLevel" value="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level.more" valueType="enumerated"/>
<option id="com.renesas.cdt.managedbuild.gcc.rz.option.messagelenght.618641116" name="Message length (-fmessage-length=0)" superClass="com.renesas.cdt.managedbuild.gcc.rz.option.messagelenght" value="true" valueType="boolean"/>
<option id="com.renesas.cdt.managedbuild.gcc.rz.option.signedchar.1299606640" name="'char' is signed (-fsigned-char)" superClass="com.renesas.cdt.managedbuild.gcc.rz.option.signedchar" value="true" valueType="boolean"/>
<option id="com.renesas.cdt.managedbuild.gcc.rz.option.functionsection.175484560" name="Function sections (-ffunction-sections)" superClass="com.renesas.cdt.managedbuild.gcc.rz.option.functionsection" value="true" valueType="boolean"/>

View File

@ -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);

View File

@ -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) {
@ -259,6 +329,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,31 +418,57 @@ static int FSPSM_HashGet(wolfssl_FSPSM_Hash* hash, byte* out, word32 outSz)
}
}
}
wc_fspsm_hw_unlock();
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) {
#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;
}
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;
if(FSPSM_HashCopy(hash, &hashCopy) != 0) {
WOLFSSL_MSG("ShaCopy operation failed");
WOLFSSL_ERROR(WC_HW_E);
ret = WC_HW_E;
}
XMEMCPY(dst->msg, src->msg, src->len);
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();
return 0;
#endif
return ret;
}
#if !defined(NO_SHA) && defined(WOLFSSL_RENESAS_RSIP) && \
!defined(NO_WOLFSSL_RENESAS_TSIP_CRYPT_HASH)
#include <wolfssl/wolfcrypt/sha.h>

View File

@ -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);

View File

@ -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)

View File

@ -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);

View File

@ -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;

View File

@ -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;