29#ifndef __ARCH_RISCV_RVK_HH__
30#define __ARCH_RISCV_RVK_HH__
48 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B,
49 0xFE, 0xD7, 0xAB, 0x76, 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0,
50 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0, 0xB7, 0xFD, 0x93, 0x26,
51 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15,
52 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2,
53 0xEB, 0x27, 0xB2, 0x75, 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0,
54 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84, 0x53, 0xD1, 0x00, 0xED,
55 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF,
56 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F,
57 0x50, 0x3C, 0x9F, 0xA8, 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5,
58 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2, 0xCD, 0x0C, 0x13, 0xEC,
59 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73,
60 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14,
61 0xDE, 0x5E, 0x0B, 0xDB, 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C,
62 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79, 0xE7, 0xC8, 0x37, 0x6D,
63 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08,
64 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F,
65 0x4B, 0xBD, 0x8B, 0x8A, 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E,
66 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E, 0xE1, 0xF8, 0x98, 0x11,
67 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF,
68 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F,
69 0xB0, 0x54, 0xBB, 0x16
74 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E,
75 0x81, 0xF3, 0xD7, 0xFB, 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87,
76 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB, 0x54, 0x7B, 0x94, 0x32,
77 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E,
78 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, 0x76, 0x5B, 0xA2, 0x49,
79 0x6D, 0x8B, 0xD1, 0x25, 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16,
80 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92, 0x6C, 0x70, 0x48, 0x50,
81 0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84,
82 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, 0xF7, 0xE4, 0x58, 0x05,
83 0xB8, 0xB3, 0x45, 0x06, 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02,
84 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B, 0x3A, 0x91, 0x11, 0x41,
85 0x4F, 0x67, 0xDC, 0xEA, 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73,
86 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, 0xE2, 0xF9, 0x37, 0xE8,
87 0x1C, 0x75, 0xDF, 0x6E, 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89,
88 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B, 0xFC, 0x56, 0x3E, 0x4B,
89 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4,
90 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10, 0x59,
91 0x27, 0x80, 0xEC, 0x5F, 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D,
92 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF, 0xA0, 0xE0, 0x3B, 0x4D,
93 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61,
94 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63,
95 0x55, 0x21, 0x0C, 0x7D
100 0xD6, 0x90, 0xE9, 0xFE, 0xCC, 0xE1, 0x3D, 0xB7, 0x16, 0xB6, 0x14, 0xC2,
101 0x28, 0xFB, 0x2C, 0x05, 0x2B, 0x67, 0x9A, 0x76, 0x2A, 0xBE, 0x04, 0xC3,
102 0xAA, 0x44, 0x13, 0x26, 0x49, 0x86, 0x06, 0x99, 0x9C, 0x42, 0x50, 0xF4,
103 0x91, 0xEF, 0x98, 0x7A, 0x33, 0x54, 0x0B, 0x43, 0xED, 0xCF, 0xAC, 0x62,
104 0xE4, 0xB3, 0x1C, 0xA9, 0xC9, 0x08, 0xE8, 0x95, 0x80, 0xDF, 0x94, 0xFA,
105 0x75, 0x8F, 0x3F, 0xA6, 0x47, 0x07, 0xA7, 0xFC, 0xF3, 0x73, 0x17, 0xBA,
106 0x83, 0x59, 0x3C, 0x19, 0xE6, 0x85, 0x4F, 0xA8, 0x68, 0x6B, 0x81, 0xB2,
107 0x71, 0x64, 0xDA, 0x8B, 0xF8, 0xEB, 0x0F, 0x4B, 0x70, 0x56, 0x9D, 0x35,
108 0x1E, 0x24, 0x0E, 0x5E, 0x63, 0x58, 0xD1, 0xA2, 0x25, 0x22, 0x7C, 0x3B,
109 0x01, 0x21, 0x78, 0x87, 0xD4, 0x00, 0x46, 0x57, 0x9F, 0xD3, 0x27, 0x52,
110 0x4C, 0x36, 0x02, 0xE7, 0xA0, 0xC4, 0xC8, 0x9E, 0xEA, 0xBF, 0x8A, 0xD2,
111 0x40, 0xC7, 0x38, 0xB5, 0xA3, 0xF7, 0xF2, 0xCE, 0xF9, 0x61, 0x15, 0xA1,
112 0xE0, 0xAE, 0x5D, 0xA4, 0x9B, 0x34, 0x1A, 0x55, 0xAD, 0x93, 0x32, 0x30,
113 0xF5, 0x8C, 0xB1, 0xE3, 0x1D, 0xF6, 0xE2, 0x2E, 0x82, 0x66, 0xCA, 0x60,
114 0xC0, 0x29, 0x23, 0xAB, 0x0D, 0x53, 0x4E, 0x6F, 0xD5, 0xDB, 0x37, 0x45,
115 0xDE, 0xFD, 0x8E, 0x2F, 0x03, 0xFF, 0x6A, 0x72, 0x6D, 0x6C, 0x5B, 0x51,
116 0x8D, 0x1B, 0xAF, 0x92, 0xBB, 0xDD, 0xBC, 0x7F, 0x11, 0xD9, 0x5C, 0x41,
117 0x1F, 0x10, 0x5A, 0xD8, 0x0A, 0xC1, 0x31, 0x88, 0xA5, 0xCD, 0x7B, 0xBD,
118 0x2D, 0x74, 0xD0, 0x12, 0xB8, 0xE5, 0xB4, 0xB0, 0x89, 0x69, 0x97, 0x4A,
119 0x0C, 0x96, 0x77, 0x7E, 0x65, 0xB9, 0xF1, 0x09, 0xC5, 0x6E, 0xC6, 0x84,
120 0x18, 0xF0, 0x7D, 0xEC, 0x3A, 0xDC, 0x4D, 0x20, 0x79, 0xEE, 0x5F, 0x3E,
121 0xD7, 0xCB, 0x39, 0x48
125 {
return rs1 << (
rs2 & 31); }
127 {
return (uint32_t)
rs1 >> (
rs2 & 31); }
129 {
return rs1 << (
rs2 & 63); }
131 {
return (uint64_t)
rs1 >> (
rs2 & 63); }
148 int shamt =
rs2 & 31;
149 if (shamt & 1)
x = ((
x & 0x55555555) << 1) | ((
x & 0xAAAAAAAA) >> 1);
150 if (shamt & 2)
x = ((
x & 0x33333333) << 2) | ((
x & 0xCCCCCCCC) >> 2);
151 if (shamt & 4)
x = ((
x & 0x0F0F0F0F) << 4) | ((
x & 0xF0F0F0F0) >> 4);
152 if (shamt & 8)
x = ((
x & 0x00FF00FF) << 8) | ((
x & 0xFF00FF00) >> 8);
153 if (shamt & 16)
x = ((
x & 0x0000FFFF) << 16) | ((
x & 0xFFFF0000) >> 16);
160 int shamt =
rs2 & 63;
162 x = ((
x & 0x5555555555555555LL) << 1) |
163 ((
x & 0xAAAAAAAAAAAAAAAALL) >> 1);
165 x = ((
x & 0x3333333333333333LL) << 2) |
166 ((
x & 0xCCCCCCCCCCCCCCCCLL) >> 2);
168 x = ((
x & 0x0F0F0F0F0F0F0F0FLL) << 4) |
169 ((
x & 0xF0F0F0F0F0F0F0F0LL) >> 4);
171 x = ((
x & 0x00FF00FF00FF00FFLL) << 8) |
172 ((
x & 0xFF00FF00FF00FF00LL) >> 8);
174 x = ((
x & 0x0000FFFF0000FFFFLL) << 16) |
175 ((
x & 0xFFFF0000FFFF0000LL) >> 16);
177 x = ((
x & 0x00000000FFFFFFFFLL) << 32) |
178 ((
x & 0xFFFFFFFF00000000LL) >> 32);
189 uint32_t maskL, uint32_t maskR,
int N)
191 uint32_t
x = src & ~(maskL | maskR);
192 x |= ((src << N) & maskL) | ((src >> N) & maskR);
199 int shamt =
rs2 & 15;
212 int shamt =
rs2 & 15;
232 for (
int i = 0;
i < 32;
i++) {
242 for (
int i = 1;
i < 32;
i++) {
253 for (
int i = 0;
i < 64;
i++) {
264 for (
int i = 1;
i < 64;
i++) {
275 uint32_t sz = 1LL << sz_log2;
276 uint32_t
mask = (1LL << sz) - 1;
277 for (
int i = 0;
i < 32;
i += sz) {
278 uint32_t pos = ((
rs2 >>
i) &
mask) << sz_log2;
294 uint64_t sz = 1LL << sz_log2;
295 uint64_t
mask = (1LL << sz) - 1;
296 for (
int i = 0;
i < 64;
i += sz) {
297 uint64_t pos = ((
rs2 >>
i) &
mask) << sz_log2;
313 return (
x << 1) ^ ((
x & 0x80) ? 0x11B : 0x00);
321 x = ((
x ^ x2) << 24) | (
x << 16) |(
x << 8) | x2;
343 x = ((
x ^ x2 ^ x8) << 24) |
344 ((
x ^ x4 ^ x8) << 16) |
413 const uint8_t aes_rcon[] = {
414 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1B, 0x36
434 return ((int64_t)
t) | (((int64_t)
t) << 32);
441 t = (
rs1 >> 32) ^ (
rs2 & 0xFFFFFFFF);
443 return ((int64_t)
t) ^
444 (((int64_t)
t) << 32) ^ (
rs2 & 0xFFFFFFFF00000000ULL);
603 x =
x ^ (
x << 8) ^ (
x << 2) ^ (
x << 18) ^
604 ((
x & 0x3F) << 26) ^ ((
x & 0xC0) << 10);
617 x =
x ^ ((
x & 0x07) << 29) ^ ((
x & 0xFE) << 7) ^
618 ((
x & 1) << 23) ^ ((
x & 0xF8) << 13);
int32_t _rvk_emu_sll_32(int32_t rs1, int32_t rs2)
const uint8_t _rvk_emu_aes_fwd_sbox[256]
Ref: https://github.com/rvkrypto/rvkrypto-fips.
uint64_t _rvk_emu_xperm64(uint64_t rs1, uint64_t rs2, int sz_log2)
int64_t _rvk_emu_xperm8_64(int64_t rs1, int64_t rs2)
int32_t _rvk_emu_sm4ed(int32_t rs1, int32_t rs2, uint8_t bs)
int32_t _rvk_emu_sha256sum1(int32_t rs1)
int64_t _rvk_emu_aes64es(int64_t rs1, int64_t rs2)
int64_t _rvk_emu_aes64im(int64_t rs1)
int32_t _rvk_emu_unshfl_32(int32_t rs1, int32_t rs2)
int32_t _rvk_emu_sha256sig0(int32_t rs1)
int64_t _rvk_emu_aes64ks2(int64_t rs1, int64_t rs2)
int32_t _rvk_emu_clmul_32(int32_t rs1, int32_t rs2)
int64_t _rvk_emu_sha512sum0(int64_t rs1)
int64_t _rvk_emu_srl_64(int64_t rs1, int64_t rs2)
static int32_t _rvk_emu_sha512sum0r(int32_t rs1, int32_t rs2)
int32_t _rvk_emu_sm3p0(int32_t rs1)
int64_t _rvk_emu_aes64dsm(int64_t rs1, int64_t rs2)
int64_t _rvk_emu_xperm4_64(int64_t rs1, int64_t rs2)
int64_t _rvk_emu_sha512sum1(int64_t rs1)
int32_t _rvk_emu_xperm8_32(int32_t rs1, int32_t rs2)
int32_t _rvk_emu_sha256sig1(int32_t rs1)
uint8_t _rvk_emu_aes_xtime(uint8_t x)
int32_t _rvk_emu_aes32esi(int32_t rs1, int32_t rs2, uint8_t bs)
int32_t _rvk_emu_sha256sum0(int32_t rs1)
int32_t _rvk_emu_sm3p1(int32_t rs1)
const uint8_t _rvk_emu_sm4_sbox[256]
int64_t _rvk_emu_brev8_64(int64_t rs1)
int64_t _rvk_emu_sha512sig0(int64_t rs1)
int64_t _rvk_emu_sha512sig1(int64_t rs1)
int32_t _rvk_emu_sm4ks(int32_t rs1, int32_t rs2, uint8_t bs)
const uint8_t _rvk_emu_aes_inv_sbox[256]
int32_t _rvk_emu_shfl_32(int32_t rs1, int32_t rs2)
uint32_t _rvk_emu_xperm32(uint32_t rs1, uint32_t rs2, int sz_log2)
int64_t _rvk_emu_clmulh_64(int64_t rs1, int64_t rs2)
uint32_t _rvk_emu_shuffle32_stage(uint32_t src, uint32_t maskL, uint32_t maskR, int N)
int32_t _rvk_emu_aes32dsmi(int32_t rs1, int32_t rs2, uint8_t bs)
int32_t _rvk_emu_xperm4_32(int32_t rs1, int32_t rs2)
static int32_t _rvk_emu_sha512sig0l(int32_t rs1, int32_t rs2)
int32_t _rvk_emu_srl_32(int32_t rs1, int32_t rs2)
int32_t _rvk_emu_brev8_32(int32_t rs1)
static int32_t _rvk_emu_sha512sig1h(int32_t rs1, int32_t rs2)
int64_t _rvk_emu_aes64ks1i(int64_t rs1, int rnum)
int32_t _rvk_emu_clmulh_32(int32_t rs1, int32_t rs2)
static int32_t _rvk_emu_sha512sig1l(int32_t rs1, int32_t rs2)
static int32_t _rvk_emu_sha512sig0h(int32_t rs1, int32_t rs2)
int64_t _rvk_emu_ror_64(int64_t rs1, int64_t rs2)
uint32_t _rvk_emu_aes_inv_mc_8(uint32_t x)
int32_t _rvk_emu_rol_32(int32_t rs1, int32_t rs2)
int32_t _rvk_emu_zip_32(int32_t rs1)
uint32_t _rvk_emu_aes_fwd_mc_32(uint32_t x)
int64_t _rvk_emu_aes64ds(int64_t rs1, int64_t rs2)
static int32_t _rvk_emu_sha512sum1r(int32_t rs1, int32_t rs2)
int64_t _rvk_emu_sll_64(int64_t rs1, int64_t rs2)
uint32_t _rvk_emu_aes_fwd_mc_8(uint32_t x)
int64_t _rvk_emu_grev_64(int64_t rs1, int64_t rs2)
int32_t _rvk_emu_aes32esmi(int32_t rs1, int32_t rs2, uint8_t bs)
int32_t _rvk_emu_ror_32(int32_t rs1, int32_t rs2)
uint32_t _rvk_emu_aes_inv_mc_32(uint32_t x)
int64_t _rvk_emu_clmul_64(int64_t rs1, int64_t rs2)
int32_t _rvk_emu_unzip_32(int32_t rs1)
int32_t _rvk_emu_grev_32(int32_t rs1, int32_t rs2)
int32_t _rvk_emu_aes32dsi(int32_t rs1, int32_t rs2, uint8_t bs)
int64_t _rvk_emu_aes64esm(int64_t rs1, int64_t rs2)
int64_t _rvk_emu_rol_64(int64_t rs1, int64_t rs2)
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....