A2osX/LIB/LIBCRYPT.S.txt

935 lines
19 KiB
Plaintext
Raw Normal View History

2020-10-12 09:19:39 +00:00
NEW
AUTO 3,1
.LIST OFF
.OP 65C02
.OR $2000
.TF lib/libcrypt
*--------------------------------------
.INB inc/macros.i
.INB inc/a2osx.i
.INB inc/libcrypt.i
*--------------------------------------
.DUMMY
.OR ZPLIB
ZS.START
ZPCtxPtr .BS 2
ZPDataPtr .BS 2
ZPHashPtr .BS 2
ZPChunkLen .BS 2
2021-06-06 19:06:49 +00:00
* MD.MODE .BS 1 32 BYTES MAX !!!!!
2020-10-12 09:19:39 +00:00
2021-06-06 01:35:30 +00:00
MD4.ABCD
MD5.ABCD
MD4.A
MD5.A .BS 4 Chunk Level,A,B,C,D
MD4.B
MD5.B .BS 4
MD4.C
MD5.C .BS 4
MD4.D
MD5.D .BS 4
MD4.F1
MD5.F1 .BS 4
MD4.F2
MD5.F2 .BS 4
2020-10-12 09:19:39 +00:00
ZS.END .ED
*--------------------------------------
* DWORD Macros : Do NOT disturb carry with cpx, cpy...
*--------------------------------------
.MA ADC32
2021-06-06 01:35:30 +00:00
ldy #3
ldx #0
2020-10-12 09:19:39 +00:00
clc
2021-06-06 01:35:30 +00:00
:1 lda ]1,x
adc ]2,x
sta ]3,x
inx
dey
2020-10-12 09:19:39 +00:00
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
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
CS.START cld
jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA 0
.DA CS.END-CS.START
.DA 0
.DA 0
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA LIB.LOAD
.DA LIB.UNLOAD
2021-03-26 17:30:56 +00:00
.DA MD4
.DA MD4Init
.DA MD4Update
.DA MD4Finalize
2021-06-06 01:35:30 +00:00
.DA MD5
2021-06-30 18:33:18 +00:00
.DA MD5Init
2021-06-06 01:35:30 +00:00
.DA MD5Update
2021-06-06 19:06:49 +00:00
.DA HMACMD5
*--------------------------------------
2021-03-26 17:30:56 +00:00
J.MD4.XXXX .DA MD4.0015
.DA MD4.1631
.DA MD4.3247
2021-06-06 01:35:30 +00:00
J.MD5.XXXX .DA MD5.0015
.DA MD5.1631
.DA MD5.3247
.DA MD5.4863
2021-06-08 01:46:33 +00:00
L.HMACMD5.IPAD .DA HMACMD5.IPAD
L.HMACMD5.OPAD .DA HMACMD5.OPAD
2020-10-12 09:19:39 +00:00
.DA 0
*--------------------------------------
LIB.LOAD
LIB.UNLOAD clc
rts
*/--------------------------------------
2021-03-26 17:30:56 +00:00
* ## MD4
* Return MD4 Hash for input String
2020-10-12 09:19:39 +00:00
* # C
2021-03-26 17:30:56 +00:00
* `void MD4 (const char* str, char* digest);`
2020-10-12 09:19:39 +00:00
* # ASM
* `>PUSHW str`
2021-06-06 19:06:49 +00:00
* `>PUSHW digest`
2021-06-06 01:35:30 +00:00
* `>LIBCALL hLIBCRYPT,LIBCRYPT.MD4`
2020-10-12 09:19:39 +00:00
* ## RETURN VALUE
* CC
*\--------------------------------------
2021-06-06 01:35:30 +00:00
MD4 lda #0
.HS 2C BIT ABS
*/--------------------------------------
* ## MD5
* Return MD5 Hash for input String
* # C
* `void MD5 (const char* str, char* digest);`
* # ASM
* `>PUSHW str`
2021-06-06 19:06:49 +00:00
* `>PUSHW digest`
2021-06-06 01:35:30 +00:00
* `>LIBCALL hLIBCRYPT,LIBCRYPT.MD5`
* ## RETURN VALUE
* CC
*\--------------------------------------
MD5 lda #1
sta MD.MODE
2020-10-12 09:19:39 +00:00
>PULLW ZPHashPtr
2021-06-06 19:06:49 +00:00
>PULLYA
>STYA ZPDataPtr
2020-10-12 09:19:39 +00:00
>SYSCALL2 strlen
>STYA ZPDataLen
2021-06-08 01:46:33 +00:00
.1 jsr MD4Init.I
2020-10-12 09:19:39 +00:00
bcs .9
2021-06-06 01:35:30 +00:00
pha save MD4/MD5 Context hMem
lda MD.MODE
bne .2
2021-03-26 17:30:56 +00:00
jsr MD4Update.I
2021-06-06 01:35:30 +00:00
bra .3
.2 jsr MD5Update.I
.3 jsr MD4Finalize.I
2020-10-12 09:19:39 +00:00
pla
2021-06-06 01:35:30 +00:00
>SYSCALL2 FreeMem Free MD4/MD5 Context
2020-10-12 09:19:39 +00:00
clc
.9 rts
*/--------------------------------------
2021-03-26 17:30:56 +00:00
* ## MD4Init
* Initialize a MD4 computation
2020-10-12 09:19:39 +00:00
* # C
2021-06-06 19:06:49 +00:00
* `hMD4 MD4init();`
2020-10-12 09:19:39 +00:00
* # ASM
2021-03-26 17:30:56 +00:00
* `>LIBCALL hLIBCRYPT,LIBCRYPT.MD4Init`
2020-10-12 09:19:39 +00:00
* ## RETURN VALUE
2021-03-26 17:30:56 +00:00
* A = hMem To S.MD4
2020-10-12 09:19:39 +00:00
*\--------------------------------------
2021-06-08 01:46:33 +00:00
MD4Init lda #0
.HS 2C BIT ABS
2021-06-06 01:35:30 +00:00
*/--------------------------------------
* ## MD5Init
* Initialize a MD5 computation
* # C
* `hMD5 MD5init();`
* # ASM
* `>LIBCALL hLIBCRYPT,LIBCRYPT.MD5Init`
* ## RETURN VALUE
* A = hMem To S.MD5
*\--------------------------------------
2021-06-08 01:46:33 +00:00
MD5Init lda #1
sta MD.MODE
MD4Init.I
MD5Init.I >LDYAI S.MD4
2020-10-12 09:19:39 +00:00
>SYSCALL2 getmem
bcs .9
2021-03-26 17:30:56 +00:00
2020-10-12 09:19:39 +00:00
>STYA ZPCtxPtr
ldy #0
2021-03-26 17:30:56 +00:00
.1 lda MD4.ABCDINIT,y
2020-10-12 09:19:39 +00:00
sta (ZPCtxPtr),y
iny
2021-03-26 17:30:56 +00:00
cpy #S.MD4.BITCOUNT
2020-10-12 09:19:39 +00:00
bne .1
2021-03-26 17:30:56 +00:00
2020-10-12 09:19:39 +00:00
lda #0
2021-03-26 17:30:56 +00:00
2020-10-12 09:19:39 +00:00
.2 sta (ZPCtxPtr),y
iny
2021-06-06 01:35:30 +00:00
cpy #S.MD4 Includes S.MD4/5.FINALIZED Flag
2020-10-12 09:19:39 +00:00
bne .2
2021-03-26 17:30:56 +00:00
2020-10-12 09:19:39 +00:00
txa
clc
.9 rts
*/--------------------------------------
2021-03-26 17:30:56 +00:00
* ## MD4Update
* Add Data to MD4 computation
2020-10-12 09:19:39 +00:00
* # C
2021-03-26 17:30:56 +00:00
* `void MD4update (hMD4 MD4, char* data, int len);`
2020-10-12 09:19:39 +00:00
* # ASM
2021-06-06 19:06:49 +00:00
* `>PUSHB MD4`
2020-10-12 09:19:39 +00:00
* `>PUSHW data`
2021-06-06 19:06:49 +00:00
* `>PUSHW len`
2021-03-26 17:30:56 +00:00
* `>hLIBCRYPT,LIBCRYPT.MD4Update`
2020-10-12 09:19:39 +00:00
* ## RETURN VALUE
*\--------------------------------------
2021-06-06 01:35:30 +00:00
*/--------------------------------------
* ## MD5Update
* Add Data to MD5 computation
* # C
* `void MD5update (hMD5 MD5, char* data, int len);`
* # ASM
2021-06-06 19:06:49 +00:00
* `>PUSHB MD5`
2021-06-06 01:35:30 +00:00
* `>PUSHW data`
2021-06-06 19:06:49 +00:00
* `>PUSHW len`
2021-06-06 01:35:30 +00:00
* `>hLIBCRYPT,LIBCRYPT.MD5Update`
* ## RETURN VALUE
*\--------------------------------------
2021-06-08 01:46:33 +00:00
MD4Update
MD5Update >PULLW ZPDataLen get LEN
2021-06-06 19:06:49 +00:00
>PULLW ZPDataPtr get DATA
>PULLA
2021-06-06 01:35:30 +00:00
>SYSCALL2 GetMemPtr get MD5 Context
2020-10-12 09:19:39 +00:00
>STYA ZPCtxPtr
2021-03-26 17:30:56 +00:00
2021-06-06 01:35:30 +00:00
MD4Update.I
MD5Update.I ldy #S.MD4.FINALIZED
2020-10-12 09:19:39 +00:00
lda (ZPCtxPtr),y
beq .1
2021-03-26 17:30:56 +00:00
2020-10-12 09:19:39 +00:00
sec
rts
2021-03-26 17:30:56 +00:00
2020-10-12 09:19:39 +00:00
.1 lda ZPDataLen+1 More than 256 Bytes remaining to hash ?
bne .3 yes
2021-03-26 17:30:56 +00:00
2020-10-12 09:19:39 +00:00
lda ZPDataLen
bne .2 Len = O ?
2021-03-26 17:30:56 +00:00
2020-10-12 09:19:39 +00:00
clc All data processed
rts
2021-03-26 17:30:56 +00:00
2020-10-12 09:19:39 +00:00
.2 cmp #64 More than 64 Bytes remaining to hash ?
bcc .50 yes
2021-03-26 17:30:56 +00:00
2020-10-12 09:19:39 +00:00
.3 lda #64
2021-03-26 17:30:56 +00:00
2020-10-12 09:19:39 +00:00
.50 sta ZPChunkLen Save Chunk Len
2021-03-26 17:30:56 +00:00
jsr MD4UpdateBitCount
2020-10-12 09:19:39 +00:00
ldy #0
2021-03-26 17:30:56 +00:00
2020-10-12 09:19:39 +00:00
.51 lda (ZPDataPtr),y Load Buffer with data
2021-03-26 17:30:56 +00:00
sta MD4.BUFFER64,y
2020-10-12 09:19:39 +00:00
iny
cpy ZPChunkLen
bne .51
2021-03-26 17:30:56 +00:00
2020-10-12 09:19:39 +00:00
cpy #64 Full 64 Bytes DATA ?
beq .58
* Append "$80" & Padding & original size
lda #$80 no, Append $80
2021-06-06 01:35:30 +00:00
.52 sta MD5.BUFFER64,y
2021-03-26 17:30:56 +00:00
2021-06-06 01:35:30 +00:00
asl
* lda #0
2021-03-26 17:30:56 +00:00
2021-06-06 01:35:30 +00:00
iny Pad with 0 to 64
2020-10-12 09:19:39 +00:00
cpy #64
2021-06-06 01:35:30 +00:00
bcc .52
2021-03-26 17:30:56 +00:00
2021-06-06 01:35:30 +00:00
ldy #S.MD4.EXTRABIT Mark MD5 Context as Appended
ror
* lda #$80
2020-10-12 09:19:39 +00:00
sta (ZPCtxPtr),y
lda ZPChunkLen
cmp #56 Enough room for BITCOUNT ?
bcs .58 no
2021-03-26 17:30:56 +00:00
jsr MD4AppendBitCount
2021-06-06 01:35:30 +00:00
.58 lda MD.MODE
bne .59
jsr MD4Transform
bra .60
.59 jsr MD5Transform
.60 jsr MD4UpdateABCD0
2021-03-26 17:30:56 +00:00
2020-10-12 09:19:39 +00:00
.8 lda ZPDataLen Substract Bytes processed from LEN
sec
sbc ZPChunkLen get back chunk Len
sta ZPDataLen
bcs .81
2021-03-26 17:30:56 +00:00
2020-10-12 09:19:39 +00:00
dec ZPDataLen+1
2021-03-26 17:30:56 +00:00
2020-10-12 09:19:39 +00:00
.81 lda ZPDataPtr Add Bytes processed to DATA
clc
adc ZPChunkLen
sta ZPDataPtr
bcc .1
2021-03-26 17:30:56 +00:00
2020-10-12 09:19:39 +00:00
inc ZPDataPtr+1
bra .1
*/--------------------------------------
2021-03-26 17:30:56 +00:00
* ## MD4Finalize
2020-10-12 09:19:39 +00:00
* # C
2021-03-26 17:30:56 +00:00
* `void MD4finalize (hMD4 MD4, char* digest);`
2020-10-12 09:19:39 +00:00
* # ASM
2021-06-06 19:06:49 +00:00
* `>PUSHB MD4`
2020-10-12 09:19:39 +00:00
* `>PUSHW digest`
2021-03-26 17:30:56 +00:00
* `>LIBCALL hLIBCRYPT,LIBCRYPT.MD4Finalize`
2020-10-12 09:19:39 +00:00
* ## RETURN VALUE
*\--------------------------------------
2021-06-06 01:35:30 +00:00
*/--------------------------------------
* ## MD5Finalize
* # C
* `void MD5finalize (hMD5 MD5, char* digest);`
* # ASM
2021-06-06 19:06:49 +00:00
* `>PUSHB MD5`
2021-06-06 01:35:30 +00:00
* `>PUSHW digest`
* `>LIBCALL hLIBCRYPT,LIBCRYPT.MD5Finalize`
* ## RETURN VALUE
*\--------------------------------------
MD4Finalize
2021-06-06 19:06:49 +00:00
MD5Finalize >PULLW ZPHashPtr
>PULLA
pha
2020-10-12 09:19:39 +00:00
>SYSCALL2 GetMemPtr
2021-06-06 01:35:30 +00:00
>STYA ZPCtxPtr get MD5 Context
2021-06-06 19:06:49 +00:00
2021-03-26 17:30:56 +00:00
jsr MD4Finalize.I
2021-06-06 19:06:49 +00:00
2020-10-12 09:19:39 +00:00
pla
>SYSCALL2 FreeMem
rts
2021-03-26 17:30:56 +00:00
2021-06-06 01:35:30 +00:00
MD4Finalize.I
MD5Finalize.I ldy #S.MD4.FINALIZED
2020-10-12 09:19:39 +00:00
lda (ZPCtxPtr),y
bne .11
2021-03-26 17:30:56 +00:00
jsr MD4ExtraChunk
.11 ldy #S.MD4.ABCD0
2020-10-12 09:19:39 +00:00
.1 lda (ZPCtxPtr),y
lsr
lsr
lsr
lsr
tax
2021-03-26 17:30:56 +00:00
lda MD4.DIGITS,x
2020-10-12 09:19:39 +00:00
sta (ZPHashPtr)
inc ZPHashPtr
bne .2
2021-03-26 17:30:56 +00:00
2020-10-12 09:19:39 +00:00
inc ZPHashPtr+1
2021-03-26 17:30:56 +00:00
2020-10-12 09:19:39 +00:00
.2 lda (ZPCtxPtr),y
and #$0F
tax
2021-03-26 17:30:56 +00:00
lda MD4.DIGITS,x
2020-10-12 09:19:39 +00:00
sta (ZPHashPtr)
inc ZPHashPtr
bne .3
2021-03-26 17:30:56 +00:00
2020-10-12 09:19:39 +00:00
inc ZPHashPtr+1
2021-03-26 17:30:56 +00:00
2020-10-12 09:19:39 +00:00
.3 iny
2021-03-26 17:30:56 +00:00
cpy #S.MD4.ABCD0+16
2020-10-12 09:19:39 +00:00
bne .1
2021-03-26 17:30:56 +00:00
2020-10-12 09:19:39 +00:00
lda #0
sta (ZPHashPtr)
clc
.9 rts
2021-06-06 19:06:49 +00:00
*/--------------------------------------
* ## HMACMD5
* Return HMACMD5 Hash for input String
* # C
* `void HMACMD5(const char* str, const char* key, char* digest);`
* # ASM
* `>PUSHW str`
* `>PUSHW key`
* `>PUSHW digest`
* `>LIBCALL hLIBCRYPT,LIBCRYPT.HMACMD5`
* ## RETURN VALUE
* CC
*\--------------------------------------
* https://github.com/fab13n/org.eclipse.mihini/blob/master/libs/hmac-md5/hmac_rfc2104/hmac-md5.c
*--------------------------------------
HMACMD5
2021-06-08 01:46:33 +00:00
>PULLW ZPHashPtr
>PULLW ZPDataPtr
>PULLW HMAC.DTemp
2021-06-30 18:33:18 +00:00
.1 >LDYA ZPDataPtr
2021-06-08 01:46:33 +00:00
>SYSCALL2 strlen
>STYA ZPDataLen
cpy #65
2021-06-30 18:33:18 +00:00
bcs .2
2021-06-08 01:46:33 +00:00
tay
beq .4
2021-06-30 18:33:18 +00:00
.2 jsr MD5Init
bcc .3
rts
2021-06-08 01:46:33 +00:00
.3 >PUSHW ZPHashPtr
jsr MD5Update.I
jsr MD5Finalize.I
>PULLW ZPHashPtr
>LDYA ZPCtxPtr
>STYA ZPDataPtr
lda #16
sta ZPDataLen
.4 ldy #0
.5 lda #$36
cpy ZPDataLen
bcs .6
eor (ZPDataPtr),y
.6 sta HMACMD5.IPAD,y
eor #$6A #$36 eor #$5C
sta HMACMD5.OPAD,y
iny
cpy #64
bne .5
stz HMACMD5.IPAD+64
stz HMACMD5.OPAD+64
2021-06-30 18:33:18 +00:00
jsr MD5Init
2021-06-08 01:46:33 +00:00
bcc .7
rts
.7 >LDYA L.HMACMD5.IPAD
>STYA ZPDataPtr
>LDYAI 64
>STYA ZPDataLen
>PUSHW ZPHashPtr
jsr MD5Update.I
>LDYA HMAC.DTemp
>STYA ZPDataPtr
>SYSCALL2 strlen
>STYA ZPDataLen
jsr MD5Update.I
jsr MD5Finalize.I
>PULLW ZPHashPtr
ldy #S.MD5.ABCD0
.8 lda (ZPCtxPtr),y
sta HMACMD5.IPAD,y
iny
cpy #S.MD5.ABCD0+16
bne .8
jsr MD5Init.I
bcc .9
rts
.9 >LDYA L.HMACMD5.OPAD
>STYA ZPDataPtr
>LDYAI 64
>STYA ZPDataLen
jsr MD5Update.I
>LDYA L.HMACMD5.IPAD
>STYA ZPDataPtr
ldy #16
sty ZPDataLen
jsr MD5Update.I
jsr MD5Finalize.I
rts
2021-06-06 19:06:49 +00:00
*--------------------------------------
* https://waterjuiceweb.wordpress.com/aes/
2020-10-12 09:19:39 +00:00
*--------------------------------------
* PRIVATE
*--------------------------------------
2021-03-26 17:30:56 +00:00
* MD4AppendBitCount
2020-10-12 09:19:39 +00:00
* In :
2021-03-26 17:30:56 +00:00
* ZPCtxPtr = MD4 Context
2020-10-12 09:19:39 +00:00
*--------------------------------------
2021-06-06 01:35:30 +00:00
* MD5AppendBitCount
* In :
* ZPCtxPtr = MD5 Context
*--------------------------------------
2021-03-26 17:30:56 +00:00
MD4AppendBitCount
2021-06-06 01:35:30 +00:00
MD5AppendBitCount
2020-10-12 09:19:39 +00:00
ldx #56
2021-03-26 17:30:56 +00:00
ldy #S.MD4.BITCOUNT Append 8 Bytes of BITCOUNT
2020-10-12 09:19:39 +00:00
.1 lda (ZPCtxPtr),y
2021-03-26 17:30:56 +00:00
sta MD4.BUFFER64,x
2020-10-12 09:19:39 +00:00
inx
iny
2021-03-26 17:30:56 +00:00
cpy #S.MD4.BITCOUNT+8
2020-10-12 09:19:39 +00:00
bne .1
2021-06-06 01:35:30 +00:00
ldy #S.MD4.FINALIZED Mark MD5 Context as Finalized
2020-10-12 09:19:39 +00:00
lda #$80
sta (ZPCtxPtr),y
rts
*--------------------------------------
2021-03-26 17:30:56 +00:00
* MD4UpdateBitCount
2020-10-12 09:19:39 +00:00
* In :
2021-03-26 17:30:56 +00:00
* CL = Size (in bytes) to add to MD4 context
* ZPCtxPtr = MD4 Context
2020-10-12 09:19:39 +00:00
*--------------------------------------
2021-06-06 01:35:30 +00:00
*--------------------------------------
* MD5UpdateBitCount
* In :
* CL = Size (in bytes) to add to MD5 context
* ZPCtxPtr = MD5 Context
*--------------------------------------
2021-03-26 17:30:56 +00:00
MD4UpdateBitCount
2021-06-06 01:35:30 +00:00
MD5UpdateBitCount
2020-10-12 09:19:39 +00:00
stz ZPChunkLen+1
lda ZPChunkLen
asl
rol ZPChunkLen+1
asl times 8 to get bit count
rol ZPChunkLen+1
asl
rol ZPChunkLen+1
clc
2021-03-26 17:30:56 +00:00
ldy #S.MD4.BITCOUNT
2020-10-12 09:19:39 +00:00
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
*--------------------------------------
2021-03-26 17:30:56 +00:00
* MD4ExtraChunk
2020-10-12 09:19:39 +00:00
* In :
2021-03-26 17:30:56 +00:00
* ZPCtxPtr = MD4 Context
2020-10-12 09:19:39 +00:00
*--------------------------------------
2021-06-06 01:35:30 +00:00
*--------------------------------------
* MD5ExtraChunk
* In :
* ZPCtxPtr = MD5 Context
*--------------------------------------
MD4ExtraChunk
MD5ExtraChunk ldy #S.MD4.FINALIZED
2020-10-12 09:19:39 +00:00
lda #$80
2021-06-06 01:35:30 +00:00
sta (ZPCtxPtr),y Mark MD5 Context as "finalized"
2020-10-12 09:19:39 +00:00
ldx #0
2021-03-26 17:30:56 +00:00
ldy #S.MD4.EXTRABIT Extra Bit already appended ?
2020-10-12 09:19:39 +00:00
lda (ZPCtxPtr),y
bne .1
lda #$80
2021-03-26 17:30:56 +00:00
sta MD4.BUFFER64 Add extra bit to buffer
2020-10-12 09:19:39 +00:00
sta (ZPCtxPtr),y Mark Extrabit added
inx
2021-06-06 01:35:30 +00:00
.1 stz MD5.BUFFER64,x pad with "0"...
2020-10-12 09:19:39 +00:00
inx
cpx #56
bne .1 ...until room for bitcount
2021-03-26 17:30:56 +00:00
jsr MD4AppendBitCount
2021-06-06 01:35:30 +00:00
lda MD.MODE
bne .2
2021-03-26 17:30:56 +00:00
jsr MD4Transform
2021-06-06 01:35:30 +00:00
bra .3
.2 jsr MD5Transform
.3
2020-10-12 09:19:39 +00:00
*--------------------------------------
2021-03-26 17:30:56 +00:00
* MD4UpdateABCD0
2020-10-12 09:19:39 +00:00
* In:
2021-03-26 17:30:56 +00:00
* ZPCtxPtr = MD4 Context
2020-10-12 09:19:39 +00:00
*--------------------------------------
2021-06-06 01:35:30 +00:00
*--------------------------------------
* MD5UpdateABCD0
* In:
* ZPCtxPtr = MD5 Context
*--------------------------------------
MD4UpdateABCD0
MD5UpdateABCD0 ldy #0
2020-10-12 09:19:39 +00:00
.1 clc ADC32 A+A0->A0, B, C, D....
2021-03-26 17:30:56 +00:00
.2 lda MD4.ABCD,y
2020-10-12 09:19:39 +00:00
adc (ZPCtxPtr),y
sta (ZPCtxPtr),y
iny
tya
and #3
bne .2
cpy #16
bne .1
rts
*--------------------------------------
2021-03-26 17:30:56 +00:00
* MD4Transform
2020-10-12 09:19:39 +00:00
* In:
2021-03-26 17:30:56 +00:00
* ZPCtxPtr = MD4 Context
* 512 Bits Padded chunk in MD4.BUFFER64
2020-10-12 09:19:39 +00:00
* Out:
2021-03-26 17:30:56 +00:00
* Updated MD4.ABCD
* https://tools.ietf.org/html/rfc1320 MD4
2020-10-12 09:19:39 +00:00
*--------------------------------------
2021-03-26 17:30:56 +00:00
MD4Transform ldy #15 init ABCD Chunk with Context ABCD0
2020-10-12 09:19:39 +00:00
.1 lda (ZPCtxPtr),y
2021-03-26 17:30:56 +00:00
sta MD4.ABCD,y
2020-10-12 09:19:39 +00:00
dey
bpl .1
2021-06-06 01:35:30 +00:00
stz MD4.i Start Proceed 0 to 47 bytes
2021-03-26 17:30:56 +00:00
lda #0 lda MD4.i
2020-10-12 09:19:39 +00:00
.2 lsr
lsr
lsr
and #6
2021-06-06 01:35:30 +00:00
cmp #6
bne .3
lda #0
.3 tax
2020-10-12 09:19:39 +00:00
2021-03-26 17:30:56 +00:00
jsr MD4.XXXX
2020-10-12 09:19:39 +00:00
2021-06-06 01:35:30 +00:00
inc MD5.i
lda MD5.i
cmp #48
2020-10-12 09:19:39 +00:00
bne .2
2021-03-26 17:30:56 +00:00
2020-10-12 09:19:39 +00:00
rts
*--------------------------------------
2021-03-26 17:30:56 +00:00
MD4.XXXX jmp (J.MD4.XXXX,x)
*--------------------------------------
2021-06-06 01:35:30 +00:00
MD4.0015 >NOT32 MD4.B,MD4.F2
>AND32 MD4.B,MD4.C,MD4.F1
2021-03-26 17:30:56 +00:00
>AND32 MD4.F2,MD4.D,MD4.F2
>ORA32 MD4.F1,MD4.F2,MD4.F
bra MD4.XXXX.END
*--------------------------------------
2021-06-06 01:35:30 +00:00
MD4.1631 >AND32 MD4.B,MD4.C,MD4.F1
>AND32 MD4.B,MD4.D,MD4.F2
>ORA32 MD4.F1,MD4.F2,MD4.F1
>AND32 MD4.C,MD4.D,MD4.F2
2021-03-26 17:30:56 +00:00
>ORA32 MD4.F1,MD4.F2,MD4.F
bra MD4.XXXX.END
*--------------------------------------
MD4.3247 >EOR32 MD4.B,MD4.C,MD4.F
>EOR32 MD4.F,MD4.D,MD4.F
*--------------------------------------
MD4.XXXX.END >MOV32 MD4.D,MD4.DTemp
>MOV32 MD4.C,MD4.D
>MOV32 MD4.B,MD4.C
2021-06-06 01:35:30 +00:00
>ADC32 MD4.A,MD4.F,MD4.B
2021-03-26 17:30:56 +00:00
lda MD4.i
2021-06-06 01:35:30 +00:00
lsr
lsr
and #$0C
beq .3
2020-10-12 09:19:39 +00:00
tay
2021-03-26 17:30:56 +00:00
2020-10-12 09:19:39 +00:00
ldx #0
clc
2021-06-06 01:35:30 +00:00
.1 lda MD4.K-4,y ADC32 MD4.K[i],MD4.F,MD4.F
adc MD4.B,x
sta MD4.B,x
2020-10-12 09:19:39 +00:00
iny
inx
txa
eor #4 DO NOT DISTURB carry with cpx !!!
bne .1
2021-06-06 01:35:30 +00:00
.3 tax
2021-03-26 17:30:56 +00:00
ldy MD4.i
lda MD4.g,y
2020-10-12 09:19:39 +00:00
asl
asl
tay
2021-03-26 17:30:56 +00:00
2020-10-12 09:19:39 +00:00
clc
2021-03-26 17:30:56 +00:00
.2 lda MD4.BUFFER64,y ADC32 M[g],MD4.F,MD4.F
2021-06-06 01:35:30 +00:00
adc MD4.B,x
sta MD4.B,x
2020-10-12 09:19:39 +00:00
iny
inx
txa
eor #4 DO NOT DISTURB carry with cpx !!!
bne .2
2021-03-26 17:30:56 +00:00
ldy MD4.i
ldx MD4.s,y get s[i] in x
2020-10-12 09:19:39 +00:00
2021-06-06 01:35:30 +00:00
>ROL32x MD4.B
2021-03-26 17:30:56 +00:00
>MOV32 MD4.DTemp,MD4.A
2020-10-12 09:19:39 +00:00
rts
*--------------------------------------
2021-06-06 01:35:30 +00:00
* MD5Transform
* In:
* ZPCtxPtr = MD5 Context
* 512 Bits Padded chunk in MD5.BUFFER64
* Out:
* Updated MD5.ABCD
* https://tools.ietf.org/html/rfc1321 MD5
*--------------------------------------
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 (J.MD5.XXXX,x)
*--------------------------------------
MD5.0015 >NOT32 MD5.B,MD5.F2
>AND32 MD5.B,MD5.C,MD5.F1
>AND32 MD5.F2,MD5.D,MD5.F2
>ORA32 MD5.F1,MD5.F2,MD5.F
bra MD5.XXXX.END
*--------------------------------------
MD5.1631 >NOT32 MD5.D,MD5.F2
>AND32 MD5.D,MD5.B,MD5.F1
>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
tax
ldy MD5.i
lda MD5.g,y
asl
asl
tay
clc
.2 lda MD5.BUFFER64,y ADC32 M[g],MD5.F,MD5.F
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
*--------------------------------------
2020-10-12 09:19:39 +00:00
CS.END
2021-03-26 17:30:56 +00:00
MD4.ABCDINIT .HS 01234567.89ABCDEF.FEDCBA98.76543210
2020-10-12 09:19:39 +00:00
*--------------------------------------
2021-06-06 01:35:30 +00:00
MD4.s .DA #3,#7,#11,#19,#3,#7,#11,#19,#3,#7,#11,#19,#3,#7,#11,#19
.DA #3,#5,#9,#13,#3,#5,#9,#13,#3,#5,#9,#13,#3,#5,#9,#13
.DA #3,#9,#11,#15,#3,#9,#11,#15,#3,#9,#11,#15,#3,#9,#11,#15
*--------------------------------------
MD4.g .DA #0,#1,#2,#3,#4,#5,#6,#7,#8,#9,#10,#11,#12,#13,#14,#15
.DA #0,#4,#8,#12,#1,#5,#9,#13,#2,#6,#10,#14,#3,#7,#11,#15
.DA #0,#8,#4,#12,#2,#10,#6,#14,#1,#9,#5,#13,#3,#11,#7,#15
*--------------------------------------
MD4.K .HS 9979825A.A1EBD96E
*--------------------------------------
MD5.s .DA #7,#12,#17,#22,#7,#12,#17,#22,#7,#12,#17,#22,#7,#12,#17,#22
2020-10-12 09:19:39 +00:00
.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
*--------------------------------------
2021-06-06 01:35:30 +00:00
MD5.g .DA #0,#1,#2,#3,#4,#5,#6,#7,#8,#9,#10,#11,#12,#13,#14,#15
2020-10-12 09:19:39 +00:00
.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
*--------------------------------------
2021-06-06 01:35:30 +00:00
MD5.K .HS 78A46AD7.56B7C7E8.DB702024.EECEBDC1
2020-10-12 09:19:39 +00:00
.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
*--------------------------------------
2021-03-26 17:30:56 +00:00
MD4.DIGITS .AS "0123456789ABCDEF"
2020-10-12 09:19:39 +00:00
*--------------------------------------
ZPDataLen .BS 2
2021-06-06 19:06:49 +00:00
MD.MODE .BS 1
2021-06-06 01:35:30 +00:00
MD4.DTemp
MD5.DTemp .BS 4
MD4.F
MD5.F .BS 4
MD4.i
MD5.i .BS 1
MD4.BUFFER64
MD5.BUFFER64 .BS 64
2021-06-08 01:46:33 +00:00
HMAC.DTemp .BS 4
HMACMD5.IPAD .BS 65
HMACMD5.OPAD .BS 65
2020-10-12 09:19:39 +00:00
*--------------------------------------
MAN
SAVE usr/src/lib/libcrypt.s
ASM