LIBCRYPT:Bugfix & lot of bytes saved

This commit is contained in:
burniouf 2021-07-29 18:41:57 +02:00
parent b25303e93a
commit 25c601906e
7 changed files with 401 additions and 213 deletions

140
.Docs/LIBCRYPT.md Normal file
View File

@ -0,0 +1,140 @@
*** Auto generated by docgen.cmd ***
## Copyright
Copyright 2015 - 2020, Remy Gibert and the A2osX contributors.
## MD4
Return MD4 Hash for input String
# C
`void MD4 (const char* str, char* digest);`
# ASM
`>PUSHW str`
`>PUSHW digest`
`>LIBCALL hLIBCRYPT,LIBCRYPT.MD4`
## RETURN VALUE
CC
## MD5
Return MD5 Hash for input String
# C
`void MD5 (const char* str, char* digest);`
# ASM
`>PUSHW str`
`>PUSHW digest`
`>LIBCALL hLIBCRYPT,LIBCRYPT.MD5`
## RETURN VALUE
CC
## MD4Init
Initialize a MD4 computation
# C
`hMD4 MD4init();`
# ASM
`>LIBCALL hLIBCRYPT,LIBCRYPT.MD4Init`
## RETURN VALUE
A = hMem To S.MD4
## MD5Init
Initialize a MD5 computation
# C
`hMD5 MD5init();`
# ASM
`>LIBCALL hLIBCRYPT,LIBCRYPT.MD5Init`
## RETURN VALUE
A = hMem To S.MD5
## MD4Update
Add Data to MD4 computation
# C
`void MD4update (hMD4 MD4, char* data, int len);`
# ASM
`>PUSHB MD4`
`>PUSHW data`
`>PUSHW len`
`>hLIBCRYPT,LIBCRYPT.MD4Update`
## RETURN VALUE
## MD5Update
Add Data to MD5 computation
# C
`void MD5update (hMD5 MD5, char* data, int len);`
# ASM
`>PUSHB MD5`
`>PUSHW data`
`>PUSHW len`
`>hLIBCRYPT,LIBCRYPT.MD5Update`
## RETURN VALUE
## MD4Finalize
# C
`void MD4finalize (hMD4 MD4, char* digest);`
# ASM
`>PUSHB MD4`
`>PUSHW digest`
`>LIBCALL hLIBCRYPT,LIBCRYPT.MD4Finalize`
## RETURN VALUE
## MD5Finalize
# C
`void MD5finalize (hMD5 MD5, char* digest);`
# ASM
`>PUSHB MD5`
`>PUSHW digest`
`>LIBCALL hLIBCRYPT,LIBCRYPT.MD5Finalize`
## RETURN VALUE
## 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
## License
A2osX is licensed under the GNU General Public License.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
The full A2osX license can be found **[Here](../LICENSE)**.
*** End of Auto generated file ***

Binary file not shown.

View File

@ -40,6 +40,11 @@ set SRCDIR=%~dp0..\LIB
set FILTER=LIBTCPIP.S*.txt set FILTER=LIBTCPIP.S*.txt
Call :SCAN Call :SCAN
set DOCFILE=%~dp0..\.Docs\LIBCRYPT.md
set SRCDIR=%~dp0..\LIB
set FILTER=LIBCRYPT.S*.txt
Call :SCAN
set DOCFILE=%~dp0..\.Docs\Commands.md set DOCFILE=%~dp0..\.Docs\Commands.md
set SRCDIR=%~dp0..\BIN set SRCDIR=%~dp0..\BIN
set FILTER=*.S.txt set FILTER=*.S.txt

View File

@ -257,7 +257,7 @@ CS.RUN.PRINT >LEA.G HMACMD5Buf
rts rts
*-------------------------------------- *--------------------------------------
RevertASCII >LEA.G HMACMD5Buf RevertASCII >LEA.G HMACMD5Buf
>STYA ZPDataBufPtr >STYA ZPDataBufPtr
ldx #16 ldx #16
stx ZPDataLen stx ZPDataLen

View File

@ -19,7 +19,10 @@ K.EVT.MAX .EQ 4
K.TTY.MAX .EQ 8 K.TTY.MAX .EQ 8
K.IRQDEV.MAX .EQ 4 K.IRQDEV.MAX .EQ 4
*-------------------------------------- *--------------------------------------
Mem.Table .EQ $0800 Mem.Table .EQ $0800 -> $1000
*--------------------------------------
* Z80 .EQ $1000
* Scratch512 .EQ $1100
*-------------------------------------- *--------------------------------------
hFDs .EQ $1300 K.hFD.MAX hFDs .EQ $1300 K.hFD.MAX
hFDs.hName .EQ $1320 K.hFD.MAX hFDs.hName .EQ $1320 K.hFD.MAX

