From 7a85615a426d906c750fb337c9577a7174c150fb Mon Sep 17 00:00:00 2001 From: d0k3 Date: Wed, 14 Mar 2018 00:00:57 +0100 Subject: [PATCH] Improved SHA code Thanks @profi200 --- arm9/source/crypto/sha.c | 15 ++++++++------- arm9/source/crypto/sha.h | 4 ++-- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/arm9/source/crypto/sha.c b/arm9/source/crypto/sha.c index 0d9f737..7173d61 100644 --- a/arm9/source/crypto/sha.c +++ b/arm9/source/crypto/sha.c @@ -1,5 +1,10 @@ #include "sha.h" +typedef struct +{ + u32 data[16]; +} _sha_block; + void sha_init(u32 mode) { while(*REG_SHACNT & 1); @@ -12,16 +17,12 @@ void sha_update(const void* src, u32 size) while(size >= 0x40) { while(*REG_SHACNT & 1); - for(u32 i = 0; i < 4; i++) { - *REG_SHAINFIFO = *src32++; - *REG_SHAINFIFO = *src32++; - *REG_SHAINFIFO = *src32++; - *REG_SHAINFIFO = *src32++; - } + *((_sha_block*)REG_SHAINFIFO) = *((const _sha_block*)src32); + src32 += 16; size -= 0x40; } while(*REG_SHACNT & 1); - memcpy((void*)REG_SHAINFIFO, src32, size); + if(size) memcpy((void*)REG_SHAINFIFO, src32, size); } void sha_get(void* res) { diff --git a/arm9/source/crypto/sha.h b/arm9/source/crypto/sha.h index 10782da..a1b88ec 100644 --- a/arm9/source/crypto/sha.h +++ b/arm9/source/crypto/sha.h @@ -4,8 +4,8 @@ #define REG_SHACNT ((volatile uint32_t*)0x1000A000) #define REG_SHABLKCNT ((volatile uint32_t*)0x1000A004) -#define REG_SHAHASH ((volatile uint32_t*)0x1000A040) -#define REG_SHAINFIFO ((volatile uint32_t*)0x1000A080) +#define REG_SHAHASH (( uint32_t*)0x1000A040) +#define REG_SHAINFIFO ( 0x1000A080) #define SHA_CNT_STATE 0x00000003 #define SHA_CNT_OUTPUT_ENDIAN 0x00000008