65816-crypto/sha1.asm

281 lines
2.4 KiB
NASM
Raw Normal View History

case on
mcopy sha1.macros
mcopy rotate.macros
* Direct page locations
;chunk gequ 0 ; 8 bytes
a_ gequ 8 ; elements of state
b gequ 12
c gequ 16
d gequ 20
e gequ 24
f gequ 28 ; result of function in hash computation
k gequ 32
temp gequ 36
h0 gequ 40
h1 gequ 44
h2 gequ 48
h3 gequ 52
h4 gequ 56
w gequ 60
initial_value privdata
dc h'67452301 efcdab89 98badcfe 10325476 c3d2e1f0'
end
sha1_init start
CFunction SHA1_INIT
end
SHA1_INIT start
lda #$2301
sta h0
lda #$6745
sta h0+2
lda #$AB89
sta h1
lda #$EFCD
sta h1+2
lda #$DCFE
sta h2
lda #$98BA
sta h2+2
lda #$5476
sta h3
lda #$1032
sta h3+2
lda #$E1F0
sta h4
lda #$C3D2
sta h4+2
rtl
end
sha1_processchunk start
CFunction SHA1_PROCESSCHUNK
end
SHA1_PROCESSCHUNK start
ComputeSchedule
lda h0
sta a_
lda h0+2
sta a_+2
lda h1
sta b
lda h1+2
sta b+2
lda h2
sta c
lda h2+2
sta c+2
lda h3
sta d
lda h3+2
sta d+2
lda h4
sta e
lda h4+2
sta e+2
ldy #0
loop cpy #60
bge f_60
cpy #40
bge f_40
cpy #20
bge f_20
* f_0 to f_19
f_0 lda c
eor d
and b
eor d
sta f
lda #$7999
sta k
lda c+2
eor d+2
and b+2
eor d+2
sta f+2
lda #$5A82
sta k+2
bra after_f
* f_20 to f_39
f_20 lda b
eor c
eor d
sta f
lda #$EBA1
sta k
lda b+2
eor c+2
eor d+2
sta f+2
lda #$6ED9
sta k+2
bra after_f
* f_40 to f_59
f_40 lda c
ora d
and b
sta temp
lda c
and d
ora temp
sta f
lda #$BCDC
sta k
lda c+2
ora d+2
and b+2
sta temp
lda c+2
and d+2
ora temp
sta f+2
lda #$8F1B
sta k+2
bra after_f
* f_60 to f_79
f_60 lda b
eor c
eor d
sta f
lda #$C1D6
sta k
lda b+2
eor c+2
eor d+2
sta f+2
lda #$CA62
sta k+2
bra after_f
after_f anop
ROTL4MOVE temp,a_,5
phy
tya
asl a
asl a
tax
clc
lda w,x
adc temp
tay
lda w+2,x
adc temp+2
tax
clc
tya
adc f
tay
txa
adc f+2
tax
clc
tya
adc e
tay
txa
adc e+2
tax
clc
tya
adc k
sta temp
txa
adc k+2
sta temp+2
ply
lda d
sta e
lda d+2
sta e+2
lda c
sta d
lda c+2
sta d+2
ROTL4MOVE c,b,30
lda a_
sta b
lda a_+2
sta b+2
lda temp
sta a_
lda temp+2
sta a_+2
iny
cpy #80
bge endloop
jmp loop
endloop clc
lda h0
adc a_
sta h0
lda h0+2
adc a_+2
sta h0+2
clc
lda h1
adc b
sta h1
lda h1+2
adc b+2
sta h1+2
clc
lda h2
adc c
sta h2
lda h2+2
adc c+2
sta h2+2
clc
lda h3
adc d
sta h3
lda h3+2
adc d+2
sta h3+2
clc
lda h4
adc e
sta h4
lda h4+2
adc e+2
sta h4+2
rtl
end