A2osX/SYS/KERNEL.S.MD5X.txt

489 lines
9.9 KiB
Plaintext
Raw Normal View History

2020-01-20 07:23:51 +00:00
NEW
AUTO 3,1
*--------------------------------------
2020-11-19 15:34:02 +00:00
.DUMMY ZPTMP,6
2020-01-21 16:35:11 +00:00
.OR ZPTMP 29 bytes
ZPCtxPtr .BS 2
2021-05-15 14:35:24 +00:00
ZPDataLen .BS 2
2020-01-21 16:35:11 +00:00
ZPChunkLen .BS 2
2021-04-29 11:56:34 +00:00
.ED
2020-01-20 07:23:51 +00:00
*--------------------------------------
* DWORD Macros : Do NOT disturb carry with cpx, cpy...
*--------------------------------------
.MA ADC32
ldx #3
ldy #0
clc
:1 lda ]1,y
adc ]2,y
sta ]3,y
iny
dex
bpl :1
.EM
*--------------------------------------
.MA AND32
ldx #3
:1 lda ]1,x
and ]2,x
sta ]3,x
dex
bpl :1
.EM
*--------------------------------------
.MA ORA32
ldx #3
:1 lda ]1,x
ora ]2,x
sta ]3,x
dex
bpl :1
.EM
*--------------------------------------
.MA EOR32
ldx #3
:1 lda ]1,x
eor ]2,x
sta ]3,x
dex
bpl :1
.EM
*--------------------------------------
.MA NOT32
ldx #3
:1 lda ]1,x
eor #$FF
sta ]2,x
dex
bpl :1
.EM
*--------------------------------------
.MA MOV32
ldx #3
:1 lda ]1,x
sta ]2,x
dex
bpl :1
.EM
*--------------------------------------
.MA ROL32x
:2 lda ]1+3
rol
rol ]1
rol ]1+1
rol ]1+2
rol ]1+3
dex
bne :2
.EM
2020-01-24 07:00:30 +00:00
*--------------------------------------
2020-02-03 22:06:28 +00:00
MD5X.MD5 ldy #$ff
.1 iny
2021-05-04 17:31:21 +00:00
jsr SHARED.TXTPTRgY
2020-02-03 22:06:28 +00:00
bne .1
2021-05-15 14:35:24 +00:00
sty ZPDataLen
stz ZPDataLen+1
2020-02-03 22:06:28 +00:00
jsr MD5X.Init
2021-05-15 14:35:24 +00:00
bcs MD5X.RTS
2020-02-03 22:06:28 +00:00
pha save MD5 Context hMem
jsr MD5X.Update.I
jmp MD5X.Finalize.I
*--------------------------------------
2020-01-24 14:21:08 +00:00
MD5X.Init >LDYAI S.MD5
2021-05-09 12:39:40 +00:00
jsr K.GetMem
2021-05-15 14:35:24 +00:00
bcs MD5X.RTS
2020-01-20 07:23:51 +00:00
>STYA ZPCtxPtr
2020-01-24 14:21:08 +00:00
2020-01-30 14:59:40 +00:00
ldy #0
2020-01-20 07:23:51 +00:00
.1 lda MD5.ABCDINIT,y
sta (ZPCtxPtr),y
2020-01-30 14:59:40 +00:00
iny
cpy #S.MD5.BITCOUNT
2020-01-30 14:59:40 +00:00
bne .1
lda #0
.2 sta (ZPCtxPtr),y
iny
cpy #S.MD5
bne .2
2020-01-20 07:23:51 +00:00
txa
clc
2021-05-15 14:35:24 +00:00
MD5X.RTS rts
2020-01-24 07:00:30 +00:00
*--------------------------------------
2021-05-09 12:39:40 +00:00
MD5X.Update jsr K.GetMemPtr get MD5 Context
2020-02-03 22:06:28 +00:00
>STYA ZPCtxPtr
2021-05-15 14:35:24 +00:00
>LDYA FORPNT
>STYA ZPDataLen
2020-02-03 22:06:28 +00:00
MD5X.Update.I ldy #S.MD5.FINALIZED
2020-01-20 07:23:51 +00:00
lda (ZPCtxPtr),y
sec
2021-05-15 14:35:24 +00:00
bne MD5X.RTS
2020-01-24 14:21:08 +00:00
2021-05-15 14:35:24 +00:00
.1 lda ZPDataLen+1 More than 256 Bytes remaining to hash ?
2020-01-20 07:23:51 +00:00
bne .3 yes
2020-01-24 14:21:08 +00:00
2021-05-15 14:35:24 +00:00
lda ZPDataLen
clc
beq MD5X.RTS Len = O, all data processed
2020-01-24 14:21:08 +00:00
2021-05-15 14:35:24 +00:00
cmp #64 More than 64 Bytes remaining to hash ?
2020-01-20 07:23:51 +00:00
bcc .50 yes
2020-01-24 14:21:08 +00:00
2020-01-20 07:23:51 +00:00
.3 lda #64
.50 sta ZPChunkLen Save Chunk Len
2020-01-24 14:21:08 +00:00
2021-05-04 17:31:21 +00:00
jsr MD5UpdBC
2020-01-23 16:38:42 +00:00
2020-01-20 07:23:51 +00:00
ldy #0
2020-01-23 16:38:42 +00:00
2021-05-04 17:31:21 +00:00
.51 jsr SHARED.TXTPTRgY Load Buffer with data
sta MD5.Buf,y
2020-01-20 07:23:51 +00:00
iny
cpy ZPChunkLen
bne .51
2020-01-23 16:38:42 +00:00
2020-01-20 07:23:51 +00:00
cpy #64 Full 64 Bytes DATA ?
beq .58
* Append "$80" & Padding & original size
lda #$80 no, Append $80
2021-05-04 17:31:21 +00:00
sta MD5.Buf,y
2020-01-20 07:23:51 +00:00
lda #0
.52 iny Pad with 0 to 64
cpy #64
beq .53
2021-05-04 17:31:21 +00:00
sta MD5.Buf,y
2020-01-20 07:23:51 +00:00
bra .52
.53 ldy #S.MD5.EXTRABIT Mark MD5 Context as Appended
lda #$80
sta (ZPCtxPtr),y
lda ZPChunkLen
cmp #56 Enough room for BITCOUNT ?
bcs .58 no
2021-05-09 12:39:40 +00:00
2021-05-04 17:31:21 +00:00
jsr MD5AppBC
2021-05-09 12:39:40 +00:00
2020-01-20 07:23:51 +00:00
.58 jsr MD5Transform
jsr MD5UpdateABCD0
2021-05-09 12:39:40 +00:00
2021-05-15 14:35:24 +00:00
.8 lda ZPDataLen Substract Bytes processed from LEN
2020-01-20 07:23:51 +00:00
sec
sbc ZPChunkLen get back chunk Len
2021-05-15 14:35:24 +00:00
sta ZPDataLen
2020-01-20 07:23:51 +00:00
bcs .81
2021-05-09 12:39:40 +00:00
2021-05-15 14:35:24 +00:00
dec ZPDataLen+1
2020-01-23 16:38:42 +00:00
.81 lda TXTPTR Add Bytes processed to DATA
2020-01-20 07:23:51 +00:00
clc
adc ZPChunkLen
2020-01-23 16:38:42 +00:00
sta TXTPTR
2020-01-20 07:23:51 +00:00
bcc .1
2020-01-23 16:38:42 +00:00
inc TXTPTR+1
2020-01-20 07:23:51 +00:00
bra .1
2020-01-24 07:00:30 +00:00
*--------------------------------------
2020-02-03 22:06:28 +00:00
MD5X.Finalize pha
2021-05-09 12:39:40 +00:00
jsr K.GetMemPtr
2020-02-03 22:06:28 +00:00
>STYA ZPCtxPtr get MD5 Context
MD5X.Finalize.I ldy #S.MD5.FINALIZED
2020-01-20 07:23:51 +00:00
lda (ZPCtxPtr),y
2020-02-03 22:06:28 +00:00
bne .1
2020-01-31 20:26:51 +00:00
2020-01-20 07:23:51 +00:00
jsr MD5ExtraChunk
2020-01-31 20:26:51 +00:00
2020-02-03 22:06:28 +00:00
.1 ldy #S.MD5.ABCD0
2020-01-20 07:23:51 +00:00
2020-02-03 22:06:28 +00:00
.2 lda (ZPCtxPtr),y
2020-01-20 07:23:51 +00:00
lsr
lsr
lsr
lsr
tax
lda MD5.DIGITS,x
2021-05-04 17:31:21 +00:00
jsr SHARED.FORPNTpn
2020-01-23 16:38:42 +00:00
lda (ZPCtxPtr),y
2020-01-20 07:23:51 +00:00
and #$0F
tax
lda MD5.DIGITS,x
2021-05-04 17:31:21 +00:00
jsr SHARED.FORPNTpn
2020-01-23 16:38:42 +00:00
iny
2020-01-20 07:23:51 +00:00
cpy #S.MD5.ABCD0+16
2020-02-03 22:06:28 +00:00
bne .2
2020-01-23 16:38:42 +00:00
2020-01-20 07:23:51 +00:00
lda #0
2021-05-04 17:31:21 +00:00
jsr SHARED.FORPNTpn
2020-02-03 22:06:28 +00:00
pla
jmp K.FreeMem
2020-01-20 07:23:51 +00:00
*--------------------------------------
* PRIVATE
*--------------------------------------
* MD5AppendBitCount
* In :
* ZPCtxPtr = MD5 Context
*--------------------------------------
2021-05-04 17:31:21 +00:00
MD5AppBC ldx #56
2020-01-20 07:23:51 +00:00
ldy #S.MD5.BITCOUNT Append 8 Bytes of BITCOUNT
.1 lda (ZPCtxPtr),y
2021-05-04 17:31:21 +00:00
sta MD5.Buf,x
2020-01-20 07:23:51 +00:00
inx
iny
cpy #S.MD5.BITCOUNT+8
bne .1
ldy #S.MD5.FINALIZED Mark MD5 Context as Finalized
lda #$80
sta (ZPCtxPtr),y
rts
*--------------------------------------
* MD5UpdateBitCount
* In :
* CL = Size (in bytes) to add to MD5 context
* ZPCtxPtr = MD5 Context
*--------------------------------------
2021-05-04 17:31:21 +00:00
MD5UpdBC stz ZPChunkLen+1
2020-01-20 07:23:51 +00:00
lda ZPChunkLen
asl
rol ZPChunkLen+1
asl times 8 to get bit count
rol ZPChunkLen+1
asl
rol ZPChunkLen+1
clc
ldy #S.MD5.BITCOUNT
adc (ZPCtxPtr),y
sta (ZPCtxPtr),y
iny
lda ZPChunkLen+1
adc (ZPCtxPtr),y
sta (ZPCtxPtr),y
bcc .8
.1 iny
lda (ZPCtxPtr),y
inc
sta (ZPCtxPtr),y
bne .8
cpy #7
bne .1
.8 rts
*--------------------------------------
* MD5ExtraChunk
* In :
* ZPCtxPtr = MD5 Context
*--------------------------------------
MD5ExtraChunk ldy #S.MD5.FINALIZED
lda #$80
sta (ZPCtxPtr),y Mark MD5 Context as "finalized"
ldx #0
ldy #S.MD5.EXTRABIT Extra Bit already appended ?
lda (ZPCtxPtr),y
bne .1
lda #$80
2021-05-04 17:31:21 +00:00
sta MD5.Buf Add extra bit to buffer
2020-01-20 07:23:51 +00:00
sta (ZPCtxPtr),y Mark Extrabit added
inx
2021-05-04 17:31:21 +00:00
.1 stz MD5.Buf,x pad with "0"...
2020-01-20 07:23:51 +00:00
inx
cpx #56
bne .1 ...until room for bitcount
2021-05-04 17:31:21 +00:00
jsr MD5AppBC
2020-01-20 07:23:51 +00:00
jsr MD5Transform
*--------------------------------------
* MD5UpdateABCD0
* In:
* ZPCtxPtr = MD5 Context
*--------------------------------------
MD5UpdateABCD0 ldy #0
.1 clc ADC32 A+A0->A0, B, C, D....
.2 lda MD5.ABCD,y
adc (ZPCtxPtr),y
sta (ZPCtxPtr),y
iny
tya
and #3
bne .2
cpy #16
bne .1
rts
*--------------------------------------
* MD5Transform
* In:
* ZPCtxPtr = MD5 Context
* 512 Bits Padded chunk in MD5.BUFFER64
* Out:
* Updated MD5.ABCD
*--------------------------------------
MD5Transform ldy #15 init ABCD Chunk with Context ABCD0
.1 lda (ZPCtxPtr),y
sta MD5.ABCD,y
dey
bpl .1
stz MD5.i Start Proceed 0 to 63 bytes
lda #0 lda MD5.i
.2 lsr
lsr
lsr
and #6
tax
jsr MD5.XXXX
inc MD5.i
lda MD5.i
cmp #64
bne .2
rts
*--------------------------------------
MD5.XXXX jmp (.1,x)
.1 .DA MD5.0015
.DA MD5.1631
.DA MD5.3247
.DA MD5.4863
*--------------------------------------
MD5.0015 >AND32 MD5.B,MD5.C,MD5.F1
>NOT32 MD5.B,MD5.F2
>AND32 MD5.F2,MD5.D,MD5.F2
>ORA32 MD5.F1,MD5.F2,MD5.F
jmp MD5.XXXX.END
*--------------------------------------
MD5.1631 >AND32 MD5.D,MD5.B,MD5.F1
>NOT32 MD5.D,MD5.F2
>AND32 MD5.F2,MD5.C,MD5.F2
>ORA32 MD5.F1,MD5.F2,MD5.F
bra MD5.XXXX.END
*--------------------------------------
MD5.3247 >EOR32 MD5.B,MD5.C,MD5.F
>EOR32 MD5.F,MD5.D,MD5.F
bra MD5.XXXX.END
*--------------------------------------
MD5.4863 >NOT32 MD5.D,MD5.F1
>ORA32 MD5.F1,MD5.B,MD5.F2
>EOR32 MD5.F2,MD5.C,MD5.F
*--------------------------------------
MD5.XXXX.END >MOV32 MD5.D,MD5.DTemp
>MOV32 MD5.C,MD5.D
>MOV32 MD5.B,MD5.C
>ADC32 MD5.A,MD5.F,MD5.F
lda MD5.i
asl
asl
tay
ldx #0
clc
.1 lda MD5.K,y ADC32 MD5.K[i],MD5.F,MD5.F
adc MD5.F,x
sta MD5.F,x
iny
inx
txa
eor #4 DO NOT DISTURB carry with cpx !!!
bne .1
ldy MD5.i
lda MD5.g,y
asl
asl
tay
ldx #0
clc
2021-05-04 17:31:21 +00:00
.2 lda MD5.Buf,y ADC32 M[g],MD5.F,MD5.F
2020-01-20 07:23:51 +00:00
adc MD5.F,x
sta MD5.F,x
iny
inx
txa
eor #4 DO NOT DISTURB carry with cpx !!!
bne .2
ldy MD5.i
ldx MD5.s,y get s[i] in x
>ROL32x MD5.F
>ADC32 MD5.B,MD5.F,MD5.B
>MOV32 MD5.DTemp,MD5.A
rts
*--------------------------------------
MD5.ABCDINIT .HS 01234567.89ABCDEF.FEDCBA98.76543210
*--------------------------------------
MD5.s .DA #7,#12,#17,#22,#7,#12,#17,#22,#7,#12,#17,#22,#7,#12,#17,#22
.DA #5,#9,#14,#20,#5,#9,#14,#20,#5,#9,#14,#20,#5,#9,#14,#20
.DA #4,#11,#16,#23,#4,#11,#16,#23,#4,#11,#16,#23,#4,#11,#16,#23
.DA #6,#10,#15,#21,#6,#10,#15,#21,#6,#10,#15,#21,#6,#10,#15,#21
*--------------------------------------
MD5.g .DA #0,#1,#2,#3,#4,#5,#6,#7,#8,#9,#10,#11,#12,#13,#14,#15
.DA #1,#6,#11,#0,#5,#10,#15,#4,#9,#14,#3,#8,#13,#2,#7,#12
.DA #5,#8,#11,#14,#1,#4,#7,#10,#13,#0,#3,#6,#9,#12,#15,#2
.DA #0,#7,#14,#5,#12,#3,#10,#1,#8,#15,#6,#13,#4,#11,#2,#9
*--------------------------------------
MD5.K .HS 78A46AD7.56B7C7E8.DB702024.EECEBDC1
.HS AF0F7CF5.2AC68747.134630A8.019546FD
.HS D8988069.AFF7448B.B15BFFFF.BED75C89
.HS 2211906B.937198FD.8E4379A6.2108B449
.HS 62251EF6.40B340C0.515A5E26.AAC7B6E9
.HS 5D102FD6.53144402.81E6A1D8.C8FBD3E7
.HS E6CDE121.D60737C3.870DD5F4.ED145A45
.HS 05E9E3A9.F8A3EFFC.D9026F67.8A4C2A8D
.HS 4239FAFF.81F67187.22619D6D.0C38E5FD
.HS 44EABEA4.A9CFDE4B.604BBBF6.70BCBFBE
.HS C67E9B28.FA27A1EA.8530EFD4.051D8804
.HS 39D0D4D9.E599DBE6.F87CA21F.6556ACC4
.HS 442229F4.97FF2A43.A72394AB.39A093FC
.HS C3595B65.92CC0C8F.7DF4EFFF.D15D8485
.HS 4F7EA86F.E0E62CFE.144301A3.A111084E
.HS 827E53F7.35F23ABD.BBD2D72A.91D386EB
*--------------------------------------
2020-01-21 16:35:11 +00:00
MD5.DIGITS .AS "0123456789abcdef"
2020-01-20 07:23:51 +00:00
*--------------------------------------
MD5.ABCD
MD5.A .BS 4 Chunk Level,A,B,C,D
MD5.B .BS 4
MD5.C .BS 4
MD5.D .BS 4
MD5.F1 .BS 4
MD5.F2 .BS 4
MD5.DTemp .BS 4
MD5.F .BS 4
MD5.i .BS 1
2021-05-04 17:31:21 +00:00
MD5.Buf .BS 64
2020-01-20 07:23:51 +00:00
*--------------------------------------
MAN
2020-12-15 13:23:22 +00:00
SAVE usr/src/sys/kernel.s.md5x
LOAD usr/src/sys/kernel.s
2020-01-20 07:23:51 +00:00
ASM