View File

@ -7,31 +7,25 @@ LIBCRYPT.MD4Init .EQ 6
LIBCRYPT.MD4Update .EQ 8 LIBCRYPT.MD4Update .EQ 8
LIBCRYPT.MD4Finalize .EQ 10 LIBCRYPT.MD4Finalize .EQ 10
*-------------------------------------- *--------------------------------------
LIBCRYPT.HMACMD5 .EQ 12 LIBCRYPT.MD5 .EQ 12
LIBCRYPT.MD5Init .EQ 14
LIBCRYPT.MD5Update .EQ 16
LIBCRYPT.MD5Finalize .EQ 18
*--------------------------------------
LIBCRYPT.HMACMD5 .EQ 20
*-------------------------------------- *--------------------------------------
* S.MD4, S.MD5 STRUCT * S.MD4, S.MD5 STRUCT
*-------------------------------------- *--------------------------------------
S.MD4.ABCD0 .EQ 0 S.MDx.ABCD0 .EQ 0
S.MD4.A0 .EQ 0 S.MDx.A0 .EQ 0
S.MD4.B0 .EQ 4 S.MDx.B0 .EQ 4
S.MD4.C0 .EQ 8 S.MDx.C0 .EQ 8
S.MD4.D0 .EQ 12 S.MDx.D0 .EQ 12
S.MD4.BITCOUNT .EQ 16 S.MDx.BITCOUNT .EQ 16
S.MD4.EXTRABIT .EQ 24 S.MDx.EXTRABIT .EQ 24
S.MD4.FINALIZED .EQ 25 S.MDx.FINALIZED .EQ 25
*
S.MD4 .EQ 26 S.MDx .EQ 26
S.MD5.ABCD0 .EQ S.MD4.ABCD0
S.MD5.A0 .EQ S.MD4.A0
S.MD5.B0 .EQ S.MD4.B0
S.MD5.C0 .EQ S.MD4.C0
S.MD5.D0 .EQ S.MD4.D0
S.MD5.BITCOUNT .EQ S.MD4.BITCOUNT
S.MD5.EXTRABIT .EQ S.MD4.EXTRABIT
S.MD5.FINALIZED .EQ S.MD4.FINALIZED
S.MD5 .EQ S.MD4
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE inc/libcrypt.i SAVE inc/libcrypt.i

View File

@ -14,27 +14,40 @@ NEW
ZS.START ZS.START
ZPCtxPtr .BS 2 ZPCtxPtr .BS 2
ZPDataPtr .BS 2 ZPDataPtr .BS 2
ZPKeyPtr .BS 2
ZPHashPtr .BS 2 ZPHashPtr .BS 2
ZPChunkLen .BS 2
MD4.ABCD MDx.ABCD
MD5.ABCD MDx.A .BS 4 Chunk Level,A,B,C,D
MD4.A MDx.B .BS 4
MD5.A .BS 4 Chunk Level,A,B,C,D MDx.C .BS 4
MD4.B MDx.D .BS 4
MD5.B .BS 4
MD4.C
MD5.C .BS 4
MD4.D
MD5.D .BS 4
MD4.F1 MDx.F1 .BS 4
MD5.F1 .BS 4 MDx.F2 .BS 4
MD4.F2
MD5.F2 .BS 4
ZS.END .ED ZS.END .ED
*-------------------------------------- *--------------------------------------
* TEMP storage allowed here because of:
* - No Task switching when in a LIB
* - No I/O (printf....)
*--------------------------------------
.DUMMY
.OR $1100
ZPDataLen .BS 2
ZPChunkLen .BS 2
MDx.MODE .BS 1
MDx.DTemp .BS 4
MDx.F .BS 4
MDx.i .BS 1
MDx.BUFFER64 .BS 64
HMACMD5.IPAD .BS 65
HMACMD5.OPAD .BS 65
.ED
*--------------------------------------
* DWORD Macros : Do NOT disturb carry with cpx, cpy... * DWORD Macros : Do NOT disturb carry with cpx, cpy...
*-------------------------------------- *--------------------------------------
.MA ADC32 .MA ADC32
@ -124,6 +137,10 @@ CS.START cld
.DA MD4Init .DA MD4Init
.DA MD4Update .DA MD4Update
.DA MD4Finalize .DA MD4Finalize
.DA MD5
.DA MD5Init
.DA MD5Update
.DA MD5Finalize
.DA HMACMD5 .DA HMACMD5
*-------------------------------------- *--------------------------------------
J.MD4.XXXX .DA MD4.0015 J.MD4.XXXX .DA MD4.0015
@ -133,8 +150,6 @@ J.MD5.XXXX .DA MD5.0015
.DA MD5.1631 .DA MD5.1631
.DA MD5.3247 .DA MD5.3247
.DA MD5.4863 .DA MD5.4863
L.HMACMD5.IPAD .DA HMACMD5.IPAD
L.HMACMD5.OPAD .DA HMACMD5.OPAD
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
LIB.LOAD LIB.LOAD
@ -152,17 +167,35 @@ LIB.UNLOAD clc
* ## RETURN VALUE * ## RETURN VALUE
* CC * CC
*\-------------------------------------- *\--------------------------------------
MD4 >PULLW ZPHashPtr MD4 clc
.HS B0 BCS
*/--------------------------------------
* ## MD5
* Return MD5 Hash for input String
* # C
* `void MD5 (const char* str, char* digest);`
* # ASM
* `>PUSHW str`
* `>PUSHW digest`
* `>LIBCALL hLIBCRYPT,LIBCRYPT.MD5`
* ## RETURN VALUE
* CC
*\--------------------------------------
MD5 sec
ror MDx.MODE
>PULLW ZPHashPtr
>PULLYA >PULLYA
>STYA ZPDataPtr >STYA ZPDataPtr
>SYSCALL2 strlen >SYSCALL2 strlen
>STYA ZPDataLen >STYA ZPDataLen
.1 jsr MDxInit.I .1 jsr MD5Init
bcs .9 bcs .9
pha save MD4 Context hMem pha save MD4 Context hMem
jsr MD4Update.I jsr MDxUpdate.I
jsr MDxFinalize.I jsr MDxFinalize.I
pla pla
@ -179,26 +212,36 @@ MD4 >PULLW ZPHashPtr
* ## RETURN VALUE * ## RETURN VALUE
* A = hMem To S.MD4 * A = hMem To S.MD4
*\-------------------------------------- *\--------------------------------------
MD4Init MD4Init
MDxInit.I >LDYAI S.MD4 */--------------------------------------
* ## MD5Init
* Initialize a MD5 computation
* # C
* `hMD5 MD5init();`
* # ASM
* `>LIBCALL hLIBCRYPT,LIBCRYPT.MD5Init`
* ## RETURN VALUE
* A = hMem To S.MD5
*\--------------------------------------
MD5Init >LDYAI S.MDx
>SYSCALL2 getmem >SYSCALL2 getmem
bcs MDxInit.9 bcs MDxInit.9
>STYA ZPCtxPtr >STYA ZPCtxPtr
MD5Reset.I ldy #0 MDxReset.I ldy #0
.1 lda MD4.ABCDINIT,y .1 lda MDx.ABCDINIT,y
sta (ZPCtxPtr),y sta (ZPCtxPtr),y
iny iny
cpy #S.MD4.BITCOUNT cpy #S.MDx.BITCOUNT
bne .1 bne .1
lda #0 lda #0
.2 sta (ZPCtxPtr),y .2 sta (ZPCtxPtr),y
iny iny
cpy #S.MD4 Includes S.MD4/5.FINALIZED Flag cpy #S.MDx Includes S.MDx.FINALIZED Flag
bne .2 bne .2
txa txa
@ -216,21 +259,32 @@ MDxInit.9 rts
* `>hLIBCRYPT,LIBCRYPT.MD4Update` * `>hLIBCRYPT,LIBCRYPT.MD4Update`
* ## RETURN VALUE * ## RETURN VALUE
*\-------------------------------------- *\--------------------------------------
MD4Update >PULLW ZPDataLen get LEN MD4Update clc
.HS B0 BCS
*/--------------------------------------
* ## MD5Update
* Add Data to MD5 computation
* # C
* `void MD5update (hMD5 MD5, char* data, int len);`
* # ASM
* `>PUSHB MD5`
* `>PUSHW data`
* `>PUSHW len`
* `>hLIBCRYPT,LIBCRYPT.MD5Update`
* ## RETURN VALUE
*\--------------------------------------
MD5Update sec
ror MDx.MODE
>PULLW ZPDataLen get LEN
>PULLW ZPDataPtr get DATA >PULLW ZPDataPtr get DATA
>PULLA >PULLA
>SYSCALL2 GetMemPtr get MD5 Context >SYSCALL2 GetMemPtr get MD5 Context
>STYA ZPCtxPtr >STYA ZPCtxPtr
MD4Update.I clc MDxUpdate.I ldy #S.MDx.FINALIZED
.HS B0 BCS
MD5Update.I sec
ror MD.MODE
ldy #S.MD4.FINALIZED
lda (ZPCtxPtr),y lda (ZPCtxPtr),y
beq .1 beq .1
@ -257,7 +311,7 @@ MD5Update.I sec
ldy #0 ldy #0
.51 lda (ZPDataPtr),y Load Buffer with data .51 lda (ZPDataPtr),y Load Buffer with data
sta MD4.BUFFER64,y sta MDx.BUFFER64,y
iny iny
cpy ZPChunkLen cpy ZPChunkLen
bne .51 bne .51
@ -267,7 +321,7 @@ MD5Update.I sec
* Append "$80" & Padding & original size * Append "$80" & Padding & original size
lda #$80 no, Append $80 lda #$80 no, Append $80
.52 sta MD5.BUFFER64,y .52 sta MDx.BUFFER64,y
asl asl
* lda #0 * lda #0
@ -276,7 +330,7 @@ MD5Update.I sec
cpy #64 cpy #64
bcc .52 bcc .52
ldy #S.MD4.EXTRABIT Mark MD5 Context as Appended ldy #S.MDx.EXTRABIT Mark MD5 Context as Appended
ror ror
* lda #$80 * lda #$80
sta (ZPCtxPtr),y sta (ZPCtxPtr),y
@ -316,7 +370,23 @@ MD5Update.I sec
* `>LIBCALL hLIBCRYPT,LIBCRYPT.MD4Finalize` * `>LIBCALL hLIBCRYPT,LIBCRYPT.MD4Finalize`
* ## RETURN VALUE * ## RETURN VALUE
*\-------------------------------------- *\--------------------------------------
MD4Finalize >PULLW ZPHashPtr MD4Finalize clc
.HS B0 BCS
*/--------------------------------------
* ## MD5Finalize
* # C
* `void MD5finalize (hMD5 MD5, char* digest);`
* # ASM
* `>PUSHB MD5`
* `>PUSHW digest`
* `>LIBCALL hLIBCRYPT,LIBCRYPT.MD5Finalize`
* ## RETURN VALUE
*\--------------------------------------
MD5Finalize sec
ror MDx.MODE
>PULLW ZPHashPtr
>PULLA >PULLA
pha pha
>SYSCALL2 GetMemPtr >SYSCALL2 GetMemPtr
@ -328,7 +398,7 @@ MD4Finalize >PULLW ZPHashPtr
>SYSCALL2 FreeMem >SYSCALL2 FreeMem
rts rts
MDxFinalize.I ldy #S.MD4.FINALIZED MDxFinalize.I ldy #S.MDx.FINALIZED
lda (ZPCtxPtr),y lda (ZPCtxPtr),y
bne .11 bne .11
@ -336,6 +406,7 @@ MDxFinalize.I ldy #S.MD4.FINALIZED
jsr MDxExtraChunk jsr MDxExtraChunk
.11 ldy #0 .11 ldy #0
sty MDx.i
.1 lda (ZPCtxPtr),y .1 lda (ZPCtxPtr),y
lsr lsr
@ -343,13 +414,13 @@ MDxFinalize.I ldy #S.MD4.FINALIZED
lsr lsr
lsr lsr
tax tax
lda MD4.DIGITS,x lda MDx.DIGITS,x
jsr .7 jsr .7
lda (ZPCtxPtr),y lda (ZPCtxPtr),y
and #$0F and #$0F
tax tax
lda MD4.DIGITS,x lda MDx.DIGITS,x
jsr .7 jsr .7
iny iny
@ -357,16 +428,16 @@ MDxFinalize.I ldy #S.MD4.FINALIZED
bne .1 bne .1
lda #0 lda #0
sta (ZPHashPtr)
clc clc
rts
.7 sta (ZPHashPtr) .7 phy
inc ZPHashPtr
bne MDxFinalize.RTS
inc ZPHashPtr+1
ldy MDx.i
inc MDx.i
sta (ZPHashPtr),y
ply
MDxFinalize.RTS rts MDxFinalize.RTS rts
*/-------------------------------------- */--------------------------------------
* ## HMACMD5 * ## HMACMD5
@ -385,11 +456,15 @@ MDxFinalize.RTS rts
*-------------------------------------- *--------------------------------------
HMACMD5 >PULLW ZPHashPtr HMACMD5 >PULLW ZPHashPtr
>PULLW ZPDataPtr >PULLW ZPDataPtr
>PULLW HMAC.DTemp >PULLW ZPKeyPtr
jsr MDxInit.I jsr MD5Init
bcs MDxFinalize.RTS bcs MDxFinalize.RTS
sec
ror MDx.MODE Switch to MD5
pha pha
>LDYA ZPDataPtr >LDYA ZPDataPtr
@ -401,11 +476,9 @@ HMACMD5 >PULLW ZPHashPtr
tay tay
beq .4 beq .4
.2 >PUSHW ZPHashPtr .2 jsr MDxUpdate.I
jsr MD5Update.I
jsr MDxFinalize.I jsr MDxFinalize.I
>PULLW ZPHashPtr
>LDYA ZPCtxPtr >LDYA ZPCtxPtr
>STYA ZPDataPtr >STYA ZPDataPtr
@ -430,25 +503,23 @@ HMACMD5 >PULLW ZPHashPtr
stz HMACMD5.IPAD+64 stz HMACMD5.IPAD+64
stz HMACMD5.OPAD+64 stz HMACMD5.OPAD+64
jsr MD5Reset.I jsr MDxReset.I
>LDYA L.HMACMD5.IPAD >LDYAI HMACMD5.IPAD
>STYA ZPDataPtr >STYA ZPDataPtr
>LDYAI 64 >LDYAI 64
>STYA ZPDataLen >STYA ZPDataLen
>PUSHW ZPHashPtr
jsr MD5Update.I jsr MDxUpdate.I
>LDYA HMAC.DTemp >LDYA ZPKeyPtr
>STYA ZPDataPtr >STYA ZPDataPtr
>SYSCALL2 strlen >SYSCALL2 strlen
>STYA ZPDataLen >STYA ZPDataLen
jsr MD5Update.I
jsr MDxUpdate.I
jsr MDxFinalize.I jsr MDxFinalize.I
>PULLW ZPHashPtr
ldy #0 ldy #0
.8 lda (ZPCtxPtr),y .8 lda (ZPCtxPtr),y
@ -457,22 +528,22 @@ HMACMD5 >PULLW ZPHashPtr
cpy #16 cpy #16
bne .8 bne .8
jsr MD5Reset.I jsr MDxReset.I
>LDYA L.HMACMD5.OPAD >LDYAI HMACMD5.OPAD
>STYA ZPDataPtr >STYA ZPDataPtr
>LDYAI 64 >LDYAI 64
>STYA ZPDataLen >STYA ZPDataLen
jsr MD5Update.I jsr MDxUpdate.I
>LDYA L.HMACMD5.IPAD >LDYAI HMACMD5.IPAD
>STYA ZPDataPtr >STYA ZPDataPtr
ldy #16 ldy #16
sty ZPDataLen sty ZPDataLen
jsr MD5Update.I
jsr MDxFinalize.I jsr MDxUpdate.I
jsr MDxFinalize.I MDx.MODE setup by MD5Update
pla pla
>SYSCALL2 FreeMem >SYSCALL2 FreeMem
@ -488,16 +559,16 @@ HMACMD5 >PULLW ZPHashPtr
* ZPCtxPtr = MD4 Context * ZPCtxPtr = MD4 Context
*-------------------------------------- *--------------------------------------
MDxAppendBitCnt ldx #56 MDxAppendBitCnt ldx #56
ldy #S.MD4.BITCOUNT Append 8 Bytes of BITCOUNT ldy #S.MDx.BITCOUNT Append 8 Bytes of BITCOUNT
.1 lda (ZPCtxPtr),y .1 lda (ZPCtxPtr),y
sta MD4.BUFFER64,x sta MDx.BUFFER64,x
inx inx
iny iny
cpy #S.MD4.BITCOUNT+8 cpy #S.MDx.BITCOUNT+8
bne .1 bne .1
ldy #S.MD4.FINALIZED Mark MD5 Context as Finalized ldy #S.MDx.FINALIZED Mark MD5 Context as Finalized
lda #$80 lda #$80
sta (ZPCtxPtr),y sta (ZPCtxPtr),y
rts rts
@ -511,12 +582,12 @@ MDxUpdateBitCnt stz ZPChunkLen+1
lda ZPChunkLen lda ZPChunkLen
asl asl
rol ZPChunkLen+1 rol ZPChunkLen+1
asl times 8 to get bit count asl times 8 to get BITCOUNT
rol ZPChunkLen+1 rol ZPChunkLen+1
asl asl
rol ZPChunkLen+1 rol ZPChunkLen+1
clc clc
ldy #S.MD4.BITCOUNT ldy #S.MDx.BITCOUNT
adc (ZPCtxPtr),y adc (ZPCtxPtr),y
sta (ZPCtxPtr),y sta (ZPCtxPtr),y
iny iny
@ -540,23 +611,23 @@ MDxUpdateBitCnt stz ZPChunkLen+1
* In : * In :
* ZPCtxPtr = MDx Context * ZPCtxPtr = MDx Context
*-------------------------------------- *--------------------------------------
MDxExtraChunk ldy #S.MD4.FINALIZED MDxExtraChunk ldy #S.MDx.FINALIZED
lda #$80 lda #$80
sta (ZPCtxPtr),y Mark MD5 Context as "finalized" sta (ZPCtxPtr),y Mark MD5 Context as "finalized"
ldx #0 ldx #0
ldy #S.MD4.EXTRABIT Extra Bit already appended ? ldy #S.MDx.EXTRABIT Extra Bit already appended ?
lda (ZPCtxPtr),y lda (ZPCtxPtr),y
bne .1 bne .1
lda #$80 lda #$80
sta MD4.BUFFER64 Add extra bit to buffer sta MDx.BUFFER64 Add extra bit to buffer
sta (ZPCtxPtr),y Mark Extrabit added sta (ZPCtxPtr),y Mark Extrabit added
inx inx
.1 stz MD5.BUFFER64,x pad with "0"... .1 stz MDx.BUFFER64,x pad with "0"...
inx inx
cpx #56 cpx #56
bne .1 ...until room for bitcount bne .1 ...until room for BITCOUNT
jsr MDxAppendBitCnt jsr MDxAppendBitCnt
jsr MDxTransform jsr MDxTransform
@ -569,7 +640,7 @@ MDxUpdateABCD0 ldy #0
.1 clc ADC32 A+A0->A0, B, C, D.... .1 clc ADC32 A+A0->A0, B, C, D....
.2 lda MD4.ABCD,y .2 lda MDx.ABCD,y
adc (ZPCtxPtr),y adc (ZPCtxPtr),y
sta (ZPCtxPtr),y sta (ZPCtxPtr),y
iny iny
@ -582,7 +653,17 @@ MDxUpdateABCD0 ldy #0
rts rts
*-------------------------------------- *--------------------------------------
MDxTransform bit MD.MODE MDxTransform ldy #15 init ABCD Chunk with Context ABCD0
.1 lda (ZPCtxPtr),y
sta MDx.ABCD,y
dey
bpl .1
lda #0 make sure A = MDx.i = 0 before transform
sta MDx.i
bit MDx.MODE
bpl MD4Transform bpl MD4Transform
jmp MD5Transform jmp MD5Transform
@ -590,63 +671,54 @@ MDxTransform bit MD.MODE
* MD4Transform * MD4Transform
* In: * In:
* ZPCtxPtr = MD4 Context * ZPCtxPtr = MD4 Context
* 512 Bits Padded chunk in MD4.BUFFER64 * 512 Bits Padded chunk in MDx.BUFFER64
* Out: * Out:
* Updated MD4.ABCD * Updated MDx.ABCD
* https://tools.ietf.org/html/rfc1320 MD4 * https://tools.ietf.org/html/rfc1320 MD4
*-------------------------------------- *--------------------------------------
MD4Transform ldy #15 init ABCD Chunk with Context ABCD0 MD4Transform lsr
.1 lda (ZPCtxPtr),y
sta MD4.ABCD,y
dey
bpl .1
stz MD4.i Start Proceed 0 to 47 bytes
lda #0 lda MD4.i
.2 lsr
lsr lsr
lsr lsr
and #6 and #6
cmp #6 cmp #6
bne .3 bne .1
lda #0 lda #0
.3 tax .1 tax
jsr MD4.XXXX jsr MD4.XXXX
inc MD5.i inc MDx.i
lda MD5.i lda MDx.i
cmp #48 cmp #48
bne .2 bne MD4Transform
rts rts
*-------------------------------------- *--------------------------------------
MD4.XXXX jmp (J.MD4.XXXX,x) MD4.XXXX jmp (J.MD4.XXXX,x)
*-------------------------------------- *--------------------------------------
MD4.0015 >NOT32 MD4.B,MD4.F2 MD4.0015 >NOT32 MDx.B,MDx.F2
>AND32 MD4.B,MD4.C,MD4.F1 >AND32 MDx.B,MDx.C,MDx.F1
>AND32 MD4.F2,MD4.D,MD4.F2 >AND32 MDx.F2,MDx.D,MDx.F2
>ORA32 MD4.F1,MD4.F2,MD4.F >ORA32 MDx.F1,MDx.F2,MDx.F
bra MD4.XXXX.END bra MD4.XXXX.END
*-------------------------------------- *--------------------------------------
MD4.1631 >AND32 MD4.B,MD4.C,MD4.F1 MD4.1631 >AND32 MDx.B,MDx.C,MDx.F1
>AND32 MD4.B,MD4.D,MD4.F2 >AND32 MDx.B,MDx.D,MDx.F2
>ORA32 MD4.F1,MD4.F2,MD4.F1 >ORA32 MDx.F1,MDx.F2,MDx.F1
>AND32 MD4.C,MD4.D,MD4.F2 >AND32 MDx.C,MDx.D,MDx.F2
>ORA32 MD4.F1,MD4.F2,MD4.F >ORA32 MDx.F1,MDx.F2,MDx.F
bra MD4.XXXX.END bra MD4.XXXX.END
*-------------------------------------- *--------------------------------------
MD4.3247 >EOR32 MD4.B,MD4.C,MD4.F MD4.3247 >EOR32 MDx.B,MDx.C,MDx.F
>EOR32 MD4.F,MD4.D,MD4.F >EOR32 MDx.F,MDx.D,MDx.F
*-------------------------------------- *--------------------------------------
MD4.XXXX.END >MOV32 MD4.D,MD4.DTemp MD4.XXXX.END >MOV32 MDx.D,MDx.DTemp
>MOV32 MD4.C,MD4.D >MOV32 MDx.C,MDx.D
>MOV32 MD4.B,MD4.C >MOV32 MDx.B,MDx.C
>ADC32 MD4.A,MD4.F,MD4.B >ADC32 MDx.A,MDx.F,MDx.B
lda MD4.i lda MDx.i
lsr lsr
lsr lsr
and #$0C and #$0C
@ -657,9 +729,9 @@ MD4.XXXX.END >MOV32 MD4.D,MD4.DTemp
ldx #0 ldx #0
clc clc
.1 lda MD4.K-4,y ADC32 MD4.K[i],MD4.F,MD4.F .1 lda MD4.K-4,y ADC32 MDx.K[i],MDx.F,MDx.F
adc MD4.B,x adc MDx.B,x
sta MD4.B,x sta MDx.B,x
iny iny
inx inx
txa txa
@ -667,7 +739,7 @@ MD4.XXXX.END >MOV32 MD4.D,MD4.DTemp
bne .1 bne .1
.3 tax .3 tax
ldy MD4.i ldy MDx.i
lda MD4.g,y lda MD4.g,y
asl asl
asl asl
@ -675,41 +747,31 @@ MD4.XXXX.END >MOV32 MD4.D,MD4.DTemp
clc clc
.2 lda MD4.BUFFER64,y ADC32 M[g],MD4.F,MD4.F .2 lda MDx.BUFFER64,y ADC32 M[g],MDx.F,MDx.F
adc MD4.B,x adc MDx.B,x
sta MD4.B,x sta MDx.B,x
iny iny
inx inx
txa txa
eor #4 DO NOT DISTURB carry with cpx !!! eor #4 DO NOT DISTURB carry with cpx !!!
bne .2 bne .2
ldy MD4.i ldy MDx.i
ldx MD4.s,y get s[i] in x ldx MD4.s,y get s[i] in x
>ROL32x MD4.B >ROL32x MDx.B
>MOV32 MD4.DTemp,MD4.A >MOV32 MDx.DTemp,MDx.A
rts rts
*-------------------------------------- *--------------------------------------
* MD5Transform * MD5Transform
* In: * In:
* ZPCtxPtr = MD5 Context * ZPCtxPtr = MD5 Context
* 512 Bits Padded chunk in MD5.BUFFER64 * 512 Bits Padded chunk in MDx.BUFFER64
* Out: * Out:
* Updated MD5.ABCD * Updated MDx.ABCD
* https://tools.ietf.org/html/rfc1321 MD5 * https://tools.ietf.org/html/rfc1321 MD5
*-------------------------------------- *--------------------------------------
MD5Transform ldy #15 init ABCD Chunk with Context ABCD0 MD5Transform lsr
.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
lsr lsr
and #6 and #6
@ -717,40 +779,40 @@ MD5Transform ldy #15 init ABCD Chunk with Context ABCD0
jsr MD5.XXXX jsr MD5.XXXX
inc MD5.i inc MDx.i
lda MD5.i lda MDx.i
cmp #64 cmp #64
bne .2 bne MD5Transform
rts rts
*-------------------------------------- *--------------------------------------
MD5.XXXX jmp (J.MD5.XXXX,x) MD5.XXXX jmp (J.MD5.XXXX,x)
*-------------------------------------- *--------------------------------------
MD5.0015 >NOT32 MD5.B,MD5.F2 MD5.0015 >NOT32 MDx.B,MDx.F2
>AND32 MD5.B,MD5.C,MD5.F1 >AND32 MDx.B,MDx.C,MDx.F1
>AND32 MD5.F2,MD5.D,MD5.F2 >AND32 MDx.F2,MDx.D,MDx.F2
>ORA32 MD5.F1,MD5.F2,MD5.F >ORA32 MDx.F1,MDx.F2,MDx.F
bra MD5.XXXX.END bra MD5.XXXX.END
*-------------------------------------- *--------------------------------------
MD5.1631 >NOT32 MD5.D,MD5.F2 MD5.1631 >NOT32 MDx.D,MDx.F2
>AND32 MD5.D,MD5.B,MD5.F1 >AND32 MDx.D,MDx.B,MDx.F1
>AND32 MD5.F2,MD5.C,MD5.F2 >AND32 MDx.F2,MDx.C,MDx.F2
>ORA32 MD5.F1,MD5.F2,MD5.F >ORA32 MDx.F1,MDx.F2,MDx.F
bra MD5.XXXX.END bra MD5.XXXX.END
*-------------------------------------- *--------------------------------------
MD5.3247 >EOR32 MD5.B,MD5.C,MD5.F MD5.3247 >EOR32 MDx.B,MDx.C,MDx.F
>EOR32 MD5.F,MD5.D,MD5.F >EOR32 MDx.F,MDx.D,MDx.F
bra MD5.XXXX.END bra MD5.XXXX.END
*-------------------------------------- *--------------------------------------
MD5.4863 >NOT32 MD5.D,MD5.F1 MD5.4863 >NOT32 MDx.D,MDx.F1
>ORA32 MD5.F1,MD5.B,MD5.F2 >ORA32 MDx.F1,MDx.B,MDx.F2
>EOR32 MD5.F2,MD5.C,MD5.F >EOR32 MDx.F2,MDx.C,MDx.F
*-------------------------------------- *--------------------------------------
MD5.XXXX.END >MOV32 MD5.D,MD5.DTemp MD5.XXXX.END >MOV32 MDx.D,MDx.DTemp
>MOV32 MD5.C,MD5.D >MOV32 MDx.C,MDx.D
>MOV32 MD5.B,MD5.C >MOV32 MDx.B,MDx.C
>ADC32 MD5.A,MD5.F,MD5.F >ADC32 MDx.A,MDx.F,MDx.F
lda MD5.i lda MDx.i
asl asl
asl asl
tay tay
@ -758,9 +820,9 @@ MD5.XXXX.END >MOV32 MD5.D,MD5.DTemp
ldx #0 ldx #0
clc clc
.1 lda MD5.K,y ADC32 MD5.K[i],MD5.F,MD5.F .1 lda MD5.K,y ADC32 MD5.K[i],MDx.F,MDx.F
adc MD5.F,x adc MDx.F,x
sta MD5.F,x sta MDx.F,x
iny iny
inx inx
txa txa
@ -768,7 +830,7 @@ MD5.XXXX.END >MOV32 MD5.D,MD5.DTemp
bne .1 bne .1
tax tax
ldy MD5.i ldy MDx.i
lda MD5.g,y lda MD5.g,y
asl asl
asl asl
@ -776,25 +838,25 @@ MD5.XXXX.END >MOV32 MD5.D,MD5.DTemp
clc clc
.2 lda MD5.BUFFER64,y ADC32 M[g],MD5.F,MD5.F .2 lda MDx.BUFFER64,y ADC32 M[g],MDx.F,MDx.F
adc MD5.F,x adc MDx.F,x
sta MD5.F,x sta MDx.F,x
iny iny
inx inx
txa txa
eor #4 DO NOT DISTURB carry with cpx !!! eor #4 DO NOT DISTURB carry with cpx !!!
bne .2 bne .2
ldy MD5.i ldy MDx.i
ldx MD5.s,y get s[i] in x ldx MD5.s,y get s[i] in x
>ROL32x MD5.F >ROL32x MDx.F
>ADC32 MD5.B,MD5.F,MD5.B >ADC32 MDx.B,MDx.F,MDx.B
>MOV32 MD5.DTemp,MD5.A >MOV32 MDx.DTemp,MDx.A
rts rts
*-------------------------------------- *--------------------------------------
CS.END CS.END
MD4.ABCDINIT .HS 01234567.89ABCDEF.FEDCBA98.76543210 MDx.ABCDINIT .HS 01234567.89ABCDEF.FEDCBA98.76543210
*-------------------------------------- *--------------------------------------
MD4.s .DA #3,#7,#11,#19,#3,#7,#11,#19,#3,#7,#11,#19,#3,#7,#11,#19 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,#5,#9,#13,#3,#5,#9,#13,#3,#5,#9,#13,#3,#5,#9,#13
@ -833,23 +895,7 @@ MD5.K .HS 78A46AD7.56B7C7E8.DB702024.EECEBDC1
.HS 4F7EA86F.E0E62CFE.144301A3.A111084E .HS 4F7EA86F.E0E62CFE.144301A3.A111084E
.HS 827E53F7.35F23ABD.BBD2D72A.91D386EB .HS 827E53F7.35F23ABD.BBD2D72A.91D386EB
*-------------------------------------- *--------------------------------------
MD4.DIGITS .AS "0123456789abcdef" MDx.DIGITS .AS "0123456789abcdef"
*--------------------------------------
ZPDataLen .BS 2
MD.MODE .BS 1
MD4.DTemp
MD5.DTemp .BS 4
MD4.F
MD5.F .BS 4
MD4.i
MD5.i .BS 1
MD4.BUFFER64
MD5.BUFFER64 .BS 64
HMAC.DTemp .BS 4
HMACMD5.IPAD .BS 65
HMACMD5.OPAD .BS 65
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE usr/src/lib/libcrypt.s SAVE usr/src/lib/libcrypt.s