Improved SHA code

Thanks @profi200
This commit is contained in:
d0k3 2018-03-14 00:00:57 +01:00
parent db5208a7b8
commit 7a85615a42
2 changed files with 10 additions and 9 deletions

View File

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

View File

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