2
0

aes-riscv64.pl 57 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709
  1. #! /usr/bin/env perl
  2. # Copyright 2022 The OpenSSL Project Authors. All Rights Reserved.
  3. #
  4. # Licensed under the Apache License 2.0 (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. # $output is the last argument if it looks like a file (it has an extension)
  9. # $flavour is the first argument if it doesn't look like a file
  10. $output = $#ARGV >= 0 && $ARGV[$#ARGV] =~ m|\.\w+$| ? pop : undef;
  11. $flavour = $#ARGV >= 0 && $ARGV[0] !~ m|\.| ? shift : undef;
  12. $output and open STDOUT,">$output";
  13. ################################################################################
  14. # Utility functions to help with keeping track of which registers to stack/
  15. # unstack when entering / exiting routines.
  16. ################################################################################
  17. {
  18. # Callee-saved registers
  19. my @callee_saved = map("x$_",(2,8,9,18..27));
  20. # Caller-saved registers
  21. my @caller_saved = map("x$_",(1,5..7,10..17,28..31));
  22. my @must_save;
  23. sub use_reg {
  24. my $reg = shift;
  25. if (grep(/^$reg$/, @callee_saved)) {
  26. push(@must_save, $reg);
  27. } elsif (!grep(/^$reg$/, @caller_saved)) {
  28. # Register is not usable!
  29. die("Unusable register ".$reg);
  30. }
  31. return $reg;
  32. }
  33. sub use_regs {
  34. return map(use_reg("x$_"), @_);
  35. }
  36. sub save_regs {
  37. my $ret = '';
  38. my $stack_reservation = ($#must_save + 1) * 8;
  39. my $stack_offset = $stack_reservation;
  40. if ($stack_reservation % 16) {
  41. $stack_reservation += 8;
  42. }
  43. $ret.=" addi sp,sp,-$stack_reservation\n";
  44. foreach (@must_save) {
  45. $stack_offset -= 8;
  46. $ret.=" sd $_,$stack_offset(sp)\n";
  47. }
  48. return $ret;
  49. }
  50. sub load_regs {
  51. my $ret = '';
  52. my $stack_reservation = ($#must_save + 1) * 8;
  53. my $stack_offset = $stack_reservation;
  54. if ($stack_reservation % 16) {
  55. $stack_reservation += 8;
  56. }
  57. foreach (@must_save) {
  58. $stack_offset -= 8;
  59. $ret.=" ld $_,$stack_offset(sp)\n";
  60. }
  61. $ret.=" addi sp,sp,$stack_reservation\n";
  62. return $ret;
  63. }
  64. sub clear_regs {
  65. @must_save = ();
  66. }
  67. }
  68. ################################################################################
  69. # Register assignment for AES_encrypt and AES_decrypt
  70. ################################################################################
  71. # Registers to hold AES state (called s0-s3 or y0-y3 elsewhere)
  72. my ($Q0,$Q1,$Q2,$Q3) = use_regs(6..9);
  73. # Function arguments (x10-x12 are a0-a2 in the ABI)
  74. # Input block pointer, output block pointer, key pointer
  75. my ($INP,$OUTP,$KEYP) = use_regs(10..12);
  76. # Temporaries
  77. my ($T0,$T1,$T2,$T3) = use_regs(13..16);
  78. my ($T4,$T5,$T6,$T7,$T8,$T9,$T10,$T11) = use_regs(17..24);
  79. my ($T12,$T13,$T14,$T15) = use_regs(25..28);
  80. # Register to hold table offset
  81. my ($I0) = use_regs(29);
  82. # Loop counter
  83. my ($loopcntr) = use_regs(30);
  84. # Lookup table address register
  85. my ($TBL) = use_regs(31);
  86. # Lookup table mask register
  87. my ($MSK) = use_regs(5);
  88. # Aliases for readability
  89. my $K0 = $loopcntr;
  90. my $K1 = $KEYP;
  91. ################################################################################
  92. # Table lookup utility functions for AES_encrypt and AES_decrypt
  93. ################################################################################
  94. # do_lookup([destination regs], [state regs], [temporary regs], shamt)
  95. # do_lookup loads four entries from an AES encryption/decryption table
  96. # and stores the result in the specified destination register set
  97. # Ds->[0] = Table[Qs->[0] >> shamt]
  98. # Ds->[1] = Table[Qs->[1] >> shamt]
  99. # Ds->[2] = Table[Qs->[2] >> shamt]
  100. # Ds->[3] = Table[Qs->[3] >> shamt]
  101. # Four temporary regs are used to generate these lookups. The temporary regs
  102. # can be equal to the destination regs, but only if they appear in the same
  103. # order. I.e. do_lookup([A,B,C,D],[...],[A,B,C,D],...) is OK
  104. sub do_lookup {
  105. # (destination regs, state regs, temporary regs, shift amount)
  106. my ($Ds, $Qs, $Ts, $shamt) = @_;
  107. my $ret = '';
  108. # AES encryption/decryption table entries have word-sized (4-byte) entries.
  109. # To convert the table index into a byte offset, we compute
  110. # ((Qs->[i] >> shamt) & 0xFF) << 2
  111. # However, to save work, we compute the equivalent expression
  112. # (Qs->[i] >> (shamt-2)) & 0x3FC
  113. if ($shamt < 2) {
  114. $ret .= <<___;
  115. slli $Ts->[0],$Qs->[0],$shamt+2
  116. slli $Ts->[1],$Qs->[1],$shamt+2
  117. slli $Ts->[2],$Qs->[2],$shamt+2
  118. slli $Ts->[3],$Qs->[3],$shamt+2
  119. ___
  120. } else {
  121. $ret .= <<___;
  122. srli $Ts->[0],$Qs->[0],$shamt-2
  123. srli $Ts->[1],$Qs->[1],$shamt-2
  124. srli $Ts->[2],$Qs->[2],$shamt-2
  125. srli $Ts->[3],$Qs->[3],$shamt-2
  126. ___
  127. }
  128. $ret .= <<___;
  129. andi $Ts->[0],$Ts->[0],0x3FC
  130. andi $Ts->[1],$Ts->[1],0x3FC
  131. andi $Ts->[2],$Ts->[2],0x3FC
  132. andi $Ts->[3],$Ts->[3],0x3FC
  133. # Index into table.
  134. add $I0,$TBL,$Ts->[0]
  135. lwu $Ds->[0],0($I0)
  136. add $I0,$TBL,$Ts->[1]
  137. lwu $Ds->[1],0($I0)
  138. add $I0,$TBL,$Ts->[2]
  139. lwu $Ds->[2],0($I0)
  140. add $I0,$TBL,$Ts->[3]
  141. lwu $Ds->[3],0($I0)
  142. ___
  143. return $ret;
  144. }
  145. # Identical to do_lookup(), but loads only a single byte into each destination
  146. # register (replaces lwu with lbu). Used in the final round of AES_encrypt.
  147. sub do_lookup_byte {
  148. my $ret = do_lookup(@_);
  149. $ret =~ s/lwu/lbu/g;
  150. return $ret;
  151. }
  152. # do_lookup_Td4([destination regs], [state regs], [temporary regs])
  153. # Used in final phase of AES_decrypt
  154. # Ds->[0] = Table[(Qs->[0]) &0xFF]
  155. # Ds->[1] = Table[(Qs->[1] >> 8 )&0xFF]
  156. # Ds->[2] = Table[(Qs->[2] >> 16)&0xFF]
  157. # Ds->[3] = Table[(Qs->[3] >> 24)&0xFF]
  158. # Four temporary regs are used to generate these lookups. The temporary regs
  159. # can be equal to the destination regs, but only if they appear in the same
  160. # order. I.e. do_lookup([A,B,C,D],[...],[A,B,C,D],...) is OK
  161. sub do_lookup_Td4 {
  162. my ($Ds, $Qs, $Ts) = @_;
  163. my $ret = '';
  164. $ret .= <<___;
  165. srli $Ts->[1],$Qs->[1],8
  166. srli $Ts->[2],$Qs->[2],16
  167. srli $Ts->[3],$Qs->[3],24
  168. andi $Ts->[0],$Qs->[0],0xFF
  169. andi $Ts->[1],$Ts->[1],0xFF
  170. andi $Ts->[2],$Ts->[2],0xFF
  171. andi $Ts->[3],$Ts->[3],0xFF
  172. add $I0,$TBL,$Ts->[0]
  173. lbu $Ds->[0],0($I0)
  174. add $I0,$TBL,$Ts->[1]
  175. lbu $Ds->[1],0($I0)
  176. add $I0,$TBL,$Ts->[2]
  177. lbu $Ds->[2],0($I0)
  178. add $I0,$TBL,$Ts->[3]
  179. lbu $Ds->[3],0($I0)
  180. ___
  181. return $ret;
  182. }
  183. ################################################################################
  184. # void AES_encrypt(const unsigned char *in, unsigned char *out,
  185. # const AES_KEY *key);
  186. ################################################################################
  187. my $code .= <<___;
  188. .text
  189. .balign 16
  190. .globl AES_encrypt
  191. .type AES_encrypt,\@function
  192. AES_encrypt:
  193. ___
  194. $code .= save_regs();
  195. $code .= <<___;
  196. # Load input to block cipher
  197. ld $Q0,0($INP)
  198. ld $Q2,8($INP)
  199. # Load key
  200. ld $T0,0($KEYP)
  201. ld $T2,8($KEYP)
  202. # Load number of rounds
  203. lwu $loopcntr,240($KEYP)
  204. # Load address of substitution table and wrap-around mask
  205. la $TBL,AES_Te0
  206. li $MSK,~0xFFF
  207. # y = n xor k, stored in Q0-Q3
  208. xor $Q0,$Q0,$T0
  209. xor $Q2,$Q2,$T2
  210. srli $Q1,$Q0,32
  211. srli $Q3,$Q2,32
  212. # The main loop only executes the first N-1 rounds.
  213. add $loopcntr,$loopcntr,-1
  214. # Do Nr - 1 rounds (final round is special)
  215. 1:
  216. ___
  217. # Lookup in table Te0
  218. $code .= do_lookup(
  219. [$T4,$T5,$T6,$T7], # Destination registers
  220. [$Q0,$Q1,$Q2,$Q3], # State registers
  221. [$T0,$T1,$T2,$T3], # Temporaries
  222. 0 # Shift amount
  223. );
  224. $code .= <<___;
  225. add $TBL,$TBL,1024
  226. ___
  227. # Lookup in table Te1
  228. $code .= do_lookup(
  229. [$T8,$T9,$T10,$T11],
  230. [$Q1,$Q2,$Q3,$Q0],
  231. [$T0,$T1,$T2,$T3],
  232. 8
  233. );
  234. $code .= <<___;
  235. add $TBL,$TBL,1024
  236. ___
  237. # Lookup in table Te2
  238. $code .= do_lookup(
  239. [$T12,$T13,$T14,$T15],
  240. [$Q2,$Q3,$Q0,$Q1],
  241. [$T0,$T1,$T2,$T3],
  242. 16
  243. );
  244. $code .= <<___;
  245. add $TBL,$TBL,1024
  246. ___
  247. # Lookup in table Te3
  248. $code .= do_lookup(
  249. [$T0,$T1,$T2,$T3],
  250. [$Q3,$Q0,$Q1,$Q2],
  251. [$T0,$T1,$T2,$T3],
  252. 24
  253. );
  254. $code .= <<___;
  255. # Combine table lookups
  256. xor $T4,$T4,$T8
  257. xor $T5,$T5,$T9
  258. xor $T6,$T6,$T10
  259. xor $T7,$T7,$T11
  260. xor $T4,$T4,$T12
  261. xor $T5,$T5,$T13
  262. xor $T6,$T6,$T14
  263. xor $T7,$T7,$T15
  264. xor $T0,$T0,$T4
  265. xor $T1,$T1,$T5
  266. xor $T2,$T2,$T6
  267. xor $T3,$T3,$T7
  268. # Update key ptr to point to next key in schedule
  269. add $KEYP,$KEYP,16
  270. # Grab next key in schedule
  271. ld $T4,0($KEYP)
  272. ld $T6,8($KEYP)
  273. # Round TBL back to 4k boundary
  274. and $TBL,$TBL,$MSK
  275. add $loopcntr,$loopcntr,-1
  276. xor $Q0,$T0,$T4
  277. xor $Q2,$T2,$T6
  278. srli $T5,$T4,32
  279. xor $Q1,$T1,$T5
  280. srli $T7,$T6,32
  281. xor $Q3,$T3,$T7
  282. bgtz $loopcntr,1b
  283. #================================FINAL ROUND====================================
  284. # In the final round, all lookup table accesses would appear as follows:
  285. #
  286. # ... compute index I0
  287. # add I0,TBL,T0
  288. # lbu T0,1(I0)
  289. #
  290. # Instead of indexing with a 1 offset, we can add 1 to the TBL pointer, and use
  291. # a 0 offset when indexing in the following code. This enables some instruction
  292. # fusion opportunities.
  293. add $TBL,$TBL,1
  294. ld $K0,16($KEYP)
  295. ld $K1,24($KEYP)
  296. ___
  297. $code .= do_lookup_byte(
  298. [$T4,$T5,$T6,$T7],
  299. [$Q0,$Q1,$Q2,$Q3],
  300. [$T0,$T1,$T2,$T3],
  301. 0
  302. );
  303. $code .= do_lookup_byte(
  304. [$T8,$T9,$T10,$T11],
  305. [$Q1,$Q2,$Q3,$Q0],
  306. [$T0,$T1,$T2,$T3],
  307. 8
  308. );
  309. $code .= do_lookup_byte(
  310. [$T12,$T13,$T14,$T15],
  311. [$Q2,$Q3,$Q0,$Q1],
  312. [$T0,$T1,$T2,$T3],
  313. 16
  314. );
  315. $code .= do_lookup_byte(
  316. [$T0,$T1,$T2,$T3],
  317. [$Q3,$Q0,$Q1,$Q2],
  318. [$T0,$T1,$T2,$T3],
  319. 24
  320. );
  321. $code .= <<___;
  322. # Combine table lookups into T0 and T2
  323. slli $T5,$T5,32
  324. slli $T7,$T7,32
  325. slli $T8,$T8,8
  326. slli $T9,$T9,8+32
  327. slli $T10,$T10,8
  328. slli $T11,$T11,8+32
  329. slli $T12,$T12,16
  330. slli $T13,$T13,16+32
  331. slli $T14,$T14,16
  332. slli $T15,$T15,16+32
  333. slli $T0,$T0,24
  334. slli $T1,$T1,24+32
  335. slli $T2,$T2,24
  336. slli $T3,$T3,24+32
  337. xor $T4,$T4,$T0
  338. xor $T5,$T5,$T1
  339. xor $T6,$T6,$T2
  340. xor $T7,$T7,$T3
  341. xor $T8,$T8,$T12
  342. xor $T9,$T9,$T13
  343. xor $T10,$T10,$T14
  344. xor $T11,$T11,$T15
  345. xor $T0,$T4,$T8
  346. xor $T1,$T5,$T9
  347. xor $T2,$T6,$T10
  348. xor $T3,$T7,$T11
  349. xor $T0,$T0,$T1
  350. # T0 = [T1 T13 T9 T5 T0 T12 T8 T4]
  351. xor $T0,$T0,$K0 # XOR in key
  352. xor $T2,$T2,$T3
  353. # T2 = [T3 T15 T11 T7 T2 T14 T10 T6]
  354. xor $T2,$T2,$K1 # XOR in key
  355. sd $T0,0($OUTP)
  356. sd $T2,8($OUTP)
  357. # Pop registers and return
  358. 2:
  359. ___
  360. $code .= load_regs();
  361. $code .= <<___;
  362. ret
  363. ___
  364. ################################################################################
  365. # void AES_decrypt(const unsigned char *in, unsigned char *out,
  366. # const AES_KEY *key);
  367. ################################################################################
  368. $code .= <<___;
  369. .text
  370. .balign 16
  371. .globl AES_decrypt
  372. .type AES_decrypt,\@function
  373. AES_decrypt:
  374. ___
  375. $code .= save_regs();
  376. $code .= <<___;
  377. # Load input to block cipher
  378. ld $Q0,0($INP)
  379. ld $Q2,8($INP)
  380. # Load key
  381. # Note that key is assumed in BE byte order
  382. # (This routine was written against a key scheduling implementation that
  383. # placed keys in BE byte order.)
  384. ld $T0,0($KEYP)
  385. ld $T2,8($KEYP)
  386. # Load number of rounds
  387. lwu $loopcntr,240($KEYP)
  388. # Load address of substitution table and wrap-around mask
  389. la $TBL,AES_Td0
  390. li $MSK,~0xFFF
  391. xor $Q0,$Q0,$T0
  392. xor $Q2,$Q2,$T2
  393. srli $Q1,$Q0,32
  394. srli $Q3,$Q2,32
  395. # The main loop only executes the first N-1 rounds.
  396. add $loopcntr,$loopcntr,-1
  397. # Do Nr - 1 rounds (final round is special)
  398. 1:
  399. ___
  400. # Lookup in Td0
  401. $code .= do_lookup(
  402. [$T4,$T5,$T6,$T7], # Destination registers
  403. [$Q0,$Q1,$Q2,$Q3], # State registers
  404. [$T0,$T1,$T2,$T3], # Temporaries
  405. 0 # Shift amount
  406. );
  407. $code .= <<___;
  408. add $TBL,$TBL,1024
  409. ___
  410. # Lookup in Td1
  411. $code .= do_lookup(
  412. [$T8,$T9,$T10,$T11],
  413. [$Q3,$Q0,$Q1,$Q2],
  414. [$T0,$T1,$T2,$T3],
  415. 8
  416. );
  417. $code .= <<___;
  418. add $TBL,$TBL,1024
  419. ___
  420. # Lookup in Td2
  421. $code .= do_lookup(
  422. [$T12,$T13,$T14,$T15],
  423. [$Q2,$Q3,$Q0,$Q1],
  424. [$T0,$T1,$T2,$T3],
  425. 16
  426. );
  427. $code .= <<___;
  428. add $TBL,$TBL,1024
  429. ___
  430. # Lookup in Td3
  431. $code .= do_lookup(
  432. [$T0,$T1,$T2,$T3],
  433. [$Q1,$Q2,$Q3,$Q0],
  434. [$T0,$T1,$T2,$T3],
  435. 24
  436. );
  437. $code .= <<___;
  438. xor $T4,$T4,$T8
  439. xor $T5,$T5,$T9
  440. xor $T6,$T6,$T10
  441. xor $T7,$T7,$T11
  442. xor $T4,$T4,$T12
  443. xor $T5,$T5,$T13
  444. xor $T6,$T6,$T14
  445. xor $T7,$T7,$T15
  446. xor $T0,$T0,$T4
  447. xor $T1,$T1,$T5
  448. xor $T2,$T2,$T6
  449. xor $T3,$T3,$T7
  450. # Update key ptr to point to next key in schedule
  451. add $KEYP,$KEYP,16
  452. # Grab next key in schedule
  453. ld $T4,0($KEYP)
  454. ld $T6,8($KEYP)
  455. # Round TBL back to 4k boundary
  456. and $TBL,$TBL,$MSK
  457. add $loopcntr,$loopcntr,-1
  458. xor $Q0,$T0,$T4
  459. xor $Q2,$T2,$T6
  460. srli $T5,$T4,32
  461. xor $Q1,$T1,$T5
  462. srli $T7,$T6,32
  463. xor $Q3,$T3,$T7
  464. bgtz $loopcntr,1b
  465. #================================FINAL ROUND====================================
  466. la $TBL,AES_Td4
  467. # K0,K1 are aliases for loopcntr,KEYP
  468. # As these registers will no longer be used after these loads, reuse them
  469. # to store the final key in the schedule.
  470. ld $K0,16($KEYP)
  471. ld $K1,24($KEYP)
  472. ___
  473. $code .= do_lookup_Td4(
  474. [$T4,$T5,$T6,$T7],
  475. [$Q0,$Q3,$Q2,$Q1],
  476. [$T0,$T1,$T2,$T3]
  477. );
  478. $code .= do_lookup_Td4(
  479. [$T8,$T9,$T10,$T11],
  480. [$Q1,$Q0,$Q3,$Q2],
  481. [$T0,$T1,$T2,$T3]
  482. );
  483. $code .= do_lookup_Td4(
  484. [$T12,$T13,$T14,$T15],
  485. [$Q2,$Q1,$Q0,$Q3],
  486. [$T0,$T1,$T2,$T3]
  487. );
  488. $code .= do_lookup_Td4(
  489. [$T0,$T1,$T2,$T3],
  490. [$Q3,$Q2,$Q1,$Q0],
  491. [$T0,$T1,$T2,$T3]
  492. );
  493. $code .= <<___;
  494. # T0-T15 now contain the decrypted block, minus xoring with the final round
  495. # key. We pack T0-T15 into the two 64-bit registers T0 and T4, then xor
  496. # in the key and store.
  497. slli $T5,$T5,8
  498. slli $T6,$T6,16
  499. slli $T7,$T7,24
  500. slli $T8,$T8,32
  501. slli $T9,$T9,8+32
  502. slli $T10,$T10,16+32
  503. slli $T11,$T11,32+24
  504. slli $T13,$T13,8
  505. slli $T14,$T14,16
  506. slli $T15,$T15,24
  507. slli $T0,$T0,32
  508. slli $T1,$T1,8+32
  509. slli $T2,$T2,16+32
  510. slli $T3,$T3,24+32
  511. xor $T4,$T4,$T5
  512. xor $T6,$T6,$T7
  513. xor $T8,$T8,$T9
  514. xor $T10,$T10,$T11
  515. xor $T12,$T12,$T13
  516. xor $T14,$T14,$T15
  517. xor $T0,$T0,$T1
  518. xor $T2,$T2,$T3
  519. xor $T4,$T4,$T6
  520. xor $T8,$T8,$T10
  521. xor $T12,$T12,$T14
  522. xor $T0,$T0,$T2
  523. xor $T4,$T4,$T8
  524. # T4 = [T11 T10 T9 T8 T7 T6 T5 T4]
  525. xor $T4,$T4,$K0 # xor in key
  526. xor $T0,$T0,$T12
  527. # T0 = [T3 T2 T1 T0 T15 T14 T13 T12]
  528. xor $T0,$T0,$K1 # xor in key
  529. sd $T4,0($OUTP)
  530. sd $T0,8($OUTP)
  531. # Pop registers and return
  532. ___
  533. $code .= load_regs();
  534. $code .= <<___;
  535. ret
  536. ___
  537. clear_regs();
  538. ################################################################################
  539. # Register assignment for AES_set_encrypt_key
  540. ################################################################################
  541. # Function arguments (x10-x12 are a0-a2 in the ABI)
  542. # Pointer to user key, number of bits in key, key pointer
  543. my ($UKEY,$BITS,$KEYP) = use_regs(10..12);
  544. # Temporaries
  545. my ($T0,$T1,$T2,$T3) = use_regs(6..8,13);
  546. my ($T4,$T5,$T6,$T7,$T8,$T9,$T10,$T11) = use_regs(14..17,28..31);
  547. # Pointer into rcon table
  548. my ($RCON) = use_regs(9);
  549. # Register to hold table offset and used as a temporary
  550. my ($I0) = use_regs(18);
  551. # Loop counter
  552. my ($loopcntr) = use_regs(19);
  553. # Lookup table address register
  554. my ($TBL) = use_regs(20);
  555. # Calculates dest = [
  556. # S[(in>>shifts[3])&0xFF],
  557. # S[(in>>shifts[2])&0xFF],
  558. # S[(in>>shifts[1])&0xFF],
  559. # S[(in>>shifts[0])&0xFF]
  560. # ]
  561. # This routine spreads accesses across Te0-Te3 to help bring those tables
  562. # into cache, in anticipation of running AES_[en/de]crypt.
  563. sub do_enc_lookup {
  564. # (destination reg, input reg, shifts array, temporary regs)
  565. my ($dest, $in, $shifts, $Ts) = @_;
  566. my $ret = '';
  567. $ret .= <<___;
  568. # Round TBL back to 4k boundary
  569. srli $TBL,$TBL,12
  570. slli $TBL,$TBL,12
  571. # Offset by 1 byte, since Te0[x] = S[x].[03, 01, 01, 02]
  572. # So that, later on, a 0-offset lbu yields S[x].01 == S[x]
  573. addi $TBL,$TBL,1
  574. ___
  575. for ($i = 0; $i < 4; $i++) {
  576. if ($shifts->[$i] < 2) {
  577. $ret .= " slli $Ts->[$i],$in,2-$shifts->[$i]\n";
  578. } else {
  579. $ret .= " srli $Ts->[$i],$in,$shifts->[$i]-2\n";
  580. }
  581. }
  582. $ret .= <<___;
  583. andi $Ts->[0],$Ts->[0],0x3FC
  584. andi $Ts->[1],$Ts->[1],0x3FC
  585. andi $Ts->[2],$Ts->[2],0x3FC
  586. andi $Ts->[3],$Ts->[3],0x3FC
  587. # Index into tables Te0-Te3 (spread access across tables to help bring
  588. # them into cache for later)
  589. add $I0,$TBL,$Ts->[0]
  590. lbu $Ts->[0],0($I0)
  591. add $TBL,$TBL,1025 # yes, 1025
  592. add $I0,$TBL,$Ts->[1]
  593. lbu $Ts->[1],0($I0)
  594. add $TBL,$TBL,1025
  595. add $I0,$TBL,$Ts->[2]
  596. lbu $Ts->[2],0($I0)
  597. add $TBL,$TBL,1022
  598. add $I0,$TBL,$Ts->[3]
  599. lbu $Ts->[3],0($I0)
  600. slli $Ts->[1],$Ts->[1],8
  601. slli $Ts->[2],$Ts->[2],16
  602. slli $Ts->[3],$Ts->[3],24
  603. xor $Ts->[0],$Ts->[0],$Ts->[1]
  604. xor $Ts->[2],$Ts->[2],$Ts->[3]
  605. xor $dest,$Ts->[0],$Ts->[2]
  606. ___
  607. return $ret;
  608. }
  609. ################################################################################
  610. # void AES_set_encrypt_key(const unsigned char *userKey, const int bits,
  611. # AES_KEY *key)
  612. ################################################################################
  613. $code .= <<___;
  614. .text
  615. .balign 16
  616. .globl AES_set_encrypt_key
  617. .type AES_set_encrypt_key,\@function
  618. AES_set_encrypt_key:
  619. ___
  620. $code .= save_regs();
  621. $code .= <<___;
  622. bnez $UKEY,1f # if (!userKey || !key) return -1;
  623. bnez $KEYP,1f
  624. li a0,-1
  625. ret
  626. 1:
  627. la $RCON,AES_rcon
  628. la $TBL,AES_Te0
  629. li $T8,128
  630. li $T9,192
  631. li $T10,256
  632. # Determine number of rounds from key size in bits
  633. bne $BITS,$T8,1f
  634. li $T3,10 # key->rounds = 10 if bits == 128
  635. j 3f
  636. 1:
  637. bne $BITS,$T9,2f
  638. li $T3,12 # key->rounds = 12 if bits == 192
  639. j 3f
  640. 2:
  641. li $T3,14 # key->rounds = 14 if bits == 256
  642. beq $BITS,$T10,3f
  643. li a0,-2 # If bits != 128, 192, or 256, return -2
  644. j 5f
  645. 3:
  646. ld $T0,0($UKEY)
  647. ld $T2,8($UKEY)
  648. sw $T3,240($KEYP)
  649. li $loopcntr,0 # == i*4
  650. srli $T1,$T0,32
  651. srli $T3,$T2,32
  652. sd $T0,0($KEYP)
  653. sd $T2,8($KEYP)
  654. # if bits == 128
  655. # jump into loop
  656. beq $BITS,$T8,1f
  657. ld $T4,16($UKEY)
  658. srli $T5,$T4,32
  659. sd $T4,16($KEYP)
  660. # if bits == 192
  661. # jump into loop
  662. beq $BITS,$T9,2f
  663. ld $T6,24($UKEY)
  664. srli $T7,$T6,32
  665. sd $T6,24($KEYP)
  666. # bits == 256
  667. j 3f
  668. ___
  669. $code .= <<___;
  670. 1:
  671. addi $KEYP,$KEYP,16
  672. 1:
  673. ___
  674. $code .= do_enc_lookup($T4,$T3,[8,16,24,0],[$T4,$T5,$T6,$T7]);
  675. $code .= <<___;
  676. add $T5,$RCON,$loopcntr # rcon[i] (i increments by 4 so it can double as
  677. # a word offset)
  678. lwu $T5,0($T5)
  679. addi $loopcntr,$loopcntr,4
  680. li $I0,10*4
  681. xor $T0,$T0,$T4
  682. xor $T0,$T0,$T5
  683. xor $T1,$T1,$T0
  684. xor $T2,$T2,$T1
  685. xor $T3,$T3,$T2
  686. sw $T0,0($KEYP)
  687. sw $T1,4($KEYP)
  688. sw $T2,8($KEYP)
  689. sw $T3,12($KEYP)
  690. addi $KEYP,$KEYP,16
  691. bne $loopcntr,$I0,1b
  692. j 4f
  693. ___
  694. $code .= <<___;
  695. 2:
  696. addi $KEYP,$KEYP,24
  697. 2:
  698. ___
  699. $code .= do_enc_lookup($T6,$T5,[8,16,24,0],[$T6,$T7,$T8,$T9]);
  700. $code .= <<___;
  701. add $T7,$RCON,$loopcntr # rcon[i] (i increments by 4 so it can double as
  702. # a word offset)
  703. lwu $T7,0($T7)
  704. addi $loopcntr,$loopcntr,4
  705. li $I0,8*4
  706. xor $T0,$T0,$T6
  707. xor $T0,$T0,$T7
  708. xor $T1,$T1,$T0
  709. xor $T2,$T2,$T1
  710. xor $T3,$T3,$T2
  711. sw $T0,0($KEYP)
  712. sw $T1,4($KEYP)
  713. sw $T2,8($KEYP)
  714. sw $T3,12($KEYP)
  715. beq $loopcntr,$I0,4f
  716. xor $T4,$T4,$T3
  717. xor $T5,$T5,$T4
  718. sw $T4,16($KEYP)
  719. sw $T5,20($KEYP)
  720. addi $KEYP,$KEYP,24
  721. j 2b
  722. ___
  723. $code .= <<___;
  724. 3:
  725. addi $KEYP,$KEYP,32
  726. 3:
  727. ___
  728. $code .= do_enc_lookup($T8,$T7,[8,16,24,0],[$T8,$T9,$T10,$T11]);
  729. $code .= <<___;
  730. add $T9,$RCON,$loopcntr # rcon[i] (i increments by 4 so it can double as
  731. # a word offset)
  732. lwu $T9,0($T9)
  733. addi $loopcntr,$loopcntr,4
  734. li $I0,7*4
  735. xor $T0,$T0,$T8
  736. xor $T0,$T0,$T9
  737. xor $T1,$T1,$T0
  738. xor $T2,$T2,$T1
  739. xor $T3,$T3,$T2
  740. sw $T0,0($KEYP)
  741. sw $T1,4($KEYP)
  742. sw $T2,8($KEYP)
  743. sw $T3,12($KEYP)
  744. beq $loopcntr,$I0,4f
  745. ___
  746. $code .= do_enc_lookup($T8,$T3,[0,8,16,24],[$T8,$T9,$T10,$T11]);
  747. $code .= <<___;
  748. xor $T4,$T4,$T8
  749. xor $T5,$T5,$T4
  750. xor $T6,$T6,$T5
  751. xor $T7,$T7,$T6
  752. sw $T4,16($KEYP)
  753. sw $T5,20($KEYP)
  754. sw $T6,24($KEYP)
  755. sw $T7,28($KEYP)
  756. addi $KEYP,$KEYP,32
  757. j 3b
  758. 4: # return 0
  759. li a0,0
  760. 5: # return a0
  761. ___
  762. $code .= load_regs();
  763. $code .= <<___;
  764. ret
  765. ___
  766. clear_regs();
  767. ################################################################################
  768. # Register assignment for AES_set_decrypt_key
  769. ################################################################################
  770. # Function arguments (x10-x12 are a0-a2 in the ABI)
  771. # Pointer to user key, number of bits in key, key pointer
  772. my ($UKEY,$BITS,$KEYP) = use_regs(10..12);
  773. # Temporaries
  774. my ($T0,$T1,$T2,$T3) = use_regs(6..8,9);
  775. my ($T4,$T5,$T6,$T7,$T8) = use_regs(13..17);
  776. my ($I1) = use_regs(18);
  777. # Register to hold table offset and used as a temporary
  778. my ($I0) = use_regs(19);
  779. # Loop counter
  780. my ($loopcntr) = use_regs(20);
  781. # Lookup table address register
  782. my ($TBL) = use_regs(21);
  783. # Calculates dest = [
  784. # Td0[Te1[(in >> 24) & 0xff] & 0xff] ^
  785. # Td1[Te1[(in >> 16) & 0xff] & 0xff] ^
  786. # Td2[Te1[(in >> 8) & 0xff] & 0xff] ^
  787. # Td3[Te1[(in ) & 0xff] & 0xff]
  788. # ]
  789. sub do_dec_lookup {
  790. # (destination reg, input reg, temporary regs)
  791. my ($dest, $in, $Ts) = @_;
  792. my $ret = '';
  793. $ret .= <<___;
  794. la $TBL,AES_Te2
  795. slli $Ts->[0],$in,2
  796. srli $Ts->[1],$in,8-2
  797. srli $Ts->[2],$in,16-2
  798. srli $Ts->[3],$in,24-2
  799. andi $Ts->[0],$Ts->[0],0x3FC
  800. andi $Ts->[1],$Ts->[1],0x3FC
  801. andi $Ts->[2],$Ts->[2],0x3FC
  802. andi $Ts->[3],$Ts->[3],0x3FC
  803. # Index into table Te2
  804. add $I0,$TBL,$Ts->[0]
  805. lwu $Ts->[0],0($I0)
  806. add $I0,$TBL,$Ts->[1]
  807. lwu $Ts->[1],0($I0)
  808. add $I0,$TBL,$Ts->[2]
  809. lwu $Ts->[2],0($I0)
  810. add $I0,$TBL,$Ts->[3]
  811. lwu $Ts->[3],0($I0)
  812. andi $Ts->[0],$Ts->[0],0xFF
  813. andi $Ts->[1],$Ts->[1],0xFF
  814. andi $Ts->[2],$Ts->[2],0xFF
  815. andi $Ts->[3],$Ts->[3],0xFF
  816. slli $Ts->[0],$Ts->[0],2
  817. slli $Ts->[1],$Ts->[1],2
  818. slli $Ts->[2],$Ts->[2],2
  819. slli $Ts->[3],$Ts->[3],2
  820. la $TBL,AES_Td0
  821. # Lookup in Td0-Td3
  822. add $I0,$TBL,$Ts->[0]
  823. lwu $Ts->[0],0($I0)
  824. add $TBL,$TBL,1024
  825. add $I0,$TBL,$Ts->[1]
  826. lwu $Ts->[1],0($I0)
  827. add $TBL,$TBL,1024
  828. add $I0,$TBL,$Ts->[2]
  829. lwu $Ts->[2],0($I0)
  830. add $TBL,$TBL,1024
  831. add $I0,$TBL,$Ts->[3]
  832. lwu $Ts->[3],0($I0)
  833. xor $Ts->[0],$Ts->[0],$Ts->[1]
  834. xor $Ts->[2],$Ts->[2],$Ts->[3]
  835. xor $dest,$Ts->[0],$Ts->[2]
  836. ___
  837. return $ret;
  838. }
  839. ################################################################################
  840. # void AES_set_decrypt_key(const unsigned char *userKey, const int bits,
  841. # AES_KEY *key)
  842. ################################################################################
  843. $code .= <<___;
  844. .text
  845. .balign 16
  846. .globl AES_set_decrypt_key
  847. .type AES_set_decrypt_key,\@function
  848. AES_set_decrypt_key:
  849. # Call AES_set_encrypt_key first
  850. addi sp,sp,-16
  851. sd $KEYP,0(sp) # We need to hold onto this!
  852. sd ra,8(sp)
  853. jal ra,AES_set_encrypt_key
  854. ld $KEYP,0(sp)
  855. ld ra,8(sp)
  856. addi sp,sp,16
  857. bgez a0,1f # If error, return error
  858. ret
  859. 1:
  860. ___
  861. $code .= save_regs();
  862. $code .= <<___;
  863. li $T4,0
  864. lwu $T8,240($KEYP)
  865. slli $T5,$T8,4
  866. # Invert order of round keys
  867. 1:
  868. add $I0,$KEYP,$T4
  869. ld $T0,0($I0)
  870. ld $T1,8($I0)
  871. add $I1,$KEYP,$T5
  872. ld $T2,0($I1)
  873. ld $T3,8($I1)
  874. addi $T4,$T4,16
  875. addi $T5,$T5,-16
  876. sd $T0,0($I1)
  877. sd $T1,8($I1)
  878. sd $T2,0($I0)
  879. sd $T3,8($I0)
  880. blt $T4,$T5,1b
  881. li $loopcntr,1
  882. 1:
  883. addi $KEYP,$KEYP,16
  884. lwu $T0,0($KEYP)
  885. lwu $T1,4($KEYP)
  886. lwu $T2,8($KEYP)
  887. lwu $T3,12($KEYP)
  888. ___
  889. $code .= do_dec_lookup($T0,$T0,[$T4,$T5,$T6,$T7]);
  890. $code .= do_dec_lookup($T1,$T1,[$T4,$T5,$T6,$T7]);
  891. $code .= do_dec_lookup($T2,$T2,[$T4,$T5,$T6,$T7]);
  892. $code .= do_dec_lookup($T3,$T3,[$T4,$T5,$T6,$T7]);
  893. $code .= <<___;
  894. sw $T0,0($KEYP)
  895. sw $T1,4($KEYP)
  896. sw $T2,8($KEYP)
  897. sw $T3,12($KEYP)
  898. addi $loopcntr,$loopcntr,1
  899. blt $loopcntr,$T8,1b
  900. ___
  901. $code .= load_regs();
  902. $code .= <<___;
  903. li a0,0
  904. ret
  905. ___
  906. $code .= <<___;
  907. .section .rodata
  908. .p2align 12
  909. .type AES_Te0,\@object
  910. AES_Te0:
  911. .word 0xa56363c6U, 0x847c7cf8U, 0x997777eeU, 0x8d7b7bf6U
  912. .word 0x0df2f2ffU, 0xbd6b6bd6U, 0xb16f6fdeU, 0x54c5c591U
  913. .word 0x50303060U, 0x03010102U, 0xa96767ceU, 0x7d2b2b56U
  914. .word 0x19fefee7U, 0x62d7d7b5U, 0xe6abab4dU, 0x9a7676ecU
  915. .word 0x45caca8fU, 0x9d82821fU, 0x40c9c989U, 0x877d7dfaU
  916. .word 0x15fafaefU, 0xeb5959b2U, 0xc947478eU, 0x0bf0f0fbU
  917. .word 0xecadad41U, 0x67d4d4b3U, 0xfda2a25fU, 0xeaafaf45U
  918. .word 0xbf9c9c23U, 0xf7a4a453U, 0x967272e4U, 0x5bc0c09bU
  919. .word 0xc2b7b775U, 0x1cfdfde1U, 0xae93933dU, 0x6a26264cU
  920. .word 0x5a36366cU, 0x413f3f7eU, 0x02f7f7f5U, 0x4fcccc83U
  921. .word 0x5c343468U, 0xf4a5a551U, 0x34e5e5d1U, 0x08f1f1f9U
  922. .word 0x937171e2U, 0x73d8d8abU, 0x53313162U, 0x3f15152aU
  923. .word 0x0c040408U, 0x52c7c795U, 0x65232346U, 0x5ec3c39dU
  924. .word 0x28181830U, 0xa1969637U, 0x0f05050aU, 0xb59a9a2fU
  925. .word 0x0907070eU, 0x36121224U, 0x9b80801bU, 0x3de2e2dfU
  926. .word 0x26ebebcdU, 0x6927274eU, 0xcdb2b27fU, 0x9f7575eaU
  927. .word 0x1b090912U, 0x9e83831dU, 0x742c2c58U, 0x2e1a1a34U
  928. .word 0x2d1b1b36U, 0xb26e6edcU, 0xee5a5ab4U, 0xfba0a05bU
  929. .word 0xf65252a4U, 0x4d3b3b76U, 0x61d6d6b7U, 0xceb3b37dU
  930. .word 0x7b292952U, 0x3ee3e3ddU, 0x712f2f5eU, 0x97848413U
  931. .word 0xf55353a6U, 0x68d1d1b9U, 0x00000000U, 0x2cededc1U
  932. .word 0x60202040U, 0x1ffcfce3U, 0xc8b1b179U, 0xed5b5bb6U
  933. .word 0xbe6a6ad4U, 0x46cbcb8dU, 0xd9bebe67U, 0x4b393972U
  934. .word 0xde4a4a94U, 0xd44c4c98U, 0xe85858b0U, 0x4acfcf85U
  935. .word 0x6bd0d0bbU, 0x2aefefc5U, 0xe5aaaa4fU, 0x16fbfbedU
  936. .word 0xc5434386U, 0xd74d4d9aU, 0x55333366U, 0x94858511U
  937. .word 0xcf45458aU, 0x10f9f9e9U, 0x06020204U, 0x817f7ffeU
  938. .word 0xf05050a0U, 0x443c3c78U, 0xba9f9f25U, 0xe3a8a84bU
  939. .word 0xf35151a2U, 0xfea3a35dU, 0xc0404080U, 0x8a8f8f05U
  940. .word 0xad92923fU, 0xbc9d9d21U, 0x48383870U, 0x04f5f5f1U
  941. .word 0xdfbcbc63U, 0xc1b6b677U, 0x75dadaafU, 0x63212142U
  942. .word 0x30101020U, 0x1affffe5U, 0x0ef3f3fdU, 0x6dd2d2bfU
  943. .word 0x4ccdcd81U, 0x140c0c18U, 0x35131326U, 0x2fececc3U
  944. .word 0xe15f5fbeU, 0xa2979735U, 0xcc444488U, 0x3917172eU
  945. .word 0x57c4c493U, 0xf2a7a755U, 0x827e7efcU, 0x473d3d7aU
  946. .word 0xac6464c8U, 0xe75d5dbaU, 0x2b191932U, 0x957373e6U
  947. .word 0xa06060c0U, 0x98818119U, 0xd14f4f9eU, 0x7fdcdca3U
  948. .word 0x66222244U, 0x7e2a2a54U, 0xab90903bU, 0x8388880bU
  949. .word 0xca46468cU, 0x29eeeec7U, 0xd3b8b86bU, 0x3c141428U
  950. .word 0x79dedea7U, 0xe25e5ebcU, 0x1d0b0b16U, 0x76dbdbadU
  951. .word 0x3be0e0dbU, 0x56323264U, 0x4e3a3a74U, 0x1e0a0a14U
  952. .word 0xdb494992U, 0x0a06060cU, 0x6c242448U, 0xe45c5cb8U
  953. .word 0x5dc2c29fU, 0x6ed3d3bdU, 0xefacac43U, 0xa66262c4U
  954. .word 0xa8919139U, 0xa4959531U, 0x37e4e4d3U, 0x8b7979f2U
  955. .word 0x32e7e7d5U, 0x43c8c88bU, 0x5937376eU, 0xb76d6ddaU
  956. .word 0x8c8d8d01U, 0x64d5d5b1U, 0xd24e4e9cU, 0xe0a9a949U
  957. .word 0xb46c6cd8U, 0xfa5656acU, 0x07f4f4f3U, 0x25eaeacfU
  958. .word 0xaf6565caU, 0x8e7a7af4U, 0xe9aeae47U, 0x18080810U
  959. .word 0xd5baba6fU, 0x887878f0U, 0x6f25254aU, 0x722e2e5cU
  960. .word 0x241c1c38U, 0xf1a6a657U, 0xc7b4b473U, 0x51c6c697U
  961. .word 0x23e8e8cbU, 0x7cdddda1U, 0x9c7474e8U, 0x211f1f3eU
  962. .word 0xdd4b4b96U, 0xdcbdbd61U, 0x868b8b0dU, 0x858a8a0fU
  963. .word 0x907070e0U, 0x423e3e7cU, 0xc4b5b571U, 0xaa6666ccU
  964. .word 0xd8484890U, 0x05030306U, 0x01f6f6f7U, 0x120e0e1cU
  965. .word 0xa36161c2U, 0x5f35356aU, 0xf95757aeU, 0xd0b9b969U
  966. .word 0x91868617U, 0x58c1c199U, 0x271d1d3aU, 0xb99e9e27U
  967. .word 0x38e1e1d9U, 0x13f8f8ebU, 0xb398982bU, 0x33111122U
  968. .word 0xbb6969d2U, 0x70d9d9a9U, 0x898e8e07U, 0xa7949433U
  969. .word 0xb69b9b2dU, 0x221e1e3cU, 0x92878715U, 0x20e9e9c9U
  970. .word 0x49cece87U, 0xff5555aaU, 0x78282850U, 0x7adfdfa5U
  971. .word 0x8f8c8c03U, 0xf8a1a159U, 0x80898909U, 0x170d0d1aU
  972. .word 0xdabfbf65U, 0x31e6e6d7U, 0xc6424284U, 0xb86868d0U
  973. .word 0xc3414182U, 0xb0999929U, 0x772d2d5aU, 0x110f0f1eU
  974. .word 0xcbb0b07bU, 0xfc5454a8U, 0xd6bbbb6dU, 0x3a16162cU
  975. .type AES_Te1,\@object
  976. AES_Te1:
  977. .word 0x6363c6a5U, 0x7c7cf884U, 0x7777ee99U, 0x7b7bf68dU
  978. .word 0xf2f2ff0dU, 0x6b6bd6bdU, 0x6f6fdeb1U, 0xc5c59154U
  979. .word 0x30306050U, 0x01010203U, 0x6767cea9U, 0x2b2b567dU
  980. .word 0xfefee719U, 0xd7d7b562U, 0xabab4de6U, 0x7676ec9aU
  981. .word 0xcaca8f45U, 0x82821f9dU, 0xc9c98940U, 0x7d7dfa87U
  982. .word 0xfafaef15U, 0x5959b2ebU, 0x47478ec9U, 0xf0f0fb0bU
  983. .word 0xadad41ecU, 0xd4d4b367U, 0xa2a25ffdU, 0xafaf45eaU
  984. .word 0x9c9c23bfU, 0xa4a453f7U, 0x7272e496U, 0xc0c09b5bU
  985. .word 0xb7b775c2U, 0xfdfde11cU, 0x93933daeU, 0x26264c6aU
  986. .word 0x36366c5aU, 0x3f3f7e41U, 0xf7f7f502U, 0xcccc834fU
  987. .word 0x3434685cU, 0xa5a551f4U, 0xe5e5d134U, 0xf1f1f908U
  988. .word 0x7171e293U, 0xd8d8ab73U, 0x31316253U, 0x15152a3fU
  989. .word 0x0404080cU, 0xc7c79552U, 0x23234665U, 0xc3c39d5eU
  990. .word 0x18183028U, 0x969637a1U, 0x05050a0fU, 0x9a9a2fb5U
  991. .word 0x07070e09U, 0x12122436U, 0x80801b9bU, 0xe2e2df3dU
  992. .word 0xebebcd26U, 0x27274e69U, 0xb2b27fcdU, 0x7575ea9fU
  993. .word 0x0909121bU, 0x83831d9eU, 0x2c2c5874U, 0x1a1a342eU
  994. .word 0x1b1b362dU, 0x6e6edcb2U, 0x5a5ab4eeU, 0xa0a05bfbU
  995. .word 0x5252a4f6U, 0x3b3b764dU, 0xd6d6b761U, 0xb3b37dceU
  996. .word 0x2929527bU, 0xe3e3dd3eU, 0x2f2f5e71U, 0x84841397U
  997. .word 0x5353a6f5U, 0xd1d1b968U, 0x00000000U, 0xededc12cU
  998. .word 0x20204060U, 0xfcfce31fU, 0xb1b179c8U, 0x5b5bb6edU
  999. .word 0x6a6ad4beU, 0xcbcb8d46U, 0xbebe67d9U, 0x3939724bU
  1000. .word 0x4a4a94deU, 0x4c4c98d4U, 0x5858b0e8U, 0xcfcf854aU
  1001. .word 0xd0d0bb6bU, 0xefefc52aU, 0xaaaa4fe5U, 0xfbfbed16U
  1002. .word 0x434386c5U, 0x4d4d9ad7U, 0x33336655U, 0x85851194U
  1003. .word 0x45458acfU, 0xf9f9e910U, 0x02020406U, 0x7f7ffe81U
  1004. .word 0x5050a0f0U, 0x3c3c7844U, 0x9f9f25baU, 0xa8a84be3U
  1005. .word 0x5151a2f3U, 0xa3a35dfeU, 0x404080c0U, 0x8f8f058aU
  1006. .word 0x92923fadU, 0x9d9d21bcU, 0x38387048U, 0xf5f5f104U
  1007. .word 0xbcbc63dfU, 0xb6b677c1U, 0xdadaaf75U, 0x21214263U
  1008. .word 0x10102030U, 0xffffe51aU, 0xf3f3fd0eU, 0xd2d2bf6dU
  1009. .word 0xcdcd814cU, 0x0c0c1814U, 0x13132635U, 0xececc32fU
  1010. .word 0x5f5fbee1U, 0x979735a2U, 0x444488ccU, 0x17172e39U
  1011. .word 0xc4c49357U, 0xa7a755f2U, 0x7e7efc82U, 0x3d3d7a47U
  1012. .word 0x6464c8acU, 0x5d5dbae7U, 0x1919322bU, 0x7373e695U
  1013. .word 0x6060c0a0U, 0x81811998U, 0x4f4f9ed1U, 0xdcdca37fU
  1014. .word 0x22224466U, 0x2a2a547eU, 0x90903babU, 0x88880b83U
  1015. .word 0x46468ccaU, 0xeeeec729U, 0xb8b86bd3U, 0x1414283cU
  1016. .word 0xdedea779U, 0x5e5ebce2U, 0x0b0b161dU, 0xdbdbad76U
  1017. .word 0xe0e0db3bU, 0x32326456U, 0x3a3a744eU, 0x0a0a141eU
  1018. .word 0x494992dbU, 0x06060c0aU, 0x2424486cU, 0x5c5cb8e4U
  1019. .word 0xc2c29f5dU, 0xd3d3bd6eU, 0xacac43efU, 0x6262c4a6U
  1020. .word 0x919139a8U, 0x959531a4U, 0xe4e4d337U, 0x7979f28bU
  1021. .word 0xe7e7d532U, 0xc8c88b43U, 0x37376e59U, 0x6d6ddab7U
  1022. .word 0x8d8d018cU, 0xd5d5b164U, 0x4e4e9cd2U, 0xa9a949e0U
  1023. .word 0x6c6cd8b4U, 0x5656acfaU, 0xf4f4f307U, 0xeaeacf25U
  1024. .word 0x6565caafU, 0x7a7af48eU, 0xaeae47e9U, 0x08081018U
  1025. .word 0xbaba6fd5U, 0x7878f088U, 0x25254a6fU, 0x2e2e5c72U
  1026. .word 0x1c1c3824U, 0xa6a657f1U, 0xb4b473c7U, 0xc6c69751U
  1027. .word 0xe8e8cb23U, 0xdddda17cU, 0x7474e89cU, 0x1f1f3e21U
  1028. .word 0x4b4b96ddU, 0xbdbd61dcU, 0x8b8b0d86U, 0x8a8a0f85U
  1029. .word 0x7070e090U, 0x3e3e7c42U, 0xb5b571c4U, 0x6666ccaaU
  1030. .word 0x484890d8U, 0x03030605U, 0xf6f6f701U, 0x0e0e1c12U
  1031. .word 0x6161c2a3U, 0x35356a5fU, 0x5757aef9U, 0xb9b969d0U
  1032. .word 0x86861791U, 0xc1c19958U, 0x1d1d3a27U, 0x9e9e27b9U
  1033. .word 0xe1e1d938U, 0xf8f8eb13U, 0x98982bb3U, 0x11112233U
  1034. .word 0x6969d2bbU, 0xd9d9a970U, 0x8e8e0789U, 0x949433a7U
  1035. .word 0x9b9b2db6U, 0x1e1e3c22U, 0x87871592U, 0xe9e9c920U
  1036. .word 0xcece8749U, 0x5555aaffU, 0x28285078U, 0xdfdfa57aU
  1037. .word 0x8c8c038fU, 0xa1a159f8U, 0x89890980U, 0x0d0d1a17U
  1038. .word 0xbfbf65daU, 0xe6e6d731U, 0x424284c6U, 0x6868d0b8U
  1039. .word 0x414182c3U, 0x999929b0U, 0x2d2d5a77U, 0x0f0f1e11U
  1040. .word 0xb0b07bcbU, 0x5454a8fcU, 0xbbbb6dd6U, 0x16162c3aU
  1041. .type AES_Te2,\@object
  1042. AES_Te2:
  1043. .word 0x63c6a563U, 0x7cf8847cU, 0x77ee9977U, 0x7bf68d7bU
  1044. .word 0xf2ff0df2U, 0x6bd6bd6bU, 0x6fdeb16fU, 0xc59154c5U
  1045. .word 0x30605030U, 0x01020301U, 0x67cea967U, 0x2b567d2bU
  1046. .word 0xfee719feU, 0xd7b562d7U, 0xab4de6abU, 0x76ec9a76U
  1047. .word 0xca8f45caU, 0x821f9d82U, 0xc98940c9U, 0x7dfa877dU
  1048. .word 0xfaef15faU, 0x59b2eb59U, 0x478ec947U, 0xf0fb0bf0U
  1049. .word 0xad41ecadU, 0xd4b367d4U, 0xa25ffda2U, 0xaf45eaafU
  1050. .word 0x9c23bf9cU, 0xa453f7a4U, 0x72e49672U, 0xc09b5bc0U
  1051. .word 0xb775c2b7U, 0xfde11cfdU, 0x933dae93U, 0x264c6a26U
  1052. .word 0x366c5a36U, 0x3f7e413fU, 0xf7f502f7U, 0xcc834fccU
  1053. .word 0x34685c34U, 0xa551f4a5U, 0xe5d134e5U, 0xf1f908f1U
  1054. .word 0x71e29371U, 0xd8ab73d8U, 0x31625331U, 0x152a3f15U
  1055. .word 0x04080c04U, 0xc79552c7U, 0x23466523U, 0xc39d5ec3U
  1056. .word 0x18302818U, 0x9637a196U, 0x050a0f05U, 0x9a2fb59aU
  1057. .word 0x070e0907U, 0x12243612U, 0x801b9b80U, 0xe2df3de2U
  1058. .word 0xebcd26ebU, 0x274e6927U, 0xb27fcdb2U, 0x75ea9f75U
  1059. .word 0x09121b09U, 0x831d9e83U, 0x2c58742cU, 0x1a342e1aU
  1060. .word 0x1b362d1bU, 0x6edcb26eU, 0x5ab4ee5aU, 0xa05bfba0U
  1061. .word 0x52a4f652U, 0x3b764d3bU, 0xd6b761d6U, 0xb37dceb3U
  1062. .word 0x29527b29U, 0xe3dd3ee3U, 0x2f5e712fU, 0x84139784U
  1063. .word 0x53a6f553U, 0xd1b968d1U, 0x00000000U, 0xedc12cedU
  1064. .word 0x20406020U, 0xfce31ffcU, 0xb179c8b1U, 0x5bb6ed5bU
  1065. .word 0x6ad4be6aU, 0xcb8d46cbU, 0xbe67d9beU, 0x39724b39U
  1066. .word 0x4a94de4aU, 0x4c98d44cU, 0x58b0e858U, 0xcf854acfU
  1067. .word 0xd0bb6bd0U, 0xefc52aefU, 0xaa4fe5aaU, 0xfbed16fbU
  1068. .word 0x4386c543U, 0x4d9ad74dU, 0x33665533U, 0x85119485U
  1069. .word 0x458acf45U, 0xf9e910f9U, 0x02040602U, 0x7ffe817fU
  1070. .word 0x50a0f050U, 0x3c78443cU, 0x9f25ba9fU, 0xa84be3a8U
  1071. .word 0x51a2f351U, 0xa35dfea3U, 0x4080c040U, 0x8f058a8fU
  1072. .word 0x923fad92U, 0x9d21bc9dU, 0x38704838U, 0xf5f104f5U
  1073. .word 0xbc63dfbcU, 0xb677c1b6U, 0xdaaf75daU, 0x21426321U
  1074. .word 0x10203010U, 0xffe51affU, 0xf3fd0ef3U, 0xd2bf6dd2U
  1075. .word 0xcd814ccdU, 0x0c18140cU, 0x13263513U, 0xecc32fecU
  1076. .word 0x5fbee15fU, 0x9735a297U, 0x4488cc44U, 0x172e3917U
  1077. .word 0xc49357c4U, 0xa755f2a7U, 0x7efc827eU, 0x3d7a473dU
  1078. .word 0x64c8ac64U, 0x5dbae75dU, 0x19322b19U, 0x73e69573U
  1079. .word 0x60c0a060U, 0x81199881U, 0x4f9ed14fU, 0xdca37fdcU
  1080. .word 0x22446622U, 0x2a547e2aU, 0x903bab90U, 0x880b8388U
  1081. .word 0x468cca46U, 0xeec729eeU, 0xb86bd3b8U, 0x14283c14U
  1082. .word 0xdea779deU, 0x5ebce25eU, 0x0b161d0bU, 0xdbad76dbU
  1083. .word 0xe0db3be0U, 0x32645632U, 0x3a744e3aU, 0x0a141e0aU
  1084. .word 0x4992db49U, 0x060c0a06U, 0x24486c24U, 0x5cb8e45cU
  1085. .word 0xc29f5dc2U, 0xd3bd6ed3U, 0xac43efacU, 0x62c4a662U
  1086. .word 0x9139a891U, 0x9531a495U, 0xe4d337e4U, 0x79f28b79U
  1087. .word 0xe7d532e7U, 0xc88b43c8U, 0x376e5937U, 0x6ddab76dU
  1088. .word 0x8d018c8dU, 0xd5b164d5U, 0x4e9cd24eU, 0xa949e0a9U
  1089. .word 0x6cd8b46cU, 0x56acfa56U, 0xf4f307f4U, 0xeacf25eaU
  1090. .word 0x65caaf65U, 0x7af48e7aU, 0xae47e9aeU, 0x08101808U
  1091. .word 0xba6fd5baU, 0x78f08878U, 0x254a6f25U, 0x2e5c722eU
  1092. .word 0x1c38241cU, 0xa657f1a6U, 0xb473c7b4U, 0xc69751c6U
  1093. .word 0xe8cb23e8U, 0xdda17cddU, 0x74e89c74U, 0x1f3e211fU
  1094. .word 0x4b96dd4bU, 0xbd61dcbdU, 0x8b0d868bU, 0x8a0f858aU
  1095. .word 0x70e09070U, 0x3e7c423eU, 0xb571c4b5U, 0x66ccaa66U
  1096. .word 0x4890d848U, 0x03060503U, 0xf6f701f6U, 0x0e1c120eU
  1097. .word 0x61c2a361U, 0x356a5f35U, 0x57aef957U, 0xb969d0b9U
  1098. .word 0x86179186U, 0xc19958c1U, 0x1d3a271dU, 0x9e27b99eU
  1099. .word 0xe1d938e1U, 0xf8eb13f8U, 0x982bb398U, 0x11223311U
  1100. .word 0x69d2bb69U, 0xd9a970d9U, 0x8e07898eU, 0x9433a794U
  1101. .word 0x9b2db69bU, 0x1e3c221eU, 0x87159287U, 0xe9c920e9U
  1102. .word 0xce8749ceU, 0x55aaff55U, 0x28507828U, 0xdfa57adfU
  1103. .word 0x8c038f8cU, 0xa159f8a1U, 0x89098089U, 0x0d1a170dU
  1104. .word 0xbf65dabfU, 0xe6d731e6U, 0x4284c642U, 0x68d0b868U
  1105. .word 0x4182c341U, 0x9929b099U, 0x2d5a772dU, 0x0f1e110fU
  1106. .word 0xb07bcbb0U, 0x54a8fc54U, 0xbb6dd6bbU, 0x162c3a16U
  1107. .type AES_Te3,\@object
  1108. AES_Te3:
  1109. .word 0xc6a56363U, 0xf8847c7cU, 0xee997777U, 0xf68d7b7bU
  1110. .word 0xff0df2f2U, 0xd6bd6b6bU, 0xdeb16f6fU, 0x9154c5c5U
  1111. .word 0x60503030U, 0x02030101U, 0xcea96767U, 0x567d2b2bU
  1112. .word 0xe719fefeU, 0xb562d7d7U, 0x4de6ababU, 0xec9a7676U
  1113. .word 0x8f45cacaU, 0x1f9d8282U, 0x8940c9c9U, 0xfa877d7dU
  1114. .word 0xef15fafaU, 0xb2eb5959U, 0x8ec94747U, 0xfb0bf0f0U
  1115. .word 0x41ecadadU, 0xb367d4d4U, 0x5ffda2a2U, 0x45eaafafU
  1116. .word 0x23bf9c9cU, 0x53f7a4a4U, 0xe4967272U, 0x9b5bc0c0U
  1117. .word 0x75c2b7b7U, 0xe11cfdfdU, 0x3dae9393U, 0x4c6a2626U
  1118. .word 0x6c5a3636U, 0x7e413f3fU, 0xf502f7f7U, 0x834fccccU
  1119. .word 0x685c3434U, 0x51f4a5a5U, 0xd134e5e5U, 0xf908f1f1U
  1120. .word 0xe2937171U, 0xab73d8d8U, 0x62533131U, 0x2a3f1515U
  1121. .word 0x080c0404U, 0x9552c7c7U, 0x46652323U, 0x9d5ec3c3U
  1122. .word 0x30281818U, 0x37a19696U, 0x0a0f0505U, 0x2fb59a9aU
  1123. .word 0x0e090707U, 0x24361212U, 0x1b9b8080U, 0xdf3de2e2U
  1124. .word 0xcd26ebebU, 0x4e692727U, 0x7fcdb2b2U, 0xea9f7575U
  1125. .word 0x121b0909U, 0x1d9e8383U, 0x58742c2cU, 0x342e1a1aU
  1126. .word 0x362d1b1bU, 0xdcb26e6eU, 0xb4ee5a5aU, 0x5bfba0a0U
  1127. .word 0xa4f65252U, 0x764d3b3bU, 0xb761d6d6U, 0x7dceb3b3U
  1128. .word 0x527b2929U, 0xdd3ee3e3U, 0x5e712f2fU, 0x13978484U
  1129. .word 0xa6f55353U, 0xb968d1d1U, 0x00000000U, 0xc12cededU
  1130. .word 0x40602020U, 0xe31ffcfcU, 0x79c8b1b1U, 0xb6ed5b5bU
  1131. .word 0xd4be6a6aU, 0x8d46cbcbU, 0x67d9bebeU, 0x724b3939U
  1132. .word 0x94de4a4aU, 0x98d44c4cU, 0xb0e85858U, 0x854acfcfU
  1133. .word 0xbb6bd0d0U, 0xc52aefefU, 0x4fe5aaaaU, 0xed16fbfbU
  1134. .word 0x86c54343U, 0x9ad74d4dU, 0x66553333U, 0x11948585U
  1135. .word 0x8acf4545U, 0xe910f9f9U, 0x04060202U, 0xfe817f7fU
  1136. .word 0xa0f05050U, 0x78443c3cU, 0x25ba9f9fU, 0x4be3a8a8U
  1137. .word 0xa2f35151U, 0x5dfea3a3U, 0x80c04040U, 0x058a8f8fU
  1138. .word 0x3fad9292U, 0x21bc9d9dU, 0x70483838U, 0xf104f5f5U
  1139. .word 0x63dfbcbcU, 0x77c1b6b6U, 0xaf75dadaU, 0x42632121U
  1140. .word 0x20301010U, 0xe51affffU, 0xfd0ef3f3U, 0xbf6dd2d2U
  1141. .word 0x814ccdcdU, 0x18140c0cU, 0x26351313U, 0xc32fececU
  1142. .word 0xbee15f5fU, 0x35a29797U, 0x88cc4444U, 0x2e391717U
  1143. .word 0x9357c4c4U, 0x55f2a7a7U, 0xfc827e7eU, 0x7a473d3dU
  1144. .word 0xc8ac6464U, 0xbae75d5dU, 0x322b1919U, 0xe6957373U
  1145. .word 0xc0a06060U, 0x19988181U, 0x9ed14f4fU, 0xa37fdcdcU
  1146. .word 0x44662222U, 0x547e2a2aU, 0x3bab9090U, 0x0b838888U
  1147. .word 0x8cca4646U, 0xc729eeeeU, 0x6bd3b8b8U, 0x283c1414U
  1148. .word 0xa779dedeU, 0xbce25e5eU, 0x161d0b0bU, 0xad76dbdbU
  1149. .word 0xdb3be0e0U, 0x64563232U, 0x744e3a3aU, 0x141e0a0aU
  1150. .word 0x92db4949U, 0x0c0a0606U, 0x486c2424U, 0xb8e45c5cU
  1151. .word 0x9f5dc2c2U, 0xbd6ed3d3U, 0x43efacacU, 0xc4a66262U
  1152. .word 0x39a89191U, 0x31a49595U, 0xd337e4e4U, 0xf28b7979U
  1153. .word 0xd532e7e7U, 0x8b43c8c8U, 0x6e593737U, 0xdab76d6dU
  1154. .word 0x018c8d8dU, 0xb164d5d5U, 0x9cd24e4eU, 0x49e0a9a9U
  1155. .word 0xd8b46c6cU, 0xacfa5656U, 0xf307f4f4U, 0xcf25eaeaU
  1156. .word 0xcaaf6565U, 0xf48e7a7aU, 0x47e9aeaeU, 0x10180808U
  1157. .word 0x6fd5babaU, 0xf0887878U, 0x4a6f2525U, 0x5c722e2eU
  1158. .word 0x38241c1cU, 0x57f1a6a6U, 0x73c7b4b4U, 0x9751c6c6U
  1159. .word 0xcb23e8e8U, 0xa17cddddU, 0xe89c7474U, 0x3e211f1fU
  1160. .word 0x96dd4b4bU, 0x61dcbdbdU, 0x0d868b8bU, 0x0f858a8aU
  1161. .word 0xe0907070U, 0x7c423e3eU, 0x71c4b5b5U, 0xccaa6666U
  1162. .word 0x90d84848U, 0x06050303U, 0xf701f6f6U, 0x1c120e0eU
  1163. .word 0xc2a36161U, 0x6a5f3535U, 0xaef95757U, 0x69d0b9b9U
  1164. .word 0x17918686U, 0x9958c1c1U, 0x3a271d1dU, 0x27b99e9eU
  1165. .word 0xd938e1e1U, 0xeb13f8f8U, 0x2bb39898U, 0x22331111U
  1166. .word 0xd2bb6969U, 0xa970d9d9U, 0x07898e8eU, 0x33a79494U
  1167. .word 0x2db69b9bU, 0x3c221e1eU, 0x15928787U, 0xc920e9e9U
  1168. .word 0x8749ceceU, 0xaaff5555U, 0x50782828U, 0xa57adfdfU
  1169. .word 0x038f8c8cU, 0x59f8a1a1U, 0x09808989U, 0x1a170d0dU
  1170. .word 0x65dabfbfU, 0xd731e6e6U, 0x84c64242U, 0xd0b86868U
  1171. .word 0x82c34141U, 0x29b09999U, 0x5a772d2dU, 0x1e110f0fU
  1172. .word 0x7bcbb0b0U, 0xa8fc5454U, 0x6dd6bbbbU, 0x2c3a1616U
  1173. .p2align 12
  1174. .type AES_Td0,\@object
  1175. AES_Td0:
  1176. .word 0x50a7f451U, 0x5365417eU, 0xc3a4171aU, 0x965e273aU
  1177. .word 0xcb6bab3bU, 0xf1459d1fU, 0xab58faacU, 0x9303e34bU
  1178. .word 0x55fa3020U, 0xf66d76adU, 0x9176cc88U, 0x254c02f5U
  1179. .word 0xfcd7e54fU, 0xd7cb2ac5U, 0x80443526U, 0x8fa362b5U
  1180. .word 0x495ab1deU, 0x671bba25U, 0x980eea45U, 0xe1c0fe5dU
  1181. .word 0x02752fc3U, 0x12f04c81U, 0xa397468dU, 0xc6f9d36bU
  1182. .word 0xe75f8f03U, 0x959c9215U, 0xeb7a6dbfU, 0xda595295U
  1183. .word 0x2d83bed4U, 0xd3217458U, 0x2969e049U, 0x44c8c98eU
  1184. .word 0x6a89c275U, 0x78798ef4U, 0x6b3e5899U, 0xdd71b927U
  1185. .word 0xb64fe1beU, 0x17ad88f0U, 0x66ac20c9U, 0xb43ace7dU
  1186. .word 0x184adf63U, 0x82311ae5U, 0x60335197U, 0x457f5362U
  1187. .word 0xe07764b1U, 0x84ae6bbbU, 0x1ca081feU, 0x942b08f9U
  1188. .word 0x58684870U, 0x19fd458fU, 0x876cde94U, 0xb7f87b52U
  1189. .word 0x23d373abU, 0xe2024b72U, 0x578f1fe3U, 0x2aab5566U
  1190. .word 0x0728ebb2U, 0x03c2b52fU, 0x9a7bc586U, 0xa50837d3U
  1191. .word 0xf2872830U, 0xb2a5bf23U, 0xba6a0302U, 0x5c8216edU
  1192. .word 0x2b1ccf8aU, 0x92b479a7U, 0xf0f207f3U, 0xa1e2694eU
  1193. .word 0xcdf4da65U, 0xd5be0506U, 0x1f6234d1U, 0x8afea6c4U
  1194. .word 0x9d532e34U, 0xa055f3a2U, 0x32e18a05U, 0x75ebf6a4U
  1195. .word 0x39ec830bU, 0xaaef6040U, 0x069f715eU, 0x51106ebdU
  1196. .word 0xf98a213eU, 0x3d06dd96U, 0xae053eddU, 0x46bde64dU
  1197. .word 0xb58d5491U, 0x055dc471U, 0x6fd40604U, 0xff155060U
  1198. .word 0x24fb9819U, 0x97e9bdd6U, 0xcc434089U, 0x779ed967U
  1199. .word 0xbd42e8b0U, 0x888b8907U, 0x385b19e7U, 0xdbeec879U
  1200. .word 0x470a7ca1U, 0xe90f427cU, 0xc91e84f8U, 0x00000000U
  1201. .word 0x83868009U, 0x48ed2b32U, 0xac70111eU, 0x4e725a6cU
  1202. .word 0xfbff0efdU, 0x5638850fU, 0x1ed5ae3dU, 0x27392d36U
  1203. .word 0x64d90f0aU, 0x21a65c68U, 0xd1545b9bU, 0x3a2e3624U
  1204. .word 0xb1670a0cU, 0x0fe75793U, 0xd296eeb4U, 0x9e919b1bU
  1205. .word 0x4fc5c080U, 0xa220dc61U, 0x694b775aU, 0x161a121cU
  1206. .word 0x0aba93e2U, 0xe52aa0c0U, 0x43e0223cU, 0x1d171b12U
  1207. .word 0x0b0d090eU, 0xadc78bf2U, 0xb9a8b62dU, 0xc8a91e14U
  1208. .word 0x8519f157U, 0x4c0775afU, 0xbbdd99eeU, 0xfd607fa3U
  1209. .word 0x9f2601f7U, 0xbcf5725cU, 0xc53b6644U, 0x347efb5bU
  1210. .word 0x7629438bU, 0xdcc623cbU, 0x68fcedb6U, 0x63f1e4b8U
  1211. .word 0xcadc31d7U, 0x10856342U, 0x40229713U, 0x2011c684U
  1212. .word 0x7d244a85U, 0xf83dbbd2U, 0x1132f9aeU, 0x6da129c7U
  1213. .word 0x4b2f9e1dU, 0xf330b2dcU, 0xec52860dU, 0xd0e3c177U
  1214. .word 0x6c16b32bU, 0x99b970a9U, 0xfa489411U, 0x2264e947U
  1215. .word 0xc48cfca8U, 0x1a3ff0a0U, 0xd82c7d56U, 0xef903322U
  1216. .word 0xc74e4987U, 0xc1d138d9U, 0xfea2ca8cU, 0x360bd498U
  1217. .word 0xcf81f5a6U, 0x28de7aa5U, 0x268eb7daU, 0xa4bfad3fU
  1218. .word 0xe49d3a2cU, 0x0d927850U, 0x9bcc5f6aU, 0x62467e54U
  1219. .word 0xc2138df6U, 0xe8b8d890U, 0x5ef7392eU, 0xf5afc382U
  1220. .word 0xbe805d9fU, 0x7c93d069U, 0xa92dd56fU, 0xb31225cfU
  1221. .word 0x3b99acc8U, 0xa77d1810U, 0x6e639ce8U, 0x7bbb3bdbU
  1222. .word 0x097826cdU, 0xf418596eU, 0x01b79aecU, 0xa89a4f83U
  1223. .word 0x656e95e6U, 0x7ee6ffaaU, 0x08cfbc21U, 0xe6e815efU
  1224. .word 0xd99be7baU, 0xce366f4aU, 0xd4099feaU, 0xd67cb029U
  1225. .word 0xafb2a431U, 0x31233f2aU, 0x3094a5c6U, 0xc066a235U
  1226. .word 0x37bc4e74U, 0xa6ca82fcU, 0xb0d090e0U, 0x15d8a733U
  1227. .word 0x4a9804f1U, 0xf7daec41U, 0x0e50cd7fU, 0x2ff69117U
  1228. .word 0x8dd64d76U, 0x4db0ef43U, 0x544daaccU, 0xdf0496e4U
  1229. .word 0xe3b5d19eU, 0x1b886a4cU, 0xb81f2cc1U, 0x7f516546U
  1230. .word 0x04ea5e9dU, 0x5d358c01U, 0x737487faU, 0x2e410bfbU
  1231. .word 0x5a1d67b3U, 0x52d2db92U, 0x335610e9U, 0x1347d66dU
  1232. .word 0x8c61d79aU, 0x7a0ca137U, 0x8e14f859U, 0x893c13ebU
  1233. .word 0xee27a9ceU, 0x35c961b7U, 0xede51ce1U, 0x3cb1477aU
  1234. .word 0x59dfd29cU, 0x3f73f255U, 0x79ce1418U, 0xbf37c773U
  1235. .word 0xeacdf753U, 0x5baafd5fU, 0x146f3ddfU, 0x86db4478U
  1236. .word 0x81f3afcaU, 0x3ec468b9U, 0x2c342438U, 0x5f40a3c2U
  1237. .word 0x72c31d16U, 0x0c25e2bcU, 0x8b493c28U, 0x41950dffU
  1238. .word 0x7101a839U, 0xdeb30c08U, 0x9ce4b4d8U, 0x90c15664U
  1239. .word 0x6184cb7bU, 0x70b632d5U, 0x745c6c48U, 0x4257b8d0U
  1240. .type AES_Td1,\@object
  1241. AES_Td1:
  1242. .word 0xa7f45150U, 0x65417e53U, 0xa4171ac3U, 0x5e273a96U
  1243. .word 0x6bab3bcbU, 0x459d1ff1U, 0x58faacabU, 0x03e34b93U
  1244. .word 0xfa302055U, 0x6d76adf6U, 0x76cc8891U, 0x4c02f525U
  1245. .word 0xd7e54ffcU, 0xcb2ac5d7U, 0x44352680U, 0xa362b58fU
  1246. .word 0x5ab1de49U, 0x1bba2567U, 0x0eea4598U, 0xc0fe5de1U
  1247. .word 0x752fc302U, 0xf04c8112U, 0x97468da3U, 0xf9d36bc6U
  1248. .word 0x5f8f03e7U, 0x9c921595U, 0x7a6dbfebU, 0x595295daU
  1249. .word 0x83bed42dU, 0x217458d3U, 0x69e04929U, 0xc8c98e44U
  1250. .word 0x89c2756aU, 0x798ef478U, 0x3e58996bU, 0x71b927ddU
  1251. .word 0x4fe1beb6U, 0xad88f017U, 0xac20c966U, 0x3ace7db4U
  1252. .word 0x4adf6318U, 0x311ae582U, 0x33519760U, 0x7f536245U
  1253. .word 0x7764b1e0U, 0xae6bbb84U, 0xa081fe1cU, 0x2b08f994U
  1254. .word 0x68487058U, 0xfd458f19U, 0x6cde9487U, 0xf87b52b7U
  1255. .word 0xd373ab23U, 0x024b72e2U, 0x8f1fe357U, 0xab55662aU
  1256. .word 0x28ebb207U, 0xc2b52f03U, 0x7bc5869aU, 0x0837d3a5U
  1257. .word 0x872830f2U, 0xa5bf23b2U, 0x6a0302baU, 0x8216ed5cU
  1258. .word 0x1ccf8a2bU, 0xb479a792U, 0xf207f3f0U, 0xe2694ea1U
  1259. .word 0xf4da65cdU, 0xbe0506d5U, 0x6234d11fU, 0xfea6c48aU
  1260. .word 0x532e349dU, 0x55f3a2a0U, 0xe18a0532U, 0xebf6a475U
  1261. .word 0xec830b39U, 0xef6040aaU, 0x9f715e06U, 0x106ebd51U
  1262. .word 0x8a213ef9U, 0x06dd963dU, 0x053eddaeU, 0xbde64d46U
  1263. .word 0x8d5491b5U, 0x5dc47105U, 0xd406046fU, 0x155060ffU
  1264. .word 0xfb981924U, 0xe9bdd697U, 0x434089ccU, 0x9ed96777U
  1265. .word 0x42e8b0bdU, 0x8b890788U, 0x5b19e738U, 0xeec879dbU
  1266. .word 0x0a7ca147U, 0x0f427ce9U, 0x1e84f8c9U, 0x00000000U
  1267. .word 0x86800983U, 0xed2b3248U, 0x70111eacU, 0x725a6c4eU
  1268. .word 0xff0efdfbU, 0x38850f56U, 0xd5ae3d1eU, 0x392d3627U
  1269. .word 0xd90f0a64U, 0xa65c6821U, 0x545b9bd1U, 0x2e36243aU
  1270. .word 0x670a0cb1U, 0xe757930fU, 0x96eeb4d2U, 0x919b1b9eU
  1271. .word 0xc5c0804fU, 0x20dc61a2U, 0x4b775a69U, 0x1a121c16U
  1272. .word 0xba93e20aU, 0x2aa0c0e5U, 0xe0223c43U, 0x171b121dU
  1273. .word 0x0d090e0bU, 0xc78bf2adU, 0xa8b62db9U, 0xa91e14c8U
  1274. .word 0x19f15785U, 0x0775af4cU, 0xdd99eebbU, 0x607fa3fdU
  1275. .word 0x2601f79fU, 0xf5725cbcU, 0x3b6644c5U, 0x7efb5b34U
  1276. .word 0x29438b76U, 0xc623cbdcU, 0xfcedb668U, 0xf1e4b863U
  1277. .word 0xdc31d7caU, 0x85634210U, 0x22971340U, 0x11c68420U
  1278. .word 0x244a857dU, 0x3dbbd2f8U, 0x32f9ae11U, 0xa129c76dU
  1279. .word 0x2f9e1d4bU, 0x30b2dcf3U, 0x52860decU, 0xe3c177d0U
  1280. .word 0x16b32b6cU, 0xb970a999U, 0x489411faU, 0x64e94722U
  1281. .word 0x8cfca8c4U, 0x3ff0a01aU, 0x2c7d56d8U, 0x903322efU
  1282. .word 0x4e4987c7U, 0xd138d9c1U, 0xa2ca8cfeU, 0x0bd49836U
  1283. .word 0x81f5a6cfU, 0xde7aa528U, 0x8eb7da26U, 0xbfad3fa4U
  1284. .word 0x9d3a2ce4U, 0x9278500dU, 0xcc5f6a9bU, 0x467e5462U
  1285. .word 0x138df6c2U, 0xb8d890e8U, 0xf7392e5eU, 0xafc382f5U
  1286. .word 0x805d9fbeU, 0x93d0697cU, 0x2dd56fa9U, 0x1225cfb3U
  1287. .word 0x99acc83bU, 0x7d1810a7U, 0x639ce86eU, 0xbb3bdb7bU
  1288. .word 0x7826cd09U, 0x18596ef4U, 0xb79aec01U, 0x9a4f83a8U
  1289. .word 0x6e95e665U, 0xe6ffaa7eU, 0xcfbc2108U, 0xe815efe6U
  1290. .word 0x9be7bad9U, 0x366f4aceU, 0x099fead4U, 0x7cb029d6U
  1291. .word 0xb2a431afU, 0x233f2a31U, 0x94a5c630U, 0x66a235c0U
  1292. .word 0xbc4e7437U, 0xca82fca6U, 0xd090e0b0U, 0xd8a73315U
  1293. .word 0x9804f14aU, 0xdaec41f7U, 0x50cd7f0eU, 0xf691172fU
  1294. .word 0xd64d768dU, 0xb0ef434dU, 0x4daacc54U, 0x0496e4dfU
  1295. .word 0xb5d19ee3U, 0x886a4c1bU, 0x1f2cc1b8U, 0x5165467fU
  1296. .word 0xea5e9d04U, 0x358c015dU, 0x7487fa73U, 0x410bfb2eU
  1297. .word 0x1d67b35aU, 0xd2db9252U, 0x5610e933U, 0x47d66d13U
  1298. .word 0x61d79a8cU, 0x0ca1377aU, 0x14f8598eU, 0x3c13eb89U
  1299. .word 0x27a9ceeeU, 0xc961b735U, 0xe51ce1edU, 0xb1477a3cU
  1300. .word 0xdfd29c59U, 0x73f2553fU, 0xce141879U, 0x37c773bfU
  1301. .word 0xcdf753eaU, 0xaafd5f5bU, 0x6f3ddf14U, 0xdb447886U
  1302. .word 0xf3afca81U, 0xc468b93eU, 0x3424382cU, 0x40a3c25fU
  1303. .word 0xc31d1672U, 0x25e2bc0cU, 0x493c288bU, 0x950dff41U
  1304. .word 0x01a83971U, 0xb30c08deU, 0xe4b4d89cU, 0xc1566490U
  1305. .word 0x84cb7b61U, 0xb632d570U, 0x5c6c4874U, 0x57b8d042U
  1306. .type AES_Td2,\@object
  1307. AES_Td2:
  1308. .word 0xf45150a7U, 0x417e5365U, 0x171ac3a4U, 0x273a965eU
  1309. .word 0xab3bcb6bU, 0x9d1ff145U, 0xfaacab58U, 0xe34b9303U
  1310. .word 0x302055faU, 0x76adf66dU, 0xcc889176U, 0x02f5254cU
  1311. .word 0xe54ffcd7U, 0x2ac5d7cbU, 0x35268044U, 0x62b58fa3U
  1312. .word 0xb1de495aU, 0xba25671bU, 0xea45980eU, 0xfe5de1c0U
  1313. .word 0x2fc30275U, 0x4c8112f0U, 0x468da397U, 0xd36bc6f9U
  1314. .word 0x8f03e75fU, 0x9215959cU, 0x6dbfeb7aU, 0x5295da59U
  1315. .word 0xbed42d83U, 0x7458d321U, 0xe0492969U, 0xc98e44c8U
  1316. .word 0xc2756a89U, 0x8ef47879U, 0x58996b3eU, 0xb927dd71U
  1317. .word 0xe1beb64fU, 0x88f017adU, 0x20c966acU, 0xce7db43aU
  1318. .word 0xdf63184aU, 0x1ae58231U, 0x51976033U, 0x5362457fU
  1319. .word 0x64b1e077U, 0x6bbb84aeU, 0x81fe1ca0U, 0x08f9942bU
  1320. .word 0x48705868U, 0x458f19fdU, 0xde94876cU, 0x7b52b7f8U
  1321. .word 0x73ab23d3U, 0x4b72e202U, 0x1fe3578fU, 0x55662aabU
  1322. .word 0xebb20728U, 0xb52f03c2U, 0xc5869a7bU, 0x37d3a508U
  1323. .word 0x2830f287U, 0xbf23b2a5U, 0x0302ba6aU, 0x16ed5c82U
  1324. .word 0xcf8a2b1cU, 0x79a792b4U, 0x07f3f0f2U, 0x694ea1e2U
  1325. .word 0xda65cdf4U, 0x0506d5beU, 0x34d11f62U, 0xa6c48afeU
  1326. .word 0x2e349d53U, 0xf3a2a055U, 0x8a0532e1U, 0xf6a475ebU
  1327. .word 0x830b39ecU, 0x6040aaefU, 0x715e069fU, 0x6ebd5110U
  1328. .word 0x213ef98aU, 0xdd963d06U, 0x3eddae05U, 0xe64d46bdU
  1329. .word 0x5491b58dU, 0xc471055dU, 0x06046fd4U, 0x5060ff15U
  1330. .word 0x981924fbU, 0xbdd697e9U, 0x4089cc43U, 0xd967779eU
  1331. .word 0xe8b0bd42U, 0x8907888bU, 0x19e7385bU, 0xc879dbeeU
  1332. .word 0x7ca1470aU, 0x427ce90fU, 0x84f8c91eU, 0x00000000U
  1333. .word 0x80098386U, 0x2b3248edU, 0x111eac70U, 0x5a6c4e72U
  1334. .word 0x0efdfbffU, 0x850f5638U, 0xae3d1ed5U, 0x2d362739U
  1335. .word 0x0f0a64d9U, 0x5c6821a6U, 0x5b9bd154U, 0x36243a2eU
  1336. .word 0x0a0cb167U, 0x57930fe7U, 0xeeb4d296U, 0x9b1b9e91U
  1337. .word 0xc0804fc5U, 0xdc61a220U, 0x775a694bU, 0x121c161aU
  1338. .word 0x93e20abaU, 0xa0c0e52aU, 0x223c43e0U, 0x1b121d17U
  1339. .word 0x090e0b0dU, 0x8bf2adc7U, 0xb62db9a8U, 0x1e14c8a9U
  1340. .word 0xf1578519U, 0x75af4c07U, 0x99eebbddU, 0x7fa3fd60U
  1341. .word 0x01f79f26U, 0x725cbcf5U, 0x6644c53bU, 0xfb5b347eU
  1342. .word 0x438b7629U, 0x23cbdcc6U, 0xedb668fcU, 0xe4b863f1U
  1343. .word 0x31d7cadcU, 0x63421085U, 0x97134022U, 0xc6842011U
  1344. .word 0x4a857d24U, 0xbbd2f83dU, 0xf9ae1132U, 0x29c76da1U
  1345. .word 0x9e1d4b2fU, 0xb2dcf330U, 0x860dec52U, 0xc177d0e3U
  1346. .word 0xb32b6c16U, 0x70a999b9U, 0x9411fa48U, 0xe9472264U
  1347. .word 0xfca8c48cU, 0xf0a01a3fU, 0x7d56d82cU, 0x3322ef90U
  1348. .word 0x4987c74eU, 0x38d9c1d1U, 0xca8cfea2U, 0xd498360bU
  1349. .word 0xf5a6cf81U, 0x7aa528deU, 0xb7da268eU, 0xad3fa4bfU
  1350. .word 0x3a2ce49dU, 0x78500d92U, 0x5f6a9bccU, 0x7e546246U
  1351. .word 0x8df6c213U, 0xd890e8b8U, 0x392e5ef7U, 0xc382f5afU
  1352. .word 0x5d9fbe80U, 0xd0697c93U, 0xd56fa92dU, 0x25cfb312U
  1353. .word 0xacc83b99U, 0x1810a77dU, 0x9ce86e63U, 0x3bdb7bbbU
  1354. .word 0x26cd0978U, 0x596ef418U, 0x9aec01b7U, 0x4f83a89aU
  1355. .word 0x95e6656eU, 0xffaa7ee6U, 0xbc2108cfU, 0x15efe6e8U
  1356. .word 0xe7bad99bU, 0x6f4ace36U, 0x9fead409U, 0xb029d67cU
  1357. .word 0xa431afb2U, 0x3f2a3123U, 0xa5c63094U, 0xa235c066U
  1358. .word 0x4e7437bcU, 0x82fca6caU, 0x90e0b0d0U, 0xa73315d8U
  1359. .word 0x04f14a98U, 0xec41f7daU, 0xcd7f0e50U, 0x91172ff6U
  1360. .word 0x4d768dd6U, 0xef434db0U, 0xaacc544dU, 0x96e4df04U
  1361. .word 0xd19ee3b5U, 0x6a4c1b88U, 0x2cc1b81fU, 0x65467f51U
  1362. .word 0x5e9d04eaU, 0x8c015d35U, 0x87fa7374U, 0x0bfb2e41U
  1363. .word 0x67b35a1dU, 0xdb9252d2U, 0x10e93356U, 0xd66d1347U
  1364. .word 0xd79a8c61U, 0xa1377a0cU, 0xf8598e14U, 0x13eb893cU
  1365. .word 0xa9ceee27U, 0x61b735c9U, 0x1ce1ede5U, 0x477a3cb1U
  1366. .word 0xd29c59dfU, 0xf2553f73U, 0x141879ceU, 0xc773bf37U
  1367. .word 0xf753eacdU, 0xfd5f5baaU, 0x3ddf146fU, 0x447886dbU
  1368. .word 0xafca81f3U, 0x68b93ec4U, 0x24382c34U, 0xa3c25f40U
  1369. .word 0x1d1672c3U, 0xe2bc0c25U, 0x3c288b49U, 0x0dff4195U
  1370. .word 0xa8397101U, 0x0c08deb3U, 0xb4d89ce4U, 0x566490c1U
  1371. .word 0xcb7b6184U, 0x32d570b6U, 0x6c48745cU, 0xb8d04257U
  1372. .type AES_Td3,\@object
  1373. AES_Td3:
  1374. .word 0x5150a7f4U, 0x7e536541U, 0x1ac3a417U, 0x3a965e27U
  1375. .word 0x3bcb6babU, 0x1ff1459dU, 0xacab58faU, 0x4b9303e3U
  1376. .word 0x2055fa30U, 0xadf66d76U, 0x889176ccU, 0xf5254c02U
  1377. .word 0x4ffcd7e5U, 0xc5d7cb2aU, 0x26804435U, 0xb58fa362U
  1378. .word 0xde495ab1U, 0x25671bbaU, 0x45980eeaU, 0x5de1c0feU
  1379. .word 0xc302752fU, 0x8112f04cU, 0x8da39746U, 0x6bc6f9d3U
  1380. .word 0x03e75f8fU, 0x15959c92U, 0xbfeb7a6dU, 0x95da5952U
  1381. .word 0xd42d83beU, 0x58d32174U, 0x492969e0U, 0x8e44c8c9U
  1382. .word 0x756a89c2U, 0xf478798eU, 0x996b3e58U, 0x27dd71b9U
  1383. .word 0xbeb64fe1U, 0xf017ad88U, 0xc966ac20U, 0x7db43aceU
  1384. .word 0x63184adfU, 0xe582311aU, 0x97603351U, 0x62457f53U
  1385. .word 0xb1e07764U, 0xbb84ae6bU, 0xfe1ca081U, 0xf9942b08U
  1386. .word 0x70586848U, 0x8f19fd45U, 0x94876cdeU, 0x52b7f87bU
  1387. .word 0xab23d373U, 0x72e2024bU, 0xe3578f1fU, 0x662aab55U
  1388. .word 0xb20728ebU, 0x2f03c2b5U, 0x869a7bc5U, 0xd3a50837U
  1389. .word 0x30f28728U, 0x23b2a5bfU, 0x02ba6a03U, 0xed5c8216U
  1390. .word 0x8a2b1ccfU, 0xa792b479U, 0xf3f0f207U, 0x4ea1e269U
  1391. .word 0x65cdf4daU, 0x06d5be05U, 0xd11f6234U, 0xc48afea6U
  1392. .word 0x349d532eU, 0xa2a055f3U, 0x0532e18aU, 0xa475ebf6U
  1393. .word 0x0b39ec83U, 0x40aaef60U, 0x5e069f71U, 0xbd51106eU
  1394. .word 0x3ef98a21U, 0x963d06ddU, 0xddae053eU, 0x4d46bde6U
  1395. .word 0x91b58d54U, 0x71055dc4U, 0x046fd406U, 0x60ff1550U
  1396. .word 0x1924fb98U, 0xd697e9bdU, 0x89cc4340U, 0x67779ed9U
  1397. .word 0xb0bd42e8U, 0x07888b89U, 0xe7385b19U, 0x79dbeec8U
  1398. .word 0xa1470a7cU, 0x7ce90f42U, 0xf8c91e84U, 0x00000000U
  1399. .word 0x09838680U, 0x3248ed2bU, 0x1eac7011U, 0x6c4e725aU
  1400. .word 0xfdfbff0eU, 0x0f563885U, 0x3d1ed5aeU, 0x3627392dU
  1401. .word 0x0a64d90fU, 0x6821a65cU, 0x9bd1545bU, 0x243a2e36U
  1402. .word 0x0cb1670aU, 0x930fe757U, 0xb4d296eeU, 0x1b9e919bU
  1403. .word 0x804fc5c0U, 0x61a220dcU, 0x5a694b77U, 0x1c161a12U
  1404. .word 0xe20aba93U, 0xc0e52aa0U, 0x3c43e022U, 0x121d171bU
  1405. .word 0x0e0b0d09U, 0xf2adc78bU, 0x2db9a8b6U, 0x14c8a91eU
  1406. .word 0x578519f1U, 0xaf4c0775U, 0xeebbdd99U, 0xa3fd607fU
  1407. .word 0xf79f2601U, 0x5cbcf572U, 0x44c53b66U, 0x5b347efbU
  1408. .word 0x8b762943U, 0xcbdcc623U, 0xb668fcedU, 0xb863f1e4U
  1409. .word 0xd7cadc31U, 0x42108563U, 0x13402297U, 0x842011c6U
  1410. .word 0x857d244aU, 0xd2f83dbbU, 0xae1132f9U, 0xc76da129U
  1411. .word 0x1d4b2f9eU, 0xdcf330b2U, 0x0dec5286U, 0x77d0e3c1U
  1412. .word 0x2b6c16b3U, 0xa999b970U, 0x11fa4894U, 0x472264e9U
  1413. .word 0xa8c48cfcU, 0xa01a3ff0U, 0x56d82c7dU, 0x22ef9033U
  1414. .word 0x87c74e49U, 0xd9c1d138U, 0x8cfea2caU, 0x98360bd4U
  1415. .word 0xa6cf81f5U, 0xa528de7aU, 0xda268eb7U, 0x3fa4bfadU
  1416. .word 0x2ce49d3aU, 0x500d9278U, 0x6a9bcc5fU, 0x5462467eU
  1417. .word 0xf6c2138dU, 0x90e8b8d8U, 0x2e5ef739U, 0x82f5afc3U
  1418. .word 0x9fbe805dU, 0x697c93d0U, 0x6fa92dd5U, 0xcfb31225U
  1419. .word 0xc83b99acU, 0x10a77d18U, 0xe86e639cU, 0xdb7bbb3bU
  1420. .word 0xcd097826U, 0x6ef41859U, 0xec01b79aU, 0x83a89a4fU
  1421. .word 0xe6656e95U, 0xaa7ee6ffU, 0x2108cfbcU, 0xefe6e815U
  1422. .word 0xbad99be7U, 0x4ace366fU, 0xead4099fU, 0x29d67cb0U
  1423. .word 0x31afb2a4U, 0x2a31233fU, 0xc63094a5U, 0x35c066a2U
  1424. .word 0x7437bc4eU, 0xfca6ca82U, 0xe0b0d090U, 0x3315d8a7U
  1425. .word 0xf14a9804U, 0x41f7daecU, 0x7f0e50cdU, 0x172ff691U
  1426. .word 0x768dd64dU, 0x434db0efU, 0xcc544daaU, 0xe4df0496U
  1427. .word 0x9ee3b5d1U, 0x4c1b886aU, 0xc1b81f2cU, 0x467f5165U
  1428. .word 0x9d04ea5eU, 0x015d358cU, 0xfa737487U, 0xfb2e410bU
  1429. .word 0xb35a1d67U, 0x9252d2dbU, 0xe9335610U, 0x6d1347d6U
  1430. .word 0x9a8c61d7U, 0x377a0ca1U, 0x598e14f8U, 0xeb893c13U
  1431. .word 0xceee27a9U, 0xb735c961U, 0xe1ede51cU, 0x7a3cb147U
  1432. .word 0x9c59dfd2U, 0x553f73f2U, 0x1879ce14U, 0x73bf37c7U
  1433. .word 0x53eacdf7U, 0x5f5baafdU, 0xdf146f3dU, 0x7886db44U
  1434. .word 0xca81f3afU, 0xb93ec468U, 0x382c3424U, 0xc25f40a3U
  1435. .word 0x1672c31dU, 0xbc0c25e2U, 0x288b493cU, 0xff41950dU
  1436. .word 0x397101a8U, 0x08deb30cU, 0xd89ce4b4U, 0x6490c156U
  1437. .word 0x7b6184cbU, 0xd570b632U, 0x48745c6cU, 0xd04257b8U
  1438. .type AES_Td4,\@object
  1439. AES_Td4:
  1440. .byte 0x52U, 0x09U, 0x6aU, 0xd5U, 0x30U, 0x36U, 0xa5U, 0x38U
  1441. .byte 0xbfU, 0x40U, 0xa3U, 0x9eU, 0x81U, 0xf3U, 0xd7U, 0xfbU
  1442. .byte 0x7cU, 0xe3U, 0x39U, 0x82U, 0x9bU, 0x2fU, 0xffU, 0x87U
  1443. .byte 0x34U, 0x8eU, 0x43U, 0x44U, 0xc4U, 0xdeU, 0xe9U, 0xcbU
  1444. .byte 0x54U, 0x7bU, 0x94U, 0x32U, 0xa6U, 0xc2U, 0x23U, 0x3dU
  1445. .byte 0xeeU, 0x4cU, 0x95U, 0x0bU, 0x42U, 0xfaU, 0xc3U, 0x4eU
  1446. .byte 0x08U, 0x2eU, 0xa1U, 0x66U, 0x28U, 0xd9U, 0x24U, 0xb2U
  1447. .byte 0x76U, 0x5bU, 0xa2U, 0x49U, 0x6dU, 0x8bU, 0xd1U, 0x25U
  1448. .byte 0x72U, 0xf8U, 0xf6U, 0x64U, 0x86U, 0x68U, 0x98U, 0x16U
  1449. .byte 0xd4U, 0xa4U, 0x5cU, 0xccU, 0x5dU, 0x65U, 0xb6U, 0x92U
  1450. .byte 0x6cU, 0x70U, 0x48U, 0x50U, 0xfdU, 0xedU, 0xb9U, 0xdaU
  1451. .byte 0x5eU, 0x15U, 0x46U, 0x57U, 0xa7U, 0x8dU, 0x9dU, 0x84U
  1452. .byte 0x90U, 0xd8U, 0xabU, 0x00U, 0x8cU, 0xbcU, 0xd3U, 0x0aU
  1453. .byte 0xf7U, 0xe4U, 0x58U, 0x05U, 0xb8U, 0xb3U, 0x45U, 0x06U
  1454. .byte 0xd0U, 0x2cU, 0x1eU, 0x8fU, 0xcaU, 0x3fU, 0x0fU, 0x02U
  1455. .byte 0xc1U, 0xafU, 0xbdU, 0x03U, 0x01U, 0x13U, 0x8aU, 0x6bU
  1456. .byte 0x3aU, 0x91U, 0x11U, 0x41U, 0x4fU, 0x67U, 0xdcU, 0xeaU
  1457. .byte 0x97U, 0xf2U, 0xcfU, 0xceU, 0xf0U, 0xb4U, 0xe6U, 0x73U
  1458. .byte 0x96U, 0xacU, 0x74U, 0x22U, 0xe7U, 0xadU, 0x35U, 0x85U
  1459. .byte 0xe2U, 0xf9U, 0x37U, 0xe8U, 0x1cU, 0x75U, 0xdfU, 0x6eU
  1460. .byte 0x47U, 0xf1U, 0x1aU, 0x71U, 0x1dU, 0x29U, 0xc5U, 0x89U
  1461. .byte 0x6fU, 0xb7U, 0x62U, 0x0eU, 0xaaU, 0x18U, 0xbeU, 0x1bU
  1462. .byte 0xfcU, 0x56U, 0x3eU, 0x4bU, 0xc6U, 0xd2U, 0x79U, 0x20U
  1463. .byte 0x9aU, 0xdbU, 0xc0U, 0xfeU, 0x78U, 0xcdU, 0x5aU, 0xf4U
  1464. .byte 0x1fU, 0xddU, 0xa8U, 0x33U, 0x88U, 0x07U, 0xc7U, 0x31U
  1465. .byte 0xb1U, 0x12U, 0x10U, 0x59U, 0x27U, 0x80U, 0xecU, 0x5fU
  1466. .byte 0x60U, 0x51U, 0x7fU, 0xa9U, 0x19U, 0xb5U, 0x4aU, 0x0dU
  1467. .byte 0x2dU, 0xe5U, 0x7aU, 0x9fU, 0x93U, 0xc9U, 0x9cU, 0xefU
  1468. .byte 0xa0U, 0xe0U, 0x3bU, 0x4dU, 0xaeU, 0x2aU, 0xf5U, 0xb0U
  1469. .byte 0xc8U, 0xebU, 0xbbU, 0x3cU, 0x83U, 0x53U, 0x99U, 0x61U
  1470. .byte 0x17U, 0x2bU, 0x04U, 0x7eU, 0xbaU, 0x77U, 0xd6U, 0x26U
  1471. .byte 0xe1U, 0x69U, 0x14U, 0x63U, 0x55U, 0x21U, 0x0cU, 0x7dU
  1472. .type AES_rcon,\@object
  1473. AES_rcon:
  1474. .word 0x00000001U, 0x00000002U, 0x00000004U, 0x00000008U
  1475. .word 0x00000010U, 0x00000020U, 0x00000040U, 0x00000080U
  1476. .word 0x0000001BU, 0x00000036U
  1477. ___
  1478. print $code;
  1479. close STDOUT or die "error closing STDOUT: $!";