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 0x00, 0x00, 0x19, 0x01, 0x32, 0x02, 0x1a, 0xc6, 0x4b, 0xc7, 0x1b, 0x68,
101 0x33, 0xee, 0xdf, 0x03, 0x64, 0x04, 0xe0, 0x0e, 0x34, 0x8d, 0x81, 0xef,
102 0x4c, 0x71, 0x08, 0xc8, 0xf8, 0x69, 0x1c, 0xc1, 0x7d, 0xc2, 0x1d, 0xb5,
103 0xf9, 0xb9, 0x27, 0x6a, 0x4d, 0xe4, 0xa6, 0x72, 0x9a, 0xc9, 0x09, 0x78,
104 0x65, 0x2f, 0x8a, 0x05, 0x21, 0x0f, 0xe1, 0x24, 0x12, 0xf0, 0x82, 0x45,
105 0x35, 0x93, 0xda, 0x8e, 0x96, 0x8f, 0xdb, 0xbd, 0x36, 0xd0, 0xce, 0x94,
106 0x13, 0x5c, 0xd2, 0xf1, 0x40, 0x46, 0x83, 0x38, 0x66, 0xdd, 0xfd, 0x30,
107 0xbf, 0x06, 0x8b, 0x62, 0xb3, 0x25, 0xe2, 0x98, 0x22, 0x88, 0x91, 0x10,
108 0x7e, 0x6e, 0x48, 0xc3, 0xa3, 0xb6, 0x1e, 0x42, 0x3a, 0x6b, 0x28, 0x54,
109 0xfa, 0x85, 0x3d, 0xba, 0x2b, 0x79, 0x0a, 0x15, 0x9b, 0x9f, 0x5e, 0xca,
110 0x4e, 0xd4, 0xac, 0xe5, 0xf3, 0x73, 0xa7, 0x57, 0xaf, 0x58, 0xa8, 0x50,
111 0xf4, 0xea, 0xd6, 0x74, 0x4f, 0xae, 0xe9, 0xd5, 0xe7, 0xe6, 0xad, 0xe8,
112 0x2c, 0xd7, 0x75, 0x7a, 0xeb, 0x16, 0x0b, 0xf5, 0x59, 0xcb, 0x5f, 0xb0,
113 0x9c, 0xa9, 0x51, 0xa0, 0x7f, 0x0c, 0xf6, 0x6f, 0x17, 0xc4, 0x49, 0xec,
114 0xd8, 0x43, 0x1f, 0x2d, 0xa4, 0x76, 0x7b, 0xb7, 0xcc, 0xbb, 0x3e, 0x5a,
115 0xfb, 0x60, 0xb1, 0x86, 0x3b, 0x52, 0xa1, 0x6c, 0xaa, 0x55, 0x29, 0x9d,
116 0x97, 0xb2, 0x87, 0x90, 0x61, 0xbe, 0xdc, 0xfc, 0xbc, 0x95, 0xcf, 0xcd,
117 0x37, 0x3f, 0x5b, 0xd1, 0x53, 0x39, 0x84, 0x3c, 0x41, 0xa2, 0x6d, 0x47,
118 0x14, 0x2a, 0x9e, 0x5d, 0x56, 0xf2, 0xd3, 0xab, 0x44, 0x11, 0x92, 0xd9,
119 0x23, 0x20, 0x2e, 0x89, 0xb4, 0x7c, 0xb8, 0x26, 0x77, 0x99, 0xe3, 0xa5,
120 0x67, 0x4a, 0xed, 0xde, 0xc5, 0x31, 0xfe, 0x18, 0x0d, 0x63, 0x8c, 0x80,
121 0xc0, 0xf7, 0x70, 0x07
126 0x01, 0x03, 0x05, 0x0f, 0x11, 0x33, 0x55, 0xff, 0x1a, 0x2e, 0x72, 0x96,
127 0xa1, 0xf8, 0x13, 0x35, 0x5f, 0xe1, 0x38, 0x48, 0xd8, 0x73, 0x95, 0xa4,
128 0xf7, 0x02, 0x06, 0x0a, 0x1e, 0x22, 0x66, 0xaa, 0xe5, 0x34, 0x5c, 0xe4,
129 0x37, 0x59, 0xeb, 0x26, 0x6a, 0xbe, 0xd9, 0x70, 0x90, 0xab, 0xe6, 0x31,
130 0x53, 0xf5, 0x04, 0x0c, 0x14, 0x3c, 0x44, 0xcc, 0x4f, 0xd1, 0x68, 0xb8,
131 0xd3, 0x6e, 0xb2, 0xcd, 0x4c, 0xd4, 0x67, 0xa9, 0xe0, 0x3b, 0x4d, 0xd7,
132 0x62, 0xa6, 0xf1, 0x08, 0x18, 0x28, 0x78, 0x88, 0x83, 0x9e, 0xb9, 0xd0,
133 0x6b, 0xbd, 0xdc, 0x7f, 0x81, 0x98, 0xb3, 0xce, 0x49, 0xdb, 0x76, 0x9a,
134 0xb5, 0xc4, 0x57, 0xf9, 0x10, 0x30, 0x50, 0xf0, 0x0b, 0x1d, 0x27, 0x69,
135 0xbb, 0xd6, 0x61, 0xa3, 0xfe, 0x19, 0x2b, 0x7d, 0x87, 0x92, 0xad, 0xec,
136 0x2f, 0x71, 0x93, 0xae, 0xe9, 0x20, 0x60, 0xa0, 0xfb, 0x16, 0x3a, 0x4e,
137 0xd2, 0x6d, 0xb7, 0xc2, 0x5d, 0xe7, 0x32, 0x56, 0xfa, 0x15, 0x3f, 0x41,
138 0xc3, 0x5e, 0xe2, 0x3d, 0x47, 0xc9, 0x40, 0xc0, 0x5b, 0xed, 0x2c, 0x74,
139 0x9c, 0xbf, 0xda, 0x75, 0x9f, 0xba, 0xd5, 0x64, 0xac, 0xef, 0x2a, 0x7e,
140 0x82, 0x9d, 0xbc, 0xdf, 0x7a, 0x8e, 0x89, 0x80, 0x9b, 0xb6, 0xc1, 0x58,
141 0xe8, 0x23, 0x65, 0xaf, 0xea, 0x25, 0x6f, 0xb1, 0xc8, 0x43, 0xc5, 0x54,
142 0xfc, 0x1f, 0x21, 0x63, 0xa5, 0xf4, 0x07, 0x09, 0x1b, 0x2d, 0x77, 0x99,
143 0xb0, 0xcb, 0x46, 0xca, 0x45, 0xcf, 0x4a, 0xde, 0x79, 0x8b, 0x86, 0x91,
144 0xa8, 0xe3, 0x3e, 0x42, 0xc6, 0x51, 0xf3, 0x0e, 0x12, 0x36, 0x5a, 0xee,
145 0x29, 0x7b, 0x8d, 0x8c, 0x8f, 0x8a, 0x85, 0x94, 0xa7, 0xf2, 0x0d, 0x17,
146 0x39, 0x4b, 0xdd, 0x7c, 0x84, 0x97, 0xa2, 0xfd, 0x1c, 0x24, 0x6c, 0xb4,
147 0xc7, 0x52, 0xf6, 0x01
152 0, 5, 10, 15, 4, 9, 14, 3,
153 8, 13, 2, 7, 12, 1, 6, 11
158 0, 13, 10, 7, 4, 1, 14, 11,
159 8, 5, 2, 15, 12, 9, 6, 3
165 unsigned int log_prod;
167 if ((a ==0)|| (b == 0))
return 0;
172 log_prod = log_prod - 0xff;
180 for (
int i = 0;
i < 16; ++
i) {
188 for (
int i = 0;
i < 16; ++
i) {
196 for (
int i = 0;
i < 16; ++
i) {
204 for (
int i = 0;
i < 16; ++
i) {
213 for (
int i = 0;
i < 16; ++
i) {
214 output[
i] = input[
i] ^ key[
i];
221 for (
int j = 0;
j < 4; ++
j) {
226 uint8_t
t1 = input[row0] ^ input[row1] ^
227 input[row2] ^ input[row3];
229 output[row1] = input[row1] ^ t1 ^
aesFFMul2(input[row1] ^ input[row2]);
230 output[row2] = input[row2] ^ t1 ^
aesFFMul2(input[row2] ^ input[row3]);
231 output[row3] = input[row3] ^ t1 ^
aesFFMul2(input[row3] ^ input[row0]);
232 output[row0] = input[row0] ^ t1 ^
aesFFMul2(input[row0] ^ input[row1]);
239 for (
int j = 0;
j < 4; ++
j) {
240 for (
int i = 0;
i < 4; ++
i) {
241 int index0 = (
j * 4) +
i;
242 int index1 = (
j * 4) + ((
i + 1) % 4);
243 int index2 = (
j * 4) + ((
i + 2) % 4);
244 int index3 = (
j * 4) + ((
i + 3) % 4);
280 uint32_t T0, T1, T2, T3;
281 for (
int i = 0;
i < 4; ++
i) {
282 T0 =
choose(Y[0], Y[1], Y[2]);
284 T2 = Y[3] +
sigma1(Y[0]) + T0 + Z[
i];
286 Y[3] = T2 +
sigma0(X[0]) + T1;
289 Y[3] = Y[2]; Y[2] = Y[1]; Y[1] = Y[0]; Y[0] = X[3];
290 X[3] = X[2]; X[2] = X[1]; X[1] = X[0]; X[0] = T3;
303 for (
int i = 0;
i < 4; ++
i) {
310 Y[0] +=
ror(X[0], 27) + T1 + Z[
i];
314 X[3] = X[2]; X[2] = X[1]; X[1] = X[0]; X[0] = T2;
324 uint32_t
X[4], Y[4], Z[4];
325 load3Reg(&X[0], &Y[0], &Z[0], output, input, input2);
336 uint32_t
X[4], Y[4], Z[4];
337 load3Reg(&X[0], &Y[0], &Z[0], output, input, input2);
348 load2Reg(&X[0], &Y[0], output, input);
350 T[3] = Y[0]; T[2] = X[3]; T[1] = X[2]; T[0] = X[1];
352 T[3] =
ror(T[3], 7) ^
ror(T[3], 18) ^ (T[3] >> 3);
353 T[2] =
ror(T[2], 7) ^
ror(T[2], 18) ^ (T[2] >> 3);
354 T[1] =
ror(T[1], 7) ^
ror(T[1], 18) ^ (T[1] >> 3);
355 T[0] =
ror(T[0], 7) ^
ror(T[0], 18) ^ (T[0] >> 3);
371 uint32_t
X[4], Y[4], Z[4];
372 uint32_t T0[4], T1[4], T2[4], T3[4];
374 load3Reg(&X[0], &Y[0], &Z[0], output, input, input2);
376 T0[3] = Z[0]; T0[2] = Y[3]; T0[1] = Y[2]; T0[0] = Y[1];
377 T1[1] = Z[3]; T1[0] = Z[2];
378 T1[1] =
ror(T1[1], 17) ^
ror(T1[1], 19) ^ (T1[1] >> 10);
379 T1[0] =
ror(T1[0], 17) ^
ror(T1[0], 19) ^ (T1[0] >> 10);
380 T3[1] = X[1] + T0[1]; T3[0] = X[0] + T0[0];
381 T1[1] = T3[1] + T1[1]; T1[0] = T3[0] + T1[0];
382 T2[1] =
ror(T1[1], 17) ^
ror(T1[1], 19) ^ (T1[1] >> 10);
383 T2[0] =
ror(T1[0], 17) ^
ror(T1[0], 19) ^ (T1[0] >> 10);
384 T3[1] = X[3] + T0[3]; T3[0] = X[2] + T0[2];
385 X[3] = T3[1] + T2[1];
386 X[2] = T3[0] + T2[0];
387 X[1] = T1[1]; X[0] = T1[0];
399 uint32_t
X[4], Y[4], Z[4];
400 load3Reg(&X[0], &Y[0], &Z[0], output, input, input2);
401 _sha1Op(&X[0], &Y[0], &Z[0], op);
436 load2Reg(&X[0], &Y[0], output, input);
447 uint32_t
X[4], Y[4], Z[4], T[4];
448 load3Reg(&X[0], &Y[0], &Z[0], output, input, input2);
450 T[3] = Y[1]; T[2] = Y[0]; T[1] = X[3]; T[0] = X[2];
451 X[3] = T[3] ^ X[3] ^ Z[3];
452 X[2] = T[2] ^ X[2] ^ Z[2];
453 X[1] = T[1] ^ X[1] ^ Z[1];
454 X[0] = T[0] ^ X[0] ^ Z[0];
462 uint32_t
X[4], Y[4], T[4];
463 load2Reg(&X[0], &Y[0], output, input);
469 X[2] =
ror(T[2], 31); X[1] =
ror(T[1], 31); X[0] =
ror(T[0], 31);
470 X[3] =
ror(T[3], 31) ^
ror(T[0], 30);
482 for (
int i = 0;
i < 4; ++
i) {
483 X[
i] = *((uint32_t *)&output[
i*4]);
484 Y[
i] = *((uint32_t *)&input[i*4]);
497 for (
int i = 0;
i < 4; ++
i) {
498 X[
i] = *((uint32_t *)&output[
i*4]);
499 Y[
i] = *((uint32_t *)&input[i*4]);
500 Z[
i] = *((uint32_t *)&input2[i*4]);
507 for (
int i = 0;
i < 4; ++
i) {
508 output[
i*4] = (uint8_t)(X[
i]);
509 output[i*4+1] = (uint8_t)(X[i] >> 8);
510 output[i*4+2] = (uint8_t)(X[i] >> 16);
511 output[i*4+3] = (uint8_t)(X[i] >> 24);
void sha1C(uint8_t *output, uint8_t *input, uint8_t *input2)
void aesInvMixColumns(uint8_t *output, uint8_t *input)
static void output(const char *filename)
void aesShiftRows(uint8_t *output, uint8_t *input)
static const uint8_t aesINVSHIFT[16]
void sha1Op(uint8_t *output, uint8_t *input, uint8_t *input2, SHAOp op)
void sha1P(uint8_t *output, uint8_t *input, uint8_t *input2)
void sha256Su1(uint8_t *output, uint8_t *input, uint8_t *input2)
void sha256Op(uint32_t *X, uint32_t *Y, uint32_t *Z)
uint8_t aesFFMul(uint8_t a, uint8_t b)
Finite field multiplication of two elements in the field G(256)
uint32_t sigma0(uint32_t X)
void sha1H(uint8_t *output, uint8_t *input)
uint32_t parity(uint32_t X, uint32_t Y, uint32_t Z)
static const uint8_t aesSBOX[256]
Look up table for subByttes transformation.
void sha1Su0(uint8_t *output, uint8_t *input, uint8_t *input2)
uint32_t ror(uint32_t x, uint8_t shift)
void load3Reg(uint32_t *X, uint32_t *Y, uint32_t *Z, uint8_t *output, uint8_t *input, uint8_t *input2)
uint8_t aesFFMul2(uint8_t a)
void aesDecrypt(uint8_t *output, uint8_t *input, uint8_t *key)
void aesInvSubBytes(uint8_t *output, uint8_t *input)
void sha256Su0(uint8_t *output, uint8_t *input)
static const uint8_t aesFFLOG[256]
Look up table for Finite Field logarithm where the base is the element {03} in the field G(256) ...
uint32_t sigma1(uint32_t X)
void sha1M(uint8_t *output, uint8_t *input, uint8_t *input2)
uint32_t majority(uint32_t X, uint32_t Y, uint32_t Z)
static const uint8_t aesSHIFT[16]
void sha256H(uint8_t *output, uint8_t *input, uint8_t *input2)
static const uint8_t aesFFEXP[256]
Look up table for {03}^X where {03} and X are elements in the filed G(256)
void aesMixColumns(uint8_t *output, uint8_t *input)
void sha256H2(uint8_t *output, uint8_t *input, uint8_t *input2)
static const uint8_t aesInvSBOX[256]
Look up table for inverse subBytes transformation.
uint32_t choose(uint32_t X, uint32_t Y, uint32_t Z)
void aesEncrypt(uint8_t *output, uint8_t *input, uint8_t *key)
void aesInvShiftRows(uint8_t *output, uint8_t *input)
void _sha1Op(uint32_t *X, uint32_t *Y, uint32_t *Z, SHAOp op)
void sha1Su1(uint8_t *output, uint8_t *input)
void load2Reg(uint32_t *X, uint32_t *Y, uint8_t *output, uint8_t *input)
void aesSubBytes(uint8_t *output, uint8_t *input)
void store1Reg(uint8_t *output, uint32_t *X)
void aesAddRoundKey(uint8_t *output, uint8_t *input, uint8_t *key)