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

📄 des.lst

📁 51系列计算DES的方法之一.....,很小的测试程序....
💻 LST
📖 第 1 页 / 共 5 页
字号:
006A ED              168                 Mov         A,    R5        ;Acc      := mode
006B 30E704          169                 Jnb         Acc.7,DesModeOk
006E 120000   F      170                 Call        GErrCrypt       ;Error: wrong mode
0071 03              171                 DB          003h
                     172     
0072 B2E5            173     DesModeOk:  Cpl         Decode
0074 FD              174                 Mov         R5,   A
0075 5430            175                 Anl         A,   #030h      ;Mask Decode and MAC-Bit
0077 7009            176                 Jnz         DesLgOk         ;no len check when MAC or encrypt
0079 EF              177                 Mov         A,    R7        ;Get ByteCount
007A 5407            178                 Anl         A,   #007h      ;James Bond
007C 6004            179                 Jz          DesLgOk
007E 120000   F      180                 Call        GErrCrypt       ;Error: Length not multiple of 8
0081 08              181                 DB          008h
                     182     
0082 ED              183     DesLgOk:    Mov         A,    R5        ;Acc      := mode
0083 6440            184                 Xrl         A,   #040h      ;CBC-Decode
0085 54F0            185                 Anl         A,   #0F0h
0087 7005            186                 Jnz         DesSave         ;No CBC-Decode ?
                     187                                             ;CBC-Decode starts at end of data
0089 EE              188                 Mov         A,    R6        ;Acc      := addr (Block0)
008A 2F              189                 Add         A,    R7        ;Acc      := addr (BlockN) + 8
008B 24F8            190                 Add         A,   #0F8h      ;Acc      := addr (BlockN)
A51 MACRO ASSEMBLER  DES                                                                  09/18/2002 08:53:03 PAGE     4

008D FE              191                 Mov         R6,   A         ;R6       := addr (BlockN)
                     192     
008E C082            193     DesSave:    Push        Dpl
0090 C083            194                 Push        Dph
                     195     
                     196     
                     197     ;********** Function DES **********
                     198     
0092 7B08            199     DESAction:  Mov         R3,  #8         ;Initial permutation IP of 8 bytes
0094 EA              200                 Mov         A,    R2        ;Acc      := addr (D0, C0)
0095 2B              201                 Add         A,    R3        ;Acc      := addr (Output0)
0096 F9              202                 Mov         R1,   A         ;R1       := addr (Output0)
0097 ED              203                 Mov         A,    R5        ;Acc      := Mode
0098 F5F0            204                 Mov         B,    A         ;B-Accu   := Mode
009A 23              205                 Rl          A
009B 33              206                 Rlc         A               ;Carry    := R5.6
009C 82E7            207                 Anl         C,    Acc.7     ;CBC-Encode  => Carry = 1 !
009E 72E6            208                 Orl         C,    Acc.6     ;BuildMac    => Carry = 1 !
00A0 92F0            209                 Mov         0F0h, C         ;B.0 = 1     => ExOr InputData
                     210     
                     211             ;get 8 bytes of data/add padding bytes
00A2 7A80            212     InitPerm:   Mov         R2,  #080h      ;Padding value
00A4 EF              213                 Mov         A,    R7
00A5 6006            214                 Jz          Padding
00A7 1F              215                 Dec         R7              ;ByteCounter
00A8 EE              216                 Mov         A,    R6        ;Acc      := addr (InputI)
00A9 F8              217                 Mov         R0,   A         ;R0       := addr (InputI)
00AA E6              218                 Mov         A,   @R0        ;Acc      := InputI
00AB 8004            219                 SJmp        $+6
00AD CA              220     Padding:    Xch         A,    R2        ;Acc      := PaddingByte
00AE 20F404          221                 Jb          0F4h, $+7       ;BuildMac ?  => Skip Increment
                     222            
00B1 0E              223                 Inc         R6              ;addr (I) += 1
                     224             ;add previous output if necessary
00B2 30F001          225                 Jnb         0F0h, $+4
00B5 67              226                 Xrl         A,   @R1        ;Acc      ^= OutputI
00B6 7800     F      227                 Mov         R0,  #BM0       ;R0       := addr (Work0), it contains Right0
00B8 7C08            228                 Mov         R4,  #8         ;R4       := shift 8 bits
00BA DB02            229                 Djnz        R3, $+4
00BC 800A            230                 SJmp        InitEnd
                     231             ;permute byte into bitmap area
00BE 09              232                 Inc         R1              ;addr (O) += 1
00BF 33              233                 Rlc         A
00C0 C6              234                 Xch         A,   @R0
00C1 33              235                 Rlc         A
00C2 C6              236                 Xch         A,   @R0
00C3 08              237                 Inc         R0              ;addr (W) += 1
00C4 DCF9            238                 Djnz        R4, $-5
00C6 80DC            239                 SJmp        InitPerm+2
                     240             ;permute last byte
00C8 23              241     InitEnd:    Rl          A
00C9 23              242                 Rl          A
00CA 33              243                 Rlc         A
00CB C6              244                 Xch         A,   @R0
00CC 23              245                 Rl          A
00CD 13              246                 Rrc         A
00CE C6              247                 Xch         A,   @R0
00CF 08              248                 Inc         R0              ;addr (W) += 1
00D0 DCF8            249                 Djnz        R4, $-6
                     250     
                     251             ;load permuted input in calculation area
00D2 A700     F      252                 Mov         @R1,  BM1       ;R1       := addr (Left0)
00D4 19              253                 Dec         R1              ;R1       := addr (Left1)
00D5 A700     F      254                 Mov         @R1,  BM3
00D7 19              255                 Dec         R1              ;R1       := addr (Left2)
00D8 A700     F      256                 Mov         @R1,  BM5
A51 MACRO ASSEMBLER  DES                                                                  09/18/2002 08:53:03 PAGE     5

00DA 19              257                 Dec         R1              ;R1       := addr (Left3)
00DB A700     F      258                 Mov         @R1,  BM7
00DD 19              259                 Dec         R1              ;R1       := addr (Right0)
00DE A700     F      260                 Mov         @R1,  BM0
00E0 19              261                 Dec         R1              ;R1       := addr (Right1)
00E1 A700     F      262                 Mov         @R1,  BM2
00E3 19              263                 Dec         R1              ;R1       := addr (Right2)
00E4 A700     F      264                 Mov         @R1,  BM4
00E6 19              265                 Dec         R1              ;R1       := addr (Right3)
00E7 A700     F      266                 Mov         @R1,  BM6
                     267     
                     268             ;16 rounds DES operation
00E9 E9              269                 Mov         A,    R1        ;Acc      := addr (Output0)
00EA 24F8            270                 Add         A,   #0F8h      ;Acc      := addr (D0, C0)
00EC FA              271                 Mov         R2,   A         ;R2       := addr (D0, C0)
00ED 7B10            272                 Mov         R3,  #16        ;RoundCounter
                     273     
                     274     
00EF 1B              275     OneRound:   Dec         R3              ;Decrement RoundCounter
00F0 EB              276                 Mov         A,    R3        ;Acc      := RoundCounter
00F1 75F007          277                 Mov         B,   #7         ;DivideValue for Shift1Test
00F4 84              278                 Div         AB              ;B-Accu   := RoundCounter mod 7
00F5 ED              279                 Mov         A,    R5        ;Acc      := Parameter2 of APDU
00F6 5430            280                 Anl         A,   #030h      ;Acc5..4  := Decode~, BuildMac
00F8 601D            281                 Jz          RoundKey        ;Decryption ?
                     282     
00FA EA              283                 Mov         A,    R2        ;Acc      := addr (D0, C0)
00FB F8              284                 Mov         R0,   A         ;R0       := addr (D0, C0)
00FC E5F0            285                 Mov         A,    B         ;Acc      := RoundCounter mod 7
00FE 24FF            286                 Add         A,   #0FFh      ;Carry    := Acc != 0  => Shift2
0100 EB              287                 Mov         A,    R3
0101 04              288                 Inc         A
0102 B0E4            289                 Anl         C,   /Acc.4     ;Carry    &= First Round ?
0104 9200     F      290                 Mov         BM0.7,C         ;BM0.7    == 0 ?       => Shift1
0106 E6              291                 Mov         A,   @R0        ;Acc      := D6, C6 << 2 = D0, C0
0107 7C06            292     EncShift2:  Mov         R4,  #6         ;R4       := shift through 7 bytes
0109 F8              293                 Mov         R0,   A         ;R0       := D6, C6 << 2 = D0, C0
010A EA              294                 Mov         A,    R2        ;Acc      := addr (D0, C0)
010B 2C              295                 Add         A,    R4        ;Acc      := addr (D6, C6)
010C C8              296                 Xch         A,    R0        ;Acc      := D6, C6 << 2
010D 03              297                 Rr          A               ;Acc      := D6, C6 << 1
010E 03              298                 Rr          A               ;Acc      := D6, C6
010F C6              299                 Xch         A,   @R0        ;ShiftDown one byte
0110 18              300                 Dec         R0              ;Address  -= 1
0111 DCFC            301                 Djnz        R4, $-2
0113 1000F1   F      302                 Jbc         BM0.7,EncShift2 ;Shift twice ?
0116 F6              303                 Mov         @R0,  A         ;Store D0, C0
                     304     
                     305     
0117                 306     RoundKey:  ;Permutation 36  5 27 61 18 54  9 47    = D6, C6
                     307                ;            44 13 35  6 26 62 17 55    = D5, C5
                     308                ;            52 21 43 14 34  7 25 63    = D4, C4
                     309                ;            60 29 51 22 42 15 33  4    = D3, C3
                     310                ;             3 37 59 30 50 23 41 12    = D2, C2
                     311                ;            11 45  2 38 58 31 49 20    = D1, C1
                     312                ;            19 53 10 46  1 39 57 28    = D0, C0
                     313     
0117 EA              314                 Mov         A,    R2        ;RoundKey := PC_2 (D, C), 8*6 bit
0118 F8              315                 Mov         R0,   A         ;R0       := addr (C0)
0119 E6              316                 Mov         A,   @R0        ;Acc      := D0, C0
011A F500     F      317                 Mov         BM2,  A         ;Bit8
011C 33              318                 Rlc         A
011D F500     F      319                 Mov         BM0,  A         ;Bit1
011F 23              320                 Rl          A
0120 23              321                 Rl          A
0121 F500     F      322                 Mov         BM6,  A         ;Bit53
A51 MACRO ASSEMBLER  DES                                                                  09/18/2002 08:53:03 PAGE     6

0123 33              323                 Rlc         A
0124 F500     F      324                 Mov         BM7,  A         ;Bit46
0126 9200     F      325                 Mov         BM6.0,C         ;Bit39
0128 23              326                 Rl          A
0129 33              327                 Rlc         A
012A 9200     F      328                 Mov         BM7.7,C         ;Bit32
012C 33              329                 Rlc         A
012D F500     F      330                 Mov         BM1,  A         ;Bit15
012F 08              331                 Inc         R0
0130 E6              332                 Mov         A,   @R0        ;Acc      := D1, C1
0131 33              333                 Rlc         A
0132 9200     F      334                 Mov         BM2.6,C         ;Bit23
0134 23              335                 Rl          A
0135 23              336                 Rl          A
0136 33              337                 Rlc         A
0137 F500     F      338                 Mov         BM4,  A         ;Bit47
0139 F500     F      339                 Mov         BM5,  A         ;Bit33
013B 9200     F      340                 Mov         BM5.3,C         ;Bit40
013D 33              341                 Rlc         A

⌨️ 快捷键说明

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