|
#include <algorithm> |
|
#include <cstdint> |
|
#include <set> |
|
#include <stdio.h> |
|
#include <string.h> |
|
#include <string> |
|
#include <string_view> |
|
#include <vector> |
|
|
|
extern "C" { |
|
#include "api.h" |
|
#include "params.h" |
|
#include "poly.h" |
|
#include "polyvec.h" |
|
#include "reduce.h" |
|
#include "sha2.h" |
|
} |
|
|
|
const int16_t sk0[256] = { |
|
775, 1834, 2279, 3188, 271, 1234, 2824, 2485, 754, 3280, 1314, 2805, |
|
2227, 1722, 2229, 710, 815, 3056, 2631, 7, 2403, 364, 1113, 3232, |
|
3121, 1432, 1076, 673, 1438, 180, 27, 403, 171, 1168, 8, 2863, |
|
1568, 345, 2776, 1755, 998, 1311, 280, 2499, 2680, 1265, 292, 1792, |
|
676, 725, 2485, 2018, 761, 2437, 1968, 1216, 3245, 2153, 2618, 1581, |
|
602, 459, 1676, 1792, 3325, 1116, 813, 907, 725, 144, 800, 2375, |
|
1702, 2732, 3236, 2341, 1240, 1055, 1026, 1209, 239, 238, 1936, 1928, |
|
2834, 1377, 256, 2902, 2174, 2741, 444, 25, 3098, 1833, 160, 207, |
|
1426, 1033, 450, 2964, 1052, 1141, 97, 2913, 2780, 2707, 516, 2668, |
|
3014, 2109, 648, 278, 32, 3059, 1059, 2298, 2524, 2065, 2747, 3244, |
|
2841, 3085, 644, 1929, 1524, 368, 740, 2882, 520, 409, 2559, 1653, |
|
963, 76, 1099, 622, 121, 119, 590, 2448, 2693, 3327, 1609, 2230, |
|
1386, 2252, 2005, 2708, 375, 90, 2248, 2929, 2423, 277, 2006, 1410, |
|
2938, 1033, 1317, 907, 1330, 675, 752, 1897, 2968, 291, 1621, 529, |
|
1753, 2397, 1569, 3035, 62, 604, 997, 3183, 1437, 1774, 1717, 247, |
|
1637, 2173, 3233, 2364, 1471, 2318, 2309, 1761, 2145, 728, 163, 2804, |
|
2669, 170, 2717, 933, 2038, 874, 2588, 610, 1663, 3291, 1444, 460, |
|
1641, 1399, 2771, 1576, 2720, 3102, 629, 245, 193, 1478, 380, 590, |
|
493, 1510, 1390, 1834, 1782, 2953, 2228, 1624, 3303, 179, 321, 77, |
|
2210, 76, 3323, 2094, 2894, 640, 1476, 1580, 1027, 1854, 3235, 2647, |
|
2606, 287, 854, 1450, 1647, 2299, 1606, 839, 3241, 2338, 254, 247, |
|
1365, 1538, 2526, 3148}; |
|
const int16_t sk1[256] = { |
|
308, 918, 2485, 92, 535, 1490, 3173, 1704, 409, 2116, 1647, 1080, |
|
628, 2455, 1409, 1424, 1264, 2856, 1491, 2440, 2859, 2426, 950, 459, |
|
2987, 2700, 1828, 2984, 2256, 468, 1833, 1718, 1093, 363, 1607, 2529, |
|
196, 1003, 1891, 2165, 2244, 722, 587, 1114, 3130, 117, 2743, 747, |
|
1510, 595, 628, 120, 3119, 1441, 604, 1868, 2313, 819, 2782, 2982, |
|
1784, 1174, 1060, 870, 2909, 761, 1223, 977, 824, 739, 2771, 346, |
|
2166, 1929, 2245, 3306, 2711, 767, 2205, 1567, 886, 2508, 1496, 1530, |
|
883, 424, 1736, 1171, 2686, 1280, 1498, 50, 1998, 378, 2703, 729, |
|
1113, 373, 479, 2030, 353, 371, 2258, 2237, 2113, 969, 3239, 1752, |
|
678, 1794, 353, 2950, 937, 32, 1303, 559, 2922, 934, 252, 640, |
|
1860, 3302, 1505, 2824, 2011, 2829, 60, 1802, 348, 170, 1202, 1343, |
|
1062, 3031, 1028, 3307, 2263, 434, 1154, 1509, 1748, 667, 350, 559, |
|
484, 2085, 321, 54, 2176, 1333, 1140, 661, 422, 1686, 181, 371, |
|
869, 403, 1646, 3219, 1550, 2930, 2282, 2296, 2840, 2295, 1534, 455, |
|
790, 2037, 3307, 3001, 2270, 837, 249, 683, 1319, 1585, 692, 1935, |
|
3250, 41, 2864, 1634, 384, 2997, 730, 2482, 1713, 1392, 3227, 3086, |
|
2838, 370, 2695, 2018, 2688, 3019, 191, 3153, 3174, 1340, 646, 591, |
|
3293, 719, 2318, 2982, 2429, 810, 543, 1986, 1951, 1742, 2037, 2252, |
|
2251, 1839, 1475, 2143, 2732, 1292, 3269, 2629, 2136, 3318, 1318, 17, |
|
2332, 2208, 941, 1897, 1484, 2850, 3024, 3003, 2748, 1762, 2695, 3032, |
|
1266, 2917, 195, 2054, 1226, 2452, 1746, 166, 41, 1266, 2851, 3318, |
|
1390, 2281, 2009, 1178}; |
|
const uint8_t ct[PQCLEAN_KYBER51290S_CLEAN_CRYPTO_CIPHERTEXTBYTES] = { |
|
0x6A, 0x94, 0x99, 0xD3, 0x0A, 0x4C, 0xEE, 0x8B, 0x18, 0x7B, 0x92, 0xEA, |
|
0xD8, 0x35, 0x1A, 0x78, 0x7F, 0x9B, 0x80, 0x13, 0x1D, 0xDD, 0xAB, 0x1C, |
|
0xB9, 0x90, 0x09, 0xCD, 0x25, 0x23, 0xF5, 0x47, 0xB1, 0x7B, 0x04, 0x89, |
|
0xDD, 0x3D, 0x5E, 0xCB, 0xB7, 0x20, 0x2D, 0x3B, 0xFA, 0xE0, 0x80, 0x0A, |
|
0xA3, 0x16, 0x80, 0x5A, 0x39, 0xDD, 0x9F, 0xFB, 0x8C, 0xAF, 0xBA, 0x7F, |
|
0x10, 0x3D, 0xDD, 0x1E, 0x7D, 0x98, 0xB1, 0x54, 0xB0, 0x2F, 0x6D, 0xB1, |
|
0xCC, 0x8D, 0x9D, 0x64, 0x0F, 0x5D, 0x80, 0x26, 0x46, 0x99, 0xAA, 0x67, |
|
0x17, 0x70, 0x1C, 0x1B, 0x21, 0x29, 0x30, 0x53, 0xBE, 0x65, 0xF9, 0x06, |
|
0x29, 0x12, 0xA4, 0x2B, 0x99, 0xA8, 0xD0, 0xE7, 0x93, 0xB3, 0x8C, 0x1A, |
|
0x45, 0x2E, 0x55, 0x66, 0xBE, 0x0D, 0x93, 0xED, 0x07, 0xCB, 0xAC, 0xAA, |
|
0x0C, 0x87, 0x28, 0xBE, 0xDB, 0xDF, 0xFA, 0x40, 0x8A, 0x02, 0x5C, 0xF4, |
|
0x46, 0x55, 0x44, 0x78, 0x57, 0xBE, 0x09, 0x61, 0xA4, 0x99, 0x82, 0x87, |
|
0x13, 0x37, 0xC6, 0x2A, 0xE3, 0xF7, 0x77, 0x4D, 0x1F, 0x12, 0xAE, 0xB3, |
|
0xB6, 0x74, 0x20, 0x1B, 0x92, 0xB7, 0x9C, 0x1F, 0x70, 0x6E, 0x95, 0xD4, |
|
0x15, 0x35, 0x93, 0xB0, 0xC4, 0xE9, 0xBB, 0x23, 0x4B, 0x54, 0x6A, 0x1D, |
|
0x36, 0x1C, 0x55, 0x0D, 0x26, 0xF3, 0x43, 0xA9, 0xB5, 0x9D, 0x93, 0x2E, |
|
0x79, 0xC0, 0xC3, 0x12, 0xCF, 0x84, 0x92, 0x91, 0x14, 0x16, 0xCA, 0xCB, |
|
0xEF, 0x35, 0x6D, 0x11, 0x90, 0x58, 0xBD, 0xBE, 0x75, 0xB7, 0x5E, 0x42, |
|
0x83, 0x00, 0x7F, 0x0D, 0x0C, 0xE2, 0x83, 0xDB, 0x20, 0xFD, 0x17, 0x8E, |
|
0xF7, 0xB8, 0xDF, 0x22, 0xC5, 0xF0, 0xC4, 0xBD, 0xA6, 0xCE, 0x71, 0xEF, |
|
0xF9, 0xDC, 0xA2, 0x7C, 0x7D, 0x00, 0x7E, 0x85, 0x87, 0xF8, 0xEB, 0x9E, |
|
0xB8, 0x86, 0x5A, 0xD5, 0x58, 0xB1, 0x84, 0x64, 0xE9, 0xF0, 0xDD, 0xA5, |
|
0x57, 0xB5, 0x20, 0xCE, 0x81, 0x53, 0xB1, 0x73, 0x6A, 0xFE, 0xD6, 0xDF, |
|
0x7A, 0x41, 0xAE, 0xAB, 0x9F, 0x13, 0xCC, 0xA2, 0x60, 0x7E, 0xE3, 0x75, |
|
0x19, 0xD1, 0x2D, 0xF4, 0x96, 0xCC, 0xAD, 0x48, 0x6A, 0x55, 0xB0, 0x7D, |
|
0xF3, 0x22, 0xDF, 0xE0, 0x5C, 0x29, 0xC9, 0x67, 0x18, 0x34, 0x62, 0x3B, |
|
0xFA, 0x09, 0x48, 0xB8, 0x27, 0x58, 0x2B, 0x6A, 0xC0, 0x16, 0x44, 0x36, |
|
0x42, 0x4F, 0x77, 0x92, 0xC9, 0xC2, 0x1A, 0xEC, 0x07, 0xD0, 0xF3, 0x17, |
|
0x87, 0xE4, 0x2B, 0x52, 0x14, 0xC8, 0xAF, 0x09, 0xE7, 0xBF, 0xA8, 0xD7, |
|
0xC1, 0x36, 0x4D, 0x5F, 0x4D, 0x5E, 0x04, 0x53, 0xB2, 0xC7, 0x43, 0x01, |
|
0xDC, 0x89, 0x54, 0x4A, 0x3B, 0x9A, 0x27, 0xC7, 0x27, 0x45, 0x81, 0x6F, |
|
0x0C, 0x47, 0x9A, 0x9D, 0x88, 0xBD, 0xA9, 0x13, 0x68, 0x8D, 0x7D, 0xCE, |
|
0x0C, 0x67, 0xA9, 0x86, 0xD3, 0xC7, 0x43, 0x09, 0x05, 0xA6, 0x30, 0xCB, |
|
0x62, 0xE0, 0x6D, 0xD0, 0x93, 0xF7, 0x80, 0x5B, 0xF6, 0x8D, 0xC3, 0x68, |
|
0x2A, 0xEF, 0xC7, 0xAE, 0xD5, 0x6F, 0x01, 0xC4, 0x65, 0x58, 0x8E, 0x12, |
|
0x6B, 0xF5, 0x3F, 0xF8, 0x0A, 0xF7, 0x4B, 0x3E, 0x74, 0xFE, 0x8B, 0xA1, |
|
0x42, 0xFB, 0xB9, 0x32, 0x16, 0xAF, 0xFC, 0x51, 0xE0, 0xD1, 0x78, 0x72, |
|
0x5D, 0x85, 0x0E, 0xEF, 0xEC, 0x75, 0x57, 0xE6, 0x26, 0xB4, 0xD9, 0x0A, |
|
0x58, 0x7D, 0xC5, 0x84, 0x12, 0xE2, 0x74, 0xD8, 0xD8, 0x09, 0x25, 0x03, |
|
0x99, 0x93, 0x2C, 0x48, 0xC7, 0xB9, 0x1E, 0x34, 0xDD, 0xEB, 0xCD, 0xBA, |
|
0x2C, 0x11, 0x5C, 0xBD, 0x59, 0x16, 0x5C, 0xCE, 0x69, 0x2E, 0x32, 0x9C, |
|
0x6C, 0xE9, 0x33, 0xEB, 0x95, 0x8E, 0x39, 0x96, 0x4F, 0x1B, 0x6D, 0x06, |
|
0x4E, 0x33, 0x8F, 0xA3, 0x63, 0x14, 0x61, 0xE1, 0xD1, 0xB2, 0xE7, 0x8D, |
|
0xD5, 0xE3, 0x27, 0xE6, 0x1C, 0xF9, 0x9E, 0x34, 0x7F, 0x5B, 0x67, 0xB0, |
|
0x93, 0x99, 0x00, 0xDB, 0x45, 0xD7, 0xD1, 0x41, 0xDC, 0x5D, 0x71, 0x1C, |
|
0xAC, 0x67, 0x72, 0x85, 0x9D, 0x83, 0x02, 0x04, 0xB7, 0x8F, 0x5D, 0x54, |
|
0x81, 0x94, 0xD6, 0xCD, 0xB6, 0x45, 0xD6, 0xB8, 0x95, 0x02, 0x8F, 0x30, |
|
0xCB, 0xCC, 0x3F, 0x34, 0x2B, 0xD1, 0x22, 0xD3, 0x48, 0xCA, 0x7E, 0xE5, |
|
0xED, 0xE3, 0xA5, 0xAA, 0x86, 0xFA, 0xF5, 0x32, 0x71, 0xF6, 0x24, 0x62, |
|
0xF9, 0x69, 0x27, 0xF7, 0xAB, 0xEE, 0x03, 0x31, 0x95, 0x1F, 0x7D, 0x65, |
|
0x67, 0x8B, 0x4B, 0xCB, 0x6D, 0x7E, 0x90, 0xE0, 0x47, 0x82, 0x5E, 0x19, |
|
0x1F, 0x24, 0x8C, 0xE8, 0x26, 0x10, 0x1D, 0x87, 0x41, 0xE2, 0x35, 0x0E, |
|
0x1C, 0x3C, 0x2D, 0x8C, 0x63, 0xD3, 0x6E, 0x22, 0xFB, 0xDA, 0xC7, 0x26, |
|
0x37, 0xC5, 0x96, 0xA4, 0xA5, 0xC8, 0x5C, 0x61, 0x3F, 0x73, 0x76, 0x9F, |
|
0xF2, 0x0C, 0x0C, 0x69, 0x89, 0xB9, 0xEA, 0x28, 0xBE, 0x42, 0xD1, 0x24, |
|
0x16, 0xC5, 0x2B, 0xEF, 0x73, 0xBF, 0x71, 0xAE, 0x2A, 0x7F, 0x17, 0xB8, |
|
0x80, 0x5A, 0xE6, 0xB8, 0x3A, 0xF1, 0x7F, 0x58, 0xE7, 0xC6, 0xAB, 0x15, |
|
0x9A, 0x51, 0xA6, 0xA3, 0x8F, 0xC8, 0x78, 0xE8, 0xAE, 0xF9, 0x52, 0x8F, |
|
0x6C, 0x3B, 0x84, 0x7B, 0xE7, 0x48, 0x85, 0xD0, 0x70, 0x90, 0x93, 0xDA, |
|
0x26, 0xFD, 0x5F, 0x35, 0x9D, 0x62, 0xA6, 0xEC, 0x8A, 0x1B, 0xD4, 0x2D, |
|
0x7C, 0x63, 0x36, 0x93, 0x2F, 0x35, 0x35, 0x74, 0xF7, 0x07, 0x65, 0xE8, |
|
0xED, 0x35, 0x5F, 0x1C, 0x94, 0x1C, 0x0A, 0xE0, 0xE9, 0x18, 0x11, 0xEB, |
|
0x06, 0xE2, 0x6B, 0xEC, 0x35, 0x87, 0x25, 0xE2, 0x1B, 0x16, 0x5B, 0x71, |
|
0x5D, 0x9B, 0x1B, 0x6E, 0x31, 0xEA, 0xFE, 0x4B, 0xDA, 0x30, 0x28, 0x9D}; |
|
|
|
const uint8_t flag_xor_ss[PQCLEAN_KYBER51290S_CLEAN_CRYPTO_BYTES] = { |
|
0x0E, 0xE5, 0x27, 0xE2, 0x4A, 0x22, 0x7C, 0x73, 0x85, 0xF4, 0xE3, |
|
0x4D, 0x81, 0x2C, 0xAC, 0x4B, 0xF0, 0x98, 0xAC, 0x64, 0x7E, 0xAC, |
|
0xA9, 0x73, 0xED, 0x47, 0x7F, 0xA0, 0x60, 0x7B, 0xBE, 0x24}; |
|
|
|
const unsigned char pk[800] = { |
|
0x31, 0xEA, 0xCE, 0x14, 0x54, 0x30, 0x1E, 0xDA, 0x7C, 0x49, 0xCC, 0x67, |
|
0x75, 0x24, 0x0E, 0xE3, 0xE4, 0xCF, 0x74, 0x22, 0xB5, 0xD3, 0x76, 0x9E, |
|
0x0B, 0x27, 0xBD, 0x6A, 0x98, 0xA7, 0x63, 0xEA, 0xC1, 0x5A, 0x08, 0x6C, |
|
0x6C, 0x11, 0xB7, 0x2F, 0x83, 0x8C, 0x32, 0x64, 0xAD, 0x91, 0x2B, 0x1D, |
|
0x3D, 0x55, 0x21, 0x6F, 0x80, 0x12, 0x1A, 0x77, 0x43, 0x61, 0xEA, 0xCA, |
|
0x0D, 0xC2, 0x3E, 0xE0, 0x37, 0xA5, 0x79, 0x5A, 0xAE, 0x88, 0xE9, 0x7C, |
|
0xAE, 0x1B, 0x26, 0x38, 0x58, 0x0E, 0x25, 0x3A, 0x95, 0xDD, 0xC1, 0x41, |
|
0xF0, 0xA6, 0x9C, 0x1E, 0xFB, 0x1D, 0x52, 0xE1, 0x8A, 0x99, 0xD4, 0x56, |
|
0x92, 0xF2, 0x7F, 0x7B, 0x56, 0xA1, 0xF0, 0x41, 0x30, 0x1C, 0x42, 0x3A, |
|
0xED, 0x46, 0xC6, 0x1E, 0x06, 0x11, 0x8C, 0xA8, 0xCD, 0x39, 0xD8, 0x1D, |
|
0x89, 0x72, 0x2D, 0xBB, 0x88, 0x8E, 0x5D, 0x28, 0x4B, 0xFF, 0xE1, 0x5D, |
|
0xF8, 0x92, 0xAE, 0xCE, 0x88, 0x5E, 0x74, 0x46, 0x5E, 0xF1, 0xF5, 0x6A, |
|
0x63, 0x21, 0x61, 0x88, 0x6B, 0xB4, 0xB3, 0xF6, 0x6B, 0x00, 0x80, 0xCA, |
|
0x4C, 0xCA, 0x2B, 0x9F, 0x20, 0x8E, 0xDB, 0x30, 0x71, 0xCF, 0x23, 0x39, |
|
0x46, 0xD0, 0xB8, 0x71, 0x16, 0x8A, 0x0E, 0x66, 0x33, 0xBC, 0x64, 0x38, |
|
0xE5, 0x97, 0x98, 0x0D, 0x46, 0xA9, 0x92, 0x7A, 0x09, 0xD0, 0xCB, 0x73, |
|
0xC3, 0x00, 0xC0, 0xE3, 0xAB, 0xB6, 0xD3, 0xD8, 0x69, 0x4D, 0x91, 0x80, |
|
0x09, 0x54, 0x70, 0xDC, 0x56, 0x43, 0xCA, 0x45, 0x72, 0xEE, 0x62, 0x79, |
|
0x25, 0x71, 0x6A, 0x6D, 0x83, 0xAC, 0x6F, 0xB8, 0x7A, 0x74, 0xE1, 0xC3, |
|
0xB3, 0xF5, 0x72, 0x3A, 0x3A, 0x6C, 0x4D, 0x46, 0x9F, 0xD7, 0xA8, 0x6F, |
|
0x44, 0x73, 0x7F, 0x02, 0xCA, 0x0E, 0xFF, 0x30, 0x50, 0xB4, 0xD5, 0x07, |
|
0x74, 0xCC, 0x54, 0x65, 0xA8, 0xB7, 0x1A, 0x8C, 0x61, 0xC1, 0xFC, 0x81, |
|
0x54, 0x65, 0x56, 0x8F, 0x79, 0xAC, 0x0F, 0x50, 0x4C, 0x99, 0xF9, 0xC8, |
|
0xE7, 0x09, 0x3A, 0x0F, 0xCC, 0x33, 0x63, 0x40, 0xC6, 0x40, 0x45, 0xA9, |
|
0x61, 0x24, 0x68, 0x08, 0x9B, 0xAF, 0xC8, 0x2C, 0x2A, 0x4F, 0xDA, 0x84, |
|
0xE5, 0x89, 0xA9, 0xA1, 0x4A, 0xC5, 0x47, 0x37, 0x58, 0xF7, 0x91, 0x5E, |
|
0x75, 0x64, 0x7C, 0xF5, 0xF1, 0x97, 0x89, 0x99, 0x48, 0x73, 0xBB, 0x33, |
|
0xB1, 0x22, 0x9F, 0x49, 0x93, 0x64, 0x00, 0xDA, 0x64, 0x92, 0xA6, 0x8D, |
|
0x89, 0xDA, 0x46, 0xED, 0x58, 0x1E, 0x07, 0x36, 0x97, 0x47, 0x62, 0x0F, |
|
0xAB, 0xAC, 0x63, 0x1B, 0x08, 0x60, 0xD7, 0x41, 0x4B, 0xEA, 0x07, 0xAE, |
|
0xA0, 0x1C, 0x1C, 0x48, 0x71, 0x9A, 0x7A, 0x85, 0x54, 0xD7, 0x70, 0x43, |
|
0x44, 0x38, 0x73, 0xC1, 0x10, 0x5D, 0x38, 0xE7, 0x2E, 0xA0, 0x38, 0x76, |
|
0x0A, 0x56, 0x85, 0xDE, 0x73, 0xC3, 0xDB, 0xF9, 0x94, 0x34, 0x0C, 0xB3, |
|
0xDE, 0x0B, 0xA5, 0xD0, 0x63, 0x2A, 0x3B, 0x98, 0x7E, 0x16, 0xAB, 0x3F, |
|
0x04, 0xE3, 0x48, 0x79, 0x51, 0x77, 0x2A, 0x95, 0x82, 0xC4, 0x95, 0x75, |
|
0xBE, 0x5A, 0x36, 0xD3, 0x84, 0xC5, 0xC5, 0x46, 0x36, 0x47, 0xCB, 0xB1, |
|
0xBF, 0xE9, 0xAB, 0x97, 0x09, 0x23, 0xAE, 0x41, 0x7A, 0x9D, 0x94, 0x2E, |
|
0xB5, 0x75, 0xC9, 0x03, 0x5A, 0x97, 0x9E, 0x71, 0x86, 0x81, 0x69, 0x34, |
|
0x99, 0xC7, 0xCA, 0x19, 0xF1, 0x17, 0x27, 0x02, 0x2F, 0x01, 0x76, 0x57, |
|
0xB8, 0xB3, 0x31, 0xA3, 0x21, 0x24, 0xD2, 0xD4, 0x91, 0x9D, 0x48, 0x0A, |
|
0xE0, 0xEC, 0x04, 0x37, 0xB5, 0x64, 0x1E, 0xD3, 0xC5, 0xF2, 0x31, 0x68, |
|
0xCB, 0x78, 0xA1, 0x73, 0xC9, 0x95, 0x48, 0xB5, 0x7B, 0x7B, 0xC7, 0xC0, |
|
0x8C, 0x46, 0x57, 0x0A, 0x39, 0x3C, 0x47, 0x97, 0x71, 0xE4, 0xD5, 0x12, |
|
0xBD, 0x20, 0x66, 0xC4, 0x2B, 0x6F, 0x14, 0xC6, 0xB5, 0x79, 0xFC, 0x17, |
|
0x37, 0x00, 0x0A, 0xCA, 0x72, 0x8C, 0xC9, 0xC3, 0x02, 0x01, 0x64, 0x69, |
|
0x3A, 0x93, 0x32, 0xC6, 0xDA, 0x1B, 0x26, 0x07, 0x15, 0x01, 0xF4, 0x2C, |
|
0xED, 0x79, 0x4F, 0xD7, 0x28, 0xA6, 0x92, 0x0A, 0x8B, 0xEE, 0xD7, 0x66, |
|
0xC3, 0xA8, 0x6E, 0x1D, 0xF9, 0x22, 0xA7, 0x2A, 0x0C, 0xC8, 0xC0, 0x3A, |
|
0xE1, 0xAC, 0xC4, 0x47, 0x82, 0x81, 0xD6, 0xA5, 0x42, 0xB1, 0x4B, 0x88, |
|
0x41, 0x14, 0x7C, 0x6A, 0x32, 0x17, 0xB5, 0xE1, 0x1A, 0x16, 0xA1, 0x98, |
|
0x76, 0x59, 0xA4, 0x03, 0x9B, 0xB9, 0x5E, 0x79, 0x11, 0x3C, 0xA0, 0x40, |
|
0xEA, 0xC0, 0x09, 0x44, 0x77, 0xBA, 0x7F, 0xD3, 0x3C, 0xF5, 0x26, 0x8B, |
|
0x2F, 0xE2, 0x30, 0x01, 0x9A, 0x50, 0xD8, 0x7A, 0xB1, 0x45, 0x58, 0xAF, |
|
0xAB, 0xD6, 0x40, 0x37, 0x52, 0x50, 0x85, 0xA0, 0xCA, 0x05, 0x05, 0xA3, |
|
0xA9, 0xBC, 0x50, 0x79, 0x00, 0xC0, 0x9F, 0x5C, 0x33, 0x7B, 0xA8, 0x2C, |
|
0x60, 0xCB, 0x24, 0x59, 0xCB, 0x9D, 0x27, 0x14, 0x99, 0xCB, 0x39, 0x1A, |
|
0x82, 0x1B, 0x60, 0xAF, 0x84, 0x71, 0x97, 0x6B, 0x2D, 0xA0, 0xF0, 0xCC, |
|
0xA4, 0x8B, 0x5E, 0xB9, 0x12, 0xBE, 0xD5, 0xB5, 0x62, 0x8A, 0x57, 0x87, |
|
0x34, 0x69, 0x3B, 0xA3, 0x22, 0x73, 0xD2, 0x31, 0x47, 0x08, 0x95, 0x0F, |
|
0x12, 0xCA, 0xA1, 0xC7, 0xC1, 0x2B, 0x49, 0x35, 0xBB, 0x58, 0x95, 0x19, |
|
0x68, 0x84, 0x2D, 0x19, 0x52, 0x41, 0x43, 0x04, 0x56, 0xBD, 0xA2, 0x9C, |
|
0xB8, 0x08, 0x1B, 0x8C, 0x74, 0x00, 0x01, 0x02, 0x1F, 0x86, 0x06, 0x38, |
|
0x29, 0x93, 0x8F, 0xAA, 0xF6, 0x00, 0xDE, 0x48, 0x7E, 0x7B, 0x14, 0x3D, |
|
0x7C, 0x47, 0x8E, 0xB5, 0xB3, 0x43, 0x0A, 0xD6, 0x7B, 0x63, 0xC2, 0x7D, |
|
0x3A, 0xA1, 0x05, 0x70, 0xD4, 0x3F, 0xCA, 0x67, 0x9C, 0x5F, 0x1D, 0xE6, |
|
0xF0, 0xD1, 0x4A, 0x5D, 0xFA, 0x60, 0x1A, 0x39, 0x21, 0xBC, 0xEB, 0x67, |
|
0x88, 0xC7, 0x71, 0x99, 0xC6, 0xE1, 0x8D, 0xF5}; |
|
|
|
int main(int argc, char *argv[]) { |
|
uint8_t packed_sk[PQCLEAN_KYBER51290S_CLEAN_CRYPTO_SECRETKEYBYTES] = {0}; |
|
polyvec sk; |
|
memcpy(sk.vec[0].coeffs, sk0, sizeof(sk0)); |
|
memcpy(sk.vec[1].coeffs, sk1, sizeof(sk1)); |
|
PQCLEAN_KYBER51290S_CLEAN_polyvec_tobytes(packed_sk, &sk); |
|
memcpy(packed_sk + KYBER_INDCPA_SECRETKEYBYTES, pk, sizeof(pk)); |
|
sha256(packed_sk + KYBER_SECRETKEYBYTES - 2 * KYBER_SYMBYTES, pk, KYBER_PUBLICKEYBYTES); |
|
|
|
// test the key |
|
uint8_t test_ct[PQCLEAN_KYBER51290S_CLEAN_CRYPTO_CIPHERTEXTBYTES]; |
|
uint8_t test_ss[PQCLEAN_KYBER51290S_CLEAN_CRYPTO_BYTES]; |
|
PQCLEAN_KYBER51290S_CLEAN_crypto_kem_enc(test_ct, test_ss, pk); |
|
|
|
uint8_t dec_ss[PQCLEAN_KYBER51290S_CLEAN_CRYPTO_BYTES]; |
|
PQCLEAN_KYBER51290S_CLEAN_crypto_kem_dec(dec_ss, test_ct, packed_sk); |
|
|
|
if (memcmp(test_ss, dec_ss, sizeof(test_ss)) != 0) { |
|
puts("FAIL"); |
|
return 1; |
|
} |
|
|
|
uint8_t ss[PQCLEAN_KYBER51290S_CLEAN_CRYPTO_BYTES]; |
|
PQCLEAN_KYBER51290S_CLEAN_crypto_kem_dec(ss, ct, packed_sk); |
|
|
|
char flag[33] = {0}; |
|
for (int i = 0; i < 32; i++) |
|
flag[i] = ss[i] ^ flag_xor_ss[i]; |
|
puts(flag); |
|
return 0; |
|
} |