From d56b9720ebbe99f6a2f10980acbc5c19c0c39d46 Mon Sep 17 00:00:00 2001 From: Your Name Date: Thu, 18 Jul 2019 13:16:13 +0100 Subject: working ucoded alu --- sha1/msauth.asm | 359 ++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 216 insertions(+), 143 deletions(-) diff --git a/sha1/msauth.asm b/sha1/msauth.asm index 397e2eb..fc5e291 100644 --- a/sha1/msauth.asm +++ b/sha1/msauth.asm @@ -3,12 +3,12 @@ idx EQU $60 lidx EQU $61 -k EQU $62 src1 EQU $63 src2 EQU $64 dest EQU $65 i EQU $66 j EQU $67 +opidx EQU $62 ; BYTES 60-67 are persisent RAM for our use @@ -136,14 +136,14 @@ test_l2: lda H+16 and #$F tax - add #(H-BASE_START) + add #(H-DATA_START) sta src1 lda H+3,x and #$7F sta H+3,x - lda #(T1-BASE_START) + lda #(T1-DATA_START) sta dest - lda #(ZERO-BASE_START) + lda #(ZERO-DATA_START) jsr add4 @@ -153,9 +153,9 @@ end: bra end get_w32_015_to_t2: - lda #(T2-BASE_START) + lda #(T2-DATA_START) sta dest - lda #(ZERO-BASE_START) + lda #(ZERO-DATA_START) sta src1 lda lidx @@ -167,14 +167,14 @@ get_w32_015_to_t2: bhs get_w32_015_to_t2_z1 lsla lsla - add #(KEY-BASE_START) + add #(KEY-DATA_START) sta src1 get_w32_015_to_t2_z1: - lda #(ZERO-BASE_START) + lda #(ZERO-DATA_START) jsr add4 - lda #(T2-BASE_START) + lda #(T2-DATA_START) sta src1 - lda #(KEYOR-BASE_START) + lda #(KEYOR-DATA_START) jsr xor4 rts get_w32_015_to_t2_l1: @@ -183,15 +183,15 @@ get_w32_015_to_t2_l1: bhs get_w32_015_to_t2_l2 lsla lsla - add #(DATA1-BASE_START) + add #(DATA1-DATA_START) bra get_w32_015_to_t2_e get_w32_015_to_t2_l2: cmp #15 bne get_w32_015_to_t2_l3 - lda #(DATA2-BASE_START) + lda #(DATA2-DATA_START) bra get_w32_015_to_t2_e get_w32_015_to_t2_l3: - lda #(ZERO-BASE_START) + lda #(ZERO-DATA_START) get_w32_015_to_t2_e: jsr add4 rts @@ -215,11 +215,11 @@ get_w32_to_t2_l1: lda j lsla lsla - add #(WBUF-BASE_START) + add #(WBUF-DATA_START) sta dest - lda #(T2-BASE_START) + lda #(T2-DATA_START) sta src1 - lda #(ZERO-BASE_START) + lda #(ZERO-DATA_START) jsr add4 inc j @@ -229,17 +229,17 @@ get_w32_to_t2_l1: get_w32_to_t2_l2: - lda #(T2-BASE_START) + lda #(T2-DATA_START) sta dest - lda #(WBUF13 - BASE_START) + lda #(WBUF13 - DATA_START) sta src1 - lda #(WBUF8 - BASE_START) + lda #(WBUF8 - DATA_START) jsr xor4 ; T2 =W13 ^ W8 - lda #(T2-BASE_START) + lda #(T2-DATA_START) sta src1 - lda #(WBUF2 - BASE_START) + lda #(WBUF2 - DATA_START) jsr xor4 ; T2 = T2 ^ W2 - lda #(WBUF0 - BASE_START) + lda #(WBUF0 - DATA_START) jsr xor4 ; T2= T2 ^ W0 lda #1 jsr rot_left ; T2= ROTLEFT(T2,1) @@ -252,9 +252,9 @@ get_w32_to_t2_l3: sta (WBUF14 + 3 - $FF),x incx bne get_w32_to_t2_l3 - lda #(WBUF15-BASE_START) + lda #(WBUF15-DATA_START) sta dest - lda #(ZERO-BASE_START) + lda #(ZERO-DATA_START) jsr add4 ; WBUF15=T2 dec i @@ -278,27 +278,17 @@ sha1_block_loop: sta idx cmp #20 bhs sha1_block_k2 - lda #(K1-BASE_START) + lda #(K1-DATA_START) sta k - ; T1 = (B & C) | ((~B) & D) - lda #(T2-BASE_START) - sta dest - lda #(VB-BASE_START) - sta src1 - lda #(FFFFFFFF-BASE_START) - jsr xor4 ;T2=~B - - lda #(T2-BASE_START) - sta src1 - lda #(VD-BASE_START) - jsr and4 ;T2=T2&D + ldx #(T2eNotBandD-OPLIST_START) + jsr op4_list bra sha1_block_t2_or_bandc ; T1=T2 | (B&C) sha1_block_k2: cmp #40 bhs sha1_block_k3 - lda #(K2-BASE_START) + lda #(K2-DATA_START) sta k bra sha1_block_k24 ; T1 = B ^ C ^ D @@ -306,94 +296,32 @@ sha1_block_k3: cmp #60 bhs sha1_block_k4 ; T1 = (B & C) | (B & D) | (C & D) - lda #(K3-BASE_START) + lda #(K3-DATA_START) sta k - lda #(T1-BASE_START) - sta dest - lda #(VD-BASE_START) - sta src1 - lda #(VB-BASE_START) - jsr and4 ; T1=B&D - - lda #(T2-BASE_START) - sta dest - lda #(VC-BASE_START) - jsr and4 ; T2=C&D - - lda #(T2-BASE_START) - sta src1 - lda #(T1-BASE_START) - jsr or4 ; T2=T1|T2 - + ldx #(T2eCandDorBandD-OPLIST_START) + jsr op4_list + sha1_block_t2_or_bandc: - lda #(T1-BASE_START) - sta dest - lda #(VB-BASE_START) - sta src1 - lda #(VC-BASE_START) - jsr and4 ; T1 = B&C - - lda #(T1-BASE_START) - sta src1 - lda #(T2-BASE_START) - jsr or4 ; T1= T1|T2 - + ldx #(T1eT2orBandC-OPLIST_START) + jsr op4_list bra sha1_block_shuffle sha1_block_k4: - lda #(K4-BASE_START) + lda #(K4-DATA_START) sta k sha1_block_k24: - ; T1 = B ^ C ^ D - lda #(T1-BASE_START) - sta dest - lda #(VB-BASE_START) - sta src1 - lda #(VC-BASE_START) - jsr xor4 - lda #(T1-BASE_START) - sta src1 - lda #(VD-BASE_START) - jsr xor4 -sha1_block_shuffle: - ; T1 is src1 and dest here - lda #(VE-BASE_START) - jsr add4 ; T1=T1+E + ldx #(T1eBxorCxorD-OPLIST_START) + jsr op4_list - lda k - jsr add4 ; T1=T1+k +sha1_block_shuffle: jsr get_w32_to_t2 ; W[i]->T2 - lda #(T1-BASE_START) - sta dest - sta src1 - lda #(T2-BASE_START) - jsr add4 ; T1=T1+data - - lda #(VD-BASE_START) - jsr copy_up ; E=D - lda #(VC-BASE_START) - jsr copy_up ; D=C - lda #(VB-BASE_START) - jsr copy_up ; C=B - lda #30 - jsr rot_left ; C=ROTLEFT(C,30) - lda #(VA-BASE_START) - jsr copy_up ; B=A - - lda #(VA-BASE_START) - sta dest - sta src1 - lda #5 - jsr rot_left ; A=ROTLEFT(A,5) - - lda #(T1-BASE_START) - jsr add4 ; A=A+T1 - + ldx #(shuffleop-OPLIST_START) + jsr op4_list lda idx add #1 @@ -417,14 +345,54 @@ sha1_block_add1: cpx #20 bne sha1_block_add0 +rts1: rts - -copy_up: +op4_list: + lda OPLIST_START,x + sta op4_src2 + incx + lda OPLIST_START,x sta src1 - add #4 + incx + lda OPLIST_START,x + sta src2 + incx + lda OPLIST_START,x sta dest - lda #(ZERO-BASE_START) + incx + stx opidx + lda op4_src2 + tsta + beq rts1 + bmi op4_list_l1 + + ; rotates dest left src1 times + ldx dest +op_list_l0: + lda DATA_START,x + rola + lda DATA_START+1,x + rola + sta DATA_START+1,x + lda DATA_START+2,x + rola + sta DATA_START+2,x + lda DATA_START+3,x + rola + sta DATA_START+3,x + lda DATA_START,x + rola + sta DATA_START,x + dec src1 + bne op_list_l0 + bra op4_list_l2 +op4_list_l1: + jsr op4_binary +op4_list_l2: + ldx opidx + bra op4_list + add4: sta src2 @@ -432,42 +400,33 @@ add4: sta op4_src2 bra op4_binary -and4: - sta src2 - lda #$d4 ; and $ffff,a - sta op4_src2 - bra op4_binary - xor4: sta src2 lda #$d8 ; eor $ffff,a sta op4_src2 bra op4_binary -or4: - sta src2 - lda #$da ; or $ffff,a - sta op4_src2 + op4_binary: ldx #0 - lda #BASE_START & $ff + lda #DATA_START & $ff add src2 sta op4_src2+2 txa - adc #BASE_START>>8 + adc #DATA_START>>8 sta op4_src2+1 - lda #BASE_START & $ff + lda #DATA_START & $ff add src1 sta op4_src1+2 txa - adc #BASE_START>>8 + adc #DATA_START>>8 sta op4_src1+1 - lda #BASE_START & $ff + lda #DATA_START & $ff add dest sta op4_dst+2 txa - adc #BASE_START>>8 + adc #DATA_START>>8 sta op4_dst+1 clc @@ -488,26 +447,140 @@ rot_left: ldx dest sta j rot_loop: - lda BASE_START,x + lda DATA_START,x rola - lda BASE_START+1,x + lda DATA_START+1,x rola - sta BASE_START+1,x - lda BASE_START+2,x + sta DATA_START+1,x + lda DATA_START+2,x rola - sta BASE_START+2,x - lda BASE_START+3,x + sta DATA_START+2,x + lda DATA_START+3,x rola - sta BASE_START+3,x - lda BASE_START,x + sta DATA_START+3,x + lda DATA_START,x rola - sta BASE_START,x + sta DATA_START,x dec j bne rot_loop rts + +OPLIST_START: + +T2eNotBandD: + DB $d8 ;eor + DB (VB-DATA_START) ;src1 + DB (FFFFFFFF-DATA_START) ;src2 + DB (T2-DATA_START) ;dest + DB $d4 ;and + DB (VD-DATA_START) ;src1 + DB (T2-DATA_START) ;src2 + DB (T2-DATA_START) ;dest + DB 0 ;stop + + +T2eCandDorBandD: ; T1 = C&D, T2=B&D, T2=T1|T2 + DB $d4 ;and + DB (VC-DATA_START) ;src1 + DB (VD-DATA_START) ;src2 + DB (T1-DATA_START) ;dest + DB $d4 ;and + DB (VB-DATA_START) ;src1 + DB (VD-DATA_START) ;src2 + DB (T2-DATA_START) ;dest + DB $da ;or + DB (T1-DATA_START) ;src1 + DB (T2-DATA_START) ;src2 + DB (T2-DATA_START) ;dest + DB 0 ;stop + +T1eT2orBandC: ; T1=B&C; T1=T1|T2 + DB $d4 ;and + DB (VB-DATA_START) ;src1 + DB (VC-DATA_START) ;src2 + DB (T1-DATA_START) ;dest + DB $da ;or + DB (T1-DATA_START) ;src1 + DB (T2-DATA_START) ;src2 + DB (T1-DATA_START) ;dest + DB 0 ;stop + + + +T1eBxorCxorD: + DB $d8 ;xor + DB (VB-DATA_START) ;src1 + DB (VC-DATA_START) ;src2 + DB (T1-DATA_START) ;dst + DB $d8 ;xor + DB (T1-DATA_START) ;src1 + DB (VD-DATA_START) ;src2 + DB (T1-DATA_START) ;dst + DB 0 ;stop + +shuffleop: + + + DB $d9 ;add + DB (T1-DATA_START) ;src1 + DB (VE-DATA_START) ;src2 + DB (T1-DATA_START) ;dest + + DB $d9 ;add + DB (T1-DATA_START) ;src1 +k: + DB 0 ;src2 + DB (T1-DATA_START) ;dest + + DB $d9 ;add + DB (T1-DATA_START) ;src1 + DB (T2-DATA_START) ;src2 + DB (T1-DATA_START) ;dest + + DB $d9 ;add + DB (VD-DATA_START) ;src1 + DB (ZERO-DATA_START) ;src2 + DB (VE-DATA_START) ;dest + + DB $d9 ;add + DB (VC-DATA_START) ;src1 + DB (ZERO-DATA_START) ;src2 + DB (VD-DATA_START) ;dest + + DB $d9 ;add + DB (VB-DATA_START) ;src1 + DB (ZERO-DATA_START) ;src2 + DB (VC-DATA_START) ;dest + + DB $d9 ;add + DB (VA-DATA_START) ;src1 + DB (ZERO-DATA_START) ;src2 + DB (VB-DATA_START) ;dest + + DB $1 ;rot left + DB 30 ;30 times + DB 0 ; N/A + DB (VC-DATA_START) ;dest + + DB $1 ;rot left + DB 5 ;5 times + DB 0 ; N/A + DB (VA-DATA_START) ;dest + + DB $d9 ;add + DB (VA-DATA_START) ;src1 + DB (T1-DATA_START) ;src2 + DB (VA-DATA_START) ;dest + + DB $0 + + +OPLIST_END: + + -BASE_START: +DATA_START: KEY: DB $89 @@ -701,5 +774,5 @@ DATA2: DB 0 DB 0 -BASE_END: +DATA_END: -- cgit v1.2.3