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

📄 twofish.lst

📁 简单的BASE算法
💻 LST
📖 第 1 页 / 共 2 页
字号:
  Sat Jun 13 11:05:07 1998                                                                                               Page    1

        Twofish for 6805
        Author: Doug Whiting, Hi/fn, May 1998




               2500 A.D. 6805 Macro Assembler  -  Version 5.02a
               ------------------------------------------------

                       Input  Filename : twofish.asm
                       Output Filename : twofish.obj
                       Listing Has Been Relocated                               


    1                         		.TITLE	 	Twofish for 6805
    2                         		.SUBTITLE	Author: Doug Whiting, Hi/fn, May 1998
    3                         	;
    4                         	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    5                         	;	Copyright 1998, Hi/fn.  All rights reserved	
    6                         	;
    7                         	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    8                         	;
    9                         		.symbols
   10                         		.linklist
   11                         		.debug asm
   12                         		.spaces	on
   13                         	;
   14                         	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   15                         	;	Speed/space tradeoff settings
   16                         	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   17                         	; Set all to 1 to minimize time, 0 to minimize code size
   18                         	;
   19         0001            	UNROLL_SUBKEY	.equ	1	;use two f32s in computeSubkey
   20         0000            	USE_ALPHA_TAB	.equ	0	;use 256-byte alpha lookup table
   21         0001            	USE_MDS_TAB	.equ	1	;use two 256-byte lookups  (EF, 5B)
   22         0001            	UNROLL_ROUND	.equ	1	;use unique round code
   23                         	;
   24                         	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   25                         	;	Constant definitions
   26                         	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   27                         	;
   28         0010            	BLK_SIZE	equ	16
   29         0010            	KEY_SIZE	equ	16
   30         0010            	ROUNDS		equ	16
   31         00B4            	GF_FDBK		equ	(169h.SHR.1)
   32                         	
   33                         	;
   34                         	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   35                         		.PAGE0		;RAM variables
   36                         	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   37                         	;
   38         0050            	RAM0	.var	$
   39  0050                   	Text	.blkb	BLK_SIZE	;encryption block goes here
   40  0060                   	K32e	.blkb	KEY_SIZE/4	;encryption key   goes here
   41  0064                   	K32o	.blkb	KEY_SIZE/4	;(even dword,odd dword,RS dword)
   42  0068                   	SboxKey	.blkb	KEY_SIZE/4
   43         000C            	KBUMP	.var	$-K32e
   44  006C                   		.blkb	KBUMP		;(even dword,odd dword,RS dword)
   45  0078                   	sk0	.blkb	4		;round subkey
   46  007C                   	sk1	.blkb	4		
  Sat Jun 13 11:05:07 1998                                                                                               Page    2

        Twofish for 6805
        Author: Doug Whiting, Hi/fn, May 1998

   47  0080                   	t0	.blkb	4		;t0 MUST follow sk1 directly!
   48  0084                   	t1	.blkb	4
   49  0088                   	sPtr	.blkb	1
   50  0089                   	round	.blkb	1		;round number
   51  008A                   	tmp	.blkb	2
   52                         	
   53         003C            	RAM_size .var	$-RAM0
   54                         	
   55                         	; variables for the test code
   56  008C                   	kTabPtr	.blkb	1
   57  008D                   	tmpPtr	.blkb	1
   58                         	;
   59                         	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   60                         		.CODE
   61                         	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   62                         	;
   63                         		; test data structure
   64  0100                   	keyTable:
   65  0100                   		include	vector.inc	;load vectors generated by C code
   66                         	; Twofish vector #1
   67                         	    ;Key Size:
   68  0100   80              		.byte	080h
   69                         	    ;Key:
   70  0101   00 00 00 00 00  		.byte	000h,000h,000h,000h,000h,000h,000h,000h
               00 00 00 
   71  0109   00 00 00 00 00  		.byte	000h,000h,000h,000h,000h,000h,000h,000h
               00 00 00 
   72                         	    ;Plaintext:
   73  0111   00 00 00 00 00  		.byte	000h,000h,000h,000h,000h,000h,000h,000h
               00 00 00 
   74  0119   00 00 00 00 00  		.byte	000h,000h,000h,000h,000h,000h,000h,000h
               00 00 00 
   75                         	    ;Ciphertext:
   76  0121   9F 58 9F 5C F6  		.byte	09Fh,058h,09Fh,05Ch,0F6h,012h,02Ch,032h
               12 2C 32 
   77  0129   B6 BF EC 2F 2A  		.byte	0B6h,0BFh,0ECh,02Fh,02Ah,0E8h,0C3h,05Ah
               E8 C3 5A 
   78                         	;-------------------------------------------------------
   79                         	; Twofish vector #2
   80                         	    ;Key Size:
   81  0131   80              		.byte	080h
   82                         	    ;Key:
   83  0132   9F 58 9F 5C F6  		.byte	09Fh,058h,09Fh,05Ch,0F6h,012h,02Ch,032h
               12 2C 32 
   84  013A   B6 BF EC 2F 2A  		.byte	0B6h,0BFh,0ECh,02Fh,02Ah,0E8h,0C3h,05Ah
               E8 C3 5A 
   85                         	    ;Plaintext:
   86  0142   9F 58 9F 5C F6  		.byte	09Fh,058h,09Fh,05Ch,0F6h,012h,02Ch,032h
               12 2C 32 
   87  014A   B6 BF EC 2F 2A  		.byte	0B6h,0BFh,0ECh,02Fh,02Ah,0E8h,0C3h,05Ah
               E8 C3 5A 
   88                         	    ;Ciphertext:
   89  0152   1B 1B 18 6D FE  		.byte	01Bh,01Bh,018h,06Dh,0FEh,04Fh,01Fh,0C4h
               4F 1F C4 
   90  015A   38 5B C7 6F F3  		.byte	038h,05Bh,0C7h,06Fh,0F3h,0CAh,040h,027h
               CA 40 27 
   91                         	;-------------------------------------------------------
  Sat Jun 13 11:05:07 1998                                                                                               Page    3

        Twofish for 6805
        Author: Doug Whiting, Hi/fn, May 1998

   92                         	; Twofish vector #3
   93                         	    ;Key Size:
   94  0162   80              		.byte	080h
   95                         	    ;Key:
   96  0163   84 43 87 31 08  		.byte	084h,043h,087h,031h,008h,05Dh,033h,0F6h
               5D 33 F6 
   97  016B   8E E4 2B 40 D9  		.byte	08Eh,0E4h,02Bh,040h,0D9h,022h,083h,07Dh
               22 83 7D 
   98                         	    ;Plaintext:
   99  0173   1B 1B 18 6D FE  		.byte	01Bh,01Bh,018h,06Dh,0FEh,04Fh,01Fh,0C4h
               4F 1F C4 
  100  017B   38 5B C7 6F F3  		.byte	038h,05Bh,0C7h,06Fh,0F3h,0CAh,040h,027h
               CA 40 27 
  101                         	    ;Ciphertext:
  102  0183   80 1D AA 23 37  		.byte	080h,01Dh,0AAh,023h,037h,0D8h,0DBh,039h
               D8 DB 39 
  103  018B   5B EC C2 A7 55  		.byte	05Bh,0ECh,0C2h,0A7h,055h,0C5h,0D0h,085h
               C5 D0 85 
  104                         	;-------------------------------------------------------
  105                         	; Twofish vector #4
  106                         	    ;Key Size:
  107  0193   80              		.byte	080h
  108                         	    ;Key:
  109  0194   9B 06 B2 4E C9  		.byte	09Bh,006h,0B2h,04Eh,0C9h,097h,0C4h,0FDh
               97 C4 FD 
  110  019C   63 B7 05 C8 A6  		.byte	063h,0B7h,005h,0C8h,0A6h,00Fh,090h,0A2h
               0F 90 A2 
  111                         	    ;Plaintext:
  112  01A4   80 1D AA 23 37  		.byte	080h,01Dh,0AAh,023h,037h,0D8h,0DBh,039h
               D8 DB 39 
  113  01AC   5B EC C2 A7 55  		.byte	05Bh,0ECh,0C2h,0A7h,055h,0C5h,0D0h,085h
               C5 D0 85 
  114                         	    ;Ciphertext:
  115  01B4   5B 0A 52 93 01  		.byte	05Bh,00Ah,052h,093h,001h,060h,055h,0D6h
               60 55 D6 
  116  01BC   14 4C E8 38 A9  		.byte	014h,04Ch,0E8h,038h,0A9h,0EFh,05Ah,0EBh
               EF 5A EB 
  117                         	;-------------------------------------------------------
  118                         	
  119  01C4   00              		.byte 0	;end of list
  120                         	
  121                         	
  122                         	;
  123                         	;----------------------------------------------------------------
  124                         	; MDS matrix:
  125                         	;
  126                         	;      01  EF  5B  5B		; 5B = alpha**-2 + 1
  127                         	;      5B  EF  EF  01		; EF = alpha**-2 + alpha**-1 + 1
  128                         	;      EF  5B  01  EF
  129                         	;      EF  01  EF  5B
  130                         	;----------------------------------------------------------------
  131                         	;
  132                         	; Load src byte, run through S-box.  Return result in X
  133                         	;
  134         01C5            	codeSize	.var $
  135         0000            	Sbox8ByteCnt	.var 0
  136         0000            	Sbox8CallCnt	.var 0
  Sat Jun 13 11:05:07 1998                                                                                               Page    4

        Twofish for 6805
        Author: Doug Whiting, Hi/fn, May 1998

  137         0000            	f32ByteCnt	.var 0
  138         0000            	f32Size		.var 0
  139         0000            	swap1ByteCnt	.var 0
  140         0000            	op1ByteCnt	.var 0
  141         0000            	rotByteCnt	.var 0
  142                         	
  143         [01]            	  .ife USE_ALPHA_TAB.and.(.not.USE_MDS_TAB)
  144                         	mulAlpha .macro			;do the alpha thing inline
  145                         		lsra
  146                         		bcc	$+4
  147                         		eor	#GF_FDBK
  148                         	    .endm
  149         [00]            	  .endif
  150                         	
  151                         	; key < 4 --> use X as ptr to key
  152                         	Sbox8	.macro	src,q0,q1,q2,key
  153                         	tmpS8		.var $
  154                         	  .if key.lt.4			;use X as key ptr?
  155                         	      .if key.eq.0
  156                         		stx	sPtr
  157                         	      .else
  158                         		ldx	sPtr
  159                         	      .endif
  160                         		lda	key+KBUMP,X
  161                         		ldx	src
  162                         		eor	q0,X
  163                         		tax
  164                         		lda	q1,X
  165                         		ldx	sPtr
  166                         		eor	key,X
  167                         	  .else
  168                         		ldx	src
  169                         		lda	q0,X
  170                         		eor	key+KBUMP
  171                         		tax
  172                         		lda	q1,X
  173                         		eor	key
  174                         	  .endif
  175                         		tax
  176                         	  .if USE_ALPHA_TAB.or.USE_MDS_TAB
  177                         		ldx	q2,X		;return result in X
  178                         	  .else
  179                         		lda	q2,X		;return result in A
  180                         	  .endif
  181                         	Sbox8CallCnt	.var Sbox8CallCnt+1
  182                         	Sbox8Size	.var $-tmpS8
  183                         	Sbox8ByteCnt	.var Sbox8ByteCnt+Sbox8Size
  184                         		.endm	
  185                         	
  186                         	; key == 0 --> use X as ptr to key
  187                         	f32	.macro	srcB0,rotCnt,step,dst,key
  188                         	tmpf32		.var $
  189                         		;--- 1st byte, first MDS column = 01 5B EF EF
  190                         		Sbox8	srcB0+((rotCnt+step*0).AND.3),p0,p0,p1,key
  191                         	  .if USE_MDS_TAB
  192                         		stx	dst		;X = 01
  193                         		lda	tab5B,X
  Sat Jun 13 11:05:07 1998                                                                                               Page    5

        Twofish for 6805
        Author: Doug Whiting, Hi/fn, May 1998

  194                         		sta	dst+1
  195                         		lda	tabEF,X
  196                         		sta	dst+2
  197                         		sta	dst+3
  198                         	  .else
  199                         	    .if USE_ALPHA_TAB
  200                         		stx	dst		;X = 01
  201                         		ldx	alpha,X
  202                         		stx	tmp+1
  203                         		lda	alpha,X
  204                         	    .else 
  205                         		sta	dst		;A = 01.  Store it
  206                         		mulAlpha		;a=a*alpha**-1
  207                         		sta	tmp+1
  208                         		mulAlpha
  209                         	    .endif
  210                         		eor	dst		;now A = 5B
  211                         		sta	dst+1
  212                         		eor	tmp+1		;now A = EF
  213                         		sta	dst+2
  214                         		sta	dst+3
  215                         	  .endif
  216                         		;--- 2nd byte, 2nd MDS column = EF EF 5B 01
  217                         		Sbox8	srcB0+((rotCnt+step*1).AND.3),p1,p0,p0,key+1
  218                         	  .if USE_MDS_TAB
  219                         		lda	dst

⌨️ 快捷键说明

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