#include <string.h>
#include <stdio.h>
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <wolfssl/wolfcrypt/settings.h>
#if !defined(NO_SHA256)
#include <wolfssl/wolfcrypt/logging.h>
#if (defined(WOLFSSL_RENESAS_SCEPROTECT) || \
defined(WOLFSSL_RENESAS_RSIP)) && \
!defined(NO_WOLFSSL_RENESAS_TSIP_CRYPT_HASH)
#include <wolfssl/wolfcrypt/error-crypt.h>
#include <wolfssl/wolfcrypt/port/Renesas/renesas_fspsm_internal.h>
#if defined(WOLFSSL_RENESAS_RSIP)
extern FSPSM_INSTANCE gFSPSM_ctrl;
static fsp_err_t _R_RSIP_SHA1_GenerateInit(FSPSM_SHA_HANDLE* h)
{
#if (WOLFSSL_RENESAS_RZFSP_VER >= 220)
(void)h;
return R_RSIP_SHA_Init(&gFSPSM_ctrl, RSIP_HASH_TYPE_SHA1);
#else
return R_RSIP_SHA_GenerateInit(&gFSPSM_ctrl, h, RSIP_HASH_TYPE_SHA1 );
#endif
}
static fsp_err_t _R_RSIP_SHA224_GenerateInit(FSPSM_SHA_HANDLE* h)
{
#if (WOLFSSL_RENESAS_RZFSP_VER >= 220)
(void)h;
return R_RSIP_SHA_Init(&gFSPSM_ctrl, RSIP_HASH_TYPE_SHA224);
#else
return R_RSIP_SHA_GenerateInit(&gFSPSM_ctrl, h, RSIP_HASH_TYPE_SHA224 );
#endif
}
static fsp_err_t _R_RSIP_SHA256_GenerateInit(FSPSM_SHA_HANDLE* h)
{
#if (WOLFSSL_RENESAS_RZFSP_VER >= 220)
(void)h;
return R_RSIP_SHA_Init(&gFSPSM_ctrl, RSIP_HASH_TYPE_SHA256);
#else
return R_RSIP_SHA_GenerateInit(&gFSPSM_ctrl, h, RSIP_HASH_TYPE_SHA256 );
#endif
}
static fsp_err_t _R_RSIP_SHA384_GenerateInit(FSPSM_SHA_HANDLE* h)
{
#if (WOLFSSL_RENESAS_RZFSP_VER >= 220)
(void)h;
return R_RSIP_SHA_Init(&gFSPSM_ctrl, RSIP_HASH_TYPE_SHA384);
#else
return R_RSIP_SHA_GenerateInit(&gFSPSM_ctrl, h, RSIP_HASH_TYPE_SHA384 );
#endif
}
static fsp_err_t _R_RSIP_SHA512_GenerateInit(FSPSM_SHA_HANDLE* h)
{
#if (WOLFSSL_RENESAS_RZFSP_VER >= 220)
(void)h;
return R_RSIP_SHA_Init(&gFSPSM_ctrl, RSIP_HASH_TYPE_SHA512);
#else
return R_RSIP_SHA_GenerateInit(&gFSPSM_ctrl, h, RSIP_HASH_TYPE_SHA512 );
#endif
}
static fsp_err_t _R_RSIP_SHA512_224_GenerateInit(FSPSM_SHA_HANDLE* h)
{
#if (WOLFSSL_RENESAS_RZFSP_VER >= 220)
(void)h;
return R_RSIP_SHA_Init(&gFSPSM_ctrl, RSIP_HASH_TYPE_SHA512_224);
#else
return R_RSIP_SHA_GenerateInit(&gFSPSM_ctrl, h, RSIP_HASH_TYPE_SHA512_224 );
#endif
}
static fsp_err_t _R_RSIP_SHA512_256_GenerateInit(FSPSM_SHA_HANDLE* h)
{
#if (WOLFSSL_RENESAS_RZFSP_VER >= 220)
(void)h;
return R_RSIP_SHA_Init(&gFSPSM_ctrl, RSIP_HASH_TYPE_SHA512_256);
#else
return R_RSIP_SHA_GenerateInit(&gFSPSM_ctrl, h, RSIP_HASH_TYPE_SHA512_256 );
#endif
}
static fsp_err_t _R_RSIP_SHA_GenerateUpdate(FSPSM_SHA_HANDLE* h,
uint8_t* m, uint32_t len)
{
#if (WOLFSSL_RENESAS_RZFSP_VER >= 220)
(void)h;
return R_RSIP_SHA_Update(&gFSPSM_ctrl, m, len);
#else
return R_RSIP_SHA_GenerateUpdate(&gFSPSM_ctrl, h, m, len );
#endif
}
static fsp_err_t _R_RSIP_SHA_GenerateFinal(FSPSM_SHA_HANDLE* h,
uint8_t* d, uint32_t *sz)
{
(void) sz;
#if (WOLFSSL_RENESAS_RZFSP_VER >= 220)
(void)h;
return R_RSIP_SHA_Finish(&gFSPSM_ctrl, d);
#else
return R_RSIP_SHA_GenerateFinal(&gFSPSM_ctrl, h, d);
#endif
}
#endif
#if defined(WOLFSSL_RENESAS_RSIP) && (WOLFSSL_RENESAS_RZFSP_VER >= 220)
static int FSPSM_FuncGet(uint32_t sha_type, void** Init,
void** Update, void** Final)
{
(void)Init;
(void)Update;
(void)Final;
switch(sha_type) {
case FSPSM_SHA1:
*Init = FSPSM_SHA1_Init;
*Update = FSPSM_SHA1_Up;
*Final = FSPSM_SHA1_Final;
break;
case FSPSM_SHA256:
*Init = FSPSM_SHA256_Init;
*Update = FSPSM_SHA256_Up;
*Final = FSPSM_SHA256_Final;
break;
case FSPSM_SHA224:
*Init = FSPSM_SHA224_Init;
*Update = FSPSM_SHA224_Up;
*Final = FSPSM_SHA224_Final;
break;
case FSPSM_SHA384:
*Init = FSPSM_SHA384_Init;
*Update = FSPSM_SHA384_Up;
*Final = FSPSM_SHA384_Final;
break;
case FSPSM_SHA512:
*Init = FSPSM_SHA512_Init;
*Update = FSPSM_SHA512_Up;
*Final = FSPSM_SHA512_Final;
break;
case FSPSM_SHA512_224:
*Init = FSPSM_SHA512_224_Init;
*Update = FSPSM_SHA512_224_Up;
*Final = FSPSM_SHA512_224_Final;
break;
case FSPSM_SHA512_256:
*Init = FSPSM_SHA512_256_Init;
*Update = FSPSM_SHA512_256_Up;
*Final = FSPSM_SHA512_256_Final;
break;
default:
return BAD_FUNC_ARG;
}
return 0;
}
#endif
static void FSPSM_HashFree(wolfssl_FSPSM_Hash* hash)
{
if (hash == NULL)
return;
#if defined(WOLFSSL_RENESAS_SCEPROTECT) || \
(defined(WOLFSSL_RENESAS_RSIP) && (WOLFSSL_RENESAS_RZFSP_VER >= 220))
XFREE(hash->msg, hash->heap, DYNAMIC_TYPE_TMP_BUFFER);
hash->msg = NULL;
#endif
}
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) || \
(defined(WOLFSSL_RENESAS_RSIP) && (WOLFSSL_RENESAS_RZFSP_VER >= 220))
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;
}
static int FSPSM_HashInit(wolfssl_FSPSM_Hash* hash, void* heap, int devId,
word32 sha_type)
{
#if defined(WOLFSSL_RENESAS_RSIP) && (WOLFSSL_RENESAS_RZFSP_VER < 220)
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) || \
(defined(WOLFSSL_RENESAS_RSIP) && (WOLFSSL_RENESAS_RZFSP_VER >= 220))
hash->len = 0;
hash->used = 0;
hash->msg = NULL;
#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;
}
static int FSPSM_HashUpdate(wolfssl_FSPSM_Hash* hash,
const byte* data, word32 sz)
{
#if defined(WOLFSSL_RENESAS_RSIP) && (WOLFSSL_RENESAS_RZFSP_VER < 220)
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) || \
(defined(WOLFSSL_RENESAS_RSIP) && (WOLFSSL_RENESAS_RZFSP_VER >= 220))
if (hash->len < hash->used + sz) {
if (hash->msg == NULL) {
hash->msg = (byte*)XMALLOC(hash->used + sz, hash->heap,
DYNAMIC_TYPE_TMP_BUFFER);
}
else {
#ifdef FREERTOS
byte* pt = (byte*)XMALLOC(hash->used + sz, hash->heap,
DYNAMIC_TYPE_TMP_BUFFER);
if (pt == NULL) {
return MEMORY_E;
}
XMEMCPY(pt, hash->msg, hash->used);
XFREE(hash->msg, hash->heap, DYNAMIC_TYPE_TMP_BUFFER);
hash->msg = NULL;
hash->msg = pt;
#else
byte* pt = (byte*)XREALLOC(hash->msg, hash->used + sz, hash->heap,
DYNAMIC_TYPE_TMP_BUFFER);
if (pt == NULL) {
return MEMORY_E;
}
hash->msg = pt;
#endif
}
if (hash->msg == NULL) {
return MEMORY_E;
}
hash->len = hash->used + sz;
}
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, (byte*)data, sz);
wc_fspsm_hw_unlock();
return ret;
#endif
return 0;
}
static int FSPSM_HashFinal(wolfssl_FSPSM_Hash* hash, byte* out, word32 outSz)
{
int ret = FSP_SUCCESS;
fsp_err_t (*Final )(FSPSM_SHA_HANDLE*, uint8_t*, uint32_t*);
uint32_t sz;
void* heap;
(void) outSz;
#if defined(WOLFSSL_RENESAS_SCEPROTECT) || \
(defined(WOLFSSL_RENESAS_RSIP) && (WOLFSSL_RENESAS_RZFSP_VER >= 220))
FSPSM_SHA_HANDLE handle;
fsp_err_t (*Init)(FSPSM_SHA_HANDLE*);
fsp_err_t (*Update)(FSPSM_SHA_HANDLE*, uint8_t*, uint32_t);
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;
} else
return BAD_FUNC_ARG;
#else
Init = NULL;
Update = NULL;
Final = NULL;
ret = FSPSM_FuncGet(hash->sha_type, (void**)&Init,
(void**)&Update, (void**)&Final);
if (ret != 0) return ret;
#endif
wc_fspsm_hw_lock();
if (Init(&handle) == FSP_SUCCESS) {
ret = Update(&handle, (uint8_t*)hash->msg, hash->used);
if (ret == FSP_SUCCESS) {
ret = Final(&handle, out, (uint32_t*)&sz);
if (ret != FSP_SUCCESS
#if defined(WOLFSSL_RENESAS_SCEPROTECT)
|| sz != outSz
#endif
) {
WOLFSSL_MSG("Sha operation failed");
WOLFSSL_ERROR(WC_HW_E);
ret = WC_HW_E;
}
}
}
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);
return ret;
}
static int FSPSM_HashGet(wolfssl_FSPSM_Hash* hash, byte* out, word32 outSz)
{
int ret = FSP_SUCCESS;
fsp_err_t (*Final )(FSPSM_SHA_HANDLE*, uint8_t*, uint32_t*);
uint32_t sz = 0;
(void) outSz;
#if defined(WOLFSSL_RENESAS_SCEPROTECT) || \
(defined(WOLFSSL_RENESAS_RSIP) && (WOLFSSL_RENESAS_RZFSP_VER >= 220))
FSPSM_SHA_HANDLE handle;
fsp_err_t (*Init)(FSPSM_SHA_HANDLE*);
fsp_err_t (*Update)(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) || \
(defined(WOLFSSL_RENESAS_RSIP) && (WOLFSSL_RENESAS_RZFSP_VER >= 220))
#if defined(WOLFSSL_RENESAS_SCEPROTECT)
if (hash->sha_type == FSPSM_SHA256) {
Init = FSPSM_SHA256_Init;
Update = FSPSM_SHA256_Up;
Final = FSPSM_SHA256_Final;
} else
return BAD_FUNC_ARG;
#else
Init = NULL;
Update = NULL;
Final = NULL;
ret = FSPSM_FuncGet(hash->sha_type, (void**)&Init,
(void**)&Update, (void**)&Final);
if (ret != 0) return ret;
#endif
wc_fspsm_hw_lock();
if (Init(&handle) == FSP_SUCCESS) {
ret = Update(&handle, (uint8_t*)hash->msg, hash->used);
if (ret == FSP_SUCCESS) {
ret = Final(&handle, out, &sz);
if (ret != FSP_SUCCESS
#if defined(WOLFSSL_RENESAS_SCEPROTECT)
|| sz != outSz
#endif
) {
WOLFSSL_MSG("Sha operation failed");
WOLFSSL_ERROR(WC_HW_E);
ret = WC_HW_E;
}
}
}
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;
}
#if !defined(NO_SHA) && defined(WOLFSSL_RENESAS_RSIP) && \
!defined(NO_WOLFSSL_RENESAS_TSIP_CRYPT_HASH)
#include <wolfssl/wolfcrypt/sha.h>
int wc_InitSha_ex(wc_Sha* sha, void* heap, int devId)
{
return FSPSM_HashInit(sha, heap, devId, FSPSM_SHA1);
}
int wc_ShaUpdate(wc_Sha* sha, const byte* in, word32 sz)
{
return FSPSM_HashUpdate(sha, in, sz);
}
int wc_ShaFinal(wc_Sha* sha, byte* hash)
{
return FSPSM_HashFinal(sha, hash, WC_SHA_DIGEST_SIZE);
}
int wc_ShaGetHash(wc_Sha* sha, byte* hash)
{
return FSPSM_HashGet(sha, hash, WC_SHA_DIGEST_SIZE);
}
int wc_ShaCopy(wc_Sha* src, wc_Sha* dst)
{
return FSPSM_HashCopy(src, dst);
}
#endif
#if defined(WOLFSSL_SHA224) && defined(WOLFSSL_RENESAS_RSIP) && \
!defined(NO_WOLFSSL_RENESAS_TSIP_CRYPT_HASH)
#include <wolfssl/wolfcrypt/sha256.h>
int wc_InitSha224_ex(wc_Sha224* sha, void* heap, int devId)
{
return FSPSM_HashInit(sha, heap, devId, FSPSM_SHA224);
}
int wc_Sha224Update(wc_Sha224* sha, const byte* in, word32 sz)
{
return FSPSM_HashUpdate(sha, in, sz);
}
int wc_Sha224Final(wc_Sha224* sha, byte* hash)
{
return FSPSM_HashFinal(sha, hash, WC_SHA224_DIGEST_SIZE);
}
int wc_Sha224GetHash(wc_Sha224* sha, byte* hash)
{
return FSPSM_HashGet(sha, hash, WC_SHA224_DIGEST_SIZE);
}
int wc_Sha224Copy(wc_Sha224* src, wc_Sha224* dst)
{
return FSPSM_HashCopy(src, dst);
}
#endif
#if !defined(NO_SHA256)
#if (defined(WOLFSSL_RENESAS_SCEPROTECT) || \
defined(WOLFSSL_RENESAS_RSIP)) && \
!defined(NO_WOLFSSL_RENESAS_TSIP_CRYPT_HASH)
#include <wolfssl/wolfcrypt/sha256.h>
int wc_InitSha256_ex(wc_Sha256* sha, void* heap, int devId)
{
return FSPSM_HashInit(sha, heap, devId, FSPSM_SHA256);
}
int wc_Sha256Update(wc_Sha256* sha, const byte* in, word32 sz)
{
return FSPSM_HashUpdate(sha, in, sz);
}
int wc_Sha256Final(wc_Sha256* sha, byte* hash)
{
return FSPSM_HashFinal(sha, hash, WC_SHA256_DIGEST_SIZE);
}
int wc_Sha256GetHash(wc_Sha256* sha, byte* hash)
{
return FSPSM_HashGet(sha, hash, WC_SHA256_DIGEST_SIZE);
}
int wc_Sha256Copy(wc_Sha256* src, wc_Sha256* dst)
{
return FSPSM_HashCopy(src, dst);
}
#endif
#endif
#if defined(WOLFSSL_SHA384) && defined(WOLFSSL_RENESAS_RSIP) && \
!defined(NO_WOLFSSL_RENESAS_TSIP_CRYPT_HASH)
#include <wolfssl/wolfcrypt/sha512.h>
int wc_InitSha384_ex(wc_Sha384* sha, void* heap, int devid)
{
return FSPSM_HashInit(sha, heap, devid, FSPSM_SHA384);
}
int wc_Sha384Update(wc_Sha384* sha, const byte* in, word32 sz)
{
return FSPSM_HashUpdate(sha, in, sz);
}
int wc_Sha384Final(wc_Sha384* sha, byte* hash)
{
return FSPSM_HashFinal(sha, hash, WC_SHA384_DIGEST_SIZE);
}
int wc_Sha384GetHash(wc_Sha384* sha, byte* hash)
{
return FSPSM_HashGet(sha, hash, WC_SHA384_DIGEST_SIZE);
}
int wc_Sha384Copy(wc_Sha384* src, wc_Sha384* dst)
{
return FSPSM_HashCopy(src, dst);
}
#endif
#if defined(WOLFSSL_SHA512) && defined(WOLFSSL_RENESAS_RSIP) && \
!defined(NO_WOLFSSL_RENESAS_TSIP_CRYPT_HASH)
#include <wolfssl/wolfcrypt/sha512.h>
int wc_InitSha512_ex(wc_Sha512* sha, void* heap, int devid)
{
return FSPSM_HashInit(sha, heap, devid, FSPSM_SHA512);
}
int wc_Sha512Update(wc_Sha512* sha, const byte* in, word32 sz)
{
return FSPSM_HashUpdate(sha, in, sz);
}
int wc_Sha512Final(wc_Sha512* sha, byte* hash)
{
return FSPSM_HashFinal(sha, hash, WC_SHA512_DIGEST_SIZE);
}
int wc_Sha512GetHash(wc_Sha512* sha, byte* hash)
{
return FSPSM_HashGet(sha, hash, WC_SHA512_DIGEST_SIZE);
}
int wc_Sha512Copy(wc_Sha512* src, wc_Sha512* dst)
{
return FSPSM_HashCopy(src, dst);
}
#if !defined(HAVE_FIPS) && !defined(HAVE_SELFTEST)
#if !defined(WOLFSSL_NOSHA512_224) && \
(defined(WOLFSSL_RENESAS_RSIP) && \
!defined(NO_WOLFSSL_RENESAS_TSIP_CRYPT_HASH))
int wc_InitSha512_224_ex(wc_Sha512* sha, void* heap, int devid)
{
return FSPSM_HashInit(sha, heap, devid, FSPSM_SHA512_224);
}
int wc_Sha512_224Final(wc_Sha512* sha, byte* hash)
{
return FSPSM_HashFinal(sha, hash, WC_SHA512_224_DIGEST_SIZE);
}
int wc_Sha512_224GetHash(wc_Sha512* sha, byte* hash)
{
return FSPSM_HashGet(sha, hash, WC_SHA512_224_DIGEST_SIZE);
}
int wc_Sha512_224Copy(wc_Sha512* src, wc_Sha512* dst)
{
return FSPSM_HashCopy(src, dst);
}
#endif
#if !defined(WOLFSSL_NOSHA512_256) && \
(defined(WOLFSSL_RENESAS_RSIP) && \
!defined(NO_WOLFSSL_RENESAS_TSIP_CRYPT_HASH))
int wc_InitSha512_256_ex(wc_Sha512* sha, void* heap, int devid)
{
return FSPSM_HashInit(sha, heap, devid, FSPSM_SHA512_256);
}
int wc_Sha512_256Final(wc_Sha512* sha, byte* hash)
{
return FSPSM_HashFinal(sha, hash, WC_SHA512_256_DIGEST_SIZE);
}
int wc_Sha512_256GetHash(wc_Sha512* sha, byte* hash)
{
return FSPSM_HashGet(sha, hash, WC_SHA512_256_DIGEST_SIZE);
}
int wc_Sha512_256Copy(wc_Sha512* src, wc_Sha512* dst)
{
return FSPSM_HashCopy(src, dst);
}
#endif
#endif
#endif
#endif
#endif