⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 des.asm

📁 C51下把DES汇编改为C语言的程序.改进版程序.
💻 ASM
📖 第 1 页 / 共 3 页
字号:
            Mov         C, BM3.5        ;P(B)19   := B14
            Rrc         A
            Mov         C, BM7.7        ;P(B)20   := B32
            Rrc         A
            Mov         C, BM6.2        ;P(B)21   := B27
            Rrc         A
            Mov         C, BM0.2        ;P(B)22   := B3
            Rrc         A
            Mov         C, BM2.0        ;P(B)23   := B9
            Rrc         A
            Mov         C, BM4.2        ;P(B)24   := B19
            Rrc         A
            Dec         R1
            Xrl         A,   @R1        ;Acc      := new Right2
            Mov         @R1,  A         ;Left2    := new Right2
            Mov         C, BM3.4        ;P(B)25   := B13
            Rrc         A
            Mov         C, BM7.5        ;P(B)26   := B30
            Rrc         A
            Mov         C, BM1.5        ;P(B)27   := B6
            Rrc         A
            Mov         C, BM5.5        ;P(B)28   := B22
            Rrc         A
            Mov         C, BM2.2        ;P(B)29   := B11
            Rrc         A
            Mov         C, BM0.3        ;P(B)30   := B4
            Rrc         A
            Mov         C, BM6.0        ;P(B)31   := B25
            Rrc         A
            Mov         C, BM3.7        ;P(B)32   := B16
            Rrc         A
            Dec         R1
            Xrl         A,   @R1        ;Acc      := new Right3
            Mov         @R1,  A         ;Left3    := new Right3

            Mov         A,    R3        ;Acc      := RoundCounter
            Jz          PreOutput       ;Ready Rounds ?
            Jmp         OneRound        ;Next  Round  !

        ;Normalize output of 16 rounds
PreOutput:  Mov         BM7, @R1        ;BM7      := Right3
            Inc         R1
            Mov         BM5, @R1        ;BM5      := Right2
            Inc         R1
            Mov         BM3, @R1        ;BM3      := Right1
            Inc         R1
            Mov         BM1, @R1        ;BM1      := Right0
            Inc         R1
            Mov         BM6, @R1        ;BM6      := Left3
            Inc         R1
            Mov         BM4, @R1        ;BM4      := Left2
            Inc         R1
            Mov         BM2, @R1        ;BM2      := Left1
            Inc         R1
            Mov         BM0, @R1        ;BM0      := Left0

            Mov         R3,  #8         ;Inverse initial permutation IP^-1
            Mov         R0,  #BM0

InvItPerm:  Mov         A,   @R0
            Inc         R0
            Rl          A               ;Due to Left and Right notation
            Mov         R4,  #8         ;which are rotated right 1 bit
            Rrc         A               ;in comparision with Standard
            Xch         A,   @R1
            Rlc         A
            Xch         A,   @R1
            Dec         R1
            Djnz        R4, $-5

            Mov         A,    R1        ;Acc      := addr (Output0) - 1
            Add         A,   #8         ;Acc      := addr (Output7)
            Mov         R1,   A         ;R1       := addr (Output7)
            Djnz        R3, InvItPerm

            Mov         A,   @R1        ;Acc      := Output7 << 2
            Rr          A
            Rr          A
            Mov         @R1,  A
        ;Result of DES operation available
            Mov         A,    R6        ;Acc      := addr (Input0) + 8
            Mov         R0,   A         ;R0       := addr (Input0) + 8
            Clr         C

            Mov         A,    R5
            Jb          Acc.4, TestEnd  ;BuildMac ?
            Rl          A
            Rlc         A
            Anl         C,   /Acc.7     ;Carry    := Mode is CBC decode

            Mov         R3,  #8         ;Copy data to input location
            Mov         A,   @R1        ;Acc      := OutputI
            Dec         R1
            Dec         R0
            Mov         @R0,  A
            Djnz        R3, $-4

TestEnd:    Mov         A,    R7
            Jz          DesEnd          ;End of input data reached?
            Jnc         NoCbcDec
            Mov         A,    R6        ;For CBC decode set pointer to next block
            Add         A,   #0F0h
            Mov         R6,   A
            Mov         R1,   A
            Mov         R3,  #8         ;and XOR it with previous output
            Mov         A,   @R1
            Xrl         A,   @R0
            Mov         @R0,  A
            Inc         R0
            Inc         R1
            Djnz        R3, $-5
NoCbcDec:   LJmp        DesAction

DesEnd:     Pop         Dph             ;Restore DataPointer
            Pop         Dpl
            Jnc         DesRet
            Call        VecExist
            Jnc         DesRet

            Mov         A,   #1         ;CBC decode only

;            MovC        A, @A+Dptr      ;Acc      := HeaderLength
 	    lcall       GetKey	    	

            Add         A,   #14        ;Acc      := index (Vector0)
            Mov         R1,   A
            Mov         A,    R1
;            MovC        A, @A+Dptr      ;Acc      := VectorI
 	    lcall       GetKey	    	            

            Inc         R1
            Xrl         A,   @R0
            Mov         @R0,  A
            Inc         R0
            Djnz        R3, $-6

