LIBCRYPT: add HMAC-MD5

This commit is contained in:
Peter Ferrie 2021-06-07 18:46:33 -07:00
parent 03603b431c
commit a414e9d080

View File

@ -138,6 +138,8 @@ 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
@ -176,7 +178,7 @@ MD5 lda #1
>STYA ZPDataPtr >STYA ZPDataPtr
>SYSCALL2 strlen >SYSCALL2 strlen
>STYA ZPDataLen >STYA ZPDataLen
.1 jsr MD4Init .1 jsr MD4Init.I
bcs .9 bcs .9
pha save MD4/MD5 Context hMem pha save MD4/MD5 Context hMem
@ -201,6 +203,8 @@ MD5 lda #1
* ## RETURN VALUE * ## RETURN VALUE
* A = hMem To S.MD4 * A = hMem To S.MD4
*\-------------------------------------- *\--------------------------------------
MD4Init lda #0
.HS 2C BIT ABS
*/-------------------------------------- */--------------------------------------
* ## MD5Init * ## MD5Init
* Initialize a MD5 computation * Initialize a MD5 computation
@ -211,8 +215,11 @@ MD5 lda #1
* ## RETURN VALUE * ## RETURN VALUE
* A = hMem To S.MD5 * A = hMem To S.MD5
*\-------------------------------------- *\--------------------------------------
MD4Init MD5Init lda #1
MD5Init >LDYAI S.MD4 sta MD.MODE
MD4Init.I
MD5Init.I >LDYAI S.MD4
>SYSCALL2 getmem >SYSCALL2 getmem
bcs .9 bcs .9
@ -247,8 +254,6 @@ MD5Init >LDYAI S.MD4
* `>hLIBCRYPT,LIBCRYPT.MD4Update` * `>hLIBCRYPT,LIBCRYPT.MD4Update`
* ## RETURN VALUE * ## RETURN VALUE
*\-------------------------------------- *\--------------------------------------
MD4Update lda #0
.HS 2C BIT ABS
*/-------------------------------------- */--------------------------------------
* ## MD5Update * ## MD5Update
* Add Data to MD5 computation * Add Data to MD5 computation
@ -261,10 +266,8 @@ MD4Update lda #0
* `>hLIBCRYPT,LIBCRYPT.MD5Update` * `>hLIBCRYPT,LIBCRYPT.MD5Update`
* ## RETURN VALUE * ## RETURN VALUE
*\-------------------------------------- *\--------------------------------------
MD5Update lda #1 MD4Update
sta MD.MODE MD5Update >PULLW ZPDataLen get LEN
>PULLW ZPDataLen get LEN
>PULLW ZPDataPtr get DATA >PULLW ZPDataPtr get DATA
>PULLA >PULLA
@ -442,6 +445,91 @@ MD5Finalize.I ldy #S.MD4.FINALIZED
* https://github.com/fab13n/org.eclipse.mihini/blob/master/libs/hmac-md5/hmac_rfc2104/hmac-md5.c * https://github.com/fab13n/org.eclipse.mihini/blob/master/libs/hmac-md5/hmac_rfc2104/hmac-md5.c
*-------------------------------------- *--------------------------------------
HMACMD5 HMACMD5
>PULLW ZPHashPtr
>PULLW ZPDataPtr
>PULLW HMAC.DTemp
.1 jsr MD5Init
bcc .2
rts
.2 >LDYA ZPDataPtr
>SYSCALL2 strlen
>STYA ZPDataLen
cpy #65
bcs .3
tay
beq .4
.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
jsr MD5Init.I
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
*-------------------------------------- *--------------------------------------
* https://waterjuiceweb.wordpress.com/aes/ * https://waterjuiceweb.wordpress.com/aes/
*-------------------------------------- *--------------------------------------
@ -836,6 +924,9 @@ MD4.i
MD5.i .BS 1 MD5.i .BS 1
MD4.BUFFER64 MD4.BUFFER64
MD5.BUFFER64 .BS 64 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