1/* 2 * This file is part of the openHiTLS project. 3 * 4 * openHiTLS is licensed under the Mulan PSL v2. 5 * You can use this software according to the terms and conditions of the Mulan PSL v2. 6 * You may obtain a copy of Mulan PSL v2 at: 7 * 8 * http://license.coscl.org.cn/MulanPSL2 9 * 10 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, 11 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, 12 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. 13 * See the Mulan PSL v2 for more details. 14 */ 15 16#include "hitls_build.h" 17#ifdef HITLS_CRYPTO_SM4 18 19#include "crypt_sm4_modes_macro_x86_64.s" 20 21 .file "crypt_sm4_x86_64.S" 22 .text 23 24.set W0, %r8d 25.set W1, %r9d 26.set W2, %r10d 27.set W3, %r11d 28 29.set T0, %eax 30.set T0BL, %al 31.set T1, %ecx 32 33.set T0_64, %rax 34.set T1_64, %rcx 35 36.set RK, %rdx 37.set ADDR, %rdi 38 39.set RoundKey, %rsi 40.set CK, %rdx 41 42.macro SETKEY_ROUND RKey A0 A1 A2 A3 CK_ADDR No_CK No_RK 43 # x4 = x1 ^ x2 ^ x3 ^ *(CK + i); 44 # x4 = S32(x4); 45 # x4 = x0 ^ L_Key32(x4); 46 # *(rk + i) = x4; 47 48 # x4 = x1 ^ x2 ^ x3 ^ *(CK + i); 49 movl \No_CK(\CK_ADDR), T0 50 xorl \A1, T0 51 xorl \A2, T0 52 xorl \A3, T0 53 54 # x0 = x0 ^ (SBOX_KEY_0[x4 & 0xff]) ^ (SBOX_KEY_1[(x4 >> 8) & 0xff]) ^ (SBOX_KEY_2[(x4 >> 16) & 0xff]) ^ (SBOX_KEY_3[(x4 >> 24) & 0xff]); 55 movzbl T0BL, T1 56 xorl (ADDR,T1_64,4), \A0 57 shrl $8, T0 58 movzbl T0BL, T1 59 60 xorl 1024(ADDR,T1_64,4), \A0 61 shrl $8, T0 62 movzbl T0BL, T1 63 xorl 2048(ADDR,T1_64,4), \A0 64 shrl $8, T0 65 xorl 3072(ADDR,T0_64,4), \A0 66 67 # enc round *(rk + i) = x4; 68 # dec round *(rk + 31 - i) = x4; 69 movl \A0, \No_RK(\RKey) 70.endm 71 72##### SM4 Encryption ##### 73 # void SM4_Encrypt(const unsigned char *in, unsigned char *out, const SM4_KEY *key) 74 # %rdi in plain ptr 16 bytes 75 # %rsi out cipher ptr 16 bytes 76 # %rdx key round key ptr 128 bytes 77 .globl SM4_Encrypt 78 .type SM4_Encrypt, @function 79 .align 64 80 81SM4_Encrypt: 82 83 ##### Load Data ##### 84 movl (%rdi), W0 85 movl 4(%rdi), W1 86 movl 8(%rdi), W2 87 movl 12(%rdi), W3 88 bswap W0 89 bswap W1 90 bswap W2 91 bswap W3 92 93 ##### Load SBOX ADDRESS ##### 94 leaq SBOX4X_MASK(%rip), ADDR 95 96 ##### Serial Rounds ##### 97 SM4_SERIAL_ROUNDS 98 99 ##### Store Results ##### 100 bswap W0 101 bswap W1 102 bswap W2 103 bswap W3 104 movl W3, (%rsi) 105 movl W2, 4(%rsi) 106 movl W1, 8(%rsi) 107 movl W0, 12(%rsi) 108 109 ##### Clear Context ##### 110 xorl W0, W0 111 xorl W1, W1 112 xorl W2, W2 113 xorl W3, W3 114 xorl T0, T0 115 xorl T1, T1 116 117 ret 118 .size SM4_Encrypt, .-SM4_Encrypt 119 120##### SM4 SET ROUND KEY ##### 121 # void SM4_SetEncKey(const unsigned char *userKey, SM4_KEY *key) 122 # %rdi userKey: user key ptr 16 bytes 123 # %rsi key: round key ptr 128 bytes 124 .globl SM4_SetEncKey 125 .type SM4_SetEncKey, @function 126 .align 64 127 128SM4_SetEncKey: 129 130 ##### Load MK ##### 131 movl (%rdi), W0 132 movl 4(%rdi), W1 133 movl 8(%rdi), W2 134 movl 12(%rdi), W3 135 bswap W0 136 bswap W1 137 bswap W2 138 bswap W3 139 140 ##### Load SBOX ADDRESS ##### 141 leaq SBOX_KEY_X4(%rip), ADDR 142 leaq CK_NUM(%rip), CK 143 xorq T0_64, T0_64 144 xorq T1_64, T1_64 145 146 ##### XOR FK ##### 147 xorl $0xa3b1bac6, W0 148 xorl $0x56aa3350, W1 149 xorl $0x677d9197, W2 150 xorl $0xb27022dc, W3 151 152 ##### ROUNDS ##### 153 SETKEY_ROUND RoundKey W0 W1 W2 W3 CK 0 0 154 SETKEY_ROUND RoundKey W1 W2 W3 W0 CK 4 4 155 SETKEY_ROUND RoundKey W2 W3 W0 W1 CK 8 8 156 SETKEY_ROUND RoundKey W3 W0 W1 W2 CK 12 12 157 158 SETKEY_ROUND RoundKey W0 W1 W2 W3 CK 16 16 159 SETKEY_ROUND RoundKey W1 W2 W3 W0 CK 20 20 160 SETKEY_ROUND RoundKey W2 W3 W0 W1 CK 24 24 161 SETKEY_ROUND RoundKey W3 W0 W1 W2 CK 28 28 162 163 SETKEY_ROUND RoundKey W0 W1 W2 W3 CK 32 32 164 SETKEY_ROUND RoundKey W1 W2 W3 W0 CK 36 36 165 SETKEY_ROUND RoundKey W2 W3 W0 W1 CK 40 40 166 SETKEY_ROUND RoundKey W3 W0 W1 W2 CK 44 44 167 168 SETKEY_ROUND RoundKey W0 W1 W2 W3 CK 48 48 169 SETKEY_ROUND RoundKey W1 W2 W3 W0 CK 52 52 170 SETKEY_ROUND RoundKey W2 W3 W0 W1 CK 56 56 171 SETKEY_ROUND RoundKey W3 W0 W1 W2 CK 60 60 172 173 SETKEY_ROUND RoundKey W0 W1 W2 W3 CK 64 64 174 SETKEY_ROUND RoundKey W1 W2 W3 W0 CK 68 68 175 SETKEY_ROUND RoundKey W2 W3 W0 W1 CK 72 72 176 SETKEY_ROUND RoundKey W3 W0 W1 W2 CK 76 76 177 178 SETKEY_ROUND RoundKey W0 W1 W2 W3 CK 80 80 179 SETKEY_ROUND RoundKey W1 W2 W3 W0 CK 84 84 180 SETKEY_ROUND RoundKey W2 W3 W0 W1 CK 88 88 181 SETKEY_ROUND RoundKey W3 W0 W1 W2 CK 92 92 182 183 SETKEY_ROUND RoundKey W0 W1 W2 W3 CK 96 96 184 SETKEY_ROUND RoundKey W1 W2 W3 W0 CK 100 100 185 SETKEY_ROUND RoundKey W2 W3 W0 W1 CK 104 104 186 SETKEY_ROUND RoundKey W3 W0 W1 W2 CK 108 108 187 188 SETKEY_ROUND RoundKey W0 W1 W2 W3 CK 112 112 189 SETKEY_ROUND RoundKey W1 W2 W3 W0 CK 116 116 190 SETKEY_ROUND RoundKey W2 W3 W0 W1 CK 120 120 191 SETKEY_ROUND RoundKey W3 W0 W1 W2 CK 124 124 192 193 ##### Clear Context ##### 194 xorl W0, W0 195 xorl W1, W1 196 xorl W2, W2 197 xorl W3, W3 198 xorl T0, T0 199 xorl T1, T1 200 201 ret 202 .size SM4_SetEncKey, .-SM4_SetEncKey 203 204 # void SM4_SetDecKey(const unsigned char *userKey, SM4_KEY *key) 205 # %rdi userKey: user key ptr 16 bytes 206 # %rsi key: round key ptr 128 bytes 207 .globl SM4_SetDecKey 208 .type SM4_SetDecKey, @function 209 .align 64 210 211SM4_SetDecKey: 212 213 ##### Load MK ##### 214 movl (%rdi), W0 215 movl 4(%rdi), W1 216 movl 8(%rdi), W2 217 movl 12(%rdi), W3 218 bswap W0 219 bswap W1 220 bswap W2 221 bswap W3 222 223 ##### Load SBOX ADDRESS ##### 224 leaq SBOX_KEY_X4(%rip), ADDR 225 leaq CK_NUM(%rip), CK 226 xorq T0_64, T0_64 227 xorq T1_64, T1_64 228 229 ##### XOR FK ##### 230 xorl $0xa3b1bac6, W0 231 xorl $0x56aa3350, W1 232 xorl $0x677d9197, W2 233 xorl $0xb27022dc, W3 234 235 ##### ROUNDS ##### 236 SETKEY_ROUND RoundKey W0 W1 W2 W3 CK 0 124 237 SETKEY_ROUND RoundKey W1 W2 W3 W0 CK 4 120 238 SETKEY_ROUND RoundKey W2 W3 W0 W1 CK 8 116 239 SETKEY_ROUND RoundKey W3 W0 W1 W2 CK 12 112 240 241 SETKEY_ROUND RoundKey W0 W1 W2 W3 CK 16 108 242 SETKEY_ROUND RoundKey W1 W2 W3 W0 CK 20 104 243 SETKEY_ROUND RoundKey W2 W3 W0 W1 CK 24 100 244 SETKEY_ROUND RoundKey W3 W0 W1 W2 CK 28 96 245 246 SETKEY_ROUND RoundKey W0 W1 W2 W3 CK 32 92 247 SETKEY_ROUND RoundKey W1 W2 W3 W0 CK 36 88 248 SETKEY_ROUND RoundKey W2 W3 W0 W1 CK 40 84 249 SETKEY_ROUND RoundKey W3 W0 W1 W2 CK 44 80 250 251 SETKEY_ROUND RoundKey W0 W1 W2 W3 CK 48 76 252 SETKEY_ROUND RoundKey W1 W2 W3 W0 CK 52 72 253 SETKEY_ROUND RoundKey W2 W3 W0 W1 CK 56 68 254 SETKEY_ROUND RoundKey W3 W0 W1 W2 CK 60 64 255 256 SETKEY_ROUND RoundKey W0 W1 W2 W3 CK 64 60 257 SETKEY_ROUND RoundKey W1 W2 W3 W0 CK 68 56 258 SETKEY_ROUND RoundKey W2 W3 W0 W1 CK 72 52 259 SETKEY_ROUND RoundKey W3 W0 W1 W2 CK 76 48 260 261 SETKEY_ROUND RoundKey W0 W1 W2 W3 CK 80 44 262 SETKEY_ROUND RoundKey W1 W2 W3 W0 CK 84 40 263 SETKEY_ROUND RoundKey W2 W3 W0 W1 CK 88 36 264 SETKEY_ROUND RoundKey W3 W0 W1 W2 CK 92 32 265 266 SETKEY_ROUND RoundKey W0 W1 W2 W3 CK 96 28 267 SETKEY_ROUND RoundKey W1 W2 W3 W0 CK 100 24 268 SETKEY_ROUND RoundKey W2 W3 W0 W1 CK 104 20 269 SETKEY_ROUND RoundKey W3 W0 W1 W2 CK 108 16 270 271 SETKEY_ROUND RoundKey W0 W1 W2 W3 CK 112 12 272 SETKEY_ROUND RoundKey W1 W2 W3 W0 CK 116 8 273 SETKEY_ROUND RoundKey W2 W3 W0 W1 CK 120 4 274 SETKEY_ROUND RoundKey W3 W0 W1 W2 CK 124 0 275 276 ##### Clear Context ##### 277 xorl W0, W0 278 xorl W1, W1 279 xorl W2, W2 280 xorl W3, W3 281 xorl T0, T0 282 xorl T1, T1 283 284 ret 285 .size SM4_SetDecKey, .-SM4_SetDecKey 286 287##### SBOX Extend Tables (1 Table, 256*4 bytes) for round key: SBOX_KEY_0, SBOX_KEY_1, SBOX_KEY_2, SBOX_KEY_3 ##### 288 289.section .rodata 290.align 64 291 292CK_NUM: 293.long 0x00070e15, 0x1c232a31, 0x383f464d, 0x545b6269, 0x70777e85, 0x8c939aa1, 0xa8afb6bd, 0xc4cbd2d9, 0xe0e7eef5, 0xfc030a11, 0x181f262d, 0x343b4249, 0x50575e65, 0x6c737a81, 0x888f969d, 0xa4abb2b9 294.long 0xc0c7ced5, 0xdce3eaf1, 0xf8ff060d, 0x141b2229, 0x30373e45, 0x4c535a61, 0x686f767d, 0x848b9299, 0xa0a7aeb5, 0xbcc3cad1, 0xd8dfe6ed, 0xf4fb0209, 0x10171e25, 0x2c333a41, 0x484f565d, 0x646b7279 295 296SBOX_KEY_X4: 297#SBOX_KEY_0: 298.long 0x6b1ac0d6, 0x48120090, 0x749d20e9, 0x7f1fc0fe, 0x661980cc, 0x709c20e1, 0x1e87a03d, 0x5b96e0b7, 0x0b02c016, 0x5b16c0b6, 0x0a028014, 0x611840c2, 0x14050028, 0x7d9f60fb, 0x1605802c, 0x0280a005 299.long 0x1585602b, 0x338ce067, 0x4d13409a, 0x3b0ec076, 0x1505402a, 0x5f17c0be, 0x02008004, 0x619860c3, 0x551540aa, 0x22088044, 0x09826013, 0x1304c026, 0x24892049, 0x4310c086, 0x0300c006, 0x4c932099 300.long 0x4e13809c, 0x21084042, 0x280a0050, 0x7a1e80f4, 0x48922091, 0x779de0ef, 0x4c130098, 0x3d0f407a, 0x19866033, 0x2a0a8054, 0x0581600b, 0x21886043, 0x769da0ed, 0x6799e0cf, 0x561580ac, 0x310c4062 301.long 0x721c80e4, 0x599660b3, 0x0e03801c, 0x549520a9, 0x649920c9, 0x04010008, 0x741d00e8, 0x4a92a095, 0x40100080, 0x6f9be0df, 0x4a128094, 0x7d1f40fa, 0x3a8ea075, 0x4791e08f, 0x1f87e03f, 0x5314c0a6 302.long 0x2388e047, 0x0380e007, 0x5394e0a7, 0x7e1f80fc, 0x799e60f3, 0x398e6073, 0x0b82e017, 0x5d1740ba, 0x41906083, 0x2c8b2059, 0x1e07803c, 0x0c832019, 0x731cc0e6, 0x4290a085, 0x2789e04f, 0x541500a8 303.long 0x340d0068, 0x358d606b, 0x40902081, 0x591640b2, 0x388e2071, 0x320c8064, 0x6d1b40da, 0x4591608b, 0x7c1f00f8, 0x759d60eb, 0x0781e00f, 0x2589604b, 0x380e0070, 0x2b0ac056, 0x4e93a09d, 0x1a86a035 304.long 0x0f03c01e, 0x12048024, 0x0701c00e, 0x2f0bc05e, 0x318c6063, 0x2c0b0058, 0x689a20d1, 0x511440a2, 0x1284a025, 0x11044022, 0x3e0f807c, 0x1d87603b, 0x00802001, 0x10842021, 0x3c0f0078, 0x4390e087 305.long 0x6a1a80d4, 0x0, 0x2308c046, 0x2b8ae057, 0x4f93e09f, 0x699a60d3, 0x1384e027, 0x290a4052, 0x2609804c, 0x1b06c036, 0x01004002, 0x739ce0e7, 0x501400a0, 0x621880c4, 0x641900c8, 0x4f13c09e 306.long 0x751d40ea, 0x5f97e0bf, 0x4511408a, 0x691a40d2, 0x20080040, 0x6398e0c7, 0x1c070038, 0x5a96a0b5, 0x519460a3, 0x7b9ee0f7, 0x791e40f2, 0x6719c0ce, 0x7c9f20f9, 0x308c2061, 0x0a82a015, 0x509420a1 307.long 0x701c00e0, 0x5715c0ae, 0x2e8ba05d, 0x521480a4, 0x4d93609b, 0x1a068034, 0x0d03401a, 0x2a8aa055, 0x5695a0ad, 0x49926093, 0x19064032, 0x18060030, 0x7a9ea0f5, 0x4611808c, 0x589620b1, 0x719c60e3 308.long 0x0e83a01d, 0x7b1ec0f6, 0x711c40e2, 0x1705c02e, 0x41104082, 0x330cc066, 0x651940ca, 0x300c0060, 0x601800c0, 0x14852029, 0x11846023, 0x559560ab, 0x0681a00d, 0x298a6053, 0x2709c04e, 0x378de06f 309.long 0x6a9aa0d5, 0x6d9b60db, 0x1b86e037, 0x2288a045, 0x6f1bc0de, 0x7e9fa0fd, 0x4711c08e, 0x1785e02f, 0x01806003, 0x7f9fe0ff, 0x350d406a, 0x390e4072, 0x368da06d, 0x360d806c, 0x2d8b605b, 0x288a2051 310.long 0x4691a08d, 0x0d83601b, 0x5795e0af, 0x49124092, 0x5d9760bb, 0x6e9ba0dd, 0x5e1780bc, 0x3f8fe07f, 0x08822011, 0x6c9b20d9, 0x2e0b805c, 0x20882041, 0x0f83e01f, 0x08020010, 0x2d0b405a, 0x6c1b00d8 311.long 0x0501400a, 0x609820c1, 0x18862031, 0x44110088, 0x5294a0a5, 0x6699a0cd, 0x3d8f607b, 0x5e97a0bd, 0x1685a02d, 0x3a0e8074, 0x681a00d0, 0x09024012, 0x5c1700b8, 0x729ca0e5, 0x5a1680b4, 0x581600b0 312.long 0x44912089, 0x348d2069, 0x4b92e097, 0x2509404a, 0x0601800c, 0x4b12c096, 0x3b8ee077, 0x3f0fc07e, 0x328ca065, 0x5c9720b9, 0x789e20f1, 0x04812009, 0x6298a0c5, 0x370dc06e, 0x6318c0c6, 0x42108084 313.long 0x0c030018, 0x781e00f0, 0x3e8fa07d, 0x761d80ec, 0x1d07403a, 0x6e1b80dc, 0x2689a04d, 0x10040020, 0x3c8f2079, 0x771dc0ee, 0x2f8be05f, 0x1f07c03e, 0x6b9ae0d7, 0x659960cb, 0x1c872039, 0x24090048 314 315#SBOX_KEY_1: 316.long 0x1ac0d66b, 0x12009048, 0x9d20e974, 0x1fc0fe7f, 0x1980cc66, 0x9c20e170, 0x87a03d1e, 0x96e0b75b, 0x02c0160b, 0x16c0b65b, 0x0280140a, 0x1840c261, 0x05002814, 0x9f60fb7d, 0x05802c16, 0x80a00502 317.long 0x85602b15, 0x8ce06733, 0x13409a4d, 0x0ec0763b, 0x05402a15, 0x17c0be5f, 0x00800402, 0x9860c361, 0x1540aa55, 0x08804422, 0x82601309, 0x04c02613, 0x89204924, 0x10c08643, 0x00c00603, 0x9320994c 318.long 0x13809c4e, 0x08404221, 0x0a005028, 0x1e80f47a, 0x92209148, 0x9de0ef77, 0x1300984c, 0x0f407a3d, 0x86603319, 0x0a80542a, 0x81600b05, 0x88604321, 0x9da0ed76, 0x99e0cf67, 0x1580ac56, 0x0c406231 319.long 0x1c80e472, 0x9660b359, 0x03801c0e, 0x9520a954, 0x9920c964, 0x01000804, 0x1d00e874, 0x92a0954a, 0x10008040, 0x9be0df6f, 0x1280944a, 0x1f40fa7d, 0x8ea0753a, 0x91e08f47, 0x87e03f1f, 0x14c0a653 320.long 0x88e04723, 0x80e00703, 0x94e0a753, 0x1f80fc7e, 0x9e60f379, 0x8e607339, 0x82e0170b, 0x1740ba5d, 0x90608341, 0x8b20592c, 0x07803c1e, 0x8320190c, 0x1cc0e673, 0x90a08542, 0x89e04f27, 0x1500a854 321.long 0x0d006834, 0x8d606b35, 0x90208140, 0x1640b259, 0x8e207138, 0x0c806432, 0x1b40da6d, 0x91608b45, 0x1f00f87c, 0x9d60eb75, 0x81e00f07, 0x89604b25, 0x0e007038, 0x0ac0562b, 0x93a09d4e, 0x86a0351a 322.long 0x03c01e0f, 0x04802412, 0x01c00e07, 0x0bc05e2f, 0x8c606331, 0x0b00582c, 0x9a20d168, 0x1440a251, 0x84a02512, 0x04402211, 0x0f807c3e, 0x87603b1d, 0x80200100, 0x84202110, 0x0f00783c, 0x90e08743 323.long 0x1a80d46a, 0x0, 0x08c04623, 0x8ae0572b, 0x93e09f4f, 0x9a60d369, 0x84e02713, 0x0a405229, 0x09804c26, 0x06c0361b, 0x00400201, 0x9ce0e773, 0x1400a050, 0x1880c462, 0x1900c864, 0x13c09e4f 324.long 0x1d40ea75, 0x97e0bf5f, 0x11408a45, 0x1a40d269, 0x08004020, 0x98e0c763, 0x0700381c, 0x96a0b55a, 0x9460a351, 0x9ee0f77b, 0x1e40f279, 0x19c0ce67, 0x9f20f97c, 0x8c206130, 0x82a0150a, 0x9420a150 325.long 0x1c00e070, 0x15c0ae57, 0x8ba05d2e, 0x1480a452, 0x93609b4d, 0x0680341a, 0x03401a0d, 0x8aa0552a, 0x95a0ad56, 0x92609349, 0x06403219, 0x06003018, 0x9ea0f57a, 0x11808c46, 0x9620b158, 0x9c60e371 326.long 0x83a01d0e, 0x1ec0f67b, 0x1c40e271, 0x05c02e17, 0x10408241, 0x0cc06633, 0x1940ca65, 0x0c006030, 0x1800c060, 0x85202914, 0x84602311, 0x9560ab55, 0x81a00d06, 0x8a605329, 0x09c04e27, 0x8de06f37 327.long 0x9aa0d56a, 0x9b60db6d, 0x86e0371b, 0x88a04522, 0x1bc0de6f, 0x9fa0fd7e, 0x11c08e47, 0x85e02f17, 0x80600301, 0x9fe0ff7f, 0x0d406a35, 0x0e407239, 0x8da06d36, 0x0d806c36, 0x8b605b2d, 0x8a205128 328.long 0x91a08d46, 0x83601b0d, 0x95e0af57, 0x12409249, 0x9760bb5d, 0x9ba0dd6e, 0x1780bc5e, 0x8fe07f3f, 0x82201108, 0x9b20d96c, 0x0b805c2e, 0x88204120, 0x83e01f0f, 0x02001008, 0x0b405a2d, 0x1b00d86c 329.long 0x01400a05, 0x9820c160, 0x86203118, 0x11008844, 0x94a0a552, 0x99a0cd66, 0x8f607b3d, 0x97a0bd5e, 0x85a02d16, 0x0e80743a, 0x1a00d068, 0x02401209, 0x1700b85c, 0x9ca0e572, 0x1680b45a, 0x1600b058 330.long 0x91208944, 0x8d206934, 0x92e0974b, 0x09404a25, 0x01800c06, 0x12c0964b, 0x8ee0773b, 0x0fc07e3f, 0x8ca06532, 0x9720b95c, 0x9e20f178, 0x81200904, 0x98a0c562, 0x0dc06e37, 0x18c0c663, 0x10808442 331.long 0x0300180c, 0x1e00f078, 0x8fa07d3e, 0x1d80ec76, 0x07403a1d, 0x1b80dc6e, 0x89a04d26, 0x04002010, 0x8f20793c, 0x1dc0ee77, 0x8be05f2f, 0x07c03e1f, 0x9ae0d76b, 0x9960cb65, 0x8720391c, 0x09004824 332 333#SBOX_KEY_2: 334.long 0xc0d66b1a, 0x00904812, 0x20e9749d, 0xc0fe7f1f, 0x80cc6619, 0x20e1709c, 0xa03d1e87, 0xe0b75b96, 0xc0160b02, 0xc0b65b16, 0x80140a02, 0x40c26118, 0x00281405, 0x60fb7d9f, 0x802c1605, 0xa0050280 335.long 0x602b1585, 0xe067338c, 0x409a4d13, 0xc0763b0e, 0x402a1505, 0xc0be5f17, 0x80040200, 0x60c36198, 0x40aa5515, 0x80442208, 0x60130982, 0xc0261304, 0x20492489, 0xc0864310, 0xc0060300, 0x20994c93 336.long 0x809c4e13, 0x40422108, 0x0050280a, 0x80f47a1e, 0x20914892, 0xe0ef779d, 0x00984c13, 0x407a3d0f, 0x60331986, 0x80542a0a, 0x600b0581, 0x60432188, 0xa0ed769d, 0xe0cf6799, 0x80ac5615, 0x4062310c 337.long 0x80e4721c, 0x60b35996, 0x801c0e03, 0x20a95495, 0x20c96499, 0x00080401, 0x00e8741d, 0xa0954a92, 0x00804010, 0xe0df6f9b, 0x80944a12, 0x40fa7d1f, 0xa0753a8e, 0xe08f4791, 0xe03f1f87, 0xc0a65314 338.long 0xe0472388, 0xe0070380, 0xe0a75394, 0x80fc7e1f, 0x60f3799e, 0x6073398e, 0xe0170b82, 0x40ba5d17, 0x60834190, 0x20592c8b, 0x803c1e07, 0x20190c83, 0xc0e6731c, 0xa0854290, 0xe04f2789, 0x00a85415 339.long 0x0068340d, 0x606b358d, 0x20814090, 0x40b25916, 0x2071388e, 0x8064320c, 0x40da6d1b, 0x608b4591, 0x00f87c1f, 0x60eb759d, 0xe00f0781, 0x604b2589, 0x0070380e, 0xc0562b0a, 0xa09d4e93, 0xa0351a86 340.long 0xc01e0f03, 0x80241204, 0xc00e0701, 0xc05e2f0b, 0x6063318c, 0x00582c0b, 0x20d1689a, 0x40a25114, 0xa0251284, 0x40221104, 0x807c3e0f, 0x603b1d87, 0x20010080, 0x20211084, 0x00783c0f, 0xe0874390 341.long 0x80d46a1a, 0x0, 0xc0462308, 0xe0572b8a, 0xe09f4f93, 0x60d3699a, 0xe0271384, 0x4052290a, 0x804c2609, 0xc0361b06, 0x40020100, 0xe0e7739c, 0x00a05014, 0x80c46218, 0x00c86419, 0xc09e4f13 342.long 0x40ea751d, 0xe0bf5f97, 0x408a4511, 0x40d2691a, 0x00402008, 0xe0c76398, 0x00381c07, 0xa0b55a96, 0x60a35194, 0xe0f77b9e, 0x40f2791e, 0xc0ce6719, 0x20f97c9f, 0x2061308c, 0xa0150a82, 0x20a15094 343.long 0x00e0701c, 0xc0ae5715, 0xa05d2e8b, 0x80a45214, 0x609b4d93, 0x80341a06, 0x401a0d03, 0xa0552a8a, 0xa0ad5695, 0x60934992, 0x40321906, 0x00301806, 0xa0f57a9e, 0x808c4611, 0x20b15896, 0x60e3719c 344.long 0xa01d0e83, 0xc0f67b1e, 0x40e2711c, 0xc02e1705, 0x40824110, 0xc066330c, 0x40ca6519, 0x0060300c, 0x00c06018, 0x20291485, 0x60231184, 0x60ab5595, 0xa00d0681, 0x6053298a, 0xc04e2709, 0xe06f378d 345.long 0xa0d56a9a, 0x60db6d9b, 0xe0371b86, 0xa0452288, 0xc0de6f1b, 0xa0fd7e9f, 0xc08e4711, 0xe02f1785, 0x60030180, 0xe0ff7f9f, 0x406a350d, 0x4072390e, 0xa06d368d, 0x806c360d, 0x605b2d8b, 0x2051288a 346.long 0xa08d4691, 0x601b0d83, 0xe0af5795, 0x40924912, 0x60bb5d97, 0xa0dd6e9b, 0x80bc5e17, 0xe07f3f8f, 0x20110882, 0x20d96c9b, 0x805c2e0b, 0x20412088, 0xe01f0f83, 0x00100802, 0x405a2d0b, 0x00d86c1b 347.long 0x400a0501, 0x20c16098, 0x20311886, 0x00884411, 0xa0a55294, 0xa0cd6699, 0x607b3d8f, 0xa0bd5e97, 0xa02d1685, 0x80743a0e, 0x00d0681a, 0x40120902, 0x00b85c17, 0xa0e5729c, 0x80b45a16, 0x00b05816 348.long 0x20894491, 0x2069348d, 0xe0974b92, 0x404a2509, 0x800c0601, 0xc0964b12, 0xe0773b8e, 0xc07e3f0f, 0xa065328c, 0x20b95c97, 0x20f1789e, 0x20090481, 0xa0c56298, 0xc06e370d, 0xc0c66318, 0x80844210 349.long 0x00180c03, 0x00f0781e, 0xa07d3e8f, 0x80ec761d, 0x403a1d07, 0x80dc6e1b, 0xa04d2689, 0x00201004, 0x20793c8f, 0xc0ee771d, 0xe05f2f8b, 0xc03e1f07, 0xe0d76b9a, 0x60cb6599, 0x20391c87, 0x00482409 350 351#SBOX_KEY_3: 352.long 0xd66b1ac0, 0x90481200, 0xe9749d20, 0xfe7f1fc0, 0xcc661980, 0xe1709c20, 0x3d1e87a0, 0xb75b96e0, 0x160b02c0, 0xb65b16c0, 0x140a0280, 0xc2611840, 0x28140500, 0xfb7d9f60, 0x2c160580, 0x050280a0 353.long 0x2b158560, 0x67338ce0, 0x9a4d1340, 0x763b0ec0, 0x2a150540, 0xbe5f17c0, 0x04020080, 0xc3619860, 0xaa551540, 0x44220880, 0x13098260, 0x261304c0, 0x49248920, 0x864310c0, 0x060300c0, 0x994c9320 354.long 0x9c4e1380, 0x42210840, 0x50280a00, 0xf47a1e80, 0x91489220, 0xef779de0, 0x984c1300, 0x7a3d0f40, 0x33198660, 0x542a0a80, 0x0b058160, 0x43218860, 0xed769da0, 0xcf6799e0, 0xac561580, 0x62310c40 355.long 0xe4721c80, 0xb3599660, 0x1c0e0380, 0xa9549520, 0xc9649920, 0x08040100, 0xe8741d00, 0x954a92a0, 0x80401000, 0xdf6f9be0, 0x944a1280, 0xfa7d1f40, 0x753a8ea0, 0x8f4791e0, 0x3f1f87e0, 0xa65314c0 356.long 0x472388e0, 0x070380e0, 0xa75394e0, 0xfc7e1f80, 0xf3799e60, 0x73398e60, 0x170b82e0, 0xba5d1740, 0x83419060, 0x592c8b20, 0x3c1e0780, 0x190c8320, 0xe6731cc0, 0x854290a0, 0x4f2789e0, 0xa8541500 357.long 0x68340d00, 0x6b358d60, 0x81409020, 0xb2591640, 0x71388e20, 0x64320c80, 0xda6d1b40, 0x8b459160, 0xf87c1f00, 0xeb759d60, 0x0f0781e0, 0x4b258960, 0x70380e00, 0x562b0ac0, 0x9d4e93a0, 0x351a86a0 358.long 0x1e0f03c0, 0x24120480, 0x0e0701c0, 0x5e2f0bc0, 0x63318c60, 0x582c0b00, 0xd1689a20, 0xa2511440, 0x251284a0, 0x22110440, 0x7c3e0f80, 0x3b1d8760, 0x01008020, 0x21108420, 0x783c0f00, 0x874390e0 359.long 0xd46a1a80, 0x0, 0x462308c0, 0x572b8ae0, 0x9f4f93e0, 0xd3699a60, 0x271384e0, 0x52290a40, 0x4c260980, 0x361b06c0, 0x02010040, 0xe7739ce0, 0xa0501400, 0xc4621880, 0xc8641900, 0x9e4f13c0 360.long 0xea751d40, 0xbf5f97e0, 0x8a451140, 0xd2691a40, 0x40200800, 0xc76398e0, 0x381c0700, 0xb55a96a0, 0xa3519460, 0xf77b9ee0, 0xf2791e40, 0xce6719c0, 0xf97c9f20, 0x61308c20, 0x150a82a0, 0xa1509420 361.long 0xe0701c00, 0xae5715c0, 0x5d2e8ba0, 0xa4521480, 0x9b4d9360, 0x341a0680, 0x1a0d0340, 0x552a8aa0, 0xad5695a0, 0x93499260, 0x32190640, 0x30180600, 0xf57a9ea0, 0x8c461180, 0xb1589620, 0xe3719c60 362.long 0x1d0e83a0, 0xf67b1ec0, 0xe2711c40, 0x2e1705c0, 0x82411040, 0x66330cc0, 0xca651940, 0x60300c00, 0xc0601800, 0x29148520, 0x23118460, 0xab559560, 0x0d0681a0, 0x53298a60, 0x4e2709c0, 0x6f378de0 363.long 0xd56a9aa0, 0xdb6d9b60, 0x371b86e0, 0x452288a0, 0xde6f1bc0, 0xfd7e9fa0, 0x8e4711c0, 0x2f1785e0, 0x03018060, 0xff7f9fe0, 0x6a350d40, 0x72390e40, 0x6d368da0, 0x6c360d80, 0x5b2d8b60, 0x51288a20 364.long 0x8d4691a0, 0x1b0d8360, 0xaf5795e0, 0x92491240, 0xbb5d9760, 0xdd6e9ba0, 0xbc5e1780, 0x7f3f8fe0, 0x11088220, 0xd96c9b20, 0x5c2e0b80, 0x41208820, 0x1f0f83e0, 0x10080200, 0x5a2d0b40, 0xd86c1b00 365.long 0x0a050140, 0xc1609820, 0x31188620, 0x88441100, 0xa55294a0, 0xcd6699a0, 0x7b3d8f60, 0xbd5e97a0, 0x2d1685a0, 0x743a0e80, 0xd0681a00, 0x12090240, 0xb85c1700, 0xe5729ca0, 0xb45a1680, 0xb0581600 366.long 0x89449120, 0x69348d20, 0x974b92e0, 0x4a250940, 0x0c060180, 0x964b12c0, 0x773b8ee0, 0x7e3f0fc0, 0x65328ca0, 0xb95c9720, 0xf1789e20, 0x09048120, 0xc56298a0, 0x6e370dc0, 0xc66318c0, 0x84421080 367.long 0x180c0300, 0xf0781e00, 0x7d3e8fa0, 0xec761d80, 0x3a1d0740, 0xdc6e1b80, 0x4d2689a0, 0x20100400, 0x793c8f20, 0xee771dc0, 0x5f2f8be0, 0x3e1f07c0, 0xd76b9ae0, 0xcb659960, 0x391c8720, 0x48240900 368 369#endif 370