[keccak-asm] keccak_ctx2hash in asm
This commit is contained in:
parent
29a44972ae
commit
c224e9cb51
|
@ -329,7 +329,7 @@ chi_step:
|
||||||
keccak_nextBlock:
|
keccak_nextBlock:
|
||||||
movw ZL, r24
|
movw ZL, r24
|
||||||
subi ZL, lo8(-ctx_bs)
|
subi ZL, lo8(-ctx_bs)
|
||||||
sbci ZL, hi8(-ctx_bs)
|
sbci ZH, hi8(-ctx_bs)
|
||||||
ld r20, Z
|
ld r20, Z
|
||||||
movw XL, r24
|
movw XL, r24
|
||||||
movw ZL, r22
|
movw ZL, r22
|
||||||
|
@ -340,8 +340,10 @@ keccak_nextBlock:
|
||||||
st X+, r22
|
st X+, r22
|
||||||
dec r20
|
dec r20
|
||||||
brne 10b
|
brne 10b
|
||||||
|
.endfunc
|
||||||
|
|
||||||
.global keccak_f1600
|
.global keccak_f1600
|
||||||
|
.func keccak_f1600
|
||||||
keccak_f1600:
|
keccak_f1600:
|
||||||
push_range 2, 9
|
push_range 2, 9
|
||||||
push r16
|
push r16
|
||||||
|
@ -619,5 +621,71 @@ icall_r16_times:
|
||||||
pop_range 28, 29
|
pop_range 28, 29
|
||||||
pop r16
|
pop r16
|
||||||
pop_range 2, 9
|
pop_range 2, 9
|
||||||
|
|
||||||
ret
|
ret
|
||||||
|
.endfunc
|
||||||
|
|
||||||
|
/*
|
||||||
|
void keccak_ctx2hash(void* dest, uint16_t length_b, keccak_ctx_t* ctx){
|
||||||
|
while(length_b>=ctx->r){
|
||||||
|
memcpy(dest, ctx->a, ctx->bs);
|
||||||
|
dest = (uint8_t*)dest + ctx->bs;
|
||||||
|
length_b -= ctx->r;
|
||||||
|
keccak_f1600(ctx->a);
|
||||||
|
}
|
||||||
|
memcpy(dest, ctx->a, (length_b+7)/8);
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
.global keccak_ctx2hash
|
||||||
|
.func keccak_ctx2hash
|
||||||
|
keccak_ctx2hash:
|
||||||
|
push_range 2, 10
|
||||||
|
movw r4, r20
|
||||||
|
movw r6, r24
|
||||||
|
movw ZL, r24
|
||||||
|
movw r8, r22
|
||||||
|
subi ZL, lo8(-ctx_r)
|
||||||
|
subi ZH, hi8(-ctx_r)
|
||||||
|
ld r2, Z+
|
||||||
|
ld r3, Z+
|
||||||
|
ldd r10, Z+3 ; load blocksize (in bytes)
|
||||||
|
10:
|
||||||
|
cp r8, r2
|
||||||
|
cpc r9, r3
|
||||||
|
brcc 40f
|
||||||
|
movw XL, r4
|
||||||
|
movw ZL, r6
|
||||||
|
mov r24, r10
|
||||||
|
20:
|
||||||
|
ld r22, X+
|
||||||
|
st Z+, r22
|
||||||
|
dec r24
|
||||||
|
brne 20b
|
||||||
|
movw r6, ZL
|
||||||
|
sub r8, r2
|
||||||
|
sbc r9, r3
|
||||||
|
movw r24, r4
|
||||||
|
rcall keccak_f1600
|
||||||
|
rjmp 10b
|
||||||
|
40:
|
||||||
|
movw XL, r4
|
||||||
|
movw ZL, r6
|
||||||
|
movw r24, r8
|
||||||
|
adiw r24, 7
|
||||||
|
lsr r25
|
||||||
|
ror r24
|
||||||
|
lsr r25
|
||||||
|
ror r24
|
||||||
|
lsr r25
|
||||||
|
ror r24
|
||||||
|
adiw r24, 0
|
||||||
|
breq 99f
|
||||||
|
10:
|
||||||
|
ld r22, X+
|
||||||
|
st Z+, r22
|
||||||
|
sbiw r24, 1
|
||||||
|
brne 10b
|
||||||
|
99:
|
||||||
|
pop_range 2, 10
|
||||||
|
ret
|
||||||
|
.endfunc
|
||||||
|
|
||||||
|
|
|
@ -106,16 +106,6 @@ void keccak_lastBlock(keccak_ctx_t* ctx, const void* block, uint16_t length_b){
|
||||||
keccak_f1600(ctx->a);
|
keccak_f1600(ctx->a);
|
||||||
}
|
}
|
||||||
|
|
||||||
void keccak_ctx2hash(void* dest, uint16_t length_b, keccak_ctx_t* ctx){
|
|
||||||
while(length_b>=ctx->r){
|
|
||||||
memcpy(dest, ctx->a, ctx->bs);
|
|
||||||
dest = (uint8_t*)dest + ctx->bs;
|
|
||||||
length_b -= ctx->r;
|
|
||||||
keccak_f1600(ctx->a);
|
|
||||||
}
|
|
||||||
memcpy(dest, ctx->a, (length_b+7)/8);
|
|
||||||
}
|
|
||||||
|
|
||||||
void keccak224_ctx2hash(void* dest, keccak_ctx_t* ctx){
|
void keccak224_ctx2hash(void* dest, keccak_ctx_t* ctx){
|
||||||
keccak_ctx2hash(dest, 224, ctx);
|
keccak_ctx2hash(dest, 224, ctx);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue