mirror of
https://github.com/sheumann/65816-crypto.git
synced 2025-02-22 07:28:59 +00:00
Compute SHA-1 message schedule 20 elements at a time, reusing storage.
The reduces the storage needed and boosts performance, since the whole schedule is contained in the direct page.
This commit is contained in:
parent
7182fc5817
commit
aab47e38e7
10
sha1.asm
10
sha1.asm
@ -62,9 +62,6 @@ sha1_processchunk start
|
|||||||
end
|
end
|
||||||
|
|
||||||
SHA1_PROCESSCHUNK start
|
SHA1_PROCESSCHUNK start
|
||||||
|
|
||||||
ComputeSchedule
|
|
||||||
|
|
||||||
lda h0
|
lda h0
|
||||||
sta a_
|
sta a_
|
||||||
lda h0+2
|
lda h0+2
|
||||||
@ -90,10 +87,17 @@ SHA1_PROCESSCHUNK start
|
|||||||
lda h4+2
|
lda h4+2
|
||||||
sta e+2
|
sta e+2
|
||||||
|
|
||||||
|
ComputeSchedule 1
|
||||||
ldx #0
|
ldx #0
|
||||||
BlockLoopPart 1
|
BlockLoopPart 1
|
||||||
|
ComputeSchedule 2
|
||||||
|
ldx #0
|
||||||
BlockLoopPart 2
|
BlockLoopPart 2
|
||||||
|
ComputeSchedule 3
|
||||||
|
ldx #0
|
||||||
BlockLoopPart 3
|
BlockLoopPart 3
|
||||||
|
ComputeSchedule 4
|
||||||
|
ldx #0
|
||||||
BlockLoopPart 4
|
BlockLoopPart 4
|
||||||
|
|
||||||
endloop clc
|
endloop clc
|
||||||
|
86
sha1.macros
86
sha1.macros
@ -105,81 +105,72 @@ dorotl
|
|||||||
* Macros to operate on elements of the message schedule (W)
|
* Macros to operate on elements of the message schedule (W)
|
||||||
macro
|
macro
|
||||||
&lab lda_w &i,&inc
|
&lab lda_w &i,&inc
|
||||||
|
lcla &j
|
||||||
|
&j seta &i
|
||||||
|
.modloop1
|
||||||
|
aif &j<20,.goodidx1
|
||||||
|
&j seta &j-20
|
||||||
|
ago .modloop1
|
||||||
|
.goodidx1
|
||||||
aif C:&inc<>0,.haveinc
|
aif C:&inc<>0,.haveinc
|
||||||
lcla &inc
|
lcla &inc
|
||||||
.haveinc
|
.haveinc
|
||||||
aif w+(&i)*4+&inc>255,.bigidx
|
&lab lda w+(&j)*4+&inc
|
||||||
&lab lda w+(&i)*4+&inc
|
|
||||||
ago .end
|
|
||||||
.bigidx
|
|
||||||
&lab ldx #((&i)-16)*4+&inc
|
|
||||||
lda w+16*4,x
|
|
||||||
.end
|
|
||||||
mend
|
mend
|
||||||
|
|
||||||
macro
|
macro
|
||||||
&lab eor_w &i,&inc
|
&lab eor_w &i,&inc
|
||||||
|
lcla &j
|
||||||
|
&j seta &i
|
||||||
|
.modloop2
|
||||||
|
aif &j<20,.goodidx2
|
||||||
|
&j seta &j-20
|
||||||
|
ago .modloop2
|
||||||
|
.goodidx2
|
||||||
aif C:&inc<>0,.haveinc
|
aif C:&inc<>0,.haveinc
|
||||||
lcla &inc
|
lcla &inc
|
||||||
.haveinc
|
.haveinc
|
||||||
aif w+(&i)*4+&inc>255,.bigidx
|
&lab eor w+(&j)*4+&inc
|
||||||
&lab eor w+(&i)*4+&inc
|
|
||||||
ago .end
|
|
||||||
.bigidx
|
|
||||||
&lab ldx #((&i)-16)*4+&inc
|
|
||||||
eor w+16*4,x
|
|
||||||
.end
|
|
||||||
mend
|
mend
|
||||||
|
|
||||||
macro
|
macro
|
||||||
&lab sta_w &i,&inc
|
&lab sta_w &i,&inc
|
||||||
|
lcla &j
|
||||||
|
&j seta &i
|
||||||
|
.modloop3
|
||||||
|
aif &j<20,.goodidx3
|
||||||
|
&j seta &j-20
|
||||||
|
ago .modloop3
|
||||||
|
.goodidx3
|
||||||
aif C:&inc<>0,.haveinc
|
aif C:&inc<>0,.haveinc
|
||||||
lcla &inc
|
lcla &inc
|
||||||
.haveinc
|
.haveinc
|
||||||
aif w+(&i)*4+&inc>255,.bigidx
|
&lab sta w+(&j)*4+&inc
|
||||||
&lab sta w+(&i)*4+&inc
|
|
||||||
ago .end
|
|
||||||
.bigidx
|
|
||||||
&lab ldx #((&i)-16)*4+&inc
|
|
||||||
sta w+16*4,x
|
|
||||||
.end
|
|
||||||
mend
|
|
||||||
|
|
||||||
macro
|
|
||||||
&lab inc_w &i,&inc
|
|
||||||
aif C:&inc<>0,.haveinc
|
|
||||||
lcla &inc
|
|
||||||
.haveinc
|
|
||||||
aif w+(&i)*4+&inc>255,.bigidx
|
|
||||||
&lab inc w+(&i)*4+&inc
|
|
||||||
ago .end
|
|
||||||
.bigidx
|
|
||||||
&lab ldx #((&i)-16)*4+&inc
|
|
||||||
inc w+16*4,x
|
|
||||||
.end
|
|
||||||
mend
|
mend
|
||||||
|
|
||||||
macro
|
macro
|
||||||
&lab rol_w &i,&inc
|
&lab rol_w &i,&inc
|
||||||
|
lcla &j
|
||||||
|
&j seta &i
|
||||||
|
.modloop4
|
||||||
|
aif &j<20,.goodidx4
|
||||||
|
&j seta &j-20
|
||||||
|
ago .modloop4
|
||||||
|
.goodidx4
|
||||||
aif C:&inc<>0,.haveinc
|
aif C:&inc<>0,.haveinc
|
||||||
lcla &inc
|
lcla &inc
|
||||||
.haveinc
|
.haveinc
|
||||||
aif w+(&i)*4+&inc>255,.bigidx
|
&lab rol w+(&j)*4+&inc
|
||||||
&lab rol w+(&i)*4+&inc
|
|
||||||
ago .end
|
|
||||||
.bigidx
|
|
||||||
&lab ldx #((&i)-16)*4+&inc
|
|
||||||
rol w+16*4,x
|
|
||||||
.end
|
|
||||||
mend
|
mend
|
||||||
|
|
||||||
|
|
||||||
* Compute the message schedule (W_0 to W_79)
|
* Compute one part of the message schedule (20 elements)
|
||||||
macro
|
macro
|
||||||
ComputeSchedule
|
ComputeSchedule &part
|
||||||
lcla &i
|
lcla &i
|
||||||
|
|
||||||
; Flip the endianness of W_0 to W_15 (the current chunk of the message)
|
; Flip the endianness of W_0 to W_15 (the current chunk of the message)
|
||||||
|
aif &part<>1,.skippart1
|
||||||
.loop1
|
.loop1
|
||||||
lda w+&i*4
|
lda w+&i*4
|
||||||
xba
|
xba
|
||||||
@ -190,8 +181,11 @@ dorotl
|
|||||||
sta w+&i*4
|
sta w+&i*4
|
||||||
&i seta &i+1
|
&i seta &i+1
|
||||||
aif &i<16,.loop1
|
aif &i<16,.loop1
|
||||||
|
.skippart1
|
||||||
|
|
||||||
; compute the rest of the message schedule (W_16 to W_79)
|
; compute the rest of the message schedule (W_16 to W_79)
|
||||||
|
aif &part=1,.loop2
|
||||||
|
&i seta (&part-1)*20
|
||||||
.loop2
|
.loop2
|
||||||
lda_w &i-3
|
lda_w &i-3
|
||||||
eor_w &i-8
|
eor_w &i-8
|
||||||
@ -210,7 +204,7 @@ dorotl
|
|||||||
rol_w &i
|
rol_w &i
|
||||||
|
|
||||||
&i seta &i+1
|
&i seta &i+1
|
||||||
aif &i<80,.loop2
|
aif &i<&part*20,.loop2
|
||||||
mend
|
mend
|
||||||
|
|
||||||
|
|
||||||
@ -344,7 +338,7 @@ loop&part anop
|
|||||||
inx
|
inx
|
||||||
inx
|
inx
|
||||||
inx
|
inx
|
||||||
cpx #&part*20*4
|
cpx #20*4
|
||||||
bge endloop&part
|
bge endloop&part
|
||||||
jmp loop&part
|
jmp loop&part
|
||||||
endloop&part anop
|
endloop&part anop
|
||||||
|
Loading…
x
Reference in New Issue
Block a user