forked from Mirror/GodMode9
Improved SHA code
Thanks @profi200
This commit is contained in:
parent
db5208a7b8
commit
7a85615a42
@ -1,5 +1,10 @@
|
|||||||
#include "sha.h"
|
#include "sha.h"
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
u32 data[16];
|
||||||
|
} _sha_block;
|
||||||
|
|
||||||
void sha_init(u32 mode)
|
void sha_init(u32 mode)
|
||||||
{
|
{
|
||||||
while(*REG_SHACNT & 1);
|
while(*REG_SHACNT & 1);
|
||||||
@ -12,16 +17,12 @@ void sha_update(const void* src, u32 size)
|
|||||||
|
|
||||||
while(size >= 0x40) {
|
while(size >= 0x40) {
|
||||||
while(*REG_SHACNT & 1);
|
while(*REG_SHACNT & 1);
|
||||||
for(u32 i = 0; i < 4; i++) {
|
*((_sha_block*)REG_SHAINFIFO) = *((const _sha_block*)src32);
|
||||||
*REG_SHAINFIFO = *src32++;
|
src32 += 16;
|
||||||
*REG_SHAINFIFO = *src32++;
|
|
||||||
*REG_SHAINFIFO = *src32++;
|
|
||||||
*REG_SHAINFIFO = *src32++;
|
|
||||||
}
|
|
||||||
size -= 0x40;
|
size -= 0x40;
|
||||||
}
|
}
|
||||||
while(*REG_SHACNT & 1);
|
while(*REG_SHACNT & 1);
|
||||||
memcpy((void*)REG_SHAINFIFO, src32, size);
|
if(size) memcpy((void*)REG_SHAINFIFO, src32, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
void sha_get(void* res) {
|
void sha_get(void* res) {
|
||||||
|
@ -4,8 +4,8 @@
|
|||||||
|
|
||||||
#define REG_SHACNT ((volatile uint32_t*)0x1000A000)
|
#define REG_SHACNT ((volatile uint32_t*)0x1000A000)
|
||||||
#define REG_SHABLKCNT ((volatile uint32_t*)0x1000A004)
|
#define REG_SHABLKCNT ((volatile uint32_t*)0x1000A004)
|
||||||
#define REG_SHAHASH ((volatile uint32_t*)0x1000A040)
|
#define REG_SHAHASH (( uint32_t*)0x1000A040)
|
||||||
#define REG_SHAINFIFO ((volatile uint32_t*)0x1000A080)
|
#define REG_SHAINFIFO ( 0x1000A080)
|
||||||
|
|
||||||
#define SHA_CNT_STATE 0x00000003
|
#define SHA_CNT_STATE 0x00000003
|
||||||
#define SHA_CNT_OUTPUT_ENDIAN 0x00000008
|
#define SHA_CNT_OUTPUT_ENDIAN 0x00000008
|
||||||
|
Loading…
x
Reference in New Issue
Block a user