VirtualBox

source: vbox/trunk/src/libs/openssl-1.1.1l/crypto/aes/asm/aes-mips.pl@ 91772

Last change on this file since 91772 was 91772, checked in by vboxsync, 3 years ago

openssl-1.1.1l: Applied and adjusted our OpenSSL changes to 1.1.1l. bugref:10126

File size: 52.2 KB
Line 
1#! /usr/bin/env perl
2# Copyright 2010-2020 The OpenSSL Project Authors. All Rights Reserved.
3#
4# Licensed under the OpenSSL license (the "License"). You may not use
5# this file except in compliance with the License. You can obtain a copy
6# in the file LICENSE in the source distribution or at
7# https://www.openssl.org/source/license.html
8
9
10# ====================================================================
11# Written by Andy Polyakov <[email protected]> for the OpenSSL
12# project. The module is, however, dual licensed under OpenSSL and
13# CRYPTOGAMS licenses depending on where you obtain it. For further
14# details see http://www.openssl.org/~appro/cryptogams/.
15# ====================================================================
16
17# AES for MIPS
18
19# October 2010
20#
21# Code uses 1K[+256B] S-box and on single-issue core [such as R5000]
22# spends ~68 cycles per byte processed with 128-bit key. This is ~16%
23# faster than gcc-generated code, which is not very impressive. But
24# recall that compressed S-box requires extra processing, namely
25# additional rotations. Rotations are implemented with lwl/lwr pairs,
26# which is normally used for loading unaligned data. Another cool
27# thing about this module is its endian neutrality, which means that
28# it processes data without ever changing byte order...
29
30# September 2012
31#
32# Add MIPS32R2 (~10% less instructions) and SmartMIPS ASE (further
33# ~25% less instructions) code. Note that there is no run-time switch,
34# instead, code path is chosen upon pre-process time, pass -mips32r2
35# or/and -msmartmips.
36
37######################################################################
38# There is a number of MIPS ABI in use, O32 and N32/64 are most
39# widely used. Then there is a new contender: NUBI. It appears that if
40# one picks the latter, it's possible to arrange code in ABI neutral
41# manner. Therefore let's stick to NUBI register layout:
42#
43($zero,$at,$t0,$t1,$t2)=map("\$$_",(0..2,24,25));
44($a0,$a1,$a2,$a3,$a4,$a5,$a6,$a7)=map("\$$_",(4..11));
45($s0,$s1,$s2,$s3,$s4,$s5,$s6,$s7,$s8,$s9,$s10,$s11)=map("\$$_",(12..23));
46($gp,$tp,$sp,$fp,$ra)=map("\$$_",(3,28..31));
47#
48# The return value is placed in $a0. Following coding rules facilitate
49# interoperability:
50#
51# - never ever touch $tp, "thread pointer", former $gp;
52# - copy return value to $t0, former $v0 [or to $a0 if you're adapting
53# old code];
54# - on O32 populate $a4-$a7 with 'lw $aN,4*N($sp)' if necessary;
55#
56# For reference here is register layout for N32/64 MIPS ABIs:
57#
58# ($zero,$at,$v0,$v1)=map("\$$_",(0..3));
59# ($a0,$a1,$a2,$a3,$a4,$a5,$a6,$a7)=map("\$$_",(4..11));
60# ($t0,$t1,$t2,$t3,$t8,$t9)=map("\$$_",(12..15,24,25));
61# ($s0,$s1,$s2,$s3,$s4,$s5,$s6,$s7)=map("\$$_",(16..23));
62# ($gp,$sp,$fp,$ra)=map("\$$_",(28..31));
63#
64$flavour = shift || "o32"; # supported flavours are o32,n32,64,nubi32,nubi64
65
66if ($flavour =~ /64|n32/i) {
67 $PTR_LA="dla";
68 $PTR_ADD="daddu"; # incidentally works even on n32
69 $PTR_SUB="dsubu"; # incidentally works even on n32
70 $PTR_INS="dins";
71 $REG_S="sd";
72 $REG_L="ld";
73 $PTR_SLL="dsll"; # incidentally works even on n32
74 $SZREG=8;
75} else {
76 $PTR_LA="la";
77 $PTR_ADD="addu";
78 $PTR_SUB="subu";
79 $PTR_INS="ins";
80 $REG_S="sw";
81 $REG_L="lw";
82 $PTR_SLL="sll";
83 $SZREG=4;
84}
85$pf = ($flavour =~ /nubi/i) ? $t0 : $t2;
86#
87# <[email protected]>
88#
89######################################################################
90
91$big_endian=(`echo MIPSEB | $ENV{CC} -E -`=~/MIPSEB/)?0:1 if ($ENV{CC});
92
93for (@ARGV) { $output=$_ if (/\w[\w\-]*\.\w+$/); }
94open STDOUT,">$output";
95
96if (!defined($big_endian))
97{ $big_endian=(unpack('L',pack('N',1))==1); }
98
99while (($output=shift) && ($output!~/\w[\w\-]*\.\w+$/)) {}
100open STDOUT,">$output";
101
102my ($MSB,$LSB)=(0,3); # automatically converted to little-endian
103
104$code.=<<___;
105#include "mips_arch.h"
106
107.text
108#if !defined(__mips_eabi) && (!defined(__vxworks) || defined(__pic__))
109.option pic2
110#endif
111.set noat
112___
113
114
115{{{
116my $FRAMESIZE=16*$SZREG;
117my $SAVED_REGS_MASK = ($flavour =~ /nubi/i) ? "0xc0fff008" : "0xc0ff0000";
118
119my ($inp,$out,$key,$Tbl,$s0,$s1,$s2,$s3)=($a0,$a1,$a2,$a3,$a4,$a5,$a6,$a7);
120my ($i0,$i1,$i2,$i3)=($at,$t0,$t1,$t2);
121my ($t0,$t1,$t2,$t3,$t4,$t5,$t6,$t7,$t8,$t9,$t10,$t11) = map("\$$_",(12..23));
122my ($key0,$cnt)=($gp,$fp);
123
124# instruction ordering is "stolen" from output from MIPSpro assembler
125# invoked with -mips3 -O3 arguments...
126$code.=<<___;
127.align 5
128.ent _mips_AES_encrypt
129_mips_AES_encrypt:
130 .frame $sp,0,$ra
131 .set reorder
132 lw $t0,0($key)
133 lw $t1,4($key)
134 lw $t2,8($key)
135 lw $t3,12($key)
136 lw $cnt,240($key)
137 $PTR_ADD $key0,$key,16
138
139 xor $s0,$t0
140 xor $s1,$t1
141 xor $s2,$t2
142 xor $s3,$t3
143
144 subu $cnt,1
145#if defined(__mips_smartmips)
146 ext $i0,$s1,16,8
147.Loop_enc:
148 ext $i1,$s2,16,8
149 ext $i2,$s3,16,8
150 ext $i3,$s0,16,8
151 lwxs $t0,$i0($Tbl) # Te1[s1>>16]
152 ext $i0,$s2,8,8
153 lwxs $t1,$i1($Tbl) # Te1[s2>>16]
154 ext $i1,$s3,8,8
155 lwxs $t2,$i2($Tbl) # Te1[s3>>16]
156 ext $i2,$s0,8,8
157 lwxs $t3,$i3($Tbl) # Te1[s0>>16]
158 ext $i3,$s1,8,8
159
160 lwxs $t4,$i0($Tbl) # Te2[s2>>8]
161 ext $i0,$s3,0,8
162 lwxs $t5,$i1($Tbl) # Te2[s3>>8]
163 ext $i1,$s0,0,8
164 lwxs $t6,$i2($Tbl) # Te2[s0>>8]
165 ext $i2,$s1,0,8
166 lwxs $t7,$i3($Tbl) # Te2[s1>>8]
167 ext $i3,$s2,0,8
168
169 lwxs $t8,$i0($Tbl) # Te3[s3]
170 ext $i0,$s0,24,8
171 lwxs $t9,$i1($Tbl) # Te3[s0]
172 ext $i1,$s1,24,8
173 lwxs $t10,$i2($Tbl) # Te3[s1]
174 ext $i2,$s2,24,8
175 lwxs $t11,$i3($Tbl) # Te3[s2]
176 ext $i3,$s3,24,8
177
178 rotr $t0,$t0,8
179 rotr $t1,$t1,8
180 rotr $t2,$t2,8
181 rotr $t3,$t3,8
182
183 rotr $t4,$t4,16
184 rotr $t5,$t5,16
185 rotr $t6,$t6,16
186 rotr $t7,$t7,16
187
188 xor $t0,$t4
189 lwxs $t4,$i0($Tbl) # Te0[s0>>24]
190 xor $t1,$t5
191 lwxs $t5,$i1($Tbl) # Te0[s1>>24]
192 xor $t2,$t6
193 lwxs $t6,$i2($Tbl) # Te0[s2>>24]
194 xor $t3,$t7
195 lwxs $t7,$i3($Tbl) # Te0[s3>>24]
196
197 rotr $t8,$t8,24
198 lw $s0,0($key0)
199 rotr $t9,$t9,24
200 lw $s1,4($key0)
201 rotr $t10,$t10,24
202 lw $s2,8($key0)
203 rotr $t11,$t11,24
204 lw $s3,12($key0)
205
206 xor $t0,$t8
207 xor $t1,$t9
208 xor $t2,$t10
209 xor $t3,$t11
210
211 xor $t0,$t4
212 xor $t1,$t5
213 xor $t2,$t6
214 xor $t3,$t7
215
216 subu $cnt,1
217 $PTR_ADD $key0,16
218 xor $s0,$t0
219 xor $s1,$t1
220 xor $s2,$t2
221 xor $s3,$t3
222 .set noreorder
223 bnez $cnt,.Loop_enc
224 ext $i0,$s1,16,8
225
226 _xtr $i0,$s1,16-2
227#else
228 _xtr $i0,$s1,16-2
229.Loop_enc:
230 _xtr $i1,$s2,16-2
231 _xtr $i2,$s3,16-2
232 _xtr $i3,$s0,16-2
233 and $i0,0x3fc
234 and $i1,0x3fc
235 and $i2,0x3fc
236 and $i3,0x3fc
237 $PTR_ADD $i0,$Tbl
238 $PTR_ADD $i1,$Tbl
239 $PTR_ADD $i2,$Tbl
240 $PTR_ADD $i3,$Tbl
241#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
242 lw $t0,0($i0) # Te1[s1>>16]
243 _xtr $i0,$s2,8-2
244 lw $t1,0($i1) # Te1[s2>>16]
245 _xtr $i1,$s3,8-2
246 lw $t2,0($i2) # Te1[s3>>16]
247 _xtr $i2,$s0,8-2
248 lw $t3,0($i3) # Te1[s0>>16]
249 _xtr $i3,$s1,8-2
250#else
251 lwl $t0,3($i0) # Te1[s1>>16]
252 lwl $t1,3($i1) # Te1[s2>>16]
253 lwl $t2,3($i2) # Te1[s3>>16]
254 lwl $t3,3($i3) # Te1[s0>>16]
255 lwr $t0,2($i0) # Te1[s1>>16]
256 _xtr $i0,$s2,8-2
257 lwr $t1,2($i1) # Te1[s2>>16]
258 _xtr $i1,$s3,8-2
259 lwr $t2,2($i2) # Te1[s3>>16]
260 _xtr $i2,$s0,8-2
261 lwr $t3,2($i3) # Te1[s0>>16]
262 _xtr $i3,$s1,8-2
263#endif
264 and $i0,0x3fc
265 and $i1,0x3fc
266 and $i2,0x3fc
267 and $i3,0x3fc
268 $PTR_ADD $i0,$Tbl
269 $PTR_ADD $i1,$Tbl
270 $PTR_ADD $i2,$Tbl
271 $PTR_ADD $i3,$Tbl
272#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
273 rotr $t0,$t0,8
274 rotr $t1,$t1,8
275 rotr $t2,$t2,8
276 rotr $t3,$t3,8
277# if defined(_MIPSEL)
278 lw $t4,0($i0) # Te2[s2>>8]
279 _xtr $i0,$s3,0-2
280 lw $t5,0($i1) # Te2[s3>>8]
281 _xtr $i1,$s0,0-2
282 lw $t6,0($i2) # Te2[s0>>8]
283 _xtr $i2,$s1,0-2
284 lw $t7,0($i3) # Te2[s1>>8]
285 _xtr $i3,$s2,0-2
286
287 and $i0,0x3fc
288 and $i1,0x3fc
289 and $i2,0x3fc
290 and $i3,0x3fc
291 $PTR_ADD $i0,$Tbl
292 $PTR_ADD $i1,$Tbl
293 $PTR_ADD $i2,$Tbl
294 $PTR_ADD $i3,$Tbl
295 lw $t8,0($i0) # Te3[s3]
296 $PTR_INS $i0,$s0,2,8
297 lw $t9,0($i1) # Te3[s0]
298 $PTR_INS $i1,$s1,2,8
299 lw $t10,0($i2) # Te3[s1]
300 $PTR_INS $i2,$s2,2,8
301 lw $t11,0($i3) # Te3[s2]
302 $PTR_INS $i3,$s3,2,8
303# else
304 lw $t4,0($i0) # Te2[s2>>8]
305 $PTR_INS $i0,$s3,2,8
306 lw $t5,0($i1) # Te2[s3>>8]
307 $PTR_INS $i1,$s0,2,8
308 lw $t6,0($i2) # Te2[s0>>8]
309 $PTR_INS $i2,$s1,2,8
310 lw $t7,0($i3) # Te2[s1>>8]
311 $PTR_INS $i3,$s2,2,8
312
313 lw $t8,0($i0) # Te3[s3]
314 _xtr $i0,$s0,24-2
315 lw $t9,0($i1) # Te3[s0]
316 _xtr $i1,$s1,24-2
317 lw $t10,0($i2) # Te3[s1]
318 _xtr $i2,$s2,24-2
319 lw $t11,0($i3) # Te3[s2]
320 _xtr $i3,$s3,24-2
321
322 and $i0,0x3fc
323 and $i1,0x3fc
324 and $i2,0x3fc
325 and $i3,0x3fc
326 $PTR_ADD $i0,$Tbl
327 $PTR_ADD $i1,$Tbl
328 $PTR_ADD $i2,$Tbl
329 $PTR_ADD $i3,$Tbl
330# endif
331 rotr $t4,$t4,16
332 rotr $t5,$t5,16
333 rotr $t6,$t6,16
334 rotr $t7,$t7,16
335
336 rotr $t8,$t8,24
337 rotr $t9,$t9,24
338 rotr $t10,$t10,24
339 rotr $t11,$t11,24
340#else
341 lwl $t4,2($i0) # Te2[s2>>8]
342 lwl $t5,2($i1) # Te2[s3>>8]
343 lwl $t6,2($i2) # Te2[s0>>8]
344 lwl $t7,2($i3) # Te2[s1>>8]
345 lwr $t4,1($i0) # Te2[s2>>8]
346 _xtr $i0,$s3,0-2
347 lwr $t5,1($i1) # Te2[s3>>8]
348 _xtr $i1,$s0,0-2
349 lwr $t6,1($i2) # Te2[s0>>8]
350 _xtr $i2,$s1,0-2
351 lwr $t7,1($i3) # Te2[s1>>8]
352 _xtr $i3,$s2,0-2
353
354 and $i0,0x3fc
355 and $i1,0x3fc
356 and $i2,0x3fc
357 and $i3,0x3fc
358 $PTR_ADD $i0,$Tbl
359 $PTR_ADD $i1,$Tbl
360 $PTR_ADD $i2,$Tbl
361 $PTR_ADD $i3,$Tbl
362 lwl $t8,1($i0) # Te3[s3]
363 lwl $t9,1($i1) # Te3[s0]
364 lwl $t10,1($i2) # Te3[s1]
365 lwl $t11,1($i3) # Te3[s2]
366 lwr $t8,0($i0) # Te3[s3]
367 _xtr $i0,$s0,24-2
368 lwr $t9,0($i1) # Te3[s0]
369 _xtr $i1,$s1,24-2
370 lwr $t10,0($i2) # Te3[s1]
371 _xtr $i2,$s2,24-2
372 lwr $t11,0($i3) # Te3[s2]
373 _xtr $i3,$s3,24-2
374
375 and $i0,0x3fc
376 and $i1,0x3fc
377 and $i2,0x3fc
378 and $i3,0x3fc
379 $PTR_ADD $i0,$Tbl
380 $PTR_ADD $i1,$Tbl
381 $PTR_ADD $i2,$Tbl
382 $PTR_ADD $i3,$Tbl
383#endif
384 xor $t0,$t4
385 lw $t4,0($i0) # Te0[s0>>24]
386 xor $t1,$t5
387 lw $t5,0($i1) # Te0[s1>>24]
388 xor $t2,$t6
389 lw $t6,0($i2) # Te0[s2>>24]
390 xor $t3,$t7
391 lw $t7,0($i3) # Te0[s3>>24]
392
393 xor $t0,$t8
394 lw $s0,0($key0)
395 xor $t1,$t9
396 lw $s1,4($key0)
397 xor $t2,$t10
398 lw $s2,8($key0)
399 xor $t3,$t11
400 lw $s3,12($key0)
401
402 xor $t0,$t4
403 xor $t1,$t5
404 xor $t2,$t6
405 xor $t3,$t7
406
407 subu $cnt,1
408 $PTR_ADD $key0,16
409 xor $s0,$t0
410 xor $s1,$t1
411 xor $s2,$t2
412 xor $s3,$t3
413 .set noreorder
414 bnez $cnt,.Loop_enc
415 _xtr $i0,$s1,16-2
416#endif
417
418 .set reorder
419 _xtr $i1,$s2,16-2
420 _xtr $i2,$s3,16-2
421 _xtr $i3,$s0,16-2
422 and $i0,0x3fc
423 and $i1,0x3fc
424 and $i2,0x3fc
425 and $i3,0x3fc
426 $PTR_ADD $i0,$Tbl
427 $PTR_ADD $i1,$Tbl
428 $PTR_ADD $i2,$Tbl
429 $PTR_ADD $i3,$Tbl
430 lbu $t0,2($i0) # Te4[s1>>16]
431 _xtr $i0,$s2,8-2
432 lbu $t1,2($i1) # Te4[s2>>16]
433 _xtr $i1,$s3,8-2
434 lbu $t2,2($i2) # Te4[s3>>16]
435 _xtr $i2,$s0,8-2
436 lbu $t3,2($i3) # Te4[s0>>16]
437 _xtr $i3,$s1,8-2
438
439 and $i0,0x3fc
440 and $i1,0x3fc
441 and $i2,0x3fc
442 and $i3,0x3fc
443 $PTR_ADD $i0,$Tbl
444 $PTR_ADD $i1,$Tbl
445 $PTR_ADD $i2,$Tbl
446 $PTR_ADD $i3,$Tbl
447#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
448# if defined(_MIPSEL)
449 lbu $t4,2($i0) # Te4[s2>>8]
450 $PTR_INS $i0,$s0,2,8
451 lbu $t5,2($i1) # Te4[s3>>8]
452 $PTR_INS $i1,$s1,2,8
453 lbu $t6,2($i2) # Te4[s0>>8]
454 $PTR_INS $i2,$s2,2,8
455 lbu $t7,2($i3) # Te4[s1>>8]
456 $PTR_INS $i3,$s3,2,8
457
458 lbu $t8,2($i0) # Te4[s0>>24]
459 _xtr $i0,$s3,0-2
460 lbu $t9,2($i1) # Te4[s1>>24]
461 _xtr $i1,$s0,0-2
462 lbu $t10,2($i2) # Te4[s2>>24]
463 _xtr $i2,$s1,0-2
464 lbu $t11,2($i3) # Te4[s3>>24]
465 _xtr $i3,$s2,0-2
466
467 and $i0,0x3fc
468 and $i1,0x3fc
469 and $i2,0x3fc
470 and $i3,0x3fc
471 $PTR_ADD $i0,$Tbl
472 $PTR_ADD $i1,$Tbl
473 $PTR_ADD $i2,$Tbl
474 $PTR_ADD $i3,$Tbl
475# else
476 lbu $t4,2($i0) # Te4[s2>>8]
477 _xtr $i0,$s0,24-2
478 lbu $t5,2($i1) # Te4[s3>>8]
479 _xtr $i1,$s1,24-2
480 lbu $t6,2($i2) # Te4[s0>>8]
481 _xtr $i2,$s2,24-2
482 lbu $t7,2($i3) # Te4[s1>>8]
483 _xtr $i3,$s3,24-2
484
485 and $i0,0x3fc
486 and $i1,0x3fc
487 and $i2,0x3fc
488 and $i3,0x3fc
489 $PTR_ADD $i0,$Tbl
490 $PTR_ADD $i1,$Tbl
491 $PTR_ADD $i2,$Tbl
492 $PTR_ADD $i3,$Tbl
493 lbu $t8,2($i0) # Te4[s0>>24]
494 $PTR_INS $i0,$s3,2,8
495 lbu $t9,2($i1) # Te4[s1>>24]
496 $PTR_INS $i1,$s0,2,8
497 lbu $t10,2($i2) # Te4[s2>>24]
498 $PTR_INS $i2,$s1,2,8
499 lbu $t11,2($i3) # Te4[s3>>24]
500 $PTR_INS $i3,$s2,2,8
501# endif
502 _ins $t0,16
503 _ins $t1,16
504 _ins $t2,16
505 _ins $t3,16
506
507 _ins2 $t0,$t4,8
508 lbu $t4,2($i0) # Te4[s3]
509 _ins2 $t1,$t5,8
510 lbu $t5,2($i1) # Te4[s0]
511 _ins2 $t2,$t6,8
512 lbu $t6,2($i2) # Te4[s1]
513 _ins2 $t3,$t7,8
514 lbu $t7,2($i3) # Te4[s2]
515
516 _ins2 $t0,$t8,24
517 lw $s0,0($key0)
518 _ins2 $t1,$t9,24
519 lw $s1,4($key0)
520 _ins2 $t2,$t10,24
521 lw $s2,8($key0)
522 _ins2 $t3,$t11,24
523 lw $s3,12($key0)
524
525 _ins2 $t0,$t4,0
526 _ins2 $t1,$t5,0
527 _ins2 $t2,$t6,0
528 _ins2 $t3,$t7,0
529#else
530 lbu $t4,2($i0) # Te4[s2>>8]
531 _xtr $i0,$s0,24-2
532 lbu $t5,2($i1) # Te4[s3>>8]
533 _xtr $i1,$s1,24-2
534 lbu $t6,2($i2) # Te4[s0>>8]
535 _xtr $i2,$s2,24-2
536 lbu $t7,2($i3) # Te4[s1>>8]
537 _xtr $i3,$s3,24-2
538
539 and $i0,0x3fc
540 and $i1,0x3fc
541 and $i2,0x3fc
542 and $i3,0x3fc
543 $PTR_ADD $i0,$Tbl
544 $PTR_ADD $i1,$Tbl
545 $PTR_ADD $i2,$Tbl
546 $PTR_ADD $i3,$Tbl
547 lbu $t8,2($i0) # Te4[s0>>24]
548 _xtr $i0,$s3,0-2
549 lbu $t9,2($i1) # Te4[s1>>24]
550 _xtr $i1,$s0,0-2
551 lbu $t10,2($i2) # Te4[s2>>24]
552 _xtr $i2,$s1,0-2
553 lbu $t11,2($i3) # Te4[s3>>24]
554 _xtr $i3,$s2,0-2
555
556 and $i0,0x3fc
557 and $i1,0x3fc
558 and $i2,0x3fc
559 and $i3,0x3fc
560 $PTR_ADD $i0,$Tbl
561 $PTR_ADD $i1,$Tbl
562 $PTR_ADD $i2,$Tbl
563 $PTR_ADD $i3,$Tbl
564
565 _ins $t0,16
566 _ins $t1,16
567 _ins $t2,16
568 _ins $t3,16
569
570 _ins $t4,8
571 _ins $t5,8
572 _ins $t6,8
573 _ins $t7,8
574
575 xor $t0,$t4
576 lbu $t4,2($i0) # Te4[s3]
577 xor $t1,$t5
578 lbu $t5,2($i1) # Te4[s0]
579 xor $t2,$t6
580 lbu $t6,2($i2) # Te4[s1]
581 xor $t3,$t7
582 lbu $t7,2($i3) # Te4[s2]
583
584 _ins $t8,24
585 lw $s0,0($key0)
586 _ins $t9,24
587 lw $s1,4($key0)
588 _ins $t10,24
589 lw $s2,8($key0)
590 _ins $t11,24
591 lw $s3,12($key0)
592
593 xor $t0,$t8
594 xor $t1,$t9
595 xor $t2,$t10
596 xor $t3,$t11
597
598 _ins $t4,0
599 _ins $t5,0
600 _ins $t6,0
601 _ins $t7,0
602
603 xor $t0,$t4
604 xor $t1,$t5
605 xor $t2,$t6
606 xor $t3,$t7
607#endif
608 xor $s0,$t0
609 xor $s1,$t1
610 xor $s2,$t2
611 xor $s3,$t3
612
613 jr $ra
614.end _mips_AES_encrypt
615
616.align 5
617.globl AES_encrypt
618.ent AES_encrypt
619AES_encrypt:
620 .frame $sp,$FRAMESIZE,$ra
621 .mask $SAVED_REGS_MASK,-$SZREG
622 .set noreorder
623___
624$code.=<<___ if ($flavour =~ /o32/i); # o32 PIC-ification
625 .cpload $pf
626___
627$code.=<<___;
628 $PTR_SUB $sp,$FRAMESIZE
629 $REG_S $ra,$FRAMESIZE-1*$SZREG($sp)
630 $REG_S $fp,$FRAMESIZE-2*$SZREG($sp)
631 $REG_S $s11,$FRAMESIZE-3*$SZREG($sp)
632 $REG_S $s10,$FRAMESIZE-4*$SZREG($sp)
633 $REG_S $s9,$FRAMESIZE-5*$SZREG($sp)
634 $REG_S $s8,$FRAMESIZE-6*$SZREG($sp)
635 $REG_S $s7,$FRAMESIZE-7*$SZREG($sp)
636 $REG_S $s6,$FRAMESIZE-8*$SZREG($sp)
637 $REG_S $s5,$FRAMESIZE-9*$SZREG($sp)
638 $REG_S $s4,$FRAMESIZE-10*$SZREG($sp)
639___
640$code.=<<___ if ($flavour =~ /nubi/i); # optimize non-nubi prologue
641 $REG_S \$15,$FRAMESIZE-11*$SZREG($sp)
642 $REG_S \$14,$FRAMESIZE-12*$SZREG($sp)
643 $REG_S \$13,$FRAMESIZE-13*$SZREG($sp)
644 $REG_S \$12,$FRAMESIZE-14*$SZREG($sp)
645 $REG_S $gp,$FRAMESIZE-15*$SZREG($sp)
646___
647$code.=<<___ if ($flavour !~ /o32/i); # non-o32 PIC-ification
648 .cplocal $Tbl
649 .cpsetup $pf,$zero,AES_encrypt
650___
651$code.=<<___;
652 .set reorder
653 $PTR_LA $Tbl,AES_Te # PIC-ified 'load address'
654
655#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
656 lw $s0,0($inp)
657 lw $s1,4($inp)
658 lw $s2,8($inp)
659 lw $s3,12($inp)
660#else
661 lwl $s0,0+$MSB($inp)
662 lwl $s1,4+$MSB($inp)
663 lwl $s2,8+$MSB($inp)
664 lwl $s3,12+$MSB($inp)
665 lwr $s0,0+$LSB($inp)
666 lwr $s1,4+$LSB($inp)
667 lwr $s2,8+$LSB($inp)
668 lwr $s3,12+$LSB($inp)
669#endif
670
671 bal _mips_AES_encrypt
672
673#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
674 sw $s0,0($out)
675 sw $s1,4($out)
676 sw $s2,8($out)
677 sw $s3,12($out)
678#else
679 swr $s0,0+$LSB($out)
680 swr $s1,4+$LSB($out)
681 swr $s2,8+$LSB($out)
682 swr $s3,12+$LSB($out)
683 swl $s0,0+$MSB($out)
684 swl $s1,4+$MSB($out)
685 swl $s2,8+$MSB($out)
686 swl $s3,12+$MSB($out)
687#endif
688
689 .set noreorder
690 $REG_L $ra,$FRAMESIZE-1*$SZREG($sp)
691 $REG_L $fp,$FRAMESIZE-2*$SZREG($sp)
692 $REG_L $s11,$FRAMESIZE-3*$SZREG($sp)
693 $REG_L $s10,$FRAMESIZE-4*$SZREG($sp)
694 $REG_L $s9,$FRAMESIZE-5*$SZREG($sp)
695 $REG_L $s8,$FRAMESIZE-6*$SZREG($sp)
696 $REG_L $s7,$FRAMESIZE-7*$SZREG($sp)
697 $REG_L $s6,$FRAMESIZE-8*$SZREG($sp)
698 $REG_L $s5,$FRAMESIZE-9*$SZREG($sp)
699 $REG_L $s4,$FRAMESIZE-10*$SZREG($sp)
700___
701$code.=<<___ if ($flavour =~ /nubi/i);
702 $REG_L \$15,$FRAMESIZE-11*$SZREG($sp)
703 $REG_L \$14,$FRAMESIZE-12*$SZREG($sp)
704 $REG_L \$13,$FRAMESIZE-13*$SZREG($sp)
705 $REG_L \$12,$FRAMESIZE-14*$SZREG($sp)
706 $REG_L $gp,$FRAMESIZE-15*$SZREG($sp)
707___
708$code.=<<___;
709 jr $ra
710 $PTR_ADD $sp,$FRAMESIZE
711.end AES_encrypt
712___
713
714
715$code.=<<___;
716.align 5
717.ent _mips_AES_decrypt
718_mips_AES_decrypt:
719 .frame $sp,0,$ra
720 .set reorder
721 lw $t0,0($key)
722 lw $t1,4($key)
723 lw $t2,8($key)
724 lw $t3,12($key)
725 lw $cnt,240($key)
726 $PTR_ADD $key0,$key,16
727
728 xor $s0,$t0
729 xor $s1,$t1
730 xor $s2,$t2
731 xor $s3,$t3
732
733 subu $cnt,1
734#if defined(__mips_smartmips)
735 ext $i0,$s3,16,8
736.Loop_dec:
737 ext $i1,$s0,16,8
738 ext $i2,$s1,16,8
739 ext $i3,$s2,16,8
740 lwxs $t0,$i0($Tbl) # Td1[s3>>16]
741 ext $i0,$s2,8,8
742 lwxs $t1,$i1($Tbl) # Td1[s0>>16]
743 ext $i1,$s3,8,8
744 lwxs $t2,$i2($Tbl) # Td1[s1>>16]
745 ext $i2,$s0,8,8
746 lwxs $t3,$i3($Tbl) # Td1[s2>>16]
747 ext $i3,$s1,8,8
748
749 lwxs $t4,$i0($Tbl) # Td2[s2>>8]
750 ext $i0,$s1,0,8
751 lwxs $t5,$i1($Tbl) # Td2[s3>>8]
752 ext $i1,$s2,0,8
753 lwxs $t6,$i2($Tbl) # Td2[s0>>8]
754 ext $i2,$s3,0,8
755 lwxs $t7,$i3($Tbl) # Td2[s1>>8]
756 ext $i3,$s0,0,8
757
758 lwxs $t8,$i0($Tbl) # Td3[s1]
759 ext $i0,$s0,24,8
760 lwxs $t9,$i1($Tbl) # Td3[s2]
761 ext $i1,$s1,24,8
762 lwxs $t10,$i2($Tbl) # Td3[s3]
763 ext $i2,$s2,24,8
764 lwxs $t11,$i3($Tbl) # Td3[s0]
765 ext $i3,$s3,24,8
766
767 rotr $t0,$t0,8
768 rotr $t1,$t1,8
769 rotr $t2,$t2,8
770 rotr $t3,$t3,8
771
772 rotr $t4,$t4,16
773 rotr $t5,$t5,16
774 rotr $t6,$t6,16
775 rotr $t7,$t7,16
776
777 xor $t0,$t4
778 lwxs $t4,$i0($Tbl) # Td0[s0>>24]
779 xor $t1,$t5
780 lwxs $t5,$i1($Tbl) # Td0[s1>>24]
781 xor $t2,$t6
782 lwxs $t6,$i2($Tbl) # Td0[s2>>24]
783 xor $t3,$t7
784 lwxs $t7,$i3($Tbl) # Td0[s3>>24]
785
786 rotr $t8,$t8,24
787 lw $s0,0($key0)
788 rotr $t9,$t9,24
789 lw $s1,4($key0)
790 rotr $t10,$t10,24
791 lw $s2,8($key0)
792 rotr $t11,$t11,24
793 lw $s3,12($key0)
794
795 xor $t0,$t8
796 xor $t1,$t9
797 xor $t2,$t10
798 xor $t3,$t11
799
800 xor $t0,$t4
801 xor $t1,$t5
802 xor $t2,$t6
803 xor $t3,$t7
804
805 subu $cnt,1
806 $PTR_ADD $key0,16
807 xor $s0,$t0
808 xor $s1,$t1
809 xor $s2,$t2
810 xor $s3,$t3
811 .set noreorder
812 bnez $cnt,.Loop_dec
813 ext $i0,$s3,16,8
814
815 _xtr $i0,$s3,16-2
816#else
817 _xtr $i0,$s3,16-2
818.Loop_dec:
819 _xtr $i1,$s0,16-2
820 _xtr $i2,$s1,16-2
821 _xtr $i3,$s2,16-2
822 and $i0,0x3fc
823 and $i1,0x3fc
824 and $i2,0x3fc
825 and $i3,0x3fc
826 $PTR_ADD $i0,$Tbl
827 $PTR_ADD $i1,$Tbl
828 $PTR_ADD $i2,$Tbl
829 $PTR_ADD $i3,$Tbl
830#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
831 lw $t0,0($i0) # Td1[s3>>16]
832 _xtr $i0,$s2,8-2
833 lw $t1,0($i1) # Td1[s0>>16]
834 _xtr $i1,$s3,8-2
835 lw $t2,0($i2) # Td1[s1>>16]
836 _xtr $i2,$s0,8-2
837 lw $t3,0($i3) # Td1[s2>>16]
838 _xtr $i3,$s1,8-2
839#else
840 lwl $t0,3($i0) # Td1[s3>>16]
841 lwl $t1,3($i1) # Td1[s0>>16]
842 lwl $t2,3($i2) # Td1[s1>>16]
843 lwl $t3,3($i3) # Td1[s2>>16]
844 lwr $t0,2($i0) # Td1[s3>>16]
845 _xtr $i0,$s2,8-2
846 lwr $t1,2($i1) # Td1[s0>>16]
847 _xtr $i1,$s3,8-2
848 lwr $t2,2($i2) # Td1[s1>>16]
849 _xtr $i2,$s0,8-2
850 lwr $t3,2($i3) # Td1[s2>>16]
851 _xtr $i3,$s1,8-2
852#endif
853
854 and $i0,0x3fc
855 and $i1,0x3fc
856 and $i2,0x3fc
857 and $i3,0x3fc
858 $PTR_ADD $i0,$Tbl
859 $PTR_ADD $i1,$Tbl
860 $PTR_ADD $i2,$Tbl
861 $PTR_ADD $i3,$Tbl
862#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
863 rotr $t0,$t0,8
864 rotr $t1,$t1,8
865 rotr $t2,$t2,8
866 rotr $t3,$t3,8
867# if defined(_MIPSEL)
868 lw $t4,0($i0) # Td2[s2>>8]
869 _xtr $i0,$s1,0-2
870 lw $t5,0($i1) # Td2[s3>>8]
871 _xtr $i1,$s2,0-2
872 lw $t6,0($i2) # Td2[s0>>8]
873 _xtr $i2,$s3,0-2
874 lw $t7,0($i3) # Td2[s1>>8]
875 _xtr $i3,$s0,0-2
876
877 and $i0,0x3fc
878 and $i1,0x3fc
879 and $i2,0x3fc
880 and $i3,0x3fc
881 $PTR_ADD $i0,$Tbl
882 $PTR_ADD $i1,$Tbl
883 $PTR_ADD $i2,$Tbl
884 $PTR_ADD $i3,$Tbl
885 lw $t8,0($i0) # Td3[s1]
886 $PTR_INS $i0,$s0,2,8
887 lw $t9,0($i1) # Td3[s2]
888 $PTR_INS $i1,$s1,2,8
889 lw $t10,0($i2) # Td3[s3]
890 $PTR_INS $i2,$s2,2,8
891 lw $t11,0($i3) # Td3[s0]
892 $PTR_INS $i3,$s3,2,8
893#else
894 lw $t4,0($i0) # Td2[s2>>8]
895 $PTR_INS $i0,$s1,2,8
896 lw $t5,0($i1) # Td2[s3>>8]
897 $PTR_INS $i1,$s2,2,8
898 lw $t6,0($i2) # Td2[s0>>8]
899 $PTR_INS $i2,$s3,2,8
900 lw $t7,0($i3) # Td2[s1>>8]
901 $PTR_INS $i3,$s0,2,8
902
903 lw $t8,0($i0) # Td3[s1]
904 _xtr $i0,$s0,24-2
905 lw $t9,0($i1) # Td3[s2]
906 _xtr $i1,$s1,24-2
907 lw $t10,0($i2) # Td3[s3]
908 _xtr $i2,$s2,24-2
909 lw $t11,0($i3) # Td3[s0]
910 _xtr $i3,$s3,24-2
911
912 and $i0,0x3fc
913 and $i1,0x3fc
914 and $i2,0x3fc
915 and $i3,0x3fc
916 $PTR_ADD $i0,$Tbl
917 $PTR_ADD $i1,$Tbl
918 $PTR_ADD $i2,$Tbl
919 $PTR_ADD $i3,$Tbl
920#endif
921 rotr $t4,$t4,16
922 rotr $t5,$t5,16
923 rotr $t6,$t6,16
924 rotr $t7,$t7,16
925
926 rotr $t8,$t8,24
927 rotr $t9,$t9,24
928 rotr $t10,$t10,24
929 rotr $t11,$t11,24
930#else
931 lwl $t4,2($i0) # Td2[s2>>8]
932 lwl $t5,2($i1) # Td2[s3>>8]
933 lwl $t6,2($i2) # Td2[s0>>8]
934 lwl $t7,2($i3) # Td2[s1>>8]
935 lwr $t4,1($i0) # Td2[s2>>8]
936 _xtr $i0,$s1,0-2
937 lwr $t5,1($i1) # Td2[s3>>8]
938 _xtr $i1,$s2,0-2
939 lwr $t6,1($i2) # Td2[s0>>8]
940 _xtr $i2,$s3,0-2
941 lwr $t7,1($i3) # Td2[s1>>8]
942 _xtr $i3,$s0,0-2
943
944 and $i0,0x3fc
945 and $i1,0x3fc
946 and $i2,0x3fc
947 and $i3,0x3fc
948 $PTR_ADD $i0,$Tbl
949 $PTR_ADD $i1,$Tbl
950 $PTR_ADD $i2,$Tbl
951 $PTR_ADD $i3,$Tbl
952 lwl $t8,1($i0) # Td3[s1]
953 lwl $t9,1($i1) # Td3[s2]
954 lwl $t10,1($i2) # Td3[s3]
955 lwl $t11,1($i3) # Td3[s0]
956 lwr $t8,0($i0) # Td3[s1]
957 _xtr $i0,$s0,24-2
958 lwr $t9,0($i1) # Td3[s2]
959 _xtr $i1,$s1,24-2
960 lwr $t10,0($i2) # Td3[s3]
961 _xtr $i2,$s2,24-2
962 lwr $t11,0($i3) # Td3[s0]
963 _xtr $i3,$s3,24-2
964
965 and $i0,0x3fc
966 and $i1,0x3fc
967 and $i2,0x3fc
968 and $i3,0x3fc
969 $PTR_ADD $i0,$Tbl
970 $PTR_ADD $i1,$Tbl
971 $PTR_ADD $i2,$Tbl
972 $PTR_ADD $i3,$Tbl
973#endif
974
975 xor $t0,$t4
976 lw $t4,0($i0) # Td0[s0>>24]
977 xor $t1,$t5
978 lw $t5,0($i1) # Td0[s1>>24]
979 xor $t2,$t6
980 lw $t6,0($i2) # Td0[s2>>24]
981 xor $t3,$t7
982 lw $t7,0($i3) # Td0[s3>>24]
983
984 xor $t0,$t8
985 lw $s0,0($key0)
986 xor $t1,$t9
987 lw $s1,4($key0)
988 xor $t2,$t10
989 lw $s2,8($key0)
990 xor $t3,$t11
991 lw $s3,12($key0)
992
993 xor $t0,$t4
994 xor $t1,$t5
995 xor $t2,$t6
996 xor $t3,$t7
997
998 subu $cnt,1
999 $PTR_ADD $key0,16
1000 xor $s0,$t0
1001 xor $s1,$t1
1002 xor $s2,$t2
1003 xor $s3,$t3
1004 .set noreorder
1005 bnez $cnt,.Loop_dec
1006 _xtr $i0,$s3,16-2
1007#endif
1008
1009 .set reorder
1010 lw $t4,1024($Tbl) # prefetch Td4
1011 _xtr $i0,$s3,16
1012 lw $t5,1024+32($Tbl)
1013 _xtr $i1,$s0,16
1014 lw $t6,1024+64($Tbl)
1015 _xtr $i2,$s1,16
1016 lw $t7,1024+96($Tbl)
1017 _xtr $i3,$s2,16
1018 lw $t8,1024+128($Tbl)
1019 and $i0,0xff
1020 lw $t9,1024+160($Tbl)
1021 and $i1,0xff
1022 lw $t10,1024+192($Tbl)
1023 and $i2,0xff
1024 lw $t11,1024+224($Tbl)
1025 and $i3,0xff
1026
1027 $PTR_ADD $i0,$Tbl
1028 $PTR_ADD $i1,$Tbl
1029 $PTR_ADD $i2,$Tbl
1030 $PTR_ADD $i3,$Tbl
1031 lbu $t0,1024($i0) # Td4[s3>>16]
1032 _xtr $i0,$s2,8
1033 lbu $t1,1024($i1) # Td4[s0>>16]
1034 _xtr $i1,$s3,8
1035 lbu $t2,1024($i2) # Td4[s1>>16]
1036 _xtr $i2,$s0,8
1037 lbu $t3,1024($i3) # Td4[s2>>16]
1038 _xtr $i3,$s1,8
1039
1040 and $i0,0xff
1041 and $i1,0xff
1042 and $i2,0xff
1043 and $i3,0xff
1044 $PTR_ADD $i0,$Tbl
1045 $PTR_ADD $i1,$Tbl
1046 $PTR_ADD $i2,$Tbl
1047 $PTR_ADD $i3,$Tbl
1048#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
1049# if defined(_MIPSEL)
1050 lbu $t4,1024($i0) # Td4[s2>>8]
1051 $PTR_INS $i0,$s0,0,8
1052 lbu $t5,1024($i1) # Td4[s3>>8]
1053 $PTR_INS $i1,$s1,0,8
1054 lbu $t6,1024($i2) # Td4[s0>>8]
1055 $PTR_INS $i2,$s2,0,8
1056 lbu $t7,1024($i3) # Td4[s1>>8]
1057 $PTR_INS $i3,$s3,0,8
1058
1059 lbu $t8,1024($i0) # Td4[s0>>24]
1060 _xtr $i0,$s1,0
1061 lbu $t9,1024($i1) # Td4[s1>>24]
1062 _xtr $i1,$s2,0
1063 lbu $t10,1024($i2) # Td4[s2>>24]
1064 _xtr $i2,$s3,0
1065 lbu $t11,1024($i3) # Td4[s3>>24]
1066 _xtr $i3,$s0,0
1067
1068 $PTR_ADD $i0,$Tbl
1069 $PTR_ADD $i1,$Tbl
1070 $PTR_ADD $i2,$Tbl
1071 $PTR_ADD $i3,$Tbl
1072# else
1073 lbu $t4,1024($i0) # Td4[s2>>8]
1074 _xtr $i0,$s0,24
1075 lbu $t5,1024($i1) # Td4[s3>>8]
1076 _xtr $i1,$s1,24
1077 lbu $t6,1024($i2) # Td4[s0>>8]
1078 _xtr $i2,$s2,24
1079 lbu $t7,1024($i3) # Td4[s1>>8]
1080 _xtr $i3,$s3,24
1081
1082 $PTR_ADD $i0,$Tbl
1083 $PTR_ADD $i1,$Tbl
1084 $PTR_ADD $i2,$Tbl
1085 $PTR_ADD $i3,$Tbl
1086 lbu $t8,1024($i0) # Td4[s0>>24]
1087 $PTR_INS $i0,$s1,0,8
1088 lbu $t9,1024($i1) # Td4[s1>>24]
1089 $PTR_INS $i1,$s2,0,8
1090 lbu $t10,1024($i2) # Td4[s2>>24]
1091 $PTR_INS $i2,$s3,0,8
1092 lbu $t11,1024($i3) # Td4[s3>>24]
1093 $PTR_INS $i3,$s0,0,8
1094# endif
1095 _ins $t0,16
1096 _ins $t1,16
1097 _ins $t2,16
1098 _ins $t3,16
1099
1100 _ins2 $t0,$t4,8
1101 lbu $t4,1024($i0) # Td4[s1]
1102 _ins2 $t1,$t5,8
1103 lbu $t5,1024($i1) # Td4[s2]
1104 _ins2 $t2,$t6,8
1105 lbu $t6,1024($i2) # Td4[s3]
1106 _ins2 $t3,$t7,8
1107 lbu $t7,1024($i3) # Td4[s0]
1108
1109 _ins2 $t0,$t8,24
1110 lw $s0,0($key0)
1111 _ins2 $t1,$t9,24
1112 lw $s1,4($key0)
1113 _ins2 $t2,$t10,24
1114 lw $s2,8($key0)
1115 _ins2 $t3,$t11,24
1116 lw $s3,12($key0)
1117
1118 _ins2 $t0,$t4,0
1119 _ins2 $t1,$t5,0
1120 _ins2 $t2,$t6,0
1121 _ins2 $t3,$t7,0
1122#else
1123 lbu $t4,1024($i0) # Td4[s2>>8]
1124 _xtr $i0,$s0,24
1125 lbu $t5,1024($i1) # Td4[s3>>8]
1126 _xtr $i1,$s1,24
1127 lbu $t6,1024($i2) # Td4[s0>>8]
1128 _xtr $i2,$s2,24
1129 lbu $t7,1024($i3) # Td4[s1>>8]
1130 _xtr $i3,$s3,24
1131
1132 $PTR_ADD $i0,$Tbl
1133 $PTR_ADD $i1,$Tbl
1134 $PTR_ADD $i2,$Tbl
1135 $PTR_ADD $i3,$Tbl
1136 lbu $t8,1024($i0) # Td4[s0>>24]
1137 _xtr $i0,$s1,0
1138 lbu $t9,1024($i1) # Td4[s1>>24]
1139 _xtr $i1,$s2,0
1140 lbu $t10,1024($i2) # Td4[s2>>24]
1141 _xtr $i2,$s3,0
1142 lbu $t11,1024($i3) # Td4[s3>>24]
1143 _xtr $i3,$s0,0
1144
1145 $PTR_ADD $i0,$Tbl
1146 $PTR_ADD $i1,$Tbl
1147 $PTR_ADD $i2,$Tbl
1148 $PTR_ADD $i3,$Tbl
1149
1150 _ins $t0,16
1151 _ins $t1,16
1152 _ins $t2,16
1153 _ins $t3,16
1154
1155 _ins $t4,8
1156 _ins $t5,8
1157 _ins $t6,8
1158 _ins $t7,8
1159
1160 xor $t0,$t4
1161 lbu $t4,1024($i0) # Td4[s1]
1162 xor $t1,$t5
1163 lbu $t5,1024($i1) # Td4[s2]
1164 xor $t2,$t6
1165 lbu $t6,1024($i2) # Td4[s3]
1166 xor $t3,$t7
1167 lbu $t7,1024($i3) # Td4[s0]
1168
1169 _ins $t8,24
1170 lw $s0,0($key0)
1171 _ins $t9,24
1172 lw $s1,4($key0)
1173 _ins $t10,24
1174 lw $s2,8($key0)
1175 _ins $t11,24
1176 lw $s3,12($key0)
1177
1178 xor $t0,$t8
1179 xor $t1,$t9
1180 xor $t2,$t10
1181 xor $t3,$t11
1182
1183 _ins $t4,0
1184 _ins $t5,0
1185 _ins $t6,0
1186 _ins $t7,0
1187
1188 xor $t0,$t4
1189 xor $t1,$t5
1190 xor $t2,$t6
1191 xor $t3,$t7
1192#endif
1193
1194 xor $s0,$t0
1195 xor $s1,$t1
1196 xor $s2,$t2
1197 xor $s3,$t3
1198
1199 jr $ra
1200.end _mips_AES_decrypt
1201
1202.align 5
1203.globl AES_decrypt
1204.ent AES_decrypt
1205AES_decrypt:
1206 .frame $sp,$FRAMESIZE,$ra
1207 .mask $SAVED_REGS_MASK,-$SZREG
1208 .set noreorder
1209___
1210$code.=<<___ if ($flavour =~ /o32/i); # o32 PIC-ification
1211 .cpload $pf
1212___
1213$code.=<<___;
1214 $PTR_SUB $sp,$FRAMESIZE
1215 $REG_S $ra,$FRAMESIZE-1*$SZREG($sp)
1216 $REG_S $fp,$FRAMESIZE-2*$SZREG($sp)
1217 $REG_S $s11,$FRAMESIZE-3*$SZREG($sp)
1218 $REG_S $s10,$FRAMESIZE-4*$SZREG($sp)
1219 $REG_S $s9,$FRAMESIZE-5*$SZREG($sp)
1220 $REG_S $s8,$FRAMESIZE-6*$SZREG($sp)
1221 $REG_S $s7,$FRAMESIZE-7*$SZREG($sp)
1222 $REG_S $s6,$FRAMESIZE-8*$SZREG($sp)
1223 $REG_S $s5,$FRAMESIZE-9*$SZREG($sp)
1224 $REG_S $s4,$FRAMESIZE-10*$SZREG($sp)
1225___
1226$code.=<<___ if ($flavour =~ /nubi/i); # optimize non-nubi prologue
1227 $REG_S \$15,$FRAMESIZE-11*$SZREG($sp)
1228 $REG_S \$14,$FRAMESIZE-12*$SZREG($sp)
1229 $REG_S \$13,$FRAMESIZE-13*$SZREG($sp)
1230 $REG_S \$12,$FRAMESIZE-14*$SZREG($sp)
1231 $REG_S $gp,$FRAMESIZE-15*$SZREG($sp)
1232___
1233$code.=<<___ if ($flavour !~ /o32/i); # non-o32 PIC-ification
1234 .cplocal $Tbl
1235 .cpsetup $pf,$zero,AES_decrypt
1236___
1237$code.=<<___;
1238 .set reorder
1239 $PTR_LA $Tbl,AES_Td # PIC-ified 'load address'
1240
1241#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
1242 lw $s0,0($inp)
1243 lw $s1,4($inp)
1244 lw $s2,8($inp)
1245 lw $s3,12($inp)
1246#else
1247 lwl $s0,0+$MSB($inp)
1248 lwl $s1,4+$MSB($inp)
1249 lwl $s2,8+$MSB($inp)
1250 lwl $s3,12+$MSB($inp)
1251 lwr $s0,0+$LSB($inp)
1252 lwr $s1,4+$LSB($inp)
1253 lwr $s2,8+$LSB($inp)
1254 lwr $s3,12+$LSB($inp)
1255#endif
1256
1257 bal _mips_AES_decrypt
1258
1259#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
1260 sw $s0,0($out)
1261 sw $s1,4($out)
1262 sw $s2,8($out)
1263 sw $s3,12($out)
1264#else
1265 swr $s0,0+$LSB($out)
1266 swr $s1,4+$LSB($out)
1267 swr $s2,8+$LSB($out)
1268 swr $s3,12+$LSB($out)
1269 swl $s0,0+$MSB($out)
1270 swl $s1,4+$MSB($out)
1271 swl $s2,8+$MSB($out)
1272 swl $s3,12+$MSB($out)
1273#endif
1274
1275 .set noreorder
1276 $REG_L $ra,$FRAMESIZE-1*$SZREG($sp)
1277 $REG_L $fp,$FRAMESIZE-2*$SZREG($sp)
1278 $REG_L $s11,$FRAMESIZE-3*$SZREG($sp)
1279 $REG_L $s10,$FRAMESIZE-4*$SZREG($sp)
1280 $REG_L $s9,$FRAMESIZE-5*$SZREG($sp)
1281 $REG_L $s8,$FRAMESIZE-6*$SZREG($sp)
1282 $REG_L $s7,$FRAMESIZE-7*$SZREG($sp)
1283 $REG_L $s6,$FRAMESIZE-8*$SZREG($sp)
1284 $REG_L $s5,$FRAMESIZE-9*$SZREG($sp)
1285 $REG_L $s4,$FRAMESIZE-10*$SZREG($sp)
1286___
1287$code.=<<___ if ($flavour =~ /nubi/i);
1288 $REG_L \$15,$FRAMESIZE-11*$SZREG($sp)
1289 $REG_L \$14,$FRAMESIZE-12*$SZREG($sp)
1290 $REG_L \$13,$FRAMESIZE-13*$SZREG($sp)
1291 $REG_L \$12,$FRAMESIZE-14*$SZREG($sp)
1292 $REG_L $gp,$FRAMESIZE-15*$SZREG($sp)
1293___
1294$code.=<<___;
1295 jr $ra
1296 $PTR_ADD $sp,$FRAMESIZE
1297.end AES_decrypt
1298___
1299}}}
1300
1301
1302{{{
1303my $FRAMESIZE=8*$SZREG;
1304my $SAVED_REGS_MASK = ($flavour =~ /nubi/i) ? "0xc000f008" : "0xc0000000";
1305
1306my ($inp,$bits,$key,$Tbl)=($a0,$a1,$a2,$a3);
1307my ($rk0,$rk1,$rk2,$rk3,$rk4,$rk5,$rk6,$rk7)=($a4,$a5,$a6,$a7,$s0,$s1,$s2,$s3);
1308my ($i0,$i1,$i2,$i3)=($at,$t0,$t1,$t2);
1309my ($rcon,$cnt)=($gp,$fp);
1310
1311$code.=<<___;
1312.align 5
1313.ent _mips_AES_set_encrypt_key
1314_mips_AES_set_encrypt_key:
1315 .frame $sp,0,$ra
1316 .set noreorder
1317 beqz $inp,.Lekey_done
1318 li $t0,-1
1319 beqz $key,.Lekey_done
1320 $PTR_ADD $rcon,$Tbl,256
1321
1322 .set reorder
1323#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
1324 lw $rk0,0($inp) # load 128 bits
1325 lw $rk1,4($inp)
1326 lw $rk2,8($inp)
1327 lw $rk3,12($inp)
1328#else
1329 lwl $rk0,0+$MSB($inp) # load 128 bits
1330 lwl $rk1,4+$MSB($inp)
1331 lwl $rk2,8+$MSB($inp)
1332 lwl $rk3,12+$MSB($inp)
1333 lwr $rk0,0+$LSB($inp)
1334 lwr $rk1,4+$LSB($inp)
1335 lwr $rk2,8+$LSB($inp)
1336 lwr $rk3,12+$LSB($inp)
1337#endif
1338 li $at,128
1339 .set noreorder
1340 beq $bits,$at,.L128bits
1341 li $cnt,10
1342
1343 .set reorder
1344#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
1345 lw $rk4,16($inp) # load 192 bits
1346 lw $rk5,20($inp)
1347#else
1348 lwl $rk4,16+$MSB($inp) # load 192 bits
1349 lwl $rk5,20+$MSB($inp)
1350 lwr $rk4,16+$LSB($inp)
1351 lwr $rk5,20+$LSB($inp)
1352#endif
1353 li $at,192
1354 .set noreorder
1355 beq $bits,$at,.L192bits
1356 li $cnt,8
1357
1358 .set reorder
1359#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
1360 lw $rk6,24($inp) # load 256 bits
1361 lw $rk7,28($inp)
1362#else
1363 lwl $rk6,24+$MSB($inp) # load 256 bits
1364 lwl $rk7,28+$MSB($inp)
1365 lwr $rk6,24+$LSB($inp)
1366 lwr $rk7,28+$LSB($inp)
1367#endif
1368 li $at,256
1369 .set noreorder
1370 beq $bits,$at,.L256bits
1371 li $cnt,7
1372
1373 b .Lekey_done
1374 li $t0,-2
1375
1376.align 4
1377.L128bits:
1378 .set reorder
1379 srl $i0,$rk3,16
1380 srl $i1,$rk3,8
1381 and $i0,0xff
1382 and $i1,0xff
1383 and $i2,$rk3,0xff
1384 srl $i3,$rk3,24
1385 $PTR_ADD $i0,$Tbl
1386 $PTR_ADD $i1,$Tbl
1387 $PTR_ADD $i2,$Tbl
1388 $PTR_ADD $i3,$Tbl
1389 lbu $i0,0($i0)
1390 lbu $i1,0($i1)
1391 lbu $i2,0($i2)
1392 lbu $i3,0($i3)
1393
1394 sw $rk0,0($key)
1395 sw $rk1,4($key)
1396 sw $rk2,8($key)
1397 sw $rk3,12($key)
1398 subu $cnt,1
1399 $PTR_ADD $key,16
1400
1401 _bias $i0,24
1402 _bias $i1,16
1403 _bias $i2,8
1404 _bias $i3,0
1405
1406 xor $rk0,$i0
1407 lw $i0,0($rcon)
1408 xor $rk0,$i1
1409 xor $rk0,$i2
1410 xor $rk0,$i3
1411 xor $rk0,$i0
1412
1413 xor $rk1,$rk0
1414 xor $rk2,$rk1
1415 xor $rk3,$rk2
1416
1417 .set noreorder
1418 bnez $cnt,.L128bits
1419 $PTR_ADD $rcon,4
1420
1421 sw $rk0,0($key)
1422 sw $rk1,4($key)
1423 sw $rk2,8($key)
1424 li $cnt,10
1425 sw $rk3,12($key)
1426 li $t0,0
1427 sw $cnt,80($key)
1428 b .Lekey_done
1429 $PTR_SUB $key,10*16
1430
1431.align 4
1432.L192bits:
1433 .set reorder
1434 srl $i0,$rk5,16
1435 srl $i1,$rk5,8
1436 and $i0,0xff
1437 and $i1,0xff
1438 and $i2,$rk5,0xff
1439 srl $i3,$rk5,24
1440 $PTR_ADD $i0,$Tbl
1441 $PTR_ADD $i1,$Tbl
1442 $PTR_ADD $i2,$Tbl
1443 $PTR_ADD $i3,$Tbl
1444 lbu $i0,0($i0)
1445 lbu $i1,0($i1)
1446 lbu $i2,0($i2)
1447 lbu $i3,0($i3)
1448
1449 sw $rk0,0($key)
1450 sw $rk1,4($key)
1451 sw $rk2,8($key)
1452 sw $rk3,12($key)
1453 sw $rk4,16($key)
1454 sw $rk5,20($key)
1455 subu $cnt,1
1456 $PTR_ADD $key,24
1457
1458 _bias $i0,24
1459 _bias $i1,16
1460 _bias $i2,8
1461 _bias $i3,0
1462
1463 xor $rk0,$i0
1464 lw $i0,0($rcon)
1465 xor $rk0,$i1
1466 xor $rk0,$i2
1467 xor $rk0,$i3
1468 xor $rk0,$i0
1469
1470 xor $rk1,$rk0
1471 xor $rk2,$rk1
1472 xor $rk3,$rk2
1473 xor $rk4,$rk3
1474 xor $rk5,$rk4
1475
1476 .set noreorder
1477 bnez $cnt,.L192bits
1478 $PTR_ADD $rcon,4
1479
1480 sw $rk0,0($key)
1481 sw $rk1,4($key)
1482 sw $rk2,8($key)
1483 li $cnt,12
1484 sw $rk3,12($key)
1485 li $t0,0
1486 sw $cnt,48($key)
1487 b .Lekey_done
1488 $PTR_SUB $key,12*16
1489
1490.align 4
1491.L256bits:
1492 .set reorder
1493 srl $i0,$rk7,16
1494 srl $i1,$rk7,8
1495 and $i0,0xff
1496 and $i1,0xff
1497 and $i2,$rk7,0xff
1498 srl $i3,$rk7,24
1499 $PTR_ADD $i0,$Tbl
1500 $PTR_ADD $i1,$Tbl
1501 $PTR_ADD $i2,$Tbl
1502 $PTR_ADD $i3,$Tbl
1503 lbu $i0,0($i0)
1504 lbu $i1,0($i1)
1505 lbu $i2,0($i2)
1506 lbu $i3,0($i3)
1507
1508 sw $rk0,0($key)
1509 sw $rk1,4($key)
1510 sw $rk2,8($key)
1511 sw $rk3,12($key)
1512 sw $rk4,16($key)
1513 sw $rk5,20($key)
1514 sw $rk6,24($key)
1515 sw $rk7,28($key)
1516 subu $cnt,1
1517
1518 _bias $i0,24
1519 _bias $i1,16
1520 _bias $i2,8
1521 _bias $i3,0
1522
1523 xor $rk0,$i0
1524 lw $i0,0($rcon)
1525 xor $rk0,$i1
1526 xor $rk0,$i2
1527 xor $rk0,$i3
1528 xor $rk0,$i0
1529
1530 xor $rk1,$rk0
1531 xor $rk2,$rk1
1532 xor $rk3,$rk2
1533 beqz $cnt,.L256bits_done
1534
1535 srl $i0,$rk3,24
1536 srl $i1,$rk3,16
1537 srl $i2,$rk3,8
1538 and $i3,$rk3,0xff
1539 and $i1,0xff
1540 and $i2,0xff
1541 $PTR_ADD $i0,$Tbl
1542 $PTR_ADD $i1,$Tbl
1543 $PTR_ADD $i2,$Tbl
1544 $PTR_ADD $i3,$Tbl
1545 lbu $i0,0($i0)
1546 lbu $i1,0($i1)
1547 lbu $i2,0($i2)
1548 lbu $i3,0($i3)
1549 sll $i0,24
1550 sll $i1,16
1551 sll $i2,8
1552
1553 xor $rk4,$i0
1554 xor $rk4,$i1
1555 xor $rk4,$i2
1556 xor $rk4,$i3
1557
1558 xor $rk5,$rk4
1559 xor $rk6,$rk5
1560 xor $rk7,$rk6
1561
1562 $PTR_ADD $key,32
1563 .set noreorder
1564 b .L256bits
1565 $PTR_ADD $rcon,4
1566
1567.L256bits_done:
1568 sw $rk0,32($key)
1569 sw $rk1,36($key)
1570 sw $rk2,40($key)
1571 li $cnt,14
1572 sw $rk3,44($key)
1573 li $t0,0
1574 sw $cnt,48($key)
1575 $PTR_SUB $key,12*16
1576
1577.Lekey_done:
1578 jr $ra
1579 nop
1580.end _mips_AES_set_encrypt_key
1581
1582.globl AES_set_encrypt_key
1583.ent AES_set_encrypt_key
1584AES_set_encrypt_key:
1585 .frame $sp,$FRAMESIZE,$ra
1586 .mask $SAVED_REGS_MASK,-$SZREG
1587 .set noreorder
1588___
1589$code.=<<___ if ($flavour =~ /o32/i); # o32 PIC-ification
1590 .cpload $pf
1591___
1592$code.=<<___;
1593 $PTR_SUB $sp,$FRAMESIZE
1594 $REG_S $ra,$FRAMESIZE-1*$SZREG($sp)
1595 $REG_S $fp,$FRAMESIZE-2*$SZREG($sp)
1596___
1597$code.=<<___ if ($flavour =~ /nubi/i); # optimize non-nubi prologue
1598 $REG_S $s3,$FRAMESIZE-3*$SZREG($sp)
1599 $REG_S $s2,$FRAMESIZE-4*$SZREG($sp)
1600 $REG_S $s1,$FRAMESIZE-5*$SZREG($sp)
1601 $REG_S $s0,$FRAMESIZE-6*$SZREG($sp)
1602 $REG_S $gp,$FRAMESIZE-7*$SZREG($sp)
1603___
1604$code.=<<___ if ($flavour !~ /o32/i); # non-o32 PIC-ification
1605 .cplocal $Tbl
1606 .cpsetup $pf,$zero,AES_set_encrypt_key
1607___
1608$code.=<<___;
1609 .set reorder
1610 $PTR_LA $Tbl,AES_Te4 # PIC-ified 'load address'
1611
1612 bal _mips_AES_set_encrypt_key
1613
1614 .set noreorder
1615 move $a0,$t0
1616 $REG_L $ra,$FRAMESIZE-1*$SZREG($sp)
1617 $REG_L $fp,$FRAMESIZE-2*$SZREG($sp)
1618___
1619$code.=<<___ if ($flavour =~ /nubi/i);
1620 $REG_L $s3,$FRAMESIZE-11*$SZREG($sp)
1621 $REG_L $s2,$FRAMESIZE-12*$SZREG($sp)
1622 $REG_L $s1,$FRAMESIZE-13*$SZREG($sp)
1623 $REG_L $s0,$FRAMESIZE-14*$SZREG($sp)
1624 $REG_L $gp,$FRAMESIZE-15*$SZREG($sp)
1625___
1626$code.=<<___;
1627 jr $ra
1628 $PTR_ADD $sp,$FRAMESIZE
1629.end AES_set_encrypt_key
1630___
1631
1632
1633my ($head,$tail)=($inp,$bits);
1634my ($tp1,$tp2,$tp4,$tp8,$tp9,$tpb,$tpd,$tpe)=($a4,$a5,$a6,$a7,$s0,$s1,$s2,$s3);
1635my ($m,$x80808080,$x7f7f7f7f,$x1b1b1b1b)=($at,$t0,$t1,$t2);
1636$code.=<<___;
1637.align 5
1638.globl AES_set_decrypt_key
1639.ent AES_set_decrypt_key
1640AES_set_decrypt_key:
1641 .frame $sp,$FRAMESIZE,$ra
1642 .mask $SAVED_REGS_MASK,-$SZREG
1643 .set noreorder
1644___
1645$code.=<<___ if ($flavour =~ /o32/i); # o32 PIC-ification
1646 .cpload $pf
1647___
1648$code.=<<___;
1649 $PTR_SUB $sp,$FRAMESIZE
1650 $REG_S $ra,$FRAMESIZE-1*$SZREG($sp)
1651 $REG_S $fp,$FRAMESIZE-2*$SZREG($sp)
1652___
1653$code.=<<___ if ($flavour =~ /nubi/i); # optimize non-nubi prologue
1654 $REG_S $s3,$FRAMESIZE-3*$SZREG($sp)
1655 $REG_S $s2,$FRAMESIZE-4*$SZREG($sp)
1656 $REG_S $s1,$FRAMESIZE-5*$SZREG($sp)
1657 $REG_S $s0,$FRAMESIZE-6*$SZREG($sp)
1658 $REG_S $gp,$FRAMESIZE-7*$SZREG($sp)
1659___
1660$code.=<<___ if ($flavour !~ /o32/i); # non-o32 PIC-ification
1661 .cplocal $Tbl
1662 .cpsetup $pf,$zero,AES_set_decrypt_key
1663___
1664$code.=<<___;
1665 .set reorder
1666 $PTR_LA $Tbl,AES_Te4 # PIC-ified 'load address'
1667
1668 bal _mips_AES_set_encrypt_key
1669
1670 bltz $t0,.Ldkey_done
1671
1672 sll $at,$cnt,4
1673 $PTR_ADD $head,$key,0
1674 $PTR_ADD $tail,$key,$at
1675.align 4
1676.Lswap:
1677 lw $rk0,0($head)
1678 lw $rk1,4($head)
1679 lw $rk2,8($head)
1680 lw $rk3,12($head)
1681 lw $rk4,0($tail)
1682 lw $rk5,4($tail)
1683 lw $rk6,8($tail)
1684 lw $rk7,12($tail)
1685 sw $rk0,0($tail)
1686 sw $rk1,4($tail)
1687 sw $rk2,8($tail)
1688 sw $rk3,12($tail)
1689 $PTR_ADD $head,16
1690 $PTR_SUB $tail,16
1691 sw $rk4,-16($head)
1692 sw $rk5,-12($head)
1693 sw $rk6,-8($head)
1694 sw $rk7,-4($head)
1695 bne $head,$tail,.Lswap
1696
1697 lw $tp1,16($key) # modulo-scheduled
1698 lui $x80808080,0x8080
1699 subu $cnt,1
1700 or $x80808080,0x8080
1701 sll $cnt,2
1702 $PTR_ADD $key,16
1703 lui $x1b1b1b1b,0x1b1b
1704 nor $x7f7f7f7f,$zero,$x80808080
1705 or $x1b1b1b1b,0x1b1b
1706.align 4
1707.Lmix:
1708 and $m,$tp1,$x80808080
1709 and $tp2,$tp1,$x7f7f7f7f
1710 srl $tp4,$m,7
1711 addu $tp2,$tp2 # tp2<<1
1712 subu $m,$tp4
1713 and $m,$x1b1b1b1b
1714 xor $tp2,$m
1715
1716 and $m,$tp2,$x80808080
1717 and $tp4,$tp2,$x7f7f7f7f
1718 srl $tp8,$m,7
1719 addu $tp4,$tp4 # tp4<<1
1720 subu $m,$tp8
1721 and $m,$x1b1b1b1b
1722 xor $tp4,$m
1723
1724 and $m,$tp4,$x80808080
1725 and $tp8,$tp4,$x7f7f7f7f
1726 srl $tp9,$m,7
1727 addu $tp8,$tp8 # tp8<<1
1728 subu $m,$tp9
1729 and $m,$x1b1b1b1b
1730 xor $tp8,$m
1731
1732 xor $tp9,$tp8,$tp1
1733 xor $tpe,$tp8,$tp4
1734 xor $tpb,$tp9,$tp2
1735 xor $tpd,$tp9,$tp4
1736
1737#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
1738 rotr $tp1,$tpd,16
1739 xor $tpe,$tp2
1740 rotr $tp2,$tp9,8
1741 xor $tpe,$tp1
1742 rotr $tp4,$tpb,24
1743 xor $tpe,$tp2
1744 lw $tp1,4($key) # modulo-scheduled
1745 xor $tpe,$tp4
1746#else
1747 _ror $tp1,$tpd,16
1748 xor $tpe,$tp2
1749 _ror $tp2,$tpd,-16
1750 xor $tpe,$tp1
1751 _ror $tp1,$tp9,8
1752 xor $tpe,$tp2
1753 _ror $tp2,$tp9,-24
1754 xor $tpe,$tp1
1755 _ror $tp1,$tpb,24
1756 xor $tpe,$tp2
1757 _ror $tp2,$tpb,-8
1758 xor $tpe,$tp1
1759 lw $tp1,4($key) # modulo-scheduled
1760 xor $tpe,$tp2
1761#endif
1762 subu $cnt,1
1763 sw $tpe,0($key)
1764 $PTR_ADD $key,4
1765 bnez $cnt,.Lmix
1766
1767 li $t0,0
1768.Ldkey_done:
1769 .set noreorder
1770 move $a0,$t0
1771 $REG_L $ra,$FRAMESIZE-1*$SZREG($sp)
1772 $REG_L $fp,$FRAMESIZE-2*$SZREG($sp)
1773___
1774$code.=<<___ if ($flavour =~ /nubi/i);
1775 $REG_L $s3,$FRAMESIZE-11*$SZREG($sp)
1776 $REG_L $s2,$FRAMESIZE-12*$SZREG($sp)
1777 $REG_L $s1,$FRAMESIZE-13*$SZREG($sp)
1778 $REG_L $s0,$FRAMESIZE-14*$SZREG($sp)
1779 $REG_L $gp,$FRAMESIZE-15*$SZREG($sp)
1780___
1781$code.=<<___;
1782 jr $ra
1783 $PTR_ADD $sp,$FRAMESIZE
1784.end AES_set_decrypt_key
1785___
1786}}}
1787
1788######################################################################
1789# Tables are kept in endian-neutral manner
1790$code.=<<___;
1791.rdata
1792.align 10
1793AES_Te:
1794.byte 0xc6,0x63,0x63,0xa5, 0xf8,0x7c,0x7c,0x84 # Te0
1795.byte 0xee,0x77,0x77,0x99, 0xf6,0x7b,0x7b,0x8d
1796.byte 0xff,0xf2,0xf2,0x0d, 0xd6,0x6b,0x6b,0xbd
1797.byte 0xde,0x6f,0x6f,0xb1, 0x91,0xc5,0xc5,0x54
1798.byte 0x60,0x30,0x30,0x50, 0x02,0x01,0x01,0x03
1799.byte 0xce,0x67,0x67,0xa9, 0x56,0x2b,0x2b,0x7d
1800.byte 0xe7,0xfe,0xfe,0x19, 0xb5,0xd7,0xd7,0x62
1801.byte 0x4d,0xab,0xab,0xe6, 0xec,0x76,0x76,0x9a
1802.byte 0x8f,0xca,0xca,0x45, 0x1f,0x82,0x82,0x9d
1803.byte 0x89,0xc9,0xc9,0x40, 0xfa,0x7d,0x7d,0x87
1804.byte 0xef,0xfa,0xfa,0x15, 0xb2,0x59,0x59,0xeb
1805.byte 0x8e,0x47,0x47,0xc9, 0xfb,0xf0,0xf0,0x0b
1806.byte 0x41,0xad,0xad,0xec, 0xb3,0xd4,0xd4,0x67
1807.byte 0x5f,0xa2,0xa2,0xfd, 0x45,0xaf,0xaf,0xea
1808.byte 0x23,0x9c,0x9c,0xbf, 0x53,0xa4,0xa4,0xf7
1809.byte 0xe4,0x72,0x72,0x96, 0x9b,0xc0,0xc0,0x5b
1810.byte 0x75,0xb7,0xb7,0xc2, 0xe1,0xfd,0xfd,0x1c
1811.byte 0x3d,0x93,0x93,0xae, 0x4c,0x26,0x26,0x6a
1812.byte 0x6c,0x36,0x36,0x5a, 0x7e,0x3f,0x3f,0x41
1813.byte 0xf5,0xf7,0xf7,0x02, 0x83,0xcc,0xcc,0x4f
1814.byte 0x68,0x34,0x34,0x5c, 0x51,0xa5,0xa5,0xf4
1815.byte 0xd1,0xe5,0xe5,0x34, 0xf9,0xf1,0xf1,0x08
1816.byte 0xe2,0x71,0x71,0x93, 0xab,0xd8,0xd8,0x73
1817.byte 0x62,0x31,0x31,0x53, 0x2a,0x15,0x15,0x3f
1818.byte 0x08,0x04,0x04,0x0c, 0x95,0xc7,0xc7,0x52
1819.byte 0x46,0x23,0x23,0x65, 0x9d,0xc3,0xc3,0x5e
1820.byte 0x30,0x18,0x18,0x28, 0x37,0x96,0x96,0xa1
1821.byte 0x0a,0x05,0x05,0x0f, 0x2f,0x9a,0x9a,0xb5
1822.byte 0x0e,0x07,0x07,0x09, 0x24,0x12,0x12,0x36
1823.byte 0x1b,0x80,0x80,0x9b, 0xdf,0xe2,0xe2,0x3d
1824.byte 0xcd,0xeb,0xeb,0x26, 0x4e,0x27,0x27,0x69
1825.byte 0x7f,0xb2,0xb2,0xcd, 0xea,0x75,0x75,0x9f
1826.byte 0x12,0x09,0x09,0x1b, 0x1d,0x83,0x83,0x9e
1827.byte 0x58,0x2c,0x2c,0x74, 0x34,0x1a,0x1a,0x2e
1828.byte 0x36,0x1b,0x1b,0x2d, 0xdc,0x6e,0x6e,0xb2
1829.byte 0xb4,0x5a,0x5a,0xee, 0x5b,0xa0,0xa0,0xfb
1830.byte 0xa4,0x52,0x52,0xf6, 0x76,0x3b,0x3b,0x4d
1831.byte 0xb7,0xd6,0xd6,0x61, 0x7d,0xb3,0xb3,0xce
1832.byte 0x52,0x29,0x29,0x7b, 0xdd,0xe3,0xe3,0x3e
1833.byte 0x5e,0x2f,0x2f,0x71, 0x13,0x84,0x84,0x97
1834.byte 0xa6,0x53,0x53,0xf5, 0xb9,0xd1,0xd1,0x68
1835.byte 0x00,0x00,0x00,0x00, 0xc1,0xed,0xed,0x2c
1836.byte 0x40,0x20,0x20,0x60, 0xe3,0xfc,0xfc,0x1f
1837.byte 0x79,0xb1,0xb1,0xc8, 0xb6,0x5b,0x5b,0xed
1838.byte 0xd4,0x6a,0x6a,0xbe, 0x8d,0xcb,0xcb,0x46
1839.byte 0x67,0xbe,0xbe,0xd9, 0x72,0x39,0x39,0x4b
1840.byte 0x94,0x4a,0x4a,0xde, 0x98,0x4c,0x4c,0xd4
1841.byte 0xb0,0x58,0x58,0xe8, 0x85,0xcf,0xcf,0x4a
1842.byte 0xbb,0xd0,0xd0,0x6b, 0xc5,0xef,0xef,0x2a
1843.byte 0x4f,0xaa,0xaa,0xe5, 0xed,0xfb,0xfb,0x16
1844.byte 0x86,0x43,0x43,0xc5, 0x9a,0x4d,0x4d,0xd7
1845.byte 0x66,0x33,0x33,0x55, 0x11,0x85,0x85,0x94
1846.byte 0x8a,0x45,0x45,0xcf, 0xe9,0xf9,0xf9,0x10
1847.byte 0x04,0x02,0x02,0x06, 0xfe,0x7f,0x7f,0x81
1848.byte 0xa0,0x50,0x50,0xf0, 0x78,0x3c,0x3c,0x44
1849.byte 0x25,0x9f,0x9f,0xba, 0x4b,0xa8,0xa8,0xe3
1850.byte 0xa2,0x51,0x51,0xf3, 0x5d,0xa3,0xa3,0xfe
1851.byte 0x80,0x40,0x40,0xc0, 0x05,0x8f,0x8f,0x8a
1852.byte 0x3f,0x92,0x92,0xad, 0x21,0x9d,0x9d,0xbc
1853.byte 0x70,0x38,0x38,0x48, 0xf1,0xf5,0xf5,0x04
1854.byte 0x63,0xbc,0xbc,0xdf, 0x77,0xb6,0xb6,0xc1
1855.byte 0xaf,0xda,0xda,0x75, 0x42,0x21,0x21,0x63
1856.byte 0x20,0x10,0x10,0x30, 0xe5,0xff,0xff,0x1a
1857.byte 0xfd,0xf3,0xf3,0x0e, 0xbf,0xd2,0xd2,0x6d
1858.byte 0x81,0xcd,0xcd,0x4c, 0x18,0x0c,0x0c,0x14
1859.byte 0x26,0x13,0x13,0x35, 0xc3,0xec,0xec,0x2f
1860.byte 0xbe,0x5f,0x5f,0xe1, 0x35,0x97,0x97,0xa2
1861.byte 0x88,0x44,0x44,0xcc, 0x2e,0x17,0x17,0x39
1862.byte 0x93,0xc4,0xc4,0x57, 0x55,0xa7,0xa7,0xf2
1863.byte 0xfc,0x7e,0x7e,0x82, 0x7a,0x3d,0x3d,0x47
1864.byte 0xc8,0x64,0x64,0xac, 0xba,0x5d,0x5d,0xe7
1865.byte 0x32,0x19,0x19,0x2b, 0xe6,0x73,0x73,0x95
1866.byte 0xc0,0x60,0x60,0xa0, 0x19,0x81,0x81,0x98
1867.byte 0x9e,0x4f,0x4f,0xd1, 0xa3,0xdc,0xdc,0x7f
1868.byte 0x44,0x22,0x22,0x66, 0x54,0x2a,0x2a,0x7e
1869.byte 0x3b,0x90,0x90,0xab, 0x0b,0x88,0x88,0x83
1870.byte 0x8c,0x46,0x46,0xca, 0xc7,0xee,0xee,0x29
1871.byte 0x6b,0xb8,0xb8,0xd3, 0x28,0x14,0x14,0x3c
1872.byte 0xa7,0xde,0xde,0x79, 0xbc,0x5e,0x5e,0xe2
1873.byte 0x16,0x0b,0x0b,0x1d, 0xad,0xdb,0xdb,0x76
1874.byte 0xdb,0xe0,0xe0,0x3b, 0x64,0x32,0x32,0x56
1875.byte 0x74,0x3a,0x3a,0x4e, 0x14,0x0a,0x0a,0x1e
1876.byte 0x92,0x49,0x49,0xdb, 0x0c,0x06,0x06,0x0a
1877.byte 0x48,0x24,0x24,0x6c, 0xb8,0x5c,0x5c,0xe4
1878.byte 0x9f,0xc2,0xc2,0x5d, 0xbd,0xd3,0xd3,0x6e
1879.byte 0x43,0xac,0xac,0xef, 0xc4,0x62,0x62,0xa6
1880.byte 0x39,0x91,0x91,0xa8, 0x31,0x95,0x95,0xa4
1881.byte 0xd3,0xe4,0xe4,0x37, 0xf2,0x79,0x79,0x8b
1882.byte 0xd5,0xe7,0xe7,0x32, 0x8b,0xc8,0xc8,0x43
1883.byte 0x6e,0x37,0x37,0x59, 0xda,0x6d,0x6d,0xb7
1884.byte 0x01,0x8d,0x8d,0x8c, 0xb1,0xd5,0xd5,0x64
1885.byte 0x9c,0x4e,0x4e,0xd2, 0x49,0xa9,0xa9,0xe0
1886.byte 0xd8,0x6c,0x6c,0xb4, 0xac,0x56,0x56,0xfa
1887.byte 0xf3,0xf4,0xf4,0x07, 0xcf,0xea,0xea,0x25
1888.byte 0xca,0x65,0x65,0xaf, 0xf4,0x7a,0x7a,0x8e
1889.byte 0x47,0xae,0xae,0xe9, 0x10,0x08,0x08,0x18
1890.byte 0x6f,0xba,0xba,0xd5, 0xf0,0x78,0x78,0x88
1891.byte 0x4a,0x25,0x25,0x6f, 0x5c,0x2e,0x2e,0x72
1892.byte 0x38,0x1c,0x1c,0x24, 0x57,0xa6,0xa6,0xf1
1893.byte 0x73,0xb4,0xb4,0xc7, 0x97,0xc6,0xc6,0x51
1894.byte 0xcb,0xe8,0xe8,0x23, 0xa1,0xdd,0xdd,0x7c
1895.byte 0xe8,0x74,0x74,0x9c, 0x3e,0x1f,0x1f,0x21
1896.byte 0x96,0x4b,0x4b,0xdd, 0x61,0xbd,0xbd,0xdc
1897.byte 0x0d,0x8b,0x8b,0x86, 0x0f,0x8a,0x8a,0x85
1898.byte 0xe0,0x70,0x70,0x90, 0x7c,0x3e,0x3e,0x42
1899.byte 0x71,0xb5,0xb5,0xc4, 0xcc,0x66,0x66,0xaa
1900.byte 0x90,0x48,0x48,0xd8, 0x06,0x03,0x03,0x05
1901.byte 0xf7,0xf6,0xf6,0x01, 0x1c,0x0e,0x0e,0x12
1902.byte 0xc2,0x61,0x61,0xa3, 0x6a,0x35,0x35,0x5f
1903.byte 0xae,0x57,0x57,0xf9, 0x69,0xb9,0xb9,0xd0
1904.byte 0x17,0x86,0x86,0x91, 0x99,0xc1,0xc1,0x58
1905.byte 0x3a,0x1d,0x1d,0x27, 0x27,0x9e,0x9e,0xb9
1906.byte 0xd9,0xe1,0xe1,0x38, 0xeb,0xf8,0xf8,0x13
1907.byte 0x2b,0x98,0x98,0xb3, 0x22,0x11,0x11,0x33
1908.byte 0xd2,0x69,0x69,0xbb, 0xa9,0xd9,0xd9,0x70
1909.byte 0x07,0x8e,0x8e,0x89, 0x33,0x94,0x94,0xa7
1910.byte 0x2d,0x9b,0x9b,0xb6, 0x3c,0x1e,0x1e,0x22
1911.byte 0x15,0x87,0x87,0x92, 0xc9,0xe9,0xe9,0x20
1912.byte 0x87,0xce,0xce,0x49, 0xaa,0x55,0x55,0xff
1913.byte 0x50,0x28,0x28,0x78, 0xa5,0xdf,0xdf,0x7a
1914.byte 0x03,0x8c,0x8c,0x8f, 0x59,0xa1,0xa1,0xf8
1915.byte 0x09,0x89,0x89,0x80, 0x1a,0x0d,0x0d,0x17
1916.byte 0x65,0xbf,0xbf,0xda, 0xd7,0xe6,0xe6,0x31
1917.byte 0x84,0x42,0x42,0xc6, 0xd0,0x68,0x68,0xb8
1918.byte 0x82,0x41,0x41,0xc3, 0x29,0x99,0x99,0xb0
1919.byte 0x5a,0x2d,0x2d,0x77, 0x1e,0x0f,0x0f,0x11
1920.byte 0x7b,0xb0,0xb0,0xcb, 0xa8,0x54,0x54,0xfc
1921.byte 0x6d,0xbb,0xbb,0xd6, 0x2c,0x16,0x16,0x3a
1922
1923AES_Td:
1924.byte 0x51,0xf4,0xa7,0x50, 0x7e,0x41,0x65,0x53 # Td0
1925.byte 0x1a,0x17,0xa4,0xc3, 0x3a,0x27,0x5e,0x96
1926.byte 0x3b,0xab,0x6b,0xcb, 0x1f,0x9d,0x45,0xf1
1927.byte 0xac,0xfa,0x58,0xab, 0x4b,0xe3,0x03,0x93
1928.byte 0x20,0x30,0xfa,0x55, 0xad,0x76,0x6d,0xf6
1929.byte 0x88,0xcc,0x76,0x91, 0xf5,0x02,0x4c,0x25
1930.byte 0x4f,0xe5,0xd7,0xfc, 0xc5,0x2a,0xcb,0xd7
1931.byte 0x26,0x35,0x44,0x80, 0xb5,0x62,0xa3,0x8f
1932.byte 0xde,0xb1,0x5a,0x49, 0x25,0xba,0x1b,0x67
1933.byte 0x45,0xea,0x0e,0x98, 0x5d,0xfe,0xc0,0xe1
1934.byte 0xc3,0x2f,0x75,0x02, 0x81,0x4c,0xf0,0x12
1935.byte 0x8d,0x46,0x97,0xa3, 0x6b,0xd3,0xf9,0xc6
1936.byte 0x03,0x8f,0x5f,0xe7, 0x15,0x92,0x9c,0x95
1937.byte 0xbf,0x6d,0x7a,0xeb, 0x95,0x52,0x59,0xda
1938.byte 0xd4,0xbe,0x83,0x2d, 0x58,0x74,0x21,0xd3
1939.byte 0x49,0xe0,0x69,0x29, 0x8e,0xc9,0xc8,0x44
1940.byte 0x75,0xc2,0x89,0x6a, 0xf4,0x8e,0x79,0x78
1941.byte 0x99,0x58,0x3e,0x6b, 0x27,0xb9,0x71,0xdd
1942.byte 0xbe,0xe1,0x4f,0xb6, 0xf0,0x88,0xad,0x17
1943.byte 0xc9,0x20,0xac,0x66, 0x7d,0xce,0x3a,0xb4
1944.byte 0x63,0xdf,0x4a,0x18, 0xe5,0x1a,0x31,0x82
1945.byte 0x97,0x51,0x33,0x60, 0x62,0x53,0x7f,0x45
1946.byte 0xb1,0x64,0x77,0xe0, 0xbb,0x6b,0xae,0x84
1947.byte 0xfe,0x81,0xa0,0x1c, 0xf9,0x08,0x2b,0x94
1948.byte 0x70,0x48,0x68,0x58, 0x8f,0x45,0xfd,0x19
1949.byte 0x94,0xde,0x6c,0x87, 0x52,0x7b,0xf8,0xb7
1950.byte 0xab,0x73,0xd3,0x23, 0x72,0x4b,0x02,0xe2
1951.byte 0xe3,0x1f,0x8f,0x57, 0x66,0x55,0xab,0x2a
1952.byte 0xb2,0xeb,0x28,0x07, 0x2f,0xb5,0xc2,0x03
1953.byte 0x86,0xc5,0x7b,0x9a, 0xd3,0x37,0x08,0xa5
1954.byte 0x30,0x28,0x87,0xf2, 0x23,0xbf,0xa5,0xb2
1955.byte 0x02,0x03,0x6a,0xba, 0xed,0x16,0x82,0x5c
1956.byte 0x8a,0xcf,0x1c,0x2b, 0xa7,0x79,0xb4,0x92
1957.byte 0xf3,0x07,0xf2,0xf0, 0x4e,0x69,0xe2,0xa1
1958.byte 0x65,0xda,0xf4,0xcd, 0x06,0x05,0xbe,0xd5
1959.byte 0xd1,0x34,0x62,0x1f, 0xc4,0xa6,0xfe,0x8a
1960.byte 0x34,0x2e,0x53,0x9d, 0xa2,0xf3,0x55,0xa0
1961.byte 0x05,0x8a,0xe1,0x32, 0xa4,0xf6,0xeb,0x75
1962.byte 0x0b,0x83,0xec,0x39, 0x40,0x60,0xef,0xaa
1963.byte 0x5e,0x71,0x9f,0x06, 0xbd,0x6e,0x10,0x51
1964.byte 0x3e,0x21,0x8a,0xf9, 0x96,0xdd,0x06,0x3d
1965.byte 0xdd,0x3e,0x05,0xae, 0x4d,0xe6,0xbd,0x46
1966.byte 0x91,0x54,0x8d,0xb5, 0x71,0xc4,0x5d,0x05
1967.byte 0x04,0x06,0xd4,0x6f, 0x60,0x50,0x15,0xff
1968.byte 0x19,0x98,0xfb,0x24, 0xd6,0xbd,0xe9,0x97
1969.byte 0x89,0x40,0x43,0xcc, 0x67,0xd9,0x9e,0x77
1970.byte 0xb0,0xe8,0x42,0xbd, 0x07,0x89,0x8b,0x88
1971.byte 0xe7,0x19,0x5b,0x38, 0x79,0xc8,0xee,0xdb
1972.byte 0xa1,0x7c,0x0a,0x47, 0x7c,0x42,0x0f,0xe9
1973.byte 0xf8,0x84,0x1e,0xc9, 0x00,0x00,0x00,0x00
1974.byte 0x09,0x80,0x86,0x83, 0x32,0x2b,0xed,0x48
1975.byte 0x1e,0x11,0x70,0xac, 0x6c,0x5a,0x72,0x4e
1976.byte 0xfd,0x0e,0xff,0xfb, 0x0f,0x85,0x38,0x56
1977.byte 0x3d,0xae,0xd5,0x1e, 0x36,0x2d,0x39,0x27
1978.byte 0x0a,0x0f,0xd9,0x64, 0x68,0x5c,0xa6,0x21
1979.byte 0x9b,0x5b,0x54,0xd1, 0x24,0x36,0x2e,0x3a
1980.byte 0x0c,0x0a,0x67,0xb1, 0x93,0x57,0xe7,0x0f
1981.byte 0xb4,0xee,0x96,0xd2, 0x1b,0x9b,0x91,0x9e
1982.byte 0x80,0xc0,0xc5,0x4f, 0x61,0xdc,0x20,0xa2
1983.byte 0x5a,0x77,0x4b,0x69, 0x1c,0x12,0x1a,0x16
1984.byte 0xe2,0x93,0xba,0x0a, 0xc0,0xa0,0x2a,0xe5
1985.byte 0x3c,0x22,0xe0,0x43, 0x12,0x1b,0x17,0x1d
1986.byte 0x0e,0x09,0x0d,0x0b, 0xf2,0x8b,0xc7,0xad
1987.byte 0x2d,0xb6,0xa8,0xb9, 0x14,0x1e,0xa9,0xc8
1988.byte 0x57,0xf1,0x19,0x85, 0xaf,0x75,0x07,0x4c
1989.byte 0xee,0x99,0xdd,0xbb, 0xa3,0x7f,0x60,0xfd
1990.byte 0xf7,0x01,0x26,0x9f, 0x5c,0x72,0xf5,0xbc
1991.byte 0x44,0x66,0x3b,0xc5, 0x5b,0xfb,0x7e,0x34
1992.byte 0x8b,0x43,0x29,0x76, 0xcb,0x23,0xc6,0xdc
1993.byte 0xb6,0xed,0xfc,0x68, 0xb8,0xe4,0xf1,0x63
1994.byte 0xd7,0x31,0xdc,0xca, 0x42,0x63,0x85,0x10
1995.byte 0x13,0x97,0x22,0x40, 0x84,0xc6,0x11,0x20
1996.byte 0x85,0x4a,0x24,0x7d, 0xd2,0xbb,0x3d,0xf8
1997.byte 0xae,0xf9,0x32,0x11, 0xc7,0x29,0xa1,0x6d
1998.byte 0x1d,0x9e,0x2f,0x4b, 0xdc,0xb2,0x30,0xf3
1999.byte 0x0d,0x86,0x52,0xec, 0x77,0xc1,0xe3,0xd0
2000.byte 0x2b,0xb3,0x16,0x6c, 0xa9,0x70,0xb9,0x99
2001.byte 0x11,0x94,0x48,0xfa, 0x47,0xe9,0x64,0x22
2002.byte 0xa8,0xfc,0x8c,0xc4, 0xa0,0xf0,0x3f,0x1a
2003.byte 0x56,0x7d,0x2c,0xd8, 0x22,0x33,0x90,0xef
2004.byte 0x87,0x49,0x4e,0xc7, 0xd9,0x38,0xd1,0xc1
2005.byte 0x8c,0xca,0xa2,0xfe, 0x98,0xd4,0x0b,0x36
2006.byte 0xa6,0xf5,0x81,0xcf, 0xa5,0x7a,0xde,0x28
2007.byte 0xda,0xb7,0x8e,0x26, 0x3f,0xad,0xbf,0xa4
2008.byte 0x2c,0x3a,0x9d,0xe4, 0x50,0x78,0x92,0x0d
2009.byte 0x6a,0x5f,0xcc,0x9b, 0x54,0x7e,0x46,0x62
2010.byte 0xf6,0x8d,0x13,0xc2, 0x90,0xd8,0xb8,0xe8
2011.byte 0x2e,0x39,0xf7,0x5e, 0x82,0xc3,0xaf,0xf5
2012.byte 0x9f,0x5d,0x80,0xbe, 0x69,0xd0,0x93,0x7c
2013.byte 0x6f,0xd5,0x2d,0xa9, 0xcf,0x25,0x12,0xb3
2014.byte 0xc8,0xac,0x99,0x3b, 0x10,0x18,0x7d,0xa7
2015.byte 0xe8,0x9c,0x63,0x6e, 0xdb,0x3b,0xbb,0x7b
2016.byte 0xcd,0x26,0x78,0x09, 0x6e,0x59,0x18,0xf4
2017.byte 0xec,0x9a,0xb7,0x01, 0x83,0x4f,0x9a,0xa8
2018.byte 0xe6,0x95,0x6e,0x65, 0xaa,0xff,0xe6,0x7e
2019.byte 0x21,0xbc,0xcf,0x08, 0xef,0x15,0xe8,0xe6
2020.byte 0xba,0xe7,0x9b,0xd9, 0x4a,0x6f,0x36,0xce
2021.byte 0xea,0x9f,0x09,0xd4, 0x29,0xb0,0x7c,0xd6
2022.byte 0x31,0xa4,0xb2,0xaf, 0x2a,0x3f,0x23,0x31
2023.byte 0xc6,0xa5,0x94,0x30, 0x35,0xa2,0x66,0xc0
2024.byte 0x74,0x4e,0xbc,0x37, 0xfc,0x82,0xca,0xa6
2025.byte 0xe0,0x90,0xd0,0xb0, 0x33,0xa7,0xd8,0x15
2026.byte 0xf1,0x04,0x98,0x4a, 0x41,0xec,0xda,0xf7
2027.byte 0x7f,0xcd,0x50,0x0e, 0x17,0x91,0xf6,0x2f
2028.byte 0x76,0x4d,0xd6,0x8d, 0x43,0xef,0xb0,0x4d
2029.byte 0xcc,0xaa,0x4d,0x54, 0xe4,0x96,0x04,0xdf
2030.byte 0x9e,0xd1,0xb5,0xe3, 0x4c,0x6a,0x88,0x1b
2031.byte 0xc1,0x2c,0x1f,0xb8, 0x46,0x65,0x51,0x7f
2032.byte 0x9d,0x5e,0xea,0x04, 0x01,0x8c,0x35,0x5d
2033.byte 0xfa,0x87,0x74,0x73, 0xfb,0x0b,0x41,0x2e
2034.byte 0xb3,0x67,0x1d,0x5a, 0x92,0xdb,0xd2,0x52
2035.byte 0xe9,0x10,0x56,0x33, 0x6d,0xd6,0x47,0x13
2036.byte 0x9a,0xd7,0x61,0x8c, 0x37,0xa1,0x0c,0x7a
2037.byte 0x59,0xf8,0x14,0x8e, 0xeb,0x13,0x3c,0x89
2038.byte 0xce,0xa9,0x27,0xee, 0xb7,0x61,0xc9,0x35
2039.byte 0xe1,0x1c,0xe5,0xed, 0x7a,0x47,0xb1,0x3c
2040.byte 0x9c,0xd2,0xdf,0x59, 0x55,0xf2,0x73,0x3f
2041.byte 0x18,0x14,0xce,0x79, 0x73,0xc7,0x37,0xbf
2042.byte 0x53,0xf7,0xcd,0xea, 0x5f,0xfd,0xaa,0x5b
2043.byte 0xdf,0x3d,0x6f,0x14, 0x78,0x44,0xdb,0x86
2044.byte 0xca,0xaf,0xf3,0x81, 0xb9,0x68,0xc4,0x3e
2045.byte 0x38,0x24,0x34,0x2c, 0xc2,0xa3,0x40,0x5f
2046.byte 0x16,0x1d,0xc3,0x72, 0xbc,0xe2,0x25,0x0c
2047.byte 0x28,0x3c,0x49,0x8b, 0xff,0x0d,0x95,0x41
2048.byte 0x39,0xa8,0x01,0x71, 0x08,0x0c,0xb3,0xde
2049.byte 0xd8,0xb4,0xe4,0x9c, 0x64,0x56,0xc1,0x90
2050.byte 0x7b,0xcb,0x84,0x61, 0xd5,0x32,0xb6,0x70
2051.byte 0x48,0x6c,0x5c,0x74, 0xd0,0xb8,0x57,0x42
2052
2053.byte 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38 # Td4
2054.byte 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb
2055.byte 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87
2056.byte 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb
2057.byte 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d
2058.byte 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e
2059.byte 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2
2060.byte 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25
2061.byte 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16
2062.byte 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92
2063.byte 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda
2064.byte 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84
2065.byte 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a
2066.byte 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06
2067.byte 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02
2068.byte 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b
2069.byte 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea
2070.byte 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73
2071.byte 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85
2072.byte 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e
2073.byte 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89
2074.byte 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b
2075.byte 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20
2076.byte 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4
2077.byte 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31
2078.byte 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f
2079.byte 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d
2080.byte 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef
2081.byte 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0
2082.byte 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61
2083.byte 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26
2084.byte 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d
2085
2086AES_Te4:
2087.byte 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5 # Te4
2088.byte 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76
2089.byte 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0
2090.byte 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0
2091.byte 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc
2092.byte 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15
2093.byte 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a
2094.byte 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75
2095.byte 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0
2096.byte 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84
2097.byte 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b
2098.byte 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf
2099.byte 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85
2100.byte 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8
2101.byte 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5
2102.byte 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2
2103.byte 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17
2104.byte 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73
2105.byte 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88
2106.byte 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb
2107.byte 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c
2108.byte 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79
2109.byte 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9
2110.byte 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08
2111.byte 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6
2112.byte 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a
2113.byte 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e
2114.byte 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e
2115.byte 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94
2116.byte 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf
2117.byte 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68
2118.byte 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16
2119
2120.byte 0x01,0x00,0x00,0x00, 0x02,0x00,0x00,0x00 # rcon
2121.byte 0x04,0x00,0x00,0x00, 0x08,0x00,0x00,0x00
2122.byte 0x10,0x00,0x00,0x00, 0x20,0x00,0x00,0x00
2123.byte 0x40,0x00,0x00,0x00, 0x80,0x00,0x00,0x00
2124.byte 0x1B,0x00,0x00,0x00, 0x36,0x00,0x00,0x00
2125___
2126
2127
2128foreach (split("\n",$code)) {
2129 s/\`([^\`]*)\`/eval $1/ge;
2130
2131 # made-up _instructions, _xtr, _ins, _ror and _bias, cope
2132 # with byte order dependencies...
2133 if (/^\s+_/) {
2134 s/(_[a-z]+\s+)(\$[0-9]+),([^,]+)(#.*)*$/$1$2,$2,$3/;
2135
2136 s/_xtr\s+(\$[0-9]+),(\$[0-9]+),([0-9]+(\-2)*)/
2137 sprintf("srl\t$1,$2,%d",$big_endian ? eval($3)
2138 : eval("24-$3"))/e or
2139 s/_ins\s+(\$[0-9]+),(\$[0-9]+),([0-9]+)/
2140 sprintf("sll\t$1,$2,%d",$big_endian ? eval($3)
2141 : eval("24-$3"))/e or
2142 s/_ins2\s+(\$[0-9]+),(\$[0-9]+),([0-9]+)/
2143 sprintf("ins\t$1,$2,%d,8",$big_endian ? eval($3)
2144 : eval("24-$3"))/e or
2145 s/_ror\s+(\$[0-9]+),(\$[0-9]+),(\-?[0-9]+)/
2146 sprintf("srl\t$1,$2,%d",$big_endian ? eval($3)
2147 : eval("$3*-1"))/e or
2148 s/_bias\s+(\$[0-9]+),(\$[0-9]+),([0-9]+)/
2149 sprintf("sll\t$1,$2,%d",$big_endian ? eval($3)
2150 : eval("($3-16)&31"))/e;
2151
2152 s/srl\s+(\$[0-9]+),(\$[0-9]+),\-([0-9]+)/
2153 sprintf("sll\t$1,$2,$3")/e or
2154 s/srl\s+(\$[0-9]+),(\$[0-9]+),0/
2155 sprintf("and\t$1,$2,0xff")/e or
2156 s/(sll\s+\$[0-9]+,\$[0-9]+,0)/#$1/;
2157 }
2158
2159 # convert lwl/lwr and swr/swl to little-endian order
2160 if (!$big_endian && /^\s+[sl]w[lr]\s+/) {
2161 s/([sl]wl.*)([0-9]+)\((\$[0-9]+)\)/
2162 sprintf("$1%d($3)",eval("$2-$2%4+($2%4-1)&3"))/e or
2163 s/([sl]wr.*)([0-9]+)\((\$[0-9]+)\)/
2164 sprintf("$1%d($3)",eval("$2-$2%4+($2%4+1)&3"))/e;
2165 }
2166
2167 if (!$big_endian) {
2168 s/(rotr\s+\$[0-9]+,\$[0-9]+),([0-9]+)/sprintf("$1,%d",32-$2)/e;
2169 s/(ext\s+\$[0-9]+,\$[0-9]+),([0-9]+),8/sprintf("$1,%d,8",24-$2)/e;
2170 }
2171
2172 print $_,"\n";
2173}
2174
2175close STDOUT or die "error closing STDOUT: $!";
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette