3 # ====================================================================
4 # Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
5 # project. The module is, however, dual licensed under OpenSSL and
6 # CRYPTOGAMS licenses depending on where you obtain it. For further
7 # details see http://www.openssl.org/~appro/cryptogams/.
8 # ====================================================================
10 # [Endian-neutral] AES for C64x+.
12 # Even though SPLOOPs are scheduled for 13 cycles, and thus expected
13 # performance is ~8.5 cycles per byte processed with 128-bit key,
14 # measured performance turned to be ~10 cycles per byte. Discrepancy
15 # must be caused by limitations of L1D memory banking(*), see SPRU871
16 # TI publication for further details. If any consolation it's still
17 # ~20% faster than TI's linear assembly module anyway... Compared to
18 # aes_core.c compiled with cl6x 6.0 with -mv6400+ -o2 options this
19 # code is 3.75x faster and almost 3x smaller (tables included).
21 # (*) This means that there might be subtle correlation between data
22 # and timing and one can wonder if it can be ... attacked:-(
23 # On the other hand this also means that *if* one chooses to
24 # implement *4* T-tables variant [instead of 1 T-table as in
25 # this implementation, or in addition to], then one ought to
26 # *interleave* them. Even though it complicates addressing,
27 # references to interleaved tables would be guaranteed not to
28 # clash. I reckon that it should be possible to break 8 cycles
29 # per byte "barrier," i.e. improve by ~20%, naturally at the
30 # cost of 8x increased pressure on L1D. 8x because you'd have
31 # to interleave both Te and Td tables...
33 while (($output=shift) && ($output!~/\w[\w\-]*\.\w+$/)) {}
34 open STDOUT,">$output";
36 ($TEA,$TEB)=("A5","B5");
37 ($KPA,$KPB)=("A3","B1");
38 @K=("A6","B6","A7","B7");
39 @s=("A8","B8","A9","B9");
40 @Te0=@Td0=("A16","B16","A17","B17");
41 @Te1=@Td1=("A18","B18","A19","B19");
42 @Te2=@Td2=("A20","B20","A21","B21");
43 @Te3=@Td3=("A22","B22","A23","B23");
49 .asg AES_encrypt,_AES_encrypt
50 .asg AES_decrypt,_AES_decrypt
51 .asg AES_set_encrypt_key,_AES_set_encrypt_key
52 .asg AES_set_decrypt_key,_AES_set_decrypt_key
53 .asg AES_ctr32_encrypt,_AES_ctr32_encrypt
87 [B2] LDNDW *INP++,A9:A8 ; load input
88 || MVKL \$PCR_OFFSET(AES_Te,_AES_encrypt),$TEA
89 || ADDKPC _AES_encrypt,B0
90 [B2] LDNDW *INP++,B9:B8
91 || MVKH \$PCR_OFFSET(AES_Te,_AES_encrypt),$TEA
95 [B2] LDNDW *INP++,A9:A8 ; load input
96 || MVKL (AES_Te-_AES_encrypt),$TEA
97 || ADDKPC _AES_encrypt,B0
98 [B2] LDNDW *INP++,B9:B8
99 || MVKH (AES_Te-_AES_encrypt),$TEA
103 LDW *$KPA++[2],$Te0[0] ; zero round key
104 || LDW *$KPB++[2],$Te0[1]
106 || ADD B0,$TEA,$TEA ; AES_Te
107 LDW *KEY[A0],B0 ; rounds
108 || MVK 1024,A0 ; sizeof(AES_Te)
109 LDW *$KPA++[2],$Te0[2]
110 || LDW *$KPB++[2],$Te0[3]
124 XOR $Te0[0],$s[0],$s[0]
125 || XOR $Te0[1],$s[1],$s[1]
126 || LDW *$KPA++[2],$K[0] ; 1st round key
127 || LDW *$KPB++[2],$K[1]
132 || LDW *$KPA++[2],$K[2]
133 || LDW *$KPB++[2],$K[3]
134 ;;====================================================================
135 EXTU $s[1],EXT1,24,$Te1[1]
136 || EXTU $s[0],EXT3,24,$Te3[0]
137 LDW *${TEB}[$Te1[1]],$Te1[1] ; Te1[s1>>8], t0
138 || LDW *${TEA}[$Te3[0]],$Te3[0] ; Te3[s0>>24], t1
139 || XOR $s[2],$Te0[2],$s[2] ; modulo-scheduled
140 || XOR $s[3],$Te0[3],$s[3] ; modulo-scheduled
141 || EXTU $s[1],EXT3,24,$Te3[1]
142 || EXTU $s[0],EXT1,24,$Te1[0]
143 LDW *${TEB}[$Te3[1]],$Te3[1] ; Te3[s1>>24], t2
144 || LDW *${TEA}[$Te1[0]],$Te1[0] ; Te1[s0>>8], t3
145 || EXTU $s[2],EXT2,24,$Te2[2]
146 || EXTU $s[3],EXT2,24,$Te2[3]
147 LDW *${TEA}[$Te2[2]],$Te2[2] ; Te2[s2>>16], t0
148 || LDW *${TEB}[$Te2[3]],$Te2[3] ; Te2[s3>>16], t1
149 || EXTU $s[3],EXT3,24,$Te3[3]
150 || EXTU $s[2],EXT1,24,$Te1[2]
151 LDW *${TEB}[$Te3[3]],$Te3[3] ; Te3[s3>>24], t0
152 || LDW *${TEA}[$Te1[2]],$Te1[2] ; Te1[s2>>8], t1
153 || EXTU $s[0],EXT2,24,$Te2[0]
154 || EXTU $s[1],EXT2,24,$Te2[1]
155 LDW *${TEA}[$Te2[0]],$Te2[0] ; Te2[s0>>16], t2
156 || LDW *${TEB}[$Te2[1]],$Te2[1] ; Te2[s1>>16], t3
157 || EXTU $s[3],EXT1,24,$Te1[3]
158 || EXTU $s[2],EXT3,24,$Te3[2]
159 LDW *${TEB}[$Te1[3]],$Te1[3] ; Te1[s3>>8], t2
160 || LDW *${TEA}[$Te3[2]],$Te3[2] ; Te3[s2>>24], t3
161 || ROTL $Te1[1],TBL1,$Te3[0] ; t0
162 || ROTL $Te3[0],TBL3,$Te1[1] ; t1
163 || EXTU $s[0],EXT0,24,$Te0[0]
164 || EXTU $s[1],EXT0,24,$Te0[1]
165 LDW *${TEA}[$Te0[0]],$Te0[0] ; Te0[s0], t0
166 || LDW *${TEB}[$Te0[1]],$Te0[1] ; Te0[s1], t1
167 || ROTL $Te3[1],TBL3,$Te1[0] ; t2
168 || ROTL $Te1[0],TBL1,$Te3[1] ; t3
169 || EXTU $s[2],EXT0,24,$Te0[2]
170 || EXTU $s[3],EXT0,24,$Te0[3]
171 LDW *${TEA}[$Te0[2]],$Te0[2] ; Te0[s2], t2
172 || LDW *${TEB}[$Te0[3]],$Te0[3] ; Te0[s3], t3
173 || ROTL $Te2[2],TBL2,$Te2[2] ; t0
174 || ROTL $Te2[3],TBL2,$Te2[3] ; t1
175 || XOR $K[0],$Te3[0],$s[0]
176 || XOR $K[1],$Te1[1],$s[1]
177 ROTL $Te3[3],TBL3,$Te1[2] ; t0
178 || ROTL $Te1[2],TBL1,$Te3[3] ; t1
179 || XOR $K[2],$Te1[0],$s[2]
180 || XOR $K[3],$Te3[1],$s[3]
181 || LDW *$KPA++[2],$K[0] ; next round key
182 || LDW *$KPB++[2],$K[1]
183 ROTL $Te2[0],TBL2,$Te2[0] ; t2
184 || ROTL $Te2[1],TBL2,$Te2[1] ; t3
185 || XOR $s[0],$Te2[2],$s[0]
186 || XOR $s[1],$Te2[3],$s[1]
187 || LDW *$KPA++[2],$K[2]
188 || LDW *$KPB++[2],$K[3]
189 ROTL $Te1[3],TBL1,$Te3[2] ; t2
190 || ROTL $Te3[2],TBL3,$Te1[3] ; t3
191 || XOR $s[0],$Te1[2],$s[0]
192 || XOR $s[1],$Te3[3],$s[1]
193 XOR $s[2],$Te2[0],$s[2]
194 || XOR $s[3],$Te2[1],$s[3]
195 || XOR $s[0],$Te0[0],$s[0]
196 || XOR $s[1],$Te0[1],$s[1]
198 || XOR.L $s[2],$Te3[2],$s[2]
199 || XOR.L $s[3],$Te1[3],$s[3]
200 ;;====================================================================
201 ADD.D ${TEA},A0,${TEA} ; point to Te4
202 || ADD.D ${TEB},A0,${TEB}
203 || EXTU $s[1],EXT1,24,$Te1[1]
204 || EXTU $s[0],EXT3,24,$Te3[0]
205 LDBU *${TEB}[$Te1[1]],$Te1[1] ; Te1[s1>>8], t0
206 || LDBU *${TEA}[$Te3[0]],$Te3[0] ; Te3[s0>>24], t1
207 || XOR $s[2],$Te0[2],$s[2] ; modulo-scheduled
208 || XOR $s[3],$Te0[3],$s[3] ; modulo-scheduled
209 || EXTU $s[0],EXT0,24,$Te0[0]
210 || EXTU $s[1],EXT0,24,$Te0[1]
211 LDBU *${TEA}[$Te0[0]],$Te0[0] ; Te0[s0], t0
212 || LDBU *${TEB}[$Te0[1]],$Te0[1] ; Te0[s1], t1
213 || EXTU $s[3],EXT3,24,$Te3[3]
214 || EXTU $s[2],EXT1,24,$Te1[2]
215 LDBU *${TEB}[$Te3[3]],$Te3[3] ; Te3[s3>>24], t0
216 || LDBU *${TEA}[$Te1[2]],$Te1[2] ; Te1[s2>>8], t1
217 || EXTU $s[2],EXT2,24,$Te2[2]
218 || EXTU $s[3],EXT2,24,$Te2[3]
219 LDBU *${TEA}[$Te2[2]],$Te2[2] ; Te2[s2>>16], t0
220 || LDBU *${TEB}[$Te2[3]],$Te2[3] ; Te2[s3>>16], t1
221 || EXTU $s[1],EXT3,24,$Te3[1]
222 || EXTU $s[0],EXT1,24,$Te1[0]
223 LDBU *${TEB}[$Te3[1]],$Te3[1] ; Te3[s1>>24], t2
224 || LDBU *${TEA}[$Te1[0]],$Te1[0] ; Te1[s0>>8], t3
225 || EXTU $s[3],EXT1,24,$Te1[3]
226 || EXTU $s[2],EXT3,24,$Te3[2]
227 LDBU *${TEB}[$Te1[3]],$Te1[3] ; Te1[s3>>8], t2
228 || LDBU *${TEA}[$Te3[2]],$Te3[2] ; Te3[s2>>24], t3
229 || EXTU $s[2],EXT0,24,$Te0[2]
230 || EXTU $s[3],EXT0,24,$Te0[3]
231 LDBU *${TEA}[$Te0[2]],$Te0[2] ; Te0[s2], t2
232 || LDBU *${TEB}[$Te0[3]],$Te0[3] ; Te0[s3], t3
233 || EXTU $s[0],EXT2,24,$Te2[0]
234 || EXTU $s[1],EXT2,24,$Te2[1]
235 LDBU *${TEA}[$Te2[0]],$Te2[0] ; Te2[s0>>16], t2
236 || LDBU *${TEB}[$Te2[1]],$Te2[1] ; Te2[s1>>16], t3
239 PACK2 $Te0[0],$Te1[1],$Te0[0]
240 || PACK2 $Te0[1],$Te1[2],$Te0[1]
241 PACK2 $Te2[2],$Te3[3],$Te2[2]
242 || PACK2 $Te2[3],$Te3[0],$Te2[3]
243 PACKL4 $Te0[0],$Te2[2],$Te0[0]
244 || PACKL4 $Te0[1],$Te2[3],$Te0[1]
245 XOR $K[0],$Te0[0],$Te0[0] ; s[0]
246 || XOR $K[1],$Te0[1],$Te0[1] ; s[1]
248 PACK2 $Te0[2],$Te1[3],$Te0[2]
249 || PACK2 $Te0[3],$Te1[0],$Te0[3]
250 PACK2 $Te2[0],$Te3[1],$Te2[0]
251 || PACK2 $Te2[1],$Te3[2],$Te2[1]
253 PACKL4 $Te0[2],$Te2[0],$Te0[2]
254 || PACKL4 $Te0[3],$Te2[1],$Te0[3]
255 XOR $K[2],$Te0[2],$Te0[2] ; s[2]
256 || XOR $K[3],$Te0[3],$Te0[3] ; s[3]
262 || [B2] STNDW A9:A8,*OUT++
263 [B2] STNDW B9:B8,*OUT++
265 PACK2 $Te1[1],$Te0[0],$Te1[1]
266 || PACK2 $Te1[2],$Te0[1],$Te1[2]
267 PACK2 $Te3[3],$Te2[2],$Te3[3]
268 || PACK2 $Te3[0],$Te2[3],$Te3[0]
269 PACKL4 $Te3[3],$Te1[1],$Te1[1]
270 || PACKL4 $Te3[0],$Te1[2],$Te1[2]
271 XOR $K[0],$Te1[1],$Te1[1] ; s[0]
272 || XOR $K[1],$Te1[2],$Te1[2] ; s[1]
274 PACK2 $Te1[3],$Te0[2],$Te1[3]
275 || PACK2 $Te1[0],$Te0[3],$Te1[0]
276 PACK2 $Te3[1],$Te2[0],$Te3[1]
277 || PACK2 $Te3[2],$Te2[1],$Te3[2]
279 PACKL4 $Te3[1],$Te1[3],$Te1[3]
280 || PACKL4 $Te3[2],$Te1[0],$Te1[0]
281 XOR $K[2],$Te1[3],$Te1[3] ; s[2]
282 || XOR $K[3],$Te1[0],$Te1[0] ; s[3]
288 || [B2] STNDW A9:A8,*OUT++
289 [B2] STNDW B9:B8,*OUT++
299 [B2] LDNDW *INP++,A9:A8 ; load input
300 || MVKL \$PCR_OFFSET(AES_Td,_AES_decrypt),$TEA
301 || ADDKPC _AES_decrypt,B0
302 [B2] LDNDW *INP++,B9:B8
303 || MVKH \$PCR_OFFSET(AES_Td,_AES_decrypt),$TEA
307 [B2] LDNDW *INP++,A9:A8 ; load input
308 || MVKL (AES_Td-_AES_decrypt),$TEA
309 || ADDKPC _AES_decrypt,B0
310 [B2] LDNDW *INP++,B9:B8
311 || MVKH (AES_Td-_AES_decrypt),$TEA
315 LDW *$KPA++[2],$Td0[0] ; zero round key
316 || LDW *$KPB++[2],$Td0[1]
318 || ADD B0,$TEA,$TEA ; AES_Td
319 LDW *KEY[A0],B0 ; rounds
320 || MVK 1024,A0 ; sizeof(AES_Td)
321 LDW *$KPA++[2],$Td0[2]
322 || LDW *$KPB++[2],$Td0[3]
336 XOR $Td0[0],$s[0],$s[0]
337 || XOR $Td0[1],$s[1],$s[1]
338 || LDW *$KPA++[2],$K[0] ; 1st round key
339 || LDW *$KPB++[2],$K[1]
344 || LDW *$KPA++[2],$K[2]
345 || LDW *$KPB++[2],$K[3]
346 ;;====================================================================
347 EXTU $s[1],EXT3,24,$Td3[1]
348 || EXTU $s[0],EXT1,24,$Td1[0]
349 LDW *${TEB}[$Td3[1]],$Td3[1] ; Td3[s1>>24], t0
350 || LDW *${TEA}[$Td1[0]],$Td1[0] ; Td1[s0>>8], t1
351 || XOR $s[2],$Td0[2],$s[2] ; modulo-scheduled
352 || XOR $s[3],$Td0[3],$s[3] ; modulo-scheduled
353 || EXTU $s[1],EXT1,24,$Td1[1]
354 || EXTU $s[0],EXT3,24,$Td3[0]
355 LDW *${TEB}[$Td1[1]],$Td1[1] ; Td1[s1>>8], t2
356 || LDW *${TEA}[$Td3[0]],$Td3[0] ; Td3[s0>>24], t3
357 || EXTU $s[2],EXT2,24,$Td2[2]
358 || EXTU $s[3],EXT2,24,$Td2[3]
359 LDW *${TEA}[$Td2[2]],$Td2[2] ; Td2[s2>>16], t0
360 || LDW *${TEB}[$Td2[3]],$Td2[3] ; Td2[s3>>16], t1
361 || EXTU $s[3],EXT1,24,$Td1[3]
362 || EXTU $s[2],EXT3,24,$Td3[2]
363 LDW *${TEB}[$Td1[3]],$Td1[3] ; Td1[s3>>8], t0
364 || LDW *${TEA}[$Td3[2]],$Td3[2] ; Td3[s2>>24], t1
365 || EXTU $s[0],EXT2,24,$Td2[0]
366 || EXTU $s[1],EXT2,24,$Td2[1]
367 LDW *${TEA}[$Td2[0]],$Td2[0] ; Td2[s0>>16], t2
368 || LDW *${TEB}[$Td2[1]],$Td2[1] ; Td2[s1>>16], t3
369 || EXTU $s[3],EXT3,24,$Td3[3]
370 || EXTU $s[2],EXT1,24,$Td1[2]
371 LDW *${TEB}[$Td3[3]],$Td3[3] ; Td3[s3>>24], t2
372 || LDW *${TEA}[$Td1[2]],$Td1[2] ; Td1[s2>>8], t3
373 || ROTL $Td3[1],TBL3,$Td1[0] ; t0
374 || ROTL $Td1[0],TBL1,$Td3[1] ; t1
375 || EXTU $s[0],EXT0,24,$Td0[0]
376 || EXTU $s[1],EXT0,24,$Td0[1]
377 LDW *${TEA}[$Td0[0]],$Td0[0] ; Td0[s0], t0
378 || LDW *${TEB}[$Td0[1]],$Td0[1] ; Td0[s1], t1
379 || ROTL $Td1[1],TBL1,$Td3[0] ; t2
380 || ROTL $Td3[0],TBL3,$Td1[1] ; t3
381 || EXTU $s[2],EXT0,24,$Td0[2]
382 || EXTU $s[3],EXT0,24,$Td0[3]
383 LDW *${TEA}[$Td0[2]],$Td0[2] ; Td0[s2], t2
384 || LDW *${TEB}[$Td0[3]],$Td0[3] ; Td0[s3], t3
385 || ROTL $Td2[2],TBL2,$Td2[2] ; t0
386 || ROTL $Td2[3],TBL2,$Td2[3] ; t1
387 || XOR $K[0],$Td1[0],$s[0]
388 || XOR $K[1],$Td3[1],$s[1]
389 ROTL $Td1[3],TBL1,$Td3[2] ; t0
390 || ROTL $Td3[2],TBL3,$Td1[3] ; t1
391 || XOR $K[2],$Td3[0],$s[2]
392 || XOR $K[3],$Td1[1],$s[3]
393 || LDW *$KPA++[2],$K[0] ; next round key
394 || LDW *$KPB++[2],$K[1]
395 ROTL $Td2[0],TBL2,$Td2[0] ; t2
396 || ROTL $Td2[1],TBL2,$Td2[1] ; t3
397 || XOR $s[0],$Td2[2],$s[0]
398 || XOR $s[1],$Td2[3],$s[1]
399 || LDW *$KPA++[2],$K[2]
400 || LDW *$KPB++[2],$K[3]
401 ROTL $Td3[3],TBL3,$Td1[2] ; t2
402 || ROTL $Td1[2],TBL1,$Td3[3] ; t3
403 || XOR $s[0],$Td3[2],$s[0]
404 || XOR $s[1],$Td1[3],$s[1]
405 XOR $s[2],$Td2[0],$s[2]
406 || XOR $s[3],$Td2[1],$s[3]
407 || XOR $s[0],$Td0[0],$s[0]
408 || XOR $s[1],$Td0[1],$s[1]
410 || XOR.L $s[2],$Td1[2],$s[2]
411 || XOR.L $s[3],$Td3[3],$s[3]
412 ;;====================================================================
413 ADD.D ${TEA},A0,${TEA} ; point to Td4
414 || ADD.D ${TEB},A0,${TEB}
415 || EXTU $s[1],EXT3,24,$Td3[1]
416 || EXTU $s[0],EXT1,24,$Td1[0]
417 LDBU *${TEB}[$Td3[1]],$Td3[1] ; Td3[s1>>24], t0
418 || LDBU *${TEA}[$Td1[0]],$Td1[0] ; Td1[s0>>8], t1
419 || XOR $s[2],$Td0[2],$s[2] ; modulo-scheduled
420 || XOR $s[3],$Td0[3],$s[3] ; modulo-scheduled
421 || EXTU $s[0],EXT0,24,$Td0[0]
422 || EXTU $s[1],EXT0,24,$Td0[1]
423 LDBU *${TEA}[$Td0[0]],$Td0[0] ; Td0[s0], t0
424 || LDBU *${TEB}[$Td0[1]],$Td0[1] ; Td0[s1], t1
425 || EXTU $s[2],EXT2,24,$Td2[2]
426 || EXTU $s[3],EXT2,24,$Td2[3]
427 LDBU *${TEA}[$Td2[2]],$Td2[2] ; Td2[s2>>16], t0
428 || LDBU *${TEB}[$Td2[3]],$Td2[3] ; Td2[s3>>16], t1
429 || EXTU $s[3],EXT1,24,$Td1[3]
430 || EXTU $s[2],EXT3,24,$Td3[2]
431 LDBU *${TEB}[$Td1[3]],$Td1[3] ; Td1[s3>>8], t0
432 || LDBU *${TEA}[$Td3[2]],$Td3[2] ; Td3[s2>>24], t1
433 || EXTU $s[1],EXT1,24,$Td1[1]
434 || EXTU $s[0],EXT3,24,$Td3[0]
435 LDBU *${TEB}[$Td1[1]],$Td1[1] ; Td1[s1>>8], t2
436 || LDBU *${TEA}[$Td3[0]],$Td3[0] ; Td3[s0>>24], t3
437 || EXTU $s[0],EXT2,24,$Td2[0]
438 || EXTU $s[1],EXT2,24,$Td2[1]
439 LDBU *${TEA}[$Td2[0]],$Td2[0] ; Td2[s0>>16], t2
440 || LDBU *${TEB}[$Td2[1]],$Td2[1] ; Td2[s1>>16], t3
441 || EXTU $s[3],EXT3,24,$Td3[3]
442 || EXTU $s[2],EXT1,24,$Td1[2]
443 LDBU *${TEB}[$Td3[3]],$Td3[3] ; Td3[s3>>24], t2
444 || LDBU *${TEA}[$Td1[2]],$Td1[2] ; Td1[s2>>8], t3
445 || EXTU $s[2],EXT0,24,$Td0[2]
446 || EXTU $s[3],EXT0,24,$Td0[3]
447 LDBU *${TEA}[$Td0[2]],$Td0[2] ; Td0[s2], t2
448 || LDBU *${TEB}[$Td0[3]],$Td0[3] ; Td0[s3], t3
451 PACK2 $Td0[0],$Td1[3],$Td0[0]
452 || PACK2 $Td0[1],$Td1[0],$Td0[1]
453 PACK2 $Td2[2],$Td3[1],$Td2[2]
454 || PACK2 $Td2[3],$Td3[2],$Td2[3]
455 PACKL4 $Td0[0],$Td2[2],$Td0[0]
456 || PACKL4 $Td0[1],$Td2[3],$Td0[1]
457 XOR $K[0],$Td0[0],$Td0[0] ; s[0]
458 || XOR $K[1],$Td0[1],$Td0[1] ; s[1]
460 PACK2 $Td0[2],$Td1[1],$Td0[2]
461 || PACK2 $Td0[3],$Td1[2],$Td0[3]
462 PACK2 $Td2[0],$Td3[3],$Td2[0]
463 || PACK2 $Td2[1],$Td3[0],$Td2[1]
465 PACKL4 $Td0[2],$Td2[0],$Td0[2]
466 || PACKL4 $Td0[3],$Td2[1],$Td0[3]
467 XOR $K[2],$Td0[2],$Td0[2] ; s[2]
468 || XOR $K[3],$Td0[3],$Td0[3] ; s[3]
474 || [B2] STNDW A9:A8,*OUT++
475 [B2] STNDW B9:B8,*OUT++
477 PACK2 $Td1[3],$Td0[0],$Td1[3]
478 || PACK2 $Td1[0],$Td0[1],$Td1[0]
479 PACK2 $Td3[1],$Td2[2],$Td3[1]
480 || PACK2 $Td3[2],$Td2[3],$Td3[2]
481 PACKL4 $Td3[1],$Td1[3],$Td1[3]
482 || PACKL4 $Td3[2],$Td1[0],$Td1[0]
483 XOR $K[0],$Td1[3],$Td1[3] ; s[0]
484 || XOR $K[1],$Td1[0],$Td1[0] ; s[1]
486 PACK2 $Td1[1],$Td0[2],$Td1[1]
487 || PACK2 $Td1[2],$Td0[3],$Td1[2]
488 PACK2 $Td3[3],$Td2[0],$Td3[3]
489 || PACK2 $Td3[0],$Td2[1],$Td3[0]
491 PACKL4 $Td3[3],$Td1[1],$Td1[1]
492 || PACKL4 $Td3[0],$Td1[2],$Td1[2]
493 XOR $K[2],$Td1[1],$Td1[1] ; s[2]
494 || XOR $K[3],$Td1[2],$Td1[2] ; s[3]
500 || [B2] STNDW A9:A8,*OUT++
501 [B2] STNDW B9:B8,*OUT++
506 my @K=(@K,@s); # extended key
507 my @Te4=map("B$_",(16..19));
509 my @Kx9=@Te0; # used in AES_set_decrypt_key
517 .global _AES_set_encrypt_key
518 _AES_set_encrypt_key:
522 || SHRU BITS,5,BITS ; 128-192-256 -> 4-6-8
526 ||[!A0] MVK 1,A1 ; only one B RA
532 [A0] LDNDW *INP++,A9:A8
533 || [A0] CMPEQ 4,BITS,B0
534 || [A0] CMPLT 3,BITS,A1
536 || [A1] LDNDW *INP++,B9:B8
537 || [A0] CMPEQ 6,BITS,B0
538 || [A0] CMPLT 5,BITS,A1
540 || [A1] LDNDW *INP++,B17:B16
541 || [A0] CMPEQ 8,BITS,B0
542 || [A0] CMPLT 7,BITS,A1
544 || [A1] LDNDW *INP++,B19:B18
548 || [A0] ADD 4,KEY,$KPB
549 || [A0] MVKL \$PCR_OFFSET(AES_Te4,_AES_set_encrypt_key),$TEA
550 || [A0] ADDKPC _AES_set_encrypt_key,B6
551 [A0] MVKH \$PCR_OFFSET(AES_Te4,_AES_set_encrypt_key),$TEA
552 [A0] ADD B6,$TEA,$TEA ; AES_Te4
555 || [A0] ADD 4,KEY,$KPB
556 || [A0] MVKL (AES_Te4-_AES_set_encrypt_key),$TEA
557 || [A0] ADDKPC _AES_set_encrypt_key,B6
558 [A0] MVKH (AES_Te4-_AES_set_encrypt_key),$TEA
559 [A0] ADD B6,$TEA,$TEA ; AES_Te4
565 || MVK -2,RET ; unknown bit lenght
566 || MVK 0,B0 ; redundant
567 ;;====================================================================
568 ;;====================================================================
588 || ADD $TEA,A0,A30 ; rcon
589 ;;====================================================================
590 LDW *A30++[1],A31 ; rcon[i]
592 || EXTU $K[3],EXT1,24,$Te4[0]
593 LDBU *${TEB}[$Te4[0]],$Te4[0]
595 || EXTU $K[3],EXT2,24,$Te4[1]
596 LDBU *${TEB}[$Te4[1]],$Te4[1]
597 || EXTU A0,EXT3,24,A0
598 || EXTU $K[3],EXT0,24,$Te4[3]
600 LDBU *${TEA}[A0],$Te4[3]
601 || LDBU *${TEB}[$Te4[3]],A0
604 || LDBU *${TEB}[$Te4[3]],$Te4[3]
608 || STW $K[1],*$KPB++[2]
610 || STW $K[3],*$KPB++[2]
612 XOR A31,$K[0],$K[0] ; ^=rcon[i]
614 PACK2 $Te4[0],$Te4[1],$Te4[1]
615 PACK2 $Te4[3],A0,$Te4[3]
616 PACKL4 $Te4[1],$Te4[3],$Te4[3]
618 PACK2 $Te4[1],$Te4[0],$Te4[1]
619 PACK2 $Te4[3],A0,$Te4[3]
620 PACKL4 $Te4[3],$Te4[1],$Te4[3]
622 XOR $Te4[3],$K[0],$Te4[0] ; K[0]
623 XOR $Te4[0],$K[1],$K[1] ; K[1]
625 || XOR $K[1],$K[2],$Te4[2] ; K[2]
626 XOR $Te4[2],$K[3],$K[3] ; K[3]
628 ;;====================================================================
631 || STW $K[0],*$KPA++[2]
632 || STW $K[1],*$KPB++[2]
634 || STW $K[3],*$KPB++[2]
638 ;;====================================================================
639 ;;====================================================================
660 || ADD $TEA,A0,A30 ; rcon
661 ;;====================================================================
663 LDW *A30++[1],A31 ; rcon[i]
665 || EXTU $K[5],EXT1,24,$Te4[0]
666 LDBU *${TEB}[$Te4[0]],$Te4[0]
668 || EXTU $K[5],EXT2,24,$Te4[1]
669 LDBU *${TEB}[$Te4[1]],$Te4[1]
670 || EXTU A0,EXT3,24,A0
671 || EXTU $K[5],EXT0,24,$Te4[3]
673 LDBU *${TEA}[A0],$Te4[3]
674 || LDBU *${TEB}[$Te4[3]],A0
677 || LDBU *${TEB}[$Te4[3]],$Te4[3]
681 || STW $K[1],*$KPB++[2]
683 || STW $K[3],*$KPB++[2]
685 || STW $K[5],*$KPB++[2]
687 XOR A31,$K[0],$K[0] ; ^=rcon[i]
689 PACK2 $Te4[0],$Te4[1],$Te4[1]
690 || PACK2 $Te4[3],A0,$Te4[3]
691 PACKL4 $Te4[1],$Te4[3],$Te4[3]
693 PACK2 $Te4[1],$Te4[0],$Te4[1]
694 || PACK2 $Te4[3],A0,$Te4[3]
695 PACKL4 $Te4[3],$Te4[1],$Te4[3]
698 || XOR $Te4[3],$K[0],$Te4[0] ; K[0]
699 XOR $Te4[0],$K[1],$K[1] ; K[1]
701 || XOR $K[1],$K[2],$Te4[2] ; K[2]
702 XOR $Te4[2],$K[3],$K[3] ; K[3]
704 || XOR $K[3],$K[4],$Te4[2] ; K[4]
705 XOR $Te4[2],$K[5],$K[5] ; K[5]
706 ;;====================================================================
709 || STW $K[1],*$KPB++[2]
711 || STW $K[3],*$KPB++[2]
715 ;;====================================================================
716 ;;====================================================================
741 || ADD $TEA,A0,A30 ; rcon
742 ;;====================================================================
744 LDW *A30++[1],A31 ; rcon[i]
746 || EXTU $K[7],EXT1,24,$Te4[0]
747 LDBU *${TEB}[$Te4[0]],$Te4[0]
749 || EXTU $K[7],EXT2,24,$Te4[1]
750 LDBU *${TEB}[$Te4[1]],$Te4[1]
751 || EXTU A0,EXT3,24,A0
752 || EXTU $K[7],EXT0,24,$Te4[3]
754 LDBU *${TEA}[A0],$Te4[3]
755 || LDBU *${TEB}[$Te4[3]],A0
758 || LDBU *${TEB}[$Te4[3]],$Te4[3]
762 || STW $K[1],*$KPB++[2]
764 || STW $K[3],*$KPB++[2]
766 || STW $K[5],*$KPB++[2]
768 || STW $K[7],*$KPB++[2]
769 || XOR A31,$K[0],$K[0] ; ^=rcon[i]
771 PACK2 $Te4[0],$Te4[1],$Te4[1]
772 || PACK2 $Te4[3],A0,$Te4[3]
773 PACKL4 $Te4[1],$Te4[3],$Te4[3]
776 PACK2 $Te4[1],$Te4[0],$Te4[1]
777 || PACK2 $Te4[3],A0,$Te4[3]
778 PACKL4 $Te4[3],$Te4[1],$Te4[3]
781 XOR $Te4[3],$K[0],$Te4[0] ; K[0]
782 XOR $Te4[0],$K[1],$K[1] ; K[1]
784 || XOR $K[1],$K[2],$Te4[2] ; K[2]
785 XOR $Te4[2],$K[3],$K[3] ; K[3]
788 || [B0] EXTU $K[3],EXT0,24,$Te4[0]
790 LDBU *${TEB}[$Te4[0]],$Te4[0]
792 || EXTU $K[3],EXT1,24,$Te4[1]
793 LDBU *${TEB}[$Te4[1]],$Te4[1]
794 || EXTU A0,EXT2,24,A0
795 || EXTU $K[3],EXT3,24,$Te4[3]
798 LDBU *${TEA}[A0],$Te4[3]
799 || LDBU *${TEB}[$Te4[3]],A0
801 PACK2 $Te4[0],$Te4[1],$Te4[1]
802 PACK2 $Te4[3],A0,$Te4[3]
804 PACKL4 $Te4[1],$Te4[3],$Te4[3]
807 || LDBU *${TEB}[$Te4[3]],$Te4[3]
809 PACK2 $Te4[1],$Te4[0],$Te4[1]
810 PACK2 $Te4[3],A0,$Te4[3]
812 PACKL4 $Te4[3],$Te4[1],$Te4[3]
815 XOR $Te4[3],$K[4],$Te4[0] ; K[4]
816 XOR $Te4[0],$K[5],$K[5] ; K[5]
818 || XOR $K[5],$K[6],$Te4[2] ; K[6]
819 XOR $Te4[2],$K[7],$K[7] ; K[7]
820 ;;====================================================================
824 || STW $K[1],*$KPB++[2]
826 || STW $K[3],*$KPB++[2]
832 .global _AES_set_decrypt_key
833 _AES_set_decrypt_key:
835 B __set_encrypt_key ; guarantee local call
836 MV KEY,B30 ; B30 is not modified
837 MV RA, B31 ; B31 is not modified
839 ret?: ; B0 holds rounds or zero
840 [!B0] BNOP B31 ; return if zero
841 [B0] SHL B0,4,A0 ; offset to last round key
844 [B0] MVK 0x0000001B,B3 ; AES polynomial
845 [B0] MVKH 0x07000000,B3
847 SPLOOPD 9 ; flip round keys
851 || MVK 16,A0 ; sizeof(round key)
852 ;;====================================================================
854 || LDW *${KPB}[0],B16
856 || LDW *${KPB}[1],B17
858 || LDW *${KPB}[2],B18
861 || LDW *${KPB}[3],B19
865 || STW A16,*${KPB}[4]
867 || STW A17,*${KPB}[5]
869 || STW A18,*${KPB}[6]
871 || STW A19,*${KPB}[7]
873 ;;====================================================================
874 SUB B0,1,B0 ; skip last round
875 || ADD B30,A0,$KPA ; skip first round
877 || MVC GFPGFR,B30 ; save GFPGFR
879 || LDW *${KPB}[1],$K[1]
882 || LDW *${KPB}[3],$K[3]
884 || MVK 0x00000B0B,B24
886 || MVKH 0x0B0B0000,B24
890 GMPY4 $K[0],A24,$Kx9[0] ; ·0x09
891 || GMPY4 $K[1],A24,$Kx9[1]
892 || MVK 0x00000D0D,A25
893 || MVK 0x00000E0E,B25
894 GMPY4 $K[2],A24,$Kx9[2]
895 || GMPY4 $K[3],A24,$Kx9[3]
896 || MVKH 0x0D0D0000,A25
897 || MVKH 0x0E0E0000,B25
899 GMPY4 $K[0],B24,$KxB[0] ; ·0x0B
900 || GMPY4 $K[1],B24,$KxB[1]
901 GMPY4 $K[2],B24,$KxB[2]
902 || GMPY4 $K[3],B24,$KxB[3]
904 SPLOOP 11 ; InvMixColumns
905 ;;====================================================================
906 GMPY4 $K[0],A25,$KxD[0] ; ·0x0D
907 || GMPY4 $K[1],A25,$KxD[1]
908 || SWAP2 $Kx9[0],$Kx9[0] ; rotate by 16
909 || SWAP2 $Kx9[1],$Kx9[1]
910 || MV $K[0],$s[0] ; this or DINT
912 || [B0] LDW *${KPA}[4],$K[0]
913 || [B0] LDW *${KPB}[5],$K[1]
914 GMPY4 $K[2],A25,$KxD[2]
915 || GMPY4 $K[3],A25,$KxD[3]
916 || SWAP2 $Kx9[2],$Kx9[2]
917 || SWAP2 $Kx9[3],$Kx9[3]
920 || [B0] LDW *${KPA}[6],$K[2]
921 || [B0] LDW *${KPB}[7],$K[3]
923 GMPY4 $s[0],B25,$KxE[0] ; ·0x0E
924 || GMPY4 $s[1],B25,$KxE[1]
925 || XOR $Kx9[0],$KxB[0],$KxB[0]
926 || XOR $Kx9[1],$KxB[1],$KxB[1]
927 GMPY4 $s[2],B25,$KxE[2]
928 || GMPY4 $s[3],B25,$KxE[3]
929 || XOR $Kx9[2],$KxB[2],$KxB[2]
930 || XOR $Kx9[3],$KxB[3],$KxB[3]
932 ROTL $KxB[0],TBL3,$KxB[0]
933 || ROTL $KxB[1],TBL3,$KxB[1]
934 || SWAP2 $KxD[0],$KxD[0] ; rotate by 16
935 || SWAP2 $KxD[1],$KxD[1]
936 ROTL $KxB[2],TBL3,$KxB[2]
937 || ROTL $KxB[3],TBL3,$KxB[3]
938 || SWAP2 $KxD[2],$KxD[2]
939 || SWAP2 $KxD[3],$KxD[3]
941 XOR $KxE[0],$KxD[0],$KxE[0]
942 || XOR $KxE[1],$KxD[1],$KxE[1]
943 || [B0] GMPY4 $K[0],A24,$Kx9[0] ; ·0x09
944 || [B0] GMPY4 $K[1],A24,$Kx9[1]
946 XOR $KxE[2],$KxD[2],$KxE[2]
947 || XOR $KxE[3],$KxD[3],$KxE[3]
948 || [B0] GMPY4 $K[2],A24,$Kx9[2]
949 || [B0] GMPY4 $K[3],A24,$Kx9[3]
952 XOR $KxB[0],$KxE[0],$KxE[0]
953 || XOR $KxB[1],$KxE[1],$KxE[1]
954 || [B0] GMPY4 $K[0],B24,$KxB[0] ; ·0x0B
955 || [B0] GMPY4 $K[1],B24,$KxB[1]
956 XOR $KxB[2],$KxE[2],$KxE[2]
957 || XOR $KxB[3],$KxE[3],$KxE[3]
958 || [B0] GMPY4 $K[2],B24,$KxB[2]
959 || [B0] GMPY4 $K[3],B24,$KxB[3]
960 || STW $KxE[0],*${KPA}[-4]
961 || STW $KxE[1],*${KPB}[-3]
962 STW $KxE[2],*${KPA}[-2]
963 || STW $KxE[3],*${KPB}[-1]
966 ;;====================================================================
968 MVC B30,GFPGFR ; restore GFPGFR(*)
972 # (*) Even though ABI doesn't specify GFPGFR as non-volatile, there
973 # are code samples out there that *assume* its default value.
976 my ($inp,$out,$blocks,$key,$ivp)=("A4","B4","A6","B6","A8");
978 .global _AES_ctr32_encrypt
981 LDNDW *${ivp}[0],A31:A30 ; load counter value
982 || MV $blocks,A2 ; reassign $blocks
983 || DMV RA,$key,B27:B26 ; reassign RA and $key
984 LDNDW *${ivp}[1],B31:B30
985 || MVK 0,B2 ; don't let __encrypt load input
986 || MVK 0,A1 ; and postpone writing output
991 SWAP2 B31,B31 ; keep least significant 32 bits
992 SWAP4 B31,B31 ; in host byte order
996 || [A1] XOR A29,A9,A9 ; input^Ek(counter)
997 || [A1] XOR A28,A8,A8
998 || [A2] LDNDW *INP++,A29:A28 ; load input
999 [!A2] BNOP B27 ; return
1000 || [A1] XOR B29,B9,B9
1001 || [A1] XOR B28,B8,B8
1002 || [A2] LDNDW *INP++,B29:B28
1004 [A1] STNDW A9:A8,*OUT++ ; save output
1005 || [A2] DMV A31,A30,A9:A8 ; pass counter value to __encrypt
1006 [A1] STNDW B9:B8,*OUT++
1007 || [A2] DMV B31,B30,B9:B8
1008 || [A2] ADD B30,1,B30 ; counter++
1010 [A1] STNDW A9:A8,*OUT++ ; save output
1011 || [A2] DMV A31,A30,A9:A8
1012 || [A2] SWAP2 B31,B0
1013 || [A2] ADD B31,1,B31 ; counter++
1014 [A1] STNDW B9:B8,*OUT++
1018 [A2] ADDKPC ctr32_loop?,RA ; return to ctr32_loop?
1019 || [A2] MV B26,KEY ; pass $key
1020 || [A2] SUB A2,1,A2 ; $blocks--
1027 # Tables are kept in endian-neutral manner
1030 .sect ".text:aes_asm.const"
1032 .sect ".const:aes_asm"
1036 .byte 0xc6,0x63,0x63,0xa5, 0xf8,0x7c,0x7c,0x84
1037 .byte 0xee,0x77,0x77,0x99, 0xf6,0x7b,0x7b,0x8d
1038 .byte 0xff,0xf2,0xf2,0x0d, 0xd6,0x6b,0x6b,0xbd
1039 .byte 0xde,0x6f,0x6f,0xb1, 0x91,0xc5,0xc5,0x54
1040 .byte 0x60,0x30,0x30,0x50, 0x02,0x01,0x01,0x03
1041 .byte 0xce,0x67,0x67,0xa9, 0x56,0x2b,0x2b,0x7d
1042 .byte 0xe7,0xfe,0xfe,0x19, 0xb5,0xd7,0xd7,0x62
1043 .byte 0x4d,0xab,0xab,0xe6, 0xec,0x76,0x76,0x9a
1044 .byte 0x8f,0xca,0xca,0x45, 0x1f,0x82,0x82,0x9d
1045 .byte 0x89,0xc9,0xc9,0x40, 0xfa,0x7d,0x7d,0x87
1046 .byte 0xef,0xfa,0xfa,0x15, 0xb2,0x59,0x59,0xeb
1047 .byte 0x8e,0x47,0x47,0xc9, 0xfb,0xf0,0xf0,0x0b
1048 .byte 0x41,0xad,0xad,0xec, 0xb3,0xd4,0xd4,0x67
1049 .byte 0x5f,0xa2,0xa2,0xfd, 0x45,0xaf,0xaf,0xea
1050 .byte 0x23,0x9c,0x9c,0xbf, 0x53,0xa4,0xa4,0xf7
1051 .byte 0xe4,0x72,0x72,0x96, 0x9b,0xc0,0xc0,0x5b
1052 .byte 0x75,0xb7,0xb7,0xc2, 0xe1,0xfd,0xfd,0x1c
1053 .byte 0x3d,0x93,0x93,0xae, 0x4c,0x26,0x26,0x6a
1054 .byte 0x6c,0x36,0x36,0x5a, 0x7e,0x3f,0x3f,0x41
1055 .byte 0xf5,0xf7,0xf7,0x02, 0x83,0xcc,0xcc,0x4f
1056 .byte 0x68,0x34,0x34,0x5c, 0x51,0xa5,0xa5,0xf4
1057 .byte 0xd1,0xe5,0xe5,0x34, 0xf9,0xf1,0xf1,0x08
1058 .byte 0xe2,0x71,0x71,0x93, 0xab,0xd8,0xd8,0x73
1059 .byte 0x62,0x31,0x31,0x53, 0x2a,0x15,0x15,0x3f
1060 .byte 0x08,0x04,0x04,0x0c, 0x95,0xc7,0xc7,0x52
1061 .byte 0x46,0x23,0x23,0x65, 0x9d,0xc3,0xc3,0x5e
1062 .byte 0x30,0x18,0x18,0x28, 0x37,0x96,0x96,0xa1
1063 .byte 0x0a,0x05,0x05,0x0f, 0x2f,0x9a,0x9a,0xb5
1064 .byte 0x0e,0x07,0x07,0x09, 0x24,0x12,0x12,0x36
1065 .byte 0x1b,0x80,0x80,0x9b, 0xdf,0xe2,0xe2,0x3d
1066 .byte 0xcd,0xeb,0xeb,0x26, 0x4e,0x27,0x27,0x69
1067 .byte 0x7f,0xb2,0xb2,0xcd, 0xea,0x75,0x75,0x9f
1068 .byte 0x12,0x09,0x09,0x1b, 0x1d,0x83,0x83,0x9e
1069 .byte 0x58,0x2c,0x2c,0x74, 0x34,0x1a,0x1a,0x2e
1070 .byte 0x36,0x1b,0x1b,0x2d, 0xdc,0x6e,0x6e,0xb2
1071 .byte 0xb4,0x5a,0x5a,0xee, 0x5b,0xa0,0xa0,0xfb
1072 .byte 0xa4,0x52,0x52,0xf6, 0x76,0x3b,0x3b,0x4d
1073 .byte 0xb7,0xd6,0xd6,0x61, 0x7d,0xb3,0xb3,0xce
1074 .byte 0x52,0x29,0x29,0x7b, 0xdd,0xe3,0xe3,0x3e
1075 .byte 0x5e,0x2f,0x2f,0x71, 0x13,0x84,0x84,0x97
1076 .byte 0xa6,0x53,0x53,0xf5, 0xb9,0xd1,0xd1,0x68
1077 .byte 0x00,0x00,0x00,0x00, 0xc1,0xed,0xed,0x2c
1078 .byte 0x40,0x20,0x20,0x60, 0xe3,0xfc,0xfc,0x1f
1079 .byte 0x79,0xb1,0xb1,0xc8, 0xb6,0x5b,0x5b,0xed
1080 .byte 0xd4,0x6a,0x6a,0xbe, 0x8d,0xcb,0xcb,0x46
1081 .byte 0x67,0xbe,0xbe,0xd9, 0x72,0x39,0x39,0x4b
1082 .byte 0x94,0x4a,0x4a,0xde, 0x98,0x4c,0x4c,0xd4
1083 .byte 0xb0,0x58,0x58,0xe8, 0x85,0xcf,0xcf,0x4a
1084 .byte 0xbb,0xd0,0xd0,0x6b, 0xc5,0xef,0xef,0x2a
1085 .byte 0x4f,0xaa,0xaa,0xe5, 0xed,0xfb,0xfb,0x16
1086 .byte 0x86,0x43,0x43,0xc5, 0x9a,0x4d,0x4d,0xd7
1087 .byte 0x66,0x33,0x33,0x55, 0x11,0x85,0x85,0x94
1088 .byte 0x8a,0x45,0x45,0xcf, 0xe9,0xf9,0xf9,0x10
1089 .byte 0x04,0x02,0x02,0x06, 0xfe,0x7f,0x7f,0x81
1090 .byte 0xa0,0x50,0x50,0xf0, 0x78,0x3c,0x3c,0x44
1091 .byte 0x25,0x9f,0x9f,0xba, 0x4b,0xa8,0xa8,0xe3
1092 .byte 0xa2,0x51,0x51,0xf3, 0x5d,0xa3,0xa3,0xfe
1093 .byte 0x80,0x40,0x40,0xc0, 0x05,0x8f,0x8f,0x8a
1094 .byte 0x3f,0x92,0x92,0xad, 0x21,0x9d,0x9d,0xbc
1095 .byte 0x70,0x38,0x38,0x48, 0xf1,0xf5,0xf5,0x04
1096 .byte 0x63,0xbc,0xbc,0xdf, 0x77,0xb6,0xb6,0xc1
1097 .byte 0xaf,0xda,0xda,0x75, 0x42,0x21,0x21,0x63
1098 .byte 0x20,0x10,0x10,0x30, 0xe5,0xff,0xff,0x1a
1099 .byte 0xfd,0xf3,0xf3,0x0e, 0xbf,0xd2,0xd2,0x6d
1100 .byte 0x81,0xcd,0xcd,0x4c, 0x18,0x0c,0x0c,0x14
1101 .byte 0x26,0x13,0x13,0x35, 0xc3,0xec,0xec,0x2f
1102 .byte 0xbe,0x5f,0x5f,0xe1, 0x35,0x97,0x97,0xa2
1103 .byte 0x88,0x44,0x44,0xcc, 0x2e,0x17,0x17,0x39
1104 .byte 0x93,0xc4,0xc4,0x57, 0x55,0xa7,0xa7,0xf2
1105 .byte 0xfc,0x7e,0x7e,0x82, 0x7a,0x3d,0x3d,0x47
1106 .byte 0xc8,0x64,0x64,0xac, 0xba,0x5d,0x5d,0xe7
1107 .byte 0x32,0x19,0x19,0x2b, 0xe6,0x73,0x73,0x95
1108 .byte 0xc0,0x60,0x60,0xa0, 0x19,0x81,0x81,0x98
1109 .byte 0x9e,0x4f,0x4f,0xd1, 0xa3,0xdc,0xdc,0x7f
1110 .byte 0x44,0x22,0x22,0x66, 0x54,0x2a,0x2a,0x7e
1111 .byte 0x3b,0x90,0x90,0xab, 0x0b,0x88,0x88,0x83
1112 .byte 0x8c,0x46,0x46,0xca, 0xc7,0xee,0xee,0x29
1113 .byte 0x6b,0xb8,0xb8,0xd3, 0x28,0x14,0x14,0x3c
1114 .byte 0xa7,0xde,0xde,0x79, 0xbc,0x5e,0x5e,0xe2
1115 .byte 0x16,0x0b,0x0b,0x1d, 0xad,0xdb,0xdb,0x76
1116 .byte 0xdb,0xe0,0xe0,0x3b, 0x64,0x32,0x32,0x56
1117 .byte 0x74,0x3a,0x3a,0x4e, 0x14,0x0a,0x0a,0x1e
1118 .byte 0x92,0x49,0x49,0xdb, 0x0c,0x06,0x06,0x0a
1119 .byte 0x48,0x24,0x24,0x6c, 0xb8,0x5c,0x5c,0xe4
1120 .byte 0x9f,0xc2,0xc2,0x5d, 0xbd,0xd3,0xd3,0x6e
1121 .byte 0x43,0xac,0xac,0xef, 0xc4,0x62,0x62,0xa6
1122 .byte 0x39,0x91,0x91,0xa8, 0x31,0x95,0x95,0xa4
1123 .byte 0xd3,0xe4,0xe4,0x37, 0xf2,0x79,0x79,0x8b
1124 .byte 0xd5,0xe7,0xe7,0x32, 0x8b,0xc8,0xc8,0x43
1125 .byte 0x6e,0x37,0x37,0x59, 0xda,0x6d,0x6d,0xb7
1126 .byte 0x01,0x8d,0x8d,0x8c, 0xb1,0xd5,0xd5,0x64
1127 .byte 0x9c,0x4e,0x4e,0xd2, 0x49,0xa9,0xa9,0xe0
1128 .byte 0xd8,0x6c,0x6c,0xb4, 0xac,0x56,0x56,0xfa
1129 .byte 0xf3,0xf4,0xf4,0x07, 0xcf,0xea,0xea,0x25
1130 .byte 0xca,0x65,0x65,0xaf, 0xf4,0x7a,0x7a,0x8e
1131 .byte 0x47,0xae,0xae,0xe9, 0x10,0x08,0x08,0x18
1132 .byte 0x6f,0xba,0xba,0xd5, 0xf0,0x78,0x78,0x88
1133 .byte 0x4a,0x25,0x25,0x6f, 0x5c,0x2e,0x2e,0x72
1134 .byte 0x38,0x1c,0x1c,0x24, 0x57,0xa6,0xa6,0xf1
1135 .byte 0x73,0xb4,0xb4,0xc7, 0x97,0xc6,0xc6,0x51
1136 .byte 0xcb,0xe8,0xe8,0x23, 0xa1,0xdd,0xdd,0x7c
1137 .byte 0xe8,0x74,0x74,0x9c, 0x3e,0x1f,0x1f,0x21
1138 .byte 0x96,0x4b,0x4b,0xdd, 0x61,0xbd,0xbd,0xdc
1139 .byte 0x0d,0x8b,0x8b,0x86, 0x0f,0x8a,0x8a,0x85
1140 .byte 0xe0,0x70,0x70,0x90, 0x7c,0x3e,0x3e,0x42
1141 .byte 0x71,0xb5,0xb5,0xc4, 0xcc,0x66,0x66,0xaa
1142 .byte 0x90,0x48,0x48,0xd8, 0x06,0x03,0x03,0x05
1143 .byte 0xf7,0xf6,0xf6,0x01, 0x1c,0x0e,0x0e,0x12
1144 .byte 0xc2,0x61,0x61,0xa3, 0x6a,0x35,0x35,0x5f
1145 .byte 0xae,0x57,0x57,0xf9, 0x69,0xb9,0xb9,0xd0
1146 .byte 0x17,0x86,0x86,0x91, 0x99,0xc1,0xc1,0x58
1147 .byte 0x3a,0x1d,0x1d,0x27, 0x27,0x9e,0x9e,0xb9
1148 .byte 0xd9,0xe1,0xe1,0x38, 0xeb,0xf8,0xf8,0x13
1149 .byte 0x2b,0x98,0x98,0xb3, 0x22,0x11,0x11,0x33
1150 .byte 0xd2,0x69,0x69,0xbb, 0xa9,0xd9,0xd9,0x70
1151 .byte 0x07,0x8e,0x8e,0x89, 0x33,0x94,0x94,0xa7
1152 .byte 0x2d,0x9b,0x9b,0xb6, 0x3c,0x1e,0x1e,0x22
1153 .byte 0x15,0x87,0x87,0x92, 0xc9,0xe9,0xe9,0x20
1154 .byte 0x87,0xce,0xce,0x49, 0xaa,0x55,0x55,0xff
1155 .byte 0x50,0x28,0x28,0x78, 0xa5,0xdf,0xdf,0x7a
1156 .byte 0x03,0x8c,0x8c,0x8f, 0x59,0xa1,0xa1,0xf8
1157 .byte 0x09,0x89,0x89,0x80, 0x1a,0x0d,0x0d,0x17
1158 .byte 0x65,0xbf,0xbf,0xda, 0xd7,0xe6,0xe6,0x31
1159 .byte 0x84,0x42,0x42,0xc6, 0xd0,0x68,0x68,0xb8
1160 .byte 0x82,0x41,0x41,0xc3, 0x29,0x99,0x99,0xb0
1161 .byte 0x5a,0x2d,0x2d,0x77, 0x1e,0x0f,0x0f,0x11
1162 .byte 0x7b,0xb0,0xb0,0xcb, 0xa8,0x54,0x54,0xfc
1163 .byte 0x6d,0xbb,0xbb,0xd6, 0x2c,0x16,0x16,0x3a
1165 .byte 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5
1166 .byte 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76
1167 .byte 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0
1168 .byte 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0
1169 .byte 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc
1170 .byte 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15
1171 .byte 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a
1172 .byte 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75
1173 .byte 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0
1174 .byte 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84
1175 .byte 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b
1176 .byte 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf
1177 .byte 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85
1178 .byte 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8
1179 .byte 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5
1180 .byte 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2
1181 .byte 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17
1182 .byte 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73
1183 .byte 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88
1184 .byte 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb
1185 .byte 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c
1186 .byte 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79
1187 .byte 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9
1188 .byte 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08
1189 .byte 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6
1190 .byte 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a
1191 .byte 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e
1192 .byte 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e
1193 .byte 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94
1194 .byte 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf
1195 .byte 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68
1196 .byte 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16
1198 .byte 0x01,0x00,0x00,0x00, 0x02,0x00,0x00,0x00
1199 .byte 0x04,0x00,0x00,0x00, 0x08,0x00,0x00,0x00
1200 .byte 0x10,0x00,0x00,0x00, 0x20,0x00,0x00,0x00
1201 .byte 0x40,0x00,0x00,0x00, 0x80,0x00,0x00,0x00
1202 .byte 0x1B,0x00,0x00,0x00, 0x36,0x00,0x00,0x00
1205 .byte 0x51,0xf4,0xa7,0x50, 0x7e,0x41,0x65,0x53
1206 .byte 0x1a,0x17,0xa4,0xc3, 0x3a,0x27,0x5e,0x96
1207 .byte 0x3b,0xab,0x6b,0xcb, 0x1f,0x9d,0x45,0xf1
1208 .byte 0xac,0xfa,0x58,0xab, 0x4b,0xe3,0x03,0x93
1209 .byte 0x20,0x30,0xfa,0x55, 0xad,0x76,0x6d,0xf6
1210 .byte 0x88,0xcc,0x76,0x91, 0xf5,0x02,0x4c,0x25
1211 .byte 0x4f,0xe5,0xd7,0xfc, 0xc5,0x2a,0xcb,0xd7
1212 .byte 0x26,0x35,0x44,0x80, 0xb5,0x62,0xa3,0x8f
1213 .byte 0xde,0xb1,0x5a,0x49, 0x25,0xba,0x1b,0x67
1214 .byte 0x45,0xea,0x0e,0x98, 0x5d,0xfe,0xc0,0xe1
1215 .byte 0xc3,0x2f,0x75,0x02, 0x81,0x4c,0xf0,0x12
1216 .byte 0x8d,0x46,0x97,0xa3, 0x6b,0xd3,0xf9,0xc6
1217 .byte 0x03,0x8f,0x5f,0xe7, 0x15,0x92,0x9c,0x95
1218 .byte 0xbf,0x6d,0x7a,0xeb, 0x95,0x52,0x59,0xda
1219 .byte 0xd4,0xbe,0x83,0x2d, 0x58,0x74,0x21,0xd3
1220 .byte 0x49,0xe0,0x69,0x29, 0x8e,0xc9,0xc8,0x44
1221 .byte 0x75,0xc2,0x89,0x6a, 0xf4,0x8e,0x79,0x78
1222 .byte 0x99,0x58,0x3e,0x6b, 0x27,0xb9,0x71,0xdd
1223 .byte 0xbe,0xe1,0x4f,0xb6, 0xf0,0x88,0xad,0x17
1224 .byte 0xc9,0x20,0xac,0x66, 0x7d,0xce,0x3a,0xb4
1225 .byte 0x63,0xdf,0x4a,0x18, 0xe5,0x1a,0x31,0x82
1226 .byte 0x97,0x51,0x33,0x60, 0x62,0x53,0x7f,0x45
1227 .byte 0xb1,0x64,0x77,0xe0, 0xbb,0x6b,0xae,0x84
1228 .byte 0xfe,0x81,0xa0,0x1c, 0xf9,0x08,0x2b,0x94
1229 .byte 0x70,0x48,0x68,0x58, 0x8f,0x45,0xfd,0x19
1230 .byte 0x94,0xde,0x6c,0x87, 0x52,0x7b,0xf8,0xb7
1231 .byte 0xab,0x73,0xd3,0x23, 0x72,0x4b,0x02,0xe2
1232 .byte 0xe3,0x1f,0x8f,0x57, 0x66,0x55,0xab,0x2a
1233 .byte 0xb2,0xeb,0x28,0x07, 0x2f,0xb5,0xc2,0x03
1234 .byte 0x86,0xc5,0x7b,0x9a, 0xd3,0x37,0x08,0xa5
1235 .byte 0x30,0x28,0x87,0xf2, 0x23,0xbf,0xa5,0xb2
1236 .byte 0x02,0x03,0x6a,0xba, 0xed,0x16,0x82,0x5c
1237 .byte 0x8a,0xcf,0x1c,0x2b, 0xa7,0x79,0xb4,0x92
1238 .byte 0xf3,0x07,0xf2,0xf0, 0x4e,0x69,0xe2,0xa1
1239 .byte 0x65,0xda,0xf4,0xcd, 0x06,0x05,0xbe,0xd5
1240 .byte 0xd1,0x34,0x62,0x1f, 0xc4,0xa6,0xfe,0x8a
1241 .byte 0x34,0x2e,0x53,0x9d, 0xa2,0xf3,0x55,0xa0
1242 .byte 0x05,0x8a,0xe1,0x32, 0xa4,0xf6,0xeb,0x75
1243 .byte 0x0b,0x83,0xec,0x39, 0x40,0x60,0xef,0xaa
1244 .byte 0x5e,0x71,0x9f,0x06, 0xbd,0x6e,0x10,0x51
1245 .byte 0x3e,0x21,0x8a,0xf9, 0x96,0xdd,0x06,0x3d
1246 .byte 0xdd,0x3e,0x05,0xae, 0x4d,0xe6,0xbd,0x46
1247 .byte 0x91,0x54,0x8d,0xb5, 0x71,0xc4,0x5d,0x05
1248 .byte 0x04,0x06,0xd4,0x6f, 0x60,0x50,0x15,0xff
1249 .byte 0x19,0x98,0xfb,0x24, 0xd6,0xbd,0xe9,0x97
1250 .byte 0x89,0x40,0x43,0xcc, 0x67,0xd9,0x9e,0x77
1251 .byte 0xb0,0xe8,0x42,0xbd, 0x07,0x89,0x8b,0x88
1252 .byte 0xe7,0x19,0x5b,0x38, 0x79,0xc8,0xee,0xdb
1253 .byte 0xa1,0x7c,0x0a,0x47, 0x7c,0x42,0x0f,0xe9
1254 .byte 0xf8,0x84,0x1e,0xc9, 0x00,0x00,0x00,0x00
1255 .byte 0x09,0x80,0x86,0x83, 0x32,0x2b,0xed,0x48
1256 .byte 0x1e,0x11,0x70,0xac, 0x6c,0x5a,0x72,0x4e
1257 .byte 0xfd,0x0e,0xff,0xfb, 0x0f,0x85,0x38,0x56
1258 .byte 0x3d,0xae,0xd5,0x1e, 0x36,0x2d,0x39,0x27
1259 .byte 0x0a,0x0f,0xd9,0x64, 0x68,0x5c,0xa6,0x21
1260 .byte 0x9b,0x5b,0x54,0xd1, 0x24,0x36,0x2e,0x3a
1261 .byte 0x0c,0x0a,0x67,0xb1, 0x93,0x57,0xe7,0x0f
1262 .byte 0xb4,0xee,0x96,0xd2, 0x1b,0x9b,0x91,0x9e
1263 .byte 0x80,0xc0,0xc5,0x4f, 0x61,0xdc,0x20,0xa2
1264 .byte 0x5a,0x77,0x4b,0x69, 0x1c,0x12,0x1a,0x16
1265 .byte 0xe2,0x93,0xba,0x0a, 0xc0,0xa0,0x2a,0xe5
1266 .byte 0x3c,0x22,0xe0,0x43, 0x12,0x1b,0x17,0x1d
1267 .byte 0x0e,0x09,0x0d,0x0b, 0xf2,0x8b,0xc7,0xad
1268 .byte 0x2d,0xb6,0xa8,0xb9, 0x14,0x1e,0xa9,0xc8
1269 .byte 0x57,0xf1,0x19,0x85, 0xaf,0x75,0x07,0x4c
1270 .byte 0xee,0x99,0xdd,0xbb, 0xa3,0x7f,0x60,0xfd
1271 .byte 0xf7,0x01,0x26,0x9f, 0x5c,0x72,0xf5,0xbc
1272 .byte 0x44,0x66,0x3b,0xc5, 0x5b,0xfb,0x7e,0x34
1273 .byte 0x8b,0x43,0x29,0x76, 0xcb,0x23,0xc6,0xdc
1274 .byte 0xb6,0xed,0xfc,0x68, 0xb8,0xe4,0xf1,0x63
1275 .byte 0xd7,0x31,0xdc,0xca, 0x42,0x63,0x85,0x10
1276 .byte 0x13,0x97,0x22,0x40, 0x84,0xc6,0x11,0x20
1277 .byte 0x85,0x4a,0x24,0x7d, 0xd2,0xbb,0x3d,0xf8
1278 .byte 0xae,0xf9,0x32,0x11, 0xc7,0x29,0xa1,0x6d
1279 .byte 0x1d,0x9e,0x2f,0x4b, 0xdc,0xb2,0x30,0xf3
1280 .byte 0x0d,0x86,0x52,0xec, 0x77,0xc1,0xe3,0xd0
1281 .byte 0x2b,0xb3,0x16,0x6c, 0xa9,0x70,0xb9,0x99
1282 .byte 0x11,0x94,0x48,0xfa, 0x47,0xe9,0x64,0x22
1283 .byte 0xa8,0xfc,0x8c,0xc4, 0xa0,0xf0,0x3f,0x1a
1284 .byte 0x56,0x7d,0x2c,0xd8, 0x22,0x33,0x90,0xef
1285 .byte 0x87,0x49,0x4e,0xc7, 0xd9,0x38,0xd1,0xc1
1286 .byte 0x8c,0xca,0xa2,0xfe, 0x98,0xd4,0x0b,0x36
1287 .byte 0xa6,0xf5,0x81,0xcf, 0xa5,0x7a,0xde,0x28
1288 .byte 0xda,0xb7,0x8e,0x26, 0x3f,0xad,0xbf,0xa4
1289 .byte 0x2c,0x3a,0x9d,0xe4, 0x50,0x78,0x92,0x0d
1290 .byte 0x6a,0x5f,0xcc,0x9b, 0x54,0x7e,0x46,0x62
1291 .byte 0xf6,0x8d,0x13,0xc2, 0x90,0xd8,0xb8,0xe8
1292 .byte 0x2e,0x39,0xf7,0x5e, 0x82,0xc3,0xaf,0xf5
1293 .byte 0x9f,0x5d,0x80,0xbe, 0x69,0xd0,0x93,0x7c
1294 .byte 0x6f,0xd5,0x2d,0xa9, 0xcf,0x25,0x12,0xb3
1295 .byte 0xc8,0xac,0x99,0x3b, 0x10,0x18,0x7d,0xa7
1296 .byte 0xe8,0x9c,0x63,0x6e, 0xdb,0x3b,0xbb,0x7b
1297 .byte 0xcd,0x26,0x78,0x09, 0x6e,0x59,0x18,0xf4
1298 .byte 0xec,0x9a,0xb7,0x01, 0x83,0x4f,0x9a,0xa8
1299 .byte 0xe6,0x95,0x6e,0x65, 0xaa,0xff,0xe6,0x7e
1300 .byte 0x21,0xbc,0xcf,0x08, 0xef,0x15,0xe8,0xe6
1301 .byte 0xba,0xe7,0x9b,0xd9, 0x4a,0x6f,0x36,0xce
1302 .byte 0xea,0x9f,0x09,0xd4, 0x29,0xb0,0x7c,0xd6
1303 .byte 0x31,0xa4,0xb2,0xaf, 0x2a,0x3f,0x23,0x31
1304 .byte 0xc6,0xa5,0x94,0x30, 0x35,0xa2,0x66,0xc0
1305 .byte 0x74,0x4e,0xbc,0x37, 0xfc,0x82,0xca,0xa6
1306 .byte 0xe0,0x90,0xd0,0xb0, 0x33,0xa7,0xd8,0x15
1307 .byte 0xf1,0x04,0x98,0x4a, 0x41,0xec,0xda,0xf7
1308 .byte 0x7f,0xcd,0x50,0x0e, 0x17,0x91,0xf6,0x2f
1309 .byte 0x76,0x4d,0xd6,0x8d, 0x43,0xef,0xb0,0x4d
1310 .byte 0xcc,0xaa,0x4d,0x54, 0xe4,0x96,0x04,0xdf
1311 .byte 0x9e,0xd1,0xb5,0xe3, 0x4c,0x6a,0x88,0x1b
1312 .byte 0xc1,0x2c,0x1f,0xb8, 0x46,0x65,0x51,0x7f
1313 .byte 0x9d,0x5e,0xea,0x04, 0x01,0x8c,0x35,0x5d
1314 .byte 0xfa,0x87,0x74,0x73, 0xfb,0x0b,0x41,0x2e
1315 .byte 0xb3,0x67,0x1d,0x5a, 0x92,0xdb,0xd2,0x52
1316 .byte 0xe9,0x10,0x56,0x33, 0x6d,0xd6,0x47,0x13
1317 .byte 0x9a,0xd7,0x61,0x8c, 0x37,0xa1,0x0c,0x7a
1318 .byte 0x59,0xf8,0x14,0x8e, 0xeb,0x13,0x3c,0x89
1319 .byte 0xce,0xa9,0x27,0xee, 0xb7,0x61,0xc9,0x35
1320 .byte 0xe1,0x1c,0xe5,0xed, 0x7a,0x47,0xb1,0x3c
1321 .byte 0x9c,0xd2,0xdf,0x59, 0x55,0xf2,0x73,0x3f
1322 .byte 0x18,0x14,0xce,0x79, 0x73,0xc7,0x37,0xbf
1323 .byte 0x53,0xf7,0xcd,0xea, 0x5f,0xfd,0xaa,0x5b
1324 .byte 0xdf,0x3d,0x6f,0x14, 0x78,0x44,0xdb,0x86
1325 .byte 0xca,0xaf,0xf3,0x81, 0xb9,0x68,0xc4,0x3e
1326 .byte 0x38,0x24,0x34,0x2c, 0xc2,0xa3,0x40,0x5f
1327 .byte 0x16,0x1d,0xc3,0x72, 0xbc,0xe2,0x25,0x0c
1328 .byte 0x28,0x3c,0x49,0x8b, 0xff,0x0d,0x95,0x41
1329 .byte 0x39,0xa8,0x01,0x71, 0x08,0x0c,0xb3,0xde
1330 .byte 0xd8,0xb4,0xe4,0x9c, 0x64,0x56,0xc1,0x90
1331 .byte 0x7b,0xcb,0x84,0x61, 0xd5,0x32,0xb6,0x70
1332 .byte 0x48,0x6c,0x5c,0x74, 0xd0,0xb8,0x57,0x42
1334 .byte 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38
1335 .byte 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb
1336 .byte 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87
1337 .byte 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb
1338 .byte 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d
1339 .byte 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e
1340 .byte 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2
1341 .byte 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25
1342 .byte 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16
1343 .byte 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92
1344 .byte 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda
1345 .byte 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84
1346 .byte 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a
1347 .byte 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06
1348 .byte 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02
1349 .byte 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b
1350 .byte 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea
1351 .byte 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73
1352 .byte 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85
1353 .byte 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e
1354 .byte 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89
1355 .byte 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b
1356 .byte 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20
1357 .byte 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4
1358 .byte 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31
1359 .byte 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f
1360 .byte 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d
1361 .byte 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef
1362 .byte 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0
1363 .byte 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61
1364 .byte 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26
1365 .byte 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d
1366 .cstring "AES for C64x+, CRYPTOGAMS by <appro\@openssl.org>"