diff --git a/.Docs/LIBCRYPT.md b/.Docs/LIBCRYPT.md new file mode 100644 index 00000000..d8583d38 --- /dev/null +++ b/.Docs/LIBCRYPT.md @@ -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 *** diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index ec9a5e7c..278ac30f 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/.Tools/docgen.cmd b/.Tools/docgen.cmd index 239b83bb..ff45258a 100644 --- a/.Tools/docgen.cmd +++ b/.Tools/docgen.cmd @@ -40,6 +40,11 @@ set SRCDIR=%~dp0..\LIB set FILTER=LIBTCPIP.S*.txt 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 SRCDIR=%~dp0..\BIN set FILTER=*.S.txt diff --git a/BIN/HMACMD5.S.txt b/BIN/HMACMD5.S.txt index 65977503..fc632cfb 100644 --- a/BIN/HMACMD5.S.txt +++ b/BIN/HMACMD5.S.txt @@ -257,7 +257,7 @@ CS.RUN.PRINT >LEA.G HMACMD5Buf rts *-------------------------------------- -RevertASCII >LEA.G HMACMD5Buf +RevertASCII >LEA.G HMACMD5Buf >STYA ZPDataBufPtr ldx #16 stx ZPDataLen diff --git a/INC/KERNEL.I.txt b/INC/KERNEL.I.txt index 3d7088d2..b306d91b 100644 --- a/INC/KERNEL.I.txt +++ b/INC/KERNEL.I.txt @@ -19,7 +19,10 @@ K.EVT.MAX .EQ 4 K.TTY.MAX .EQ 8 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.hName .EQ $1320 K.hFD.MAX diff --git a/INC/LIBCRYPT.I.txt b/INC/LIBCRYPT.I.txt index da6d9f30..3bd8016a 100644 --- a/INC/LIBCRYPT.I.txt +++ b/INC/LIBCRYPT.I.txt @@ -7,31 +7,25 @@ LIBCRYPT.MD4Init .EQ 6 LIBCRYPT.MD4Update .EQ 8 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.ABCD0 .EQ 0 -S.MD4.A0 .EQ 0 -S.MD4.B0 .EQ 4 -S.MD4.C0 .EQ 8 -S.MD4.D0 .EQ 12 -S.MD4.BITCOUNT .EQ 16 -S.MD4.EXTRABIT .EQ 24 -S.MD4.FINALIZED .EQ 25 - -S.MD4 .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 +S.MDx.ABCD0 .EQ 0 +S.MDx.A0 .EQ 0 +S.MDx.B0 .EQ 4 +S.MDx.C0 .EQ 8 +S.MDx.D0 .EQ 12 +S.MDx.BITCOUNT .EQ 16 +S.MDx.EXTRABIT .EQ 24 +S.MDx.FINALIZED .EQ 25 +* +S.MDx .EQ 26 *-------------------------------------- MAN SAVE inc/libcrypt.i diff --git a/LIB/LIBCRYPT.S.txt b/LIB/LIBCRYPT.S.txt index 15305983..fd6a5f69 100644 --- a/LIB/LIBCRYPT.S.txt +++ b/LIB/LIBCRYPT.S.txt @@ -14,27 +14,40 @@ NEW ZS.START ZPCtxPtr .BS 2 ZPDataPtr .BS 2 +ZPKeyPtr .BS 2 ZPHashPtr .BS 2 -ZPChunkLen .BS 2 -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 +MDx.ABCD +MDx.A .BS 4 Chunk Level,A,B,C,D +MDx.B .BS 4 +MDx.C .BS 4 +MDx.D .BS 4 -MD4.F1 -MD5.F1 .BS 4 -MD4.F2 -MD5.F2 .BS 4 +MDx.F1 .BS 4 +MDx.F2 .BS 4 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... *-------------------------------------- .MA ADC32 @@ -124,6 +137,10 @@ CS.START cld .DA MD4Init .DA MD4Update .DA MD4Finalize + .DA MD5 + .DA MD5Init + .DA MD5Update + .DA MD5Finalize .DA HMACMD5 *-------------------------------------- J.MD4.XXXX .DA MD4.0015 @@ -133,8 +150,6 @@ J.MD5.XXXX .DA MD5.0015 .DA MD5.1631 .DA MD5.3247 .DA MD5.4863 -L.HMACMD5.IPAD .DA HMACMD5.IPAD -L.HMACMD5.OPAD .DA HMACMD5.OPAD .DA 0 *-------------------------------------- LIB.LOAD @@ -152,17 +167,35 @@ LIB.UNLOAD clc * ## RETURN VALUE * 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 >STYA ZPDataPtr >SYSCALL2 strlen >STYA ZPDataLen -.1 jsr MDxInit.I +.1 jsr MD5Init bcs .9 pha save MD4 Context hMem - jsr MD4Update.I + jsr MDxUpdate.I jsr MDxFinalize.I pla @@ -179,26 +212,36 @@ MD4 >PULLW ZPHashPtr * ## RETURN VALUE * A = hMem To S.MD4 *\-------------------------------------- -MD4Init -MDxInit.I >LDYAI S.MD4 +MD4Init +*/-------------------------------------- +* ## 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 bcs MDxInit.9 >STYA ZPCtxPtr -MD5Reset.I ldy #0 +MDxReset.I ldy #0 -.1 lda MD4.ABCDINIT,y +.1 lda MDx.ABCDINIT,y sta (ZPCtxPtr),y iny - cpy #S.MD4.BITCOUNT + cpy #S.MDx.BITCOUNT bne .1 lda #0 .2 sta (ZPCtxPtr),y iny - cpy #S.MD4 Includes S.MD4/5.FINALIZED Flag + cpy #S.MDx Includes S.MDx.FINALIZED Flag bne .2 txa @@ -216,21 +259,32 @@ MDxInit.9 rts * `>hLIBCRYPT,LIBCRYPT.MD4Update` * ## 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 >PULLA - >SYSCALL2 GetMemPtr get MD5 Context + >SYSCALL2 GetMemPtr get MD5 Context >STYA ZPCtxPtr -MD4Update.I clc - .HS B0 BCS - -MD5Update.I sec - - ror MD.MODE - - ldy #S.MD4.FINALIZED +MDxUpdate.I ldy #S.MDx.FINALIZED lda (ZPCtxPtr),y beq .1 @@ -257,7 +311,7 @@ MD5Update.I sec ldy #0 .51 lda (ZPDataPtr),y Load Buffer with data - sta MD4.BUFFER64,y + sta MDx.BUFFER64,y iny cpy ZPChunkLen bne .51 @@ -267,7 +321,7 @@ MD5Update.I sec * Append "$80" & Padding & original size lda #$80 no, Append $80 -.52 sta MD5.BUFFER64,y +.52 sta MDx.BUFFER64,y asl * lda #0 @@ -276,7 +330,7 @@ MD5Update.I sec cpy #64 bcc .52 - ldy #S.MD4.EXTRABIT Mark MD5 Context as Appended + ldy #S.MDx.EXTRABIT Mark MD5 Context as Appended ror * lda #$80 sta (ZPCtxPtr),y @@ -316,7 +370,23 @@ MD5Update.I sec * `>LIBCALL hLIBCRYPT,LIBCRYPT.MD4Finalize` * ## 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 pha >SYSCALL2 GetMemPtr @@ -328,7 +398,7 @@ MD4Finalize >PULLW ZPHashPtr >SYSCALL2 FreeMem rts -MDxFinalize.I ldy #S.MD4.FINALIZED +MDxFinalize.I ldy #S.MDx.FINALIZED lda (ZPCtxPtr),y bne .11 @@ -336,6 +406,7 @@ MDxFinalize.I ldy #S.MD4.FINALIZED jsr MDxExtraChunk .11 ldy #0 + sty MDx.i .1 lda (ZPCtxPtr),y lsr @@ -343,13 +414,13 @@ MDxFinalize.I ldy #S.MD4.FINALIZED lsr lsr tax - lda MD4.DIGITS,x + lda MDx.DIGITS,x jsr .7 lda (ZPCtxPtr),y and #$0F tax - lda MD4.DIGITS,x + lda MDx.DIGITS,x jsr .7 iny @@ -357,16 +428,16 @@ MDxFinalize.I ldy #S.MD4.FINALIZED bne .1 lda #0 - sta (ZPHashPtr) clc - rts -.7 sta (ZPHashPtr) - inc ZPHashPtr - bne MDxFinalize.RTS - - inc ZPHashPtr+1 +.7 phy + ldy MDx.i + inc MDx.i + sta (ZPHashPtr),y + + ply + MDxFinalize.RTS rts */-------------------------------------- * ## HMACMD5 @@ -385,11 +456,15 @@ MDxFinalize.RTS rts *-------------------------------------- HMACMD5 >PULLW ZPHashPtr >PULLW ZPDataPtr - >PULLW HMAC.DTemp + >PULLW ZPKeyPtr - jsr MDxInit.I + jsr MD5Init bcs MDxFinalize.RTS + sec + + ror MDx.MODE Switch to MD5 + pha >LDYA ZPDataPtr @@ -401,11 +476,9 @@ HMACMD5 >PULLW ZPHashPtr tay beq .4 -.2 >PUSHW ZPHashPtr - jsr MD5Update.I +.2 jsr MDxUpdate.I jsr MDxFinalize.I - >PULLW ZPHashPtr >LDYA ZPCtxPtr >STYA ZPDataPtr @@ -430,25 +503,23 @@ HMACMD5 >PULLW ZPHashPtr stz HMACMD5.IPAD+64 stz HMACMD5.OPAD+64 - jsr MD5Reset.I + jsr MDxReset.I - >LDYA L.HMACMD5.IPAD + >LDYAI HMACMD5.IPAD >STYA ZPDataPtr >LDYAI 64 >STYA ZPDataLen - >PUSHW ZPHashPtr - jsr MD5Update.I + + jsr MDxUpdate.I - >LDYA HMAC.DTemp + >LDYA ZPKeyPtr >STYA ZPDataPtr >SYSCALL2 strlen >STYA ZPDataLen - jsr MD5Update.I + jsr MDxUpdate.I jsr MDxFinalize.I - >PULLW ZPHashPtr - ldy #0 .8 lda (ZPCtxPtr),y @@ -457,22 +528,22 @@ HMACMD5 >PULLW ZPHashPtr cpy #16 bne .8 - jsr MD5Reset.I + jsr MDxReset.I - >LDYA L.HMACMD5.OPAD + >LDYAI HMACMD5.OPAD >STYA ZPDataPtr >LDYAI 64 >STYA ZPDataLen - jsr MD5Update.I + jsr MDxUpdate.I - >LDYA L.HMACMD5.IPAD + >LDYAI HMACMD5.IPAD >STYA ZPDataPtr ldy #16 sty ZPDataLen - jsr MD5Update.I - jsr MDxFinalize.I + jsr MDxUpdate.I + jsr MDxFinalize.I MDx.MODE setup by MD5Update pla >SYSCALL2 FreeMem @@ -488,16 +559,16 @@ HMACMD5 >PULLW ZPHashPtr * ZPCtxPtr = MD4 Context *-------------------------------------- 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 - sta MD4.BUFFER64,x + sta MDx.BUFFER64,x inx iny - cpy #S.MD4.BITCOUNT+8 + cpy #S.MDx.BITCOUNT+8 bne .1 - ldy #S.MD4.FINALIZED Mark MD5 Context as Finalized + ldy #S.MDx.FINALIZED Mark MD5 Context as Finalized lda #$80 sta (ZPCtxPtr),y rts @@ -511,12 +582,12 @@ MDxUpdateBitCnt stz ZPChunkLen+1 lda ZPChunkLen asl rol ZPChunkLen+1 - asl times 8 to get bit count + asl times 8 to get BITCOUNT rol ZPChunkLen+1 asl rol ZPChunkLen+1 clc - ldy #S.MD4.BITCOUNT + ldy #S.MDx.BITCOUNT adc (ZPCtxPtr),y sta (ZPCtxPtr),y iny @@ -540,23 +611,23 @@ MDxUpdateBitCnt stz ZPChunkLen+1 * In : * ZPCtxPtr = MDx Context *-------------------------------------- -MDxExtraChunk ldy #S.MD4.FINALIZED +MDxExtraChunk ldy #S.MDx.FINALIZED lda #$80 sta (ZPCtxPtr),y Mark MD5 Context as "finalized" ldx #0 - ldy #S.MD4.EXTRABIT Extra Bit already appended ? + ldy #S.MDx.EXTRABIT Extra Bit already appended ? lda (ZPCtxPtr),y bne .1 lda #$80 - sta MD4.BUFFER64 Add extra bit to buffer + sta MDx.BUFFER64 Add extra bit to buffer sta (ZPCtxPtr),y Mark Extrabit added inx -.1 stz MD5.BUFFER64,x pad with "0"... +.1 stz MDx.BUFFER64,x pad with "0"... inx cpx #56 - bne .1 ...until room for bitcount + bne .1 ...until room for BITCOUNT jsr MDxAppendBitCnt jsr MDxTransform @@ -569,7 +640,7 @@ MDxUpdateABCD0 ldy #0 .1 clc ADC32 A+A0->A0, B, C, D.... -.2 lda MD4.ABCD,y +.2 lda MDx.ABCD,y adc (ZPCtxPtr),y sta (ZPCtxPtr),y iny @@ -582,7 +653,17 @@ MDxUpdateABCD0 ldy #0 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 jmp MD5Transform @@ -590,63 +671,54 @@ MDxTransform bit MD.MODE * MD4Transform * In: * ZPCtxPtr = MD4 Context -* 512 Bits Padded chunk in MD4.BUFFER64 +* 512 Bits Padded chunk in MDx.BUFFER64 * Out: -* Updated MD4.ABCD +* Updated MDx.ABCD * https://tools.ietf.org/html/rfc1320 MD4 *-------------------------------------- -MD4Transform ldy #15 init ABCD Chunk with Context ABCD0 - -.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 +MD4Transform lsr lsr lsr and #6 cmp #6 - bne .3 + bne .1 + lda #0 -.3 tax +.1 tax jsr MD4.XXXX - inc MD5.i - lda MD5.i + inc MDx.i + lda MDx.i cmp #48 - bne .2 + bne MD4Transform rts *-------------------------------------- MD4.XXXX jmp (J.MD4.XXXX,x) *-------------------------------------- -MD4.0015 >NOT32 MD4.B,MD4.F2 - >AND32 MD4.B,MD4.C,MD4.F1 - >AND32 MD4.F2,MD4.D,MD4.F2 - >ORA32 MD4.F1,MD4.F2,MD4.F +MD4.0015 >NOT32 MDx.B,MDx.F2 + >AND32 MDx.B,MDx.C,MDx.F1 + >AND32 MDx.F2,MDx.D,MDx.F2 + >ORA32 MDx.F1,MDx.F2,MDx.F bra MD4.XXXX.END *-------------------------------------- -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 - >ORA32 MD4.F1,MD4.F2,MD4.F +MD4.1631 >AND32 MDx.B,MDx.C,MDx.F1 + >AND32 MDx.B,MDx.D,MDx.F2 + >ORA32 MDx.F1,MDx.F2,MDx.F1 + >AND32 MDx.C,MDx.D,MDx.F2 + >ORA32 MDx.F1,MDx.F2,MDx.F bra MD4.XXXX.END *-------------------------------------- -MD4.3247 >EOR32 MD4.B,MD4.C,MD4.F - >EOR32 MD4.F,MD4.D,MD4.F +MD4.3247 >EOR32 MDx.B,MDx.C,MDx.F + >EOR32 MDx.F,MDx.D,MDx.F *-------------------------------------- -MD4.XXXX.END >MOV32 MD4.D,MD4.DTemp - >MOV32 MD4.C,MD4.D - >MOV32 MD4.B,MD4.C - >ADC32 MD4.A,MD4.F,MD4.B - lda MD4.i +MD4.XXXX.END >MOV32 MDx.D,MDx.DTemp + >MOV32 MDx.C,MDx.D + >MOV32 MDx.B,MDx.C + >ADC32 MDx.A,MDx.F,MDx.B + lda MDx.i lsr lsr and #$0C @@ -657,9 +729,9 @@ MD4.XXXX.END >MOV32 MD4.D,MD4.DTemp ldx #0 clc -.1 lda MD4.K-4,y ADC32 MD4.K[i],MD4.F,MD4.F - adc MD4.B,x - sta MD4.B,x +.1 lda MD4.K-4,y ADC32 MDx.K[i],MDx.F,MDx.F + adc MDx.B,x + sta MDx.B,x iny inx txa @@ -667,7 +739,7 @@ MD4.XXXX.END >MOV32 MD4.D,MD4.DTemp bne .1 .3 tax - ldy MD4.i + ldy MDx.i lda MD4.g,y asl asl @@ -675,41 +747,31 @@ MD4.XXXX.END >MOV32 MD4.D,MD4.DTemp clc -.2 lda MD4.BUFFER64,y ADC32 M[g],MD4.F,MD4.F - adc MD4.B,x - sta MD4.B,x +.2 lda MDx.BUFFER64,y ADC32 M[g],MDx.F,MDx.F + adc MDx.B,x + sta MDx.B,x iny inx txa eor #4 DO NOT DISTURB carry with cpx !!! bne .2 - ldy MD4.i + ldy MDx.i ldx MD4.s,y get s[i] in x - >ROL32x MD4.B - >MOV32 MD4.DTemp,MD4.A + >ROL32x MDx.B + >MOV32 MDx.DTemp,MDx.A rts *-------------------------------------- * MD5Transform * In: * ZPCtxPtr = MD5 Context -* 512 Bits Padded chunk in MD5.BUFFER64 +* 512 Bits Padded chunk in MDx.BUFFER64 * Out: -* Updated MD5.ABCD +* Updated MDx.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 +MD5Transform lsr lsr lsr and #6 @@ -717,40 +779,40 @@ MD5Transform ldy #15 init ABCD Chunk with Context ABCD0 jsr MD5.XXXX - inc MD5.i - lda MD5.i + inc MDx.i + lda MDx.i cmp #64 - bne .2 + bne MD5Transform 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 +MD5.0015 >NOT32 MDx.B,MDx.F2 + >AND32 MDx.B,MDx.C,MDx.F1 + >AND32 MDx.F2,MDx.D,MDx.F2 + >ORA32 MDx.F1,MDx.F2,MDx.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 +MD5.1631 >NOT32 MDx.D,MDx.F2 + >AND32 MDx.D,MDx.B,MDx.F1 + >AND32 MDx.F2,MDx.C,MDx.F2 + >ORA32 MDx.F1,MDx.F2,MDx.F bra MD5.XXXX.END *-------------------------------------- -MD5.3247 >EOR32 MD5.B,MD5.C,MD5.F - >EOR32 MD5.F,MD5.D,MD5.F +MD5.3247 >EOR32 MDx.B,MDx.C,MDx.F + >EOR32 MDx.F,MDx.D,MDx.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.4863 >NOT32 MDx.D,MDx.F1 + >ORA32 MDx.F1,MDx.B,MDx.F2 + >EOR32 MDx.F2,MDx.C,MDx.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 +MD5.XXXX.END >MOV32 MDx.D,MDx.DTemp + >MOV32 MDx.C,MDx.D + >MOV32 MDx.B,MDx.C + >ADC32 MDx.A,MDx.F,MDx.F + lda MDx.i asl asl tay @@ -758,9 +820,9 @@ MD5.XXXX.END >MOV32 MD5.D,MD5.DTemp ldx #0 clc -.1 lda MD5.K,y ADC32 MD5.K[i],MD5.F,MD5.F - adc MD5.F,x - sta MD5.F,x +.1 lda MD5.K,y ADC32 MD5.K[i],MDx.F,MDx.F + adc MDx.F,x + sta MDx.F,x iny inx txa @@ -768,7 +830,7 @@ MD5.XXXX.END >MOV32 MD5.D,MD5.DTemp bne .1 tax - ldy MD5.i + ldy MDx.i lda MD5.g,y asl asl @@ -776,25 +838,25 @@ MD5.XXXX.END >MOV32 MD5.D,MD5.DTemp clc -.2 lda MD5.BUFFER64,y ADC32 M[g],MD5.F,MD5.F - adc MD5.F,x - sta MD5.F,x +.2 lda MDx.BUFFER64,y ADC32 M[g],MDx.F,MDx.F + adc MDx.F,x + sta MDx.F,x iny inx txa eor #4 DO NOT DISTURB carry with cpx !!! bne .2 - ldy MD5.i + ldy MDx.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 + >ROL32x MDx.F + >ADC32 MDx.B,MDx.F,MDx.B + >MOV32 MDx.DTemp,MDx.A rts *-------------------------------------- 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 .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 827E53F7.35F23ABD.BBD2D72A.91D386EB *-------------------------------------- -MD4.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 +MDx.DIGITS .AS "0123456789abcdef" *-------------------------------------- MAN SAVE usr/src/lib/libcrypt.s