/*
* This file is part of the openHiTLS project.
*
* openHiTLS is licensed under the Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
*
* http://license.coscl.org.cn/MulanPSL2
*
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
*/
#include "hitls_build.h"
#ifdef HITLS_CRYPTO_SM4
#include "crypt_sm4_modes_macro_x86_64.s"
.text
.set W0, %r8d
.set W1, %r9d
.set W2, %r10d
.set W3, %r11d
.set T0, %eax
.set T0BL, %al
.set T1, %ecx
.set T0_64, %rax
.set T1_64, %rcx
.set RK, %rdx
.set ADDR, %rdi
.set RoundKey, %rsi
.set CK, %rdx
.macro SETKEY_ROUND RKey A0 A1 A2 A3 CK_ADDR No_CK No_RK
# x4 = x1 ^ x2 ^ x3 ^ *(CK + i);
# x4 = S32(x4);
# x4 = x0 ^ L_Key32(x4);
# *(rk + i) = x4;
# x4 = x1 ^ x2 ^ x3 ^ *(CK + i);
movl \No_CK(\CK_ADDR), T0
xorl \A1, T0
xorl \A2, T0
xorl \A3, T0
# 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]);
movzbl T0BL, T1
xorl (ADDR,T1_64,4), \A0
shrl $8, T0
movzbl T0BL, T1
xorl 1024(ADDR,T1_64,4), \A0
shrl $8, T0
movzbl T0BL, T1
xorl 2048(ADDR,T1_64,4), \A0
shrl $8, T0
xorl 3072(ADDR,T0_64,4), \A0
# enc round *(rk + i) = x4;
# dec round *(rk + 31 - i) = x4;
movl \A0, \No_RK(\RKey)
.endm
##### SM4 Encryption #####
# void SM4_Encrypt(const unsigned char *in, unsigned char *out, const SM4_KEY *key)
# %rdi in plain ptr 16 bytes
# %rsi out cipher ptr 16 bytes
# %rdx key round key ptr 128 bytes
.globl SM4_Encrypt
.type SM4_Encrypt, @function
.align 64
SM4_Encrypt:
##### Load Data #####
movl (%rdi), W0
movl 4(%rdi), W1
movl 8(%rdi), W2
movl 12(%rdi), W3
bswap W0
bswap W1
bswap W2
bswap W3
##### Load SBOX ADDRESS #####
leaq SBOX4X_MASK(%rip), ADDR
##### Serial Rounds #####
SM4_SERIAL_ROUNDS
##### Store Results #####
bswap W0
bswap W1
bswap W2
bswap W3
movl W3, (%rsi)
movl W2, 4(%rsi)
movl W1, 8(%rsi)
movl W0, 12(%rsi)
##### Clear Context #####
xorl W0, W0
xorl W1, W1
xorl W2, W2
xorl W3, W3
xorl T0, T0
xorl T1, T1
ret
.size SM4_Encrypt, .-SM4_Encrypt
##### SM4 SET ROUND KEY #####
# void SM4_SetEncKey(const unsigned char *userKey, SM4_KEY *key)
# %rdi userKey: user key ptr 16 bytes
# %rsi key: round key ptr 128 bytes
.globl SM4_SetEncKey
.type SM4_SetEncKey, @function
.align 64
SM4_SetEncKey:
##### Load MK #####
movl (%rdi), W0
movl 4(%rdi), W1
movl 8(%rdi), W2
movl 12(%rdi), W3
bswap W0
bswap W1
bswap W2
bswap W3
##### Load SBOX ADDRESS #####
leaq SBOX_KEY_X4(%rip), ADDR
leaq CK_NUM(%rip), CK
xorq T0_64, T0_64
xorq T1_64, T1_64
##### XOR FK #####
xorl $0xa3b1bac6, W0
xorl $0x56aa3350, W1
xorl $0x677d9197, W2
xorl $0xb27022dc, W3
##### ROUNDS #####
SETKEY_ROUND RoundKey W0 W1 W2 W3 CK 0 0
SETKEY_ROUND RoundKey W1 W2 W3 W0 CK 4 4
SETKEY_ROUND RoundKey W2 W3 W0 W1 CK 8 8
SETKEY_ROUND RoundKey W3 W0 W1 W2 CK 12 12
SETKEY_ROUND RoundKey W0 W1 W2 W3 CK 16 16
SETKEY_ROUND RoundKey W1 W2 W3 W0 CK 20 20
SETKEY_ROUND RoundKey W2 W3 W0 W1 CK 24 24
SETKEY_ROUND RoundKey W3 W0 W1 W2 CK 28 28
SETKEY_ROUND RoundKey W0 W1 W2 W3 CK 32 32
SETKEY_ROUND RoundKey W1 W2 W3 W0 CK 36 36
SETKEY_ROUND RoundKey W2 W3 W0 W1 CK 40 40
SETKEY_ROUND RoundKey W3 W0 W1 W2 CK 44 44
SETKEY_ROUND RoundKey W0 W1 W2 W3 CK 48 48
SETKEY_ROUND RoundKey W1 W2 W3 W0 CK 52 52
SETKEY_ROUND RoundKey W2 W3 W0 W1 CK 56 56
SETKEY_ROUND RoundKey W3 W0 W1 W2 CK 60 60
SETKEY_ROUND RoundKey W0 W1 W2 W3 CK 64 64
SETKEY_ROUND RoundKey W1 W2 W3 W0 CK 68 68
SETKEY_ROUND RoundKey W2 W3 W0 W1 CK 72 72
SETKEY_ROUND RoundKey W3 W0 W1 W2 CK 76 76
SETKEY_ROUND RoundKey W0 W1 W2 W3 CK 80 80
SETKEY_ROUND RoundKey W1 W2 W3 W0 CK 84 84
SETKEY_ROUND RoundKey W2 W3 W0 W1 CK 88 88
SETKEY_ROUND RoundKey W3 W0 W1 W2 CK 92 92
SETKEY_ROUND RoundKey W0 W1 W2 W3 CK 96 96
SETKEY_ROUND RoundKey W1 W2 W3 W0 CK 100 100
SETKEY_ROUND RoundKey W2 W3 W0 W1 CK 104 104
SETKEY_ROUND RoundKey W3 W0 W1 W2 CK 108 108
SETKEY_ROUND RoundKey W0 W1 W2 W3 CK 112 112
SETKEY_ROUND RoundKey W1 W2 W3 W0 CK 116 116
SETKEY_ROUND RoundKey W2 W3 W0 W1 CK 120 120
SETKEY_ROUND RoundKey W3 W0 W1 W2 CK 124 124
##### Clear Context #####
xorl W0, W0
xorl W1, W1
xorl W2, W2
xorl W3, W3
xorl T0, T0
xorl T1, T1
ret
.size SM4_SetEncKey, .-SM4_SetEncKey
# void SM4_SetDecKey(const unsigned char *userKey, SM4_KEY *key)
# %rdi userKey: user key ptr 16 bytes
# %rsi key: round key ptr 128 bytes
.globl SM4_SetDecKey
.type SM4_SetDecKey, @function
.align 64
SM4_SetDecKey:
##### Load MK #####
movl (%rdi), W0
movl 4(%rdi), W1
movl 8(%rdi), W2
movl 12(%rdi), W3
bswap W0
bswap W1
bswap W2
bswap W3
##### Load SBOX ADDRESS #####
leaq SBOX_KEY_X4(%rip), ADDR
leaq CK_NUM(%rip), CK
xorq T0_64, T0_64
xorq T1_64, T1_64
##### XOR FK #####
xorl $0xa3b1bac6, W0
xorl $0x56aa3350, W1
xorl $0x677d9197, W2
xorl $0xb27022dc, W3
##### ROUNDS #####
SETKEY_ROUND RoundKey W0 W1 W2 W3 CK 0 124
SETKEY_ROUND RoundKey W1 W2 W3 W0 CK 4 120
SETKEY_ROUND RoundKey W2 W3 W0 W1 CK 8 116
SETKEY_ROUND RoundKey W3 W0 W1 W2 CK 12 112
SETKEY_ROUND RoundKey W0 W1 W2 W3 CK 16 108
SETKEY_ROUND RoundKey W1 W2 W3 W0 CK 20 104
SETKEY_ROUND RoundKey W2 W3 W0 W1 CK 24 100
SETKEY_ROUND RoundKey W3 W0 W1 W2 CK 28 96
SETKEY_ROUND RoundKey W0 W1 W2 W3 CK 32 92
SETKEY_ROUND RoundKey W1 W2 W3 W0 CK 36 88
SETKEY_ROUND RoundKey W2 W3 W0 W1 CK 40 84
SETKEY_ROUND RoundKey W3 W0 W1 W2 CK 44 80
SETKEY_ROUND RoundKey W0 W1 W2 W3 CK 48 76
SETKEY_ROUND RoundKey W1 W2 W3 W0 CK 52 72
SETKEY_ROUND RoundKey W2 W3 W0 W1 CK 56 68
SETKEY_ROUND RoundKey W3 W0 W1 W2 CK 60 64
SETKEY_ROUND RoundKey W0 W1 W2 W3 CK 64 60
SETKEY_ROUND RoundKey W1 W2 W3 W0 CK 68 56
SETKEY_ROUND RoundKey W2 W3 W0 W1 CK 72 52
SETKEY_ROUND RoundKey W3 W0 W1 W2 CK 76 48
SETKEY_ROUND RoundKey W0 W1 W2 W3 CK 80 44
SETKEY_ROUND RoundKey W1 W2 W3 W0 CK 84 40
SETKEY_ROUND RoundKey W2 W3 W0 W1 CK 88 36
SETKEY_ROUND RoundKey W3 W0 W1 W2 CK 92 32
SETKEY_ROUND RoundKey W0 W1 W2 W3 CK 96 28
SETKEY_ROUND RoundKey W1 W2 W3 W0 CK 100 24
SETKEY_ROUND RoundKey W2 W3 W0 W1 CK 104 20
SETKEY_ROUND RoundKey W3 W0 W1 W2 CK 108 16
SETKEY_ROUND RoundKey W0 W1 W2 W3 CK 112 12
SETKEY_ROUND RoundKey W1 W2 W3 W0 CK 116 8
SETKEY_ROUND RoundKey W2 W3 W0 W1 CK 120 4
SETKEY_ROUND RoundKey W3 W0 W1 W2 CK 124 0
##### Clear Context #####
xorl W0, W0
xorl W1, W1
xorl W2, W2
xorl W3, W3
xorl T0, T0
xorl T1, T1
ret
.size SM4_SetDecKey, .-SM4_SetDecKey
##### SBOX Extend Tables (1 Table, 256*4 bytes) for round key: SBOX_KEY_0, SBOX_KEY_1, SBOX_KEY_2, SBOX_KEY_3 #####
.section .rodata
.align 64
CK_NUM:
.long 0x00070e15, 0x1c232a31, 0x383f464d, 0x545b6269, 0x70777e85, 0x8c939aa1, 0xa8afb6bd, 0xc4cbd2d9, 0xe0e7eef5, 0xfc030a11, 0x181f262d, 0x343b4249, 0x50575e65, 0x6c737a81, 0x888f969d, 0xa4abb2b9
.long 0xc0c7ced5, 0xdce3eaf1, 0xf8ff060d, 0x141b2229, 0x30373e45, 0x4c535a61, 0x686f767d, 0x848b9299, 0xa0a7aeb5, 0xbcc3cad1, 0xd8dfe6ed, 0xf4fb0209, 0x10171e25, 0x2c333a41, 0x484f565d, 0x646b7279
SBOX_KEY_X4:
#SBOX_KEY_0:
.long 0x6b1ac0d6, 0x48120090, 0x749d20e9, 0x7f1fc0fe, 0x661980cc, 0x709c20e1, 0x1e87a03d, 0x5b96e0b7, 0x0b02c016, 0x5b16c0b6, 0x0a028014, 0x611840c2, 0x14050028, 0x7d9f60fb, 0x1605802c, 0x0280a005
.long 0x1585602b, 0x338ce067, 0x4d13409a, 0x3b0ec076, 0x1505402a, 0x5f17c0be, 0x02008004, 0x619860c3, 0x551540aa, 0x22088044, 0x09826013, 0x1304c026, 0x24892049, 0x4310c086, 0x0300c006, 0x4c932099
.long 0x4e13809c, 0x21084042, 0x280a0050, 0x7a1e80f4, 0x48922091, 0x779de0ef, 0x4c130098, 0x3d0f407a, 0x19866033, 0x2a0a8054, 0x0581600b, 0x21886043, 0x769da0ed, 0x6799e0cf, 0x561580ac, 0x310c4062
.long 0x721c80e4, 0x599660b3, 0x0e03801c, 0x549520a9, 0x649920c9, 0x04010008, 0x741d00e8, 0x4a92a095, 0x40100080, 0x6f9be0df, 0x4a128094, 0x7d1f40fa, 0x3a8ea075, 0x4791e08f, 0x1f87e03f, 0x5314c0a6
.long 0x2388e047, 0x0380e007, 0x5394e0a7, 0x7e1f80fc, 0x799e60f3, 0x398e6073, 0x0b82e017, 0x5d1740ba, 0x41906083, 0x2c8b2059, 0x1e07803c, 0x0c832019, 0x731cc0e6, 0x4290a085, 0x2789e04f, 0x541500a8
.long 0x340d0068, 0x358d606b, 0x40902081, 0x591640b2, 0x388e2071, 0x320c8064, 0x6d1b40da, 0x4591608b, 0x7c1f00f8, 0x759d60eb, 0x0781e00f, 0x2589604b, 0x380e0070, 0x2b0ac056, 0x4e93a09d, 0x1a86a035
.long 0x0f03c01e, 0x12048024, 0x0701c00e, 0x2f0bc05e, 0x318c6063, 0x2c0b0058, 0x689a20d1, 0x511440a2, 0x1284a025, 0x11044022, 0x3e0f807c, 0x1d87603b, 0x00802001, 0x10842021, 0x3c0f0078, 0x4390e087
.long 0x6a1a80d4, 0x0, 0x2308c046, 0x2b8ae057, 0x4f93e09f, 0x699a60d3, 0x1384e027, 0x290a4052, 0x2609804c, 0x1b06c036, 0x01004002, 0x739ce0e7, 0x501400a0, 0x621880c4, 0x641900c8, 0x4f13c09e
.long 0x751d40ea, 0x5f97e0bf, 0x4511408a, 0x691a40d2, 0x20080040, 0x6398e0c7, 0x1c070038, 0x5a96a0b5, 0x519460a3, 0x7b9ee0f7, 0x791e40f2, 0x6719c0ce, 0x7c9f20f9, 0x308c2061, 0x0a82a015, 0x509420a1
.long 0x701c00e0, 0x5715c0ae, 0x2e8ba05d, 0x521480a4, 0x4d93609b, 0x1a068034, 0x0d03401a, 0x2a8aa055, 0x5695a0ad, 0x49926093, 0x19064032, 0x18060030, 0x7a9ea0f5, 0x4611808c, 0x589620b1, 0x719c60e3
.long 0x0e83a01d, 0x7b1ec0f6, 0x711c40e2, 0x1705c02e, 0x41104082, 0x330cc066, 0x651940ca, 0x300c0060, 0x601800c0, 0x14852029, 0x11846023, 0x559560ab, 0x0681a00d, 0x298a6053, 0x2709c04e, 0x378de06f
.long 0x6a9aa0d5, 0x6d9b60db, 0x1b86e037, 0x2288a045, 0x6f1bc0de, 0x7e9fa0fd, 0x4711c08e, 0x1785e02f, 0x01806003, 0x7f9fe0ff, 0x350d406a, 0x390e4072, 0x368da06d, 0x360d806c, 0x2d8b605b, 0x288a2051
.long 0x4691a08d, 0x0d83601b, 0x5795e0af, 0x49124092, 0x5d9760bb, 0x6e9ba0dd, 0x5e1780bc, 0x3f8fe07f, 0x08822011, 0x6c9b20d9, 0x2e0b805c, 0x20882041, 0x0f83e01f, 0x08020010, 0x2d0b405a, 0x6c1b00d8
.long 0x0501400a, 0x609820c1, 0x18862031, 0x44110088, 0x5294a0a5, 0x6699a0cd, 0x3d8f607b, 0x5e97a0bd, 0x1685a02d, 0x3a0e8074, 0x681a00d0, 0x09024012, 0x5c1700b8, 0x729ca0e5, 0x5a1680b4, 0x581600b0
.long 0x44912089, 0x348d2069, 0x4b92e097, 0x2509404a, 0x0601800c, 0x4b12c096, 0x3b8ee077, 0x3f0fc07e, 0x328ca065, 0x5c9720b9, 0x789e20f1, 0x04812009, 0x6298a0c5, 0x370dc06e, 0x6318c0c6, 0x42108084
.long 0x0c030018, 0x781e00f0, 0x3e8fa07d, 0x761d80ec, 0x1d07403a, 0x6e1b80dc, 0x2689a04d, 0x10040020, 0x3c8f2079, 0x771dc0ee, 0x2f8be05f, 0x1f07c03e, 0x6b9ae0d7, 0x659960cb, 0x1c872039, 0x24090048
#SBOX_KEY_1:
.long 0x1ac0d66b, 0x12009048, 0x9d20e974, 0x1fc0fe7f, 0x1980cc66, 0x9c20e170, 0x87a03d1e, 0x96e0b75b, 0x02c0160b, 0x16c0b65b, 0x0280140a, 0x1840c261, 0x05002814, 0x9f60fb7d, 0x05802c16, 0x80a00502
.long 0x85602b15, 0x8ce06733, 0x13409a4d, 0x0ec0763b, 0x05402a15, 0x17c0be5f, 0x00800402, 0x9860c361, 0x1540aa55, 0x08804422, 0x82601309, 0x04c02613, 0x89204924, 0x10c08643, 0x00c00603, 0x9320994c
.long 0x13809c4e, 0x08404221, 0x0a005028, 0x1e80f47a, 0x92209148, 0x9de0ef77, 0x1300984c, 0x0f407a3d, 0x86603319, 0x0a80542a, 0x81600b05, 0x88604321, 0x9da0ed76, 0x99e0cf67, 0x1580ac56, 0x0c406231
.long 0x1c80e472, 0x9660b359, 0x03801c0e, 0x9520a954, 0x9920c964, 0x01000804, 0x1d00e874, 0x92a0954a, 0x10008040, 0x9be0df6f, 0x1280944a, 0x1f40fa7d, 0x8ea0753a, 0x91e08f47, 0x87e03f1f, 0x14c0a653
.long 0x88e04723, 0x80e00703, 0x94e0a753, 0x1f80fc7e, 0x9e60f379, 0x8e607339, 0x82e0170b, 0x1740ba5d, 0x90608341, 0x8b20592c, 0x07803c1e, 0x8320190c, 0x1cc0e673, 0x90a08542, 0x89e04f27, 0x1500a854
.long 0x0d006834, 0x8d606b35, 0x90208140, 0x1640b259, 0x8e207138, 0x0c806432, 0x1b40da6d, 0x91608b45, 0x1f00f87c, 0x9d60eb75, 0x81e00f07, 0x89604b25, 0x0e007038, 0x0ac0562b, 0x93a09d4e, 0x86a0351a
.long 0x03c01e0f, 0x04802412, 0x01c00e07, 0x0bc05e2f, 0x8c606331, 0x0b00582c, 0x9a20d168, 0x1440a251, 0x84a02512, 0x04402211, 0x0f807c3e, 0x87603b1d, 0x80200100, 0x84202110, 0x0f00783c, 0x90e08743
.long 0x1a80d46a, 0x0, 0x08c04623, 0x8ae0572b, 0x93e09f4f, 0x9a60d369, 0x84e02713, 0x0a405229, 0x09804c26, 0x06c0361b, 0x00400201, 0x9ce0e773, 0x1400a050, 0x1880c462, 0x1900c864, 0x13c09e4f
.long 0x1d40ea75, 0x97e0bf5f, 0x11408a45, 0x1a40d269, 0x08004020, 0x98e0c763, 0x0700381c, 0x96a0b55a, 0x9460a351, 0x9ee0f77b, 0x1e40f279, 0x19c0ce67, 0x9f20f97c, 0x8c206130, 0x82a0150a, 0x9420a150
.long 0x1c00e070, 0x15c0ae57, 0x8ba05d2e, 0x1480a452, 0x93609b4d, 0x0680341a, 0x03401a0d, 0x8aa0552a, 0x95a0ad56, 0x92609349, 0x06403219, 0x06003018, 0x9ea0f57a, 0x11808c46, 0x9620b158, 0x9c60e371
.long 0x83a01d0e, 0x1ec0f67b, 0x1c40e271, 0x05c02e17, 0x10408241, 0x0cc06633, 0x1940ca65, 0x0c006030, 0x1800c060, 0x85202914, 0x84602311, 0x9560ab55, 0x81a00d06, 0x8a605329, 0x09c04e27, 0x8de06f37
.long 0x9aa0d56a, 0x9b60db6d, 0x86e0371b, 0x88a04522, 0x1bc0de6f, 0x9fa0fd7e, 0x11c08e47, 0x85e02f17, 0x80600301, 0x9fe0ff7f, 0x0d406a35, 0x0e407239, 0x8da06d36, 0x0d806c36, 0x8b605b2d, 0x8a205128
.long 0x91a08d46, 0x83601b0d, 0x95e0af57, 0x12409249, 0x9760bb5d, 0x9ba0dd6e, 0x1780bc5e, 0x8fe07f3f, 0x82201108, 0x9b20d96c, 0x0b805c2e, 0x88204120, 0x83e01f0f, 0x02001008, 0x0b405a2d, 0x1b00d86c
.long 0x01400a05, 0x9820c160, 0x86203118, 0x11008844, 0x94a0a552, 0x99a0cd66, 0x8f607b3d, 0x97a0bd5e, 0x85a02d16, 0x0e80743a, 0x1a00d068, 0x02401209, 0x1700b85c, 0x9ca0e572, 0x1680b45a, 0x1600b058
.long 0x91208944, 0x8d206934, 0x92e0974b, 0x09404a25, 0x01800c06, 0x12c0964b, 0x8ee0773b, 0x0fc07e3f, 0x8ca06532, 0x9720b95c, 0x9e20f178, 0x81200904, 0x98a0c562, 0x0dc06e37, 0x18c0c663, 0x10808442
.long 0x0300180c, 0x1e00f078, 0x8fa07d3e, 0x1d80ec76, 0x07403a1d, 0x1b80dc6e, 0x89a04d26, 0x04002010, 0x8f20793c, 0x1dc0ee77, 0x8be05f2f, 0x07c03e1f, 0x9ae0d76b, 0x9960cb65, 0x8720391c, 0x09004824
#SBOX_KEY_2:
.long 0xc0d66b1a, 0x00904812, 0x20e9749d, 0xc0fe7f1f, 0x80cc6619, 0x20e1709c, 0xa03d1e87, 0xe0b75b96, 0xc0160b02, 0xc0b65b16, 0x80140a02, 0x40c26118, 0x00281405, 0x60fb7d9f, 0x802c1605, 0xa0050280
.long 0x602b1585, 0xe067338c, 0x409a4d13, 0xc0763b0e, 0x402a1505, 0xc0be5f17, 0x80040200, 0x60c36198, 0x40aa5515, 0x80442208, 0x60130982, 0xc0261304, 0x20492489, 0xc0864310, 0xc0060300, 0x20994c93
.long 0x809c4e13, 0x40422108, 0x0050280a, 0x80f47a1e, 0x20914892, 0xe0ef779d, 0x00984c13, 0x407a3d0f, 0x60331986, 0x80542a0a, 0x600b0581, 0x60432188, 0xa0ed769d, 0xe0cf6799, 0x80ac5615, 0x4062310c
.long 0x80e4721c, 0x60b35996, 0x801c0e03, 0x20a95495, 0x20c96499, 0x00080401, 0x00e8741d, 0xa0954a92, 0x00804010, 0xe0df6f9b, 0x80944a12, 0x40fa7d1f, 0xa0753a8e, 0xe08f4791, 0xe03f1f87, 0xc0a65314
.long 0xe0472388, 0xe0070380, 0xe0a75394, 0x80fc7e1f, 0x60f3799e, 0x6073398e, 0xe0170b82, 0x40ba5d17, 0x60834190, 0x20592c8b, 0x803c1e07, 0x20190c83, 0xc0e6731c, 0xa0854290, 0xe04f2789, 0x00a85415
.long 0x0068340d, 0x606b358d, 0x20814090, 0x40b25916, 0x2071388e, 0x8064320c, 0x40da6d1b, 0x608b4591, 0x00f87c1f, 0x60eb759d, 0xe00f0781, 0x604b2589, 0x0070380e, 0xc0562b0a, 0xa09d4e93, 0xa0351a86
.long 0xc01e0f03, 0x80241204, 0xc00e0701, 0xc05e2f0b, 0x6063318c, 0x00582c0b, 0x20d1689a, 0x40a25114, 0xa0251284, 0x40221104, 0x807c3e0f, 0x603b1d87, 0x20010080, 0x20211084, 0x00783c0f, 0xe0874390
.long 0x80d46a1a, 0x0, 0xc0462308, 0xe0572b8a, 0xe09f4f93, 0x60d3699a, 0xe0271384, 0x4052290a, 0x804c2609, 0xc0361b06, 0x40020100, 0xe0e7739c, 0x00a05014, 0x80c46218, 0x00c86419, 0xc09e4f13
.long 0x40ea751d, 0xe0bf5f97, 0x408a4511, 0x40d2691a, 0x00402008, 0xe0c76398, 0x00381c07, 0xa0b55a96, 0x60a35194, 0xe0f77b9e, 0x40f2791e, 0xc0ce6719, 0x20f97c9f, 0x2061308c, 0xa0150a82, 0x20a15094
.long 0x00e0701c, 0xc0ae5715, 0xa05d2e8b, 0x80a45214, 0x609b4d93, 0x80341a06, 0x401a0d03, 0xa0552a8a, 0xa0ad5695, 0x60934992, 0x40321906, 0x00301806, 0xa0f57a9e, 0x808c4611, 0x20b15896, 0x60e3719c
.long 0xa01d0e83, 0xc0f67b1e, 0x40e2711c, 0xc02e1705, 0x40824110, 0xc066330c, 0x40ca6519, 0x0060300c, 0x00c06018, 0x20291485, 0x60231184, 0x60ab5595, 0xa00d0681, 0x6053298a, 0xc04e2709, 0xe06f378d
.long 0xa0d56a9a, 0x60db6d9b, 0xe0371b86, 0xa0452288, 0xc0de6f1b, 0xa0fd7e9f, 0xc08e4711, 0xe02f1785, 0x60030180, 0xe0ff7f9f, 0x406a350d, 0x4072390e, 0xa06d368d, 0x806c360d, 0x605b2d8b, 0x2051288a
.long 0xa08d4691, 0x601b0d83, 0xe0af5795, 0x40924912, 0x60bb5d97, 0xa0dd6e9b, 0x80bc5e17, 0xe07f3f8f, 0x20110882, 0x20d96c9b, 0x805c2e0b, 0x20412088, 0xe01f0f83, 0x00100802, 0x405a2d0b, 0x00d86c1b
.long 0x400a0501, 0x20c16098, 0x20311886, 0x00884411, 0xa0a55294, 0xa0cd6699, 0x607b3d8f, 0xa0bd5e97, 0xa02d1685, 0x80743a0e, 0x00d0681a, 0x40120902, 0x00b85c17, 0xa0e5729c, 0x80b45a16, 0x00b05816
.long 0x20894491, 0x2069348d, 0xe0974b92, 0x404a2509, 0x800c0601, 0xc0964b12, 0xe0773b8e, 0xc07e3f0f, 0xa065328c, 0x20b95c97, 0x20f1789e, 0x20090481, 0xa0c56298, 0xc06e370d, 0xc0c66318, 0x80844210
.long 0x00180c03, 0x00f0781e, 0xa07d3e8f, 0x80ec761d, 0x403a1d07, 0x80dc6e1b, 0xa04d2689, 0x00201004, 0x20793c8f, 0xc0ee771d, 0xe05f2f8b, 0xc03e1f07, 0xe0d76b9a, 0x60cb6599, 0x20391c87, 0x00482409
#SBOX_KEY_3:
.long 0xd66b1ac0, 0x90481200, 0xe9749d20, 0xfe7f1fc0, 0xcc661980, 0xe1709c20, 0x3d1e87a0, 0xb75b96e0, 0x160b02c0, 0xb65b16c0, 0x140a0280, 0xc2611840, 0x28140500, 0xfb7d9f60, 0x2c160580, 0x050280a0
.long 0x2b158560, 0x67338ce0, 0x9a4d1340, 0x763b0ec0, 0x2a150540, 0xbe5f17c0, 0x04020080, 0xc3619860, 0xaa551540, 0x44220880, 0x13098260, 0x261304c0, 0x49248920, 0x864310c0, 0x060300c0, 0x994c9320
.long 0x9c4e1380, 0x42210840, 0x50280a00, 0xf47a1e80, 0x91489220, 0xef779de0, 0x984c1300, 0x7a3d0f40, 0x33198660, 0x542a0a80, 0x0b058160, 0x43218860, 0xed769da0, 0xcf6799e0, 0xac561580, 0x62310c40
.long 0xe4721c80, 0xb3599660, 0x1c0e0380, 0xa9549520, 0xc9649920, 0x08040100, 0xe8741d00, 0x954a92a0, 0x80401000, 0xdf6f9be0, 0x944a1280, 0xfa7d1f40, 0x753a8ea0, 0x8f4791e0, 0x3f1f87e0, 0xa65314c0
.long 0x472388e0, 0x070380e0, 0xa75394e0, 0xfc7e1f80, 0xf3799e60, 0x73398e60, 0x170b82e0, 0xba5d1740, 0x83419060, 0x592c8b20, 0x3c1e0780, 0x190c8320, 0xe6731cc0, 0x854290a0, 0x4f2789e0, 0xa8541500
.long 0x68340d00, 0x6b358d60, 0x81409020, 0xb2591640, 0x71388e20, 0x64320c80, 0xda6d1b40, 0x8b459160, 0xf87c1f00, 0xeb759d60, 0x0f0781e0, 0x4b258960, 0x70380e00, 0x562b0ac0, 0x9d4e93a0, 0x351a86a0
.long 0x1e0f03c0, 0x24120480, 0x0e0701c0, 0x5e2f0bc0, 0x63318c60, 0x582c0b00, 0xd1689a20, 0xa2511440, 0x251284a0, 0x22110440, 0x7c3e0f80, 0x3b1d8760, 0x01008020, 0x21108420, 0x783c0f00, 0x874390e0
.long 0xd46a1a80, 0x0, 0x462308c0, 0x572b8ae0, 0x9f4f93e0, 0xd3699a60, 0x271384e0, 0x52290a40, 0x4c260980, 0x361b06c0, 0x02010040, 0xe7739ce0, 0xa0501400, 0xc4621880, 0xc8641900, 0x9e4f13c0
.long 0xea751d40, 0xbf5f97e0, 0x8a451140, 0xd2691a40, 0x40200800, 0xc76398e0, 0x381c0700, 0xb55a96a0, 0xa3519460, 0xf77b9ee0, 0xf2791e40, 0xce6719c0, 0xf97c9f20, 0x61308c20, 0x150a82a0, 0xa1509420
.long 0xe0701c00, 0xae5715c0, 0x5d2e8ba0, 0xa4521480, 0x9b4d9360, 0x341a0680, 0x1a0d0340, 0x552a8aa0, 0xad5695a0, 0x93499260, 0x32190640, 0x30180600, 0xf57a9ea0, 0x8c461180, 0xb1589620, 0xe3719c60
.long 0x1d0e83a0, 0xf67b1ec0, 0xe2711c40, 0x2e1705c0, 0x82411040, 0x66330cc0, 0xca651940, 0x60300c00, 0xc0601800, 0x29148520, 0x23118460, 0xab559560, 0x0d0681a0, 0x53298a60, 0x4e2709c0, 0x6f378de0
.long 0xd56a9aa0, 0xdb6d9b60, 0x371b86e0, 0x452288a0, 0xde6f1bc0, 0xfd7e9fa0, 0x8e4711c0, 0x2f1785e0, 0x03018060, 0xff7f9fe0, 0x6a350d40, 0x72390e40, 0x6d368da0, 0x6c360d80, 0x5b2d8b60, 0x51288a20
.long 0x8d4691a0, 0x1b0d8360, 0xaf5795e0, 0x92491240, 0xbb5d9760, 0xdd6e9ba0, 0xbc5e1780, 0x7f3f8fe0, 0x11088220, 0xd96c9b20, 0x5c2e0b80, 0x41208820, 0x1f0f83e0, 0x10080200, 0x5a2d0b40, 0xd86c1b00
.long 0x0a050140, 0xc1609820, 0x31188620, 0x88441100, 0xa55294a0, 0xcd6699a0, 0x7b3d8f60, 0xbd5e97a0, 0x2d1685a0, 0x743a0e80, 0xd0681a00, 0x12090240, 0xb85c1700, 0xe5729ca0, 0xb45a1680, 0xb0581600
.long 0x89449120, 0x69348d20, 0x974b92e0, 0x4a250940, 0x0c060180, 0x964b12c0, 0x773b8ee0, 0x7e3f0fc0, 0x65328ca0, 0xb95c9720, 0xf1789e20, 0x09048120, 0xc56298a0, 0x6e370dc0, 0xc66318c0, 0x84421080
.long 0x180c0300, 0xf0781e00, 0x7d3e8fa0, 0xec761d80, 0x3a1d0740, 0xdc6e1b80, 0x4d2689a0, 0x20100400, 0x793c8f20, 0xee771dc0, 0x5f2f8be0, 0x3e1f07c0, 0xd76b9ae0, 0xcb659960, 0x391c8720, 0x48240900
#endif