DesRet:     Mov         R3,  #8
            Mov         A,    R2        ;Acc      := addr (D0, C0)
            Add         A,    R3        ;Acc      := addr (Output0)
            Mov         R1,   A         ;R1       := addr (Output0)
            Mov         A,    R5        ;Acc      := Mode
            Jnb         Acc.4,NoMAC
        ;MAC verification/copy MAC to end of data
            Mov         C,    Acc.5
            Mov         A,   @R1
            Jc          $+5
            Xrl         A,   @R0
            Jnz         MacErr
            Mov         @R0,  A
            Inc         R0
            Inc         R1
            Djnz        R3, $-9

NoMAC:      Mov         A,    R6
            Mov         R1,   A
            Mov         A,   #8
            Clr         C
            Ret                         ;Normal Termination  => Carry == 0 !


MacErr:     Call        GErrCrypt       ;Invalid MAC
            DB          R2MAC

VecExist:   Mov         A,   #2
;            MovC        A, @A+Dptr      ;Acc      := KeyType
 	    lcall       GetKey	    	            
            Rrc         A               ;Carry    := InitialVectorExistance
            Mov         A,   #1
;            MovC        A, @A+Dptr      ;Acc      := HeaderLength
 	    lcall       GetKey	    	            
;            MovC        A, @A+Dptr      ;Acc      := EntryCount
 	    lcall       GetKey	    	            
            Dec         A
            Jnz         $+3             ;EntryCount >  1 ?
            Clr         C               ;EntryCount == 1 => C := 0
            Mov         R3,  #8
            Ret

GErrCrypt:  Pop  DPh
            Pop  DPl
            Clr  A
            MovC A,@A+DPtr

GetKey:     Push        DPH
            Push	DPL        		 
            Add         A, DPL
            Mov         DPL, A
            Mov		A, DPH
            Addc	A, #0h
            Mov	        DPH, A
            MovX        A, @Dptr      	;Acc      := ith byte of DES-Key
            Pop		DPL
            Pop		DPH
            ret


SBoxes:    ;BoxNr.:     2,1  4,3  6,5  8,7
            DB          0F7h,0E5h,034h,0B2h
            DB          002h,05Bh,092h,0E8h
            DB          09Ch,088h,001h,05Ch
            DB          0AFh,0FDh,0EFh,005h
            DB          064h,006h,09Eh,06Fh
            DB          05Bh,031h,045h,093h
            DB          03Ah,0DDh,07Bh,0AAh
            DB          09Ch,0AAh,086h,0F0h
            DB          01Bh,079h,052h,014h
            DB          0E7h,092h,0F8h,02Dh
            DB          046h,013h,0CCh,0C9h
            DB          039h,0C4h,023h,056h
            DB          0CDh,09Fh,06Dh,0D1h
            DB          0B4h,0ECh,03Eh,07Eh
            DB          0A0h,024h,0A7h,036h
            DB          04Ah,017h,0D0h,0A9h
            DB          082h,0B0h,083h,04Dh
            DB          078h,066h,074h,0D2h
            DB          0E5h,04Bh,0BAh,093h
            DB          013h,088h,009h,06Fh
            DB          0DFh,06Ch,045h,0F0h
            DB          026h,0DFh,01Bh,03Ch
            DB          009h,032h,0E0h,005h
            DB          0C5h,045h,0BCh,0CAh
            DB          078h,0C7h,0F8h,027h
            DB          0D1h,009h,0ADh,08Bh
            DB          0B3h,0AEh,02Fh,07Eh
            DB          06Eh,073h,05Ah,0B1h
            DB          021h,05Ah,016h,08Bh
            DB          08Dh,0B0h,0C1h,047h
            DB          05Eh,0F1h,0D9h,0E8h
            DB          0F0h,02Eh,067h,014h
            DB          0C0h,0BBh,057h,08Bh
            DB          0BFh,0C8h,02Dh,046h
            DB          035h,024h,06Ah,037h
            DB          0DAh,092h,0D6h,0F9h
            DB          0F7h,06Ch,0E2h,052h
            DB          0C2h,056h,098h,028h
            DB          069h,083h,00Ch,004h
            DB          005h,03Dh,065h,0C7h
            DB          02Eh,0D0h,024h,0BDh
            DB          051h,00Bh,043h,07Bh
            DB          083h,04Ah,0BFh,06Ah
            DB          0ECh,0A7h,080h,090h
            DB          01Bh,006h,09Bh,0E8h
            DB          028h,0B1h,0F4h,015h
            DB          0DCh,07Fh,0C1h,091h
            DB          076h,044h,01Ah,06Ch
            DB          0BFh,01Eh,0FDh,0F0h
            DB          013h,0F5h,0C1h,08Dh
            DB          006h,0E1h,080h,0ACh
            DB          06Dh,02Fh,07Fh,03Ah
            DB          044h,0F2h,03Eh,0C9h
            DB          0F9h,089h,0A7h,052h
            DB          09Ah,05Dh,0D9h,07Fh
            DB          0A0h,0EAh,002h,0A4h
            DB          0E2h,0A9h,043h,01Eh
            DB          084h,060h,03Eh,0E1h
            DB          05Dh,037h,075h,0D3h
            DB          037h,0DCh,0E9h,00Fh
            DB          078h,0C5h,0A8h,025h
            DB          04Eh,01Eh,05Bh,0BEh
            DB          0A1h,098h,016h,046h
            DB          09Bh,073h,0BCh,0D3h

;********** End of DES ******
            End

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -