aes-m68k.S revision 1.2
1| $NetBSD: aes-m68k.S,v 1.2 2018/03/05 00:59:43 christos Exp $ 2 3| Copyright (C) 2016 Tetsuya Isaki. All rights reserved. 4| Copyright (C) 2016 Y.Sugahara (moveccr). All rights reserved. 5| 6| Redistribution and use in source and binary forms, with or without 7| modification, are permitted provided that the following conditions 8| are met: 9| 1. Redistributions of source code must retain the above copyright 10| notice, this list of conditions and the following disclaimer. 11| 2. Redistributions in binary form must reproduce the above copyright 12| notice, this list of conditions and the following disclaimer in the 13| documentation and/or other materials provided with the distribution. 14| 15| THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 16| IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 17| OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 18| IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 19| INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 20| BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 21| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 22| AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 23| OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24| OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25| SUCH DAMAGE. 26 27#define rd_key (0) 28#define rounds (60 * 4) 29 30| int 31| AES_set_encrypt_key(const unsigned char *userKey, 32| const int bits, 33| AES_KEY *key) 34 .global AES_set_encrypt_key 35 .type AES_set_encrypt_key, @function 36AES_set_encrypt_key: 37 moveml %d2-%d7/%a2-%a6,%sp@- 38 moveal %sp@(44+4),%a0 | userKey 39 moveal %sp@(44+8),%a1 | bits 40 moveal %sp@(44+12),%a3 | key 41 42 tstl %a0 43 beq pek_return1 | return -1 if userKey == NULL 44 tstl %a3 45 beq pek_return1 | return -1 if key == NULL 46 47 cmpaw #128,%a1 48 bne pek192_check | unless bits == 128 49pek128: 50 | %d0-%d7 rk[0..7] 51 | %a0 userKey, Te0 52 | %a1 Te1 53 | %a2 Te2 54 | %a3 key, Te3 55 | %a4 rcon_byte 56 | %a5 &rk[4] 57 | %a6 end of rcon_byte 58 59 moveq #10,%d0 60 movel %d0,%a3@(rounds) | key->rounds = 10 61 62 lea %a3@(rd_key),%a5 | &rk[0] 63 64 | rk[0] = GETU32(userKey ); 65 | rk[1] = GETU32(userKey + 4); 66 | rk[2] = GETU32(userKey + 8); 67 | rk[3] = GETU32(userKey + 12); 68 moveml %a0@,%d0-%d3 69 movel %d0,%a5@+ 70 movel %d1,%a5@+ 71 movel %d2,%a5@+ 72 movel %d3,%a5@+ 73 74 lea %pc@(Te0),%a0 | %a0 = Te0 75 lea %a0@(256*4),%a1 | %a1 = Te1 76 lea %a1@(256*4),%a2 | %a2 = Te2 77 lea %a2@(256*4),%a3 | %a3 = Te3 78 79 moveq #0,%d7 80 lea %pc@(rcon_byte),%a4 81 lea %a4@(10),%a6 82 83pek128_loop: 84 | d6 consists of four Te index bytes 85 movel %d3,%d5 | d5=rk[3] as {1,2,3,0} 86 moveb %d5,%d7 | d7=temp 87 moveb %a0@(2,%d7:w:4),%d4 | d4=$xxxxxx00 88 swap %d5 | d5={3,0,1,2} 89 lsll #8,%d4 | d4=$xxxx00xx 90 moveb %d5,%d7 | d7=temp>>16 91 moveb %a2@(0,%d7:w:4),%d6 | d6=$xxxxxx22 92 lsrl #8,%d5 | d5={x,3,0,1} 93 moveb %a4@+,%d7 | LSByte ^= rcon[i] 94 eorb %d7,%d6 95 lsll #8,%d6 | d6=$xxxx22xx 96 moveb %d5,%d7 | d7=temp>>24 97 moveb %a1@(3,%d7:w:4),%d4 | d4=$xxxx0011 98 swap %d5 | d5={0,1,x,3} 99 moveb %d5,%d7 | d7=temp>>8 100 moveb %a3@(1,%d7:w:4),%d6 | d6=$xxxx2233 101 swap %d6 | d6=$2233xxxx 102 movew %d4,%d6 | d6=$22330011 103 104 eorl %d6,%d0 | rk[4] = rk[0]^ (Te..) 105 movel %d0,%a5@+ 106 eorl %d0,%d1 | rk[5] = rk[1] ^ rk[4]; 107 movel %d1,%a5@+ 108 eorl %d1,%d2 | rk[6] = rk[2] ^ rk[5]; 109 movel %d2,%a5@+ 110 eorl %d2,%d3 | rk[7] = rk[3] ^ rk[6]; 111 movel %d3,%a5@+ 112 113 cmpal %a4,%a6 114 bne pek128_loop |if (++i == 10) return 0; 115 116pek_return0: 117 moveql #0,%d0 118pek_return: 119 moveml %sp@+,%d2-%d7/%a2-%a6 120 rts 121 122pek192_check: 123 | %a0 userKey 124 | %a1 bits 125 | %a3 key 126 cmpaw #192,%a1 127 bne pek256_check | unless bits == 192 128pek192: 129 | %a0 Te0 130 | %a1 Te1 131 | %a2 Te2 132 | %a3 Te3 133 | %a4 rcon_byte 134 | %a5 &rk[6] 135 | %a6 end of rcon_byte 136 moveq #12,%d0 137 movel %d0,%a3@(rounds) | key->rounds = 12 138 139 lea %a3@(rd_key),%a5 | &rk[0] 140 141 | rk[0] = GETU32(userKey ); 142 | rk[1] = GETU32(userKey + 4); 143 | rk[2] = GETU32(userKey + 8); 144 | rk[3] = GETU32(userKey + 12); 145 | rk[4] = GETU32(userKey + 16); 146 | rk[5] = GETU32(userKey + 20); 147 moveml %a0@,%d0-%d5 | copy userKey[0..23] 148 movel %d0,%a5@+ 149 movel %d1,%a5@+ 150 movel %d2,%a5@+ 151 movel %d3,%a5@+ 152 movel %d4,%a5@+ 153 movel %d5,%a5@ | read again later 154 155 lea %pc@(Te0 +2),%a0 | %a0 = Te0 + 2 156 lea %a0@(256*4 -2+3),%a1 | %a1 = Te1 + 3 157 lea %a1@(256*4 -3+0),%a2 | %a2 = Te2 + 0 158 lea %a2@(256*4 +0+1),%a3 | %a3 = Te3 + 1 159 160 moveq #0,%d7 161 lea %pc@(rcon_byte),%a4 162 lea %a4@(8),%a6 163 bra pek192_loop_start 164 165pek192_loop: 166 eorl %d3,%d4 | rk[10] = rk[4] ^ rk[9] 167 movel %d4,%a5@+ | %d4 is rk[10] 168 eorl %d4,%d5 | rk[11] = rk[5] ^ rk[10] 169 movel %d5,%a5@ | %d5 is rk[11] 170 171pek192_loop_start: 172 | %d0..%d5 = rk[0..5] 173 | 174 | temp = rk[5]; 175 | rk[6] = (Te0[(temp ) & 0xff] & 0x0000ff00) 176 | rk[6] |= (Te3[(temp >> 8) & 0xff] & 0x00ff0000) 177 | rk[6] |= (Te2[(temp >> 16) & 0xff] & 0xff000000) 178 | ^ rcon[i] 179 | rk[6] |= (Te1[(temp >> 24) ] & 0x000000ff) 180 moveb %d5,%d7 | temp >> 0 181 moveb %a0@(%d7:w:4),%d6 | d6=$xxxxxx00 182 rorl #8,%d6 | d6=$00xxxxxx 183 lsrl #8,%d5 | temp >> 8 184 moveb %d5,%d7 185 moveb %a3@(%d7:w:4),%d6 | d6=$00xxxx11 186 rorl #8,%d6 | d6=$1100xxxx 187 lsrl #8,%d5 | temp >> 16 188 moveb %d5,%d7 189 moveb %a2@(%d7:w:4),%d6 | d6=$1100xx22 190 moveb %a4@+,%d7 | LSByte ^= rcon[i] 191 eorb %d7,%d6 192 rorl #8,%d6 | d6=$221100xx 193 lsrl #8,%d5 | temp >> 24 194 moveb %a1@(%d5:w:4),%d6 | d6=$22110033 195 196 movel %a5@+,%d5 | read rk[5] again 197 | (faster than keeping %a5) 198 199 eorl %d6,%d0 | rk[6] ^= rk[0] 200 movel %d0,%a5@+ | %d0 is rk[6] 201 eorl %d0,%d1 | rk[7] = rk[1] ^ rk[6] 202 movel %d1,%a5@+ | %d1 is rk[7] 203 eorl %d1,%d2 | rk[8] = rk[2] ^ rk[7] 204 movel %d2,%a5@+ | %d2 is rk[8] 205 eorl %d2,%d3 | rk[9] = rk[3] ^ rk[8] 206 movel %d3,%a5@+ | %d3 is rk[9] 207 208 cmpal %a4,%a6 209 bne pek192_loop 210 bra pek_return0 211 212 213pek256_check: 214 | %a0 userKey 215 | %a1 bits 216 | %a3 key 217 cmpaw #256,%a1 218 bne pek_return2 | otherwise return -2 219pek256: 220 | %a0 Te0 221 | %a1 Te1 222 | %a2 Te2 223 | %a3 Te3 224 | %a4 rcon_byte 225 | %a5 &rk[6] 226 | %a6 end of rcon_byte 227 moveq #14,%d0 228 movel %d0,%a3@(rounds) | key->rounds = 14 229 230 lea %a3@(rd_key),%a5 | &rk[0] 231 232 | rk[0] = GETU32(userKey ); 233 | rk[1] = GETU32(userKey + 4); 234 | rk[2] = GETU32(userKey + 8); 235 | rk[3] = GETU32(userKey + 12); 236 | rk[4] = GETU32(userKey + 16); 237 | rk[5] = GETU32(userKey + 20); 238 | rk[6] = GETU32(userKey + 24); 239 | rk[7] = GETU32(userKey + 28); 240 moveml %a0@,%d0-%d7 | copy userKey[0..31] 241 movel %d0,%a5@+ 242 movel %d1,%a5@+ 243 movel %d2,%a5@+ 244 movel %d3,%a5@+ 245 movel %d4,%a5@+ 246 movel %d5,%a5@+ 247 movel %d6,%a5@+ 248 movel %d7,%a5@+ 249 250 lea %pc@(Te0 +2),%a0 | %a0 = Te0 + 2 251 lea %a0@(256*4 -2+3),%a1 | %a1 = Te1 + 3 252 lea %a1@(256*4 -3+0),%a2 | %a2 = Te2 + 0 253 lea %a2@(256*4 +0+1),%a3 | %a3 = Te3 + 1 254 255 lea %pc@(rcon_byte),%a4 256 lea %a4@(7),%a6 257 bra pek256_loop_start 258 259pek256_loop: 260 | %d0: rk[8] -> work 261 | %d1: rk[9] -> work 262 | %d2: rk[10] 263 | %d3: rk[11] -> work 264 | %d4: rk[4] 265 | %d5: work -> rk[5] 266 | %d6: work -> rk[6] 267 | %d7: work -> rk[7] 268 | %a5 = &rk[12] 269 | 270 | temp = rk[11]; 271 | rk[12] = (Te1[(temp ) & 0xff] & 0x000000ff); 272 | rk[12] |= (Te0[(temp >> 8) & 0xff] & 0x0000ff00); 273 | rk[12] |= (Te3[(temp >> 16) & 0xff] & 0x00ff0000); 274 | rk[12] |= (Te2[(temp >> 24) ] & 0xff000000); 275 | rk[12] ^= rk[ 4]; 276 277 moveml %a5@(-7*4),%d5-%d7 | %d5..%d7 = rk[5..7] 278 279 moveq #0,%d0 280 moveb %d3,%d0 | temp >> 0 281 moveb %a1@(%d0:w:4),%d1 | d1=$xxxxxx00 282 rorl #8,%d1 | d1=$00xxxxxx 283 lsrl #8,%d3 | temp >> 8 284 moveb %d3,%d0 285 moveb %a0@(%d0:w:4),%d1 | d1=$00xxxx11 286 rorl #8,%d1 | d1=$1100xxxx 287 lsrl #8,%d3 | temp >> 16 288 moveb %d3,%d0 289 moveb %a3@(%d0:w:4),%d1 | d1=$1100xx22 290 rorl #8,%d1 | d1=$221100xx 291 lsrl #8,%d3 | temp >> 24 292 moveb %a2@(%d3:w:4),%d1 | d1=$22110033 293 rorl #8,%d1 | d1=$33221100 294 295 eorl %d1,%d4 | rk[12] ^= rk[4] 296 movel %d4,%a5@+ | %d4 is rk[12] 297 eorl %d4,%d5 | rk[13] = rk[5] ^ rk[12] 298 movel %d5,%a5@+ | %d5 is rk[13] 299 eorl %d5,%d6 | rk[14] = rk[6] ^ rk[13] 300 movel %d6,%a5@+ | %d6 is rk[14] 301 eorl %d6,%d7 | rk[15] = rk[7] ^ rk[14] 302 movel %d7,%a5@+ | %d7 is rk[15] 303 304 | %d0: work -> rk[8] 305 | %d1: work -> rk[9] 306 | %d2: rk[10] 307 | %d3: work -> rk[11] 308 | %d4: rk[12] 309 | %d5: rk[13] 310 | %d6: rk[14] 311 | %d7: rk[15] 312 | %a5 = &rk[16] 313 314 moveml %a5@(-8*4),%d0-%d1 | %d0..%d1 = rk[8..9] 315 movel %a5@(-5*4),%d3 | %d3 = rk[11] 316 317pek256_loop_start: 318 | %d0: rk[0] 319 | %d1: rk[1] 320 | %d2: rk[2] 321 | %d3: rk[3] 322 | %d4: rk[4] 323 | %d5: rk[5] -> work 324 | %d6: rk[6] -> work 325 | %d7: rk[7] 326 | %a5 = &rk[8] 327 | 328 | temp = rk[7] 329 | rk[8] = (Te0[(temp ) & 0xff] & 0x0000ff00); 330 | rk[8] |= (Te3[(temp >> 8) & 0xff] & 0x00ff0000); 331 | rk[8] |= (Te2[(temp >> 16) & 0xff] & 0xff000000); 332 | rk[8] ^= rcon[i]; 333 | rk[8] |= (Te1[(temp >> 24) ] & 0x000000ff); 334 | rk[8] ^= rk[ 0]; 335 336 moveq #0,%d5 337 moveb %d7,%d5 | temp >> 0 338 moveb %a0@(%d5:w:4),%d6 | d6=$xxxxxx00 339 rorl #8,%d6 | d6=$00xxxxxx 340 lsrl #8,%d7 | temp >> 8 341 moveb %d7,%d5 342 moveb %a3@(%d5:w:4),%d6 | d6=$00xxxx11 343 rorl #8,%d6 | d6=$1100xxxx 344 lsrl #8,%d7 | temp >> 16 345 moveb %d7,%d5 346 moveb %a2@(%d5:w:4),%d6 | d6=$1100xx22 347 moveb %a4@+,%d5 | LSByte ^= rcon[i] 348 eorb %d5,%d6 349 rorl #8,%d6 | d6=$221100xx 350 lsrl #8,%d7 | temp >> 24 351 moveb %a1@(%d7:w:4),%d6 | d6=$22110033 352 353 eorl %d6,%d0 | rk[8] ^= rk[0] 354 movel %d0,%a5@+ | %d0 is rk[8] 355 eorl %d0,%d1 | rk[9] = rk[1] ^ rk[8] 356 movel %d1,%a5@+ | %d1 is rk[9] 357 eorl %d1,%d2 | rk[10] = rk[2] ^ rk[9] 358 movel %d2,%a5@+ | %d2 is rk[10] 359 eorl %d2,%d3 | rk[11] = rk[3] ^ rk[10] 360 movel %d3,%a5@+ | %d3 is rk[11] 361 362 | %d0: rk[8] 363 | %d1: rk[9] 364 | %d2: rk[10] 365 | %d3: rk[11] 366 | %d4: rk[4] 367 | %d5: work 368 | %d6: work 369 | %d7: work 370 371 cmpal %a4,%a6 372 bne pek256_loop 373 bra pek_return0 374 375pek_return1: 376 moveql #-1,%d0 377 bra pek_return 378pek_return2: 379 moveql #-2,%d0 380 bra pek_return 381 .size AES_set_encrypt_key, .-AES_set_encrypt_key 382 383 384| int 385| private_AES_set_decrypt_key(const unsigned char *userKey, 386| const int bits, 387| AES_KEY *key) 388 .global AES_set_decrypt_key 389 .type AES_set_decrypt_key, @function 390AES_set_decrypt_key: 391 moveml %d2-%d7/%a2-%a6,%sp@- 392 moveal %sp@(44+4),%a0 | userKey 393 moveal %sp@(44+8),%a1 | bits 394 moveal %sp@(44+12),%a3 | key 395 396 /* first, start with an encryption schedule */ 397 movel %a3,%sp@- 398 movel %a1,%sp@- 399 movel %a0,%sp@- 400 bsr AES_set_encrypt_key 401 lea %sp@(12),%sp 402 bmi pdk_return 403 404 /* invert the order of the round keys: */ 405 lea %a3@(rd_key),%a5 | %a5 := &rk[0] 406 movel %a3@(rounds),%d4 407 lslw #4,%d4 408 lea %a5@(%d4),%a4 | %a4 := &rk[j] 409 moveal %a4,%a6 | %a6 for the next loop 410pdk_invert_loop: 411 movel %a5@,%d0 412 movel %a4@,%a5@+ 413 movel %d0,%a4@+ 414 415 movel %a5@,%d0 416 movel %a4@,%a5@+ 417 movel %d0,%a4@+ 418 419 movel %a5@,%d0 420 movel %a4@,%a5@+ 421 movel %d0,%a4@+ 422 423 movel %a5@,%d0 424 movel %a4@,%a5@+ 425 movel %d0,%a4@ 426 427 lea %a4@(-28),%a4 428 429 cmpal %a4,%a5 430 bcs pdk_invert_loop 431 432 /* 433 * apply the inverse MixColumn transform to all round keys but 434 * the first and the last: 435 */ 436 lea %a3@(rd_key + 16),%a5 | rk += 4 437 lea %pc@(Te1+3),%a4 | LSByte of Te1 438 lea %pc@(Td0),%a0 | %a0 = Td0 439 lea %a0@(256*4),%a1 | %a1 = Td1 440 lea %a1@(256*4),%a2 | %a2 = Td2 441 lea %a2@(256*4),%a3 | %a3 = Td3 442 443 | for (i = 1; i < key->rounds; i++) 444 moveq #0,%d1 445pdk_apply_loop: 446 | rk[0] = 447 | Td3[Te1[(rk[0] ) & 0xff] & 0xff] ^ 448 | Td2[Te1[(rk[0] >> 8) & 0xff] & 0xff] ^ 449 | Td1[Te1[(rk[0] >> 16) & 0xff] & 0xff] ^ 450 | Td0[Te1[(rk[0] >> 24) ] & 0xff]; 451 movel %a5@,%d0 452 moveb %d0,%d1 | rk[0] >> 0 453 moveb %a4@(%d1:w:4),%d1 | Te1[] 454 movel %a3@(%d1:w:4),%d2 | Td3[] 455 lsrl #8,%d0 456 moveb %d0,%d1 | rk[0] >> 8 457 moveb %a4@(%d1:w:4),%d1 | Te1[] 458 movel %a2@(%d1:w:4),%d3 | Td3[] 459 eorl %d3,%d2 460 lsrl #8,%d0 461 moveb %d0,%d1 | rk[0] >> 16 462 moveb %a4@(%d1:w:4),%d1 | Te1[] 463 movel %a1@(%d1:w:4),%d3 | Td3[] 464 eorl %d3,%d2 465 lsrl #8,%d0 | rk[0] >> 24 466 moveb %a4@(%d0:w:4),%d1 | Te1[] 467 movel %a0@(%d1:w:4),%d3 468 eorl %d3,%d2 469 movel %d2,%a5@+ | -> rk[0] 470 471 cmpal %a6,%a5 472 bcs pdk_apply_loop 473 474 moveql #0,%d0 475pdk_return: 476 moveml %sp@+,%d2-%d7/%a2-%a6 477 rts 478 .size AES_set_decrypt_key, .-AES_set_decrypt_key 479 480 481| void 482| AES_encrypt(const unsigned char *in, 483| unsigned char *out, 484| const AES_KEY *key) 485 .global AES_encrypt 486 .type AES_encrypt, @function 487AES_encrypt: 488 | %a0 in, Te0 489 | %a1 out, Te1 490 | %a2 Te2 491 | %a3 key, Te3 492 | %a4 loop end 493 | %a5 rk 494 moveml %d2-%d7/%a2-%a5,%sp@- 495 moveal %sp@(40+4),%a0 | in 496 moveal %sp@(40+12),%a3 | key 497 498 lea %a3@(rd_key),%a5 499 movel %a3@(rounds),%d0 500 501 lslw #4,%d0 | key->rounds * 16 502 lea %a5@(0,%d0),%a4 | %a4 := %a5 + key->rounds * 16 503 504 movel %a0@+,%d0 505 movel %a5@+,%d5 506 eorl %d5,%d0 | s0 = GETU32(in ) ^ rk[0] 507 508 movel %a0@+,%d1 509 movel %a5@+,%d5 510 eorl %d5,%d1 | s1 = GETU32(in + 4) ^ rk[1] 511 512 movel %a0@+,%d2 513 movel %a5@+,%d5 514 eorl %d5,%d2 | s2 = GETU32(in + 8) ^ rk[2] 515 516 movel %a0@+,%d3 517 movel %a5@+,%d5 518 eorl %d5,%d3 | s3 = GETU32(in + 12) ^ rk[3] 519 520 lea %pc@(Te0),%a0 | %a0 = Te0 521 lea %a0@(256*4),%a1 | %a1 = Te1 522 lea %a1@(256*4),%a2 | %a2 = Te2 523 lea %a2@(256*4),%a3 | %a3 = Te3 524 525 bra enc_loop_start 526 527enc_loop: 528 | s1 = Te3[(t0 ) & 0xff]; 529 | s2 = Te2[(t0 >> 8) & 0xff]; 530 | s3 = Te1[(t0 >> 16) & 0xff]; 531 | s0 = Te0[(t0 >> 24) ]; 532 | 533 | s2 ^= Te3[(t1 ) & 0xff]; 534 | s3 ^= Te2[(t1 >> 8) & 0xff]; 535 | s0 ^= Te1[(t1 >> 16) & 0xff]; 536 | s1 ^= Te0[(t1 >> 24) ]; 537 | 538 | s3 ^= Te3[(t2 ) & 0xff]; 539 | s0 ^= Te2[(t2 >> 8) & 0xff]; 540 | s1 ^= Te1[(t2 >> 16) & 0xff]; 541 | s2 ^= Te0[(t2 >> 24) ]; 542 | 543 | s0 ^= Te3[(t3 ) & 0xff]; 544 | s1 ^= Te2[(t3 >> 8) & 0xff]; 545 | s2 ^= Te1[(t3 >> 16) & 0xff]; 546 | s3 ^= Te0[(t3 >> 24) ]; 547 | 548 | s0 ^= rk[0]; 549 | s1 ^= rk[1]; 550 | s2 ^= rk[2]; 551 | s3 ^= rk[3]; 552 | 553 | %d0..%d3: s0..s3 554 | %d4..%d7: t0..t3 555 556 moveq #0,%d3 557 moveb %d4,%d3 558 movel %a3@(%d3:w:4),%d1 559 lsrl #8,%d4 560 moveb %d4,%d3 561 movel %a2@(%d3:w:4),%d2 562 lsrl #8,%d4 563 moveb %d4,%d3 564 movel %a1@(%d3:w:4),%d3 565 lsrl #8,%d4 566 movel %a0@(%d4:w:4),%d0 567 568 moveb %d5,%d4 569 movel %a3@(%d4:w:4),%d4 570 eorl %d4,%d2 571 lsrl #8,%d5 572 moveql #0,%d4 573 moveb %d5,%d4 574 movel %a2@(%d4:w:4),%d4 575 eorl %d4,%d3 576 lsrl #8,%d5 577 moveql #0,%d4 578 moveb %d5,%d4 579 movel %a1@(%d4:w:4),%d4 580 eorl %d4,%d0 581 lsrl #8,%d5 582 movel %a0@(%d5:w:4),%d4 583 eorl %d4,%d1 584 585 moveb %d6,%d5 586 movel %a3@(%d5:w:4),%d4 587 eorl %d4,%d3 588 lsrl #8,%d6 589 moveb %d6,%d5 590 movel %a2@(%d5:w:4),%d4 591 eorl %d4,%d0 592 lsrl #8,%d6 593 moveb %d6,%d5 594 movel %a1@(%d5:w:4),%d4 595 eorl %d4,%d1 596 lsrl #8,%d6 597 movel %a0@(%d6:w:4),%d4 598 eorl %d4,%d2 599 600 moveb %d7,%d5 601 movel %a3@(%d5:w:4),%d4 602 eorl %d4,%d0 603 lsrl #8,%d7 604 moveb %d7,%d5 605 movel %a2@(%d5:w:4),%d4 606 eorl %d4,%d1 607 lsrl #8,%d7 608 moveb %d7,%d5 609 movel %a1@(%d5:w:4),%d4 610 eorl %d4,%d2 611 lsrl #8,%d7 612 movel %a0@(%d7:w:4),%d4 613 eorl %d4,%d3 614 615 movel %a5@+,%d4 616 eorl %d4,%d0 617 movel %a5@+,%d4 618 eorl %d4,%d1 619 movel %a5@+,%d4 620 eorl %d4,%d2 621 movel %a5@+,%d4 622 eorl %d4,%d3 623 624enc_loop_start: 625 | t1 = Te3[(s0 ) & 0xff]; 626 | t2 = Te2[(s0 >> 8) & 0xff]; 627 | t3 = Te1[(s0 >> 16) & 0xff]; 628 | t0 = Te0[(s0 >> 24) & 0xff]; 629 | 630 | t2 ^= Te3[(s1 >> 0) & 0xff]; 631 | t3 ^= Te2[(s1 >> 8) & 0xff]; 632 | t0 ^= Te1[(s1 >> 16) & 0xff]; 633 | t1 ^= Te0[(s1 >> 24) & 0xff]; 634 | 635 | t3 ^= Te3[(s2 >> 0) & 0xff]; 636 | t0 ^= Te2[(s2 >> 8) & 0xff]; 637 | t1 ^= Te1[(s2 >> 16) & 0xff]; 638 | t2 ^= Te0[(s2 >> 24) & 0xff]; 639 | 640 | t0 ^= Te3[(s3 >> 0) & 0xff]; 641 | t1 ^= Te2[(s3 >> 8) & 0xff]; 642 | t2 ^= Te1[(s3 >> 16) & 0xff]; 643 | t3 ^= Te0[(s3 >> 24) & 0xff]; 644 | 645 | t0 ^= rk[4]; 646 | t1 ^= rk[5]; 647 | t2 ^= rk[6]; 648 | t3 ^= rk[7]; 649 | 650 | %d0..%d3: s0..s3 651 | %d4..%d7: t0..t3 652 653 moveql #0,%d7 654 moveb %d0,%d7 655 movel %a3@(%d7:w:4),%d5 656 lsrl #8,%d0 657 moveb %d0,%d7 658 movel %a2@(%d7:w:4),%d6 659 lsrl #8,%d0 660 moveb %d0,%d7 661 movel %a1@(%d7:w:4),%d7 662 lsrl #8,%d0 663 movel %a0@(%d0:w:4),%d4 664 665 moveb %d1,%d0 666 movel %a3@(%d0:w:4),%d0 667 eorl %d0,%d6 668 lsrl #8,%d1 669 moveql #0,%d0 670 moveb %d1,%d0 671 movel %a2@(%d0:w:4),%d0 672 eorl %d0,%d7 673 lsrl #8,%d1 674 moveql #0,%d0 675 moveb %d1,%d0 676 movel %a1@(%d0:w:4),%d0 677 eorl %d0,%d4 678 lsrl #8,%d1 679 movel %a0@(%d1:w:4),%d0 680 eorl %d0,%d5 681 682 moveb %d2,%d1 683 movel %a3@(%d1:w:4),%d0 684 eorl %d0,%d7 685 lsrl #8,%d2 686 moveb %d2,%d1 687 movel %a2@(%d1:w:4),%d0 688 eorl %d0,%d4 689 lsrl #8,%d2 690 moveb %d2,%d1 691 movel %a1@(%d1:w:4),%d0 692 eorl %d0,%d5 693 lsrl #8,%d2 694 movel %a0@(%d2:w:4),%d0 695 eorl %d0,%d6 696 697 moveb %d3,%d1 698 movel %a3@(%d1:w:4),%d0 699 eorl %d0,%d4 700 lsrl #8,%d3 701 moveb %d3,%d1 702 movel %a2@(%d1:w:4),%d0 703 eorl %d0,%d5 704 lsrl #8,%d3 705 moveb %d3,%d1 706 movel %a1@(%d1:w:4),%d0 707 eorl %d0,%d6 708 lsrl #8,%d3 709 movel %a0@(%d3:w:4),%d0 710 eorl %d0,%d7 711 712 movel %a5@+,%d0 713 eorl %d0,%d4 714 movel %a5@+,%d0 715 eorl %d0,%d5 716 movel %a5@+,%d0 717 eorl %d0,%d6 718 movel %a5@+,%d0 719 eorl %d0,%d7 720 721 cmpal %a5,%a4 722 bne enc_loop | if (--r == 0) break; 723enc_last: 724 /* 725 * apply last round and 726 * map cipher state to byte array block: 727 */ 728 moveal %sp@(40+8),%a4 | out 729 addql #2,%a0 | Te0 += 2 730 addql #3,%a1 | Te1 += 3 731 addql #1,%a3 | Te3 += 1 732 | Te2 += 0 733 734 | s1 = (Te1[(t0 ) & 0xff] & 0x000000ff); 735 | s2 = (Te0[(t0 >> 8) & 0xff] & 0x0000ff00); 736 | s3 = (Te3[(t0 >> 16) & 0xff] & 0x00ff0000); 737 | s0 = (Te2[(t0 >> 24) ] & 0xff000000); 738 | 739 | s2 |= (Te1[(t1 ) & 0xff] & 0x000000ff); 740 | s3 |= (Te0[(t1 >> 8) & 0xff] & 0x0000ff00); 741 | s0 |= (Te3[(t1 >> 16) & 0xff] & 0x00ff0000); 742 | s1 |= (Te2[(t1 >> 24) ] & 0xff000000); 743 | 744 | s3 |= (Te1[(t2 ) & 0xff] & 0x000000ff); 745 | s0 |= (Te0[(t2 >> 8) & 0xff] & 0x0000ff00); 746 | s1 |= (Te3[(t2 >> 16) & 0xff] & 0x00ff0000); 747 | s2 |= (Te2[(t2 >> 24) ] & 0xff000000); 748 | 749 | s0 |= (Te1[(t3 ) & 0xff] & 0x000000ff); 750 | s1 |= (Te0[(t3 >> 8) & 0xff] & 0x0000ff00); 751 | s2 |= (Te3[(t3 >> 16) & 0xff] & 0x00ff0000); 752 | s3 |= (Te2[(t3 >> 24) ] & 0xff000000); 753 754 moveql #0,%d0 755 moveb %d4,%d0 | t0 >> 0 756 moveb %a1@(%d0:w:4),%d1 | d1=$xxxxxx00 757 lsrl #8,%d4 | t0 >> 8 758 lsll #8,%d1 | d1=$xxxx00xx 759 moveb %d4,%d0 760 moveb %a0@(%d0:w:4),%d2 | d2=$xxxxxx00 761 lsrl #8,%d4 | t0 >> 16 762 lsll #8,%d2 | d2=$xxxx00xx 763 moveb %d4,%d0 764 moveb %a3@(%d0:w:4),%d3 | d3=$xxxxxx00 765 lsrl #8,%d4 | t0 >> 24 766 lsll #8,%d3 | d3=$xxxx00xx 767 moveb %a2@(%d4:w:4),%d0 | d0=$xxxxxx00 768 lsll #8,%d0 | d0=$xxxx00xx 769 770 moveb %d5,%d4 | t1 >> 0 771 moveb %a1@(%d4:w:4),%d2 | d2=$xxxx0011 772 lsrl #8,%d5 | t1 >> 8 773 lsll #8,%d2 | d2=$xx0011xx 774 moveb %d5,%d4 775 moveb %a0@(%d4:w:4),%d3 | d3=$xxxx0011 776 lsrl #8,%d5 | t1 >> 16 777 lsll #8,%d3 | d3=$xx0011xx 778 moveb %d5,%d4 779 moveb %a3@(%d4:w:4),%d0 | d0=$xxxx0011 780 lsrl #8,%d5 | t1 >> 24 781 lsll #8,%d0 | d0=$xx0011xx 782 moveb %a1@(%d5:w:4),%d1 | d1=$xxxx0011 783 lsll #8,%d1 | d1=$xx0011xx 784 785 moveb %d6,%d4 | t2 >> 0 786 moveb %a1@(%d4:w:4),%d3 | d3=$xx001122 787 lsrl #8,%d6 | t2 >> 8 788 lsll #8,%d3 | d3=$001122xx 789 moveb %d6,%d4 790 moveb %a0@(%d4:w:4),%d0 | d0=$xx001122 791 lsrl #8,%d6 | t2 >> 16 792 lsll #8,%d0 | d0=$001122xx 793 moveb %d6,%d4 794 moveb %a3@(%d4:w:4),%d1 | d1=$xx001122 795 lsrl #8,%d6 | t2 >> 24 796 lsll #8,%d1 | d1=$001122xx 797 moveb %a2@(%d6:w:4),%d2 | d2=$xx001122 798 lsll #8,%d2 | d2=$001122xx 799 800 moveb %d7,%d4 | t3 >> 0 801 moveb %a1@(%d4:w:4),%d0 | d0=$00112233 802 lsrl #8,%d7 | t3 >> 8 803 moveb %d7,%d4 804 moveb %a0@(%d4:w:4),%d1 | d1=$00112233 805 lsrl #8,%d7 | t3 >> 16 806 roll #8,%d1 | d1=$11223300 807 moveb %d7,%d4 808 moveb %a3@(%d4:w:4),%d2 | d2=$00112233 809 lsrl #8,%d7 | t3 >> 24 810 swap %d2 | d2=$22330011 811 moveb %a2@(%d7:w:4),%d3 | d3=$00112233 812 rorl #8,%d3 | d3=$33001122 813 814 movel %a5@+,%d4 815 eorl %d4,%d0 | s0 ^= rk[0] 816 movel %a5@+,%d4 817 eorl %d4,%d1 | s1 ^= rk[1] 818 movel %a5@+,%d4 819 eorl %d4,%d2 | s2 ^= rk[2] 820 movel %a5@+,%d4 821 eorl %d4,%d3 | s3 ^= rk[3] 822 823 movel %d0,%a4@+ | PUTU32(out , s0); 824 movel %d1,%a4@+ | PUTU32(out + 4, s1); 825 movel %d2,%a4@+ | PUTU32(out + 8, s2); 826 movel %d3,%a4@ | PUTU32(out + 12, s3); 827 828 moveml %sp@+,%d2-%d7/%a2-%a5 829 rts 830 .size AES_set_decrypt_key, .-AES_set_decrypt_key 831 832| void 833| AES_decrypt(const unsigned char *in, 834| unsigned char *out, 835| const AES_KEY *key) 836 .global AES_decrypt 837 .type AES_decrypt, @function 838AES_decrypt: 839 | %a0 in, Td0 840 | %a1 out, Td1 841 | %a2 Td2 842 | %a3 key, Td3 843 | %a4 loop end, Td4 844 | %a5 rk 845 moveml %d2-%d7/%a2-%a5,%sp@- 846 moveal %sp@(40+4),%a0 | in 847 moveal %sp@(40+12),%a3 | key 848 849 lea %a3@(rd_key),%a5 850 movel %a3@(rounds),%d0 851 852 lslw #4,%d0 | key->rounds * 16 853 lea %a5@(0,%d0),%a4 | %a4 := %a5 + key->rounds * 16 854 855 movel %a0@+,%d0 856 movel %a5@+,%d5 857 eorl %d5,%d0 | s0 = GETU32(in ) ^ rk[0] 858 859 movel %a0@+,%d1 860 movel %a5@+,%d5 861 eorl %d5,%d1 | s1 = GETU32(in + 4) ^ rk[1] 862 863 movel %a0@+,%d2 864 movel %a5@+,%d5 865 eorl %d5,%d2 | s2 = GETU32(in + 8) ^ rk[2] 866 867 movel %a0@+,%d3 868 movel %a5@+,%d5 869 eorl %d5,%d3 | s3 = GETU32(in + 12) ^ rk[3] 870 871 lea %pc@(Td0),%a0 | %a0 = Td0 872 lea %a0@(256*4),%a1 | %a1 = Td1 873 lea %a1@(256*4),%a2 | %a2 = Td2 874 lea %a2@(256*4),%a3 | %a3 = Td3 875 876 bra dec_loop_start 877 878dec_loop: 879 | s3 = Td3[(t0 ) & 0xff]; 880 | s2 = Td2[(t0 >> 8) & 0xff]; 881 | s1 = Td1[(t0 >> 16) & 0xff]; 882 | s0 = Td0[(t0 >> 24) ]; 883 | 884 | s0 ^= Td3[(t1 ) & 0xff]; 885 | s3 ^= Td2[(t1 >> 8) & 0xff]; 886 | s2 ^= Td1[(t1 >> 16) & 0xff]; 887 | s1 ^= Td0[(t1 >> 24) ]; 888 | 889 | s1 ^= Td3[(t2 ) & 0xff]; 890 | s0 ^= Td2[(t2 >> 8) & 0xff]; 891 | s3 ^= Td1[(t2 >> 16) & 0xff]; 892 | s2 ^= Td0[(t2 >> 24) ]; 893 | 894 | s2 ^= Td3[(t3 ) & 0xff]; 895 | s1 ^= Td2[(t3 >> 8) & 0xff]; 896 | s0 ^= Td1[(t3 >> 16) & 0xff]; 897 | s3 ^= Td0[(t3 >> 24) ]; 898 | 899 | s0 ^= rk[0]; 900 | s1 ^= rk[1]; 901 | s2 ^= rk[2]; 902 | s3 ^= rk[3]; 903 | 904 | %d0..%d3: s0..s3 905 | %d4..%d7: t0..t3 906 907 moveq #0,%d1 908 moveb %d4,%d1 909 movel %a3@(%d1:w:4),%d3 910 lsrl #8,%d4 911 moveb %d4,%d1 912 movel %a2@(%d1:w:4),%d2 913 lsrl #8,%d4 914 moveb %d4,%d1 915 movel %a1@(%d1:w:4),%d1 916 lsrl #8,%d4 917 movel %a0@(%d4:w:4),%d0 918 919 moveb %d5,%d4 920 movel %a3@(%d4:w:4),%d4 921 eorl %d4,%d0 922 lsrl #8,%d5 923 moveql #0,%d4 924 moveb %d5,%d4 925 movel %a2@(%d4:w:4),%d4 926 eorl %d4,%d3 927 lsrl #8,%d5 928 moveql #0,%d4 929 moveb %d5,%d4 930 movel %a1@(%d4:w:4),%d4 931 eorl %d4,%d2 932 lsrl #8,%d5 933 movel %a0@(%d5:w:4),%d4 934 eorl %d4,%d1 935 936 moveb %d6,%d5 937 movel %a3@(%d5:w:4),%d4 938 eorl %d4,%d1 939 lsrl #8,%d6 940 moveb %d6,%d5 941 movel %a2@(%d5:w:4),%d4 942 eorl %d4,%d0 943 lsrl #8,%d6 944 moveb %d6,%d5 945 movel %a1@(%d5:w:4),%d4 946 eorl %d4,%d3 947 lsrl #8,%d6 948 movel %a0@(%d6:w:4),%d4 949 eorl %d4,%d2 950 951 moveb %d7,%d5 952 movel %a3@(%d5:w:4),%d4 953 eorl %d4,%d2 954 lsrl #8,%d7 955 moveb %d7,%d5 956 movel %a2@(%d5:w:4),%d4 957 eorl %d4,%d1 958 lsrl #8,%d7 959 moveb %d7,%d5 960 movel %a1@(%d5:w:4),%d4 961 eorl %d4,%d0 962 lsrl #8,%d7 963 movel %a0@(%d7:w:4),%d4 964 eorl %d4,%d3 965 966 movel %a5@+,%d4 967 eorl %d4,%d0 968 movel %a5@+,%d4 969 eorl %d4,%d1 970 movel %a5@+,%d4 971 eorl %d4,%d2 972 movel %a5@+,%d4 973 eorl %d4,%d3 974 975dec_loop_start: 976 | t3 = Td3[(s0 ) & 0xff]; 977 | t2 = Td2[(s0 >> 8) & 0xff]; 978 | t1 = Td1[(s0 >> 16) & 0xff]; 979 | t0 = Td0[(s0 >> 24) & 0xff]; 980 | 981 | t0 ^= Td3[(s1 >> 0) & 0xff]; 982 | t3 ^= Td2[(s1 >> 8) & 0xff]; 983 | t2 ^= Td1[(s1 >> 16) & 0xff]; 984 | t1 ^= Td0[(s1 >> 24) & 0xff]; 985 | 986 | t1 ^= Td3[(s2 >> 0) & 0xff]; 987 | t0 ^= Td2[(s2 >> 8) & 0xff]; 988 | t3 ^= Td1[(s2 >> 16) & 0xff]; 989 | t2 ^= Td0[(s2 >> 24) & 0xff]; 990 | 991 | t2 ^= Td3[(s3 >> 0) & 0xff]; 992 | t1 ^= Td2[(s3 >> 8) & 0xff]; 993 | t0 ^= Td1[(s3 >> 16) & 0xff]; 994 | t3 ^= Td0[(s3 >> 24) & 0xff]; 995 | 996 | t0 ^= rk[4]; 997 | t1 ^= rk[5]; 998 | t2 ^= rk[6]; 999 | t3 ^= rk[7]; 1000 | 1001 | %d0..%d3: s0..s3 1002 | %d4..%d7: t0..t3 1003 1004 moveql #0,%d5 1005 moveb %d0,%d5 1006 movel %a3@(%d5:w:4),%d7 1007 lsrl #8,%d0 1008 moveb %d0,%d5 1009 movel %a2@(%d5:w:4),%d6 1010 lsrl #8,%d0 1011 moveb %d0,%d5 1012 movel %a1@(%d5:w:4),%d5 1013 lsrl #8,%d0 1014 movel %a0@(%d0:w:4),%d4 1015 1016 moveb %d1,%d0 1017 movel %a3@(%d0:w:4),%d0 1018 eorl %d0,%d4 1019 lsrl #8,%d1 1020 moveql #0,%d0 1021 moveb %d1,%d0 1022 movel %a2@(%d0:w:4),%d0 1023 eorl %d0,%d7 1024 lsrl #8,%d1 1025 moveql #0,%d0 1026 moveb %d1,%d0 1027 movel %a1@(%d0:w:4),%d0 1028 eorl %d0,%d6 1029 lsrl #8,%d1 1030 movel %a0@(%d1:w:4),%d0 1031 eorl %d0,%d5 1032 1033 moveb %d2,%d1 1034 movel %a3@(%d1:w:4),%d0 1035 eorl %d0,%d5 1036 lsrl #8,%d2 1037 moveb %d2,%d1 1038 movel %a2@(%d1:w:4),%d0 1039 eorl %d0,%d4 1040 lsrl #8,%d2 1041 moveb %d2,%d1 1042 movel %a1@(%d1:w:4),%d0 1043 eorl %d0,%d7 1044 lsrl #8,%d2 1045 movel %a0@(%d2:w:4),%d0 1046 eorl %d0,%d6 1047 1048 moveb %d3,%d1 1049 movel %a3@(%d1:w:4),%d0 1050 eorl %d0,%d6 1051 lsrl #8,%d3 1052 moveb %d3,%d1 1053 movel %a2@(%d1:w:4),%d0 1054 eorl %d0,%d5 1055 lsrl #8,%d3 1056 moveb %d3,%d1 1057 movel %a1@(%d1:w:4),%d0 1058 eorl %d0,%d4 1059 lsrl #8,%d3 1060 movel %a0@(%d3:w:4),%d0 1061 eorl %d0,%d7 1062 1063 movel %a5@+,%d0 1064 eorl %d0,%d4 1065 movel %a5@+,%d0 1066 eorl %d0,%d5 1067 movel %a5@+,%d0 1068 eorl %d0,%d6 1069 movel %a5@+,%d0 1070 eorl %d0,%d7 1071 1072 cmpal %a5,%a4 1073 bne dec_loop | if (--r == 0) break; 1074 1075 /* 1076 * apply last round and 1077 * map cipher state to byte array block: 1078 */ 1079 | s3 = ((u32)Td4[(t0 >> 0) & 0xff] << 0); 1080 | s2 = ((u32)Td4[(t0 >> 8) & 0xff] << 8); 1081 | s1 = ((u32)Td4[(t0 >> 16) & 0xff] << 16); 1082 | s0 = ((u32)Td4[(t0 >> 24) & 0xff] << 24); 1083 | 1084 | s0 |= ((u32)Td4[(t1 >> 0) & 0xff] << 0); 1085 | s3 |= ((u32)Td4[(t1 >> 8) & 0xff] << 8); 1086 | s2 |= ((u32)Td4[(t1 >> 16) & 0xff] << 16); 1087 | s1 |= ((u32)Td4[(t1 >> 24) & 0xff] << 24); 1088 | 1089 | s1 |= ((u32)Td4[(t2 >> 0) & 0xff] << 0); 1090 | s0 |= ((u32)Td4[(t2 >> 8) & 0xff] << 8); 1091 | s3 |= ((u32)Td4[(t2 >> 16) & 0xff] << 16); 1092 | s2 |= ((u32)Td4[(t2 >> 24) & 0xff] << 24); 1093 | 1094 | s2 |= ((u32)Td4[(t3 >> 0) & 0xff] << 0); 1095 | s1 |= ((u32)Td4[(t3 >> 8) & 0xff] << 8); 1096 | s0 |= ((u32)Td4[(t3 >> 16) & 0xff] << 16); 1097 | s3 |= ((u32)Td4[(t3 >> 24) & 0xff] << 24); 1098 | 1099 | s0 ^= rk[0]; 1100 | PUTU32(out , s0); 1101 | s1 ^= rk[1]; 1102 | PUTU32(out + 4, s1); 1103 | s2 ^= rk[2]; 1104 | PUTU32(out + 8, s2); 1105 | s3 ^= rk[3]; 1106 | PUTU32(out + 12, s3); 1107 | 1108 | %d4..%d7: t0..t3 1109 | %d0..%d3: s0..s3 1110 1111 lea %pc@(Td4),%a4 1112 moveq #0,%d0 1113 moveb %d4,%d0 1114 moveb %a4@(%d0),%d3 1115 rorl #8,%d3 1116 lsrl #8,%d4 1117 moveb %d4,%d0 1118 moveb %a4@(%d0),%d2 1119 rorl #8,%d2 1120 lsrl #8,%d4 1121 moveb %d4,%d0 1122 moveb %a4@(%d0),%d1 1123 rorl #8,%d1 1124 lsrl #8,%d4 1125 moveb %a4@(%d4),%d0 1126 rorl #8,%d0 1127 1128 moveb %d5,%d4 1129 moveb %a4@(%d4),%d0 1130 rorl #8,%d0 1131 lsrl #8,%d5 1132 moveb %d5,%d4 1133 moveb %a4@(%d4),%d3 1134 rorl #8,%d3 1135 lsrl #8,%d5 1136 moveb %d5,%d4 1137 moveb %a4@(%d4),%d2 1138 rorl #8,%d2 1139 lsrl #8,%d5 1140 moveb %a4@(%d5),%d1 1141 rorl #8,%d1 1142 1143 moveb %d6,%d4 1144 moveb %a4@(%d4),%d1 1145 rorl #8,%d1 | d1=$221100xx 1146 lsrl #8,%d6 1147 moveb %d6,%d4 1148 moveb %a4@(%d4),%d0 1149 rorl #8,%d0 | d0=$221100xx 1150 lsrl #8,%d6 1151 moveb %d6,%d4 1152 moveb %a4@(%d4),%d3 1153 rorl #8,%d3 | d3=$221100xx 1154 lsrl #8,%d6 1155 moveb %a4@(%d6),%d2 1156 rorl #8,%d2 | d2=$221100xx 1157 1158 moveb %d7,%d4 1159 moveb %a4@(%d4),%d2 | d2=$22110033 1160 lsrl #8,%d7 1161 moveb %d7,%d4 1162 moveb %a4@(%d4),%d1 | d1=$22110033 1163 roll #8,%d1 | d1=$11003322 1164 lsrl #8,%d7 1165 moveb %d7,%d4 1166 moveb %a4@(%d4),%d0 | d0=$22110033 1167 swap %d0 | d0=$00332211 1168 lsrl #8,%d7 1169 moveb %a4@(%d7),%d3 | d3=$22110033 1170 rorl #8,%d3 | d3=$33221100 1171 1172 moveal %sp@(40+8),%a4 | out 1173 1174 movel %a5@+,%d4 1175 eorl %d4,%d0 1176 movel %d0,%a4@+ 1177 1178 movel %a5@+,%d4 1179 eorl %d4,%d1 1180 movel %d1,%a4@+ 1181 1182 movel %a5@+,%d4 1183 eorl %d4,%d2 1184 movel %d2,%a4@+ 1185 1186 movel %a5@+,%d4 1187 eorl %d4,%d3 1188 movel %d3,%a4@ 1189 1190 moveml %sp@+,%d2-%d7/%a2-%a5 1191 rts 1192 .size AES_decrypt, .-AES_decrypt 1193 1194 .data 1195 .balign 4 1196Te0: 1197 .long 0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d 1198 .long 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554 1199 .long 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d 1200 .long 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a 1201 .long 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87 1202 .long 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b 1203 .long 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea 1204 .long 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b 1205 .long 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a 1206 .long 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f 1207 .long 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108 1208 .long 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f 1209 .long 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e 1210 .long 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5 1211 .long 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d 1212 .long 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f 1213 .long 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e 1214 .long 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb 1215 .long 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce 1216 .long 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497 1217 .long 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c 1218 .long 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed 1219 .long 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b 1220 .long 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a 1221 .long 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16 1222 .long 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594 1223 .long 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81 1224 .long 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3 1225 .long 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a 1226 .long 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504 1227 .long 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163 1228 .long 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d 1229 .long 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f 1230 .long 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739 1231 .long 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47 1232 .long 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395 1233 .long 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f 1234 .long 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883 1235 .long 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c 1236 .long 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76 1237 .long 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e 1238 .long 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4 1239 .long 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6 1240 .long 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b 1241 .long 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7 1242 .long 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0 1243 .long 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25 1244 .long 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818 1245 .long 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72 1246 .long 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651 1247 .long 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21 1248 .long 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85 1249 .long 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa 1250 .long 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12 1251 .long 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0 1252 .long 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9 1253 .long 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133 1254 .long 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7 1255 .long 0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920 1256 .long 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a 1257 .long 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17 1258 .long 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8 1259 .long 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11 1260 .long 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a 1261Te1: 1262 .long 0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b 1263 .long 0x0dfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5 1264 .long 0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b 1265 .long 0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676 1266 .long 0x458fcaca, 0x9d1f8282, 0x4089c9c9, 0x87fa7d7d 1267 .long 0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0 1268 .long 0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf 1269 .long 0xbf239c9c, 0xf753a4a4, 0x96e47272, 0x5b9bc0c0 1270 .long 0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626 1271 .long 0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc 1272 .long 0x5c683434, 0xf451a5a5, 0x34d1e5e5, 0x08f9f1f1 1273 .long 0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515 1274 .long 0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3 1275 .long 0x28301818, 0xa1379696, 0x0f0a0505, 0xb52f9a9a 1276 .long 0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2 1277 .long 0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575 1278 .long 0x1b120909, 0x9e1d8383, 0x74582c2c, 0x2e341a1a 1279 .long 0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0 1280 .long 0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3 1281 .long 0x7b522929, 0x3edde3e3, 0x715e2f2f, 0x97138484 1282 .long 0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded 1283 .long 0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b 1284 .long 0xbed46a6a, 0x468dcbcb, 0xd967bebe, 0x4b723939 1285 .long 0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf 1286 .long 0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb 1287 .long 0xc5864343, 0xd79a4d4d, 0x55663333, 0x94118585 1288 .long 0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f 1289 .long 0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8 1290 .long 0xf3a25151, 0xfe5da3a3, 0xc0804040, 0x8a058f8f 1291 .long 0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5 1292 .long 0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121 1293 .long 0x30201010, 0x1ae5ffff, 0x0efdf3f3, 0x6dbfd2d2 1294 .long 0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec 1295 .long 0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717 1296 .long 0x5793c4c4, 0xf255a7a7, 0x82fc7e7e, 0x477a3d3d 1297 .long 0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373 1298 .long 0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc 1299 .long 0x66442222, 0x7e542a2a, 0xab3b9090, 0x830b8888 1300 .long 0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414 1301 .long 0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb 1302 .long 0x3bdbe0e0, 0x56643232, 0x4e743a3a, 0x1e140a0a 1303 .long 0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c 1304 .long 0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262 1305 .long 0xa8399191, 0xa4319595, 0x37d3e4e4, 0x8bf27979 1306 .long 0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d 1307 .long 0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9 1308 .long 0xb4d86c6c, 0xfaac5656, 0x07f3f4f4, 0x25cfeaea 1309 .long 0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808 1310 .long 0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e 1311 .long 0x24381c1c, 0xf157a6a6, 0xc773b4b4, 0x5197c6c6 1312 .long 0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f 1313 .long 0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a 1314 .long 0x90e07070, 0x427c3e3e, 0xc471b5b5, 0xaacc6666 1315 .long 0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e 1316 .long 0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9 1317 .long 0x91178686, 0x5899c1c1, 0x273a1d1d, 0xb9279e9e 1318 .long 0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111 1319 .long 0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494 1320 .long 0xb62d9b9b, 0x223c1e1e, 0x92158787, 0x20c9e9e9 1321 .long 0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf 1322 .long 0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d 1323 .long 0xda65bfbf, 0x31d7e6e6, 0xc6844242, 0xb8d06868 1324 .long 0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f 1325 .long 0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616 1326Te2: 1327 .long 0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b 1328 .long 0xf20dfff2, 0x6bbdd66b, 0x6fb1de6f, 0xc55491c5 1329 .long 0x30506030, 0x01030201, 0x67a9ce67, 0x2b7d562b 1330 .long 0xfe19e7fe, 0xd762b5d7, 0xabe64dab, 0x769aec76 1331 .long 0xca458fca, 0x829d1f82, 0xc94089c9, 0x7d87fa7d 1332 .long 0xfa15effa, 0x59ebb259, 0x47c98e47, 0xf00bfbf0 1333 .long 0xadec41ad, 0xd467b3d4, 0xa2fd5fa2, 0xafea45af 1334 .long 0x9cbf239c, 0xa4f753a4, 0x7296e472, 0xc05b9bc0 1335 .long 0xb7c275b7, 0xfd1ce1fd, 0x93ae3d93, 0x266a4c26 1336 .long 0x365a6c36, 0x3f417e3f, 0xf702f5f7, 0xcc4f83cc 1337 .long 0x345c6834, 0xa5f451a5, 0xe534d1e5, 0xf108f9f1 1338 .long 0x7193e271, 0xd873abd8, 0x31536231, 0x153f2a15 1339 .long 0x040c0804, 0xc75295c7, 0x23654623, 0xc35e9dc3 1340 .long 0x18283018, 0x96a13796, 0x050f0a05, 0x9ab52f9a 1341 .long 0x07090e07, 0x12362412, 0x809b1b80, 0xe23ddfe2 1342 .long 0xeb26cdeb, 0x27694e27, 0xb2cd7fb2, 0x759fea75 1343 .long 0x091b1209, 0x839e1d83, 0x2c74582c, 0x1a2e341a 1344 .long 0x1b2d361b, 0x6eb2dc6e, 0x5aeeb45a, 0xa0fb5ba0 1345 .long 0x52f6a452, 0x3b4d763b, 0xd661b7d6, 0xb3ce7db3 1346 .long 0x297b5229, 0xe33edde3, 0x2f715e2f, 0x84971384 1347 .long 0x53f5a653, 0xd168b9d1, 0x00000000, 0xed2cc1ed 1348 .long 0x20604020, 0xfc1fe3fc, 0xb1c879b1, 0x5bedb65b 1349 .long 0x6abed46a, 0xcb468dcb, 0xbed967be, 0x394b7239 1350 .long 0x4ade944a, 0x4cd4984c, 0x58e8b058, 0xcf4a85cf 1351 .long 0xd06bbbd0, 0xef2ac5ef, 0xaae54faa, 0xfb16edfb 1352 .long 0x43c58643, 0x4dd79a4d, 0x33556633, 0x85941185 1353 .long 0x45cf8a45, 0xf910e9f9, 0x02060402, 0x7f81fe7f 1354 .long 0x50f0a050, 0x3c44783c, 0x9fba259f, 0xa8e34ba8 1355 .long 0x51f3a251, 0xa3fe5da3, 0x40c08040, 0x8f8a058f 1356 .long 0x92ad3f92, 0x9dbc219d, 0x38487038, 0xf504f1f5 1357 .long 0xbcdf63bc, 0xb6c177b6, 0xda75afda, 0x21634221 1358 .long 0x10302010, 0xff1ae5ff, 0xf30efdf3, 0xd26dbfd2 1359 .long 0xcd4c81cd, 0x0c14180c, 0x13352613, 0xec2fc3ec 1360 .long 0x5fe1be5f, 0x97a23597, 0x44cc8844, 0x17392e17 1361 .long 0xc45793c4, 0xa7f255a7, 0x7e82fc7e, 0x3d477a3d 1362 .long 0x64acc864, 0x5de7ba5d, 0x192b3219, 0x7395e673 1363 .long 0x60a0c060, 0x81981981, 0x4fd19e4f, 0xdc7fa3dc 1364 .long 0x22664422, 0x2a7e542a, 0x90ab3b90, 0x88830b88 1365 .long 0x46ca8c46, 0xee29c7ee, 0xb8d36bb8, 0x143c2814 1366 .long 0xde79a7de, 0x5ee2bc5e, 0x0b1d160b, 0xdb76addb 1367 .long 0xe03bdbe0, 0x32566432, 0x3a4e743a, 0x0a1e140a 1368 .long 0x49db9249, 0x060a0c06, 0x246c4824, 0x5ce4b85c 1369 .long 0xc25d9fc2, 0xd36ebdd3, 0xacef43ac, 0x62a6c462 1370 .long 0x91a83991, 0x95a43195, 0xe437d3e4, 0x798bf279 1371 .long 0xe732d5e7, 0xc8438bc8, 0x37596e37, 0x6db7da6d 1372 .long 0x8d8c018d, 0xd564b1d5, 0x4ed29c4e, 0xa9e049a9 1373 .long 0x6cb4d86c, 0x56faac56, 0xf407f3f4, 0xea25cfea 1374 .long 0x65afca65, 0x7a8ef47a, 0xaee947ae, 0x08181008 1375 .long 0xbad56fba, 0x7888f078, 0x256f4a25, 0x2e725c2e 1376 .long 0x1c24381c, 0xa6f157a6, 0xb4c773b4, 0xc65197c6 1377 .long 0xe823cbe8, 0xdd7ca1dd, 0x749ce874, 0x1f213e1f 1378 .long 0x4bdd964b, 0xbddc61bd, 0x8b860d8b, 0x8a850f8a 1379 .long 0x7090e070, 0x3e427c3e, 0xb5c471b5, 0x66aacc66 1380 .long 0x48d89048, 0x03050603, 0xf601f7f6, 0x0e121c0e 1381 .long 0x61a3c261, 0x355f6a35, 0x57f9ae57, 0xb9d069b9 1382 .long 0x86911786, 0xc15899c1, 0x1d273a1d, 0x9eb9279e 1383 .long 0xe138d9e1, 0xf813ebf8, 0x98b32b98, 0x11332211 1384 .long 0x69bbd269, 0xd970a9d9, 0x8e89078e, 0x94a73394 1385 .long 0x9bb62d9b, 0x1e223c1e, 0x87921587, 0xe920c9e9 1386 .long 0xce4987ce, 0x55ffaa55, 0x28785028, 0xdf7aa5df 1387 .long 0x8c8f038c, 0xa1f859a1, 0x89800989, 0x0d171a0d 1388 .long 0xbfda65bf, 0xe631d7e6, 0x42c68442, 0x68b8d068 1389 .long 0x41c38241, 0x99b02999, 0x2d775a2d, 0x0f111e0f 1390 .long 0xb0cb7bb0, 0x54fca854, 0xbbd66dbb, 0x163a2c16 1391Te3: 1392 .long 0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6 1393 .long 0xf2f20dff, 0x6b6bbdd6, 0x6f6fb1de, 0xc5c55491 1394 .long 0x30305060, 0x01010302, 0x6767a9ce, 0x2b2b7d56 1395 .long 0xfefe19e7, 0xd7d762b5, 0xababe64d, 0x76769aec 1396 .long 0xcaca458f, 0x82829d1f, 0xc9c94089, 0x7d7d87fa 1397 .long 0xfafa15ef, 0x5959ebb2, 0x4747c98e, 0xf0f00bfb 1398 .long 0xadadec41, 0xd4d467b3, 0xa2a2fd5f, 0xafafea45 1399 .long 0x9c9cbf23, 0xa4a4f753, 0x727296e4, 0xc0c05b9b 1400 .long 0xb7b7c275, 0xfdfd1ce1, 0x9393ae3d, 0x26266a4c 1401 .long 0x36365a6c, 0x3f3f417e, 0xf7f702f5, 0xcccc4f83 1402 .long 0x34345c68, 0xa5a5f451, 0xe5e534d1, 0xf1f108f9 1403 .long 0x717193e2, 0xd8d873ab, 0x31315362, 0x15153f2a 1404 .long 0x04040c08, 0xc7c75295, 0x23236546, 0xc3c35e9d 1405 .long 0x18182830, 0x9696a137, 0x05050f0a, 0x9a9ab52f 1406 .long 0x0707090e, 0x12123624, 0x80809b1b, 0xe2e23ddf 1407 .long 0xebeb26cd, 0x2727694e, 0xb2b2cd7f, 0x75759fea 1408 .long 0x09091b12, 0x83839e1d, 0x2c2c7458, 0x1a1a2e34 1409 .long 0x1b1b2d36, 0x6e6eb2dc, 0x5a5aeeb4, 0xa0a0fb5b 1410 .long 0x5252f6a4, 0x3b3b4d76, 0xd6d661b7, 0xb3b3ce7d 1411 .long 0x29297b52, 0xe3e33edd, 0x2f2f715e, 0x84849713 1412 .long 0x5353f5a6, 0xd1d168b9, 0x00000000, 0xeded2cc1 1413 .long 0x20206040, 0xfcfc1fe3, 0xb1b1c879, 0x5b5bedb6 1414 .long 0x6a6abed4, 0xcbcb468d, 0xbebed967, 0x39394b72 1415 .long 0x4a4ade94, 0x4c4cd498, 0x5858e8b0, 0xcfcf4a85 1416 .long 0xd0d06bbb, 0xefef2ac5, 0xaaaae54f, 0xfbfb16ed 1417 .long 0x4343c586, 0x4d4dd79a, 0x33335566, 0x85859411 1418 .long 0x4545cf8a, 0xf9f910e9, 0x02020604, 0x7f7f81fe 1419 .long 0x5050f0a0, 0x3c3c4478, 0x9f9fba25, 0xa8a8e34b 1420 .long 0x5151f3a2, 0xa3a3fe5d, 0x4040c080, 0x8f8f8a05 1421 .long 0x9292ad3f, 0x9d9dbc21, 0x38384870, 0xf5f504f1 1422 .long 0xbcbcdf63, 0xb6b6c177, 0xdada75af, 0x21216342 1423 .long 0x10103020, 0xffff1ae5, 0xf3f30efd, 0xd2d26dbf 1424 .long 0xcdcd4c81, 0x0c0c1418, 0x13133526, 0xecec2fc3 1425 .long 0x5f5fe1be, 0x9797a235, 0x4444cc88, 0x1717392e 1426 .long 0xc4c45793, 0xa7a7f255, 0x7e7e82fc, 0x3d3d477a 1427 .long 0x6464acc8, 0x5d5de7ba, 0x19192b32, 0x737395e6 1428 .long 0x6060a0c0, 0x81819819, 0x4f4fd19e, 0xdcdc7fa3 1429 .long 0x22226644, 0x2a2a7e54, 0x9090ab3b, 0x8888830b 1430 .long 0x4646ca8c, 0xeeee29c7, 0xb8b8d36b, 0x14143c28 1431 .long 0xdede79a7, 0x5e5ee2bc, 0x0b0b1d16, 0xdbdb76ad 1432 .long 0xe0e03bdb, 0x32325664, 0x3a3a4e74, 0x0a0a1e14 1433 .long 0x4949db92, 0x06060a0c, 0x24246c48, 0x5c5ce4b8 1434 .long 0xc2c25d9f, 0xd3d36ebd, 0xacacef43, 0x6262a6c4 1435 .long 0x9191a839, 0x9595a431, 0xe4e437d3, 0x79798bf2 1436 .long 0xe7e732d5, 0xc8c8438b, 0x3737596e, 0x6d6db7da 1437 .long 0x8d8d8c01, 0xd5d564b1, 0x4e4ed29c, 0xa9a9e049 1438 .long 0x6c6cb4d8, 0x5656faac, 0xf4f407f3, 0xeaea25cf 1439 .long 0x6565afca, 0x7a7a8ef4, 0xaeaee947, 0x08081810 1440 .long 0xbabad56f, 0x787888f0, 0x25256f4a, 0x2e2e725c 1441 .long 0x1c1c2438, 0xa6a6f157, 0xb4b4c773, 0xc6c65197 1442 .long 0xe8e823cb, 0xdddd7ca1, 0x74749ce8, 0x1f1f213e 1443 .long 0x4b4bdd96, 0xbdbddc61, 0x8b8b860d, 0x8a8a850f 1444 .long 0x707090e0, 0x3e3e427c, 0xb5b5c471, 0x6666aacc 1445 .long 0x4848d890, 0x03030506, 0xf6f601f7, 0x0e0e121c 1446 .long 0x6161a3c2, 0x35355f6a, 0x5757f9ae, 0xb9b9d069 1447 .long 0x86869117, 0xc1c15899, 0x1d1d273a, 0x9e9eb927 1448 .long 0xe1e138d9, 0xf8f813eb, 0x9898b32b, 0x11113322 1449 .long 0x6969bbd2, 0xd9d970a9, 0x8e8e8907, 0x9494a733 1450 .long 0x9b9bb62d, 0x1e1e223c, 0x87879215, 0xe9e920c9 1451 .long 0xcece4987, 0x5555ffaa, 0x28287850, 0xdfdf7aa5 1452 .long 0x8c8c8f03, 0xa1a1f859, 0x89898009, 0x0d0d171a 1453 .long 0xbfbfda65, 0xe6e631d7, 0x4242c684, 0x6868b8d0 1454 .long 0x4141c382, 0x9999b029, 0x2d2d775a, 0x0f0f111e 1455 .long 0xb0b0cb7b, 0x5454fca8, 0xbbbbd66d, 0x16163a2c 1456 1457Td0: 1458 .long 0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96 1459 .long 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393 1460 .long 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25 1461 .long 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f 1462 .long 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1 1463 .long 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6 1464 .long 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da 1465 .long 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844 1466 .long 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd 1467 .long 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4 1468 .long 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45 1469 .long 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94 1470 .long 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7 1471 .long 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a 1472 .long 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5 1473 .long 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c 1474 .long 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1 1475 .long 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a 1476 .long 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75 1477 .long 0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051 1478 .long 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46 1479 .long 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff 1480 .long 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77 1481 .long 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb 1482 .long 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000 1483 .long 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e 1484 .long 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927 1485 .long 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a 1486 .long 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e 1487 .long 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16 1488 .long 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d 1489 .long 0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8 1490 .long 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd 1491 .long 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34 1492 .long 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163 1493 .long 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120 1494 .long 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d 1495 .long 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0 1496 .long 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422 1497 .long 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef 1498 .long 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36 1499 .long 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4 1500 .long 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662 1501 .long 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5 1502 .long 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3 1503 .long 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b 1504 .long 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8 1505 .long 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6 1506 .long 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6 1507 .long 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0 1508 .long 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815 1509 .long 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f 1510 .long 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df 1511 .long 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f 1512 .long 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e 1513 .long 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713 1514 .long 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89 1515 .long 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c 1516 .long 0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf 1517 .long 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86 1518 .long 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f 1519 .long 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541 1520 .long 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190 1521 .long 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742 1522Td1: 1523 .long 0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e 1524 .long 0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303 1525 .long 0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c 1526 .long 0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3 1527 .long 0x49deb15a, 0x6725ba1b, 0x9845ea0e, 0xe15dfec0 1528 .long 0x02c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9 1529 .long 0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259 1530 .long 0x2dd4be83, 0xd3587421, 0x2949e069, 0x448ec9c8 1531 .long 0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971 1532 .long 0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a 1533 .long 0x1863df4a, 0x82e51a31, 0x60975133, 0x4562537f 1534 .long 0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b 1535 .long 0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8 1536 .long 0x23ab73d3, 0xe2724b02, 0x57e31f8f, 0x2a6655ab 1537 .long 0x07b2eb28, 0x032fb5c2, 0x9a86c57b, 0xa5d33708 1538 .long 0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682 1539 .long 0x2b8acf1c, 0x92a779b4, 0xf0f307f2, 0xa14e69e2 1540 .long 0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe 1541 .long 0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb 1542 .long 0x390b83ec, 0xaa4060ef, 0x065e719f, 0x51bd6e10 1543 .long 0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd 1544 .long 0xb591548d, 0x0571c45d, 0x6f0406d4, 0xff605015 1545 .long 0x241998fb, 0x97d6bde9, 0xcc894043, 0x7767d99e 1546 .long 0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee 1547 .long 0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x00000000 1548 .long 0x83098086, 0x48322bed, 0xac1e1170, 0x4e6c5a72 1549 .long 0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39 1550 .long 0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e 1551 .long 0xb10c0a67, 0x0f9357e7, 0xd2b4ee96, 0x9e1b9b91 1552 .long 0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a 1553 .long 0x0ae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17 1554 .long 0x0b0e090d, 0xadf28bc7, 0xb92db6a8, 0xc8141ea9 1555 .long 0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60 1556 .long 0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e 1557 .long 0x768b4329, 0xdccb23c6, 0x68b6edfc, 0x63b8e4f1 1558 .long 0xcad731dc, 0x10426385, 0x40139722, 0x2084c611 1559 .long 0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1 1560 .long 0x4b1d9e2f, 0xf3dcb230, 0xec0d8652, 0xd077c1e3 1561 .long 0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964 1562 .long 0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390 1563 .long 0xc787494e, 0xc1d938d1, 0xfe8ccaa2, 0x3698d40b 1564 .long 0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf 1565 .long 0xe42c3a9d, 0x0d507892, 0x9b6a5fcc, 0x62547e46 1566 .long 0xc2f68d13, 0xe890d8b8, 0x5e2e39f7, 0xf582c3af 1567 .long 0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512 1568 .long 0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb 1569 .long 0x09cd2678, 0xf46e5918, 0x01ec9ab7, 0xa8834f9a 1570 .long 0x65e6956e, 0x7eaaffe6, 0x0821bccf, 0xe6ef15e8 1571 .long 0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c 1572 .long 0xaf31a4b2, 0x312a3f23, 0x30c6a594, 0xc035a266 1573 .long 0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8 1574 .long 0x4af10498, 0xf741ecda, 0x0e7fcd50, 0x2f1791f6 1575 .long 0x8d764dd6, 0x4d43efb0, 0x54ccaa4d, 0xdfe49604 1576 .long 0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551 1577 .long 0x049d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41 1578 .long 0x5ab3671d, 0x5292dbd2, 0x33e91056, 0x136dd647 1579 .long 0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c 1580 .long 0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1 1581 .long 0x599cd2df, 0x3f55f273, 0x791814ce, 0xbf73c737 1582 .long 0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db 1583 .long 0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340 1584 .long 0x72161dc3, 0x0cbce225, 0x8b283c49, 0x41ff0d95 1585 .long 0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1 1586 .long 0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857 1587Td2: 1588 .long 0xa75051f4, 0x65537e41, 0xa4c31a17, 0x5e963a27 1589 .long 0x6bcb3bab, 0x45f11f9d, 0x58abacfa, 0x03934be3 1590 .long 0xfa552030, 0x6df6ad76, 0x769188cc, 0x4c25f502 1591 .long 0xd7fc4fe5, 0xcbd7c52a, 0x44802635, 0xa38fb562 1592 .long 0x5a49deb1, 0x1b6725ba, 0x0e9845ea, 0xc0e15dfe 1593 .long 0x7502c32f, 0xf012814c, 0x97a38d46, 0xf9c66bd3 1594 .long 0x5fe7038f, 0x9c951592, 0x7aebbf6d, 0x59da9552 1595 .long 0x832dd4be, 0x21d35874, 0x692949e0, 0xc8448ec9 1596 .long 0x896a75c2, 0x7978f48e, 0x3e6b9958, 0x71dd27b9 1597 .long 0x4fb6bee1, 0xad17f088, 0xac66c920, 0x3ab47dce 1598 .long 0x4a1863df, 0x3182e51a, 0x33609751, 0x7f456253 1599 .long 0x77e0b164, 0xae84bb6b, 0xa01cfe81, 0x2b94f908 1600 .long 0x68587048, 0xfd198f45, 0x6c8794de, 0xf8b7527b 1601 .long 0xd323ab73, 0x02e2724b, 0x8f57e31f, 0xab2a6655 1602 .long 0x2807b2eb, 0xc2032fb5, 0x7b9a86c5, 0x08a5d337 1603 .long 0x87f23028, 0xa5b223bf, 0x6aba0203, 0x825ced16 1604 .long 0x1c2b8acf, 0xb492a779, 0xf2f0f307, 0xe2a14e69 1605 .long 0xf4cd65da, 0xbed50605, 0x621fd134, 0xfe8ac4a6 1606 .long 0x539d342e, 0x55a0a2f3, 0xe132058a, 0xeb75a4f6 1607 .long 0xec390b83, 0xefaa4060, 0x9f065e71, 0x1051bd6e 1608 .long 0x8af93e21, 0x063d96dd, 0x05aedd3e, 0xbd464de6 1609 .long 0x8db59154, 0x5d0571c4, 0xd46f0406, 0x15ff6050 1610 .long 0xfb241998, 0xe997d6bd, 0x43cc8940, 0x9e7767d9 1611 .long 0x42bdb0e8, 0x8b880789, 0x5b38e719, 0xeedb79c8 1612 .long 0x0a47a17c, 0x0fe97c42, 0x1ec9f884, 0x00000000 1613 .long 0x86830980, 0xed48322b, 0x70ac1e11, 0x724e6c5a 1614 .long 0xfffbfd0e, 0x38560f85, 0xd51e3dae, 0x3927362d 1615 .long 0xd9640a0f, 0xa621685c, 0x54d19b5b, 0x2e3a2436 1616 .long 0x67b10c0a, 0xe70f9357, 0x96d2b4ee, 0x919e1b9b 1617 .long 0xc54f80c0, 0x20a261dc, 0x4b695a77, 0x1a161c12 1618 .long 0xba0ae293, 0x2ae5c0a0, 0xe0433c22, 0x171d121b 1619 .long 0x0d0b0e09, 0xc7adf28b, 0xa8b92db6, 0xa9c8141e 1620 .long 0x198557f1, 0x074caf75, 0xddbbee99, 0x60fda37f 1621 .long 0x269ff701, 0xf5bc5c72, 0x3bc54466, 0x7e345bfb 1622 .long 0x29768b43, 0xc6dccb23, 0xfc68b6ed, 0xf163b8e4 1623 .long 0xdccad731, 0x85104263, 0x22401397, 0x112084c6 1624 .long 0x247d854a, 0x3df8d2bb, 0x3211aef9, 0xa16dc729 1625 .long 0x2f4b1d9e, 0x30f3dcb2, 0x52ec0d86, 0xe3d077c1 1626 .long 0x166c2bb3, 0xb999a970, 0x48fa1194, 0x642247e9 1627 .long 0x8cc4a8fc, 0x3f1aa0f0, 0x2cd8567d, 0x90ef2233 1628 .long 0x4ec78749, 0xd1c1d938, 0xa2fe8cca, 0x0b3698d4 1629 .long 0x81cfa6f5, 0xde28a57a, 0x8e26dab7, 0xbfa43fad 1630 .long 0x9de42c3a, 0x920d5078, 0xcc9b6a5f, 0x4662547e 1631 .long 0x13c2f68d, 0xb8e890d8, 0xf75e2e39, 0xaff582c3 1632 .long 0x80be9f5d, 0x937c69d0, 0x2da96fd5, 0x12b3cf25 1633 .long 0x993bc8ac, 0x7da71018, 0x636ee89c, 0xbb7bdb3b 1634 .long 0x7809cd26, 0x18f46e59, 0xb701ec9a, 0x9aa8834f 1635 .long 0x6e65e695, 0xe67eaaff, 0xcf0821bc, 0xe8e6ef15 1636 .long 0x9bd9bae7, 0x36ce4a6f, 0x09d4ea9f, 0x7cd629b0 1637 .long 0xb2af31a4, 0x23312a3f, 0x9430c6a5, 0x66c035a2 1638 .long 0xbc37744e, 0xcaa6fc82, 0xd0b0e090, 0xd81533a7 1639 .long 0x984af104, 0xdaf741ec, 0x500e7fcd, 0xf62f1791 1640 .long 0xd68d764d, 0xb04d43ef, 0x4d54ccaa, 0x04dfe496 1641 .long 0xb5e39ed1, 0x881b4c6a, 0x1fb8c12c, 0x517f4665 1642 .long 0xea049d5e, 0x355d018c, 0x7473fa87, 0x412efb0b 1643 .long 0x1d5ab367, 0xd25292db, 0x5633e910, 0x47136dd6 1644 .long 0x618c9ad7, 0x0c7a37a1, 0x148e59f8, 0x3c89eb13 1645 .long 0x27eecea9, 0xc935b761, 0xe5ede11c, 0xb13c7a47 1646 .long 0xdf599cd2, 0x733f55f2, 0xce791814, 0x37bf73c7 1647 .long 0xcdea53f7, 0xaa5b5ffd, 0x6f14df3d, 0xdb867844 1648 .long 0xf381caaf, 0xc43eb968, 0x342c3824, 0x405fc2a3 1649 .long 0xc372161d, 0x250cbce2, 0x498b283c, 0x9541ff0d 1650 .long 0x017139a8, 0xb3de080c, 0xe49cd8b4, 0xc1906456 1651 .long 0x84617bcb, 0xb670d532, 0x5c74486c, 0x5742d0b8 1652Td3: 1653 .long 0xf4a75051, 0x4165537e, 0x17a4c31a, 0x275e963a 1654 .long 0xab6bcb3b, 0x9d45f11f, 0xfa58abac, 0xe303934b 1655 .long 0x30fa5520, 0x766df6ad, 0xcc769188, 0x024c25f5 1656 .long 0xe5d7fc4f, 0x2acbd7c5, 0x35448026, 0x62a38fb5 1657 .long 0xb15a49de, 0xba1b6725, 0xea0e9845, 0xfec0e15d 1658 .long 0x2f7502c3, 0x4cf01281, 0x4697a38d, 0xd3f9c66b 1659 .long 0x8f5fe703, 0x929c9515, 0x6d7aebbf, 0x5259da95 1660 .long 0xbe832dd4, 0x7421d358, 0xe0692949, 0xc9c8448e 1661 .long 0xc2896a75, 0x8e7978f4, 0x583e6b99, 0xb971dd27 1662 .long 0xe14fb6be, 0x88ad17f0, 0x20ac66c9, 0xce3ab47d 1663 .long 0xdf4a1863, 0x1a3182e5, 0x51336097, 0x537f4562 1664 .long 0x6477e0b1, 0x6bae84bb, 0x81a01cfe, 0x082b94f9 1665 .long 0x48685870, 0x45fd198f, 0xde6c8794, 0x7bf8b752 1666 .long 0x73d323ab, 0x4b02e272, 0x1f8f57e3, 0x55ab2a66 1667 .long 0xeb2807b2, 0xb5c2032f, 0xc57b9a86, 0x3708a5d3 1668 .long 0x2887f230, 0xbfa5b223, 0x036aba02, 0x16825ced 1669 .long 0xcf1c2b8a, 0x79b492a7, 0x07f2f0f3, 0x69e2a14e 1670 .long 0xdaf4cd65, 0x05bed506, 0x34621fd1, 0xa6fe8ac4 1671 .long 0x2e539d34, 0xf355a0a2, 0x8ae13205, 0xf6eb75a4 1672 .long 0x83ec390b, 0x60efaa40, 0x719f065e, 0x6e1051bd 1673 .long 0x218af93e, 0xdd063d96, 0x3e05aedd, 0xe6bd464d 1674 .long 0x548db591, 0xc45d0571, 0x06d46f04, 0x5015ff60 1675 .long 0x98fb2419, 0xbde997d6, 0x4043cc89, 0xd99e7767 1676 .long 0xe842bdb0, 0x898b8807, 0x195b38e7, 0xc8eedb79 1677 .long 0x7c0a47a1, 0x420fe97c, 0x841ec9f8, 0x00000000 1678 .long 0x80868309, 0x2bed4832, 0x1170ac1e, 0x5a724e6c 1679 .long 0x0efffbfd, 0x8538560f, 0xaed51e3d, 0x2d392736 1680 .long 0x0fd9640a, 0x5ca62168, 0x5b54d19b, 0x362e3a24 1681 .long 0x0a67b10c, 0x57e70f93, 0xee96d2b4, 0x9b919e1b 1682 .long 0xc0c54f80, 0xdc20a261, 0x774b695a, 0x121a161c 1683 .long 0x93ba0ae2, 0xa02ae5c0, 0x22e0433c, 0x1b171d12 1684 .long 0x090d0b0e, 0x8bc7adf2, 0xb6a8b92d, 0x1ea9c814 1685 .long 0xf1198557, 0x75074caf, 0x99ddbbee, 0x7f60fda3 1686 .long 0x01269ff7, 0x72f5bc5c, 0x663bc544, 0xfb7e345b 1687 .long 0x4329768b, 0x23c6dccb, 0xedfc68b6, 0xe4f163b8 1688 .long 0x31dccad7, 0x63851042, 0x97224013, 0xc6112084 1689 .long 0x4a247d85, 0xbb3df8d2, 0xf93211ae, 0x29a16dc7 1690 .long 0x9e2f4b1d, 0xb230f3dc, 0x8652ec0d, 0xc1e3d077 1691 .long 0xb3166c2b, 0x70b999a9, 0x9448fa11, 0xe9642247 1692 .long 0xfc8cc4a8, 0xf03f1aa0, 0x7d2cd856, 0x3390ef22 1693 .long 0x494ec787, 0x38d1c1d9, 0xcaa2fe8c, 0xd40b3698 1694 .long 0xf581cfa6, 0x7ade28a5, 0xb78e26da, 0xadbfa43f 1695 .long 0x3a9de42c, 0x78920d50, 0x5fcc9b6a, 0x7e466254 1696 .long 0x8d13c2f6, 0xd8b8e890, 0x39f75e2e, 0xc3aff582 1697 .long 0x5d80be9f, 0xd0937c69, 0xd52da96f, 0x2512b3cf 1698 .long 0xac993bc8, 0x187da710, 0x9c636ee8, 0x3bbb7bdb 1699 .long 0x267809cd, 0x5918f46e, 0x9ab701ec, 0x4f9aa883 1700 .long 0x956e65e6, 0xffe67eaa, 0xbccf0821, 0x15e8e6ef 1701 .long 0xe79bd9ba, 0x6f36ce4a, 0x9f09d4ea, 0xb07cd629 1702 .long 0xa4b2af31, 0x3f23312a, 0xa59430c6, 0xa266c035 1703 .long 0x4ebc3774, 0x82caa6fc, 0x90d0b0e0, 0xa7d81533 1704 .long 0x04984af1, 0xecdaf741, 0xcd500e7f, 0x91f62f17 1705 .long 0x4dd68d76, 0xefb04d43, 0xaa4d54cc, 0x9604dfe4 1706 .long 0xd1b5e39e, 0x6a881b4c, 0x2c1fb8c1, 0x65517f46 1707 .long 0x5eea049d, 0x8c355d01, 0x877473fa, 0x0b412efb 1708 .long 0x671d5ab3, 0xdbd25292, 0x105633e9, 0xd647136d 1709 .long 0xd7618c9a, 0xa10c7a37, 0xf8148e59, 0x133c89eb 1710 .long 0xa927eece, 0x61c935b7, 0x1ce5ede1, 0x47b13c7a 1711 .long 0xd2df599c, 0xf2733f55, 0x14ce7918, 0xc737bf73 1712 .long 0xf7cdea53, 0xfdaa5b5f, 0x3d6f14df, 0x44db8678 1713 .long 0xaff381ca, 0x68c43eb9, 0x24342c38, 0xa3405fc2 1714 .long 0x1dc37216, 0xe2250cbc, 0x3c498b28, 0x0d9541ff 1715 .long 0xa8017139, 0x0cb3de08, 0xb4e49cd8, 0x56c19064 1716 .long 0xcb84617b, 0x32b670d5, 0x6c5c7448, 0xb85742d0 1717Td4: 1718 .byte 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38 1719 .byte 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb 1720 .byte 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87 1721 .byte 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb 1722 .byte 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d 1723 .byte 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e 1724 .byte 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2 1725 .byte 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25 1726 .byte 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16 1727 .byte 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92 1728 .byte 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda 1729 .byte 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84 1730 .byte 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a 1731 .byte 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06 1732 .byte 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02 1733 .byte 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b 1734 .byte 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea 1735 .byte 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73 1736 .byte 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85 1737 .byte 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e 1738 .byte 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89 1739 .byte 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b 1740 .byte 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20 1741 .byte 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4 1742 .byte 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31 1743 .byte 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f 1744 .byte 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d 1745 .byte 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef 1746 .byte 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0 1747 .byte 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61 1748 .byte 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26 1749 .byte 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d 1750 1751rcon_byte: 1752 .byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36 1753