-
-
Save ykm11/3369f8363c089017c5e6671607528411 to your computer and use it in GitHub Desktop.
test for differential power analysis
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "sbox.hpp" | |
#include <iostream> | |
#include <random> | |
#include <stdlib.h> | |
const size_t N = 200000; | |
uint8_t hamming_weight(uint8_t x) { | |
uint8_t t = 0; | |
while (x > 0) { | |
t += (x & 1); | |
x >>= 1; | |
} | |
return t; | |
} | |
uint8_t hamming_distance(uint8_t x, uint8_t y) { | |
return hamming_weight(x ^ y); | |
} | |
double mean_array(const double* array, size_t n) { | |
double sum = 0; | |
for (size_t i = 0; i < n; i++) { | |
sum += array[i]; | |
} | |
return sum / n; | |
} | |
int main() { | |
std::mt19937 rand_src(11); | |
std::normal_distribution<> gauss_dist(0.0, 0.8); | |
std::uniform_int_distribution<uint8_t> pt_dist(0, 255); | |
uint8_t true_key = 0x11; | |
uint8_t ciphterext[N]; | |
double leakage[N], group_1[N], group_2[N]; | |
size_t index_g1, index_g2; | |
uint8_t x, sx; | |
for (size_t i = 0; i < N; i++) { // make leakage data | |
x = pt_dist(rand_src); | |
sx = s[x]; | |
leakage[i] = hamming_distance(x, sx) + gauss_dist(rand_src); | |
ciphterext[i] = sx ^ true_key; | |
} | |
uint8_t hd_pt; | |
uint8_t ct; | |
double mean_1, mean_2, mean_diff; | |
for (size_t k = 0; k < 256; k++) { | |
index_g1 = 0; | |
index_g2 = 0; | |
//memset(group_1, 0, sizeof(double)*N); | |
//memset(group_2, 0, sizeof(double)*N); | |
for (size_t i = 0; i < N; i++) { | |
ct = ciphterext[i] ^ k; | |
hd_pt = hamming_distance(ct, inv_s[ct]); | |
if (hd_pt < 4) { // selection function | |
group_1[index_g1] = leakage[i]; | |
index_g1++; | |
} else { | |
group_2[index_g2] = leakage[i]; | |
index_g2++; | |
} | |
} | |
mean_1 = mean_array(group_1, index_g1); | |
mean_2 = mean_array(group_2, index_g2); | |
mean_diff = abs(mean_2 - mean_1); | |
printf("key = 0x%02x, mean_diff = %f\n", (uint8_t)k, mean_diff); | |
// the key where mean diff is the maximum is true one | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "sbox.hpp" | |
#include <iostream> | |
#include <algorithm> | |
#include <random> | |
#include <memory> | |
#include <stdlib.h> | |
const size_t N = 10000; | |
uint8_t hamming_weight(uint8_t x) { | |
uint8_t t = 0; | |
while (x > 0) { | |
t += (x & 1); | |
x >>= 1; | |
} | |
return t; | |
} | |
uint8_t hamming_distance(uint8_t x, uint8_t y) { | |
return hamming_weight(x ^ y); | |
} | |
double get_mean_array(const double* array, size_t n) { | |
#if 0 | |
double sum = 0; | |
for (size_t i = 0; i < n; i++) { | |
sum += array[i]; | |
} | |
#else | |
double sum = std::accumulate(array, array + n, 0); // sum | |
#endif | |
return sum / n; | |
} | |
int main() { | |
std::mt19937 rand_src(14); | |
std::normal_distribution<> gauss_dist(0.0, 1.0); | |
std::uniform_int_distribution<uint8_t> pt_dist(0, 255); | |
uint8_t true_key1 = 0x11; // known | |
uint8_t true_key2 = 0x45; | |
size_t index_g1, index_g2; | |
//uint8_t ciphterext[N]; | |
//double leakage[N], group_1[N], group_2[N]; | |
std::unique_ptr<uint8_t[]> plaintext1(new uint8_t[N]); | |
std::unique_ptr<uint8_t[]> plaintext2(new uint8_t[N]); | |
std::unique_ptr<double[]> leakage(new double[N]); | |
std::unique_ptr<double[]> group_1(new double[N]); | |
std::unique_ptr<double[]> group_2(new double[N]); | |
uint8_t pt1, s_ptk1; | |
uint8_t pt2, s_ptk2; | |
for (size_t i = 0; i < N; i++) { // make leakage data | |
pt1 = pt_dist(rand_src); | |
s_ptk1 = s[pt1 ^ true_key1]; | |
pt2 = pt_dist(rand_src); | |
s_ptk2 = s[pt2 ^ true_key2]; | |
leakage[i] = hamming_distance(s_ptk1, s_ptk2) + gauss_dist(rand_src); | |
plaintext1[i] = pt1; | |
plaintext2[i] = pt2; | |
} | |
uint8_t hd_pt; | |
double mean_1, mean_2, mean_diff; | |
double mean_diffs[256]; | |
for (size_t k = 0; k < 256; k++) { | |
index_g1 = 0; | |
index_g2 = 0; | |
//memset(group_1, 0, sizeof(double)*N); | |
//memset(group_2, 0, sizeof(double)*N); | |
for (size_t i = 0; i < N; i++) { | |
pt1 = plaintext1[i] ^ true_key1; | |
pt2 = plaintext2[i] ^ k; | |
hd_pt = hamming_distance(s[pt1], s[pt2]); | |
if (hd_pt < 4) { // selection function | |
group_1[index_g1] = leakage[i]; | |
index_g1++; | |
} else { | |
group_2[index_g2] = leakage[i]; | |
index_g2++; | |
} | |
} | |
mean_1 = get_mean_array(group_1.get(), index_g1); | |
mean_2 = get_mean_array(group_2.get(), index_g2); | |
mean_diff = abs(mean_2 - mean_1); | |
mean_diffs[k] = mean_diff; | |
printf("key = 0x%02x, mean_diff = %f\n", (uint8_t)k, mean_diff); | |
// the key where mean diff is the maximum is true one | |
} | |
auto max_iter = std::max_element(mean_diffs, mean_diffs + 256); | |
double max_diff = *max_iter; | |
size_t most_prob_key = std::distance(mean_diffs, max_iter); | |
printf("\nmost probability key = 0x%02x, diff = %f\n", (uint8_t)most_prob_key, max_diff); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$ /usr/local/Cellar/gcc/11.3.0_2/bin/g++-11 dpa_pipeline.cpp -O3; ./a.out | |
key = 0x00, mean_diff = 0.038762 | |
key = 0x01, mean_diff = 0.004875 | |
key = 0x02, mean_diff = 0.069806 | |
key = 0x03, mean_diff = 0.035643 | |
key = 0x04, mean_diff = 0.020173 | |
key = 0x05, mean_diff = 0.029549 | |
key = 0x06, mean_diff = 0.069915 | |
key = 0x07, mean_diff = 0.090594 | |
key = 0x08, mean_diff = 0.061171 | |
key = 0x09, mean_diff = 0.022482 | |
key = 0x0a, mean_diff = 0.029192 | |
key = 0x0b, mean_diff = 0.025911 | |
key = 0x0c, mean_diff = 0.012673 | |
key = 0x0d, mean_diff = 0.048633 | |
key = 0x0e, mean_diff = 0.062816 | |
key = 0x0f, mean_diff = 0.052923 | |
key = 0x10, mean_diff = 0.089053 | |
key = 0x11, mean_diff = 0.001635 | |
key = 0x12, mean_diff = 0.025680 | |
key = 0x13, mean_diff = 0.017913 | |
key = 0x14, mean_diff = 0.072716 | |
key = 0x15, mean_diff = 0.012029 | |
key = 0x16, mean_diff = 0.048989 | |
key = 0x17, mean_diff = 0.000780 | |
key = 0x18, mean_diff = 0.015915 | |
key = 0x19, mean_diff = 0.063470 | |
key = 0x1a, mean_diff = 0.094869 | |
key = 0x1b, mean_diff = 0.015569 | |
key = 0x1c, mean_diff = 0.024900 | |
key = 0x1d, mean_diff = 0.086094 | |
key = 0x1e, mean_diff = 0.083367 | |
key = 0x1f, mean_diff = 0.110632 | |
key = 0x20, mean_diff = 0.003671 | |
key = 0x21, mean_diff = 0.066178 | |
key = 0x22, mean_diff = 0.019526 | |
key = 0x23, mean_diff = 0.041868 | |
key = 0x24, mean_diff = 0.040814 | |
key = 0x25, mean_diff = 0.015792 | |
key = 0x26, mean_diff = 0.010009 | |
key = 0x27, mean_diff = 0.089543 | |
key = 0x28, mean_diff = 0.026154 | |
key = 0x29, mean_diff = 0.035239 | |
key = 0x2a, mean_diff = 0.044160 | |
key = 0x2b, mean_diff = 0.004347 | |
key = 0x2c, mean_diff = 0.109842 | |
key = 0x2d, mean_diff = 0.088582 | |
key = 0x2e, mean_diff = 0.014161 | |
key = 0x2f, mean_diff = 0.013561 | |
key = 0x30, mean_diff = 0.017213 | |
key = 0x31, mean_diff = 0.010285 | |
key = 0x32, mean_diff = 0.037625 | |
key = 0x33, mean_diff = 0.022524 | |
key = 0x34, mean_diff = 0.006064 | |
key = 0x35, mean_diff = 0.031288 | |
key = 0x36, mean_diff = 0.007030 | |
key = 0x37, mean_diff = 0.011846 | |
key = 0x38, mean_diff = 0.058562 | |
key = 0x39, mean_diff = 0.030102 | |
key = 0x3a, mean_diff = 0.067327 | |
key = 0x3b, mean_diff = 0.061865 | |
key = 0x3c, mean_diff = 0.007736 | |
key = 0x3d, mean_diff = 0.044438 | |
key = 0x3e, mean_diff = 0.016271 | |
key = 0x3f, mean_diff = 0.031132 | |
key = 0x40, mean_diff = 0.138108 | |
key = 0x41, mean_diff = 0.048248 | |
key = 0x42, mean_diff = 0.012080 | |
key = 0x43, mean_diff = 0.014984 | |
key = 0x44, mean_diff = 0.030780 | |
key = 0x45, mean_diff = 2.366195 | |
key = 0x46, mean_diff = 0.015070 | |
key = 0x47, mean_diff = 0.004395 | |
key = 0x48, mean_diff = 0.018772 | |
key = 0x49, mean_diff = 0.038808 | |
key = 0x4a, mean_diff = 0.047784 | |
key = 0x4b, mean_diff = 0.051241 | |
key = 0x4c, mean_diff = 0.024665 | |
key = 0x4d, mean_diff = 0.041586 | |
key = 0x4e, mean_diff = 0.094940 | |
key = 0x4f, mean_diff = 0.081423 | |
key = 0x50, mean_diff = 0.014926 | |
key = 0x51, mean_diff = 0.016832 | |
key = 0x52, mean_diff = 0.087213 | |
key = 0x53, mean_diff = 0.067548 | |
key = 0x54, mean_diff = 0.027653 | |
key = 0x55, mean_diff = 0.001870 | |
key = 0x56, mean_diff = 0.037118 | |
key = 0x57, mean_diff = 0.080626 | |
key = 0x58, mean_diff = 0.132666 | |
key = 0x59, mean_diff = 0.030668 | |
key = 0x5a, mean_diff = 0.057408 | |
key = 0x5b, mean_diff = 0.086251 | |
key = 0x5c, mean_diff = 0.004679 | |
key = 0x5d, mean_diff = 0.081430 | |
key = 0x5e, mean_diff = 0.069830 | |
key = 0x5f, mean_diff = 0.055856 | |
key = 0x60, mean_diff = 0.046999 | |
key = 0x61, mean_diff = 0.005130 | |
key = 0x62, mean_diff = 0.026157 | |
key = 0x63, mean_diff = 0.088470 | |
key = 0x64, mean_diff = 0.080588 | |
key = 0x65, mean_diff = 0.007043 | |
key = 0x66, mean_diff = 0.036824 | |
key = 0x67, mean_diff = 0.025116 | |
key = 0x68, mean_diff = 0.051518 | |
key = 0x69, mean_diff = 0.032653 | |
key = 0x6a, mean_diff = 0.054255 | |
key = 0x6b, mean_diff = 0.052349 | |
key = 0x6c, mean_diff = 0.003732 | |
key = 0x6d, mean_diff = 0.059132 | |
key = 0x6e, mean_diff = 0.094546 | |
key = 0x6f, mean_diff = 0.006561 | |
key = 0x70, mean_diff = 0.006640 | |
key = 0x71, mean_diff = 0.027029 | |
key = 0x72, mean_diff = 0.139783 | |
key = 0x73, mean_diff = 0.072870 | |
key = 0x74, mean_diff = 0.103964 | |
key = 0x75, mean_diff = 0.013691 | |
key = 0x76, mean_diff = 0.065235 | |
key = 0x77, mean_diff = 0.007920 | |
key = 0x78, mean_diff = 0.030183 | |
key = 0x79, mean_diff = 0.001627 | |
key = 0x7a, mean_diff = 0.000191 | |
key = 0x7b, mean_diff = 0.043634 | |
key = 0x7c, mean_diff = 0.055950 | |
key = 0x7d, mean_diff = 0.038624 | |
key = 0x7e, mean_diff = 0.065217 | |
key = 0x7f, mean_diff = 0.014238 | |
key = 0x80, mean_diff = 0.000220 | |
key = 0x81, mean_diff = 0.142146 | |
key = 0x82, mean_diff = 0.009602 | |
key = 0x83, mean_diff = 0.123834 | |
key = 0x84, mean_diff = 0.047325 | |
key = 0x85, mean_diff = 0.085206 | |
key = 0x86, mean_diff = 0.042363 | |
key = 0x87, mean_diff = 0.029316 | |
key = 0x88, mean_diff = 0.006017 | |
key = 0x89, mean_diff = 0.007841 | |
key = 0x8a, mean_diff = 0.032183 | |
key = 0x8b, mean_diff = 0.016422 | |
key = 0x8c, mean_diff = 0.008001 | |
key = 0x8d, mean_diff = 0.144512 | |
key = 0x8e, mean_diff = 0.000174 | |
key = 0x8f, mean_diff = 0.009052 | |
key = 0x90, mean_diff = 0.047007 | |
key = 0x91, mean_diff = 0.041160 | |
key = 0x92, mean_diff = 0.013164 | |
key = 0x93, mean_diff = 0.095894 | |
key = 0x94, mean_diff = 0.004664 | |
key = 0x95, mean_diff = 0.011233 | |
key = 0x96, mean_diff = 0.058110 | |
key = 0x97, mean_diff = 0.014920 | |
key = 0x98, mean_diff = 0.043378 | |
key = 0x99, mean_diff = 0.014960 | |
key = 0x9a, mean_diff = 0.008015 | |
key = 0x9b, mean_diff = 0.026614 | |
key = 0x9c, mean_diff = 0.069812 | |
key = 0x9d, mean_diff = 0.030826 | |
key = 0x9e, mean_diff = 0.011557 | |
key = 0x9f, mean_diff = 0.028376 | |
key = 0xa0, mean_diff = 0.063210 | |
key = 0xa1, mean_diff = 0.042789 | |
key = 0xa2, mean_diff = 0.065638 | |
key = 0xa3, mean_diff = 0.034664 | |
key = 0xa4, mean_diff = 0.090230 | |
key = 0xa5, mean_diff = 0.008361 | |
key = 0xa6, mean_diff = 0.019920 | |
key = 0xa7, mean_diff = 0.015178 | |
key = 0xa8, mean_diff = 0.065124 | |
key = 0xa9, mean_diff = 0.000699 | |
key = 0xaa, mean_diff = 0.010530 | |
key = 0xab, mean_diff = 0.090584 | |
key = 0xac, mean_diff = 0.116734 | |
key = 0xad, mean_diff = 0.015044 | |
key = 0xae, mean_diff = 0.023764 | |
key = 0xaf, mean_diff = 0.077369 | |
key = 0xb0, mean_diff = 0.085728 | |
key = 0xb1, mean_diff = 0.009979 | |
key = 0xb2, mean_diff = 0.026095 | |
key = 0xb3, mean_diff = 0.042659 | |
key = 0xb4, mean_diff = 0.094658 | |
key = 0xb5, mean_diff = 0.002894 | |
key = 0xb6, mean_diff = 0.083833 | |
key = 0xb7, mean_diff = 0.053084 | |
key = 0xb8, mean_diff = 0.068307 | |
key = 0xb9, mean_diff = 0.009627 | |
key = 0xba, mean_diff = 0.082662 | |
key = 0xbb, mean_diff = 0.059112 | |
key = 0xbc, mean_diff = 0.062435 | |
key = 0xbd, mean_diff = 0.033538 | |
key = 0xbe, mean_diff = 0.061914 | |
key = 0xbf, mean_diff = 0.056181 | |
key = 0xc0, mean_diff = 0.033163 | |
key = 0xc1, mean_diff = 0.049509 | |
key = 0xc2, mean_diff = 0.014996 | |
key = 0xc3, mean_diff = 0.078799 | |
key = 0xc4, mean_diff = 0.024262 | |
key = 0xc5, mean_diff = 0.078901 | |
key = 0xc6, mean_diff = 0.045347 | |
key = 0xc7, mean_diff = 0.049065 | |
key = 0xc8, mean_diff = 0.018941 | |
key = 0xc9, mean_diff = 0.043260 | |
key = 0xca, mean_diff = 0.065870 | |
key = 0xcb, mean_diff = 0.087866 | |
key = 0xcc, mean_diff = 0.009511 | |
key = 0xcd, mean_diff = 0.005962 | |
key = 0xce, mean_diff = 0.037860 | |
key = 0xcf, mean_diff = 0.078558 | |
key = 0xd0, mean_diff = 0.009654 | |
key = 0xd1, mean_diff = 0.062390 | |
key = 0xd2, mean_diff = 0.016656 | |
key = 0xd3, mean_diff = 0.019613 | |
key = 0xd4, mean_diff = 0.009813 | |
key = 0xd5, mean_diff = 0.016434 | |
key = 0xd6, mean_diff = 0.093134 | |
key = 0xd7, mean_diff = 0.037664 | |
key = 0xd8, mean_diff = 0.109272 | |
key = 0xd9, mean_diff = 0.022332 | |
key = 0xda, mean_diff = 0.010958 | |
key = 0xdb, mean_diff = 0.049412 | |
key = 0xdc, mean_diff = 0.114044 | |
key = 0xdd, mean_diff = 0.005291 | |
key = 0xde, mean_diff = 0.073400 | |
key = 0xdf, mean_diff = 0.142897 | |
key = 0xe0, mean_diff = 0.031239 | |
key = 0xe1, mean_diff = 0.004305 | |
key = 0xe2, mean_diff = 0.007962 | |
key = 0xe3, mean_diff = 0.027420 | |
key = 0xe4, mean_diff = 0.019634 | |
key = 0xe5, mean_diff = 0.064377 | |
key = 0xe6, mean_diff = 0.019589 | |
key = 0xe7, mean_diff = 0.011202 | |
key = 0xe8, mean_diff = 0.038395 | |
key = 0xe9, mean_diff = 0.002422 | |
key = 0xea, mean_diff = 0.095921 | |
key = 0xeb, mean_diff = 0.001034 | |
key = 0xec, mean_diff = 0.075135 | |
key = 0xed, mean_diff = 0.012971 | |
key = 0xee, mean_diff = 0.034675 | |
key = 0xef, mean_diff = 0.073860 | |
key = 0xf0, mean_diff = 0.036096 | |
key = 0xf1, mean_diff = 0.018050 | |
key = 0xf2, mean_diff = 0.075247 | |
key = 0xf3, mean_diff = 0.002534 | |
key = 0xf4, mean_diff = 0.008657 | |
key = 0xf5, mean_diff = 0.003502 | |
key = 0xf6, mean_diff = 0.016008 | |
key = 0xf7, mean_diff = 0.043900 | |
key = 0xf8, mean_diff = 0.015547 | |
key = 0xf9, mean_diff = 0.028172 | |
key = 0xfa, mean_diff = 0.008001 | |
key = 0xfb, mean_diff = 0.018959 | |
key = 0xfc, mean_diff = 0.064219 | |
key = 0xfd, mean_diff = 0.023536 | |
key = 0xfe, mean_diff = 0.035385 | |
key = 0xff, mean_diff = 0.023917 | |
most probability key = 0x45, diff = 2.366195 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#pragma once | |
#include <iostream> | |
const uint8_t s[256] = | |
{0x63 ,0x7c ,0x77 ,0x7b ,0xf2 ,0x6b ,0x6f ,0xc5 ,0x30 ,0x01 ,0x67 ,0x2b ,0xfe ,0xd7 ,0xab ,0x76 | |
,0xca ,0x82 ,0xc9 ,0x7d ,0xfa ,0x59 ,0x47 ,0xf0 ,0xad ,0xd4 ,0xa2 ,0xaf ,0x9c ,0xa4 ,0x72 ,0xc0 | |
,0xb7 ,0xfd ,0x93 ,0x26 ,0x36 ,0x3f ,0xf7 ,0xcc ,0x34 ,0xa5 ,0xe5 ,0xf1 ,0x71 ,0xd8 ,0x31 ,0x15 | |
,0x04 ,0xc7 ,0x23 ,0xc3 ,0x18 ,0x96 ,0x05 ,0x9a ,0x07 ,0x12 ,0x80 ,0xe2 ,0xeb ,0x27 ,0xb2 ,0x75 | |
,0x09 ,0x83 ,0x2c ,0x1a ,0x1b ,0x6e ,0x5a ,0xa0 ,0x52 ,0x3b ,0xd6 ,0xb3 ,0x29 ,0xe3 ,0x2f ,0x84 | |
,0x53 ,0xd1 ,0x00 ,0xed ,0x20 ,0xfc ,0xb1 ,0x5b ,0x6a ,0xcb ,0xbe ,0x39 ,0x4a ,0x4c ,0x58 ,0xcf | |
,0xd0 ,0xef ,0xaa ,0xfb ,0x43 ,0x4d ,0x33 ,0x85 ,0x45 ,0xf9 ,0x02 ,0x7f ,0x50 ,0x3c ,0x9f ,0xa8 | |
,0x51 ,0xa3 ,0x40 ,0x8f ,0x92 ,0x9d ,0x38 ,0xf5 ,0xbc ,0xb6 ,0xda ,0x21 ,0x10 ,0xff ,0xf3 ,0xd2 | |
,0xcd ,0x0c ,0x13 ,0xec ,0x5f ,0x97 ,0x44 ,0x17 ,0xc4 ,0xa7 ,0x7e ,0x3d ,0x64 ,0x5d ,0x19 ,0x73 | |
,0x60 ,0x81 ,0x4f ,0xdc ,0x22 ,0x2a ,0x90 ,0x88 ,0x46 ,0xee ,0xb8 ,0x14 ,0xde ,0x5e ,0x0b ,0xdb | |
,0xe0 ,0x32 ,0x3a ,0x0a ,0x49 ,0x06 ,0x24 ,0x5c ,0xc2 ,0xd3 ,0xac ,0x62 ,0x91 ,0x95 ,0xe4 ,0x79 | |
,0xe7 ,0xc8 ,0x37 ,0x6d ,0x8d ,0xd5 ,0x4e ,0xa9 ,0x6c ,0x56 ,0xf4 ,0xea ,0x65 ,0x7a ,0xae ,0x08 | |
,0xba ,0x78 ,0x25 ,0x2e ,0x1c ,0xa6 ,0xb4 ,0xc6 ,0xe8 ,0xdd ,0x74 ,0x1f ,0x4b ,0xbd ,0x8b ,0x8a | |
,0x70 ,0x3e ,0xb5 ,0x66 ,0x48 ,0x03 ,0xf6 ,0x0e ,0x61 ,0x35 ,0x57 ,0xb9 ,0x86 ,0xc1 ,0x1d ,0x9e | |
,0xe1 ,0xf8 ,0x98 ,0x11 ,0x69 ,0xd9 ,0x8e ,0x94 ,0x9b ,0x1e ,0x87 ,0xe9 ,0xce ,0x55 ,0x28 ,0xdf | |
,0x8c ,0xa1 ,0x89 ,0x0d ,0xbf ,0xe6 ,0x42 ,0x68 ,0x41 ,0x99 ,0x2d ,0x0f ,0xb0 ,0x54 ,0xbb ,0x16}; | |
const uint8_t inv_s[256] = { | |
0x52, 0x9, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, | |
0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, | |
0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, | |
0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, | |
0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, | |
0xee, 0x4c, 0x95, 0xb, 0x42, 0xfa, 0xc3, 0x4e, | |
0x8, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, | |
0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, | |
0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, | |
0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, | |
0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, | |
0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, | |
0x90, 0xd8, 0xab, 0x0, 0x8c, 0xbc, 0xd3, 0xa, | |
0xf7, 0xe4, 0x58, 0x5, 0xb8, 0xb3, 0x45, 0x6, | |
0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0xf, 0x2, | |
0xc1, 0xaf, 0xbd, 0x3, 0x1, 0x13, 0x8a, 0x6b, | |
0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, | |
0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, | |
0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, | |
0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, | |
0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, | |
0x6f, 0xb7, 0x62, 0xe, 0xaa, 0x18, 0xbe, 0x1b, | |
0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, | |
0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, | |
0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x7, 0xc7, 0x31, | |
0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, | |
0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0xd, | |
0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, | |
0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, | |
0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, | |
0x17, 0x2b, 0x4, 0x7e, 0xba, 0x77, 0xd6, 0x26, | |
0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0xc, 0x7d,}; | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment