diff --git a/include/types.h b/include/types.h index ff46275..4332e4b 100644 --- a/include/types.h +++ b/include/types.h @@ -54,3 +54,19 @@ typedef volatile int16_t vs16; typedef volatile int32_t vs32; typedef volatile int64_t vs64; + + +typedef struct +{ + u32 block[3]; +} _u124; + +typedef struct +{ + u32 block[4]; +} _u128; + +typedef struct +{ + u32 block[16]; +} _u512; diff --git a/source/arm9/hardware/crypto.c b/source/arm9/hardware/crypto.c index b41de68..3696158 100644 --- a/source/arm9/hardware/crypto.c +++ b/source/arm9/hardware/crypto.c @@ -580,11 +580,6 @@ #define REG_SHA_HASH ((u32* )(SHA_REGS_BASE + 0x40)) #define REG_SHA_INFIFO ( (SHA_REGS_BASE + 0x80)) -typedef struct -{ - u32 block[16]; -} ShaBlock; - void SHA_start(u8 params) { @@ -593,13 +588,13 @@ void SHA_update(const u32 *data, u32 size) { - while(size >= sizeof(ShaBlock)) + while(size >= 64) { - *((ShaBlock*)REG_SHA_INFIFO) = *((const ShaBlock*)data); - data += sizeof(ShaBlock) / 4; + *((_u512*)REG_SHA_INFIFO) = *((const _u512*)data); + data += 16; while(REG_SHA_CNT & SHA_ENABLE); - size -= sizeof(ShaBlock); + size -= 64; } if(size) memcpy((void*)REG_SHA_INFIFO, data, size);