Skip to content

Instantly share code, notes, and snippets.

@ykm11

ykm11/dpa.cpp Secret

Last active July 8, 2022 22:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ykm11/3369f8363c089017c5e6671607528411 to your computer and use it in GitHub Desktop.
Save ykm11/3369f8363c089017c5e6671607528411 to your computer and use it in GitHub Desktop.
test for differential power analysis
#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
}
}
#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);
}
$ /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
#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