?? dessamp.lst
字號:
00246
00247 ;-----------------------------------------------------------------------------
00248 ; initial permutation
00249 ;
00250 ; on entry:
00251 ; data pointed to by FSR
00252 ; on exit:
00253 ; permuted data in left:right
00254 ; FSR unchanged
00255 ; input data unchanged
00256 ;-----------------------------------------------------------------------------
00257
011B 3008 00258 ip: movlw 8
011C 008F 00259 movwf temp
00260
011D 0C80 00261 ip0: rrf INDF
011E 0C9F 00262 rrf left+3
011F 0C80 00263 rrf INDF
0120 0CA3 00264 rrf left+7
0121 0C80 00265 rrf INDF
0122 0C9E 00266 rrf left+2
0123 0C80 00267 rrf INDF
0124 0CA2 00268 rrf left+6
0125 0C80 00269 rrf INDF
0126 0C9D 00270 rrf left+1
0127 0C80 00271 rrf INDF
0128 0CA1 00272 rrf left+5
0129 0C80 00273 rrf INDF
012A 0C9C 00274 rrf left+0
MPASM 01.50 Released DESSAMP.ASM 5-5-1997 16:06:32 PAGE 20
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
012B 0C80 00275 rrf INDF
012C 0CA0 00276 rrf left+4
00277
012D 0A84 00278 incf FSR
012E 0B8F 00279 decfsz temp
012F 291D 00280 goto ip0
00281
0130 30F8 00282 movlw -8 ; restore FSR to original value
0131 3E04 00283 addlw FSR
00284
0132 0008 00285 return
00286
00287
00288 ;-----------------------------------------------------------------------------
00289 ; inverse initial permutation
00290
00291 ; on entry:
00292 ; data in left:right
00293 ; pointer to storage for permuted data output pointed to by FSR
00294 ; on exit:
00295 ; permuted data output in buffer pointed to by FSR
00296 ; FSR unchanged
00297 ; input data unchanged
00298 ;-----------------------------------------------------------------------------
00299
0133 00300 ipinv:
0133 3008 00301 movlw 8
0134 008F 00302 movwf temp
00303
0135 00304 ipinv0:
0135 0C9F 00305 rrf left+3
0136 0C80 00306 rrf INDF
0137 0CA3 00307 rrf left+7
0138 0C80 00308 rrf INDF
0139 0C9E 00309 rrf left+2
013A 0C80 00310 rrf INDF
013B 0CA2 00311 rrf left+6
013C 0C80 00312 rrf INDF
013D 0C9D 00313 rrf left+1
013E 0C80 00314 rrf INDF
013F 0CA1 00315 rrf left+5
0140 0C80 00316 rrf INDF
0141 0C9C 00317 rrf left+0
0142 0C80 00318 rrf INDF
0143 0CA0 00319 rrf left+4
0144 0C80 00320 rrf INDF
00321
0145 0A84 00322 incf FSR
0146 0B8F 00323 decfsz temp
0147 2935 00324 goto ipinv0
00325
0148 30F8 00326 movlw -8 ; restore FSR to original value
0149 3E04 00327 addlw FSR
MPASM 01.50 Released DESSAMP.ASM 5-5-1997 16:06:32 PAGE 21
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00328
014A 0008 00329 return
00330
00331
00332 ;-----------------------------------------------------------------------------
00333 ; core of DES
00334 ;-----------------------------------------------------------------------------
00335
00336 ; The descore and desinvcore subroutines do complete DES encryptions and
00337 ; decryptions less the initial permutation and inverse initial permutation.
00338 ; The permutations are omitted here because in a triple-DES, it is a waste
00339 ; of time to apply them to the intermediate stages.
00340
00341
00342 ; On entry:
00343 ; plaintext in left:right
00344 ; permuted key in keyl:keyr
00345 ; On exit:
00346 ; ciphertext in left:right
00347
00348 ; call = 2 cycles
00349 ; 4 calls to roundl @ 320 cycles = 1280 cycles
00350 ; 12 calls to roundl2 @ 338 cycles = 4056 cycles
00351 ; fall into swaplr = 18 cycles
00352 ; -----------
00353 ; total = 5356 cycles
00354
014B 00355 descore:
014B 21A3 00356 call roundl ; round 1
014C 21A3 00357 call roundl ; round 2
014D 21A2 00358 call roundl2 ; round 3
014E 21A2 00359 call roundl2 ; round 4
014F 21A2 00360 call roundl2 ; round 5
0150 21A2 00361 call roundl2 ; round 6
0151 21A2 00362 call roundl2 ; round 7
0152 21A2 00363 call roundl2 ; round 8
0153 21A3 00364 call roundl ; round 9
0154 21A2 00365 call roundl2 ; round 10
0155 21A2 00366 call roundl2 ; round 11
0156 21A2 00367 call roundl2 ; round 12
0157 21A2 00368 call roundl2 ; round 13
0158 21A2 00369 call roundl2 ; round 14
0159 21A2 00370 call roundl2 ; round 15
015A 21A3 00371 call roundl ; round 16
00372
00373 ; swaplr = 20 cycles including call
015B 00374 swaplr:
015B 081C 00375 movf left+0,W
015C 00A0 00376 movwf right+0
015D 081D 00377 movf left+1,W
015E 00A1 00378 movwf right+1
015F 081E 00379 movf left+2,W
0160 00A2 00380 movwf right+2
MPASM 01.50 Released DESSAMP.ASM 5-5-1997 16:06:32 PAGE 22
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
0161 081F 00381 movf left+3,W
0162 00A3 00382 movwf right+3
00383
0163 0824 00384 movf newr+0,W
0164 009C 00385 movwf left+0
0165 0825 00386 movf newr+1,W
0166 009D 00387 movwf left+1
0167 0826 00388 movf newr+2,W
0168 009E 00389 movwf left+2
0169 0827 00390 movf newr+3,W
016A 009F 00391 movwf left+3
00392
016B 0008 00393 return
00394
00395
00396 ; On entry:
00397 ; ciphertext in left:right
00398 ; permuted key in keyl:keyr
00399 ; On exit:
00400 ; plaintext in left:right
00401
00402 ; call = 2 cycles
00403 ; 4 calls to roundr @ 324 cycles = 1296 cycles
00404 ; 12 calls to roundr2 @ 344 cycles = 4128 cycles
00405 ; goto swaplr = 20 cycles
00406 ; -----------
00407 ; total = 5446 cycles
00408
016C 00409 desinvcore:
016C 21A0 00410 call roundr ; round 1
016D 219D 00411 call roundr2 ; round 2
016E 219D 00412 call roundr2 ; round 3
016F 219D 00413 call roundr2 ; round 4
0170 219D 00414 call roundr2 ; round 5
0171 219D 00415 call roundr2 ; round 6
0172 219D 00416 call roundr2 ; round 7
0173 21A0 00417 call roundr ; round 8
0174 219D 00418 call roundr2 ; round 9
0175 219D 00419 call roundr2 ; round 10
0176 219D 00420 call roundr2 ; round 11
0177 219D 00421 call roundr2 ; round 12
0178 219D 00422 call roundr2 ; round 13
0179 219D 00423 call roundr2 ; round 14
017A 21A0 00424 call roundr ; round 15
017B 21A0 00425 call roundr ; round 16
00426
017C 295B 00427 goto swaplr
00428
00429
00430 ;-----------------------------------------------------------------------------
00431 ; key rotation subroutines
00432 ;-----------------------------------------------------------------------------
00433
MPASM 01.50 Released DESSAMP.ASM 5-5-1997 16:06:32 PAGE 23
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00434 ; The 16 rounds of the DES each use a different 48-bit subkey, which is
00435 ; generated by INDFependently rotating the two 28-bit halves of the 56-bit key,
00436 ; then using Permuted Choice 2 to extract the 48 bit subkey.
00437 ;
00438 ; Since the PIC doesn't have enough RAM to store precomputed subkeys, the
00439 ; rotations are done on the fly using these subroutines. The Permuted Choice
00440 ; 2 function is done as part of the xorkey macro calls.
00441
00442
00443 ; On entry and exit, the current subkey is in keyl:keyr.
00444
00445 ; keyrotl takes 18 cycles including call
00446
017D 00447 keyrotl:
017D 1003 00448 bcf STATUS,C
017E 0D97 00449 rlf keyl+3
017F 0D96 00450 rlf keyl+2
0180 0D95 00451 rlf keyl+1
0181 0D94 00452 rlf keyl+0
0182 1803 00453 btfsc STATUS,C
0183 1617 00454 bsf k28
00455
0184 1003 00456 bcf STATUS,C
0185 0D9B 00457 rlf keyr+3
0186 0D9A 00458 rlf keyr+2
0187 0D99 00459 rlf keyr+1
0188 0D98 00460 rlf keyr+0
0189 1803 00461 btfsc STATUS,C
018A 161B 00462 bsf k56
00463
018B 0008 00464 return
00465
00466
00467 ; keyrotr takes 20 cycles including call
00468
018C 00469 keyrotr:
018C 1003 00470 bcf STATUS,C
018D 0C94 00471 rrf keyl+0
018E 0C95 00472 rrf keyl+1
018F 0C96 00473 rrf keyl+2
0190 0C97 00474 rrf keyl+3
0191 1997 00475 btfsc keyl+3,3
0192 1794 00476 bsf k01
0193 1197 00477 bcf keyl+3,3
00478
0194 1003 00479 bcf STATUS,C
0195 0C98 00480 rrf keyr+0
0196 0C99 00481 rrf keyr+1
0197 0C9A 00482 rrf keyr+2
0198 0C9B 00483 rrf keyr+3
0199 199B 00484 btfsc keyr+3,3
019A 1798 00485 bsf k29
019B 119B 00486 bcf keyr+3,3
MPASM 01.50 Released DESSAMP.ASM 5-5-1997 16:06:32 PAGE 24
LOC OBJECT CODE LI
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -