1238384Sjkim#!/usr/bin/env perl 2238384Sjkim 3238384Sjkim# ==================================================================== 4238384Sjkim# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL 5238384Sjkim# project. The module is, however, dual licensed under OpenSSL and 6238384Sjkim# CRYPTOGAMS licenses depending on where you obtain it. For further 7238384Sjkim# details see http://www.openssl.org/~appro/cryptogams/. 8238384Sjkim# ==================================================================== 9238384Sjkim 10238384Sjkim# AES for MIPS 11238384Sjkim 12238384Sjkim# October 2010 13238384Sjkim# 14238384Sjkim# Code uses 1K[+256B] S-box and on single-issue core [such as R5000] 15238384Sjkim# spends ~68 cycles per byte processed with 128-bit key. This is ~16% 16238384Sjkim# faster than gcc-generated code, which is not very impressive. But 17238384Sjkim# recall that compressed S-box requires extra processing, namely 18238384Sjkim# additional rotations. Rotations are implemented with lwl/lwr pairs, 19238384Sjkim# which is normally used for loading unaligned data. Another cool 20238384Sjkim# thing about this module is its endian neutrality, which means that 21238384Sjkim# it processes data without ever changing byte order... 22238384Sjkim 23290207Sjkim# September 2012 24290207Sjkim# 25290207Sjkim# Add MIPS32R2 (~10% less instructions) and SmartMIPS ASE (further 26290207Sjkim# ~25% less instructions) code. Note that there is no run-time switch, 27290207Sjkim# instead, code path is chosen upon pre-process time, pass -mips32r2 28290207Sjkim# or/and -msmartmips. 29290207Sjkim 30238384Sjkim###################################################################### 31238384Sjkim# There is a number of MIPS ABI in use, O32 and N32/64 are most 32238384Sjkim# widely used. Then there is a new contender: NUBI. It appears that if 33238384Sjkim# one picks the latter, it's possible to arrange code in ABI neutral 34238384Sjkim# manner. Therefore let's stick to NUBI register layout: 35238384Sjkim# 36238384Sjkim($zero,$at,$t0,$t1,$t2)=map("\$$_",(0..2,24,25)); 37238384Sjkim($a0,$a1,$a2,$a3,$a4,$a5,$a6,$a7)=map("\$$_",(4..11)); 38238384Sjkim($s0,$s1,$s2,$s3,$s4,$s5,$s6,$s7,$s8,$s9,$s10,$s11)=map("\$$_",(12..23)); 39238384Sjkim($gp,$tp,$sp,$fp,$ra)=map("\$$_",(3,28..31)); 40238384Sjkim# 41238384Sjkim# The return value is placed in $a0. Following coding rules facilitate 42238384Sjkim# interoperability: 43238384Sjkim# 44238384Sjkim# - never ever touch $tp, "thread pointer", former $gp; 45238384Sjkim# - copy return value to $t0, former $v0 [or to $a0 if you're adapting 46238384Sjkim# old code]; 47238384Sjkim# - on O32 populate $a4-$a7 with 'lw $aN,4*N($sp)' if necessary; 48238384Sjkim# 49238384Sjkim# For reference here is register layout for N32/64 MIPS ABIs: 50238384Sjkim# 51238384Sjkim# ($zero,$at,$v0,$v1)=map("\$$_",(0..3)); 52238384Sjkim# ($a0,$a1,$a2,$a3,$a4,$a5,$a6,$a7)=map("\$$_",(4..11)); 53238384Sjkim# ($t0,$t1,$t2,$t3,$t8,$t9)=map("\$$_",(12..15,24,25)); 54238384Sjkim# ($s0,$s1,$s2,$s3,$s4,$s5,$s6,$s7)=map("\$$_",(16..23)); 55238384Sjkim# ($gp,$sp,$fp,$ra)=map("\$$_",(28..31)); 56238384Sjkim# 57290207Sjkim$flavour = shift || "o32"; # supported flavours are o32,n32,64,nubi32,nubi64 58238384Sjkim 59238384Sjkimif ($flavour =~ /64|n32/i) { 60238384Sjkim $PTR_ADD="dadd"; # incidentally works even on n32 61238384Sjkim $PTR_SUB="dsub"; # incidentally works even on n32 62290207Sjkim $PTR_INS="dins"; 63238384Sjkim $REG_S="sd"; 64238384Sjkim $REG_L="ld"; 65238384Sjkim $PTR_SLL="dsll"; # incidentally works even on n32 66238384Sjkim $SZREG=8; 67238384Sjkim} else { 68238384Sjkim $PTR_ADD="add"; 69238384Sjkim $PTR_SUB="sub"; 70290207Sjkim $PTR_INS="ins"; 71238384Sjkim $REG_S="sw"; 72238384Sjkim $REG_L="lw"; 73238384Sjkim $PTR_SLL="sll"; 74238384Sjkim $SZREG=4; 75238384Sjkim} 76238384Sjkim$pf = ($flavour =~ /nubi/i) ? $t0 : $t2; 77238384Sjkim# 78238384Sjkim# <appro@openssl.org> 79238384Sjkim# 80238384Sjkim###################################################################### 81238384Sjkim 82276861Sjkim$big_endian=(`echo MIPSEL | $ENV{CC} -E -`=~/MIPSEL/)?1:0 if ($ENV{CC}); 83238384Sjkim 84238384Sjkimfor (@ARGV) { $output=$_ if (/^\w[\w\-]*\.\w+$/); } 85238384Sjkimopen STDOUT,">$output"; 86238384Sjkim 87238384Sjkimif (!defined($big_endian)) 88238384Sjkim{ $big_endian=(unpack('L',pack('N',1))==1); } 89238384Sjkim 90238384Sjkimwhile (($output=shift) && ($output!~/^\w[\w\-]*\.\w+$/)) {} 91238384Sjkimopen STDOUT,">$output"; 92238384Sjkim 93238384Sjkimmy ($MSB,$LSB)=(0,3); # automatically converted to little-endian 94238384Sjkim 95238384Sjkim$code.=<<___; 96238384Sjkim.text 97238384Sjkim#ifdef OPENSSL_FIPSCANISTER 98238384Sjkim# include <openssl/fipssyms.h> 99238384Sjkim#endif 100238384Sjkim 101290207Sjkim#if defined(__mips_smartmips) && !defined(_MIPS_ARCH_MIPS32R2) 102290207Sjkim#define _MIPS_ARCH_MIPS32R2 103290207Sjkim#endif 104290207Sjkim 105290207Sjkim#if !defined(__mips_eabi) && (!defined(__vxworks) || defined(__pic__)) 106238384Sjkim.option pic2 107238384Sjkim#endif 108238384Sjkim.set noat 109238384Sjkim___ 110238384Sjkim 111238384Sjkim{{{ 112238384Sjkimmy $FRAMESIZE=16*$SZREG; 113238384Sjkimmy $SAVED_REGS_MASK = ($flavour =~ /nubi/i) ? 0xc0fff008 : 0xc0ff0000; 114238384Sjkim 115238384Sjkimmy ($inp,$out,$key,$Tbl,$s0,$s1,$s2,$s3)=($a0,$a1,$a2,$a3,$a4,$a5,$a6,$a7); 116238384Sjkimmy ($i0,$i1,$i2,$i3)=($at,$t0,$t1,$t2); 117238384Sjkimmy ($t0,$t1,$t2,$t3,$t4,$t5,$t6,$t7,$t8,$t9,$t10,$t11) = map("\$$_",(12..23)); 118238384Sjkimmy ($key0,$cnt)=($gp,$fp); 119238384Sjkim 120238384Sjkim# instuction ordering is "stolen" from output from MIPSpro assembler 121238384Sjkim# invoked with -mips3 -O3 arguments... 122238384Sjkim$code.=<<___; 123238384Sjkim.align 5 124238384Sjkim.ent _mips_AES_encrypt 125238384Sjkim_mips_AES_encrypt: 126238384Sjkim .frame $sp,0,$ra 127238384Sjkim .set reorder 128238384Sjkim lw $t0,0($key) 129238384Sjkim lw $t1,4($key) 130238384Sjkim lw $t2,8($key) 131238384Sjkim lw $t3,12($key) 132238384Sjkim lw $cnt,240($key) 133238384Sjkim $PTR_ADD $key0,$key,16 134238384Sjkim 135238384Sjkim xor $s0,$t0 136238384Sjkim xor $s1,$t1 137238384Sjkim xor $s2,$t2 138238384Sjkim xor $s3,$t3 139238384Sjkim 140238384Sjkim sub $cnt,1 141290207Sjkim#if defined(__mips_smartmips) 142290207Sjkim ext $i0,$s1,16,8 143290207Sjkim.Loop_enc: 144290207Sjkim ext $i1,$s2,16,8 145290207Sjkim ext $i2,$s3,16,8 146290207Sjkim ext $i3,$s0,16,8 147290207Sjkim lwxs $t0,$i0($Tbl) # Te1[s1>>16] 148290207Sjkim ext $i0,$s2,8,8 149290207Sjkim lwxs $t1,$i1($Tbl) # Te1[s2>>16] 150290207Sjkim ext $i1,$s3,8,8 151290207Sjkim lwxs $t2,$i2($Tbl) # Te1[s3>>16] 152290207Sjkim ext $i2,$s0,8,8 153290207Sjkim lwxs $t3,$i3($Tbl) # Te1[s0>>16] 154290207Sjkim ext $i3,$s1,8,8 155290207Sjkim 156290207Sjkim lwxs $t4,$i0($Tbl) # Te2[s2>>8] 157290207Sjkim ext $i0,$s3,0,8 158290207Sjkim lwxs $t5,$i1($Tbl) # Te2[s3>>8] 159290207Sjkim ext $i1,$s0,0,8 160290207Sjkim lwxs $t6,$i2($Tbl) # Te2[s0>>8] 161290207Sjkim ext $i2,$s1,0,8 162290207Sjkim lwxs $t7,$i3($Tbl) # Te2[s1>>8] 163290207Sjkim ext $i3,$s2,0,8 164290207Sjkim 165290207Sjkim lwxs $t8,$i0($Tbl) # Te3[s3] 166290207Sjkim ext $i0,$s0,24,8 167290207Sjkim lwxs $t9,$i1($Tbl) # Te3[s0] 168290207Sjkim ext $i1,$s1,24,8 169290207Sjkim lwxs $t10,$i2($Tbl) # Te3[s1] 170290207Sjkim ext $i2,$s2,24,8 171290207Sjkim lwxs $t11,$i3($Tbl) # Te3[s2] 172290207Sjkim ext $i3,$s3,24,8 173290207Sjkim 174290207Sjkim rotr $t0,$t0,8 175290207Sjkim rotr $t1,$t1,8 176290207Sjkim rotr $t2,$t2,8 177290207Sjkim rotr $t3,$t3,8 178290207Sjkim 179290207Sjkim rotr $t4,$t4,16 180290207Sjkim rotr $t5,$t5,16 181290207Sjkim rotr $t6,$t6,16 182290207Sjkim rotr $t7,$t7,16 183290207Sjkim 184290207Sjkim xor $t0,$t4 185290207Sjkim lwxs $t4,$i0($Tbl) # Te0[s0>>24] 186290207Sjkim xor $t1,$t5 187290207Sjkim lwxs $t5,$i1($Tbl) # Te0[s1>>24] 188290207Sjkim xor $t2,$t6 189290207Sjkim lwxs $t6,$i2($Tbl) # Te0[s2>>24] 190290207Sjkim xor $t3,$t7 191290207Sjkim lwxs $t7,$i3($Tbl) # Te0[s3>>24] 192290207Sjkim 193290207Sjkim rotr $t8,$t8,24 194290207Sjkim lw $s0,0($key0) 195290207Sjkim rotr $t9,$t9,24 196290207Sjkim lw $s1,4($key0) 197290207Sjkim rotr $t10,$t10,24 198290207Sjkim lw $s2,8($key0) 199290207Sjkim rotr $t11,$t11,24 200290207Sjkim lw $s3,12($key0) 201290207Sjkim 202290207Sjkim xor $t0,$t8 203290207Sjkim xor $t1,$t9 204290207Sjkim xor $t2,$t10 205290207Sjkim xor $t3,$t11 206290207Sjkim 207290207Sjkim xor $t0,$t4 208290207Sjkim xor $t1,$t5 209290207Sjkim xor $t2,$t6 210290207Sjkim xor $t3,$t7 211290207Sjkim 212290207Sjkim sub $cnt,1 213290207Sjkim $PTR_ADD $key0,16 214290207Sjkim xor $s0,$t0 215290207Sjkim xor $s1,$t1 216290207Sjkim xor $s2,$t2 217290207Sjkim xor $s3,$t3 218290207Sjkim .set noreorder 219290207Sjkim bnez $cnt,.Loop_enc 220290207Sjkim ext $i0,$s1,16,8 221290207Sjkim 222238384Sjkim _xtr $i0,$s1,16-2 223290207Sjkim#else 224290207Sjkim _xtr $i0,$s1,16-2 225238384Sjkim.Loop_enc: 226238384Sjkim _xtr $i1,$s2,16-2 227238384Sjkim _xtr $i2,$s3,16-2 228238384Sjkim _xtr $i3,$s0,16-2 229238384Sjkim and $i0,0x3fc 230238384Sjkim and $i1,0x3fc 231238384Sjkim and $i2,0x3fc 232238384Sjkim and $i3,0x3fc 233238384Sjkim $PTR_ADD $i0,$Tbl 234238384Sjkim $PTR_ADD $i1,$Tbl 235238384Sjkim $PTR_ADD $i2,$Tbl 236238384Sjkim $PTR_ADD $i3,$Tbl 237290207Sjkim#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 238290207Sjkim lw $t0,0($i0) # Te1[s1>>16] 239290207Sjkim _xtr $i0,$s2,8-2 240290207Sjkim lw $t1,0($i1) # Te1[s2>>16] 241290207Sjkim _xtr $i1,$s3,8-2 242290207Sjkim lw $t2,0($i2) # Te1[s3>>16] 243290207Sjkim _xtr $i2,$s0,8-2 244290207Sjkim lw $t3,0($i3) # Te1[s0>>16] 245290207Sjkim _xtr $i3,$s1,8-2 246290207Sjkim#else 247238384Sjkim lwl $t0,3($i0) # Te1[s1>>16] 248238384Sjkim lwl $t1,3($i1) # Te1[s2>>16] 249238384Sjkim lwl $t2,3($i2) # Te1[s3>>16] 250238384Sjkim lwl $t3,3($i3) # Te1[s0>>16] 251238384Sjkim lwr $t0,2($i0) # Te1[s1>>16] 252290207Sjkim _xtr $i0,$s2,8-2 253238384Sjkim lwr $t1,2($i1) # Te1[s2>>16] 254290207Sjkim _xtr $i1,$s3,8-2 255238384Sjkim lwr $t2,2($i2) # Te1[s3>>16] 256290207Sjkim _xtr $i2,$s0,8-2 257238384Sjkim lwr $t3,2($i3) # Te1[s0>>16] 258238384Sjkim _xtr $i3,$s1,8-2 259290207Sjkim#endif 260238384Sjkim and $i0,0x3fc 261238384Sjkim and $i1,0x3fc 262238384Sjkim and $i2,0x3fc 263238384Sjkim and $i3,0x3fc 264238384Sjkim $PTR_ADD $i0,$Tbl 265238384Sjkim $PTR_ADD $i1,$Tbl 266238384Sjkim $PTR_ADD $i2,$Tbl 267238384Sjkim $PTR_ADD $i3,$Tbl 268290207Sjkim#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 269290207Sjkim rotr $t0,$t0,8 270290207Sjkim rotr $t1,$t1,8 271290207Sjkim rotr $t2,$t2,8 272290207Sjkim rotr $t3,$t3,8 273290207Sjkim# if defined(_MIPSEL) 274290207Sjkim lw $t4,0($i0) # Te2[s2>>8] 275290207Sjkim _xtr $i0,$s3,0-2 276290207Sjkim lw $t5,0($i1) # Te2[s3>>8] 277290207Sjkim _xtr $i1,$s0,0-2 278290207Sjkim lw $t6,0($i2) # Te2[s0>>8] 279290207Sjkim _xtr $i2,$s1,0-2 280290207Sjkim lw $t7,0($i3) # Te2[s1>>8] 281290207Sjkim _xtr $i3,$s2,0-2 282290207Sjkim 283290207Sjkim and $i0,0x3fc 284290207Sjkim and $i1,0x3fc 285290207Sjkim and $i2,0x3fc 286290207Sjkim and $i3,0x3fc 287290207Sjkim $PTR_ADD $i0,$Tbl 288290207Sjkim $PTR_ADD $i1,$Tbl 289290207Sjkim $PTR_ADD $i2,$Tbl 290290207Sjkim $PTR_ADD $i3,$Tbl 291290207Sjkim lw $t8,0($i0) # Te3[s3] 292290207Sjkim $PTR_INS $i0,$s0,2,8 293290207Sjkim lw $t9,0($i1) # Te3[s0] 294290207Sjkim $PTR_INS $i1,$s1,2,8 295290207Sjkim lw $t10,0($i2) # Te3[s1] 296290207Sjkim $PTR_INS $i2,$s2,2,8 297290207Sjkim lw $t11,0($i3) # Te3[s2] 298290207Sjkim $PTR_INS $i3,$s3,2,8 299290207Sjkim# else 300290207Sjkim lw $t4,0($i0) # Te2[s2>>8] 301290207Sjkim $PTR_INS $i0,$s3,2,8 302290207Sjkim lw $t5,0($i1) # Te2[s3>>8] 303290207Sjkim $PTR_INS $i1,$s0,2,8 304290207Sjkim lw $t6,0($i2) # Te2[s0>>8] 305290207Sjkim $PTR_INS $i2,$s1,2,8 306290207Sjkim lw $t7,0($i3) # Te2[s1>>8] 307290207Sjkim $PTR_INS $i3,$s2,2,8 308290207Sjkim 309290207Sjkim lw $t8,0($i0) # Te3[s3] 310290207Sjkim _xtr $i0,$s0,24-2 311290207Sjkim lw $t9,0($i1) # Te3[s0] 312290207Sjkim _xtr $i1,$s1,24-2 313290207Sjkim lw $t10,0($i2) # Te3[s1] 314290207Sjkim _xtr $i2,$s2,24-2 315290207Sjkim lw $t11,0($i3) # Te3[s2] 316290207Sjkim _xtr $i3,$s3,24-2 317290207Sjkim 318290207Sjkim and $i0,0x3fc 319290207Sjkim and $i1,0x3fc 320290207Sjkim and $i2,0x3fc 321290207Sjkim and $i3,0x3fc 322290207Sjkim $PTR_ADD $i0,$Tbl 323290207Sjkim $PTR_ADD $i1,$Tbl 324290207Sjkim $PTR_ADD $i2,$Tbl 325290207Sjkim $PTR_ADD $i3,$Tbl 326290207Sjkim# endif 327290207Sjkim rotr $t4,$t4,16 328290207Sjkim rotr $t5,$t5,16 329290207Sjkim rotr $t6,$t6,16 330290207Sjkim rotr $t7,$t7,16 331290207Sjkim 332290207Sjkim rotr $t8,$t8,24 333290207Sjkim rotr $t9,$t9,24 334290207Sjkim rotr $t10,$t10,24 335290207Sjkim rotr $t11,$t11,24 336290207Sjkim#else 337238384Sjkim lwl $t4,2($i0) # Te2[s2>>8] 338238384Sjkim lwl $t5,2($i1) # Te2[s3>>8] 339238384Sjkim lwl $t6,2($i2) # Te2[s0>>8] 340238384Sjkim lwl $t7,2($i3) # Te2[s1>>8] 341238384Sjkim lwr $t4,1($i0) # Te2[s2>>8] 342290207Sjkim _xtr $i0,$s3,0-2 343238384Sjkim lwr $t5,1($i1) # Te2[s3>>8] 344290207Sjkim _xtr $i1,$s0,0-2 345238384Sjkim lwr $t6,1($i2) # Te2[s0>>8] 346290207Sjkim _xtr $i2,$s1,0-2 347238384Sjkim lwr $t7,1($i3) # Te2[s1>>8] 348290207Sjkim _xtr $i3,$s2,0-2 349238384Sjkim 350238384Sjkim and $i0,0x3fc 351238384Sjkim and $i1,0x3fc 352238384Sjkim and $i2,0x3fc 353238384Sjkim and $i3,0x3fc 354238384Sjkim $PTR_ADD $i0,$Tbl 355238384Sjkim $PTR_ADD $i1,$Tbl 356238384Sjkim $PTR_ADD $i2,$Tbl 357238384Sjkim $PTR_ADD $i3,$Tbl 358238384Sjkim lwl $t8,1($i0) # Te3[s3] 359238384Sjkim lwl $t9,1($i1) # Te3[s0] 360238384Sjkim lwl $t10,1($i2) # Te3[s1] 361238384Sjkim lwl $t11,1($i3) # Te3[s2] 362238384Sjkim lwr $t8,0($i0) # Te3[s3] 363290207Sjkim _xtr $i0,$s0,24-2 364238384Sjkim lwr $t9,0($i1) # Te3[s0] 365290207Sjkim _xtr $i1,$s1,24-2 366238384Sjkim lwr $t10,0($i2) # Te3[s1] 367290207Sjkim _xtr $i2,$s2,24-2 368238384Sjkim lwr $t11,0($i3) # Te3[s2] 369290207Sjkim _xtr $i3,$s3,24-2 370238384Sjkim 371238384Sjkim and $i0,0x3fc 372238384Sjkim and $i1,0x3fc 373238384Sjkim and $i2,0x3fc 374238384Sjkim and $i3,0x3fc 375238384Sjkim $PTR_ADD $i0,$Tbl 376238384Sjkim $PTR_ADD $i1,$Tbl 377238384Sjkim $PTR_ADD $i2,$Tbl 378238384Sjkim $PTR_ADD $i3,$Tbl 379290207Sjkim#endif 380238384Sjkim xor $t0,$t4 381290207Sjkim lw $t4,0($i0) # Te0[s0>>24] 382238384Sjkim xor $t1,$t5 383290207Sjkim lw $t5,0($i1) # Te0[s1>>24] 384238384Sjkim xor $t2,$t6 385290207Sjkim lw $t6,0($i2) # Te0[s2>>24] 386238384Sjkim xor $t3,$t7 387238384Sjkim lw $t7,0($i3) # Te0[s3>>24] 388238384Sjkim 389290207Sjkim xor $t0,$t8 390238384Sjkim lw $s0,0($key0) 391290207Sjkim xor $t1,$t9 392238384Sjkim lw $s1,4($key0) 393290207Sjkim xor $t2,$t10 394238384Sjkim lw $s2,8($key0) 395290207Sjkim xor $t3,$t11 396238384Sjkim lw $s3,12($key0) 397238384Sjkim 398238384Sjkim xor $t0,$t4 399238384Sjkim xor $t1,$t5 400238384Sjkim xor $t2,$t6 401238384Sjkim xor $t3,$t7 402238384Sjkim 403238384Sjkim sub $cnt,1 404238384Sjkim $PTR_ADD $key0,16 405238384Sjkim xor $s0,$t0 406238384Sjkim xor $s1,$t1 407238384Sjkim xor $s2,$t2 408238384Sjkim xor $s3,$t3 409238384Sjkim .set noreorder 410238384Sjkim bnez $cnt,.Loop_enc 411238384Sjkim _xtr $i0,$s1,16-2 412290207Sjkim#endif 413238384Sjkim 414238384Sjkim .set reorder 415238384Sjkim _xtr $i1,$s2,16-2 416238384Sjkim _xtr $i2,$s3,16-2 417238384Sjkim _xtr $i3,$s0,16-2 418238384Sjkim and $i0,0x3fc 419238384Sjkim and $i1,0x3fc 420238384Sjkim and $i2,0x3fc 421238384Sjkim and $i3,0x3fc 422238384Sjkim $PTR_ADD $i0,$Tbl 423238384Sjkim $PTR_ADD $i1,$Tbl 424238384Sjkim $PTR_ADD $i2,$Tbl 425238384Sjkim $PTR_ADD $i3,$Tbl 426238384Sjkim lbu $t0,2($i0) # Te4[s1>>16] 427290207Sjkim _xtr $i0,$s2,8-2 428238384Sjkim lbu $t1,2($i1) # Te4[s2>>16] 429290207Sjkim _xtr $i1,$s3,8-2 430238384Sjkim lbu $t2,2($i2) # Te4[s3>>16] 431290207Sjkim _xtr $i2,$s0,8-2 432238384Sjkim lbu $t3,2($i3) # Te4[s0>>16] 433290207Sjkim _xtr $i3,$s1,8-2 434238384Sjkim 435238384Sjkim and $i0,0x3fc 436238384Sjkim and $i1,0x3fc 437238384Sjkim and $i2,0x3fc 438238384Sjkim and $i3,0x3fc 439238384Sjkim $PTR_ADD $i0,$Tbl 440238384Sjkim $PTR_ADD $i1,$Tbl 441238384Sjkim $PTR_ADD $i2,$Tbl 442238384Sjkim $PTR_ADD $i3,$Tbl 443290207Sjkim#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 444290207Sjkim# if defined(_MIPSEL) 445238384Sjkim lbu $t4,2($i0) # Te4[s2>>8] 446290207Sjkim $PTR_INS $i0,$s0,2,8 447238384Sjkim lbu $t5,2($i1) # Te4[s3>>8] 448290207Sjkim $PTR_INS $i1,$s1,2,8 449238384Sjkim lbu $t6,2($i2) # Te4[s0>>8] 450290207Sjkim $PTR_INS $i2,$s2,2,8 451238384Sjkim lbu $t7,2($i3) # Te4[s1>>8] 452290207Sjkim $PTR_INS $i3,$s3,2,8 453238384Sjkim 454290207Sjkim lbu $t8,2($i0) # Te4[s0>>24] 455290207Sjkim _xtr $i0,$s3,0-2 456290207Sjkim lbu $t9,2($i1) # Te4[s1>>24] 457290207Sjkim _xtr $i1,$s0,0-2 458290207Sjkim lbu $t10,2($i2) # Te4[s2>>24] 459290207Sjkim _xtr $i2,$s1,0-2 460290207Sjkim lbu $t11,2($i3) # Te4[s3>>24] 461290207Sjkim _xtr $i3,$s2,0-2 462290207Sjkim 463290207Sjkim and $i0,0x3fc 464290207Sjkim and $i1,0x3fc 465290207Sjkim and $i2,0x3fc 466290207Sjkim and $i3,0x3fc 467290207Sjkim $PTR_ADD $i0,$Tbl 468290207Sjkim $PTR_ADD $i1,$Tbl 469290207Sjkim $PTR_ADD $i2,$Tbl 470290207Sjkim $PTR_ADD $i3,$Tbl 471290207Sjkim# else 472290207Sjkim lbu $t4,2($i0) # Te4[s2>>8] 473238384Sjkim _xtr $i0,$s0,24-2 474290207Sjkim lbu $t5,2($i1) # Te4[s3>>8] 475238384Sjkim _xtr $i1,$s1,24-2 476290207Sjkim lbu $t6,2($i2) # Te4[s0>>8] 477238384Sjkim _xtr $i2,$s2,24-2 478290207Sjkim lbu $t7,2($i3) # Te4[s1>>8] 479238384Sjkim _xtr $i3,$s3,24-2 480290207Sjkim 481238384Sjkim and $i0,0x3fc 482238384Sjkim and $i1,0x3fc 483238384Sjkim and $i2,0x3fc 484238384Sjkim and $i3,0x3fc 485238384Sjkim $PTR_ADD $i0,$Tbl 486238384Sjkim $PTR_ADD $i1,$Tbl 487238384Sjkim $PTR_ADD $i2,$Tbl 488238384Sjkim $PTR_ADD $i3,$Tbl 489238384Sjkim lbu $t8,2($i0) # Te4[s0>>24] 490290207Sjkim $PTR_INS $i0,$s3,2,8 491238384Sjkim lbu $t9,2($i1) # Te4[s1>>24] 492290207Sjkim $PTR_INS $i1,$s0,2,8 493238384Sjkim lbu $t10,2($i2) # Te4[s2>>24] 494290207Sjkim $PTR_INS $i2,$s1,2,8 495238384Sjkim lbu $t11,2($i3) # Te4[s3>>24] 496290207Sjkim $PTR_INS $i3,$s2,2,8 497290207Sjkim# endif 498290207Sjkim _ins $t0,16 499290207Sjkim _ins $t1,16 500290207Sjkim _ins $t2,16 501290207Sjkim _ins $t3,16 502238384Sjkim 503290207Sjkim _ins2 $t0,$t4,8 504290207Sjkim lbu $t4,2($i0) # Te4[s3] 505290207Sjkim _ins2 $t1,$t5,8 506290207Sjkim lbu $t5,2($i1) # Te4[s0] 507290207Sjkim _ins2 $t2,$t6,8 508290207Sjkim lbu $t6,2($i2) # Te4[s1] 509290207Sjkim _ins2 $t3,$t7,8 510290207Sjkim lbu $t7,2($i3) # Te4[s2] 511290207Sjkim 512290207Sjkim _ins2 $t0,$t8,24 513290207Sjkim lw $s0,0($key0) 514290207Sjkim _ins2 $t1,$t9,24 515290207Sjkim lw $s1,4($key0) 516290207Sjkim _ins2 $t2,$t10,24 517290207Sjkim lw $s2,8($key0) 518290207Sjkim _ins2 $t3,$t11,24 519290207Sjkim lw $s3,12($key0) 520290207Sjkim 521290207Sjkim _ins2 $t0,$t4,0 522290207Sjkim _ins2 $t1,$t5,0 523290207Sjkim _ins2 $t2,$t6,0 524290207Sjkim _ins2 $t3,$t7,0 525290207Sjkim#else 526290207Sjkim lbu $t4,2($i0) # Te4[s2>>8] 527290207Sjkim _xtr $i0,$s0,24-2 528290207Sjkim lbu $t5,2($i1) # Te4[s3>>8] 529290207Sjkim _xtr $i1,$s1,24-2 530290207Sjkim lbu $t6,2($i2) # Te4[s0>>8] 531290207Sjkim _xtr $i2,$s2,24-2 532290207Sjkim lbu $t7,2($i3) # Te4[s1>>8] 533290207Sjkim _xtr $i3,$s3,24-2 534290207Sjkim 535290207Sjkim and $i0,0x3fc 536290207Sjkim and $i1,0x3fc 537290207Sjkim and $i2,0x3fc 538290207Sjkim and $i3,0x3fc 539290207Sjkim $PTR_ADD $i0,$Tbl 540290207Sjkim $PTR_ADD $i1,$Tbl 541290207Sjkim $PTR_ADD $i2,$Tbl 542290207Sjkim $PTR_ADD $i3,$Tbl 543290207Sjkim lbu $t8,2($i0) # Te4[s0>>24] 544238384Sjkim _xtr $i0,$s3,0-2 545290207Sjkim lbu $t9,2($i1) # Te4[s1>>24] 546238384Sjkim _xtr $i1,$s0,0-2 547290207Sjkim lbu $t10,2($i2) # Te4[s2>>24] 548238384Sjkim _xtr $i2,$s1,0-2 549290207Sjkim lbu $t11,2($i3) # Te4[s3>>24] 550238384Sjkim _xtr $i3,$s2,0-2 551290207Sjkim 552238384Sjkim and $i0,0x3fc 553238384Sjkim and $i1,0x3fc 554238384Sjkim and $i2,0x3fc 555238384Sjkim and $i3,0x3fc 556290207Sjkim $PTR_ADD $i0,$Tbl 557290207Sjkim $PTR_ADD $i1,$Tbl 558290207Sjkim $PTR_ADD $i2,$Tbl 559290207Sjkim $PTR_ADD $i3,$Tbl 560238384Sjkim 561238384Sjkim _ins $t0,16 562238384Sjkim _ins $t1,16 563238384Sjkim _ins $t2,16 564238384Sjkim _ins $t3,16 565238384Sjkim 566238384Sjkim _ins $t4,8 567238384Sjkim _ins $t5,8 568238384Sjkim _ins $t6,8 569238384Sjkim _ins $t7,8 570238384Sjkim 571238384Sjkim xor $t0,$t4 572290207Sjkim lbu $t4,2($i0) # Te4[s3] 573238384Sjkim xor $t1,$t5 574290207Sjkim lbu $t5,2($i1) # Te4[s0] 575238384Sjkim xor $t2,$t6 576290207Sjkim lbu $t6,2($i2) # Te4[s1] 577238384Sjkim xor $t3,$t7 578238384Sjkim lbu $t7,2($i3) # Te4[s2] 579238384Sjkim 580238384Sjkim _ins $t8,24 581290207Sjkim lw $s0,0($key0) 582238384Sjkim _ins $t9,24 583290207Sjkim lw $s1,4($key0) 584238384Sjkim _ins $t10,24 585290207Sjkim lw $s2,8($key0) 586238384Sjkim _ins $t11,24 587238384Sjkim lw $s3,12($key0) 588238384Sjkim 589238384Sjkim xor $t0,$t8 590238384Sjkim xor $t1,$t9 591238384Sjkim xor $t2,$t10 592238384Sjkim xor $t3,$t11 593238384Sjkim 594238384Sjkim _ins $t4,0 595238384Sjkim _ins $t5,0 596238384Sjkim _ins $t6,0 597238384Sjkim _ins $t7,0 598238384Sjkim 599238384Sjkim xor $t0,$t4 600238384Sjkim xor $t1,$t5 601238384Sjkim xor $t2,$t6 602238384Sjkim xor $t3,$t7 603290207Sjkim#endif 604238384Sjkim xor $s0,$t0 605238384Sjkim xor $s1,$t1 606238384Sjkim xor $s2,$t2 607238384Sjkim xor $s3,$t3 608238384Sjkim 609238384Sjkim jr $ra 610238384Sjkim.end _mips_AES_encrypt 611238384Sjkim 612238384Sjkim.align 5 613238384Sjkim.globl AES_encrypt 614238384Sjkim.ent AES_encrypt 615238384SjkimAES_encrypt: 616238384Sjkim .frame $sp,$FRAMESIZE,$ra 617238384Sjkim .mask $SAVED_REGS_MASK,-$SZREG 618238384Sjkim .set noreorder 619238384Sjkim___ 620238384Sjkim$code.=<<___ if ($flavour =~ /o32/i); # o32 PIC-ification 621238384Sjkim .cpload $pf 622238384Sjkim___ 623238384Sjkim$code.=<<___; 624238384Sjkim $PTR_SUB $sp,$FRAMESIZE 625238384Sjkim $REG_S $ra,$FRAMESIZE-1*$SZREG($sp) 626238384Sjkim $REG_S $fp,$FRAMESIZE-2*$SZREG($sp) 627238384Sjkim $REG_S $s11,$FRAMESIZE-3*$SZREG($sp) 628238384Sjkim $REG_S $s10,$FRAMESIZE-4*$SZREG($sp) 629238384Sjkim $REG_S $s9,$FRAMESIZE-5*$SZREG($sp) 630238384Sjkim $REG_S $s8,$FRAMESIZE-6*$SZREG($sp) 631238384Sjkim $REG_S $s7,$FRAMESIZE-7*$SZREG($sp) 632238384Sjkim $REG_S $s6,$FRAMESIZE-8*$SZREG($sp) 633238384Sjkim $REG_S $s5,$FRAMESIZE-9*$SZREG($sp) 634238384Sjkim $REG_S $s4,$FRAMESIZE-10*$SZREG($sp) 635238384Sjkim___ 636238384Sjkim$code.=<<___ if ($flavour =~ /nubi/i); # optimize non-nubi prologue 637238384Sjkim $REG_S \$15,$FRAMESIZE-11*$SZREG($sp) 638238384Sjkim $REG_S \$14,$FRAMESIZE-12*$SZREG($sp) 639238384Sjkim $REG_S \$13,$FRAMESIZE-13*$SZREG($sp) 640238384Sjkim $REG_S \$12,$FRAMESIZE-14*$SZREG($sp) 641238384Sjkim $REG_S $gp,$FRAMESIZE-15*$SZREG($sp) 642238384Sjkim___ 643238384Sjkim$code.=<<___ if ($flavour !~ /o32/i); # non-o32 PIC-ification 644238384Sjkim .cplocal $Tbl 645238384Sjkim .cpsetup $pf,$zero,AES_encrypt 646238384Sjkim___ 647238384Sjkim$code.=<<___; 648238384Sjkim .set reorder 649238384Sjkim la $Tbl,AES_Te # PIC-ified 'load address' 650238384Sjkim 651238384Sjkim lwl $s0,0+$MSB($inp) 652238384Sjkim lwl $s1,4+$MSB($inp) 653238384Sjkim lwl $s2,8+$MSB($inp) 654238384Sjkim lwl $s3,12+$MSB($inp) 655238384Sjkim lwr $s0,0+$LSB($inp) 656238384Sjkim lwr $s1,4+$LSB($inp) 657238384Sjkim lwr $s2,8+$LSB($inp) 658238384Sjkim lwr $s3,12+$LSB($inp) 659238384Sjkim 660238384Sjkim bal _mips_AES_encrypt 661238384Sjkim 662238384Sjkim swr $s0,0+$LSB($out) 663238384Sjkim swr $s1,4+$LSB($out) 664238384Sjkim swr $s2,8+$LSB($out) 665238384Sjkim swr $s3,12+$LSB($out) 666238384Sjkim swl $s0,0+$MSB($out) 667238384Sjkim swl $s1,4+$MSB($out) 668238384Sjkim swl $s2,8+$MSB($out) 669238384Sjkim swl $s3,12+$MSB($out) 670238384Sjkim 671238384Sjkim .set noreorder 672238384Sjkim $REG_L $ra,$FRAMESIZE-1*$SZREG($sp) 673238384Sjkim $REG_L $fp,$FRAMESIZE-2*$SZREG($sp) 674238384Sjkim $REG_L $s11,$FRAMESIZE-3*$SZREG($sp) 675238384Sjkim $REG_L $s10,$FRAMESIZE-4*$SZREG($sp) 676238384Sjkim $REG_L $s9,$FRAMESIZE-5*$SZREG($sp) 677238384Sjkim $REG_L $s8,$FRAMESIZE-6*$SZREG($sp) 678238384Sjkim $REG_L $s7,$FRAMESIZE-7*$SZREG($sp) 679238384Sjkim $REG_L $s6,$FRAMESIZE-8*$SZREG($sp) 680238384Sjkim $REG_L $s5,$FRAMESIZE-9*$SZREG($sp) 681238384Sjkim $REG_L $s4,$FRAMESIZE-10*$SZREG($sp) 682238384Sjkim___ 683238384Sjkim$code.=<<___ if ($flavour =~ /nubi/i); 684238384Sjkim $REG_L \$15,$FRAMESIZE-11*$SZREG($sp) 685238384Sjkim $REG_L \$14,$FRAMESIZE-12*$SZREG($sp) 686238384Sjkim $REG_L \$13,$FRAMESIZE-13*$SZREG($sp) 687238384Sjkim $REG_L \$12,$FRAMESIZE-14*$SZREG($sp) 688238384Sjkim $REG_L $gp,$FRAMESIZE-15*$SZREG($sp) 689238384Sjkim___ 690238384Sjkim$code.=<<___; 691238384Sjkim jr $ra 692238384Sjkim $PTR_ADD $sp,$FRAMESIZE 693238384Sjkim.end AES_encrypt 694238384Sjkim___ 695238384Sjkim 696238384Sjkim$code.=<<___; 697238384Sjkim.align 5 698238384Sjkim.ent _mips_AES_decrypt 699238384Sjkim_mips_AES_decrypt: 700238384Sjkim .frame $sp,0,$ra 701238384Sjkim .set reorder 702238384Sjkim lw $t0,0($key) 703238384Sjkim lw $t1,4($key) 704238384Sjkim lw $t2,8($key) 705238384Sjkim lw $t3,12($key) 706238384Sjkim lw $cnt,240($key) 707238384Sjkim $PTR_ADD $key0,$key,16 708238384Sjkim 709238384Sjkim xor $s0,$t0 710238384Sjkim xor $s1,$t1 711238384Sjkim xor $s2,$t2 712238384Sjkim xor $s3,$t3 713238384Sjkim 714238384Sjkim sub $cnt,1 715290207Sjkim#if defined(__mips_smartmips) 716290207Sjkim ext $i0,$s3,16,8 717290207Sjkim.Loop_dec: 718290207Sjkim ext $i1,$s0,16,8 719290207Sjkim ext $i2,$s1,16,8 720290207Sjkim ext $i3,$s2,16,8 721290207Sjkim lwxs $t0,$i0($Tbl) # Td1[s3>>16] 722290207Sjkim ext $i0,$s2,8,8 723290207Sjkim lwxs $t1,$i1($Tbl) # Td1[s0>>16] 724290207Sjkim ext $i1,$s3,8,8 725290207Sjkim lwxs $t2,$i2($Tbl) # Td1[s1>>16] 726290207Sjkim ext $i2,$s0,8,8 727290207Sjkim lwxs $t3,$i3($Tbl) # Td1[s2>>16] 728290207Sjkim ext $i3,$s1,8,8 729290207Sjkim 730290207Sjkim lwxs $t4,$i0($Tbl) # Td2[s2>>8] 731290207Sjkim ext $i0,$s1,0,8 732290207Sjkim lwxs $t5,$i1($Tbl) # Td2[s3>>8] 733290207Sjkim ext $i1,$s2,0,8 734290207Sjkim lwxs $t6,$i2($Tbl) # Td2[s0>>8] 735290207Sjkim ext $i2,$s3,0,8 736290207Sjkim lwxs $t7,$i3($Tbl) # Td2[s1>>8] 737290207Sjkim ext $i3,$s0,0,8 738290207Sjkim 739290207Sjkim lwxs $t8,$i0($Tbl) # Td3[s1] 740290207Sjkim ext $i0,$s0,24,8 741290207Sjkim lwxs $t9,$i1($Tbl) # Td3[s2] 742290207Sjkim ext $i1,$s1,24,8 743290207Sjkim lwxs $t10,$i2($Tbl) # Td3[s3] 744290207Sjkim ext $i2,$s2,24,8 745290207Sjkim lwxs $t11,$i3($Tbl) # Td3[s0] 746290207Sjkim ext $i3,$s3,24,8 747290207Sjkim 748290207Sjkim rotr $t0,$t0,8 749290207Sjkim rotr $t1,$t1,8 750290207Sjkim rotr $t2,$t2,8 751290207Sjkim rotr $t3,$t3,8 752290207Sjkim 753290207Sjkim rotr $t4,$t4,16 754290207Sjkim rotr $t5,$t5,16 755290207Sjkim rotr $t6,$t6,16 756290207Sjkim rotr $t7,$t7,16 757290207Sjkim 758290207Sjkim xor $t0,$t4 759290207Sjkim lwxs $t4,$i0($Tbl) # Td0[s0>>24] 760290207Sjkim xor $t1,$t5 761290207Sjkim lwxs $t5,$i1($Tbl) # Td0[s1>>24] 762290207Sjkim xor $t2,$t6 763290207Sjkim lwxs $t6,$i2($Tbl) # Td0[s2>>24] 764290207Sjkim xor $t3,$t7 765290207Sjkim lwxs $t7,$i3($Tbl) # Td0[s3>>24] 766290207Sjkim 767290207Sjkim rotr $t8,$t8,24 768290207Sjkim lw $s0,0($key0) 769290207Sjkim rotr $t9,$t9,24 770290207Sjkim lw $s1,4($key0) 771290207Sjkim rotr $t10,$t10,24 772290207Sjkim lw $s2,8($key0) 773290207Sjkim rotr $t11,$t11,24 774290207Sjkim lw $s3,12($key0) 775290207Sjkim 776290207Sjkim xor $t0,$t8 777290207Sjkim xor $t1,$t9 778290207Sjkim xor $t2,$t10 779290207Sjkim xor $t3,$t11 780290207Sjkim 781290207Sjkim xor $t0,$t4 782290207Sjkim xor $t1,$t5 783290207Sjkim xor $t2,$t6 784290207Sjkim xor $t3,$t7 785290207Sjkim 786290207Sjkim sub $cnt,1 787290207Sjkim $PTR_ADD $key0,16 788290207Sjkim xor $s0,$t0 789290207Sjkim xor $s1,$t1 790290207Sjkim xor $s2,$t2 791290207Sjkim xor $s3,$t3 792290207Sjkim .set noreorder 793290207Sjkim bnez $cnt,.Loop_dec 794290207Sjkim ext $i0,$s3,16,8 795290207Sjkim 796238384Sjkim _xtr $i0,$s3,16-2 797290207Sjkim#else 798290207Sjkim _xtr $i0,$s3,16-2 799238384Sjkim.Loop_dec: 800238384Sjkim _xtr $i1,$s0,16-2 801238384Sjkim _xtr $i2,$s1,16-2 802238384Sjkim _xtr $i3,$s2,16-2 803238384Sjkim and $i0,0x3fc 804238384Sjkim and $i1,0x3fc 805238384Sjkim and $i2,0x3fc 806238384Sjkim and $i3,0x3fc 807238384Sjkim $PTR_ADD $i0,$Tbl 808238384Sjkim $PTR_ADD $i1,$Tbl 809238384Sjkim $PTR_ADD $i2,$Tbl 810238384Sjkim $PTR_ADD $i3,$Tbl 811290207Sjkim#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 812290207Sjkim lw $t0,0($i0) # Td1[s3>>16] 813290207Sjkim _xtr $i0,$s2,8-2 814290207Sjkim lw $t1,0($i1) # Td1[s0>>16] 815290207Sjkim _xtr $i1,$s3,8-2 816290207Sjkim lw $t2,0($i2) # Td1[s1>>16] 817290207Sjkim _xtr $i2,$s0,8-2 818290207Sjkim lw $t3,0($i3) # Td1[s2>>16] 819290207Sjkim _xtr $i3,$s1,8-2 820290207Sjkim#else 821238384Sjkim lwl $t0,3($i0) # Td1[s3>>16] 822238384Sjkim lwl $t1,3($i1) # Td1[s0>>16] 823238384Sjkim lwl $t2,3($i2) # Td1[s1>>16] 824238384Sjkim lwl $t3,3($i3) # Td1[s2>>16] 825238384Sjkim lwr $t0,2($i0) # Td1[s3>>16] 826290207Sjkim _xtr $i0,$s2,8-2 827238384Sjkim lwr $t1,2($i1) # Td1[s0>>16] 828290207Sjkim _xtr $i1,$s3,8-2 829238384Sjkim lwr $t2,2($i2) # Td1[s1>>16] 830290207Sjkim _xtr $i2,$s0,8-2 831238384Sjkim lwr $t3,2($i3) # Td1[s2>>16] 832290207Sjkim _xtr $i3,$s1,8-2 833290207Sjkim#endif 834238384Sjkim 835238384Sjkim and $i0,0x3fc 836238384Sjkim and $i1,0x3fc 837238384Sjkim and $i2,0x3fc 838238384Sjkim and $i3,0x3fc 839238384Sjkim $PTR_ADD $i0,$Tbl 840238384Sjkim $PTR_ADD $i1,$Tbl 841238384Sjkim $PTR_ADD $i2,$Tbl 842238384Sjkim $PTR_ADD $i3,$Tbl 843290207Sjkim#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 844290207Sjkim rotr $t0,$t0,8 845290207Sjkim rotr $t1,$t1,8 846290207Sjkim rotr $t2,$t2,8 847290207Sjkim rotr $t3,$t3,8 848290207Sjkim# if defined(_MIPSEL) 849290207Sjkim lw $t4,0($i0) # Td2[s2>>8] 850290207Sjkim _xtr $i0,$s1,0-2 851290207Sjkim lw $t5,0($i1) # Td2[s3>>8] 852290207Sjkim _xtr $i1,$s2,0-2 853290207Sjkim lw $t6,0($i2) # Td2[s0>>8] 854290207Sjkim _xtr $i2,$s3,0-2 855290207Sjkim lw $t7,0($i3) # Td2[s1>>8] 856290207Sjkim _xtr $i3,$s0,0-2 857290207Sjkim 858290207Sjkim and $i0,0x3fc 859290207Sjkim and $i1,0x3fc 860290207Sjkim and $i2,0x3fc 861290207Sjkim and $i3,0x3fc 862290207Sjkim $PTR_ADD $i0,$Tbl 863290207Sjkim $PTR_ADD $i1,$Tbl 864290207Sjkim $PTR_ADD $i2,$Tbl 865290207Sjkim $PTR_ADD $i3,$Tbl 866290207Sjkim lw $t8,0($i0) # Td3[s1] 867290207Sjkim $PTR_INS $i0,$s0,2,8 868290207Sjkim lw $t9,0($i1) # Td3[s2] 869290207Sjkim $PTR_INS $i1,$s1,2,8 870290207Sjkim lw $t10,0($i2) # Td3[s3] 871290207Sjkim $PTR_INS $i2,$s2,2,8 872290207Sjkim lw $t11,0($i3) # Td3[s0] 873290207Sjkim $PTR_INS $i3,$s3,2,8 874290207Sjkim#else 875290207Sjkim lw $t4,0($i0) # Td2[s2>>8] 876290207Sjkim $PTR_INS $i0,$s1,2,8 877290207Sjkim lw $t5,0($i1) # Td2[s3>>8] 878290207Sjkim $PTR_INS $i1,$s2,2,8 879290207Sjkim lw $t6,0($i2) # Td2[s0>>8] 880290207Sjkim $PTR_INS $i2,$s3,2,8 881290207Sjkim lw $t7,0($i3) # Td2[s1>>8] 882290207Sjkim $PTR_INS $i3,$s0,2,8 883290207Sjkim 884290207Sjkim lw $t8,0($i0) # Td3[s1] 885290207Sjkim _xtr $i0,$s0,24-2 886290207Sjkim lw $t9,0($i1) # Td3[s2] 887290207Sjkim _xtr $i1,$s1,24-2 888290207Sjkim lw $t10,0($i2) # Td3[s3] 889290207Sjkim _xtr $i2,$s2,24-2 890290207Sjkim lw $t11,0($i3) # Td3[s0] 891290207Sjkim _xtr $i3,$s3,24-2 892290207Sjkim 893290207Sjkim and $i0,0x3fc 894290207Sjkim and $i1,0x3fc 895290207Sjkim and $i2,0x3fc 896290207Sjkim and $i3,0x3fc 897290207Sjkim $PTR_ADD $i0,$Tbl 898290207Sjkim $PTR_ADD $i1,$Tbl 899290207Sjkim $PTR_ADD $i2,$Tbl 900290207Sjkim $PTR_ADD $i3,$Tbl 901290207Sjkim#endif 902290207Sjkim rotr $t4,$t4,16 903290207Sjkim rotr $t5,$t5,16 904290207Sjkim rotr $t6,$t6,16 905290207Sjkim rotr $t7,$t7,16 906290207Sjkim 907290207Sjkim rotr $t8,$t8,24 908290207Sjkim rotr $t9,$t9,24 909290207Sjkim rotr $t10,$t10,24 910290207Sjkim rotr $t11,$t11,24 911290207Sjkim#else 912238384Sjkim lwl $t4,2($i0) # Td2[s2>>8] 913238384Sjkim lwl $t5,2($i1) # Td2[s3>>8] 914238384Sjkim lwl $t6,2($i2) # Td2[s0>>8] 915238384Sjkim lwl $t7,2($i3) # Td2[s1>>8] 916238384Sjkim lwr $t4,1($i0) # Td2[s2>>8] 917290207Sjkim _xtr $i0,$s1,0-2 918238384Sjkim lwr $t5,1($i1) # Td2[s3>>8] 919290207Sjkim _xtr $i1,$s2,0-2 920238384Sjkim lwr $t6,1($i2) # Td2[s0>>8] 921290207Sjkim _xtr $i2,$s3,0-2 922238384Sjkim lwr $t7,1($i3) # Td2[s1>>8] 923290207Sjkim _xtr $i3,$s0,0-2 924238384Sjkim 925238384Sjkim and $i0,0x3fc 926238384Sjkim and $i1,0x3fc 927238384Sjkim and $i2,0x3fc 928238384Sjkim and $i3,0x3fc 929238384Sjkim $PTR_ADD $i0,$Tbl 930238384Sjkim $PTR_ADD $i1,$Tbl 931238384Sjkim $PTR_ADD $i2,$Tbl 932238384Sjkim $PTR_ADD $i3,$Tbl 933238384Sjkim lwl $t8,1($i0) # Td3[s1] 934238384Sjkim lwl $t9,1($i1) # Td3[s2] 935238384Sjkim lwl $t10,1($i2) # Td3[s3] 936238384Sjkim lwl $t11,1($i3) # Td3[s0] 937238384Sjkim lwr $t8,0($i0) # Td3[s1] 938290207Sjkim _xtr $i0,$s0,24-2 939238384Sjkim lwr $t9,0($i1) # Td3[s2] 940290207Sjkim _xtr $i1,$s1,24-2 941238384Sjkim lwr $t10,0($i2) # Td3[s3] 942290207Sjkim _xtr $i2,$s2,24-2 943238384Sjkim lwr $t11,0($i3) # Td3[s0] 944290207Sjkim _xtr $i3,$s3,24-2 945238384Sjkim 946238384Sjkim and $i0,0x3fc 947238384Sjkim and $i1,0x3fc 948238384Sjkim and $i2,0x3fc 949238384Sjkim and $i3,0x3fc 950238384Sjkim $PTR_ADD $i0,$Tbl 951238384Sjkim $PTR_ADD $i1,$Tbl 952238384Sjkim $PTR_ADD $i2,$Tbl 953238384Sjkim $PTR_ADD $i3,$Tbl 954290207Sjkim#endif 955238384Sjkim 956238384Sjkim xor $t0,$t4 957290207Sjkim lw $t4,0($i0) # Td0[s0>>24] 958238384Sjkim xor $t1,$t5 959290207Sjkim lw $t5,0($i1) # Td0[s1>>24] 960238384Sjkim xor $t2,$t6 961290207Sjkim lw $t6,0($i2) # Td0[s2>>24] 962238384Sjkim xor $t3,$t7 963238384Sjkim lw $t7,0($i3) # Td0[s3>>24] 964238384Sjkim 965290207Sjkim xor $t0,$t8 966238384Sjkim lw $s0,0($key0) 967290207Sjkim xor $t1,$t9 968238384Sjkim lw $s1,4($key0) 969290207Sjkim xor $t2,$t10 970238384Sjkim lw $s2,8($key0) 971290207Sjkim xor $t3,$t11 972238384Sjkim lw $s3,12($key0) 973238384Sjkim 974238384Sjkim xor $t0,$t4 975238384Sjkim xor $t1,$t5 976238384Sjkim xor $t2,$t6 977238384Sjkim xor $t3,$t7 978238384Sjkim 979238384Sjkim sub $cnt,1 980238384Sjkim $PTR_ADD $key0,16 981238384Sjkim xor $s0,$t0 982238384Sjkim xor $s1,$t1 983238384Sjkim xor $s2,$t2 984238384Sjkim xor $s3,$t3 985238384Sjkim .set noreorder 986238384Sjkim bnez $cnt,.Loop_dec 987238384Sjkim _xtr $i0,$s3,16-2 988290207Sjkim#endif 989238384Sjkim 990238384Sjkim .set reorder 991238384Sjkim lw $t4,1024($Tbl) # prefetch Td4 992290207Sjkim _xtr $i0,$s3,16 993238384Sjkim lw $t5,1024+32($Tbl) 994290207Sjkim _xtr $i1,$s0,16 995238384Sjkim lw $t6,1024+64($Tbl) 996290207Sjkim _xtr $i2,$s1,16 997238384Sjkim lw $t7,1024+96($Tbl) 998290207Sjkim _xtr $i3,$s2,16 999238384Sjkim lw $t8,1024+128($Tbl) 1000290207Sjkim and $i0,0xff 1001238384Sjkim lw $t9,1024+160($Tbl) 1002290207Sjkim and $i1,0xff 1003238384Sjkim lw $t10,1024+192($Tbl) 1004290207Sjkim and $i2,0xff 1005238384Sjkim lw $t11,1024+224($Tbl) 1006290207Sjkim and $i3,0xff 1007238384Sjkim 1008238384Sjkim $PTR_ADD $i0,$Tbl 1009238384Sjkim $PTR_ADD $i1,$Tbl 1010238384Sjkim $PTR_ADD $i2,$Tbl 1011238384Sjkim $PTR_ADD $i3,$Tbl 1012238384Sjkim lbu $t0,1024($i0) # Td4[s3>>16] 1013290207Sjkim _xtr $i0,$s2,8 1014238384Sjkim lbu $t1,1024($i1) # Td4[s0>>16] 1015290207Sjkim _xtr $i1,$s3,8 1016238384Sjkim lbu $t2,1024($i2) # Td4[s1>>16] 1017290207Sjkim _xtr $i2,$s0,8 1018238384Sjkim lbu $t3,1024($i3) # Td4[s2>>16] 1019290207Sjkim _xtr $i3,$s1,8 1020238384Sjkim 1021238384Sjkim and $i0,0xff 1022238384Sjkim and $i1,0xff 1023238384Sjkim and $i2,0xff 1024238384Sjkim and $i3,0xff 1025238384Sjkim $PTR_ADD $i0,$Tbl 1026238384Sjkim $PTR_ADD $i1,$Tbl 1027238384Sjkim $PTR_ADD $i2,$Tbl 1028238384Sjkim $PTR_ADD $i3,$Tbl 1029290207Sjkim#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 1030290207Sjkim# if defined(_MIPSEL) 1031238384Sjkim lbu $t4,1024($i0) # Td4[s2>>8] 1032290207Sjkim $PTR_INS $i0,$s0,0,8 1033238384Sjkim lbu $t5,1024($i1) # Td4[s3>>8] 1034290207Sjkim $PTR_INS $i1,$s1,0,8 1035238384Sjkim lbu $t6,1024($i2) # Td4[s0>>8] 1036290207Sjkim $PTR_INS $i2,$s2,0,8 1037238384Sjkim lbu $t7,1024($i3) # Td4[s1>>8] 1038290207Sjkim $PTR_INS $i3,$s3,0,8 1039238384Sjkim 1040290207Sjkim lbu $t8,1024($i0) # Td4[s0>>24] 1041290207Sjkim _xtr $i0,$s1,0 1042290207Sjkim lbu $t9,1024($i1) # Td4[s1>>24] 1043290207Sjkim _xtr $i1,$s2,0 1044290207Sjkim lbu $t10,1024($i2) # Td4[s2>>24] 1045290207Sjkim _xtr $i2,$s3,0 1046290207Sjkim lbu $t11,1024($i3) # Td4[s3>>24] 1047290207Sjkim _xtr $i3,$s0,0 1048290207Sjkim 1049290207Sjkim $PTR_ADD $i0,$Tbl 1050290207Sjkim $PTR_ADD $i1,$Tbl 1051290207Sjkim $PTR_ADD $i2,$Tbl 1052290207Sjkim $PTR_ADD $i3,$Tbl 1053290207Sjkim# else 1054290207Sjkim lbu $t4,1024($i0) # Td4[s2>>8] 1055238384Sjkim _xtr $i0,$s0,24 1056290207Sjkim lbu $t5,1024($i1) # Td4[s3>>8] 1057238384Sjkim _xtr $i1,$s1,24 1058290207Sjkim lbu $t6,1024($i2) # Td4[s0>>8] 1059238384Sjkim _xtr $i2,$s2,24 1060290207Sjkim lbu $t7,1024($i3) # Td4[s1>>8] 1061238384Sjkim _xtr $i3,$s3,24 1062290207Sjkim 1063238384Sjkim $PTR_ADD $i0,$Tbl 1064238384Sjkim $PTR_ADD $i1,$Tbl 1065238384Sjkim $PTR_ADD $i2,$Tbl 1066238384Sjkim $PTR_ADD $i3,$Tbl 1067238384Sjkim lbu $t8,1024($i0) # Td4[s0>>24] 1068290207Sjkim $PTR_INS $i0,$s1,0,8 1069238384Sjkim lbu $t9,1024($i1) # Td4[s1>>24] 1070290207Sjkim $PTR_INS $i1,$s2,0,8 1071238384Sjkim lbu $t10,1024($i2) # Td4[s2>>24] 1072290207Sjkim $PTR_INS $i2,$s3,0,8 1073238384Sjkim lbu $t11,1024($i3) # Td4[s3>>24] 1074290207Sjkim $PTR_INS $i3,$s0,0,8 1075290207Sjkim# endif 1076290207Sjkim _ins $t0,16 1077290207Sjkim _ins $t1,16 1078290207Sjkim _ins $t2,16 1079290207Sjkim _ins $t3,16 1080238384Sjkim 1081290207Sjkim _ins2 $t0,$t4,8 1082290207Sjkim lbu $t4,1024($i0) # Td4[s1] 1083290207Sjkim _ins2 $t1,$t5,8 1084290207Sjkim lbu $t5,1024($i1) # Td4[s2] 1085290207Sjkim _ins2 $t2,$t6,8 1086290207Sjkim lbu $t6,1024($i2) # Td4[s3] 1087290207Sjkim _ins2 $t3,$t7,8 1088290207Sjkim lbu $t7,1024($i3) # Td4[s0] 1089290207Sjkim 1090290207Sjkim _ins2 $t0,$t8,24 1091290207Sjkim lw $s0,0($key0) 1092290207Sjkim _ins2 $t1,$t9,24 1093290207Sjkim lw $s1,4($key0) 1094290207Sjkim _ins2 $t2,$t10,24 1095290207Sjkim lw $s2,8($key0) 1096290207Sjkim _ins2 $t3,$t11,24 1097290207Sjkim lw $s3,12($key0) 1098290207Sjkim 1099290207Sjkim _ins2 $t0,$t4,0 1100290207Sjkim _ins2 $t1,$t5,0 1101290207Sjkim _ins2 $t2,$t6,0 1102290207Sjkim _ins2 $t3,$t7,0 1103290207Sjkim#else 1104290207Sjkim lbu $t4,1024($i0) # Td4[s2>>8] 1105290207Sjkim _xtr $i0,$s0,24 1106290207Sjkim lbu $t5,1024($i1) # Td4[s3>>8] 1107290207Sjkim _xtr $i1,$s1,24 1108290207Sjkim lbu $t6,1024($i2) # Td4[s0>>8] 1109290207Sjkim _xtr $i2,$s2,24 1110290207Sjkim lbu $t7,1024($i3) # Td4[s1>>8] 1111290207Sjkim _xtr $i3,$s3,24 1112290207Sjkim 1113290207Sjkim $PTR_ADD $i0,$Tbl 1114290207Sjkim $PTR_ADD $i1,$Tbl 1115290207Sjkim $PTR_ADD $i2,$Tbl 1116290207Sjkim $PTR_ADD $i3,$Tbl 1117290207Sjkim lbu $t8,1024($i0) # Td4[s0>>24] 1118238384Sjkim _xtr $i0,$s1,0 1119290207Sjkim lbu $t9,1024($i1) # Td4[s1>>24] 1120238384Sjkim _xtr $i1,$s2,0 1121290207Sjkim lbu $t10,1024($i2) # Td4[s2>>24] 1122238384Sjkim _xtr $i2,$s3,0 1123290207Sjkim lbu $t11,1024($i3) # Td4[s3>>24] 1124238384Sjkim _xtr $i3,$s0,0 1125238384Sjkim 1126290207Sjkim $PTR_ADD $i0,$Tbl 1127290207Sjkim $PTR_ADD $i1,$Tbl 1128290207Sjkim $PTR_ADD $i2,$Tbl 1129290207Sjkim $PTR_ADD $i3,$Tbl 1130290207Sjkim 1131238384Sjkim _ins $t0,16 1132238384Sjkim _ins $t1,16 1133238384Sjkim _ins $t2,16 1134238384Sjkim _ins $t3,16 1135238384Sjkim 1136238384Sjkim _ins $t4,8 1137238384Sjkim _ins $t5,8 1138238384Sjkim _ins $t6,8 1139238384Sjkim _ins $t7,8 1140238384Sjkim 1141238384Sjkim xor $t0,$t4 1142290207Sjkim lbu $t4,1024($i0) # Td4[s1] 1143238384Sjkim xor $t1,$t5 1144290207Sjkim lbu $t5,1024($i1) # Td4[s2] 1145238384Sjkim xor $t2,$t6 1146290207Sjkim lbu $t6,1024($i2) # Td4[s3] 1147238384Sjkim xor $t3,$t7 1148238384Sjkim lbu $t7,1024($i3) # Td4[s0] 1149238384Sjkim 1150238384Sjkim _ins $t8,24 1151290207Sjkim lw $s0,0($key0) 1152238384Sjkim _ins $t9,24 1153290207Sjkim lw $s1,4($key0) 1154238384Sjkim _ins $t10,24 1155290207Sjkim lw $s2,8($key0) 1156238384Sjkim _ins $t11,24 1157238384Sjkim lw $s3,12($key0) 1158238384Sjkim 1159290207Sjkim xor $t0,$t8 1160290207Sjkim xor $t1,$t9 1161290207Sjkim xor $t2,$t10 1162290207Sjkim xor $t3,$t11 1163290207Sjkim 1164238384Sjkim _ins $t4,0 1165238384Sjkim _ins $t5,0 1166238384Sjkim _ins $t6,0 1167238384Sjkim _ins $t7,0 1168238384Sjkim 1169238384Sjkim xor $t0,$t4 1170238384Sjkim xor $t1,$t5 1171238384Sjkim xor $t2,$t6 1172238384Sjkim xor $t3,$t7 1173290207Sjkim#endif 1174238384Sjkim 1175238384Sjkim xor $s0,$t0 1176238384Sjkim xor $s1,$t1 1177238384Sjkim xor $s2,$t2 1178238384Sjkim xor $s3,$t3 1179238384Sjkim 1180238384Sjkim jr $ra 1181238384Sjkim.end _mips_AES_decrypt 1182238384Sjkim 1183238384Sjkim.align 5 1184238384Sjkim.globl AES_decrypt 1185238384Sjkim.ent AES_decrypt 1186238384SjkimAES_decrypt: 1187238384Sjkim .frame $sp,$FRAMESIZE,$ra 1188238384Sjkim .mask $SAVED_REGS_MASK,-$SZREG 1189238384Sjkim .set noreorder 1190238384Sjkim___ 1191238384Sjkim$code.=<<___ if ($flavour =~ /o32/i); # o32 PIC-ification 1192238384Sjkim .cpload $pf 1193238384Sjkim___ 1194238384Sjkim$code.=<<___; 1195238384Sjkim $PTR_SUB $sp,$FRAMESIZE 1196238384Sjkim $REG_S $ra,$FRAMESIZE-1*$SZREG($sp) 1197238384Sjkim $REG_S $fp,$FRAMESIZE-2*$SZREG($sp) 1198238384Sjkim $REG_S $s11,$FRAMESIZE-3*$SZREG($sp) 1199238384Sjkim $REG_S $s10,$FRAMESIZE-4*$SZREG($sp) 1200238384Sjkim $REG_S $s9,$FRAMESIZE-5*$SZREG($sp) 1201238384Sjkim $REG_S $s8,$FRAMESIZE-6*$SZREG($sp) 1202238384Sjkim $REG_S $s7,$FRAMESIZE-7*$SZREG($sp) 1203238384Sjkim $REG_S $s6,$FRAMESIZE-8*$SZREG($sp) 1204238384Sjkim $REG_S $s5,$FRAMESIZE-9*$SZREG($sp) 1205238384Sjkim $REG_S $s4,$FRAMESIZE-10*$SZREG($sp) 1206238384Sjkim___ 1207238384Sjkim$code.=<<___ if ($flavour =~ /nubi/i); # optimize non-nubi prologue 1208238384Sjkim $REG_S \$15,$FRAMESIZE-11*$SZREG($sp) 1209238384Sjkim $REG_S \$14,$FRAMESIZE-12*$SZREG($sp) 1210238384Sjkim $REG_S \$13,$FRAMESIZE-13*$SZREG($sp) 1211238384Sjkim $REG_S \$12,$FRAMESIZE-14*$SZREG($sp) 1212238384Sjkim $REG_S $gp,$FRAMESIZE-15*$SZREG($sp) 1213238384Sjkim___ 1214238384Sjkim$code.=<<___ if ($flavour !~ /o32/i); # non-o32 PIC-ification 1215238384Sjkim .cplocal $Tbl 1216238384Sjkim .cpsetup $pf,$zero,AES_decrypt 1217238384Sjkim___ 1218238384Sjkim$code.=<<___; 1219238384Sjkim .set reorder 1220238384Sjkim la $Tbl,AES_Td # PIC-ified 'load address' 1221238384Sjkim 1222238384Sjkim lwl $s0,0+$MSB($inp) 1223238384Sjkim lwl $s1,4+$MSB($inp) 1224238384Sjkim lwl $s2,8+$MSB($inp) 1225238384Sjkim lwl $s3,12+$MSB($inp) 1226238384Sjkim lwr $s0,0+$LSB($inp) 1227238384Sjkim lwr $s1,4+$LSB($inp) 1228238384Sjkim lwr $s2,8+$LSB($inp) 1229238384Sjkim lwr $s3,12+$LSB($inp) 1230238384Sjkim 1231238384Sjkim bal _mips_AES_decrypt 1232238384Sjkim 1233238384Sjkim swr $s0,0+$LSB($out) 1234238384Sjkim swr $s1,4+$LSB($out) 1235238384Sjkim swr $s2,8+$LSB($out) 1236238384Sjkim swr $s3,12+$LSB($out) 1237238384Sjkim swl $s0,0+$MSB($out) 1238238384Sjkim swl $s1,4+$MSB($out) 1239238384Sjkim swl $s2,8+$MSB($out) 1240238384Sjkim swl $s3,12+$MSB($out) 1241238384Sjkim 1242238384Sjkim .set noreorder 1243238384Sjkim $REG_L $ra,$FRAMESIZE-1*$SZREG($sp) 1244238384Sjkim $REG_L $fp,$FRAMESIZE-2*$SZREG($sp) 1245238384Sjkim $REG_L $s11,$FRAMESIZE-3*$SZREG($sp) 1246238384Sjkim $REG_L $s10,$FRAMESIZE-4*$SZREG($sp) 1247238384Sjkim $REG_L $s9,$FRAMESIZE-5*$SZREG($sp) 1248238384Sjkim $REG_L $s8,$FRAMESIZE-6*$SZREG($sp) 1249238384Sjkim $REG_L $s7,$FRAMESIZE-7*$SZREG($sp) 1250238384Sjkim $REG_L $s6,$FRAMESIZE-8*$SZREG($sp) 1251238384Sjkim $REG_L $s5,$FRAMESIZE-9*$SZREG($sp) 1252238384Sjkim $REG_L $s4,$FRAMESIZE-10*$SZREG($sp) 1253238384Sjkim___ 1254238384Sjkim$code.=<<___ if ($flavour =~ /nubi/i); 1255238384Sjkim $REG_L \$15,$FRAMESIZE-11*$SZREG($sp) 1256238384Sjkim $REG_L \$14,$FRAMESIZE-12*$SZREG($sp) 1257238384Sjkim $REG_L \$13,$FRAMESIZE-13*$SZREG($sp) 1258238384Sjkim $REG_L \$12,$FRAMESIZE-14*$SZREG($sp) 1259238384Sjkim $REG_L $gp,$FRAMESIZE-15*$SZREG($sp) 1260238384Sjkim___ 1261238384Sjkim$code.=<<___; 1262238384Sjkim jr $ra 1263238384Sjkim $PTR_ADD $sp,$FRAMESIZE 1264238384Sjkim.end AES_decrypt 1265238384Sjkim___ 1266238384Sjkim}}} 1267238384Sjkim 1268238384Sjkim{{{ 1269238384Sjkimmy $FRAMESIZE=8*$SZREG; 1270238384Sjkimmy $SAVED_REGS_MASK = ($flavour =~ /nubi/i) ? 0xc000f008 : 0xc0000000; 1271238384Sjkim 1272238384Sjkimmy ($inp,$bits,$key,$Tbl)=($a0,$a1,$a2,$a3); 1273238384Sjkimmy ($rk0,$rk1,$rk2,$rk3,$rk4,$rk5,$rk6,$rk7)=($a4,$a5,$a6,$a7,$s0,$s1,$s2,$s3); 1274238384Sjkimmy ($i0,$i1,$i2,$i3)=($at,$t0,$t1,$t2); 1275238384Sjkimmy ($rcon,$cnt)=($gp,$fp); 1276238384Sjkim 1277238384Sjkim$code.=<<___; 1278238384Sjkim.align 5 1279238384Sjkim.ent _mips_AES_set_encrypt_key 1280238384Sjkim_mips_AES_set_encrypt_key: 1281238384Sjkim .frame $sp,0,$ra 1282238384Sjkim .set noreorder 1283238384Sjkim beqz $inp,.Lekey_done 1284238384Sjkim li $t0,-1 1285238384Sjkim beqz $key,.Lekey_done 1286290207Sjkim $PTR_ADD $rcon,$Tbl,256 1287238384Sjkim 1288238384Sjkim .set reorder 1289238384Sjkim lwl $rk0,0+$MSB($inp) # load 128 bits 1290238384Sjkim lwl $rk1,4+$MSB($inp) 1291238384Sjkim lwl $rk2,8+$MSB($inp) 1292238384Sjkim lwl $rk3,12+$MSB($inp) 1293238384Sjkim li $at,128 1294238384Sjkim lwr $rk0,0+$LSB($inp) 1295238384Sjkim lwr $rk1,4+$LSB($inp) 1296238384Sjkim lwr $rk2,8+$LSB($inp) 1297238384Sjkim lwr $rk3,12+$LSB($inp) 1298238384Sjkim .set noreorder 1299238384Sjkim beq $bits,$at,.L128bits 1300238384Sjkim li $cnt,10 1301238384Sjkim 1302238384Sjkim .set reorder 1303238384Sjkim lwl $rk4,16+$MSB($inp) # load 192 bits 1304238384Sjkim lwl $rk5,20+$MSB($inp) 1305238384Sjkim li $at,192 1306238384Sjkim lwr $rk4,16+$LSB($inp) 1307238384Sjkim lwr $rk5,20+$LSB($inp) 1308238384Sjkim .set noreorder 1309238384Sjkim beq $bits,$at,.L192bits 1310238384Sjkim li $cnt,8 1311238384Sjkim 1312238384Sjkim .set reorder 1313238384Sjkim lwl $rk6,24+$MSB($inp) # load 256 bits 1314238384Sjkim lwl $rk7,28+$MSB($inp) 1315238384Sjkim li $at,256 1316238384Sjkim lwr $rk6,24+$LSB($inp) 1317238384Sjkim lwr $rk7,28+$LSB($inp) 1318238384Sjkim .set noreorder 1319238384Sjkim beq $bits,$at,.L256bits 1320238384Sjkim li $cnt,7 1321238384Sjkim 1322238384Sjkim b .Lekey_done 1323238384Sjkim li $t0,-2 1324238384Sjkim 1325238384Sjkim.align 4 1326238384Sjkim.L128bits: 1327238384Sjkim .set reorder 1328238384Sjkim srl $i0,$rk3,16 1329238384Sjkim srl $i1,$rk3,8 1330238384Sjkim and $i0,0xff 1331238384Sjkim and $i1,0xff 1332238384Sjkim and $i2,$rk3,0xff 1333238384Sjkim srl $i3,$rk3,24 1334238384Sjkim $PTR_ADD $i0,$Tbl 1335238384Sjkim $PTR_ADD $i1,$Tbl 1336238384Sjkim $PTR_ADD $i2,$Tbl 1337238384Sjkim $PTR_ADD $i3,$Tbl 1338290207Sjkim lbu $i0,0($i0) 1339290207Sjkim lbu $i1,0($i1) 1340290207Sjkim lbu $i2,0($i2) 1341290207Sjkim lbu $i3,0($i3) 1342238384Sjkim 1343238384Sjkim sw $rk0,0($key) 1344238384Sjkim sw $rk1,4($key) 1345238384Sjkim sw $rk2,8($key) 1346238384Sjkim sw $rk3,12($key) 1347238384Sjkim sub $cnt,1 1348238384Sjkim $PTR_ADD $key,16 1349238384Sjkim 1350238384Sjkim _bias $i0,24 1351238384Sjkim _bias $i1,16 1352238384Sjkim _bias $i2,8 1353238384Sjkim _bias $i3,0 1354238384Sjkim 1355238384Sjkim xor $rk0,$i0 1356238384Sjkim lw $i0,0($rcon) 1357238384Sjkim xor $rk0,$i1 1358238384Sjkim xor $rk0,$i2 1359238384Sjkim xor $rk0,$i3 1360238384Sjkim xor $rk0,$i0 1361238384Sjkim 1362238384Sjkim xor $rk1,$rk0 1363238384Sjkim xor $rk2,$rk1 1364238384Sjkim xor $rk3,$rk2 1365238384Sjkim 1366238384Sjkim .set noreorder 1367238384Sjkim bnez $cnt,.L128bits 1368238384Sjkim $PTR_ADD $rcon,4 1369238384Sjkim 1370238384Sjkim sw $rk0,0($key) 1371238384Sjkim sw $rk1,4($key) 1372238384Sjkim sw $rk2,8($key) 1373238384Sjkim li $cnt,10 1374238384Sjkim sw $rk3,12($key) 1375238384Sjkim li $t0,0 1376238384Sjkim sw $cnt,80($key) 1377238384Sjkim b .Lekey_done 1378238384Sjkim $PTR_SUB $key,10*16 1379238384Sjkim 1380238384Sjkim.align 4 1381238384Sjkim.L192bits: 1382238384Sjkim .set reorder 1383238384Sjkim srl $i0,$rk5,16 1384238384Sjkim srl $i1,$rk5,8 1385238384Sjkim and $i0,0xff 1386238384Sjkim and $i1,0xff 1387238384Sjkim and $i2,$rk5,0xff 1388238384Sjkim srl $i3,$rk5,24 1389238384Sjkim $PTR_ADD $i0,$Tbl 1390238384Sjkim $PTR_ADD $i1,$Tbl 1391238384Sjkim $PTR_ADD $i2,$Tbl 1392238384Sjkim $PTR_ADD $i3,$Tbl 1393290207Sjkim lbu $i0,0($i0) 1394290207Sjkim lbu $i1,0($i1) 1395290207Sjkim lbu $i2,0($i2) 1396290207Sjkim lbu $i3,0($i3) 1397238384Sjkim 1398238384Sjkim sw $rk0,0($key) 1399238384Sjkim sw $rk1,4($key) 1400238384Sjkim sw $rk2,8($key) 1401238384Sjkim sw $rk3,12($key) 1402238384Sjkim sw $rk4,16($key) 1403238384Sjkim sw $rk5,20($key) 1404238384Sjkim sub $cnt,1 1405238384Sjkim $PTR_ADD $key,24 1406238384Sjkim 1407238384Sjkim _bias $i0,24 1408238384Sjkim _bias $i1,16 1409238384Sjkim _bias $i2,8 1410238384Sjkim _bias $i3,0 1411238384Sjkim 1412238384Sjkim xor $rk0,$i0 1413238384Sjkim lw $i0,0($rcon) 1414238384Sjkim xor $rk0,$i1 1415238384Sjkim xor $rk0,$i2 1416238384Sjkim xor $rk0,$i3 1417238384Sjkim xor $rk0,$i0 1418238384Sjkim 1419238384Sjkim xor $rk1,$rk0 1420238384Sjkim xor $rk2,$rk1 1421238384Sjkim xor $rk3,$rk2 1422238384Sjkim xor $rk4,$rk3 1423238384Sjkim xor $rk5,$rk4 1424238384Sjkim 1425238384Sjkim .set noreorder 1426238384Sjkim bnez $cnt,.L192bits 1427238384Sjkim $PTR_ADD $rcon,4 1428238384Sjkim 1429238384Sjkim sw $rk0,0($key) 1430238384Sjkim sw $rk1,4($key) 1431238384Sjkim sw $rk2,8($key) 1432238384Sjkim li $cnt,12 1433238384Sjkim sw $rk3,12($key) 1434238384Sjkim li $t0,0 1435238384Sjkim sw $cnt,48($key) 1436238384Sjkim b .Lekey_done 1437238384Sjkim $PTR_SUB $key,12*16 1438238384Sjkim 1439238384Sjkim.align 4 1440238384Sjkim.L256bits: 1441238384Sjkim .set reorder 1442238384Sjkim srl $i0,$rk7,16 1443238384Sjkim srl $i1,$rk7,8 1444238384Sjkim and $i0,0xff 1445238384Sjkim and $i1,0xff 1446238384Sjkim and $i2,$rk7,0xff 1447238384Sjkim srl $i3,$rk7,24 1448238384Sjkim $PTR_ADD $i0,$Tbl 1449238384Sjkim $PTR_ADD $i1,$Tbl 1450238384Sjkim $PTR_ADD $i2,$Tbl 1451238384Sjkim $PTR_ADD $i3,$Tbl 1452290207Sjkim lbu $i0,0($i0) 1453290207Sjkim lbu $i1,0($i1) 1454290207Sjkim lbu $i2,0($i2) 1455290207Sjkim lbu $i3,0($i3) 1456238384Sjkim 1457238384Sjkim sw $rk0,0($key) 1458238384Sjkim sw $rk1,4($key) 1459238384Sjkim sw $rk2,8($key) 1460238384Sjkim sw $rk3,12($key) 1461238384Sjkim sw $rk4,16($key) 1462238384Sjkim sw $rk5,20($key) 1463238384Sjkim sw $rk6,24($key) 1464238384Sjkim sw $rk7,28($key) 1465238384Sjkim sub $cnt,1 1466238384Sjkim 1467238384Sjkim _bias $i0,24 1468238384Sjkim _bias $i1,16 1469238384Sjkim _bias $i2,8 1470238384Sjkim _bias $i3,0 1471238384Sjkim 1472238384Sjkim xor $rk0,$i0 1473238384Sjkim lw $i0,0($rcon) 1474238384Sjkim xor $rk0,$i1 1475238384Sjkim xor $rk0,$i2 1476238384Sjkim xor $rk0,$i3 1477238384Sjkim xor $rk0,$i0 1478238384Sjkim 1479238384Sjkim xor $rk1,$rk0 1480238384Sjkim xor $rk2,$rk1 1481238384Sjkim xor $rk3,$rk2 1482238384Sjkim beqz $cnt,.L256bits_done 1483238384Sjkim 1484238384Sjkim srl $i0,$rk3,24 1485238384Sjkim srl $i1,$rk3,16 1486238384Sjkim srl $i2,$rk3,8 1487238384Sjkim and $i3,$rk3,0xff 1488238384Sjkim and $i1,0xff 1489238384Sjkim and $i2,0xff 1490238384Sjkim $PTR_ADD $i0,$Tbl 1491238384Sjkim $PTR_ADD $i1,$Tbl 1492238384Sjkim $PTR_ADD $i2,$Tbl 1493238384Sjkim $PTR_ADD $i3,$Tbl 1494290207Sjkim lbu $i0,0($i0) 1495290207Sjkim lbu $i1,0($i1) 1496290207Sjkim lbu $i2,0($i2) 1497290207Sjkim lbu $i3,0($i3) 1498238384Sjkim sll $i0,24 1499238384Sjkim sll $i1,16 1500238384Sjkim sll $i2,8 1501238384Sjkim 1502238384Sjkim xor $rk4,$i0 1503238384Sjkim xor $rk4,$i1 1504238384Sjkim xor $rk4,$i2 1505238384Sjkim xor $rk4,$i3 1506238384Sjkim 1507238384Sjkim xor $rk5,$rk4 1508238384Sjkim xor $rk6,$rk5 1509238384Sjkim xor $rk7,$rk6 1510238384Sjkim 1511238384Sjkim $PTR_ADD $key,32 1512238384Sjkim .set noreorder 1513238384Sjkim b .L256bits 1514238384Sjkim $PTR_ADD $rcon,4 1515238384Sjkim 1516238384Sjkim.L256bits_done: 1517238384Sjkim sw $rk0,32($key) 1518238384Sjkim sw $rk1,36($key) 1519238384Sjkim sw $rk2,40($key) 1520238384Sjkim li $cnt,14 1521238384Sjkim sw $rk3,44($key) 1522238384Sjkim li $t0,0 1523238384Sjkim sw $cnt,48($key) 1524238384Sjkim $PTR_SUB $key,12*16 1525238384Sjkim 1526238384Sjkim.Lekey_done: 1527238384Sjkim jr $ra 1528238384Sjkim nop 1529238384Sjkim.end _mips_AES_set_encrypt_key 1530238384Sjkim 1531246772Sjkim.globl private_AES_set_encrypt_key 1532246772Sjkim.ent private_AES_set_encrypt_key 1533246772Sjkimprivate_AES_set_encrypt_key: 1534238384Sjkim .frame $sp,$FRAMESIZE,$ra 1535238384Sjkim .mask $SAVED_REGS_MASK,-$SZREG 1536238384Sjkim .set noreorder 1537238384Sjkim___ 1538238384Sjkim$code.=<<___ if ($flavour =~ /o32/i); # o32 PIC-ification 1539238384Sjkim .cpload $pf 1540238384Sjkim___ 1541238384Sjkim$code.=<<___; 1542238384Sjkim $PTR_SUB $sp,$FRAMESIZE 1543238384Sjkim $REG_S $ra,$FRAMESIZE-1*$SZREG($sp) 1544238384Sjkim $REG_S $fp,$FRAMESIZE-2*$SZREG($sp) 1545238384Sjkim___ 1546238384Sjkim$code.=<<___ if ($flavour =~ /nubi/i); # optimize non-nubi prologue 1547238384Sjkim $REG_S $s3,$FRAMESIZE-3*$SZREG($sp) 1548238384Sjkim $REG_S $s2,$FRAMESIZE-4*$SZREG($sp) 1549238384Sjkim $REG_S $s1,$FRAMESIZE-5*$SZREG($sp) 1550238384Sjkim $REG_S $s0,$FRAMESIZE-6*$SZREG($sp) 1551238384Sjkim $REG_S $gp,$FRAMESIZE-7*$SZREG($sp) 1552238384Sjkim___ 1553238384Sjkim$code.=<<___ if ($flavour !~ /o32/i); # non-o32 PIC-ification 1554238384Sjkim .cplocal $Tbl 1555246772Sjkim .cpsetup $pf,$zero,private_AES_set_encrypt_key 1556238384Sjkim___ 1557238384Sjkim$code.=<<___; 1558238384Sjkim .set reorder 1559290207Sjkim la $Tbl,AES_Te4 # PIC-ified 'load address' 1560238384Sjkim 1561238384Sjkim bal _mips_AES_set_encrypt_key 1562238384Sjkim 1563238384Sjkim .set noreorder 1564238384Sjkim move $a0,$t0 1565238384Sjkim $REG_L $ra,$FRAMESIZE-1*$SZREG($sp) 1566238384Sjkim $REG_L $fp,$FRAMESIZE-2*$SZREG($sp) 1567238384Sjkim___ 1568238384Sjkim$code.=<<___ if ($flavour =~ /nubi/i); 1569238384Sjkim $REG_L $s3,$FRAMESIZE-11*$SZREG($sp) 1570238384Sjkim $REG_L $s2,$FRAMESIZE-12*$SZREG($sp) 1571238384Sjkim $REG_L $s1,$FRAMESIZE-13*$SZREG($sp) 1572238384Sjkim $REG_L $s0,$FRAMESIZE-14*$SZREG($sp) 1573238384Sjkim $REG_L $gp,$FRAMESIZE-15*$SZREG($sp) 1574238384Sjkim___ 1575238384Sjkim$code.=<<___; 1576238384Sjkim jr $ra 1577238384Sjkim $PTR_ADD $sp,$FRAMESIZE 1578246772Sjkim.end private_AES_set_encrypt_key 1579238384Sjkim___ 1580238384Sjkim 1581238384Sjkimmy ($head,$tail)=($inp,$bits); 1582238384Sjkimmy ($tp1,$tp2,$tp4,$tp8,$tp9,$tpb,$tpd,$tpe)=($a4,$a5,$a6,$a7,$s0,$s1,$s2,$s3); 1583238384Sjkimmy ($m,$x80808080,$x7f7f7f7f,$x1b1b1b1b)=($at,$t0,$t1,$t2); 1584238384Sjkim$code.=<<___; 1585238384Sjkim.align 5 1586246772Sjkim.globl private_AES_set_decrypt_key 1587246772Sjkim.ent private_AES_set_decrypt_key 1588246772Sjkimprivate_AES_set_decrypt_key: 1589238384Sjkim .frame $sp,$FRAMESIZE,$ra 1590238384Sjkim .mask $SAVED_REGS_MASK,-$SZREG 1591238384Sjkim .set noreorder 1592238384Sjkim___ 1593238384Sjkim$code.=<<___ if ($flavour =~ /o32/i); # o32 PIC-ification 1594238384Sjkim .cpload $pf 1595238384Sjkim___ 1596238384Sjkim$code.=<<___; 1597238384Sjkim $PTR_SUB $sp,$FRAMESIZE 1598238384Sjkim $REG_S $ra,$FRAMESIZE-1*$SZREG($sp) 1599238384Sjkim $REG_S $fp,$FRAMESIZE-2*$SZREG($sp) 1600238384Sjkim___ 1601238384Sjkim$code.=<<___ if ($flavour =~ /nubi/i); # optimize non-nubi prologue 1602238384Sjkim $REG_S $s3,$FRAMESIZE-3*$SZREG($sp) 1603238384Sjkim $REG_S $s2,$FRAMESIZE-4*$SZREG($sp) 1604238384Sjkim $REG_S $s1,$FRAMESIZE-5*$SZREG($sp) 1605238384Sjkim $REG_S $s0,$FRAMESIZE-6*$SZREG($sp) 1606238384Sjkim $REG_S $gp,$FRAMESIZE-7*$SZREG($sp) 1607238384Sjkim___ 1608238384Sjkim$code.=<<___ if ($flavour !~ /o32/i); # non-o32 PIC-ification 1609238384Sjkim .cplocal $Tbl 1610246772Sjkim .cpsetup $pf,$zero,private_AES_set_decrypt_key 1611238384Sjkim___ 1612238384Sjkim$code.=<<___; 1613238384Sjkim .set reorder 1614290207Sjkim la $Tbl,AES_Te4 # PIC-ified 'load address' 1615238384Sjkim 1616238384Sjkim bal _mips_AES_set_encrypt_key 1617238384Sjkim 1618238384Sjkim bltz $t0,.Ldkey_done 1619238384Sjkim 1620238384Sjkim sll $at,$cnt,4 1621238384Sjkim $PTR_ADD $head,$key,0 1622238384Sjkim $PTR_ADD $tail,$key,$at 1623238384Sjkim.align 4 1624238384Sjkim.Lswap: 1625238384Sjkim lw $rk0,0($head) 1626238384Sjkim lw $rk1,4($head) 1627238384Sjkim lw $rk2,8($head) 1628238384Sjkim lw $rk3,12($head) 1629238384Sjkim lw $rk4,0($tail) 1630238384Sjkim lw $rk5,4($tail) 1631238384Sjkim lw $rk6,8($tail) 1632238384Sjkim lw $rk7,12($tail) 1633238384Sjkim sw $rk0,0($tail) 1634238384Sjkim sw $rk1,4($tail) 1635238384Sjkim sw $rk2,8($tail) 1636238384Sjkim sw $rk3,12($tail) 1637238384Sjkim $PTR_ADD $head,16 1638238384Sjkim $PTR_SUB $tail,16 1639238384Sjkim sw $rk4,-16($head) 1640238384Sjkim sw $rk5,-12($head) 1641238384Sjkim sw $rk6,-8($head) 1642238384Sjkim sw $rk7,-4($head) 1643238384Sjkim bne $head,$tail,.Lswap 1644238384Sjkim 1645238384Sjkim lw $tp1,16($key) # modulo-scheduled 1646238384Sjkim lui $x80808080,0x8080 1647238384Sjkim sub $cnt,1 1648238384Sjkim or $x80808080,0x8080 1649238384Sjkim sll $cnt,2 1650238384Sjkim $PTR_ADD $key,16 1651238384Sjkim lui $x1b1b1b1b,0x1b1b 1652238384Sjkim nor $x7f7f7f7f,$zero,$x80808080 1653238384Sjkim or $x1b1b1b1b,0x1b1b 1654238384Sjkim.align 4 1655238384Sjkim.Lmix: 1656238384Sjkim and $m,$tp1,$x80808080 1657238384Sjkim and $tp2,$tp1,$x7f7f7f7f 1658238384Sjkim srl $tp4,$m,7 1659238384Sjkim addu $tp2,$tp2 # tp2<<1 1660238384Sjkim subu $m,$tp4 1661238384Sjkim and $m,$x1b1b1b1b 1662238384Sjkim xor $tp2,$m 1663238384Sjkim 1664238384Sjkim and $m,$tp2,$x80808080 1665238384Sjkim and $tp4,$tp2,$x7f7f7f7f 1666238384Sjkim srl $tp8,$m,7 1667238384Sjkim addu $tp4,$tp4 # tp4<<1 1668238384Sjkim subu $m,$tp8 1669238384Sjkim and $m,$x1b1b1b1b 1670238384Sjkim xor $tp4,$m 1671238384Sjkim 1672238384Sjkim and $m,$tp4,$x80808080 1673238384Sjkim and $tp8,$tp4,$x7f7f7f7f 1674238384Sjkim srl $tp9,$m,7 1675238384Sjkim addu $tp8,$tp8 # tp8<<1 1676238384Sjkim subu $m,$tp9 1677238384Sjkim and $m,$x1b1b1b1b 1678238384Sjkim xor $tp8,$m 1679238384Sjkim 1680238384Sjkim xor $tp9,$tp8,$tp1 1681238384Sjkim xor $tpe,$tp8,$tp4 1682238384Sjkim xor $tpb,$tp9,$tp2 1683238384Sjkim xor $tpd,$tp9,$tp4 1684238384Sjkim 1685290207Sjkim#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 1686290207Sjkim rotr $tp1,$tpd,16 1687290207Sjkim xor $tpe,$tp2 1688290207Sjkim rotr $tp2,$tp9,8 1689290207Sjkim xor $tpe,$tp1 1690290207Sjkim rotr $tp4,$tpb,24 1691290207Sjkim xor $tpe,$tp2 1692290207Sjkim lw $tp1,4($key) # modulo-scheduled 1693290207Sjkim xor $tpe,$tp4 1694290207Sjkim#else 1695238384Sjkim _ror $tp1,$tpd,16 1696238384Sjkim xor $tpe,$tp2 1697238384Sjkim _ror $tp2,$tpd,-16 1698238384Sjkim xor $tpe,$tp1 1699238384Sjkim _ror $tp1,$tp9,8 1700238384Sjkim xor $tpe,$tp2 1701238384Sjkim _ror $tp2,$tp9,-24 1702238384Sjkim xor $tpe,$tp1 1703238384Sjkim _ror $tp1,$tpb,24 1704238384Sjkim xor $tpe,$tp2 1705238384Sjkim _ror $tp2,$tpb,-8 1706238384Sjkim xor $tpe,$tp1 1707238384Sjkim lw $tp1,4($key) # modulo-scheduled 1708238384Sjkim xor $tpe,$tp2 1709290207Sjkim#endif 1710238384Sjkim sub $cnt,1 1711238384Sjkim sw $tpe,0($key) 1712238384Sjkim $PTR_ADD $key,4 1713238384Sjkim bnez $cnt,.Lmix 1714238384Sjkim 1715238384Sjkim li $t0,0 1716238384Sjkim.Ldkey_done: 1717238384Sjkim .set noreorder 1718238384Sjkim move $a0,$t0 1719238384Sjkim $REG_L $ra,$FRAMESIZE-1*$SZREG($sp) 1720238384Sjkim $REG_L $fp,$FRAMESIZE-2*$SZREG($sp) 1721238384Sjkim___ 1722238384Sjkim$code.=<<___ if ($flavour =~ /nubi/i); 1723238384Sjkim $REG_L $s3,$FRAMESIZE-11*$SZREG($sp) 1724238384Sjkim $REG_L $s2,$FRAMESIZE-12*$SZREG($sp) 1725238384Sjkim $REG_L $s1,$FRAMESIZE-13*$SZREG($sp) 1726238384Sjkim $REG_L $s0,$FRAMESIZE-14*$SZREG($sp) 1727238384Sjkim $REG_L $gp,$FRAMESIZE-15*$SZREG($sp) 1728238384Sjkim___ 1729238384Sjkim$code.=<<___; 1730238384Sjkim jr $ra 1731238384Sjkim $PTR_ADD $sp,$FRAMESIZE 1732246772Sjkim.end private_AES_set_decrypt_key 1733238384Sjkim___ 1734238384Sjkim}}} 1735238384Sjkim 1736238384Sjkim###################################################################### 1737238384Sjkim# Tables are kept in endian-neutral manner 1738238384Sjkim$code.=<<___; 1739238384Sjkim.rdata 1740290207Sjkim.align 10 1741238384SjkimAES_Te: 1742238384Sjkim.byte 0xc6,0x63,0x63,0xa5, 0xf8,0x7c,0x7c,0x84 # Te0 1743238384Sjkim.byte 0xee,0x77,0x77,0x99, 0xf6,0x7b,0x7b,0x8d 1744238384Sjkim.byte 0xff,0xf2,0xf2,0x0d, 0xd6,0x6b,0x6b,0xbd 1745238384Sjkim.byte 0xde,0x6f,0x6f,0xb1, 0x91,0xc5,0xc5,0x54 1746238384Sjkim.byte 0x60,0x30,0x30,0x50, 0x02,0x01,0x01,0x03 1747238384Sjkim.byte 0xce,0x67,0x67,0xa9, 0x56,0x2b,0x2b,0x7d 1748238384Sjkim.byte 0xe7,0xfe,0xfe,0x19, 0xb5,0xd7,0xd7,0x62 1749238384Sjkim.byte 0x4d,0xab,0xab,0xe6, 0xec,0x76,0x76,0x9a 1750238384Sjkim.byte 0x8f,0xca,0xca,0x45, 0x1f,0x82,0x82,0x9d 1751238384Sjkim.byte 0x89,0xc9,0xc9,0x40, 0xfa,0x7d,0x7d,0x87 1752238384Sjkim.byte 0xef,0xfa,0xfa,0x15, 0xb2,0x59,0x59,0xeb 1753238384Sjkim.byte 0x8e,0x47,0x47,0xc9, 0xfb,0xf0,0xf0,0x0b 1754238384Sjkim.byte 0x41,0xad,0xad,0xec, 0xb3,0xd4,0xd4,0x67 1755238384Sjkim.byte 0x5f,0xa2,0xa2,0xfd, 0x45,0xaf,0xaf,0xea 1756238384Sjkim.byte 0x23,0x9c,0x9c,0xbf, 0x53,0xa4,0xa4,0xf7 1757238384Sjkim.byte 0xe4,0x72,0x72,0x96, 0x9b,0xc0,0xc0,0x5b 1758238384Sjkim.byte 0x75,0xb7,0xb7,0xc2, 0xe1,0xfd,0xfd,0x1c 1759238384Sjkim.byte 0x3d,0x93,0x93,0xae, 0x4c,0x26,0x26,0x6a 1760238384Sjkim.byte 0x6c,0x36,0x36,0x5a, 0x7e,0x3f,0x3f,0x41 1761238384Sjkim.byte 0xf5,0xf7,0xf7,0x02, 0x83,0xcc,0xcc,0x4f 1762238384Sjkim.byte 0x68,0x34,0x34,0x5c, 0x51,0xa5,0xa5,0xf4 1763238384Sjkim.byte 0xd1,0xe5,0xe5,0x34, 0xf9,0xf1,0xf1,0x08 1764238384Sjkim.byte 0xe2,0x71,0x71,0x93, 0xab,0xd8,0xd8,0x73 1765238384Sjkim.byte 0x62,0x31,0x31,0x53, 0x2a,0x15,0x15,0x3f 1766238384Sjkim.byte 0x08,0x04,0x04,0x0c, 0x95,0xc7,0xc7,0x52 1767238384Sjkim.byte 0x46,0x23,0x23,0x65, 0x9d,0xc3,0xc3,0x5e 1768238384Sjkim.byte 0x30,0x18,0x18,0x28, 0x37,0x96,0x96,0xa1 1769238384Sjkim.byte 0x0a,0x05,0x05,0x0f, 0x2f,0x9a,0x9a,0xb5 1770238384Sjkim.byte 0x0e,0x07,0x07,0x09, 0x24,0x12,0x12,0x36 1771238384Sjkim.byte 0x1b,0x80,0x80,0x9b, 0xdf,0xe2,0xe2,0x3d 1772238384Sjkim.byte 0xcd,0xeb,0xeb,0x26, 0x4e,0x27,0x27,0x69 1773238384Sjkim.byte 0x7f,0xb2,0xb2,0xcd, 0xea,0x75,0x75,0x9f 1774238384Sjkim.byte 0x12,0x09,0x09,0x1b, 0x1d,0x83,0x83,0x9e 1775238384Sjkim.byte 0x58,0x2c,0x2c,0x74, 0x34,0x1a,0x1a,0x2e 1776238384Sjkim.byte 0x36,0x1b,0x1b,0x2d, 0xdc,0x6e,0x6e,0xb2 1777238384Sjkim.byte 0xb4,0x5a,0x5a,0xee, 0x5b,0xa0,0xa0,0xfb 1778238384Sjkim.byte 0xa4,0x52,0x52,0xf6, 0x76,0x3b,0x3b,0x4d 1779238384Sjkim.byte 0xb7,0xd6,0xd6,0x61, 0x7d,0xb3,0xb3,0xce 1780238384Sjkim.byte 0x52,0x29,0x29,0x7b, 0xdd,0xe3,0xe3,0x3e 1781238384Sjkim.byte 0x5e,0x2f,0x2f,0x71, 0x13,0x84,0x84,0x97 1782238384Sjkim.byte 0xa6,0x53,0x53,0xf5, 0xb9,0xd1,0xd1,0x68 1783238384Sjkim.byte 0x00,0x00,0x00,0x00, 0xc1,0xed,0xed,0x2c 1784238384Sjkim.byte 0x40,0x20,0x20,0x60, 0xe3,0xfc,0xfc,0x1f 1785238384Sjkim.byte 0x79,0xb1,0xb1,0xc8, 0xb6,0x5b,0x5b,0xed 1786238384Sjkim.byte 0xd4,0x6a,0x6a,0xbe, 0x8d,0xcb,0xcb,0x46 1787238384Sjkim.byte 0x67,0xbe,0xbe,0xd9, 0x72,0x39,0x39,0x4b 1788238384Sjkim.byte 0x94,0x4a,0x4a,0xde, 0x98,0x4c,0x4c,0xd4 1789238384Sjkim.byte 0xb0,0x58,0x58,0xe8, 0x85,0xcf,0xcf,0x4a 1790238384Sjkim.byte 0xbb,0xd0,0xd0,0x6b, 0xc5,0xef,0xef,0x2a 1791238384Sjkim.byte 0x4f,0xaa,0xaa,0xe5, 0xed,0xfb,0xfb,0x16 1792238384Sjkim.byte 0x86,0x43,0x43,0xc5, 0x9a,0x4d,0x4d,0xd7 1793238384Sjkim.byte 0x66,0x33,0x33,0x55, 0x11,0x85,0x85,0x94 1794238384Sjkim.byte 0x8a,0x45,0x45,0xcf, 0xe9,0xf9,0xf9,0x10 1795238384Sjkim.byte 0x04,0x02,0x02,0x06, 0xfe,0x7f,0x7f,0x81 1796238384Sjkim.byte 0xa0,0x50,0x50,0xf0, 0x78,0x3c,0x3c,0x44 1797238384Sjkim.byte 0x25,0x9f,0x9f,0xba, 0x4b,0xa8,0xa8,0xe3 1798238384Sjkim.byte 0xa2,0x51,0x51,0xf3, 0x5d,0xa3,0xa3,0xfe 1799238384Sjkim.byte 0x80,0x40,0x40,0xc0, 0x05,0x8f,0x8f,0x8a 1800238384Sjkim.byte 0x3f,0x92,0x92,0xad, 0x21,0x9d,0x9d,0xbc 1801238384Sjkim.byte 0x70,0x38,0x38,0x48, 0xf1,0xf5,0xf5,0x04 1802238384Sjkim.byte 0x63,0xbc,0xbc,0xdf, 0x77,0xb6,0xb6,0xc1 1803238384Sjkim.byte 0xaf,0xda,0xda,0x75, 0x42,0x21,0x21,0x63 1804238384Sjkim.byte 0x20,0x10,0x10,0x30, 0xe5,0xff,0xff,0x1a 1805238384Sjkim.byte 0xfd,0xf3,0xf3,0x0e, 0xbf,0xd2,0xd2,0x6d 1806238384Sjkim.byte 0x81,0xcd,0xcd,0x4c, 0x18,0x0c,0x0c,0x14 1807238384Sjkim.byte 0x26,0x13,0x13,0x35, 0xc3,0xec,0xec,0x2f 1808238384Sjkim.byte 0xbe,0x5f,0x5f,0xe1, 0x35,0x97,0x97,0xa2 1809238384Sjkim.byte 0x88,0x44,0x44,0xcc, 0x2e,0x17,0x17,0x39 1810238384Sjkim.byte 0x93,0xc4,0xc4,0x57, 0x55,0xa7,0xa7,0xf2 1811238384Sjkim.byte 0xfc,0x7e,0x7e,0x82, 0x7a,0x3d,0x3d,0x47 1812238384Sjkim.byte 0xc8,0x64,0x64,0xac, 0xba,0x5d,0x5d,0xe7 1813238384Sjkim.byte 0x32,0x19,0x19,0x2b, 0xe6,0x73,0x73,0x95 1814238384Sjkim.byte 0xc0,0x60,0x60,0xa0, 0x19,0x81,0x81,0x98 1815238384Sjkim.byte 0x9e,0x4f,0x4f,0xd1, 0xa3,0xdc,0xdc,0x7f 1816238384Sjkim.byte 0x44,0x22,0x22,0x66, 0x54,0x2a,0x2a,0x7e 1817238384Sjkim.byte 0x3b,0x90,0x90,0xab, 0x0b,0x88,0x88,0x83 1818238384Sjkim.byte 0x8c,0x46,0x46,0xca, 0xc7,0xee,0xee,0x29 1819238384Sjkim.byte 0x6b,0xb8,0xb8,0xd3, 0x28,0x14,0x14,0x3c 1820238384Sjkim.byte 0xa7,0xde,0xde,0x79, 0xbc,0x5e,0x5e,0xe2 1821238384Sjkim.byte 0x16,0x0b,0x0b,0x1d, 0xad,0xdb,0xdb,0x76 1822238384Sjkim.byte 0xdb,0xe0,0xe0,0x3b, 0x64,0x32,0x32,0x56 1823238384Sjkim.byte 0x74,0x3a,0x3a,0x4e, 0x14,0x0a,0x0a,0x1e 1824238384Sjkim.byte 0x92,0x49,0x49,0xdb, 0x0c,0x06,0x06,0x0a 1825238384Sjkim.byte 0x48,0x24,0x24,0x6c, 0xb8,0x5c,0x5c,0xe4 1826238384Sjkim.byte 0x9f,0xc2,0xc2,0x5d, 0xbd,0xd3,0xd3,0x6e 1827238384Sjkim.byte 0x43,0xac,0xac,0xef, 0xc4,0x62,0x62,0xa6 1828238384Sjkim.byte 0x39,0x91,0x91,0xa8, 0x31,0x95,0x95,0xa4 1829238384Sjkim.byte 0xd3,0xe4,0xe4,0x37, 0xf2,0x79,0x79,0x8b 1830238384Sjkim.byte 0xd5,0xe7,0xe7,0x32, 0x8b,0xc8,0xc8,0x43 1831238384Sjkim.byte 0x6e,0x37,0x37,0x59, 0xda,0x6d,0x6d,0xb7 1832238384Sjkim.byte 0x01,0x8d,0x8d,0x8c, 0xb1,0xd5,0xd5,0x64 1833238384Sjkim.byte 0x9c,0x4e,0x4e,0xd2, 0x49,0xa9,0xa9,0xe0 1834238384Sjkim.byte 0xd8,0x6c,0x6c,0xb4, 0xac,0x56,0x56,0xfa 1835238384Sjkim.byte 0xf3,0xf4,0xf4,0x07, 0xcf,0xea,0xea,0x25 1836238384Sjkim.byte 0xca,0x65,0x65,0xaf, 0xf4,0x7a,0x7a,0x8e 1837238384Sjkim.byte 0x47,0xae,0xae,0xe9, 0x10,0x08,0x08,0x18 1838238384Sjkim.byte 0x6f,0xba,0xba,0xd5, 0xf0,0x78,0x78,0x88 1839238384Sjkim.byte 0x4a,0x25,0x25,0x6f, 0x5c,0x2e,0x2e,0x72 1840238384Sjkim.byte 0x38,0x1c,0x1c,0x24, 0x57,0xa6,0xa6,0xf1 1841238384Sjkim.byte 0x73,0xb4,0xb4,0xc7, 0x97,0xc6,0xc6,0x51 1842238384Sjkim.byte 0xcb,0xe8,0xe8,0x23, 0xa1,0xdd,0xdd,0x7c 1843238384Sjkim.byte 0xe8,0x74,0x74,0x9c, 0x3e,0x1f,0x1f,0x21 1844238384Sjkim.byte 0x96,0x4b,0x4b,0xdd, 0x61,0xbd,0xbd,0xdc 1845238384Sjkim.byte 0x0d,0x8b,0x8b,0x86, 0x0f,0x8a,0x8a,0x85 1846238384Sjkim.byte 0xe0,0x70,0x70,0x90, 0x7c,0x3e,0x3e,0x42 1847238384Sjkim.byte 0x71,0xb5,0xb5,0xc4, 0xcc,0x66,0x66,0xaa 1848238384Sjkim.byte 0x90,0x48,0x48,0xd8, 0x06,0x03,0x03,0x05 1849238384Sjkim.byte 0xf7,0xf6,0xf6,0x01, 0x1c,0x0e,0x0e,0x12 1850238384Sjkim.byte 0xc2,0x61,0x61,0xa3, 0x6a,0x35,0x35,0x5f 1851238384Sjkim.byte 0xae,0x57,0x57,0xf9, 0x69,0xb9,0xb9,0xd0 1852238384Sjkim.byte 0x17,0x86,0x86,0x91, 0x99,0xc1,0xc1,0x58 1853238384Sjkim.byte 0x3a,0x1d,0x1d,0x27, 0x27,0x9e,0x9e,0xb9 1854238384Sjkim.byte 0xd9,0xe1,0xe1,0x38, 0xeb,0xf8,0xf8,0x13 1855238384Sjkim.byte 0x2b,0x98,0x98,0xb3, 0x22,0x11,0x11,0x33 1856238384Sjkim.byte 0xd2,0x69,0x69,0xbb, 0xa9,0xd9,0xd9,0x70 1857238384Sjkim.byte 0x07,0x8e,0x8e,0x89, 0x33,0x94,0x94,0xa7 1858238384Sjkim.byte 0x2d,0x9b,0x9b,0xb6, 0x3c,0x1e,0x1e,0x22 1859238384Sjkim.byte 0x15,0x87,0x87,0x92, 0xc9,0xe9,0xe9,0x20 1860238384Sjkim.byte 0x87,0xce,0xce,0x49, 0xaa,0x55,0x55,0xff 1861238384Sjkim.byte 0x50,0x28,0x28,0x78, 0xa5,0xdf,0xdf,0x7a 1862238384Sjkim.byte 0x03,0x8c,0x8c,0x8f, 0x59,0xa1,0xa1,0xf8 1863238384Sjkim.byte 0x09,0x89,0x89,0x80, 0x1a,0x0d,0x0d,0x17 1864238384Sjkim.byte 0x65,0xbf,0xbf,0xda, 0xd7,0xe6,0xe6,0x31 1865238384Sjkim.byte 0x84,0x42,0x42,0xc6, 0xd0,0x68,0x68,0xb8 1866238384Sjkim.byte 0x82,0x41,0x41,0xc3, 0x29,0x99,0x99,0xb0 1867238384Sjkim.byte 0x5a,0x2d,0x2d,0x77, 0x1e,0x0f,0x0f,0x11 1868238384Sjkim.byte 0x7b,0xb0,0xb0,0xcb, 0xa8,0x54,0x54,0xfc 1869238384Sjkim.byte 0x6d,0xbb,0xbb,0xd6, 0x2c,0x16,0x16,0x3a 1870238384Sjkim 1871238384SjkimAES_Td: 1872238384Sjkim.byte 0x51,0xf4,0xa7,0x50, 0x7e,0x41,0x65,0x53 # Td0 1873238384Sjkim.byte 0x1a,0x17,0xa4,0xc3, 0x3a,0x27,0x5e,0x96 1874238384Sjkim.byte 0x3b,0xab,0x6b,0xcb, 0x1f,0x9d,0x45,0xf1 1875238384Sjkim.byte 0xac,0xfa,0x58,0xab, 0x4b,0xe3,0x03,0x93 1876238384Sjkim.byte 0x20,0x30,0xfa,0x55, 0xad,0x76,0x6d,0xf6 1877238384Sjkim.byte 0x88,0xcc,0x76,0x91, 0xf5,0x02,0x4c,0x25 1878238384Sjkim.byte 0x4f,0xe5,0xd7,0xfc, 0xc5,0x2a,0xcb,0xd7 1879238384Sjkim.byte 0x26,0x35,0x44,0x80, 0xb5,0x62,0xa3,0x8f 1880238384Sjkim.byte 0xde,0xb1,0x5a,0x49, 0x25,0xba,0x1b,0x67 1881238384Sjkim.byte 0x45,0xea,0x0e,0x98, 0x5d,0xfe,0xc0,0xe1 1882238384Sjkim.byte 0xc3,0x2f,0x75,0x02, 0x81,0x4c,0xf0,0x12 1883238384Sjkim.byte 0x8d,0x46,0x97,0xa3, 0x6b,0xd3,0xf9,0xc6 1884238384Sjkim.byte 0x03,0x8f,0x5f,0xe7, 0x15,0x92,0x9c,0x95 1885238384Sjkim.byte 0xbf,0x6d,0x7a,0xeb, 0x95,0x52,0x59,0xda 1886238384Sjkim.byte 0xd4,0xbe,0x83,0x2d, 0x58,0x74,0x21,0xd3 1887238384Sjkim.byte 0x49,0xe0,0x69,0x29, 0x8e,0xc9,0xc8,0x44 1888238384Sjkim.byte 0x75,0xc2,0x89,0x6a, 0xf4,0x8e,0x79,0x78 1889238384Sjkim.byte 0x99,0x58,0x3e,0x6b, 0x27,0xb9,0x71,0xdd 1890238384Sjkim.byte 0xbe,0xe1,0x4f,0xb6, 0xf0,0x88,0xad,0x17 1891238384Sjkim.byte 0xc9,0x20,0xac,0x66, 0x7d,0xce,0x3a,0xb4 1892238384Sjkim.byte 0x63,0xdf,0x4a,0x18, 0xe5,0x1a,0x31,0x82 1893238384Sjkim.byte 0x97,0x51,0x33,0x60, 0x62,0x53,0x7f,0x45 1894238384Sjkim.byte 0xb1,0x64,0x77,0xe0, 0xbb,0x6b,0xae,0x84 1895238384Sjkim.byte 0xfe,0x81,0xa0,0x1c, 0xf9,0x08,0x2b,0x94 1896238384Sjkim.byte 0x70,0x48,0x68,0x58, 0x8f,0x45,0xfd,0x19 1897238384Sjkim.byte 0x94,0xde,0x6c,0x87, 0x52,0x7b,0xf8,0xb7 1898238384Sjkim.byte 0xab,0x73,0xd3,0x23, 0x72,0x4b,0x02,0xe2 1899238384Sjkim.byte 0xe3,0x1f,0x8f,0x57, 0x66,0x55,0xab,0x2a 1900238384Sjkim.byte 0xb2,0xeb,0x28,0x07, 0x2f,0xb5,0xc2,0x03 1901238384Sjkim.byte 0x86,0xc5,0x7b,0x9a, 0xd3,0x37,0x08,0xa5 1902238384Sjkim.byte 0x30,0x28,0x87,0xf2, 0x23,0xbf,0xa5,0xb2 1903238384Sjkim.byte 0x02,0x03,0x6a,0xba, 0xed,0x16,0x82,0x5c 1904238384Sjkim.byte 0x8a,0xcf,0x1c,0x2b, 0xa7,0x79,0xb4,0x92 1905238384Sjkim.byte 0xf3,0x07,0xf2,0xf0, 0x4e,0x69,0xe2,0xa1 1906238384Sjkim.byte 0x65,0xda,0xf4,0xcd, 0x06,0x05,0xbe,0xd5 1907238384Sjkim.byte 0xd1,0x34,0x62,0x1f, 0xc4,0xa6,0xfe,0x8a 1908238384Sjkim.byte 0x34,0x2e,0x53,0x9d, 0xa2,0xf3,0x55,0xa0 1909238384Sjkim.byte 0x05,0x8a,0xe1,0x32, 0xa4,0xf6,0xeb,0x75 1910238384Sjkim.byte 0x0b,0x83,0xec,0x39, 0x40,0x60,0xef,0xaa 1911238384Sjkim.byte 0x5e,0x71,0x9f,0x06, 0xbd,0x6e,0x10,0x51 1912238384Sjkim.byte 0x3e,0x21,0x8a,0xf9, 0x96,0xdd,0x06,0x3d 1913238384Sjkim.byte 0xdd,0x3e,0x05,0xae, 0x4d,0xe6,0xbd,0x46 1914238384Sjkim.byte 0x91,0x54,0x8d,0xb5, 0x71,0xc4,0x5d,0x05 1915238384Sjkim.byte 0x04,0x06,0xd4,0x6f, 0x60,0x50,0x15,0xff 1916238384Sjkim.byte 0x19,0x98,0xfb,0x24, 0xd6,0xbd,0xe9,0x97 1917238384Sjkim.byte 0x89,0x40,0x43,0xcc, 0x67,0xd9,0x9e,0x77 1918238384Sjkim.byte 0xb0,0xe8,0x42,0xbd, 0x07,0x89,0x8b,0x88 1919238384Sjkim.byte 0xe7,0x19,0x5b,0x38, 0x79,0xc8,0xee,0xdb 1920238384Sjkim.byte 0xa1,0x7c,0x0a,0x47, 0x7c,0x42,0x0f,0xe9 1921238384Sjkim.byte 0xf8,0x84,0x1e,0xc9, 0x00,0x00,0x00,0x00 1922238384Sjkim.byte 0x09,0x80,0x86,0x83, 0x32,0x2b,0xed,0x48 1923238384Sjkim.byte 0x1e,0x11,0x70,0xac, 0x6c,0x5a,0x72,0x4e 1924238384Sjkim.byte 0xfd,0x0e,0xff,0xfb, 0x0f,0x85,0x38,0x56 1925238384Sjkim.byte 0x3d,0xae,0xd5,0x1e, 0x36,0x2d,0x39,0x27 1926238384Sjkim.byte 0x0a,0x0f,0xd9,0x64, 0x68,0x5c,0xa6,0x21 1927238384Sjkim.byte 0x9b,0x5b,0x54,0xd1, 0x24,0x36,0x2e,0x3a 1928238384Sjkim.byte 0x0c,0x0a,0x67,0xb1, 0x93,0x57,0xe7,0x0f 1929238384Sjkim.byte 0xb4,0xee,0x96,0xd2, 0x1b,0x9b,0x91,0x9e 1930238384Sjkim.byte 0x80,0xc0,0xc5,0x4f, 0x61,0xdc,0x20,0xa2 1931238384Sjkim.byte 0x5a,0x77,0x4b,0x69, 0x1c,0x12,0x1a,0x16 1932238384Sjkim.byte 0xe2,0x93,0xba,0x0a, 0xc0,0xa0,0x2a,0xe5 1933238384Sjkim.byte 0x3c,0x22,0xe0,0x43, 0x12,0x1b,0x17,0x1d 1934238384Sjkim.byte 0x0e,0x09,0x0d,0x0b, 0xf2,0x8b,0xc7,0xad 1935238384Sjkim.byte 0x2d,0xb6,0xa8,0xb9, 0x14,0x1e,0xa9,0xc8 1936238384Sjkim.byte 0x57,0xf1,0x19,0x85, 0xaf,0x75,0x07,0x4c 1937238384Sjkim.byte 0xee,0x99,0xdd,0xbb, 0xa3,0x7f,0x60,0xfd 1938238384Sjkim.byte 0xf7,0x01,0x26,0x9f, 0x5c,0x72,0xf5,0xbc 1939238384Sjkim.byte 0x44,0x66,0x3b,0xc5, 0x5b,0xfb,0x7e,0x34 1940238384Sjkim.byte 0x8b,0x43,0x29,0x76, 0xcb,0x23,0xc6,0xdc 1941238384Sjkim.byte 0xb6,0xed,0xfc,0x68, 0xb8,0xe4,0xf1,0x63 1942238384Sjkim.byte 0xd7,0x31,0xdc,0xca, 0x42,0x63,0x85,0x10 1943238384Sjkim.byte 0x13,0x97,0x22,0x40, 0x84,0xc6,0x11,0x20 1944238384Sjkim.byte 0x85,0x4a,0x24,0x7d, 0xd2,0xbb,0x3d,0xf8 1945238384Sjkim.byte 0xae,0xf9,0x32,0x11, 0xc7,0x29,0xa1,0x6d 1946238384Sjkim.byte 0x1d,0x9e,0x2f,0x4b, 0xdc,0xb2,0x30,0xf3 1947238384Sjkim.byte 0x0d,0x86,0x52,0xec, 0x77,0xc1,0xe3,0xd0 1948238384Sjkim.byte 0x2b,0xb3,0x16,0x6c, 0xa9,0x70,0xb9,0x99 1949238384Sjkim.byte 0x11,0x94,0x48,0xfa, 0x47,0xe9,0x64,0x22 1950238384Sjkim.byte 0xa8,0xfc,0x8c,0xc4, 0xa0,0xf0,0x3f,0x1a 1951238384Sjkim.byte 0x56,0x7d,0x2c,0xd8, 0x22,0x33,0x90,0xef 1952238384Sjkim.byte 0x87,0x49,0x4e,0xc7, 0xd9,0x38,0xd1,0xc1 1953238384Sjkim.byte 0x8c,0xca,0xa2,0xfe, 0x98,0xd4,0x0b,0x36 1954238384Sjkim.byte 0xa6,0xf5,0x81,0xcf, 0xa5,0x7a,0xde,0x28 1955238384Sjkim.byte 0xda,0xb7,0x8e,0x26, 0x3f,0xad,0xbf,0xa4 1956238384Sjkim.byte 0x2c,0x3a,0x9d,0xe4, 0x50,0x78,0x92,0x0d 1957238384Sjkim.byte 0x6a,0x5f,0xcc,0x9b, 0x54,0x7e,0x46,0x62 1958238384Sjkim.byte 0xf6,0x8d,0x13,0xc2, 0x90,0xd8,0xb8,0xe8 1959238384Sjkim.byte 0x2e,0x39,0xf7,0x5e, 0x82,0xc3,0xaf,0xf5 1960238384Sjkim.byte 0x9f,0x5d,0x80,0xbe, 0x69,0xd0,0x93,0x7c 1961238384Sjkim.byte 0x6f,0xd5,0x2d,0xa9, 0xcf,0x25,0x12,0xb3 1962238384Sjkim.byte 0xc8,0xac,0x99,0x3b, 0x10,0x18,0x7d,0xa7 1963238384Sjkim.byte 0xe8,0x9c,0x63,0x6e, 0xdb,0x3b,0xbb,0x7b 1964238384Sjkim.byte 0xcd,0x26,0x78,0x09, 0x6e,0x59,0x18,0xf4 1965238384Sjkim.byte 0xec,0x9a,0xb7,0x01, 0x83,0x4f,0x9a,0xa8 1966238384Sjkim.byte 0xe6,0x95,0x6e,0x65, 0xaa,0xff,0xe6,0x7e 1967238384Sjkim.byte 0x21,0xbc,0xcf,0x08, 0xef,0x15,0xe8,0xe6 1968238384Sjkim.byte 0xba,0xe7,0x9b,0xd9, 0x4a,0x6f,0x36,0xce 1969238384Sjkim.byte 0xea,0x9f,0x09,0xd4, 0x29,0xb0,0x7c,0xd6 1970238384Sjkim.byte 0x31,0xa4,0xb2,0xaf, 0x2a,0x3f,0x23,0x31 1971238384Sjkim.byte 0xc6,0xa5,0x94,0x30, 0x35,0xa2,0x66,0xc0 1972238384Sjkim.byte 0x74,0x4e,0xbc,0x37, 0xfc,0x82,0xca,0xa6 1973238384Sjkim.byte 0xe0,0x90,0xd0,0xb0, 0x33,0xa7,0xd8,0x15 1974238384Sjkim.byte 0xf1,0x04,0x98,0x4a, 0x41,0xec,0xda,0xf7 1975238384Sjkim.byte 0x7f,0xcd,0x50,0x0e, 0x17,0x91,0xf6,0x2f 1976238384Sjkim.byte 0x76,0x4d,0xd6,0x8d, 0x43,0xef,0xb0,0x4d 1977238384Sjkim.byte 0xcc,0xaa,0x4d,0x54, 0xe4,0x96,0x04,0xdf 1978238384Sjkim.byte 0x9e,0xd1,0xb5,0xe3, 0x4c,0x6a,0x88,0x1b 1979238384Sjkim.byte 0xc1,0x2c,0x1f,0xb8, 0x46,0x65,0x51,0x7f 1980238384Sjkim.byte 0x9d,0x5e,0xea,0x04, 0x01,0x8c,0x35,0x5d 1981238384Sjkim.byte 0xfa,0x87,0x74,0x73, 0xfb,0x0b,0x41,0x2e 1982238384Sjkim.byte 0xb3,0x67,0x1d,0x5a, 0x92,0xdb,0xd2,0x52 1983238384Sjkim.byte 0xe9,0x10,0x56,0x33, 0x6d,0xd6,0x47,0x13 1984238384Sjkim.byte 0x9a,0xd7,0x61,0x8c, 0x37,0xa1,0x0c,0x7a 1985238384Sjkim.byte 0x59,0xf8,0x14,0x8e, 0xeb,0x13,0x3c,0x89 1986238384Sjkim.byte 0xce,0xa9,0x27,0xee, 0xb7,0x61,0xc9,0x35 1987238384Sjkim.byte 0xe1,0x1c,0xe5,0xed, 0x7a,0x47,0xb1,0x3c 1988238384Sjkim.byte 0x9c,0xd2,0xdf,0x59, 0x55,0xf2,0x73,0x3f 1989238384Sjkim.byte 0x18,0x14,0xce,0x79, 0x73,0xc7,0x37,0xbf 1990238384Sjkim.byte 0x53,0xf7,0xcd,0xea, 0x5f,0xfd,0xaa,0x5b 1991238384Sjkim.byte 0xdf,0x3d,0x6f,0x14, 0x78,0x44,0xdb,0x86 1992238384Sjkim.byte 0xca,0xaf,0xf3,0x81, 0xb9,0x68,0xc4,0x3e 1993238384Sjkim.byte 0x38,0x24,0x34,0x2c, 0xc2,0xa3,0x40,0x5f 1994238384Sjkim.byte 0x16,0x1d,0xc3,0x72, 0xbc,0xe2,0x25,0x0c 1995238384Sjkim.byte 0x28,0x3c,0x49,0x8b, 0xff,0x0d,0x95,0x41 1996238384Sjkim.byte 0x39,0xa8,0x01,0x71, 0x08,0x0c,0xb3,0xde 1997238384Sjkim.byte 0xd8,0xb4,0xe4,0x9c, 0x64,0x56,0xc1,0x90 1998238384Sjkim.byte 0x7b,0xcb,0x84,0x61, 0xd5,0x32,0xb6,0x70 1999238384Sjkim.byte 0x48,0x6c,0x5c,0x74, 0xd0,0xb8,0x57,0x42 2000238384Sjkim 2001238384Sjkim.byte 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38 # Td4 2002238384Sjkim.byte 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb 2003238384Sjkim.byte 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87 2004238384Sjkim.byte 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb 2005238384Sjkim.byte 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d 2006238384Sjkim.byte 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e 2007238384Sjkim.byte 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2 2008238384Sjkim.byte 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25 2009238384Sjkim.byte 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16 2010238384Sjkim.byte 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92 2011238384Sjkim.byte 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda 2012238384Sjkim.byte 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84 2013238384Sjkim.byte 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a 2014238384Sjkim.byte 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06 2015238384Sjkim.byte 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02 2016238384Sjkim.byte 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b 2017238384Sjkim.byte 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea 2018238384Sjkim.byte 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73 2019238384Sjkim.byte 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85 2020238384Sjkim.byte 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e 2021238384Sjkim.byte 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89 2022238384Sjkim.byte 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b 2023238384Sjkim.byte 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20 2024238384Sjkim.byte 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4 2025238384Sjkim.byte 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31 2026238384Sjkim.byte 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f 2027238384Sjkim.byte 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d 2028238384Sjkim.byte 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef 2029238384Sjkim.byte 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0 2030238384Sjkim.byte 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61 2031238384Sjkim.byte 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26 2032238384Sjkim.byte 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d 2033290207Sjkim 2034290207SjkimAES_Te4: 2035290207Sjkim.byte 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5 # Te4 2036290207Sjkim.byte 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76 2037290207Sjkim.byte 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0 2038290207Sjkim.byte 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0 2039290207Sjkim.byte 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc 2040290207Sjkim.byte 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15 2041290207Sjkim.byte 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a 2042290207Sjkim.byte 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75 2043290207Sjkim.byte 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0 2044290207Sjkim.byte 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84 2045290207Sjkim.byte 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b 2046290207Sjkim.byte 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf 2047290207Sjkim.byte 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85 2048290207Sjkim.byte 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8 2049290207Sjkim.byte 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5 2050290207Sjkim.byte 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2 2051290207Sjkim.byte 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17 2052290207Sjkim.byte 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73 2053290207Sjkim.byte 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88 2054290207Sjkim.byte 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb 2055290207Sjkim.byte 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c 2056290207Sjkim.byte 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79 2057290207Sjkim.byte 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9 2058290207Sjkim.byte 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08 2059290207Sjkim.byte 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6 2060290207Sjkim.byte 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a 2061290207Sjkim.byte 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e 2062290207Sjkim.byte 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e 2063290207Sjkim.byte 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94 2064290207Sjkim.byte 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf 2065290207Sjkim.byte 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68 2066290207Sjkim.byte 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 2067290207Sjkim 2068290207Sjkim.byte 0x01,0x00,0x00,0x00, 0x02,0x00,0x00,0x00 # rcon 2069290207Sjkim.byte 0x04,0x00,0x00,0x00, 0x08,0x00,0x00,0x00 2070290207Sjkim.byte 0x10,0x00,0x00,0x00, 0x20,0x00,0x00,0x00 2071290207Sjkim.byte 0x40,0x00,0x00,0x00, 0x80,0x00,0x00,0x00 2072290207Sjkim.byte 0x1B,0x00,0x00,0x00, 0x36,0x00,0x00,0x00 2073238384Sjkim___ 2074238384Sjkim 2075238384Sjkimforeach (split("\n",$code)) { 2076238384Sjkim s/\`([^\`]*)\`/eval $1/ge; 2077238384Sjkim 2078238384Sjkim # made-up _instructions, _xtr, _ins, _ror and _bias, cope 2079238384Sjkim # with byte order dependencies... 2080238384Sjkim if (/^\s+_/) { 2081238384Sjkim s/(_[a-z]+\s+)(\$[0-9]+),([^,]+)(#.*)*$/$1$2,$2,$3/; 2082238384Sjkim 2083238384Sjkim s/_xtr\s+(\$[0-9]+),(\$[0-9]+),([0-9]+(\-2)*)/ 2084238384Sjkim sprintf("srl\t$1,$2,%d",$big_endian ? eval($3) 2085238384Sjkim : eval("24-$3"))/e or 2086238384Sjkim s/_ins\s+(\$[0-9]+),(\$[0-9]+),([0-9]+)/ 2087238384Sjkim sprintf("sll\t$1,$2,%d",$big_endian ? eval($3) 2088238384Sjkim : eval("24-$3"))/e or 2089290207Sjkim s/_ins2\s+(\$[0-9]+),(\$[0-9]+),([0-9]+)/ 2090290207Sjkim sprintf("ins\t$1,$2,%d,8",$big_endian ? eval($3) 2091290207Sjkim : eval("24-$3"))/e or 2092238384Sjkim s/_ror\s+(\$[0-9]+),(\$[0-9]+),(\-?[0-9]+)/ 2093238384Sjkim sprintf("srl\t$1,$2,%d",$big_endian ? eval($3) 2094238384Sjkim : eval("$3*-1"))/e or 2095238384Sjkim s/_bias\s+(\$[0-9]+),(\$[0-9]+),([0-9]+)/ 2096238384Sjkim sprintf("sll\t$1,$2,%d",$big_endian ? eval($3) 2097238384Sjkim : eval("($3-16)&31"))/e; 2098238384Sjkim 2099238384Sjkim s/srl\s+(\$[0-9]+),(\$[0-9]+),\-([0-9]+)/ 2100238384Sjkim sprintf("sll\t$1,$2,$3")/e or 2101238384Sjkim s/srl\s+(\$[0-9]+),(\$[0-9]+),0/ 2102238384Sjkim sprintf("and\t$1,$2,0xff")/e or 2103238384Sjkim s/(sll\s+\$[0-9]+,\$[0-9]+,0)/#$1/; 2104238384Sjkim } 2105238384Sjkim 2106238384Sjkim # convert lwl/lwr and swr/swl to little-endian order 2107238384Sjkim if (!$big_endian && /^\s+[sl]w[lr]\s+/) { 2108238384Sjkim s/([sl]wl.*)([0-9]+)\((\$[0-9]+)\)/ 2109238384Sjkim sprintf("$1%d($3)",eval("$2-$2%4+($2%4-1)&3"))/e or 2110238384Sjkim s/([sl]wr.*)([0-9]+)\((\$[0-9]+)\)/ 2111238384Sjkim sprintf("$1%d($3)",eval("$2-$2%4+($2%4+1)&3"))/e; 2112238384Sjkim } 2113238384Sjkim 2114290207Sjkim if (!$big_endian) { 2115290207Sjkim s/(rotr\s+\$[0-9]+,\$[0-9]+),([0-9]+)/sprintf("$1,%d",32-$2)/e; 2116290207Sjkim s/(ext\s+\$[0-9]+,\$[0-9]+),([0-9]+),8/sprintf("$1,%d,8",24-$2)/e; 2117290207Sjkim } 2118290207Sjkim 2119238384Sjkim print $_,"\n"; 2120238384Sjkim} 2121238384Sjkim 2122238384Sjkimclose STDOUT; 2123