📄 twofish.lst
字号:
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 + -