From b7d772700a416efa16b690b519387cbb86fef2c6 Mon Sep 17 00:00:00 2001 From: JacobBarthelmeh Date: Tue, 4 Feb 2020 16:03:45 -0800 Subject: [PATCH] update sha256 support for endian --- wolfcrypt/src/sha256.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/wolfcrypt/src/sha256.c b/wolfcrypt/src/sha256.c index 31a56ed36..cc2a1a280 100644 --- a/wolfcrypt/src/sha256.c +++ b/wolfcrypt/src/sha256.c @@ -551,14 +551,29 @@ static int InitSha256(wc_Sha256* sha256) #define WOLFSSL_SCE_SHA256_HANDLE g_sce_hash_0 #endif + #define WC_SHA256_DIGEST_WORD_SIZE 16 #define XTRANSFORM(S, D) wc_Sha256SCE_XTRANSFORM((S), (D)) static int wc_Sha256SCE_XTRANSFORM(wc_Sha256* sha256, const byte* data) { + if (g_sce.p_cfg->endian_flag == CRYPTO_WORD_ENDIAN_LITTLE) + { + ByteReverseWords((word32*)data, (word32*)data, WC_SHA256_BLOCK_SIZE); + ByteReverseWords(sha256->digest, sha256->digest, WC_SHA256_DIGEST_SIZE); + } + if (WOLFSSL_SCE_SHA256_HANDLE.p_api->hashUpdate(WOLFSSL_SCE_SHA256_HANDLE.p_ctrl, - (word32*)data, 8, sha256->digest) != SSP_SUCCESS) { + (word32*)data, WC_SHA256_DIGEST_WORD_SIZE, + sha256->digest) != SSP_SUCCESS) { WOLFSSL_MSG("Unexpected hardware return value"); return WC_HW_E; } + + if (g_sce.p_cfg->endian_flag == CRYPTO_WORD_ENDIAN_LITTLE) + { + ByteReverseWords((word32*)data, (word32*)data, WC_SHA256_BLOCK_SIZE); + ByteReverseWords(sha256->digest, sha256->digest, WC_SHA256_DIGEST_SIZE); + } + return 0; }