diff --git a/dap-sdk/crypto/include/dap_enc_GOST.h b/dap-sdk/crypto/include/dap_enc_GOST.h index 9ba75cc899ec35c2ed59927b9bb556dee1a01bae..c64be029a0a8c78ac3df145dceff8c21721c0e39 100644 --- a/dap-sdk/crypto/include/dap_enc_GOST.h +++ b/dap-sdk/crypto/include/dap_enc_GOST.h @@ -3,7 +3,7 @@ #include <stddef.h> #include "dap_enc_key.h" -#include "GOST/block_chipher.h" +#include "GOST/block_cipher.h" #ifdef __cplusplus extern "C" { diff --git a/dap-sdk/crypto/include/dap_enc_SEED.h b/dap-sdk/crypto/include/dap_enc_SEED.h new file mode 100644 index 0000000000000000000000000000000000000000..8b9a31acea0357400b4f4cfaf7cb0b45deac9533 --- /dev/null +++ b/dap-sdk/crypto/include/dap_enc_SEED.h @@ -0,0 +1,34 @@ +#ifndef _DAP_ENC_SEED_H_ +#define _DAP_ENC_SEED_H_ + +#include <stddef.h> +#include "dap_enc_key.h" +#include "seed/seed.h" + +#ifdef __cplusplus +extern "C" { +#endif +void dap_enc_seed_key_delete(struct dap_enc_key *a_key); +void dap_enc_seed_key_generate(struct dap_enc_key * a_key, const void *kex_buf, + size_t kex_size, const void * seed, size_t seed_size, size_t key_size); +//------SEED_OFB--------- +void dap_enc_seed_ofb_key_new(struct dap_enc_key * a_key); + +size_t dap_enc_seed_ofb_calc_decode_size(const size_t size_in); +size_t dap_enc_seed_ofb_calc_encode_size(const size_t size_in); + +size_t dap_enc_seed_ofb_decrypt(struct dap_enc_key * a_key, const void * a_in, size_t a_in_size, void ** a_out); +size_t dap_enc_seed_ofb_encrypt(struct dap_enc_key * a_key, const void * a_in, size_t a_in_size, void ** a_out); + +// Writes result ( out ) in already allocated buffer +size_t dap_enc_seed_ofb_decrypt_fast(struct dap_enc_key * a_key, const void * a_in, + size_t a_in_size, void * buf_out, size_t buf_out_size); +// Writes result ( out ) in already allocated buffer +size_t dap_enc_seed_ofb_encrypt_fast(struct dap_enc_key * a_key, const void * a_in, + size_t a_in_size, void * buf_out, size_t buf_out_size); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/dap-sdk/crypto/include/dap_enc_bf.h b/dap-sdk/crypto/include/dap_enc_bf.h index 6501f9dee1ac7f0d599795a9c8770d0d05bf8702..abaaaa99a0c1a20620b965aa751cc33f74a10610 100644 --- a/dap-sdk/crypto/include/dap_enc_bf.h +++ b/dap-sdk/crypto/include/dap_enc_bf.h @@ -5,6 +5,8 @@ #include "dap_enc_key.h" #include"blowfish/blowfish.h" +#define BLOWFISH_BLOCK_SIZE 8 + #ifdef __cplusplus extern "C" { #endif @@ -14,7 +16,7 @@ void dap_enc_bf_key_generate(struct dap_enc_key * a_key, const void *kex_buf, //-----CBC---------- void dap_enc_bf_cbc_key_new(struct dap_enc_key * a_key); -size_t dap_enc_bf_cbc_calc_decode_size(const size_t size_in); +size_t dap_enc_bf_cbc_calc_decode_max_size(const size_t size_in); size_t dap_enc_bf_cbc_calc_encode_size(const size_t size_in); size_t dap_enc_bf_cbc_decrypt(struct dap_enc_key * a_key, const void * a_in, size_t a_in_size, void ** a_out); diff --git a/dap-sdk/crypto/include/dap_enc_key.h b/dap-sdk/crypto/include/dap_enc_key.h index 8f05effe7e8b7f7f5ac08d05056a9f11636fade2..7e2c7c6901aba7f627e26bbfc30c31098e877631 100755 --- a/dap-sdk/crypto/include/dap_enc_key.h +++ b/dap-sdk/crypto/include/dap_enc_key.h @@ -55,7 +55,9 @@ typedef enum dap_enc_key_type{ DAP_ENC_KEY_TYPE_SALSA2012,//SALSA2012//http://www.ecrypt.eu.org/stream/salsa20pf.html//https://ianix.com/pub/salsa20-deployment.html - DAP_ENC_KEY_TYPE_RLWE_NEWHOPE, // "NewHope": key exchange from the ring learning with errors problem + DAP_ENC_KEY_TYPE_SEED_OFB,//SEED Cipher in OFB mode + + DAP_ENC_KEY_TYPE_RLWE_NEWHOPE_CPA_KEM, // "NewHope": key exchange from the ring learning with errors problem // (Alkim, Ducas, Pöppelmann, Schwabe, USENIX Security 2016 ) // Using the reference C implementation of NewHope // from https://github.com/tpoeppelmann/newhop diff --git a/dap-sdk/crypto/src/GOST/28147_14.c b/dap-sdk/crypto/src/GOST/28147_14.c index f8f92d97c2f99c23545e41309b068a1de1e15cc7..69133fa7771e4083c7b526f2b06627af4723660d 100644 --- a/dap-sdk/crypto/src/GOST/28147_14.c +++ b/dap-sdk/crypto/src/GOST/28147_14.c @@ -1,5 +1,5 @@ /** @file - * @brief Ðåàëèçàöèÿ àëãîðèòìà "Êóçíå÷èê" + * @brief Ð ÐµÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð°Ð»Ð³Ð¾Ñ€Ð¸Ñ‚Ð¼Ð° "Кузнечик" * * @copyright InfoTeCS. All rights reserved. */ @@ -9,7 +9,7 @@ #include "28147_14.h" #include "table.h" -/** @brief Íåëèíåéíîå áèåêòèâíîå ïðåîáðàçîâàíèå ìíîæåñòâà äâîè÷íûõ âåêòîðîâ. */ +/** @brief Ðелинейное биективное преобразование множеÑтва двоичных векторов. */ static const unsigned char kPi[256] = { 252, 238, 221, 17, 207, 110, 49, 22, 251, 196, 250, 218, 35, 197, 4, 77, @@ -30,7 +30,7 @@ static const unsigned char kPi[256] = 89, 166, 116, 210, 230, 244, 180, 192, 209, 102, 175, 194, 57, 75, 99, 182 }; -/** @brief Îáðàòíîå íåëèíåéíîå áèåêòèâíîå ïðåîáðàçîâàíèå ìíîæåñòâà äâîè÷íûõ âåêòîðîâ. */ +/** @brief Обратное нелинейное биективное преобразование множеÑтва двоичных векторов. */ static const unsigned char kReversePi[256] = { 0xa5,0x2d,0x32,0x8f,0x0e,0x30,0x38,0xc0,0x54,0xe6,0x9e,0x39,0x55,0x7e,0x52,0x91, @@ -51,7 +51,7 @@ static const unsigned char kReversePi[256] = 0x12,0x1a,0x48,0x68,0xf5,0x81,0x8b,0xc7,0xd6,0x20,0x0a,0x08,0x00,0x4c,0xd7,0x74 }; -/** @brief Êîýôôèöèåíòû óìíîæåíèÿ â ïðåîáðàçîâàíèè l */ +/** @brief КоÑффициенты ÑƒÐ¼Ð½Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð² преобразовании l */ static const unsigned char kB[16] = {148, 32, 133, 16, 194, 192, 1, 251, 1, 192, 194, 16, 133, 32, 148, 1}; int DLL_IMPORT funcX(unsigned char* a, unsigned char* b, unsigned char* outdata, printout_byte_array print) diff --git a/dap-sdk/crypto/src/GOST/28147_14.h b/dap-sdk/crypto/src/GOST/28147_14.h index d044037ef8da7629b5393db825ac09e4f9a0808c..80ac954416dea6970a459373d8d61e691f94512d 100644 --- a/dap-sdk/crypto/src/GOST/28147_14.h +++ b/dap-sdk/crypto/src/GOST/28147_14.h @@ -1,5 +1,5 @@ /** @file - * @brief Îáúÿâëåíèå ôóíêöèé ðåàëèçóþùèõ ïðåîáðàçîâàíèÿ èç àëãîðèòìà "Êóçíå÷èê" + * @brief ОбъÑвление функций реализующих Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð· алгоритма "Кузнечик" * * @copyright InfoTeCS. All rights reserved. */ @@ -15,153 +15,153 @@ extern "C" { #endif -/** @brief Ïðåîáðàçîâàíèå X +/** @brief Преобразование X * - * @param[in] a âõîäíîé ïàðàìåòð ïðåîáðàçîâàíèÿ - * @param[in] b âõîäíîé ïàðàìåòð ïðåîáðàçîâàíèÿ - * @param[out] outdata ðåçóëüòàò ïàðàìåòð ïðåîáðàçîâàíèÿ - * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ - * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî - * @return -1 åñëè ïðîèçîøëà îøèáêà + * @param[in] a входной параметр Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ + * @param[in] b входной параметр Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ + * @param[out] outdata результат параметр Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ + * @param[in] print Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @return 0 еÑли вÑе преобразование прошло уÑпешно + * @return -1 еÑли произошла ошибка */ int DLL_IMPORT funcX(unsigned char* a, unsigned char* b, unsigned char* outdata, printout_byte_array print); -/** @brief Ïðåîáðàçîâàíèå S +/** @brief Преобразование S * - * @param[in] indata âõîäíîé ïàðàìåòð ïðåîáðàçîâàíèÿ - * @param[out] outdata ðåçóëüòàò ïàðàìåòð ïðåîáðàçîâàíèÿ - * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ - * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî - * @return -1 åñëè ïðîèçîøëà îøèáêà + * @param[in] indata входной параметр Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ + * @param[out] outdata результат параметр Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ + * @param[in] print Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @return 0 еÑли вÑе преобразование прошло уÑпешно + * @return -1 еÑли произошла ошибка */ int DLL_IMPORT funcS(unsigned char* indata, unsigned char* outdata, printout_byte_array print); -/** @brief Ïðåîáðàçîâàíèå îáðàòíîå ê ïðåîáðàçîâàíèþ S +/** @brief Преобразование обратное к преобразованию S * - * @param[in] indata âõîäíîé ïàðàìåòð ïðåîáðàçîâàíèÿ - * @param[out] outdata ðåçóëüòàò ïàðàìåòð ïðåîáðàçîâàíèÿ - * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ - * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî - * @return -1 åñëè ïðîèçîøëà îøèáêà + * @param[in] indata входной параметр Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ + * @param[out] outdata результат параметр Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ + * @param[in] print Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @return 0 еÑли вÑе преобразование прошло уÑпешно + * @return -1 еÑли произошла ошибка */ int DLL_IMPORT funcReverseS(unsigned char* indata, unsigned char* outdata, printout_byte_array print); -/** @brief Ïðåîáðàçîâàíèå R +/** @brief Преобразование R * - * @param[in] indata âõîäíîé ïàðàìåòð ïðåîáðàçîâàíèÿ - * @param[out] outdata ðåçóëüòàò ïàðàìåòð ïðåîáðàçîâàíèÿ - * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ - * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî - * @return -1 åñëè ïðîèçîøëà îøèáêà + * @param[in] indata входной параметр Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ + * @param[out] outdata результат параметр Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ + * @param[in] print Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @return 0 еÑли вÑе преобразование прошло уÑпешно + * @return -1 еÑли произошла ошибка */ int DLL_IMPORT funcR(unsigned char* indata, unsigned char* outdata, printout_byte_array print); -/** @brief Ïðåîáðàçîâàíèå îáðàòíîå ê ïðåîáðàçîâàíèþ R +/** @brief Преобразование обратное к преобразованию R * - * @param[in] indata âõîäíîé ïàðàìåòð ïðåîáðàçîâàíèÿ - * @param[out] outdata ðåçóëüòàò ïàðàìåòð ïðåîáðàçîâàíèÿ - * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ - * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî - * @return -1 åñëè ïðîèçîøëà îøèáêà + * @param[in] indata входной параметр Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ + * @param[out] outdata результат параметр Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ + * @param[in] print Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @return 0 еÑли вÑе преобразование прошло уÑпешно + * @return -1 еÑли произошла ошибка */ int DLL_IMPORT funcReverseR(unsigned char* indata, unsigned char* outdata, printout_byte_array print); -/** @brief Ïðåîáðàçîâàíèå L +/** @brief Преобразование L * - * @param[in] indata âõîäíîé ïàðàìåòð ïðåîáðàçîâàíèÿ - * @param[out] outdata ðåçóëüòàò ïàðàìåòð ïðåîáðàçîâàíèÿ - * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ - * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî - * @return -1 åñëè ïðîèçîøëà îøèáêà + * @param[in] indata входной параметр Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ + * @param[out] outdata результат параметр Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ + * @param[in] print Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @return 0 еÑли вÑе преобразование прошло уÑпешно + * @return -1 еÑли произошла ошибка */ int DLL_IMPORT funcL(unsigned char* indata, unsigned char* outdata, printout_byte_array print); -/** @brief Ïðåîáðàçîâàíèå îáðàòíîå ê ïðåîáðàçîâàíèþ L +/** @brief Преобразование обратное к преобразованию L * - * @param[in] indata âõîäíîé ïàðàìåòð ïðåîáðàçîâàíèÿ - * @param[out] outdata ðåçóëüòàò ïàðàìåòð ïðåîáðàçîâàíèÿ - * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ - * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî - * @return -1 åñëè ïðîèçîøëà îøèáêà + * @param[in] indata входной параметр Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ + * @param[out] outdata результат параметр Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ + * @param[in] print Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @return 0 еÑли вÑе преобразование прошло уÑпешно + * @return -1 еÑли произошла ошибка */ int DLL_IMPORT funcReverseL(unsigned char* indata, unsigned char* outdata, printout_byte_array print); -/** @brief Ïðåîáðàçîâàíèå LSX +/** @brief Преобразование LSX * - * @param[in] a âõîäíîé ïàðàìåòð ïðåîáðàçîâàíèÿ - * @param[in] b âõîäíîé ïàðàìåòð ïðåîáðàçîâàíèÿ - * @param[out] outdata ðåçóëüòàò ïàðàìåòð ïðåîáðàçîâàíèÿ - * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ - * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî - * @return -1 åñëè ïðîèçîøëà îøèáêà + * @param[in] a входной параметр Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ + * @param[in] b входной параметр Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ + * @param[out] outdata результат параметр Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ + * @param[in] print Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @return 0 еÑли вÑе преобразование прошло уÑпешно + * @return -1 еÑли произошла ошибка */ int DLL_IMPORT funcLSX(unsigned char* a, unsigned char* b, unsigned char* outdata, printout_byte_array print); -/** @brief Ïðåîáðàçîâàíèå îáðàòíîå ê ïðåîáðàçîâàíèþ LSX +/** @brief Преобразование обратное к преобразованию LSX * - * @param[in] a âõîäíîé ïàðàìåòð ïðåîáðàçîâàíèÿ - * @param[in] b âõîäíîé ïàðàìåòð ïðåîáðàçîâàíèÿ - * @param[out] outdata ðåçóëüòàò ïàðàìåòð ïðåîáðàçîâàíèÿ - * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ - * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî - * @return -1 åñëè ïðîèçîøëà îøèáêà + * @param[in] a входной параметр Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ + * @param[in] b входной параметр Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ + * @param[out] outdata результат параметр Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ + * @param[in] print Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @return 0 еÑли вÑе преобразование прошло уÑпешно + * @return -1 еÑли произошла ошибка */ int DLL_IMPORT funcReverseLSX(unsigned char* a, unsigned char* b, unsigned char* outdata, printout_byte_array print); -/** @brief Ïðåîáðàçîâàíèå F +/** @brief Преобразование F * - * @param[in] inputKey Ïåðâûé êëþ÷ èç ïàðû êëþ÷åé ïîëó÷åííîé â ïðåäåäóùåé èòåðàöèè - * @param[in] inputKeySecond Âòîðîé êëþ÷ èç ïàðû êëþ÷åé ïîëó÷åííîé â ïðåäåäóùåé èòåðàöèè - * @param[in] iterationConst Èòåðàöèîííàÿ êîíñòàíòà - * @param[out] outputKey Ïåðâûé êëþ÷ - * @param[out] outputKeySecond Âòîðîé êëþ÷ - * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ - * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî - * @return -1 åñëè ïðîèçîøëà îøèáêà + * @param[in] inputKey Первый ключ из пары ключей полученной в предедущей итерации + * @param[in] inputKeySecond Второй ключ из пары ключей полученной в предедущей итерации + * @param[in] iterationConst Ð˜Ñ‚ÐµÑ€Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð°Ñ ÐºÐ¾Ð½Ñтанта + * @param[out] outputKey Первый ключ + * @param[out] outputKeySecond Второй ключ + * @param[in] print Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @return 0 еÑли вÑе преобразование прошло уÑпешно + * @return -1 еÑли произошла ошибка */ int DLL_IMPORT funcF(unsigned char* inputKey, unsigned char* inputKeySecond, unsigned char* iterationConst, unsigned char* outputKey, unsigned char* outputKeySecond, printout_byte_array print); -/** @brief Âû÷èñëåíèå èòåðàöèîííîé êîíñòàíòû Ñ +/** @brief ВычиÑление итерационной конÑтанты С * - * @param[in] number íîìåð êîíñòàíòû - * @param[out] output èòåðàöèîííàÿ êîíñòàíòà - * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ - * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî - * @return -1 åñëè ïðîèçîøëà îøèáêà + * @param[in] number номер конÑтанты + * @param[out] output Ð¸Ñ‚ÐµÑ€Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð°Ñ ÐºÐ¾Ð½Ñтанта + * @param[in] print Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @return 0 еÑли вÑе преобразование прошло уÑпешно + * @return -1 еÑли произошла ошибка */ int DLL_IMPORT funcC(unsigned char number, unsigned char* output, printout_byte_array print); -/** @brief Ðàçâåðòêà êëþ÷à +/** @brief Развертка ключа * - * @param[in] masterKey Ìàñòåð êëþ÷ - * @param[out] keys ìàññèâ ðàçâåðíóòûõ êëþ÷åé - * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ - * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî - * @return -1 åñëè ïðîèçîøëà îøèáêà + * @param[in] masterKey МаÑтер ключ + * @param[out] keys маÑÑив развернутых ключей + * @param[in] print Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @return 0 еÑли вÑе преобразование прошло уÑпешно + * @return -1 еÑли произошла ошибка */ int DLL_IMPORT ExpandKey(unsigned char* masterKey, unsigned char* keys, printout_byte_array print); -/** @brief Âûïîëíåíèå çàøèôðîâàíèÿ áëîêà +/** @brief Выполнение Ð·Ð°ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð±Ð»Ð¾ÐºÐ° * - * @param[in] plainText Èñõîäíûé áëîê - * @param[out] chipherText Çàøèôðîâàííûé áëîê - * @param[in] keys Ðàçâåðíóòûå êëþ÷è - * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ - * @param[in] print_uint ôóíêöèÿ ëîãèðîâàíèÿ - * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî - * @return -1 åñëè ïðîèçîøëà îøèáêà + * @param[in] plainText ИÑходный блок + * @param[out] chipherText Зашифрованный блок + * @param[in] keys Развернутые ключи + * @param[in] print Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @param[in] print_uint Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @return 0 еÑли вÑе преобразование прошло уÑпешно + * @return -1 еÑли произошла ошибка */ int DLL_IMPORT Encrypt_14(unsigned char* plainText, unsigned char* chipherText, unsigned char* keys, printout_byte_array print, printout_uint_array print_uint); -/** @brief Âûïîëåíèå ðàñøèôðîâàíèÿ áëîêà +/** @brief Выполение раÑÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð±Ð»Ð¾ÐºÐ° * - * @param[in] chipherText Çàøèôðîâàííûé áëîê - * @param[out] plainText Ðàñøèôðîâàííûé áëîê - * @param[in] keys Ðàçâåðíóòûå êëþ÷è - * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ - * @param[in] print_uint ôóíêöèÿ ëîãèðîâàíèÿ - * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî - * @return -1 åñëè ïðîèçîøëà îøèáêà + * @param[in] chipherText Зашифрованный блок + * @param[out] plainText РаÑшифрованный блок + * @param[in] keys Развернутые ключи + * @param[in] print Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @param[in] print_uint Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @return 0 еÑли вÑе преобразование прошло уÑпешно + * @return -1 еÑли произошла ошибка */ int DLL_IMPORT Decrypt_14(unsigned char* chipherText, unsigned char* plainText, unsigned char* keys, printout_byte_array print, printout_uint_array print_uint); diff --git a/dap-sdk/crypto/src/GOST/28147_89.c b/dap-sdk/crypto/src/GOST/28147_89.c index 5cf2cc170208ae996da59605e6b2ed01bf982f9d..0f45378cac7b356a8b8247a52407aec8705ea979 100644 --- a/dap-sdk/crypto/src/GOST/28147_89.c +++ b/dap-sdk/crypto/src/GOST/28147_89.c @@ -1,15 +1,15 @@ /** @file - * @brief Ðåàëèçàöèÿ àëãîðèòìà 28147-89 + * @brief Ð ÐµÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð°Ð»Ð³Ð¾Ñ€Ð¸Ñ‚Ð¼Ð° 28147-89 * * @copyright InfoTeCS. All rights reserved. */ #include "28147_89.h" -/** @brief Êîíâåðòèðóåò ìàññèâ áàéò â int32 +/** @brief Конвертирует маÑÑив байт в int32 * - * @param[in] input ìàññèâ èç 4 áàéò - * @return int32 ÷èñëî + * @param[in] input маÑÑив из 4 байт + * @return int32 чиÑло */ static unsigned int uint8ToUint32(unsigned char* input) { @@ -17,10 +17,10 @@ static unsigned int uint8ToUint32(unsigned char* input) return r; } -/** @brief Êîíâåðòèðóåò int32 â ìàññèâ áàéò +/** @brief Конвертирует int32 в маÑÑив байт * - * @param[in] input int32 ÷èñëî - * @param[out] output ìàññèâ èç 4 áàéò + * @param[in] input int32 чиÑло + * @param[out] output маÑÑив из 4 байт */ static void uint32ToUint8(unsigned int input, unsigned char* output) { @@ -32,7 +32,7 @@ static void uint32ToUint8(unsigned int input, unsigned char* output) } -/** @brief Òàáëèöà ïîäñòàíîâêè id-tc26-gost-28147-param-Z OID: 1.2.643.7.1.2.5.1.1 */ +/** @brief Таблица подÑтановки id-tc26-gost-28147-param-Z OID: 1.2.643.7.1.2.5.1.1 */ unsigned char p[8][16] = { {0xc, 0x4, 0x6, 0x2, 0xa, 0x5, 0xb, 0x9, 0xe, 0x8, 0xd, 0x7, 0x0, 0x3, 0xf, 0x1}, @@ -46,13 +46,13 @@ unsigned char p[8][16] = }; -/** @brief èñïîëüçóåìûé áàéò êëþ÷à ïðè øèôðîâàíèè */ +/** @brief иÑпользуемый байт ключа при шифровании */ unsigned char kEncRoundKey[32] = { 0, 4, 8, 12, 16, 20, 24, 28, 0, 4, 8, 12, 16, 20, 24, 28, 0, 4, 8, 12, 16, 20, 24, 28, 28, 24, 20, 16, 12, 8, 4, 0 }; -/** @brief èñïîëüçóåìûé áàéò êëþ÷à ïðè ðàñøèôðîâàíèè */ +/** @brief иÑпользуемый байт ключа при раÑшифровании */ unsigned char kDecRoundKey[32] = { 0, 4, 8, 12, 16, 20, 24, 28, 28, 24, 20, 16, 12, 8, 4, 0, 28, 24, 20, 16, 12, 8, 4, 0, 28, 24, 20, 16, 12, 8, 4, 0 diff --git a/dap-sdk/crypto/src/GOST/28147_89.h b/dap-sdk/crypto/src/GOST/28147_89.h index f4c2694c1153e370bcf427f9edb5733d5e156112..a0f78eb8a7ae1be046866357be601aafddd1c2e0 100644 --- a/dap-sdk/crypto/src/GOST/28147_89.h +++ b/dap-sdk/crypto/src/GOST/28147_89.h @@ -1,5 +1,5 @@ /** @file - * @brief Îáúÿâëåíèå ôóíêöèé ðåàëèçóþùèõ ïðåîáðàçîâàíèÿ èç àëãîðèòìà "28147-89" + * @brief ОбъÑвление функций реализующих Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð· алгоритма "28147-89" * * @copyright InfoTeCS. All rights reserved. */ @@ -14,96 +14,96 @@ extern "C" { #endif -/** @brief Ôóíêöèÿ ïîäñòàíîâêè +/** @brief Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ Ð¿Ð¾Ð´Ñтановки * - * @param[in] a âõîäíîé ïàðàìåòð ïðåîáðàçîâàíèÿ - * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ - * @return ðåçóëüòàò ïðåîáðàçîâàíèÿ + * @param[in] a входной параметр Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ + * @param[in] print Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @return результат Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ */ unsigned int DLL_IMPORT funcT(unsigned int a, printout_uint_array print); -/** @brief Ïðåîáðàçîâàíèå g Èç ñòàíäàðòà +/** @brief Преобразование g Из Ñтандарта * - * @param[in] a âõîäíîé ïàðàìåòð ïðåîáðàçîâàíèÿ - * @param[in] k êëþ÷ - * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ - * @return ðåçóëüòàò ïðåîáðàçîâàíèÿ + * @param[in] a входной параметр Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ + * @param[in] k ключ + * @param[in] print Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @return результат Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ */ unsigned int DLL_IMPORT funcG(unsigned int a, unsigned int k, printout_uint_array print); -/** @brief Ïðåîáðàçîâàíèå G Èç ñòàíäàðòà +/** @brief Преобразование G Из Ñтандарта * - * @param[out] a1 óêàçàòåëü íà áóôåð, ãäå õðàíÿòñÿ äàííûå è êóäà áóäåò çàïèñàí ðåçóëüòàò - * @param[out] a0 óêàçàòåëü íà áóôåð, ãäå õðàíÿòñÿ äàííûå è êóäà áóäåò çàïèñàí ðåçóëüòàò - * @param[in] k êëþ÷ - * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ + * @param[out] a1 указатель на буфер, где хранÑÑ‚ÑÑ Ð´Ð°Ð½Ð½Ñ‹Ðµ и куда будет запиÑан результат + * @param[out] a0 указатель на буфер, где хранÑÑ‚ÑÑ Ð´Ð°Ð½Ð½Ñ‹Ðµ и куда будет запиÑан результат + * @param[in] k ключ + * @param[in] print Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ */ void DLL_IMPORT Round(unsigned int* a1, unsigned int* a0, unsigned int k, printout_uint_array print); -/** @brief Ïðåîáðàçîâàíèå G Èç ñòàíäàðòà ( íå ìåíÿÿ áëîêè à1 è à0 ìåñòàìè ) +/** @brief Преобразование G Из Ñтандарта ( не менÑÑ Ð±Ð»Ð¾ÐºÐ¸ а1 и а0 меÑтами ) * - * @param[out] a1 óêàçàòåëü íà áóôåð, ãäå õðàíÿòñÿ äàííûå è êóäà áóäåò çàïèñàí ðåçóëüòàò - * @param[out] a0 óêàçàòåëü íà áóôåð, ãäå õðàíÿòñÿ äàííûå è êóäà áóäåò çàïèñàí ðåçóëüòàò - * @param[in] k êëþ÷ - * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ + * @param[out] a1 указатель на буфер, где хранÑÑ‚ÑÑ Ð´Ð°Ð½Ð½Ñ‹Ðµ и куда будет запиÑан результат + * @param[out] a0 указатель на буфер, где хранÑÑ‚ÑÑ Ð´Ð°Ð½Ð½Ñ‹Ðµ и куда будет запиÑан результат + * @param[in] k ключ + * @param[in] print Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ */ void DLL_IMPORT RoundShtrih(unsigned int *a1, unsigned int *a0, unsigned int k, printout_uint_array print); -/** @brief Áàçîâîå êðèïòîãðàôè÷åñêîå ïðåîáðàçîâàíèå +/** @brief Базовое криптографичеÑкое преобразование * - * @param[in] input - ñîîáùåíèå ñ äëèíîþ ðàâíîé äëèíå áëîêà äàííûõ - * @param[out] output - ðåçóëüòàò îïåðàöèè - * @param[in] key êëþ÷ - * @param[in] keySequence ïîñëåäîâàòåëüíîñòü ïðèìåíåíèÿ êëþ÷åé - * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ - * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî - * @return -1 åñëè ïðîèçîøëà îøèáêà + * @param[in] input - Ñообщение Ñ Ð´Ð»Ð¸Ð½Ð¾ÑŽ равной длине блока данных + * @param[out] output - результат операции + * @param[in] key ключ + * @param[in] keySequence поÑледовательноÑÑ‚ÑŒ Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÐºÐ»ÑŽÑ‡ÐµÐ¹ + * @param[in] print Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @return 0 еÑли вÑе преобразование прошло уÑпешно + * @return -1 еÑли произошла ошибка */ int DLL_IMPORT CryptBlock(unsigned char* input, unsigned char* output, unsigned char* key, unsigned char* keySequence, printout_uint_array print); -/** @brief Øèôðóåì áëîê äàííûõ +/** @brief Шифруем блок данных * - * @param[in] input - áëîê äàííûõ îòêðûòûé òåêñò - * @param[out] output - çàøèôðîâàííûé áëîê äàííûõ - * @param[in] key êëþ÷ - * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ - * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî - * @return -1 åñëè ïðîèçîøëà îøèáêà + * @param[in] input - блок данных открытый текÑÑ‚ + * @param[out] output - зашифрованный блок данных + * @param[in] key ключ + * @param[in] print Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @return 0 еÑли вÑе преобразование прошло уÑпешно + * @return -1 еÑли произошла ошибка */ int DLL_IMPORT EncryptBlock(unsigned char* input, unsigned char* output, unsigned char* key, printout_uint_array print); -/** @brief Ðàñøèôðîâûâàåì áëîê äàííûõ +/** @brief РаÑшифровываем блок данных * - * @param[in] input - çàøèôðîâàííûé áëîê äàííûõ - * @param[out] output - ðàñøèôðîâàííûé áëîê äàííûõ - * @param[in] key êëþ÷ - * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ - * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî - * @return -1 åñëè ïðîèçîøëà îøèáêà + * @param[in] input - зашифрованный блок данных + * @param[out] output - раÑшифрованный блок данных + * @param[in] key ключ + * @param[in] print Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @return 0 еÑли вÑе преобразование прошло уÑпешно + * @return -1 еÑли произошла ошибка */ int DLL_IMPORT DecryptBlock(unsigned char* input, unsigned char* output, unsigned char* key, printout_uint_array print); -/** @brief Øèôðóåì áëîê äàííûõ +/** @brief Шифруем блок данных * - * @param[in] input - áëîê äàííûõ îòêðûòûé òåêñò - * @param[out] output - çàøèôðîâàííûé áëîê äàííûõ - * @param[in] key êëþ÷ - * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ - * @param[in] print_uint ôóíêöèÿ ëîãèðîâàíèÿ - * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî - * @return -1 åñëè ïðîèçîøëà îøèáêà + * @param[in] input - блок данных открытый текÑÑ‚ + * @param[out] output - зашифрованный блок данных + * @param[in] key ключ + * @param[in] print Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @param[in] print_uint Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @return 0 еÑли вÑе преобразование прошло уÑпешно + * @return -1 еÑли произошла ошибка */ int DLL_IMPORT Encrypt_89(unsigned char* input, unsigned char* output, unsigned char* key, printout_byte_array print, printout_uint_array print_uint); -/** @brief Ðàñøèôðîâûâàåì áëîê äàííûõ +/** @brief РаÑшифровываем блок данных * - * @param[in] input - çàøèôðîâàííûé áëîê äàííûõ - * @param[out] output - ðàñøèôðîâàííûé áëîê äàííûõ - * @param[in] key êëþ÷ - * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ - * @param[in] print_uint ôóíêöèÿ ëîãèðîâàíèÿ - * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî - * @return -1 åñëè ïðîèçîøëà îøèáêà + * @param[in] input - зашифрованный блок данных + * @param[out] output - раÑшифрованный блок данных + * @param[in] key ключ + * @param[in] print Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @param[in] print_uint Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @return 0 еÑли вÑе преобразование прошло уÑпешно + * @return -1 еÑли произошла ошибка */ int DLL_IMPORT Decrypt_89(unsigned char* input, unsigned char* output, unsigned char* key, printout_byte_array print, printout_uint_array print_uint); diff --git a/dap-sdk/crypto/src/GOST/GOST.pri b/dap-sdk/crypto/src/GOST/GOST.pri index 0136dc3c21fac8ed1b024fa393d3938381533e55..176c5281c593784d1dbd5853b8aef35a2d1ba64c 100644 --- a/dap-sdk/crypto/src/GOST/GOST.pri +++ b/dap-sdk/crypto/src/GOST/GOST.pri @@ -7,10 +7,10 @@ HEADERS += $$PWD/28147_14.h \ $$PWD/print_data.h \ $$PWD/table.h \ $$PWD/test_data.inc \ - $$PWD/block_chipher.h + $$PWD/block_cipher.h SOURCES += $$PWD/28147_14.c \ $$PWD/28147_89.c \ - $$PWD/block_chipher.c \ + $$PWD/block_cipher.c \ $$PWD/print_data.c \ $$PWD/testgost.c diff --git a/dap-sdk/crypto/src/GOST/block_chipher.h b/dap-sdk/crypto/src/GOST/block_chipher.h deleted file mode 100644 index 6dd6f1234898f69072995870a6f88de4471591da..0000000000000000000000000000000000000000 --- a/dap-sdk/crypto/src/GOST/block_chipher.h +++ /dev/null @@ -1,426 +0,0 @@ -/** @file - * @brief Îáúÿâëåíèå ôóíêöèé ðåàëèçóþùèõ ðåæèìû ðàáîòû áëî÷íûõ àëãîðèòìîâ - * - * @copyright InfoTeCS. All rights reserved. - */ - -#ifndef BLOCK_CHIPHER_H -#define BLOCK_CHIPHER_H - -#include "dll_import.h" -#include "callback_print.h" - -/** @brief Ðàçìåð êîíòåêñòà äëÿ ðåæèìà øèôðîâàíèÿ ECB àëãîðèòìà "êóçíå÷èê" */ -#define kEcb14ContextLen 0x38 - -/** @brief Ðàçìåð êîíòåêñòà äëÿ ðåæèìà øèôðîâàíèÿ ECB àëãîðèòìà 28147-89 */ -#define kEcb89ContextLen 0x38 - -/** @brief Ðàçìåð êîíòåêñòà äëÿ ðåæèìà øèôðîâàíèÿ CBC àëãîðèòìà "êóçíå÷èê" */ -#define kCbc14ContextLen 0x60 - -/** @brief Ðàçìåð êîíòåêñòà äëÿ ðåæèìà øèôðîâàíèÿ CBC àëãîðèòìà 28147-89 */ -#define kCbc89ContextLen 0x60 - -/** @brief Ðàçìåð êîíòåêñòà äëÿ ðåæèìà øèôðîâàíèÿ CTR àëãîðèòìà "êóçíå÷èê" */ -#define kCtr14ContextLen 0x48 - -/** @brief Ðàçìåð êîíòåêñòà äëÿ ðåæèìà øèôðîâàíèÿ CTR àëãîðèòìà 28147-89 */ -#define kCtr89ContextLen 0x48 - -/** @brief Ðàçìåð êîíòåêñòà äëÿ ðåæèìà øèôðîâàíèÿ OFB àëãîðèòìà "êóçíå÷èê" */ -#define kOfb14ContextLen 0x60 - -/** @brief Ðàçìåð êîíòåêñòà äëÿ ðåæèìà øèôðîâàíèÿ OFB àëãîðèòìà 28147-89 */ -#define kOfb89ContextLen 0x60 - -/** @brief Ðàçìåð êîíòåêñòà äëÿ ðåæèìà øèôðîâàíèÿ CFB àëãîðèòìà "êóçíå÷èê" */ -#define kCfb14ContextLen 0x60 - -/** @brief Ðàçìåð êîíòåêñòà äëÿ ðåæèìà øèôðîâàíèÿ CFB àëãîðèòìà 28147-89 */ -#define kCfb89ContextLen 0x60 - -/** @brief Ðàçìåð êîíòåêñòà äëÿ ðåæèìà ôîðìèðîâàíèÿ èìèòîâñòàâêè àëãîðèòìà "êóçíå÷èê" */ -#define kImit14ContextLen 0x88 - -/** @brief Ðàçìåð êîíòåêñòà äëÿ ðåæèìà ôîðìèðîâàíèÿ èìèòîâñòàâêè àëãîðèòìà 28147-89 */ -#define kImit89ContextLen 0x88 - -/** @brief Ðàçìåð áëîêà àëãîðèòìà "êóçíå÷èê" */ -#define kBlockLen14 16 - -/** @brief Ðàçìåð áëîêà àëãîðèòìà 28147-89 */ -#define kBlockLen89 8 - -/** @brief Ðàçìåð êëþ÷à àëãîðèòìà "êóçíå÷èê" */ -#define kKeyLen14 32 - -/** @brief Ðàçìåð êëþ÷à àëãîðèòìà 28147-89 */ -#define kKeyLen89 32 - -#ifdef __cplusplus -extern "C" { -#endif - -/* *** Ðåæèìû øèôðîâàíèÿ *** - * Ðåæèìû øèôðîâàíèÿ ðàáîòàþò ñ èñïîëüçîâàíèåì áàçîâîãî - * êðèïòîãðàôè÷åñêîãî ïðåîáðàçîâàíèÿ - */ - -/** @brief Èíèöèàëèçàöèÿ êîíòåêñòà øèôðîâàíèÿ â ðåæèìå ECB äëÿ àëãîðèòìà "êóçíå÷èê" - * - * @param[in] key êëþ÷ - * @param[out] ctx êîíòåêñò cbc - * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ - * @param[in] print_uint ôóíêöèÿ ëîãèðîâàíèÿ - * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî - * @return -1 åñëè ïðîèçîøëà îøèáêà - */ -int DLL_IMPORT init_ecb_14(unsigned char *key, void* ctx, printout_byte_array print, printout_uint_array print_uint); - -/** @brief Èíèöèàëèçàöèÿ êîíòåêñòà øèôðîâàíèÿ â ðåæèìå ECB äëÿ àëãîðèòìà 28147-89 - * - * @param[in] key êëþ÷ - * @param[out] ctx êîíòåêñò cbc - * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ - * @param[in] print_uint ôóíêöèÿ ëîãèðîâàíèÿ - * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî - * @return -1 åñëè ïðîèçîøëà îøèáêà - */ -int DLL_IMPORT init_ecb_89(unsigned char *key, void* ctx, printout_byte_array print, printout_uint_array print_uint); - -/** @brief Óäàëåíèå êîíòåêñòà ecb - * - * @param[in] ctx êîíòåêñò ecb - * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî - * @return -1 åñëè ïðîèçîøëà îøèáêà - */ -void DLL_IMPORT free_ecb(void* ctx); - -/** @brief Èíèöèàëèçàöèÿ êîíòåêñòà øèôðîâàíèÿ â ðåæèìå CBC äëÿ àëãîðèòìà "êóçíå÷èê" - * - * @param[in] key êëþ÷ - * @param[out] ctx êîíòåêñò cbc - * @param[in] iv ñèíõðîïîñûëêà - * @param[in] ivLength äëèíà ñèíõðîïîñûëêè - * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ - * @param[in] print_uint ôóíêöèÿ ëîãèðîâàíèÿ - * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî - * @return -1 åñëè ïðîèçîøëà îøèáêà - */ -int DLL_IMPORT init_cbc_14(unsigned char *key, void* ctx, unsigned char *iv, size_t ivLength, printout_byte_array print, printout_uint_array print_uint); - -/** @brief Èíèöèàëèçàöèÿ êîíòåêñòà øèôðîâàíèÿ â ðåæèìå CBC äëÿ àëãîðèòìà 28147-89 - * - * @param[in] key êëþ÷ - * @param[out] ctx êîíòåêñò cbc - * @param[in] iv ñèíõðîïîñûëêà - * @param[in] ivLength äëèíà ñèíõðîïîñûëêè - * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ - * @param[in] print_uint ôóíêöèÿ ëîãèðîâàíèÿ - * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî - * @return -1 åñëè ïðîèçîøëà îøèáêà - */ -int DLL_IMPORT init_cbc_89(unsigned char *key, void* ctx, unsigned char *iv, size_t ivLength, printout_byte_array print, printout_uint_array print_uint); - -/** @brief Óäàëåíèå êîíòåêñòà cbc - * - * @param[in] ctx êîíòåêñò cbc - * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî - * @return -1 åñëè ïðîèçîøëà îøèáêà - */ -void DLL_IMPORT free_cbc(void* ctx); - -/** @brief Èíèöèàëèçàöèÿ êîíòåêñòà øèôðîâàíèÿ â ðåæèìå CTR äëÿ àëãîðèòìà "êóçíå÷èê" - * - * @param[in] key êëþ÷ - * @param[out] ctx êîíòåêñò ctr - * @param[in] iv ñèíõðîïîñûëêà - * @param[in] length äëèíà ñèíõðîïîñûëêè - * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ - * @param[in] print_uint ôóíêöèÿ ëîãèðîâàíèÿ - * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî - * @return -1 åñëè ïðîèçîøëà îøèáêà - */ -int DLL_IMPORT init_ctr_14(unsigned char* key, unsigned char *iv, size_t length, void *ctx, printout_byte_array print, printout_uint_array print_uint); - -/** @brief Èíèöèàëèçàöèÿ êîíòåêñòà øèôðîâàíèÿ â ðåæèìå CTR äëÿ àëãîðèòìà 28147-89 - * - * @param[in] key êëþ÷ - * @param[out] ctx êîíòåêñò ctr - * @param[in] iv ñèíõðîïîñûëêà - * @param[in] length äëèíà ñèíõðîïîñûëêè - * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ - * @param[in] print_uint ôóíêöèÿ ëîãèðîâàíèÿ - * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî - * @return -1 åñëè ïðîèçîøëà îøèáêà - */ -int DLL_IMPORT init_ctr_89(unsigned char* key, unsigned char *iv, size_t length, void *ctx, printout_byte_array print, printout_uint_array print_uint); - -/** @brief Óäàëåíèå êîíòåêñòà ctr - * - * @param[in] ctx êîíòåêñò ctr - * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî - * @return -1 åñëè ïðîèçîøëà îøèáêà - */ -void DLL_IMPORT free_ctr(void* ctx); - -/** @brief Èíèöèàëèçàöèÿ êîíòåêñòà øèôðîâàíèÿ â ðåæèìå OFB äëÿ àëãîðèòìà "êóçíå÷èê" - * - * @param[in] key êëþ÷ - * @param[out] ctx êîíòåêñò ofb - * @param[in] s ïàðàìåòð S - * @param[in] iv ñèíõðîïîñûëêà - * @param[in] ivLength äëèíà ñèíõðîïîñûëêè - * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ - * @param[in] print_uint ôóíêöèÿ ëîãèðîâàíèÿ - * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî - * @return -1 åñëè ïðîèçîøëà îøèáêà - */ -int DLL_IMPORT init_ofb_14(unsigned char *key, void *ctx, size_t s, unsigned char *iv, size_t ivLength, printout_byte_array print, printout_uint_array print_uint); - -/** @brief Èíèöèàëèçàöèÿ êîíòåêñòà øèôðîâàíèÿ â ðåæèìå OFB äëÿ àëãîðèòìà 28147-89 - * - * @param[in] key êëþ÷ - * @param[out] ctx êîíòåêñò ofb - * @param[in] s ïàðàìåòð S - * @param[in] iv ñèíõðîïîñûëêà - * @param[in] ivLength äëèíà ñèíõðîïîñûëêè - * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ - * @param[in] print_uint ôóíêöèÿ ëîãèðîâàíèÿ - * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî - * @return -1 åñëè ïðîèçîøëà îøèáêà - */ -int DLL_IMPORT init_ofb_89(unsigned char *key, void *ctx, size_t s, unsigned char *iv, size_t ivLength, printout_byte_array print, printout_uint_array print_uint); - -/** @brief Óäàëåíèå êîíòåêñòà ofb - * - * @param[in] ctx êîíòåêñò ofb - * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî - * @return -1 åñëè ïðîèçîøëà îøèáêà - */ -void DLL_IMPORT free_ofb(void* ctx); - -/** @brief Èíèöèàëèçàöèÿ êîíòåêñòà øèôðîâàíèÿ â ðåæèìå CFB äëÿ àëãîðèòìà "êóçíå÷èê" - * - * @param[in] key êëþ÷ - * @param[out] ctx êîíòåêñò cfb - * @param[in] s ïàðàìåòð S - * @param[in] iv ñèíõðîïîñûëêà - * @param[in] ivLength äëèíà ñèíõðîïîñûëêè - * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ - * @param[in] print_uint ôóíêöèÿ ëîãèðîâàíèÿ - * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî - * @return -1 åñëè ïðîèçîøëà îøèáêà - */ -int DLL_IMPORT init_cfb_14(unsigned char *key, void *ctx, size_t s, unsigned char *iv, size_t ivLength, printout_byte_array print, printout_uint_array print_uint); - -/** @brief Èíèöèàëèçàöèÿ êîíòåêñòà øèôðîâàíèÿ â ðåæèìå CFB äëÿ àëãîðèòìà 28147-89 - * - * @param[in] key êëþ÷ - * @param[out] ctx êîíòåêñò cfb - * @param[in] s ïàðàìåòð S - * @param[in] iv ñèíõðîïîñûëêà - * @param[in] ivLength äëèíà ñèíõðîïîñûëêè - * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ - * @param[in] print_uint ôóíêöèÿ ëîãèðîâàíèÿ - * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî - * @return -1 åñëè ïðîèçîøëà îøèáêà - */ -int DLL_IMPORT init_cfb_89(unsigned char *key, void *ctx, size_t s, unsigned char *iv, size_t ivLength, printout_byte_array print, printout_uint_array print_uint); - -/** @brief Óäàëåíèå êîíòåêñòà cfb - * - * @param[in] ctx êîíòåêñò cfb - * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî - * @return -1 åñëè ïðîèçîøëà îøèáêà - */ -void DLL_IMPORT free_cfb(void* ctx); - -/** @brief Èíèöèàëèçàöèÿ êîíòåêñòà èìòîâñòàâêè äëÿ àëãîðèòìà "êóçíå÷èê" - * - * @param[out] ctx êîíòåêñò èìèòîâñòàâêè - * @param[in] key êëþ÷ - * @param[in] s ïàðàìåòð S - * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ - * @param[in] print_uint ôóíêöèÿ ëîãèðîâàíèÿ - * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî - * @return -1 åñëè ïðîèçîøëà îøèáêà - */ -int DLL_IMPORT init_imit_14(unsigned char *key, size_t s, void *ctx, printout_byte_array print, printout_uint_array print_uint); - -/** @brief Èíèöèàëèçàöèÿ êîíòåêñòà èìòîâñòàâêè äëÿ àëãîðèòìà 28147-89 - * - * @param[in] key êëþ÷ - * @param[in] s ïàðàìåòð S - * @param[out] ctx êîíòåêñò èìèòîâñòàâêè - * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ - * @param[in] print_uint ôóíêöèÿ ëîãèðîâàíèÿ - * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî - * @return -1 åñëè ïðîèçîøëà îøèáêà - */ -int DLL_IMPORT init_imit_89(unsigned char *key, size_t s, void *ctx, printout_byte_array print, printout_uint_array print_uint); - -/** @brief Óäàëåíèå êîíòåêñòà èìèòîâñòàâêè - * - * @param[in] ctx êîíòåêñò èìèòîâñòàâêè - * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî - * @return -1 åñëè ïðîèçîøëà îøèáêà - */ -void DLL_IMPORT free_imit(void* ctx); - -/** @brief Âûïîëíåíèå çàøèôðîâàíèÿ èíôîðìàöèè â ðåæèìå ïðîñòîé çàìåíû äëÿ äàííûõ êðàòíûõ ðàçìåðó áëîêà - * - * @param[in] ctx êîíòåêñò ECB - * @param[in] indata îòêðûòûé òåêñò - * @param[out] outdata çàøèôðîâàííûé òåêñò - * @param[in] length äëèíà òåêñòà - * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî - * @return -1 åñëè ïðîèçîøëà îøèáêà - */ -int DLL_IMPORT encrypt_ecb(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t length); - -/** @brief Âûïîëíåíèå ðàñøèôðîâàíèÿ èíôîðìàöèè â ðåæèìå ïðîñòîé çàìåíû äëÿ äàííûõ êðàòíûõ ðàçìåðó áëîêà - * - * @param[in] ctx êîíòåêñò ECB - * @param[in] indata îòêðûòûé òåêñò - * @param[out] outdata çàøèôðîâàííûé òåêñò - * @param[in] length äëèíà òåêñòà - * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî - * @return -1 åñëè ïðîèçîøëà îøèáêà - */ -int DLL_IMPORT decrypt_ecb(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t length); - -/** @brief Âûïîëíåíèå çàøèôðîâàíèÿ èíôîðìàöèè â ðåæèìå ïðîñòîé çàìåíû ñ çàöåïëåíèåì äëÿ äàííûõ êðàòíûõ ðàçìåðó áëîêà - * - * @param[in] ctx êîíòåêñò CBC - * @param[in] indata îòêðûòûé òåêñò - * @param[out] outdata çàøèôðîâàííûé òåêñò - * @param[in] length äëèíà òåêñòà - * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî - * @return -1 åñëè ïðîèçîøëà îøèáêà - */ -int DLL_IMPORT encrypt_cbc(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t length); - -/** @brief Âûïîëíåíèå ðñøèôðîâàíèÿ èíôîðìàöèè â ðåæèìå ïðîñòîé çàìåíû ñ çàöåïëåíèåì äëÿ äàííûõ êðàòíûõ ðàçìåðó áëîêà - * - * @param[in] ctx êîíòåêñò CBC - * @param[in] indata çàøèôðîâàííûé òåêñò - * @param[out] outdata ðàñøèôðîâàííûé òåêñò - * @param[in] length äëèíà òåêñòà - * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî - * @return -1 åñëè ïðîèçîøëà îøèáêà - */ -int DLL_IMPORT decrypt_cbc(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t length); - -/** @brief Âûïîëíåíèå øèôðîâàíèÿ (çàøèôðîâàíèÿ èëè ðàñøèôðîâàíèÿ) â ðåæèìå ãàììèðîâàíèÿ - * @details íåïîëíûì áëîêîì ìîæåò áûòü òîëüêî ïîñëåäíèé áëîê, ïðè ïîïûòêå øèôðîâàíèÿ ïîñëå ïåðåäà÷è íåïîëíîãî áëîêà âîçâðàùàåòñÿ îøèáêà - * - * @param[in] ctx êîíòåêñò CTR - * @param[in] indata âõîäíîå ñîîáùåíèå - * @param[out] outdata ðåçóëüòàò - * @param[in] length äëèíà ñîîáùåíèÿ - * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî - * @return -1 åñëè ïðîèçîøëà îøèáêà - */ -int DLL_IMPORT crypt_ctr(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t length); - -/** @brief Âûïîëíåíèå øàãîâîé øèôðîâàíèÿ èíôîðìàöèè â ðåæèìå ãàììèðîâàíèÿ ñ îáðàòíîé ñâÿçüþ - * @details íåïîëíûì áëîêîì ìîæåò áûòü òîëüêî ïîñëåäíèé áëîê, ïðè ïîïûòêå øèôðîâàíèÿ ïîñëå ïåðåäà÷è íåïîëíîãî áëîêà âîçâðàùàåòñÿ îøèáêà - * - * @param[in] ctx êîíòåêñò OFB - * @param[in] indata âõîäíîé áëîê - * @param[out] outdata ðåçóëüòàò ïðåîáðàçîâàíèÿ - * @param[in] inlength äëèíà òåêñòà - * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî - * @return -1 åñëè ïðîèçîøëà îøèáêà - */ -int DLL_IMPORT crypt_ofb(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t inlength); - -/** @brief Âûïîëíåíèå çàøèôðîâàíèÿ èíôîðìàöèè â ðåæèìå ãàììèðîâàíèÿ ñ îáðàòíîé ñâÿçüþ - * - * @param[in] ctx êîíòåêñò OFB - * @param[in] indata îòêðûòûé òåêñò - * @param[out] outdata çàøèôðîâàííûé òåêñò - * @param[in] inlength äëèíà òåêñòà - * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî - * @return -1 åñëè ïðîèçîøëà îøèáêà - */ -int DLL_IMPORT encrypt_ofb(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t inlength); - -/** @brief Âûïîëíåíèå ðàñøèôðîâàíèÿ èíôîðìàöèè â ðåæèìå ãàììèðîâàíèÿ ñ îáðàòíîé ñâÿçüþ - * - * @param[in] ctx êîíòåêñò OFB - * @param[in] indata çàøèôðîâàííûé òåêñò - * @param[out] outdata ðàñøèôðîâàííûé òåêñò - * @param[in] inlength äëèíà òåêñòà - * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî - * @return -1 åñëè ïðîèçîøëà îøèáêà - */ -int DLL_IMPORT decrypt_ofb(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t inlength); - -/** @brief Âûïîëíåíèå çàøèôðîâàíèÿ èíôîðìàöèè â ðåæèìå ãàììèðîâàíèÿ ñ îáðàòíîé ñâÿçüþ ïî øèôðòåêñòó - * @details íåïîëíûì áëîêîì ìîæåò áûòü òîëüêî ïîñëåäíèé áëîê, ïðè ïîïûòêå øèôðîâàíèÿ ïîñëå ïåðåäà÷è íåïîëíîãî áëîêà âîçâðàùàåòñÿ îøèáêà - * - * @param[in] ctx êîíòåêñò CFB - * @param[in] indata îòêðûòûé òåêñò - * @param[out] outdata çàøèôðîâàííûé òåêñò - * @param[in] inlength äëèíà òåêñòà - * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî - * @return -1 åñëè ïðîèçîøëà îøèáêà - */ -int DLL_IMPORT encrypt_cfb(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t inlength); - -/** @brief Âûïîëíåíèå ðàñøèôðîâàíèÿ èíôîðìàöèè â ðåæèìå ãàììèðîâàíèÿ ñ îáðàòíîé ñâÿçüþ ïî øèôðòåêñòó - * @details íåïîëíûì áëîêîì ìîæåò áûòü òîëüêî ïîñëåäíèé áëîê, ïðè ïîïûòêå øèôðîâàíèÿ ïîñëå ïåðåäà÷è íåïîëíîãî áëîêà âîçâðàùàåòñÿ îøèáêà - * - * @param[in] ctx êîíòåêñò CFB - * @param[in] indata çàøèôðîâàííûé òåêñò - * @param[out] outdata ðàñøèôðîâàííûé òåêñò - * @param[in] inlength äëèíà òåêñòà - * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî - * @return -1 åñëè ïðîèçîøëà îøèáêà - */ -int DLL_IMPORT decrypt_cfb(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t inlength); - -/** @brief Âûïîëíåíèå âû÷èñëåíèÿ èìèòîâñòàâêè ïî äàííûì êðàòíûì ðàçìåðó áëîêà - * - * @param[in] ctx êîíòåêñò èìèòîâñòàâêè - * @param[in] indata îòêðûòûé òåêñò - * @param[in] length äëèíà òåêñòà - * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî - * @return -1 åñëè ïðîèçîøëà îøèáêà - */ -int DLL_IMPORT imit(void *ctx, unsigned char *indata, size_t length); - -/** @brief Çàâåðøåíèå âûðîáîòêè èìèòîâñòàâêè - * - * @param[in] ctx êîíòåêñò èìèòîâñòàâêè - * @param[out] value - * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî - * @return -1 åñëè ïðîèçîøëà îøèáêà - */ -int DLL_IMPORT done_imit(void *ctx, unsigned char *value); - -/** @brief Äîïîëíåíèå äàííûõ äî ðàçìåðà áëîêà. - * - * @param[in] data ñîîáùåíèå. Ïàìÿòü ïîä äàííûå data äîëæíà áûòü âûäåëåíà äîñòàòî÷íàÿ äëÿ äîïîëíåíèÿ. - * @param[in] length ðàçìåð ñîîáùåíèÿ - * @param[in] blockLen äëèíà áëîêà - * @return ðàçìåð ñîîáùåíèÿ - */ -size_t DLL_IMPORT padd(unsigned char *data, size_t length, size_t blockLen); - -/** @brief Óäàëåíèå äîïîëíåííûõ äàííûõ. Ïðè îøèáêàõ âîçâðàùàåòñÿ çíà÷åíèå -1 - * - * @param[in] data ñîîáùåíèå - * @param[in] length ðàçìåð ñîîáùåíèÿ - * @return ðàçìåð ñîîáùåíèÿ - */ -size_t DLL_IMPORT unpadd(unsigned char *data, size_t length); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/dap-sdk/crypto/src/GOST/block_chipher.c b/dap-sdk/crypto/src/GOST/block_cipher.c similarity index 87% rename from dap-sdk/crypto/src/GOST/block_chipher.c rename to dap-sdk/crypto/src/GOST/block_cipher.c index 0bd604f81b6af07ba539daeef362e65b6157ac09..80ad6231dc1223690e19b9c84ceac0eea9dafe12 100644 --- a/dap-sdk/crypto/src/GOST/block_chipher.c +++ b/dap-sdk/crypto/src/GOST/block_cipher.c @@ -1,5 +1,5 @@ /** @file -* @brief Ðåàëèçàöèÿ ðåæèìîâ ðàáîòû áëî÷íûõ àëãîðèòìîâ +* @brief Ð ÐµÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð¾Ð² работы блочных алгоритмов * * @copyright InfoTeCS. All rights reserved. */ @@ -11,164 +11,164 @@ #include "28147_14.h" #include "28147_89.h" -#include "block_chipher.h" +#include "block_cipher.h" -/** @brief îïðåäåëåíèå âíóòðåííåãî àññåðòà */ +/** @brief определение внутреннего аÑÑерта */ #define INFOTECS_ASSERT(e) typedef char __C_ASSERT__[(e)?1:-1] -/** @brief ðàçìåð òåñòîâûõ äàííûõ äëÿ àëãîðèòìà "êóçíå÷èê" */ +/** @brief размер теÑтовых данных Ð´Ð»Ñ Ð°Ð»Ð³Ð¾Ñ€Ð¸Ñ‚Ð¼Ð° "кузнечик" */ #define textLen14 sizeof(kSeltTestGost14PlainText)/sizeof(kSeltTestGost14PlainText[0]) -/** @brief ðàçìåð òåñòîâûõ äàííûõ äëÿ àëãîðèòìà 28147-89 */ +/** @brief размер теÑтовых данных Ð´Ð»Ñ Ð°Ð»Ð³Ð¾Ñ€Ð¸Ñ‚Ð¼Ð° 28147-89 */ #define textLen89 sizeof(kSeltTestGost89PlainText)/sizeof(kSeltTestGost89PlainText[0]) -/** @brief Ïðèçíàê àëãîðèòìà "Êóçíå÷èê" */ +/** @brief Признак алгоритма "Кузнечик" */ const unsigned char kAlg14 = 1; -/** @brief Ïðèçíàê àëãîðèòìà 28147-89 */ +/** @brief Признак алгоритма 28147-89 */ const unsigned char kAlg89 = 2; -/** @brief óêàçàòåëü íà ôóíêöèþ øèôðîâàíèÿ */ +/** @brief указатель на функцию ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ */ typedef int (DLL_IMPORT *pEncrypt)(unsigned char* plainText, unsigned char* chipherText, unsigned char* keys, printout_byte_array print, printout_uint_array print_uint); -/** @brief óêàçàòåëü íà ôóíêöèþ ðàñøèôðîâàíèÿ */ +/** @brief указатель на функцию раÑÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ */ typedef int (DLL_IMPORT *pDecrypt)(unsigned char* chipherText, unsigned char* plainText, unsigned char* keys, printout_byte_array print, printout_uint_array print_uint); -/** @brief Ôóíêöèÿ ñàìîòåñòèðîâàíèÿ ðåæèìà ECB */ +/** @brief Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ ÑамотеÑÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° ECB */ static int SelfTestGost14Ecb(); -/** @brief Ôóíêöèÿ ñàìîòåñòèðîâàíèÿ ðåæèìà ECB */ +/** @brief Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ ÑамотеÑÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° ECB */ static int SelfTestGost89Ecb(); -/** @brief Ôóíêöèÿ ñàìîòåñòèðîâàíèÿ ðåæèìà CTR */ +/** @brief Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ ÑамотеÑÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° CTR */ static int SelfTestGost14Ctr(); -/** @brief Ôóíêöèÿ ñàìîòåñòèðîâàíèÿ ðåæèìà CTR */ +/** @brief Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ ÑамотеÑÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° CTR */ static int SelfTestGost89Ctr(); -/** @brief Ôóíêöèÿ ñàìîòåñòèðîâàíèÿ ðåæèìà OFB */ +/** @brief Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ ÑамотеÑÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° OFB */ static int SelfTestGost14Ofb(); -/** @brief Ôóíêöèÿ ñàìîòåñòèðîâàíèÿ ðåæèìà OFB */ +/** @brief Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ ÑамотеÑÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° OFB */ static int SelfTestGost89Ofb(); -/** @brief Ôóíêöèÿ ñàìîòåñòèðîâàíèÿ ðåæèìà CBC */ +/** @brief Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ ÑамотеÑÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° CBC */ static int SelfTestGost14Cbc(); -/** @brief Ôóíêöèÿ ñàìîòåñòèðîâàíèÿ ðåæèìà CBC */ +/** @brief Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ ÑамотеÑÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° CBC */ static int SelfTestGost89Cbc(); -/** @brief Ôóíêöèÿ ñàìîòåñòèðîâàíèÿ ðåæèìà CFB */ +/** @brief Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ ÑамотеÑÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° CFB */ static int SelfTestGost14Cfb(); -/** @brief Ôóíêöèÿ ñàìîòåñòèðîâàíèÿ ðåæèìà CFB */ +/** @brief Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ ÑамотеÑÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° CFB */ static int SelfTestGost89Cfb(); -/** @brief Ôóíêöèÿ ñàìîòåñòèðîâàíèÿ ðåæèìà èìèòîâñòàâêè */ +/** @brief Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ ÑамотеÑÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° имитовÑтавки */ static int SelfTestGost14Imit(); -/** @brief Ôóíêöèÿ ñàìîòåñòèðîâàíèÿ ðåæèìà èìèòîâñòàâêè */ +/** @brief Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ ÑамотеÑÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° имитовÑтавки */ static int SelfTestGost89Imit(); -/** @brief Ñäâèã âëåâî íà 1 áèò */ +/** @brief Сдвиг влево на 1 бит */ static void ShifttLeftOne(unsigned char *r, size_t length); -/** @brief Êîíòåêñò ECB */ +/** @brief КонтекÑÑ‚ ECB */ typedef struct { - unsigned char Alg; /**< èäåíòèôèêàòîð àëãîðèòìà */ - unsigned char* Keys; /**< êëþ÷ */ - unsigned int BlockLen; /**< ðàçìåð áëîêà */ - printout_byte_array PrintByteArray; /**< ôóíêöèÿ ëîãèðîâàíèÿ */ - printout_uint_array PrintUIntArray; /**< ôóíêöèÿ ëîãèðîâàíèÿ */ - pEncrypt EncryptFunc; /**< ôóíêöèÿ øèôðîâàíèÿ */ - pDecrypt DecryptFunc; /**< ôóíêöèÿ ðàñøèôðîâàíèÿ */ + unsigned char Alg; /**< идентификатор алгоритма */ + unsigned char* Keys; /**< ключ */ + unsigned int BlockLen; /**< размер блока */ + printout_byte_array PrintByteArray; /**< Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ */ + printout_uint_array PrintUIntArray; /**< Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ */ + pEncrypt EncryptFunc; /**< Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ */ + pDecrypt DecryptFunc; /**< Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ñ€Ð°ÑÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ */ } Context_ecb; -/** @brief Êîíòåêñò CTR */ +/** @brief КонтекÑÑ‚ CTR */ typedef struct { - unsigned char Alg; /**< èäåíòèôèêàòîð àëãîðèòìà */ - unsigned char* Counter; /**< ñ÷åò÷èê */ - unsigned char* Keys; /**< êëþ÷ */ - size_t S; /**< ðàçìåð ñèíõðîïîñûëêè */ - size_t BlockLen; /**< ðàçìåð áëîêà */ - printout_byte_array PrintByteArray; /**< ôóíêöèÿ ëîãèðîâàíèÿ */ - printout_uint_array PrintUIntArray; /**< ôóíêöèÿ ëîãèðîâàíèÿ */ - pEncrypt EncryptFunc; /**< ôóíêöèÿ øèôðîâàíèÿ */ - unsigned char *tmpblock; /**< âðåìåííûé áëîê */ + unsigned char Alg; /**< идентификатор алгоритма */ + unsigned char* Counter; /**< Ñчетчик */ + unsigned char* Keys; /**< ключ */ + size_t S; /**< размер ÑинхропоÑылки */ + size_t BlockLen; /**< размер блока */ + printout_byte_array PrintByteArray; /**< Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ */ + printout_uint_array PrintUIntArray; /**< Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ */ + pEncrypt EncryptFunc; /**< Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ */ + unsigned char *tmpblock; /**< временный блок */ } Context_ctr; -/** @brief Êîíòåêñò OFB */ +/** @brief КонтекÑÑ‚ OFB */ typedef struct { - unsigned char Alg; /**< èäåíòèôèêàòîð àëãîðèòìà */ - unsigned char* IV; /**< ñèíõðîïîñûëêà */ - unsigned char* Keys; /**< êëþ÷ */ - size_t M; /**< ðàçìåð ñèíõðïîñûëêè */ - size_t S; /**< ïàðàìåòð S */ - size_t BlockLen; /**< ðàçìåð áëîêà */ - printout_byte_array PrintByteArray; /**< ôóíêöèÿ ëîãèðîâàíèÿ */ - printout_uint_array PrintUIntArray; /**< ôóíêöèÿ ëîãèðîâàíèÿ */ - pEncrypt EncryptFunc; /**< ôóíêöèÿ øèôðîâàíèÿ */ - pDecrypt DecryptFunc; /**< ôóíêöèÿ ðàñøèôðîâàíèÿ */ - unsigned char *tmpblock; /**< âðåìåííûé áëîê */ - unsigned char* nextIV; /**< ñèíõðîïîñûëêà äëÿ ñëåäóþùåãî áëîêà */ + unsigned char Alg; /**< идентификатор алгоритма */ + unsigned char* IV; /**< ÑинхропоÑылка */ + unsigned char* Keys; /**< ключ */ + size_t M; /**< размер ÑинхрпоÑылки */ + size_t S; /**< параметр S */ + size_t BlockLen; /**< размер блока */ + printout_byte_array PrintByteArray; /**< Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ */ + printout_uint_array PrintUIntArray; /**< Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ */ + pEncrypt EncryptFunc; /**< Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ */ + pDecrypt DecryptFunc; /**< Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ñ€Ð°ÑÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ */ + unsigned char *tmpblock; /**< временный блок */ + unsigned char* nextIV; /**< ÑинхропоÑылка Ð´Ð»Ñ Ñледующего блока */ } Context_ofb; -/** @brief Êîíòåêñò CFB */ +/** @brief КонтекÑÑ‚ CFB */ typedef struct { - unsigned char Alg; /**< èäåíòèôèêàòîð àëãîðèòìà */ - unsigned char* IV; /**< ñèíõðîïîñûëêà */ - unsigned char* Keys; /**< êëþ÷ */ - size_t M; /**< ðàçìåð ñèíõðïîñûëêè */ - size_t S; /**< ïàðàìåòð S */ - size_t BlockLen; /**< ðàçìåð áëîêà */ - printout_byte_array PrintByteArray; /**< ôóíêöèÿ ëîãèðîâàíèÿ */ - printout_uint_array PrintUIntArray; /**< ôóíêöèÿ ëîãèðîâàíèÿ */ - pEncrypt EncryptFunc; /**< ôóíêöèÿ øèôðîâàíèÿ */ - pDecrypt DecryptFunc; /**< ôóíêöèÿ ðàñøèôðîâàíèÿ */ - unsigned char *tmpblock; /**< âðåìåííûé áëîê */ - unsigned char* nextIV; /**< ñèíõðîïîñûëêà äëÿ ñëåäóþùåãî áëîêà */ + unsigned char Alg; /**< идентификатор алгоритма */ + unsigned char* IV; /**< ÑинхропоÑылка */ + unsigned char* Keys; /**< ключ */ + size_t M; /**< размер ÑинхрпоÑылки */ + size_t S; /**< параметр S */ + size_t BlockLen; /**< размер блока */ + printout_byte_array PrintByteArray; /**< Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ */ + printout_uint_array PrintUIntArray; /**< Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ */ + pEncrypt EncryptFunc; /**< Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ */ + pDecrypt DecryptFunc; /**< Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ñ€Ð°ÑÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ */ + unsigned char *tmpblock; /**< временный блок */ + unsigned char* nextIV; /**< ÑинхропоÑылка Ð´Ð»Ñ Ñледующего блока */ } Context_cfb; -/** @brief Êîíòåêñò CBC */ +/** @brief КонтекÑÑ‚ CBC */ typedef struct { - unsigned char Alg; /**< èäåíòèôèêàòîð àëãîðèòìà */ - unsigned char* IV; /**< ñèíõðîïîñûëêà */ - unsigned char* Keys; /**< êëþ÷ */ - size_t BlockLen; /**< ðàçìåð áëîêà */ - size_t M; /**< ðàçìåð ñèíõðïîñûëêè */ - printout_byte_array PrintByteArray; /**< ôóíêöèÿ ëîãèðîâàíèÿ */ - printout_uint_array PrintUIntArray; /**< ôóíêöèÿ ëîãèðîâàíèÿ */ - pEncrypt EncryptFunc; /**< ôóíêöèÿ øèôðîâàíèÿ */ - pDecrypt DecryptFunc; /**< ôóíêöèÿ ðàñøèôðîâàíèÿ */ - unsigned char* nextIV; /**< ñèíõðîïîñûëêà äëÿ ñëåäóþùåãî áëîêà */ - unsigned char* tempIV; /**< äëÿ âðåìåííîãî õðàíåíèÿ çíà÷åíèÿ ñèíõðîïîñûëêè */ - unsigned char *tmpblock; /**< âðåìåííûé áëîê */ + unsigned char Alg; /**< идентификатор алгоритма */ + unsigned char* IV; /**< ÑинхропоÑылка */ + unsigned char* Keys; /**< ключ */ + size_t BlockLen; /**< размер блока */ + size_t M; /**< размер ÑинхрпоÑылки */ + printout_byte_array PrintByteArray; /**< Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ */ + printout_uint_array PrintUIntArray; /**< Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ */ + pEncrypt EncryptFunc; /**< Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ */ + pDecrypt DecryptFunc; /**< Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ñ€Ð°ÑÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ */ + unsigned char* nextIV; /**< ÑинхропоÑылка Ð´Ð»Ñ Ñледующего блока */ + unsigned char* tempIV; /**< Ð´Ð»Ñ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð³Ð¾ Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ ÑинхропоÑылки */ + unsigned char *tmpblock; /**< временный блок */ } Context_cbc; -/** @brief Êîíòåêñò èìèòîâñòàâêè */ +/** @brief КонтекÑÑ‚ имитовÑтавки */ typedef struct { - unsigned char Alg; /**< èäåíòèôèêàòîð àëãîðèòìà */ - unsigned char* Keys; /**< êëþ÷ */ - unsigned char* K1; /**< âñïîìîãàòåëüíûé ïàðàìåòð K1 */ - unsigned char* K2; /**< âñïîìîãàòåëüíûé ïàðàìåòð K2 */ - unsigned char* B; /**< âñïîìîãàòåëüíûé ïàðàìåòð B */ - unsigned char* R; /**< âñïîìîãàòåëüíûé ïàðàìåòð R */ - unsigned char* C; /**< âñïîìîãàòåëüíûé ïàðàìåòð C */ - unsigned char* LastBlock; /**< ïðåäûäóùèé áëîê */ - size_t S; /**< ïàðàìåòð S */ - size_t BlockLen; /**< ðàçìåð áëîêà */ - size_t LastBlockSize; /**< ðàçìåð ïðåäûäóùåãî áëîêà */ - int isFistBlock; /**< èäåíòèôèêàòîð ïåðâîãî áëîêà */ - printout_byte_array PrintByteArray; /**< ôóíêöèÿ ëîãèðîâàíèÿ */ - printout_uint_array PrintUIntArray; /**< ôóíêöèÿ ëîãèðîâàíèÿ */ - pEncrypt EncryptFunc; /**< ôóíêöèÿ øèôðîâàíèÿ */ - unsigned char *tmpblock; /**< âðåìåííûé áëîê */ - unsigned char *resimit; /**< èìèòîâñòàâêà */ + unsigned char Alg; /**< идентификатор алгоритма */ + unsigned char* Keys; /**< ключ */ + unsigned char* K1; /**< вÑпомогательный параметр K1 */ + unsigned char* K2; /**< вÑпомогательный параметр K2 */ + unsigned char* B; /**< вÑпомогательный параметр B */ + unsigned char* R; /**< вÑпомогательный параметр R */ + unsigned char* C; /**< вÑпомогательный параметр C */ + unsigned char* LastBlock; /**< предыдущий блок */ + size_t S; /**< параметр S */ + size_t BlockLen; /**< размер блока */ + size_t LastBlockSize; /**< размер предыдущего блока */ + int isFistBlock; /**< идентификатор первого блока */ + printout_byte_array PrintByteArray; /**< Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ */ + printout_uint_array PrintUIntArray; /**< Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ */ + pEncrypt EncryptFunc; /**< Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ */ + unsigned char *tmpblock; /**< временный блок */ + unsigned char *resimit; /**< имитовÑтавка */ } Context_imit; static int init_ecb_14_impl(unsigned char *key, void* ctx, printout_byte_array print, printout_uint_array print_uint) @@ -535,7 +535,7 @@ static int init_ofb_14_impl(unsigned char *key, void *ctx, size_t s, unsigned ch return 0; } -int DLL_IMPORT init_ofb_14(unsigned char *key, void *ctx, size_t s, unsigned char *iv, size_t ivLength, printout_byte_array print, printout_uint_array print_uint) +int DLL_IMPORT init_ofb_14(unsigned char *key, void *ctx, size_t s, const unsigned char *iv, size_t ivLength, printout_byte_array print, printout_uint_array print_uint) { if(SelfTestGost14Ofb()) return -1; @@ -1331,7 +1331,7 @@ static void ShifttLeftOne(unsigned char *r, size_t length) r[length -1] &= 0xfe; } -int DLL_IMPORT imit(void *ctx, unsigned char *indata, size_t length) +int DLL_IMPORT imit(void *ctx, const unsigned char *indata, size_t length) { Context_imit* context; size_t i, j; diff --git a/dap-sdk/crypto/src/GOST/block_cipher.h b/dap-sdk/crypto/src/GOST/block_cipher.h new file mode 100644 index 0000000000000000000000000000000000000000..4a6315ee1540c59ea0fc4fa651836721161e9212 --- /dev/null +++ b/dap-sdk/crypto/src/GOST/block_cipher.h @@ -0,0 +1,423 @@ +/** @file + * @brief ОбъÑвление функций реализующих режимы работы блочных алгоритмов + * + * @copyright InfoTeCS. All rights reserved. + */ + +#ifndef BLOCK_CHIPHER_H +#define BLOCK_CHIPHER_H + +#include "dll_import.h" +#include "callback_print.h" + +/** @brief Размер контекÑта Ð´Ð»Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ECB алгоритма "кузнечик" */ +#define kEcb14ContextLen 0x38 + +/** @brief Размер контекÑта Ð´Ð»Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ECB алгоритма 28147-89 */ +#define kEcb89ContextLen 0x38 + +/** @brief Размер контекÑта Ð´Ð»Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ CBC алгоритма "кузнечик" */ +#define kCbc14ContextLen 0x60 + +/** @brief Размер контекÑта Ð´Ð»Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ CBC алгоритма 28147-89 */ +#define kCbc89ContextLen 0x60 + +/** @brief Размер контекÑта Ð´Ð»Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ CTR алгоритма "кузнечик" */ +#define kCtr14ContextLen 0x48 + +/** @brief Размер контекÑта Ð´Ð»Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ CTR алгоритма 28147-89 */ +#define kCtr89ContextLen 0x48 + +/** @brief Размер контекÑта Ð´Ð»Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ OFB алгоритма "кузнечик" */ +#define kOfb14ContextLen 0x60 + +/** @brief Размер контекÑта Ð´Ð»Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ OFB алгоритма 28147-89 */ +#define kOfb89ContextLen 0x60 + +/** @brief Размер контекÑта Ð´Ð»Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ CFB алгоритма "кузнечик" */ +#define kCfb14ContextLen 0x60 + +/** @brief Размер контекÑта Ð´Ð»Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ CFB алгоритма 28147-89 */ +#define kCfb89ContextLen 0x60 + +/** @brief Размер контекÑта Ð´Ð»Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð¼Ð¸Ñ‚Ð¾Ð²Ñтавки алгоритма "кузнечик" */ +#define kImit14ContextLen 0x88 + +/** @brief Размер контекÑта Ð´Ð»Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð¼Ð¸Ñ‚Ð¾Ð²Ñтавки алгоритма 28147-89 */ +#define kImit89ContextLen 0x88 + +/** @brief Размер блока алгоритма "кузнечик" */ +#define kBlockLen14 16 + +/** @brief Размер блока алгоритма 28147-89 */ +#define kBlockLen89 8 + +/** @brief Размер ключа алгоритма 28147-89 */ +#define kKeyLen89 32 + +#ifdef __cplusplus +extern "C" { +#endif + +/* *** Режимы ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ *** + * Режимы ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð°ÑŽÑ‚ Ñ Ð¸Ñпользованием базового + * криптографичеÑкого Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ + */ + +/** @brief Ð˜Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ ÐºÐ¾Ð½Ñ‚ÐµÐºÑта ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² режиме ECB Ð´Ð»Ñ Ð°Ð»Ð³Ð¾Ñ€Ð¸Ñ‚Ð¼Ð° "кузнечик" + * + * @param[in] key ключ + * @param[out] ctx контекÑÑ‚ cbc + * @param[in] print Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @param[in] print_uint Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @return 0 еÑли вÑе преобразование прошло уÑпешно + * @return -1 еÑли произошла ошибка + */ +int DLL_IMPORT init_ecb_14(unsigned char *key, void* ctx, printout_byte_array print, printout_uint_array print_uint); + +/** @brief Ð˜Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ ÐºÐ¾Ð½Ñ‚ÐµÐºÑта ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² режиме ECB Ð´Ð»Ñ Ð°Ð»Ð³Ð¾Ñ€Ð¸Ñ‚Ð¼Ð° 28147-89 + * + * @param[in] key ключ + * @param[out] ctx контекÑÑ‚ cbc + * @param[in] print Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @param[in] print_uint Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @return 0 еÑли вÑе преобразование прошло уÑпешно + * @return -1 еÑли произошла ошибка + */ +int DLL_IMPORT init_ecb_89(unsigned char *key, void* ctx, printout_byte_array print, printout_uint_array print_uint); + +/** @brief Удаление контекÑта ecb + * + * @param[in] ctx контекÑÑ‚ ecb + * @return 0 еÑли вÑе преобразование прошло уÑпешно + * @return -1 еÑли произошла ошибка + */ +void DLL_IMPORT free_ecb(void* ctx); + +/** @brief Ð˜Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ ÐºÐ¾Ð½Ñ‚ÐµÐºÑта ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² режиме CBC Ð´Ð»Ñ Ð°Ð»Ð³Ð¾Ñ€Ð¸Ñ‚Ð¼Ð° "кузнечик" + * + * @param[in] key ключ + * @param[out] ctx контекÑÑ‚ cbc + * @param[in] iv ÑинхропоÑылка + * @param[in] ivLength длина ÑинхропоÑылки + * @param[in] print Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @param[in] print_uint Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @return 0 еÑли вÑе преобразование прошло уÑпешно + * @return -1 еÑли произошла ошибка + */ +int DLL_IMPORT init_cbc_14(unsigned char *key, void* ctx, unsigned char *iv, size_t ivLength, printout_byte_array print, printout_uint_array print_uint); + +/** @brief Ð˜Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ ÐºÐ¾Ð½Ñ‚ÐµÐºÑта ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² режиме CBC Ð´Ð»Ñ Ð°Ð»Ð³Ð¾Ñ€Ð¸Ñ‚Ð¼Ð° 28147-89 + * + * @param[in] key ключ + * @param[out] ctx контекÑÑ‚ cbc + * @param[in] iv ÑинхропоÑылка + * @param[in] ivLength длина ÑинхропоÑылки + * @param[in] print Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @param[in] print_uint Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @return 0 еÑли вÑе преобразование прошло уÑпешно + * @return -1 еÑли произошла ошибка + */ +int DLL_IMPORT init_cbc_89(unsigned char *key, void* ctx, unsigned char *iv, size_t ivLength, printout_byte_array print, printout_uint_array print_uint); + +/** @brief Удаление контекÑта cbc + * + * @param[in] ctx контекÑÑ‚ cbc + * @return 0 еÑли вÑе преобразование прошло уÑпешно + * @return -1 еÑли произошла ошибка + */ +void DLL_IMPORT free_cbc(void* ctx); + +/** @brief Ð˜Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ ÐºÐ¾Ð½Ñ‚ÐµÐºÑта ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² режиме CTR Ð´Ð»Ñ Ð°Ð»Ð³Ð¾Ñ€Ð¸Ñ‚Ð¼Ð° "кузнечик" + * + * @param[in] key ключ + * @param[out] ctx контекÑÑ‚ ctr + * @param[in] iv ÑинхропоÑылка + * @param[in] length длина ÑинхропоÑылки + * @param[in] print Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @param[in] print_uint Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @return 0 еÑли вÑе преобразование прошло уÑпешно + * @return -1 еÑли произошла ошибка + */ +int DLL_IMPORT init_ctr_14(unsigned char* key, unsigned char *iv, size_t length, void *ctx, printout_byte_array print, printout_uint_array print_uint); + +/** @brief Ð˜Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ ÐºÐ¾Ð½Ñ‚ÐµÐºÑта ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² режиме CTR Ð´Ð»Ñ Ð°Ð»Ð³Ð¾Ñ€Ð¸Ñ‚Ð¼Ð° 28147-89 + * + * @param[in] key ключ + * @param[out] ctx контекÑÑ‚ ctr + * @param[in] iv ÑинхропоÑылка + * @param[in] length длина ÑинхропоÑылки + * @param[in] print Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @param[in] print_uint Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @return 0 еÑли вÑе преобразование прошло уÑпешно + * @return -1 еÑли произошла ошибка + */ +int DLL_IMPORT init_ctr_89(unsigned char* key, unsigned char *iv, size_t length, void *ctx, printout_byte_array print, printout_uint_array print_uint); + +/** @brief Удаление контекÑта ctr + * + * @param[in] ctx контекÑÑ‚ ctr + * @return 0 еÑли вÑе преобразование прошло уÑпешно + * @return -1 еÑли произошла ошибка + */ +void DLL_IMPORT free_ctr(void* ctx); + +/** @brief Ð˜Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ ÐºÐ¾Ð½Ñ‚ÐµÐºÑта ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² режиме OFB Ð´Ð»Ñ Ð°Ð»Ð³Ð¾Ñ€Ð¸Ñ‚Ð¼Ð° "кузнечик" + * + * @param[in] key ключ + * @param[out] ctx контекÑÑ‚ ofb + * @param[in] s параметр S + * @param[in] iv ÑинхропоÑылка + * @param[in] ivLength длина ÑинхропоÑылки + * @param[in] print Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @param[in] print_uint Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @return 0 еÑли вÑе преобразование прошло уÑпешно + * @return -1 еÑли произошла ошибка + */ +int DLL_IMPORT init_ofb_14(unsigned char *key, void *ctx, size_t s, const unsigned char *iv, size_t ivLength, printout_byte_array print, printout_uint_array print_uint); + +/** @brief Ð˜Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ ÐºÐ¾Ð½Ñ‚ÐµÐºÑта ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² режиме OFB Ð´Ð»Ñ Ð°Ð»Ð³Ð¾Ñ€Ð¸Ñ‚Ð¼Ð° 28147-89 + * + * @param[in] key ключ + * @param[out] ctx контекÑÑ‚ ofb + * @param[in] s параметр S + * @param[in] iv ÑинхропоÑылка + * @param[in] ivLength длина ÑинхропоÑылки + * @param[in] print Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @param[in] print_uint Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @return 0 еÑли вÑе преобразование прошло уÑпешно + * @return -1 еÑли произошла ошибка + */ +int DLL_IMPORT init_ofb_89(unsigned char *key, void *ctx, size_t s, unsigned char *iv, size_t ivLength, printout_byte_array print, printout_uint_array print_uint); + +/** @brief Удаление контекÑта ofb + * + * @param[in] ctx контекÑÑ‚ ofb + * @return 0 еÑли вÑе преобразование прошло уÑпешно + * @return -1 еÑли произошла ошибка + */ +void DLL_IMPORT free_ofb(void* ctx); + +/** @brief Ð˜Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ ÐºÐ¾Ð½Ñ‚ÐµÐºÑта ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² режиме CFB Ð´Ð»Ñ Ð°Ð»Ð³Ð¾Ñ€Ð¸Ñ‚Ð¼Ð° "кузнечик" + * + * @param[in] key ключ + * @param[out] ctx контекÑÑ‚ cfb + * @param[in] s параметр S + * @param[in] iv ÑинхропоÑылка + * @param[in] ivLength длина ÑинхропоÑылки + * @param[in] print Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @param[in] print_uint Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @return 0 еÑли вÑе преобразование прошло уÑпешно + * @return -1 еÑли произошла ошибка + */ +int DLL_IMPORT init_cfb_14(unsigned char *key, void *ctx, size_t s, unsigned char *iv, size_t ivLength, printout_byte_array print, printout_uint_array print_uint); + +/** @brief Ð˜Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ ÐºÐ¾Ð½Ñ‚ÐµÐºÑта ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² режиме CFB Ð´Ð»Ñ Ð°Ð»Ð³Ð¾Ñ€Ð¸Ñ‚Ð¼Ð° 28147-89 + * + * @param[in] key ключ + * @param[out] ctx контекÑÑ‚ cfb + * @param[in] s параметр S + * @param[in] iv ÑинхропоÑылка + * @param[in] ivLength длина ÑинхропоÑылки + * @param[in] print Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @param[in] print_uint Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @return 0 еÑли вÑе преобразование прошло уÑпешно + * @return -1 еÑли произошла ошибка + */ +int DLL_IMPORT init_cfb_89(unsigned char *key, void *ctx, size_t s, unsigned char *iv, size_t ivLength, printout_byte_array print, printout_uint_array print_uint); + +/** @brief Удаление контекÑта cfb + * + * @param[in] ctx контекÑÑ‚ cfb + * @return 0 еÑли вÑе преобразование прошло уÑпешно + * @return -1 еÑли произошла ошибка + */ +void DLL_IMPORT free_cfb(void* ctx); + +/** @brief Ð˜Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ ÐºÐ¾Ð½Ñ‚ÐµÐºÑта имтовÑтавки Ð´Ð»Ñ Ð°Ð»Ð³Ð¾Ñ€Ð¸Ñ‚Ð¼Ð° "кузнечик" + * + * @param[out] ctx контекÑÑ‚ имитовÑтавки + * @param[in] key ключ + * @param[in] s параметр S + * @param[in] print Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @param[in] print_uint Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @return 0 еÑли вÑе преобразование прошло уÑпешно + * @return -1 еÑли произошла ошибка + */ +int DLL_IMPORT init_imit_14(unsigned char *key, size_t s, void *ctx, printout_byte_array print, printout_uint_array print_uint); + +/** @brief Ð˜Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ ÐºÐ¾Ð½Ñ‚ÐµÐºÑта имтовÑтавки Ð´Ð»Ñ Ð°Ð»Ð³Ð¾Ñ€Ð¸Ñ‚Ð¼Ð° 28147-89 + * + * @param[in] key ключ + * @param[in] s параметр S + * @param[out] ctx контекÑÑ‚ имитовÑтавки + * @param[in] print Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @param[in] print_uint Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @return 0 еÑли вÑе преобразование прошло уÑпешно + * @return -1 еÑли произошла ошибка + */ +int DLL_IMPORT init_imit_89(unsigned char *key, size_t s, void *ctx, printout_byte_array print, printout_uint_array print_uint); + +/** @brief Удаление контекÑта имитовÑтавки + * + * @param[in] ctx контекÑÑ‚ имитовÑтавки + * @return 0 еÑли вÑе преобразование прошло уÑпешно + * @return -1 еÑли произошла ошибка + */ +void DLL_IMPORT free_imit(void* ctx); + +/** @brief Выполнение Ð·Ð°ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ в режиме проÑтой замены Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… кратных размеру блока + * + * @param[in] ctx контекÑÑ‚ ECB + * @param[in] indata открытый текÑÑ‚ + * @param[out] outdata зашифрованный текÑÑ‚ + * @param[in] length длина текÑта + * @return 0 еÑли вÑе преобразование прошло уÑпешно + * @return -1 еÑли произошла ошибка + */ +int DLL_IMPORT encrypt_ecb(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t length); + +/** @brief Выполнение раÑÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ в режиме проÑтой замены Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… кратных размеру блока + * + * @param[in] ctx контекÑÑ‚ ECB + * @param[in] indata открытый текÑÑ‚ + * @param[out] outdata зашифрованный текÑÑ‚ + * @param[in] length длина текÑта + * @return 0 еÑли вÑе преобразование прошло уÑпешно + * @return -1 еÑли произошла ошибка + */ +int DLL_IMPORT decrypt_ecb(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t length); + +/** @brief Выполнение Ð·Ð°ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ в режиме проÑтой замены Ñ Ð·Ð°Ñ†ÐµÐ¿Ð»ÐµÐ½Ð¸ÐµÐ¼ Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… кратных размеру блока + * + * @param[in] ctx контекÑÑ‚ CBC + * @param[in] indata открытый текÑÑ‚ + * @param[out] outdata зашифрованный текÑÑ‚ + * @param[in] length длина текÑта + * @return 0 еÑли вÑе преобразование прошло уÑпешно + * @return -1 еÑли произошла ошибка + */ +int DLL_IMPORT encrypt_cbc(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t length); + +/** @brief Выполнение Ñ€ÑÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ в режиме проÑтой замены Ñ Ð·Ð°Ñ†ÐµÐ¿Ð»ÐµÐ½Ð¸ÐµÐ¼ Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… кратных размеру блока + * + * @param[in] ctx контекÑÑ‚ CBC + * @param[in] indata зашифрованный текÑÑ‚ + * @param[out] outdata раÑшифрованный текÑÑ‚ + * @param[in] length длина текÑта + * @return 0 еÑли вÑе преобразование прошло уÑпешно + * @return -1 еÑли произошла ошибка + */ +int DLL_IMPORT decrypt_cbc(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t length); + +/** @brief Выполнение ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ (Ð·Ð°ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð»Ð¸ раÑшифрованиÑ) в режиме Ð³Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ + * @details неполным блоком может быть только поÑледний блок, при попытке ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾Ñле передачи неполного блока возвращаетÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ° + * + * @param[in] ctx контекÑÑ‚ CTR + * @param[in] indata входное Ñообщение + * @param[out] outdata результат + * @param[in] length длина ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ + * @return 0 еÑли вÑе преобразование прошло уÑпешно + * @return -1 еÑли произошла ошибка + */ +int DLL_IMPORT crypt_ctr(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t length); + +/** @brief Выполнение шаговой ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ в режиме Ð³Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ð¾Ð¹ ÑвÑзью + * @details неполным блоком может быть только поÑледний блок, при попытке ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾Ñле передачи неполного блока возвращаетÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ° + * + * @param[in] ctx контекÑÑ‚ OFB + * @param[in] indata входной блок + * @param[out] outdata результат Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ + * @param[in] inlength длина текÑта + * @return 0 еÑли вÑе преобразование прошло уÑпешно + * @return -1 еÑли произошла ошибка + */ +int DLL_IMPORT crypt_ofb(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t inlength); + +/** @brief Выполнение Ð·Ð°ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ в режиме Ð³Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ð¾Ð¹ ÑвÑзью + * + * @param[in] ctx контекÑÑ‚ OFB + * @param[in] indata открытый текÑÑ‚ + * @param[out] outdata зашифрованный текÑÑ‚ + * @param[in] inlength длина текÑта + * @return 0 еÑли вÑе преобразование прошло уÑпешно + * @return -1 еÑли произошла ошибка + */ +int DLL_IMPORT encrypt_ofb(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t inlength); + +/** @brief Выполнение раÑÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ в режиме Ð³Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ð¾Ð¹ ÑвÑзью + * + * @param[in] ctx контекÑÑ‚ OFB + * @param[in] indata зашифрованный текÑÑ‚ + * @param[out] outdata раÑшифрованный текÑÑ‚ + * @param[in] inlength длина текÑта + * @return 0 еÑли вÑе преобразование прошло уÑпешно + * @return -1 еÑли произошла ошибка + */ +int DLL_IMPORT decrypt_ofb(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t inlength); + +/** @brief Выполнение Ð·Ð°ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ в режиме Ð³Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ð¾Ð¹ ÑвÑзью по шифртекÑту + * @details неполным блоком может быть только поÑледний блок, при попытке ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾Ñле передачи неполного блока возвращаетÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ° + * + * @param[in] ctx контекÑÑ‚ CFB + * @param[in] indata открытый текÑÑ‚ + * @param[out] outdata зашифрованный текÑÑ‚ + * @param[in] inlength длина текÑта + * @return 0 еÑли вÑе преобразование прошло уÑпешно + * @return -1 еÑли произошла ошибка + */ +int DLL_IMPORT encrypt_cfb(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t inlength); + +/** @brief Выполнение раÑÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ в режиме Ð³Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ð¾Ð¹ ÑвÑзью по шифртекÑту + * @details неполным блоком может быть только поÑледний блок, при попытке ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾Ñле передачи неполного блока возвращаетÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ° + * + * @param[in] ctx контекÑÑ‚ CFB + * @param[in] indata зашифрованный текÑÑ‚ + * @param[out] outdata раÑшифрованный текÑÑ‚ + * @param[in] inlength длина текÑта + * @return 0 еÑли вÑе преобразование прошло уÑпешно + * @return -1 еÑли произошла ошибка + */ +int DLL_IMPORT decrypt_cfb(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t inlength); + +/** @brief Выполнение вычиÑÐ»ÐµÐ½Ð¸Ñ Ð¸Ð¼Ð¸Ñ‚Ð¾Ð²Ñтавки по данным кратным размеру блока + * + * @param[in] ctx контекÑÑ‚ имитовÑтавки + * @param[in] indata открытый текÑÑ‚ + * @param[in] length длина текÑта + * @return 0 еÑли вÑе преобразование прошло уÑпешно + * @return -1 еÑли произошла ошибка + */ +int DLL_IMPORT imit(void *ctx, const unsigned char *indata, size_t length); + +/** @brief Завершение выроботки имитовÑтавки + * + * @param[in] ctx контекÑÑ‚ имитовÑтавки + * @param[out] value + * @return 0 еÑли вÑе преобразование прошло уÑпешно + * @return -1 еÑли произошла ошибка + */ +int DLL_IMPORT done_imit(void *ctx, unsigned char *value); + +/** @brief Дополнение данных до размера блока. + * + * @param[in] data Ñообщение. ПамÑÑ‚ÑŒ под данные data должна быть выделена доÑÑ‚Ð°Ñ‚Ð¾Ñ‡Ð½Ð°Ñ Ð´Ð»Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ. + * @param[in] length размер ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ + * @param[in] blockLen длина блока + * @return размер ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ + */ +size_t DLL_IMPORT padd(unsigned char *data, size_t length, size_t blockLen); + +/** @brief Удаление дополненных данных. При ошибках возвращаетÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ -1 + * + * @param[in] data Ñообщение + * @param[in] length размер ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ + * @return размер ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ + */ +size_t DLL_IMPORT unpadd(unsigned char *data, size_t length); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/dap-sdk/crypto/src/GOST/callback_print.h b/dap-sdk/crypto/src/GOST/callback_print.h index 61f9594968c2bdb4ac2db40a6e7f05f1de00dd9f..01e387f0db946f85d4eec859e0f26229362aa236 100644 --- a/dap-sdk/crypto/src/GOST/callback_print.h +++ b/dap-sdk/crypto/src/GOST/callback_print.h @@ -1,5 +1,5 @@ /** @file - * @brief Îáúÿâëåíèå callback ôóíêöèé ðåàëèçóþùèõ âûâîä èíôîðìàöèè + * @brief ОбъÑвление callback функций реализующих вывод информации * * @copyright InfoTeCS. All rights reserved. */ @@ -9,10 +9,10 @@ #include "dll_import.h" -/** @brief callback äëÿ âûâîäà ìàññèâà byte */ +/** @brief callback Ð´Ð»Ñ Ð²Ñ‹Ð²Ð¾Ð´Ð° маÑÑива byte */ typedef void (DLL_IMPORT *printout_byte_array)(const char* text, unsigned char* value, unsigned int valueSize); -/** @brief callback äëÿ âûâîäà ìàññèâà unsigned int32 */ +/** @brief callback Ð´Ð»Ñ Ð²Ñ‹Ð²Ð¾Ð´Ð° маÑÑива unsigned int32 */ typedef void (DLL_IMPORT *printout_uint_array)(const char* text, unsigned int* value, unsigned int valueSize); #endif diff --git a/dap-sdk/crypto/src/GOST/dll_import.h b/dap-sdk/crypto/src/GOST/dll_import.h index 025d39d6391e6deb8c5b04f1f296e73da06a9f3c..ef72ecfb0864459186e7b6e606d10ddf570434d9 100644 --- a/dap-sdk/crypto/src/GOST/dll_import.h +++ b/dap-sdk/crypto/src/GOST/dll_import.h @@ -1,5 +1,5 @@ /** @file - * @brief Îáúÿâëåíèå ôóíêöèé ðåàëèçóþùèõ ïðåîáðàçîâàíèÿ èç àëãîðèòìà "Êóçíå÷èê" + * @brief ОбъÑвление функций реализующих Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð· алгоритма "Кузнечик" * * @copyright InfoTeCS. All rights reserved. */ @@ -10,7 +10,7 @@ #ifdef WIN32 - #define DLL_IMPORT __stdcall + #define DLL_IMPORT __stdcall//__fastcall// #else #define DLL_IMPORT #endif diff --git a/dap-sdk/crypto/src/GOST/print_data.c b/dap-sdk/crypto/src/GOST/print_data.c index 5845a9ef33feb4354ac8e8b7525c56b6c085f185..78a6a0d9e17082bf8926009db1b5ebff501adac2 100644 --- a/dap-sdk/crypto/src/GOST/print_data.c +++ b/dap-sdk/crypto/src/GOST/print_data.c @@ -1,5 +1,5 @@ /** @file - * @brief Ðåàëèçàöèÿ ôóíêöèé âûâîäà èíôîðìàöèè íà ýêðàí + * @brief Ð ÐµÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¹ вывода информации на Ñкран * * @copyright InfoTeCS. All rights reserved. */ diff --git a/dap-sdk/crypto/src/GOST/print_data.h b/dap-sdk/crypto/src/GOST/print_data.h index 3effd9efc1a4cd7af172c1b012bd7da8ab2d77dd..5bd3b7b0d25bc24cbe288a3284710ebcd3d64679 100644 --- a/dap-sdk/crypto/src/GOST/print_data.h +++ b/dap-sdk/crypto/src/GOST/print_data.h @@ -1,5 +1,5 @@ /** @file - * @brief Îáúÿâëåíèå ôóíêöèé âûâîäà èíôîðìàöèè íà ýêðàí + * @brief ОбъÑвление функций вывода информации на Ñкран * * @copyright InfoTeCS. All rights reserved. */ @@ -9,68 +9,68 @@ #include "dll_import.h" -/** @brief øèðèíà âûâîäèìîé ñòðîêè â ñèìâîëàõ */ +/** @brief ширина выводимой Ñтроки в Ñимволах */ #define LINE_WIDTH 60 -/** @brief äëèíà òàáóëÿöèè â ñèìâîëàõ */ +/** @brief длина табулÑции в Ñимволах */ #define TAB_WIDTH 4 -/** @brief Âûâîäèò ðåçóëüòàòû òåñòà +/** @brief Выводит результаты теÑта * - * @param[in] caption çàãîëîâîê òåñòà - * @param[in] result ðåçóëüòàò òåñòà + * @param[in] caption заголовок теÑта + * @param[in] result результат теÑта */ int PrintTest(const char* caption, int result); -/** @brief Âûâîäèò ñèìâîë */ +/** @brief Выводит Ñимвол */ void PrintCharSingle(char c); -/** @brief Âûâîäèò ïîâòîðÿþùèé ñèìâîë c count ðàç */ +/** @brief Выводит повторÑющий Ñимвол c count раз */ void PrintChar(char c, size_t count); -/** @brief Âûâîäèò ñòðîêó çàêàí÷èâàþùóþñÿ íóëåì */ +/** @brief Выводит Ñтроку заканчивающуюÑÑ Ð½ÑƒÐ»ÐµÐ¼ */ void PrintStr(const char* s); -/** @brief Âûâîäèò ñòðîêó çàêàí÷èâàþùóþñÿ íóëåì äîïîëíÿÿ åå ïðîáåëàìè äî çàäàíííîé øèðèíû */ +/** @brief Выводит Ñтроку заканчивающуюÑÑ Ð½ÑƒÐ»ÐµÐ¼ дополнÑÑ ÐµÐµ пробелами до заданнной ширины */ void PrintStrAlign(const char* s, size_t width); -/** @brief Âûâîäèò ñòðîêó çàêàí÷èâàþùóþñÿ íóëåì è ïåðåâîäèò êîðåòêó íà ñëåäóþùóþ ñòðîêó */ +/** @brief Выводит Ñтроку заканчивающуюÑÑ Ð½ÑƒÐ»ÐµÐ¼ и переводит коретку на Ñледующую Ñтроку */ void PrintLine(const char* line); -/** @brief Ïåðåâîäèò êîðåòêó íà ñëåäóþùóþ ñòðîêó */ +/** @brief Переводит коретку на Ñледующую Ñтроку */ void PrintEmptyLine(); -/** @brief Âûâîäèò ñòðîêó ñìåùÿÿ íà÷àëî ñòðîêè â ïðàâî íà çàäàííîå êîëè÷åñòâî ïîçèöèé */ +/** @brief Выводит Ñтроку ÑмещÑÑ Ð½Ð°Ñ‡Ð°Ð»Ð¾ Ñтроки в право на заданное количеÑтво позиций */ void PrintLineLeft(const char* label); -/** @brief Âûâîäèò ñòðîêó ðàçäåëèòåëü */ +/** @brief Выводит Ñтроку разделитель */ void PrintSplitLine(); -/** @brief Âûâîäèò ðàçäåëèòåëü, ñòðîêó è ïåðåâîäèò êîðåòêó íà ñëåäóþùóþ ñòðîêó */ +/** @brief Выводит разделитель, Ñтроку и переводит коретку на Ñледующую Ñтроку */ void PrintLabel(const char* label); -/** @brief Âûâîäèò îäèí áàéò â HEX ïðåäñòàâëåíèè */ +/** @brief Выводит один байт в HEX предÑтавлении */ void PrintHex(unsigned char value); -/** @brief Âûâîäèò ìàññèâ áàéò â HEX ïðåäñòàâëåíèè */ +/** @brief Выводит маÑÑив байт в HEX предÑтавлении */ void PrintHexArray(unsigned char* value, size_t size); -/** @brief Âûâîäèò int32 ÷èñëî â HEX ïðåäñòàâëåíèè */ +/** @brief Выводит int32 чиÑло в HEX предÑтавлении */ void PrintUInt32(unsigned int d); -/** @brief Âûâîäèò áëîê äàííûõ */ +/** @brief Выводит блок данных */ void PrintBlock(const char* label, unsigned char* value, size_t valueSize, size_t blockSize); -/** @brief Âûâîäèò áëîê äàííûõ */ +/** @brief Выводит блок данных */ void PrintBlockInt(const char* label, unsigned int value); -/** @brief Âûâîäèò áëîê äàííûõ */ +/** @brief Выводит блок данных */ void PrintBlockLeft(const char* label, unsigned int value); -/** @brief callback äëÿ âûâîäà ìàññèâà byte */ +/** @brief callback Ð´Ð»Ñ Ð²Ñ‹Ð²Ð¾Ð´Ð° маÑÑива byte */ void DLL_IMPORT print_array(const char* label, unsigned char* value, unsigned int valueSize); -/** @brief callback äëÿ âûâîäà ìàññèâà unsigned int32 */ +/** @brief callback Ð´Ð»Ñ Ð²Ñ‹Ð²Ð¾Ð´Ð° маÑÑива unsigned int32 */ void DLL_IMPORT print_uint_array(const char* label, unsigned int* value, unsigned int valueSize); #endif diff --git a/dap-sdk/crypto/src/GOST/table.h b/dap-sdk/crypto/src/GOST/table.h index 0932fcb620ca7437f400ad46c3a6547841e7f264..428dd572bb90c8086da4b2c4925a5f02e067f3dc 100644 --- a/dap-sdk/crypto/src/GOST/table.h +++ b/dap-sdk/crypto/src/GOST/table.h @@ -1,7 +1,7 @@ #ifndef TABLE_H #define TABLE_H -/** @brief òàáëèöà äëÿ óìíîæåíèÿ */ +/** @brief таблица Ð´Ð»Ñ ÑƒÐ¼Ð½Ð¾Ð¶ÐµÐ½Ð¸Ñ */ static const unsigned char multTable[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, diff --git a/dap-sdk/crypto/src/GOST/test_data.inc b/dap-sdk/crypto/src/GOST/test_data.inc index 5df12771af70a2ee5b4545f21f34daf080ad040d..94d893eb745e313b9bc06c72d25edfdf75b2b76d 100644 --- a/dap-sdk/crypto/src/GOST/test_data.inc +++ b/dap-sdk/crypto/src/GOST/test_data.inc @@ -1,8 +1,8 @@ /*---------------------------------------------------------------------- - * òåñòîâûå çíà÷åíèÿ äëÿ àëãîðèòìà êóçíå÷èê èç ñòàíäàðòà + * теÑтовые Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð°Ð»Ð³Ð¾Ñ€Ð¸Ñ‚Ð¼Ð° кузнечик из Ñтандарта */ -/* òåñòîâûå çíà÷åíèÿ ïðåîáðàçîâàíèÿ S */ +/* теÑтовые Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ S */ unsigned char kSData[5][kBlockLen14] = { {0xff, 0xee, 0xdd, 0xcc, 0xbb, 0xaa, 0x99, 0x88, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x00}, @@ -12,7 +12,7 @@ unsigned char kSData[5][kBlockLen14] = {0x23, 0xae, 0x65, 0x63, 0x3f, 0x84, 0x2d, 0x29, 0xc5, 0xdf, 0x52, 0x9c, 0x13, 0xf5, 0xac, 0xda} }; -/* òåñòîâûå çíà÷åíèÿ ïðåîáðàçîâàíèÿ R */ +/* теÑтовые Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ R */ unsigned char kRData[5][kBlockLen14] = { {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00}, @@ -22,7 +22,7 @@ unsigned char kRData[5][kBlockLen14] = {0x0d, 0x64, 0xa5, 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} }; -/* òåñòîâûå çíà÷åíèÿ ïðåîáðàçîâàíèÿ L */ +/* теÑтовые Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ L */ unsigned char kLData[5][kBlockLen14] = { {0x64, 0xa5, 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, @@ -32,7 +32,7 @@ unsigned char kLData[5][kBlockLen14] = {0xe6, 0xa8, 0x09, 0x4f, 0xee, 0x0a, 0xa2, 0x04, 0xfd, 0x97, 0xbc, 0xb0, 0xb4, 0x4b, 0x85, 0x80} }; -/* òåñòîâûå çíà÷åíèÿ ðàçâåðíóòûõ êëþ÷åé */ +/* теÑтовые Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð²ÐµÑ€Ð½ÑƒÑ‚Ñ‹Ñ… ключей */ static const unsigned char kKData[10][kBlockLen14] = { {0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77}, @@ -47,34 +47,34 @@ static const unsigned char kKData[10][kBlockLen14] = {0x72, 0xe9, 0xdd, 0x74, 0x16, 0xbc, 0xf4, 0x5b, 0x75, 0x5d, 0xba, 0xa8, 0x8e, 0x4a, 0x40, 0x43}, }; -/* òåñòîâûå çíà÷åíèÿ ìàñòåð-êëþ÷à */ +/* теÑтовые Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¼Ð°Ñтер-ключа */ unsigned char kMasterKeyData[32] = { 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66,0x77, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef }; -/* çíà÷åíèå îòêðûòîãî òåêñòà */ +/* значение открытого текÑта */ unsigned char kPlainTextData[] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x00, 0xff, 0xee, 0xdd, 0xcc, 0xbb, 0xaa, 0x99, 0x88 }; -/* çíà÷åíèå øèôðîòåêñòà */ +/* значение шифротекÑта */ unsigned char kChipherTextData[] = { 0x7f, 0x67, 0x9d, 0x90, 0xbe, 0xbc, 0x24, 0x30, 0x5a, 0x46, 0x8d, 0x42, 0xb9, 0xd4, 0xed, 0xcd }; -/* òåñòîâûå çíà÷åíèÿ îáðàòíîãî ïðåîáðàçîâàíèÿ L */ +/* теÑтовые Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ð¾Ð³Ð¾ Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ L */ unsigned char kReverseLData[2][kBlockLen14] = { {0x0d, 0x8e, 0x40, 0xe4, 0xa8, 0x00, 0xd0, 0x6b, 0x2f, 0x1b, 0x37, 0xea, 0x37, 0x9e, 0xad, 0x8e}, {0x8a, 0x6b, 0x93, 0x0a, 0x52, 0x21, 0x1b, 0x45, 0xc5, 0xba, 0xa4, 0x3f, 0xf8, 0xb9, 0x13, 0x19}, }; -/* òåñòîâûå çíà÷åíèÿ îáðàòíîãî ïðåîáðàçîâàíèÿ LSX */ +/* теÑтовые Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ð¾Ð³Ð¾ Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ LSX */ unsigned char kReverseLSXData[10][kBlockLen14] = { {0x8a, 0x6b, 0x93, 0x0a, 0x52, 0x21, 0x1b, 0x45, 0xc5, 0xba, 0xa4, 0x3f, 0xf8, 0xb9, 0x13, 0x19}, @@ -184,7 +184,7 @@ unsigned char kMasterKeyGost89[] = 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff }; -/* òåñòîâûå çíà÷åíèÿ èç ñòàíäàðòû äëÿ àëãîðèòìà 89ãî ãîäà */ +/* теÑтовые Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¸Ð· Ñтандарты Ð´Ð»Ñ Ð°Ð»Ð³Ð¾Ñ€Ð¸Ñ‚Ð¼Ð° 89го года */ unsigned char kGost89StandartPlainText[] = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 @@ -195,13 +195,13 @@ unsigned char kGost89StandartEncrText[] = 0x4e, 0xe9, 0x01, 0xe5, 0xc2, 0xd8, 0xca, 0x3d }; -/* òåñòîâûå çíà÷åíèÿ äëÿ ïðåîáðàçîâàíèÿ t, îïèñàííîãî â ñòàíäàðòå */ +/* теÑтовые Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ t, опиÑанного в Ñтандарте */ unsigned int kTData[5] = { 0xfdb97531, 0x2a196f34, 0xebd9f03a, 0xb039bb3d, 0x68695433 }; -/* òåñòîâûå çíà÷åíèÿ äëÿ ïðåîáðàçîâàíèÿ g, îïèñàííîãî â ñòàíäàðòå */ +/* теÑтовые Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ g, опиÑанного в Ñтандарте */ unsigned int kgData[4][3] = { {0x87654321, 0xfedcba98, 0xfdcbc20c}, diff --git a/dap-sdk/crypto/src/GOST/testgost.c b/dap-sdk/crypto/src/GOST/testgost.c index cd33f3010c1eaac04932d6933318e7fe1119cdea..289b71abc9ec45ea62796e553ee17293f2c0a9da 100644 --- a/dap-sdk/crypto/src/GOST/testgost.c +++ b/dap-sdk/crypto/src/GOST/testgost.c @@ -1,5 +1,5 @@ /** @file - * @brief Ðåàëèçàöèÿ ôóíêöèé òåñòèðîâàíèÿ àëãîðèòìîâ "êóçíå÷èê" è 28147-89. À òàêæå ðåæèìîâ ðàáîòû áëî÷íûõ øèôðîâ + * @brief Ð ÐµÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¹ теÑÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð°Ð»Ð³Ð¾Ñ€Ð¸Ñ‚Ð¼Ð¾Ð² "кузнечик" и 28147-89. Ртакже режимов работы блочных шифров * * @copyright InfoTeCS. All rights reserved. */ @@ -7,18 +7,18 @@ #include <memory.h> #include "28147_14.h" -#include "block_chipher.h" +#include "block_cipher.h" #include "28147_89.h" #include "test_data.inc" #include "print_data.h" -/** @brief ðàçìåð òåñòîâûõ äàííûõ äëÿ àëãîðèòìà "êóçíå÷èê" */ +/** @brief размер теÑтовых данных Ð´Ð»Ñ Ð°Ð»Ð³Ð¾Ñ€Ð¸Ñ‚Ð¼Ð° "кузнечик" */ #define textLen14 sizeof(kGost14PlainText) -/** @brief ðàçìåð òåñòîâûõ äàííûõ äëÿ àëãîðèòìà "28147-89" */ +/** @brief размер теÑтовых данных Ð´Ð»Ñ Ð°Ð»Ð³Ð¾Ñ€Ð¸Ñ‚Ð¼Ð° "28147-89" */ #define textLen89 sizeof(kGost89PlaintText) -/** @brief òåñòèðîâàíèå ïðåîáðàçîâàíèÿ S èç àëãîðèòìà "êóçíå÷èê" */ +/** @brief теÑтирование Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ S из алгоритма "кузнечик" */ int testS() { unsigned char tmp[kBlockLen14]; @@ -45,7 +45,7 @@ int testS() return 0; } -/** @brief òåñòèðîâàíèå ïðåîáðàçîâàíèÿ R èç àëãîðèòìà "êóçíå÷èê" */ +/** @brief теÑтирование Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ R из алгоритма "кузнечик" */ int testR() { unsigned char tmp[kBlockLen14]; @@ -73,7 +73,7 @@ int testR() return 0; } -/** @brief òåñòèðîâàíèå ïðåîáðàçîâàíèÿ L èç àëãîðèòìà "êóçíå÷èê" */ +/** @brief теÑтирование Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ L из алгоритма "кузнечик" */ int testL() { unsigned char tmp[kBlockLen14]; @@ -100,7 +100,7 @@ int testL() return 0; } -/** @brief òåñòèðîâàíèå ðàçâîðà÷èâàíèÿ êëþ÷à èç àëãîðèòìà "êóçíå÷èê" */ +/** @brief теÑтирование Ñ€Ð°Ð·Ð²Ð¾Ñ€Ð°Ñ‡Ð¸Ð²Ð°Ð½Ð¸Ñ ÐºÐ»ÑŽÑ‡Ð° из алгоритма "кузнечик" */ int testExpandKey() { const size_t keyLen = sizeof(kMasterKeyData)/sizeof(kMasterKeyData[0]); @@ -128,7 +128,7 @@ int testExpandKey() return 0; } -/** @brief òåñòèðîâàíèå øèôðîâàíèÿ ïî àëãîðèòìó "êóçíå÷èê" */ +/** @brief теÑтирование ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾ алгоритму "кузнечик" */ int testEncrypt() { const size_t keyLen = sizeof(kMasterKeyData)/sizeof(kMasterKeyData[0]); @@ -159,7 +159,7 @@ int testEncrypt() return 0; } -/** @brief òåñòèðîâàíèå ðàñøèôðîâàíèÿ ïî àëãîðèòìó "êóçíå÷èê" */ +/** @brief теÑтирование раÑÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾ алгоритму "кузнечик" */ int testDecrypt() { const size_t keyLen = sizeof(kMasterKeyData)/sizeof(kMasterKeyData[0]); @@ -192,7 +192,7 @@ int testDecrypt() return 0; } -/** @brief òåñòèðîâàíèå øèôðîàâàíèå â ðåæèìå ecb ïî àëãîðèòìó "êóçíå÷èê" */ +/** @brief теÑтирование шифроавание в режиме ecb по алгоритму "кузнечик" */ int gost14_ECB_test() { unsigned char ctx[kEcb14ContextLen]; @@ -244,7 +244,7 @@ int gost14_ECB_test() return 0; } -/** @brief òåñòèðîâàíèå ðåæèìà ctr àëãîðèòìà "êóçíå÷èê" */ +/** @brief теÑтирование режима ctr алгоритма "кузнечик" */ int gost14_CTR_test() { const size_t svLen = sizeof(kGost14CtrSV); @@ -276,7 +276,7 @@ int gost14_CTR_test() return memcmp(outText, kGost14CtrC, textLen14); } -/** @brief òåñòèðîâàíèå ðåæèìà ofb àëãîðèòìà "êóçíå÷èê" */ +/** @brief теÑтирование режима ofb алгоритма "кузнечик" */ int gost14_OFB_test() { const size_t svLen = sizeof(kGost14OfbSV); @@ -308,7 +308,7 @@ int gost14_OFB_test() return memcmp(outText, kGost14OfbC, textLen14); } -/** @brief òåñòèðîâàíèå ðåæèìà cbc àëãîðèòìà "êóçíå÷èê" */ +/** @brief теÑтирование режима cbc алгоритма "кузнечик" */ int gost14_CBC_test() { const size_t svLen = sizeof(kGost14CbcSV); @@ -363,7 +363,7 @@ int gost14_CBC_test() return memcmp(outText, kGost14CbcC, textLen14); } -/** @brief òåñòèðîâàíèå ðåæèìà cfb àëãîðèòìà "êóçíå÷èê" */ +/** @brief теÑтирование режима cfb алгоритма "кузнечик" */ int gost14_CFB_test() { const size_t svLen = sizeof(kGost14CfbSV); @@ -421,7 +421,7 @@ int gost14_CFB_test() return 0; } -/** @brief òåñòèðîâàíèå ðåæèìà èìèòîâñòàâêè àëãîðèòìà "êóçíå÷èê" */ +/** @brief теÑтирование режима имитовÑтавки алгоритма "кузнечик" */ int gost14_imita_test() { const size_t imitLen = sizeof(kGost14ImitS); @@ -450,7 +450,7 @@ int gost14_imita_test() return memcmp(outText, kGost14ImitS, imitLen); } -/** @brief òåñòèðîâàíèå ðåæèìà ecb àëãîðèòìà 28147-89 */ +/** @brief теÑтирование режима ecb алгоритма 28147-89 */ int gost89_ECB_test() { unsigned char ctx[kEcb89ContextLen]; @@ -493,7 +493,7 @@ int gost89_ECB_test() return 0; } -/** @brief òåñòèðîâàíèå ðåæèìà ctr àëãîðèòìà 28147-89 */ +/** @brief теÑтирование режима ctr алгоритма 28147-89 */ int gost89_CTR_test() { const size_t SvLen = sizeof(kGost89CtrSV); @@ -525,7 +525,7 @@ int gost89_CTR_test() return memcmp(outText, kGost89CtrC, textLen89); } -/** @brief òåñòèðîâàíèå ðåæèìà ofb àëãîðèòìà 28147-89 */ +/** @brief теÑтирование режима ofb алгоритма 28147-89 */ int gost89_OFB_test() { const size_t SvLen = sizeof(kGost89OfbSV); @@ -557,7 +557,7 @@ int gost89_OFB_test() return memcmp(outText, kGost89OfbC, textLen89); } -/** @brief òåñòèðîâàíèå ðåæèìà cbc àëãîðèòìà 28147-89 */ +/** @brief теÑтирование режима cbc алгоритма 28147-89 */ int gost89_CBC_test() { const size_t SvLen = sizeof(kGost89CbcSV); @@ -601,7 +601,7 @@ int gost89_CBC_test() return memcmp(outText, kGost89CbcC, textLen89); } -/** @brief Òåñòèðîâàíèå êðèïòîãðàôè÷åñêîãî ïðåîáðàçîâàíèÿ àëãîðèòìà 28147-89 */ +/** @brief ТеÑтирование криптографичеÑкого Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð°Ð»Ð³Ð¾Ñ€Ð¸Ñ‚Ð¼Ð° 28147-89 */ int standart_89_encr_test() { const size_t textLen = sizeof(kGost89StandartPlainText); @@ -647,7 +647,7 @@ int standart_89_encr_test() return 0; } -/** @brief òåñòèðîâàíèå ðåæèìà cfb àëãîðèòìà 28147-89 */ +/** @brief теÑтирование режима cfb алгоритма 28147-89 */ int gost89_CFB_test() { const size_t SvLen = sizeof(kGost89CfbSV); @@ -694,7 +694,7 @@ int gost89_CFB_test() return 0; } #include<stdio.h> -/** @brief òåñòèðîâàíèå ðåæèìà èìòîâñòàâêè àëãîðèòìà 28147-89 */ +/** @brief теÑтирование режима имтовÑтавки алгоритма 28147-89 */ int gost89_imita_test() { const size_t imitLen = sizeof(kGost89ImitS); @@ -726,7 +726,7 @@ int gost89_imita_test() return memcmp(outText, kGost89ImitS, imitLen); } -/** @brief òåñòèðîâàíèå äîïîëíåíèÿ ñîîáùåíèÿ */ +/** @brief теÑтирование Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ */ int testPadding() { const size_t len = sizeof(kPaddingText)/sizeof(kPaddingText[0]); @@ -761,7 +761,7 @@ int testPadding() return 0; } -/** @brief òåñòèðîâàíèå ñíÿòèÿ äîïîëíåíèÿ ñîîáùåíèÿ */ +/** @brief теÑтирование ÑнÑÑ‚Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ */ int testCut() { size_t rLen, rLen2; @@ -798,7 +798,7 @@ int testCut() return 0; } -/** @brief Òåñòèðîâàíèå ïðåîáðàçîâàíèÿ t àëãîðèòìà 28147-89 */ +/** @brief ТеÑтирование Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ t алгоритма 28147-89 */ int testFuncT() { int i; @@ -822,7 +822,7 @@ int testFuncT() return 0; } -/** @brief Òåñòèðîâàíèå ïðåîáðàçîâàíèÿ g àëãîðèòìà 28147-89 */ +/** @brief ТеÑтирование Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ g алгоритма 28147-89 */ int testG() { int i; @@ -847,7 +847,7 @@ int testG() return 0; } -/** @brief òî÷êà âõîäà */ +/** @brief точка входа */ int main_gost_test() { int testRes = 0; diff --git a/dap-sdk/crypto/src/blowfish/bf_enc.c b/dap-sdk/crypto/src/blowfish/bf_enc.c new file mode 100644 index 0000000000000000000000000000000000000000..683a9613e4a5e8113b09bd6aec9f7f38e920803d --- /dev/null +++ b/dap-sdk/crypto/src/blowfish/bf_enc.c @@ -0,0 +1,210 @@ +#include "blowfish.h" +#include "bf_local.h" +#include "memory.h" + +/* + * Blowfish as implemented from 'Blowfish: Springer-Verlag paper' (From + * LECTURE NOTES IN COMPUTER SCIENCE 809, FAST SOFTWARE ENCRYPTION, CAMBRIDGE + * SECURITY WORKSHOP, CAMBRIDGE, U.K., DECEMBER 9-11, 1993) + */ + +#if (BF_ROUNDS != 16) && (BF_ROUNDS != 20) +# error If you set BF_ROUNDS to some value other than 16 or 20, you will have \ +to modify the code. +#endif +//#include<stdio.h> + +void BF_encrypt(BF_LONG *data, const BF_KEY *key) +{ + register BF_LONG l, r; + register const BF_LONG *p, *s; + + p = key->P; + s = &(key->S[0]); + l = data[0]; + r = data[1]; + + l ^= p[0]; + BF_ENC(r, l, s, p[1]); + BF_ENC(l, r, s, p[2]); + BF_ENC(r, l, s, p[3]); + BF_ENC(l, r, s, p[4]); + BF_ENC(r, l, s, p[5]); + BF_ENC(l, r, s, p[6]); + BF_ENC(r, l, s, p[7]); + BF_ENC(l, r, s, p[8]); + BF_ENC(r, l, s, p[9]); + BF_ENC(l, r, s, p[10]); + BF_ENC(r, l, s, p[11]); + BF_ENC(l, r, s, p[12]); + BF_ENC(r, l, s, p[13]); + BF_ENC(l, r, s, p[14]); + BF_ENC(r, l, s, p[15]); + BF_ENC(l, r, s, p[16]); +# if BF_ROUNDS == 20 + BF_ENC(r, l, s, p[17]); + BF_ENC(l, r, s, p[18]); + BF_ENC(r, l, s, p[19]); + BF_ENC(l, r, s, p[20]); +# endif + r ^= p[BF_ROUNDS + 1]; + + data[1] = l & 0xffffffffU; + data[0] = r & 0xffffffffU; +} + +void BF_decrypt(BF_LONG *data, const BF_KEY *key) +{ + register BF_LONG l, r; + register const BF_LONG *p, *s; + + p = key->P; + s = &(key->S[0]); + l = data[0]; + r = data[1]; + + l ^= p[BF_ROUNDS + 1]; +# if BF_ROUNDS == 20 + BF_ENC(r, l, s, p[20]); + BF_ENC(l, r, s, p[19]); + BF_ENC(r, l, s, p[18]); + BF_ENC(l, r, s, p[17]); +# endif + BF_ENC(r, l, s, p[16]); + BF_ENC(l, r, s, p[15]); + BF_ENC(r, l, s, p[14]); + BF_ENC(l, r, s, p[13]); + BF_ENC(r, l, s, p[12]); + BF_ENC(l, r, s, p[11]); + BF_ENC(r, l, s, p[10]); + BF_ENC(l, r, s, p[9]); + BF_ENC(r, l, s, p[8]); + BF_ENC(l, r, s, p[7]); + BF_ENC(r, l, s, p[6]); + BF_ENC(l, r, s, p[5]); + BF_ENC(r, l, s, p[4]); + BF_ENC(l, r, s, p[3]); + BF_ENC(r, l, s, p[2]); + BF_ENC(l, r, s, p[1]); + r ^= p[0]; + + data[1] = l & 0xffffffffU; + data[0] = r & 0xffffffffU; +} + +void BF_cbc_encrypt(const unsigned char *in, unsigned char *out, long length, + const BF_KEY *schedule, unsigned char *ivec, int encrypt) +{ + register BF_LONG tin0, tin1; + register BF_LONG tout0, tout1, xor0, xor1; + register long l = length; + BF_LONG tin[2]; + + if (encrypt) { + n2l(ivec, tout0); + n2l(ivec, tout1); + ivec -= 8; + for (l -= 8; l >= 0; l -= 8) { + n2l(in, tin0); + n2l(in, tin1); + tin0 ^= tout0; + tin1 ^= tout1; + tin[0] = tin0; + tin[1] = tin1; + BF_encrypt(tin, schedule); + tout0 = tin[0]; + tout1 = tin[1]; + l2n(tout0, out); + l2n(tout1, out); + } + if (1||l != -8) { + unsigned char tmpin[16]; + unsigned char *ptmpin = tmpin; + memcpy(tmpin, in, l + 8); + memcpy(tmpin + l + 8, &length, 4); + int pad_length = (8-(l + 8 + 4 + 1)%8)%8; + for(int i = 0; i < pad_length; ++i) + { + tmpin[l+8+4+i]=16;//prng better + } + tmpin[l+8+4+pad_length]=pad_length; +// for(int i = 0; i < l + 8 + 4 +1 +pad_length; ++i) +// { +// printf("%.2x ", tmpin[i]); +// } +// printf("\n");fflush(stdout); + n2l(ptmpin, tin0); + n2l(ptmpin, tin1); + tin0 ^= tout0; + tin1 ^= tout1; + tin[0] = tin0; + tin[1] = tin1; + BF_encrypt(tin, schedule); + tout0 = tin[0]; + tout1 = tin[1]; + l2n(tout0, out); + l2n(tout1, out); + if(l+8+4+pad_length + 1 == 16) + { + n2l(ptmpin, tin0); + n2l(ptmpin, tin1); + tin0 ^= tout0; + tin1 ^= tout1; + tin[0] = tin0; + tin[1] = tin1; + BF_encrypt(tin, schedule); + tout0 = tin[0]; + tout1 = tin[1]; + l2n(tout0, out); + l2n(tout1, out); + } + + +// n2ln(in, tin0, tin1, l + 8); +// tin0 ^= tout0; +// tin1 ^= tout1; +// tin[0] = tin0; +// tin[1] = tin1; +// BF_encrypt(tin, schedule); +// tout0 = tin[0]; +// tout1 = tin[1]; +// l2n(tout0, out); +// l2n(tout1, out); + } + l2n(tout0, ivec); + l2n(tout1, ivec); + } else { + n2l(ivec, xor0); + n2l(ivec, xor1); + ivec -= 8; + for (l -= 8; l >= 0; l -= 8) { + n2l(in, tin0); + n2l(in, tin1); + tin[0] = tin0; + tin[1] = tin1; + BF_decrypt(tin, schedule); + tout0 = tin[0] ^ xor0; + tout1 = tin[1] ^ xor1; + l2n(tout0, out); + l2n(tout1, out); + xor0 = tin0; + xor1 = tin1; + } + if (l != -8) { + n2l(in, tin0); + n2l(in, tin1); + tin[0] = tin0; + tin[1] = tin1; + BF_decrypt(tin, schedule); + tout0 = tin[0] ^ xor0; + tout1 = tin[1] ^ xor1; + l2nn(tout0, tout1, out, l + 8); + xor0 = tin0; + xor1 = tin1; + } + l2n(xor0, ivec); + l2n(xor1, ivec); + } + tin0 = tin1 = tout0 = tout1 = xor0 = xor1 = 0; + tin[0] = tin[1] = 0; +} diff --git a/dap-sdk/crypto/src/blowfish/bf_ofb64.c b/dap-sdk/crypto/src/blowfish/bf_ofb64.c new file mode 100644 index 0000000000000000000000000000000000000000..4eb763c0915e01bd0c8038125699b202d011297a --- /dev/null +++ b/dap-sdk/crypto/src/blowfish/bf_ofb64.c @@ -0,0 +1,52 @@ +#include "blowfish.h" +#include "bf_local.h" + +/* + * The input and output encrypted as though 64bit ofb mode is being used. + * The extra state information to record how much of the 64bit block we have + * used is contained in *num; + */ +void BF_ofb64_encrypt(const unsigned char *in, unsigned char *out, + long length, const BF_KEY *schedule, + unsigned char *ivec, int *num) +{ + register BF_LONG v0, v1, t; + register int n = *num; + register long l = length; + unsigned char d[8]; + register char *dp; + BF_LONG ti[2]; + unsigned char *iv; + int save = 0; + + iv = (unsigned char *)ivec; + n2l(iv, v0); + n2l(iv, v1); + ti[0] = v0; + ti[1] = v1; + dp = (char *)d; + l2n(v0, dp); + l2n(v1, dp); + while (l--) { + if (n == 0) { + BF_encrypt((BF_LONG *)ti, schedule); + dp = (char *)d; + t = ti[0]; + l2n(t, dp); + t = ti[1]; + l2n(t, dp); + save++; + } + *(out++) = *(in++) ^ d[n]; + n = (n + 1) & 0x07; + } + if (save) { + v0 = ti[0]; + v1 = ti[1]; + iv = (unsigned char *)ivec; + l2n(v0, iv); + l2n(v1, iv); + } + t = v0 = v1 = ti[0] = ti[1] = 0; + *num = n; +} diff --git a/dap-sdk/crypto/src/blowfish/blowfish.c b/dap-sdk/crypto/src/blowfish/bf_pi.h similarity index 73% rename from dap-sdk/crypto/src/blowfish/blowfish.c rename to dap-sdk/crypto/src/blowfish/bf_pi.h index 591549c116a5ed6e298e2c63bb8de72fc6ca7017..9785d54b7e6d0bc6816f2bb1ce856c6e0ed423e1 100644 --- a/dap-sdk/crypto/src/blowfish/blowfish.c +++ b/dap-sdk/crypto/src/blowfish/bf_pi.h @@ -1,911 +1,521 @@ -#include <stdio.h> -#include <string.h> -#include "blowfish.h" -#include "bf_local.h" -/* - * The input and output encrypted as though 64bit cfb mode is being used. - * The extra state information to record how much of the 64bit block we have - * used is contained in *num; - */ - -static const BF_KEY bf_init = { - { - 0x243f6a88L, 0x85a308d3L, 0x13198a2eL, 0x03707344L, - 0xa4093822L, 0x299f31d0L, 0x082efa98L, 0xec4e6c89L, - 0x452821e6L, 0x38d01377L, 0xbe5466cfL, 0x34e90c6cL, - 0xc0ac29b7L, 0xc97c50ddL, 0x3f84d5b5L, 0xb5470917L, - 0x9216d5d9L, 0x8979fb1b}, { - 0xd1310ba6L, 0x98dfb5acL, 0x2ffd72dbL, - 0xd01adfb7L, - 0xb8e1afedL, 0x6a267e96L, 0xba7c9045L, - 0xf12c7f99L, - 0x24a19947L, 0xb3916cf7L, 0x0801f2e2L, - 0x858efc16L, - 0x636920d8L, 0x71574e69L, 0xa458fea3L, - 0xf4933d7eL, - 0x0d95748fL, 0x728eb658L, 0x718bcd58L, - 0x82154aeeL, - 0x7b54a41dL, 0xc25a59b5L, 0x9c30d539L, - 0x2af26013L, - 0xc5d1b023L, 0x286085f0L, 0xca417918L, - 0xb8db38efL, - 0x8e79dcb0L, 0x603a180eL, 0x6c9e0e8bL, - 0xb01e8a3eL, - 0xd71577c1L, 0xbd314b27L, 0x78af2fdaL, - 0x55605c60L, - 0xe65525f3L, 0xaa55ab94L, 0x57489862L, - 0x63e81440L, - 0x55ca396aL, 0x2aab10b6L, 0xb4cc5c34L, - 0x1141e8ceL, - 0xa15486afL, 0x7c72e993L, 0xb3ee1411L, - 0x636fbc2aL, - 0x2ba9c55dL, 0x741831f6L, 0xce5c3e16L, - 0x9b87931eL, - 0xafd6ba33L, 0x6c24cf5cL, 0x7a325381L, - 0x28958677L, - 0x3b8f4898L, 0x6b4bb9afL, 0xc4bfe81bL, - 0x66282193L, - 0x61d809ccL, 0xfb21a991L, 0x487cac60L, - 0x5dec8032L, - 0xef845d5dL, 0xe98575b1L, 0xdc262302L, - 0xeb651b88L, - 0x23893e81L, 0xd396acc5L, 0x0f6d6ff3L, - 0x83f44239L, - 0x2e0b4482L, 0xa4842004L, 0x69c8f04aL, - 0x9e1f9b5eL, - 0x21c66842L, 0xf6e96c9aL, 0x670c9c61L, - 0xabd388f0L, - 0x6a51a0d2L, 0xd8542f68L, 0x960fa728L, - 0xab5133a3L, - 0x6eef0b6cL, 0x137a3be4L, 0xba3bf050L, - 0x7efb2a98L, - 0xa1f1651dL, 0x39af0176L, 0x66ca593eL, - 0x82430e88L, - 0x8cee8619L, 0x456f9fb4L, 0x7d84a5c3L, - 0x3b8b5ebeL, - 0xe06f75d8L, 0x85c12073L, 0x401a449fL, - 0x56c16aa6L, - 0x4ed3aa62L, 0x363f7706L, 0x1bfedf72L, - 0x429b023dL, - 0x37d0d724L, 0xd00a1248L, 0xdb0fead3L, - 0x49f1c09bL, - 0x075372c9L, 0x80991b7bL, 0x25d479d8L, - 0xf6e8def7L, - 0xe3fe501aL, 0xb6794c3bL, 0x976ce0bdL, - 0x04c006baL, - 0xc1a94fb6L, 0x409f60c4L, 0x5e5c9ec2L, - 0x196a2463L, - 0x68fb6fafL, 0x3e6c53b5L, 0x1339b2ebL, - 0x3b52ec6fL, - 0x6dfc511fL, 0x9b30952cL, 0xcc814544L, - 0xaf5ebd09L, - 0xbee3d004L, 0xde334afdL, 0x660f2807L, - 0x192e4bb3L, - 0xc0cba857L, 0x45c8740fL, 0xd20b5f39L, - 0xb9d3fbdbL, - 0x5579c0bdL, 0x1a60320aL, 0xd6a100c6L, - 0x402c7279L, - 0x679f25feL, 0xfb1fa3ccL, 0x8ea5e9f8L, - 0xdb3222f8L, - 0x3c7516dfL, 0xfd616b15L, 0x2f501ec8L, - 0xad0552abL, - 0x323db5faL, 0xfd238760L, 0x53317b48L, - 0x3e00df82L, - 0x9e5c57bbL, 0xca6f8ca0L, 0x1a87562eL, - 0xdf1769dbL, - 0xd542a8f6L, 0x287effc3L, 0xac6732c6L, - 0x8c4f5573L, - 0x695b27b0L, 0xbbca58c8L, 0xe1ffa35dL, - 0xb8f011a0L, - 0x10fa3d98L, 0xfd2183b8L, 0x4afcb56cL, - 0x2dd1d35bL, - 0x9a53e479L, 0xb6f84565L, 0xd28e49bcL, - 0x4bfb9790L, - 0xe1ddf2daL, 0xa4cb7e33L, 0x62fb1341L, - 0xcee4c6e8L, - 0xef20cadaL, 0x36774c01L, 0xd07e9efeL, - 0x2bf11fb4L, - 0x95dbda4dL, 0xae909198L, 0xeaad8e71L, - 0x6b93d5a0L, - 0xd08ed1d0L, 0xafc725e0L, 0x8e3c5b2fL, - 0x8e7594b7L, - 0x8ff6e2fbL, 0xf2122b64L, 0x8888b812L, - 0x900df01cL, - 0x4fad5ea0L, 0x688fc31cL, 0xd1cff191L, - 0xb3a8c1adL, - 0x2f2f2218L, 0xbe0e1777L, 0xea752dfeL, - 0x8b021fa1L, - 0xe5a0cc0fL, 0xb56f74e8L, 0x18acf3d6L, - 0xce89e299L, - 0xb4a84fe0L, 0xfd13e0b7L, 0x7cc43b81L, - 0xd2ada8d9L, - 0x165fa266L, 0x80957705L, 0x93cc7314L, - 0x211a1477L, - 0xe6ad2065L, 0x77b5fa86L, 0xc75442f5L, - 0xfb9d35cfL, - 0xebcdaf0cL, 0x7b3e89a0L, 0xd6411bd3L, - 0xae1e7e49L, - 0x00250e2dL, 0x2071b35eL, 0x226800bbL, - 0x57b8e0afL, - 0x2464369bL, 0xf009b91eL, 0x5563911dL, - 0x59dfa6aaL, - 0x78c14389L, 0xd95a537fL, 0x207d5ba2L, - 0x02e5b9c5L, - 0x83260376L, 0x6295cfa9L, 0x11c81968L, - 0x4e734a41L, - 0xb3472dcaL, 0x7b14a94aL, 0x1b510052L, - 0x9a532915L, - 0xd60f573fL, 0xbc9bc6e4L, 0x2b60a476L, - 0x81e67400L, - 0x08ba6fb5L, 0x571be91fL, 0xf296ec6bL, - 0x2a0dd915L, - 0xb6636521L, 0xe7b9f9b6L, 0xff34052eL, - 0xc5855664L, - 0x53b02d5dL, 0xa99f8fa1L, 0x08ba4799L, - 0x6e85076aL, - 0x4b7a70e9L, 0xb5b32944L, 0xdb75092eL, - 0xc4192623L, - 0xad6ea6b0L, 0x49a7df7dL, 0x9cee60b8L, - 0x8fedb266L, - 0xecaa8c71L, 0x699a17ffL, 0x5664526cL, - 0xc2b19ee1L, - 0x193602a5L, 0x75094c29L, 0xa0591340L, - 0xe4183a3eL, - 0x3f54989aL, 0x5b429d65L, 0x6b8fe4d6L, - 0x99f73fd6L, - 0xa1d29c07L, 0xefe830f5L, 0x4d2d38e6L, - 0xf0255dc1L, - 0x4cdd2086L, 0x8470eb26L, 0x6382e9c6L, - 0x021ecc5eL, - 0x09686b3fL, 0x3ebaefc9L, 0x3c971814L, - 0x6b6a70a1L, - 0x687f3584L, 0x52a0e286L, 0xb79c5305L, - 0xaa500737L, - 0x3e07841cL, 0x7fdeae5cL, 0x8e7d44ecL, - 0x5716f2b8L, - 0xb03ada37L, 0xf0500c0dL, 0xf01c1f04L, - 0x0200b3ffL, - 0xae0cf51aL, 0x3cb574b2L, 0x25837a58L, - 0xdc0921bdL, - 0xd19113f9L, 0x7ca92ff6L, 0x94324773L, - 0x22f54701L, - 0x3ae5e581L, 0x37c2dadcL, 0xc8b57634L, - 0x9af3dda7L, - 0xa9446146L, 0x0fd0030eL, 0xecc8c73eL, - 0xa4751e41L, - 0xe238cd99L, 0x3bea0e2fL, 0x3280bba1L, - 0x183eb331L, - 0x4e548b38L, 0x4f6db908L, 0x6f420d03L, - 0xf60a04bfL, - 0x2cb81290L, 0x24977c79L, 0x5679b072L, - 0xbcaf89afL, - 0xde9a771fL, 0xd9930810L, 0xb38bae12L, - 0xdccf3f2eL, - 0x5512721fL, 0x2e6b7124L, 0x501adde6L, - 0x9f84cd87L, - 0x7a584718L, 0x7408da17L, 0xbc9f9abcL, - 0xe94b7d8cL, - 0xec7aec3aL, 0xdb851dfaL, 0x63094366L, - 0xc464c3d2L, - 0xef1c1847L, 0x3215d908L, 0xdd433b37L, - 0x24c2ba16L, - 0x12a14d43L, 0x2a65c451L, 0x50940002L, - 0x133ae4ddL, - 0x71dff89eL, 0x10314e55L, 0x81ac77d6L, - 0x5f11199bL, - 0x043556f1L, 0xd7a3c76bL, 0x3c11183bL, - 0x5924a509L, - 0xf28fe6edL, 0x97f1fbfaL, 0x9ebabf2cL, - 0x1e153c6eL, - 0x86e34570L, 0xeae96fb1L, 0x860e5e0aL, - 0x5a3e2ab3L, - 0x771fe71cL, 0x4e3d06faL, 0x2965dcb9L, - 0x99e71d0fL, - 0x803e89d6L, 0x5266c825L, 0x2e4cc978L, - 0x9c10b36aL, - 0xc6150ebaL, 0x94e2ea78L, 0xa5fc3c53L, - 0x1e0a2df4L, - 0xf2f74ea7L, 0x361d2b3dL, 0x1939260fL, - 0x19c27960L, - 0x5223a708L, 0xf71312b6L, 0xebadfe6eL, - 0xeac31f66L, - 0xe3bc4595L, 0xa67bc883L, 0xb17f37d1L, - 0x018cff28L, - 0xc332ddefL, 0xbe6c5aa5L, 0x65582185L, - 0x68ab9802L, - 0xeecea50fL, 0xdb2f953bL, 0x2aef7dadL, - 0x5b6e2f84L, - 0x1521b628L, 0x29076170L, 0xecdd4775L, - 0x619f1510L, - 0x13cca830L, 0xeb61bd96L, 0x0334fe1eL, - 0xaa0363cfL, - 0xb5735c90L, 0x4c70a239L, 0xd59e9e0bL, - 0xcbaade14L, - 0xeecc86bcL, 0x60622ca7L, 0x9cab5cabL, - 0xb2f3846eL, - 0x648b1eafL, 0x19bdf0caL, 0xa02369b9L, - 0x655abb50L, - 0x40685a32L, 0x3c2ab4b3L, 0x319ee9d5L, - 0xc021b8f7L, - 0x9b540b19L, 0x875fa099L, 0x95f7997eL, - 0x623d7da8L, - 0xf837889aL, 0x97e32d77L, 0x11ed935fL, - 0x16681281L, - 0x0e358829L, 0xc7e61fd6L, 0x96dedfa1L, - 0x7858ba99L, - 0x57f584a5L, 0x1b227263L, 0x9b83c3ffL, - 0x1ac24696L, - 0xcdb30aebL, 0x532e3054L, 0x8fd948e4L, - 0x6dbc3128L, - 0x58ebf2efL, 0x34c6ffeaL, 0xfe28ed61L, - 0xee7c3c73L, - 0x5d4a14d9L, 0xe864b7e3L, 0x42105d14L, - 0x203e13e0L, - 0x45eee2b6L, 0xa3aaabeaL, 0xdb6c4f15L, - 0xfacb4fd0L, - 0xc742f442L, 0xef6abbb5L, 0x654f3b1dL, - 0x41cd2105L, - 0xd81e799eL, 0x86854dc7L, 0xe44b476aL, - 0x3d816250L, - 0xcf62a1f2L, 0x5b8d2646L, 0xfc8883a0L, - 0xc1c7b6a3L, - 0x7f1524c3L, 0x69cb7492L, 0x47848a0bL, - 0x5692b285L, - 0x095bbf00L, 0xad19489dL, 0x1462b174L, - 0x23820e00L, - 0x58428d2aL, 0x0c55f5eaL, 0x1dadf43eL, - 0x233f7061L, - 0x3372f092L, 0x8d937e41L, 0xd65fecf1L, - 0x6c223bdbL, - 0x7cde3759L, 0xcbee7460L, 0x4085f2a7L, - 0xce77326eL, - 0xa6078084L, 0x19f8509eL, 0xe8efd855L, - 0x61d99735L, - 0xa969a7aaL, 0xc50c06c2L, 0x5a04abfcL, - 0x800bcadcL, - 0x9e447a2eL, 0xc3453484L, 0xfdd56705L, - 0x0e1e9ec9L, - 0xdb73dbd3L, 0x105588cdL, 0x675fda79L, - 0xe3674340L, - 0xc5c43465L, 0x713e38d8L, 0x3d28f89eL, - 0xf16dff20L, - 0x153e21e7L, 0x8fb03d4aL, 0xe6e39f2bL, - 0xdb83adf7L, - 0xe93d5a68L, 0x948140f7L, 0xf64c261cL, - 0x94692934L, - 0x411520f7L, 0x7602d4f7L, 0xbcf46b2eL, - 0xd4a20068L, - 0xd4082471L, 0x3320f46aL, 0x43b7d4b7L, - 0x500061afL, - 0x1e39f62eL, 0x97244546L, 0x14214f74L, - 0xbf8b8840L, - 0x4d95fc1dL, 0x96b591afL, 0x70f4ddd3L, - 0x66a02f45L, - 0xbfbc09ecL, 0x03bd9785L, 0x7fac6dd0L, - 0x31cb8504L, - 0x96eb27b3L, 0x55fd3941L, 0xda2547e6L, - 0xabca0a9aL, - 0x28507825L, 0x530429f4L, 0x0a2c86daL, - 0xe9b66dfbL, - 0x68dc1462L, 0xd7486900L, 0x680ec0a4L, - 0x27a18deeL, - 0x4f3ffea2L, 0xe887ad8cL, 0xb58ce006L, - 0x7af4d6b6L, - 0xaace1e7cL, 0xd3375fecL, 0xce78a399L, - 0x406b2a42L, - 0x20fe9e35L, 0xd9f385b9L, 0xee39d7abL, - 0x3b124e8bL, - 0x1dc9faf7L, 0x4b6d1856L, 0x26a36631L, - 0xeae397b2L, - 0x3a6efa74L, 0xdd5b4332L, 0x6841e7f7L, - 0xca7820fbL, - 0xfb0af54eL, 0xd8feb397L, 0x454056acL, - 0xba489527L, - 0x55533a3aL, 0x20838d87L, 0xfe6ba9b7L, - 0xd096954bL, - 0x55a867bcL, 0xa1159a58L, 0xcca92963L, - 0x99e1db33L, - 0xa62a4a56L, 0x3f3125f9L, 0x5ef47e1cL, - 0x9029317cL, - 0xfdf8e802L, 0x04272f70L, 0x80bb155cL, - 0x05282ce3L, - 0x95c11548L, 0xe4c66d22L, 0x48c1133fL, - 0xc70f86dcL, - 0x07f9c9eeL, 0x41041f0fL, 0x404779a4L, - 0x5d886e17L, - 0x325f51ebL, 0xd59bc0d1L, 0xf2bcc18fL, - 0x41113564L, - 0x257b7834L, 0x602a9c60L, 0xdff8e8a3L, - 0x1f636c1bL, - 0x0e12b4c2L, 0x02e1329eL, 0xaf664fd1L, - 0xcad18115L, - 0x6b2395e0L, 0x333e92e1L, 0x3b240b62L, - 0xeebeb922L, - 0x85b2a20eL, 0xe6ba0d99L, 0xde720c8cL, - 0x2da2f728L, - 0xd0127845L, 0x95b794fdL, 0x647d0862L, - 0xe7ccf5f0L, - 0x5449a36fL, 0x877d48faL, 0xc39dfd27L, - 0xf33e8d1eL, - 0x0a476341L, 0x992eff74L, 0x3a6f6eabL, - 0xf4f8fd37L, - 0xa812dc60L, 0xa1ebddf8L, 0x991be14cL, - 0xdb6e6b0dL, - 0xc67b5510L, 0x6d672c37L, 0x2765d43bL, - 0xdcd0e804L, - 0xf1290dc7L, 0xcc00ffa3L, 0xb5390f92L, - 0x690fed0bL, - 0x667b9ffbL, 0xcedb7d9cL, 0xa091cf0bL, - 0xd9155ea3L, - 0xbb132f88L, 0x515bad24L, 0x7b9479bfL, - 0x763bd6ebL, - 0x37392eb3L, 0xcc115979L, 0x8026e297L, - 0xf42e312dL, - 0x6842ada7L, 0xc66a2b3bL, 0x12754cccL, - 0x782ef11cL, - 0x6a124237L, 0xb79251e7L, 0x06a1bbe6L, - 0x4bfb6350L, - 0x1a6b1018L, 0x11caedfaL, 0x3d25bdd8L, - 0xe2e1c3c9L, - 0x44421659L, 0x0a121386L, 0xd90cec6eL, - 0xd5abea2aL, - 0x64af674eL, 0xda86a85fL, 0xbebfe988L, - 0x64e4c3feL, - 0x9dbc8057L, 0xf0f7c086L, 0x60787bf8L, - 0x6003604dL, - 0xd1fd8346L, 0xf6381fb0L, 0x7745ae04L, - 0xd736fcccL, - 0x83426b33L, 0xf01eab71L, 0xb0804187L, - 0x3c005e5fL, - 0x77a057beL, 0xbde8ae24L, 0x55464299L, - 0xbf582e61L, - 0x4e58f48fL, 0xf2ddfda2L, 0xf474ef38L, - 0x8789bdc2L, - 0x5366f9c3L, 0xc8b38e74L, 0xb475f255L, - 0x46fcd9b9L, - 0x7aeb2661L, 0x8b1ddf84L, 0x846a0e79L, - 0x915f95e2L, - 0x466e598eL, 0x20b45770L, 0x8cd55591L, - 0xc902de4cL, - 0xb90bace1L, 0xbb8205d0L, 0x11a86248L, - 0x7574a99eL, - 0xb77f19b6L, 0xe0a9dc09L, 0x662d09a1L, - 0xc4324633L, - 0xe85a1f02L, 0x09f0be8cL, 0x4a99a025L, - 0x1d6efe10L, - 0x1ab93d1dL, 0x0ba5a4dfL, 0xa186f20fL, - 0x2868f169L, - 0xdcb7da83L, 0x573906feL, 0xa1e2ce9bL, - 0x4fcd7f52L, - 0x50115e01L, 0xa70683faL, 0xa002b5c4L, - 0x0de6d027L, - 0x9af88c27L, 0x773f8641L, 0xc3604c06L, - 0x61a806b5L, - 0xf0177a28L, 0xc0f586e0L, 0x006058aaL, - 0x30dc7d62L, - 0x11e69ed7L, 0x2338ea63L, 0x53c2dd94L, - 0xc2c21634L, - 0xbbcbee56L, 0x90bcb6deL, 0xebfc7da1L, - 0xce591d76L, - 0x6f05e409L, 0x4b7c0188L, 0x39720a3dL, - 0x7c927c24L, - 0x86e3725fL, 0x724d9db9L, 0x1ac15bb4L, - 0xd39eb8fcL, - 0xed545578L, 0x08fca5b5L, 0xd83d7cd3L, - 0x4dad0fc4L, - 0x1e50ef5eL, 0xb161e6f8L, 0xa28514d9L, - 0x6c51133cL, - 0x6fd5c7e7L, 0x56e14ec4L, 0x362abfceL, - 0xddc6c837L, - 0xd79a3234L, 0x92638212L, 0x670efa8eL, - 0x406000e0L, - 0x3a39ce37L, 0xd3faf5cfL, 0xabc27737L, - 0x5ac52d1bL, - 0x5cb0679eL, 0x4fa33742L, 0xd3822740L, - 0x99bc9bbeL, - 0xd5118e9dL, 0xbf0f7315L, 0xd62d1c7eL, - 0xc700c47bL, - 0xb78c1b6bL, 0x21a19045L, 0xb26eb1beL, - 0x6a366eb4L, - 0x5748ab2fL, 0xbc946e79L, 0xc6a376d2L, - 0x6549c2c8L, - 0x530ff8eeL, 0x468dde7dL, 0xd5730a1dL, - 0x4cd04dc6L, - 0x2939bbdbL, 0xa9ba4650L, 0xac9526e8L, - 0xbe5ee304L, - 0xa1fad5f0L, 0x6a2d519aL, 0x63ef8ce2L, - 0x9a86ee22L, - 0xc089c2b8L, 0x43242ef6L, 0xa51e03aaL, - 0x9cf2d0a4L, - 0x83c061baL, 0x9be96a4dL, 0x8fe51550L, - 0xba645bd6L, - 0x2826a2f9L, 0xa73a3ae1L, 0x4ba99586L, - 0xef5562e9L, - 0xc72fefd3L, 0xf752f7daL, 0x3f046f69L, - 0x77fa0a59L, - 0x80e4a915L, 0x87b08601L, 0x9b09e6adL, - 0x3b3ee593L, - 0xe990fd5aL, 0x9e34d797L, 0x2cf0b7d9L, - 0x022b8b51L, - 0x96d5ac3aL, 0x017da67dL, 0xd1cf3ed6L, - 0x7c7d2d28L, - 0x1f9f25cfL, 0xadf2b89bL, 0x5ad6b472L, - 0x5a88f54cL, - 0xe029ac71L, 0xe019a5e6L, 0x47b0acfdL, - 0xed93fa9bL, - 0xe8d3c48dL, 0x283b57ccL, 0xf8d56629L, - 0x79132e28L, - 0x785f0191L, 0xed756055L, 0xf7960e44L, - 0xe3d35e8cL, - 0x15056dd4L, 0x88f46dbaL, 0x03a16125L, - 0x0564f0bdL, - 0xc3eb9e15L, 0x3c9057a2L, 0x97271aecL, - 0xa93a072aL, - 0x1b3f6d9bL, 0x1e6321f5L, 0xf59c66fbL, - 0x26dcf319L, - 0x7533d928L, 0xb155fdf5L, 0x03563482L, - 0x8aba3cbbL, - 0x28517711L, 0xc20ad9f8L, 0xabcc5167L, - 0xccad925fL, - 0x4de81751L, 0x3830dc8eL, 0x379d5862L, - 0x9320f991L, - 0xea7a90c2L, 0xfb3e7bceL, 0x5121ce64L, - 0x774fbe32L, - 0xa8b6e37eL, 0xc3293d46L, 0x48de5369L, - 0x6413e680L, - 0xa2ae0810L, 0xdd6db224L, 0x69852dfdL, - 0x09072166L, - 0xb39a460aL, 0x6445c0ddL, 0x586cdecfL, - 0x1c20c8aeL, - 0x5bbef7ddL, 0x1b588d40L, 0xccd2017fL, - 0x6bb4e3bbL, - 0xdda26a7eL, 0x3a59ff45L, 0x3e350a44L, - 0xbcb4cdd5L, - 0x72eacea8L, 0xfa6484bbL, 0x8d6612aeL, - 0xbf3c6f47L, - 0xd29be463L, 0x542f5d9eL, 0xaec2771bL, - 0xf64e6370L, - 0x740e0d8dL, 0xe75b1357L, 0xf8721671L, - 0xaf537d5dL, - 0x4040cb08L, 0x4eb4e2ccL, 0x34d2466aL, - 0x0115af84L, - 0xe1b00428L, 0x95983a1dL, 0x06b89fb4L, - 0xce6ea048L, - 0x6f3f3b82L, 0x3520ab82L, 0x011a1d4bL, - 0x277227f8L, - 0x611560b1L, 0xe7933fdcL, 0xbb3a792bL, - 0x344525bdL, - 0xa08839e1L, 0x51ce794bL, 0x2f32c9b7L, - 0xa01fbac9L, - 0xe01cc87eL, 0xbcc7d1f6L, 0xcf0111c3L, - 0xa1e8aac7L, - 0x1a908749L, 0xd44fbd9aL, 0xd0dadecbL, - 0xd50ada38L, - 0x0339c32aL, 0xc6913667L, 0x8df9317cL, - 0xe0b12b4fL, - 0xf79e59b7L, 0x43f5bb3aL, 0xf2d519ffL, - 0x27d9459cL, - 0xbf97222cL, 0x15e6fc2aL, 0x0f91fc71L, - 0x9b941525L, - 0xfae59361L, 0xceb69cebL, 0xc2a86459L, - 0x12baa8d1L, - 0xb6c1075eL, 0xe3056a0cL, 0x10d25065L, - 0xcb03a442L, - 0xe0ec6e0eL, 0x1698db3bL, 0x4c98a0beL, - 0x3278e964L, - 0x9f1f9532L, 0xe0d392dfL, 0xd3a0342bL, - 0x8971f21eL, - 0x1b0a7441L, 0x4ba3348cL, 0xc5be7120L, - 0xc37632d8L, - 0xdf359f8dL, 0x9b992f2eL, 0xe60b6f47L, - 0x0fe3f11dL, - 0xe54cda54L, 0x1edad891L, 0xce6279cfL, - 0xcd3e7e6fL, - 0x1618b166L, 0xfd2c1d05L, 0x848fd2c5L, - 0xf6fb2299L, - 0xf523f357L, 0xa6327623L, 0x93a83531L, - 0x56cccd02L, - 0xacf08162L, 0x5a75ebb5L, 0x6e163697L, - 0x88d273ccL, - 0xde966292L, 0x81b949d0L, 0x4c50901bL, - 0x71c65614L, - 0xe6c6c7bdL, 0x327a140aL, 0x45e1d006L, - 0xc3f27b9aL, - 0xc9aa53fdL, 0x62a80f00L, 0xbb25bfe2L, - 0x35bdd2f6L, - 0x71126905L, 0xb2040222L, 0xb6cbcf7cL, - 0xcd769c2bL, - 0x53113ec0L, 0x1640e3d3L, 0x38abbd60L, - 0x2547adf0L, - 0xba38209cL, 0xf746ce76L, 0x77afa1c5L, - 0x20756060L, - 0x85cbfe4eL, 0x8ae88dd8L, 0x7aaaf9b0L, - 0x4cf9aa7eL, - 0x1948c25cL, 0x02fb8a8cL, 0x01c36ae4L, - 0xd6ebe1f9L, - 0x90d4f869L, 0xa65cdea0L, 0x3f09252dL, - 0xc208e69fL, - 0xb74e6132L, 0xce77e25bL, 0x578fdfe3L, - 0x3ac372e6L, - } -}; - -void BF_encrypt(BF_LONG *data, const BF_KEY *key) -{ - register BF_LONG l, r; - register const BF_LONG *p, *s; - - p = key->P; - s = &(key->S[0]); - l = data[0]; - r = data[1]; - - l ^= p[0]; - BF_ENC(r, l, s, p[1]); - BF_ENC(l, r, s, p[2]); - BF_ENC(r, l, s, p[3]); - BF_ENC(l, r, s, p[4]); - BF_ENC(r, l, s, p[5]); - BF_ENC(l, r, s, p[6]); - BF_ENC(r, l, s, p[7]); - BF_ENC(l, r, s, p[8]); - BF_ENC(r, l, s, p[9]); - BF_ENC(l, r, s, p[10]); - BF_ENC(r, l, s, p[11]); - BF_ENC(l, r, s, p[12]); - BF_ENC(r, l, s, p[13]); - BF_ENC(l, r, s, p[14]); - BF_ENC(r, l, s, p[15]); - BF_ENC(l, r, s, p[16]); -# if BF_ROUNDS == 20 - BF_ENC(r, l, s, p[17]); - BF_ENC(l, r, s, p[18]); - BF_ENC(r, l, s, p[19]); - BF_ENC(l, r, s, p[20]); -# endif - r ^= p[BF_ROUNDS + 1]; - - data[1] = l & 0xffffffffU; - data[0] = r & 0xffffffffU; -} - -void BF_decrypt(BF_LONG *data, const BF_KEY *key) -{ - register BF_LONG l, r; - register const BF_LONG *p, *s; - - p = key->P; - s = &(key->S[0]); - l = data[0]; - r = data[1]; - - l ^= p[BF_ROUNDS + 1]; -# if BF_ROUNDS == 20 - BF_ENC(r, l, s, p[20]); - BF_ENC(l, r, s, p[19]); - BF_ENC(r, l, s, p[18]); - BF_ENC(l, r, s, p[17]); -# endif - BF_ENC(r, l, s, p[16]); - BF_ENC(l, r, s, p[15]); - BF_ENC(r, l, s, p[14]); - BF_ENC(l, r, s, p[13]); - BF_ENC(r, l, s, p[12]); - BF_ENC(l, r, s, p[11]); - BF_ENC(r, l, s, p[10]); - BF_ENC(l, r, s, p[9]); - BF_ENC(r, l, s, p[8]); - BF_ENC(l, r, s, p[7]); - BF_ENC(r, l, s, p[6]); - BF_ENC(l, r, s, p[5]); - BF_ENC(r, l, s, p[4]); - BF_ENC(l, r, s, p[3]); - BF_ENC(r, l, s, p[2]); - BF_ENC(l, r, s, p[1]); - r ^= p[0]; - - data[1] = l & 0xffffffffU; - data[0] = r & 0xffffffffU; -} - -void BF_cfb64_encrypt(const unsigned char *in, unsigned char *out, - long length, const BF_KEY *schedule, - unsigned char *ivec, int *num, int encrypt) -{ - register BF_LONG v0, v1, t; - register int n = *num; - register long l = length; - BF_LONG ti[2]; - unsigned char *iv, c, cc; - - iv = (unsigned char *)ivec; - if (encrypt) { - while (l--) { - if (n == 0) { - n2l(iv, v0); - ti[0] = v0; - n2l(iv, v1); - ti[1] = v1; - BF_encrypt((BF_LONG *)ti, schedule); - iv = (unsigned char *)ivec; - t = ti[0]; - l2n(t, iv); - t = ti[1]; - l2n(t, iv); - iv = (unsigned char *)ivec; - } - c = *(in++) ^ iv[n]; - *(out++) = c; - iv[n] = c; - n = (n + 1) & 0x07; - } - } else { - while (l--) { - if (n == 0) { - n2l(iv, v0); - ti[0] = v0; - n2l(iv, v1); - ti[1] = v1; - BF_encrypt((BF_LONG *)ti, schedule); - iv = (unsigned char *)ivec; - t = ti[0]; - l2n(t, iv); - t = ti[1]; - l2n(t, iv); - iv = (unsigned char *)ivec; - } - cc = *(in++); - c = iv[n]; - iv[n] = cc; - *(out++) = c ^ cc; - n = (n + 1) & 0x07; - } - } - v0 = v1 = ti[0] = ti[1] = t = c = cc = 0; - *num = n; -} - -const char *BF_options(void) -{ - return "blowfish(ptr)"; -} - -void BF_ecb_encrypt(const unsigned char *in, unsigned char *out, - const BF_KEY *key, int encrypt) -{ - BF_LONG l, d[2]; - - n2l(in, l); - d[0] = l; - n2l(in, l); - d[1] = l; - if (encrypt) - BF_encrypt(d, key); - else - BF_decrypt(d, key); - l = d[0]; - l2n(l, out); - l = d[1]; - l2n(l, out); - l = d[0] = d[1] = 0; -} - -#if (BF_ROUNDS != 16) && (BF_ROUNDS != 20) -# error If you set BF_ROUNDS to some value other than 16 or 20, you will have \ -to modify the code. -#endif - -void BF_cbc_encrypt(const unsigned char *in, unsigned char *out, long length, - const BF_KEY *schedule, unsigned char *ivec, int encrypt) -{ - register BF_LONG tin0, tin1; - register BF_LONG tout0, tout1, xor0, xor1; - register long l = length; - BF_LONG tin[2]; - - if (encrypt) { - n2l(ivec, tout0); - n2l(ivec, tout1); - ivec -= 8; - for (l -= 8; l >= 0; l -= 8) { - n2l(in, tin0); - n2l(in, tin1); - tin0 ^= tout0; - tin1 ^= tout1; - tin[0] = tin0; - tin[1] = tin1; - BF_encrypt(tin, schedule); - tout0 = tin[0]; - tout1 = tin[1]; - l2n(tout0, out); - l2n(tout1, out); - } - if (1||l != -8) { - unsigned char tmpin[16]; - unsigned char *ptmpin = tmpin; - memcpy(tmpin, in, l + 8); - memcpy(tmpin + l + 8, &length, 4); - int pad_length = (8-(l + 8 + 4 + 1)%8)%8; - for(int i = 0; i < pad_length; ++i) - { - tmpin[l+8+4+i]=16;//prng better - } - tmpin[l+8+4+pad_length]=pad_length; -// for(int i = 0; i < l + 8 + 4 +1 +pad_length; ++i) -// { -// printf("%.2x ", tmpin[i]); -// } -// printf("\n");fflush(stdout); - n2l(ptmpin, tin0); - n2l(ptmpin, tin1); - tin0 ^= tout0; - tin1 ^= tout1; - tin[0] = tin0; - tin[1] = tin1; - BF_encrypt(tin, schedule); - tout0 = tin[0]; - tout1 = tin[1]; - l2n(tout0, out); - l2n(tout1, out); - if(l+8+4+pad_length + 1 == 16) - { - n2l(ptmpin, tin0); - n2l(ptmpin, tin1); - tin0 ^= tout0; - tin1 ^= tout1; - tin[0] = tin0; - tin[1] = tin1; - BF_encrypt(tin, schedule); - tout0 = tin[0]; - tout1 = tin[1]; - l2n(tout0, out); - l2n(tout1, out); - } - - -// n2ln(in, tin0, tin1, l + 8); -// tin0 ^= tout0; -// tin1 ^= tout1; -// tin[0] = tin0; -// tin[1] = tin1; -// BF_encrypt(tin, schedule); -// tout0 = tin[0]; -// tout1 = tin[1]; -// l2n(tout0, out); -// l2n(tout1, out); - } - l2n(tout0, ivec); - l2n(tout1, ivec); - } else { - n2l(ivec, xor0); - n2l(ivec, xor1); - ivec -= 8; - for (l -= 8; l >= 0; l -= 8) { - n2l(in, tin0); - n2l(in, tin1); - tin[0] = tin0; - tin[1] = tin1; - BF_decrypt(tin, schedule); - tout0 = tin[0] ^ xor0; - tout1 = tin[1] ^ xor1; - l2n(tout0, out); - l2n(tout1, out); - xor0 = tin0; - xor1 = tin1; - } - if (l != -8) { - n2l(in, tin0); - n2l(in, tin1); - tin[0] = tin0; - tin[1] = tin1; - BF_decrypt(tin, schedule); - tout0 = tin[0] ^ xor0; - tout1 = tin[1] ^ xor1; - l2nn(tout0, tout1, out, l + 8); - xor0 = tin0; - xor1 = tin1; - } - l2n(xor0, ivec); - l2n(xor1, ivec); - } - tin0 = tin1 = tout0 = tout1 = xor0 = xor1 = 0; - tin[0] = tin[1] = 0; -} - -void BF_ofb64_encrypt(const unsigned char *in, unsigned char *out, - long length, const BF_KEY *schedule, - unsigned char *ivec, int *num) -{ - register BF_LONG v0, v1, t; - register int n = *num; - register long l = length; - unsigned char d[8]; - register char *dp; - BF_LONG ti[2]; - unsigned char *iv; - int save = 0; - - iv = (unsigned char *)ivec; - n2l(iv, v0); - n2l(iv, v1); - ti[0] = v0; - ti[1] = v1; - dp = (char *)d; - l2n(v0, dp); - l2n(v1, dp); - while (l--) { - if (n == 0) { - BF_encrypt((BF_LONG *)ti, schedule); - dp = (char *)d; - t = ti[0]; - l2n(t, dp); - t = ti[1]; - l2n(t, dp); - save++; - } - *(out++) = *(in++) ^ d[n]; - n = (n + 1) & 0x07; - } - if (save) { - v0 = ti[0]; - v1 = ti[1]; - iv = (unsigned char *)ivec; - l2n(v0, iv); - l2n(v1, iv); - } - t = v0 = v1 = ti[0] = ti[1] = 0; - *num = n; -} - -void BF_set_key(BF_KEY *key, int len, const unsigned char *data) -{ - int i; - BF_LONG *p, ri, in[2]; - const unsigned char *d, *end; - - memcpy(key, &bf_init, sizeof(BF_KEY)); - p = key->P; - - if (len > ((BF_ROUNDS + 2) * 4)) - len = (BF_ROUNDS + 2) * 4; - - d = data; - end = &(data[len]); - for (i = 0; i < (BF_ROUNDS + 2); i++) { - ri = *(d++); - if (d >= end) - d = data; - - ri <<= 8; - ri |= *(d++); - if (d >= end) - d = data; - - ri <<= 8; - ri |= *(d++); - if (d >= end) - d = data; - - ri <<= 8; - ri |= *(d++); - if (d >= end) - d = data; - - p[i] ^= ri; - } - - in[0] = 0L; - in[1] = 0L; - for (i = 0; i < (BF_ROUNDS + 2); i += 2) { - BF_encrypt(in, key); - p[i] = in[0]; - p[i + 1] = in[1]; - } - - p = key->S; - for (i = 0; i < 4 * 256; i += 2) { - BF_encrypt(in, key); - p[i] = in[0]; - p[i + 1] = in[1]; - } -} +static const BF_KEY bf_init = { + { + 0x243f6a88L, 0x85a308d3L, 0x13198a2eL, 0x03707344L, + 0xa4093822L, 0x299f31d0L, 0x082efa98L, 0xec4e6c89L, + 0x452821e6L, 0x38d01377L, 0xbe5466cfL, 0x34e90c6cL, + 0xc0ac29b7L, 0xc97c50ddL, 0x3f84d5b5L, 0xb5470917L, + 0x9216d5d9L, 0x8979fb1b}, { + 0xd1310ba6L, 0x98dfb5acL, 0x2ffd72dbL, + 0xd01adfb7L, + 0xb8e1afedL, 0x6a267e96L, 0xba7c9045L, + 0xf12c7f99L, + 0x24a19947L, 0xb3916cf7L, 0x0801f2e2L, + 0x858efc16L, + 0x636920d8L, 0x71574e69L, 0xa458fea3L, + 0xf4933d7eL, + 0x0d95748fL, 0x728eb658L, 0x718bcd58L, + 0x82154aeeL, + 0x7b54a41dL, 0xc25a59b5L, 0x9c30d539L, + 0x2af26013L, + 0xc5d1b023L, 0x286085f0L, 0xca417918L, + 0xb8db38efL, + 0x8e79dcb0L, 0x603a180eL, 0x6c9e0e8bL, + 0xb01e8a3eL, + 0xd71577c1L, 0xbd314b27L, 0x78af2fdaL, + 0x55605c60L, + 0xe65525f3L, 0xaa55ab94L, 0x57489862L, + 0x63e81440L, + 0x55ca396aL, 0x2aab10b6L, 0xb4cc5c34L, + 0x1141e8ceL, + 0xa15486afL, 0x7c72e993L, 0xb3ee1411L, + 0x636fbc2aL, + 0x2ba9c55dL, 0x741831f6L, 0xce5c3e16L, + 0x9b87931eL, + 0xafd6ba33L, 0x6c24cf5cL, 0x7a325381L, + 0x28958677L, + 0x3b8f4898L, 0x6b4bb9afL, 0xc4bfe81bL, + 0x66282193L, + 0x61d809ccL, 0xfb21a991L, 0x487cac60L, + 0x5dec8032L, + 0xef845d5dL, 0xe98575b1L, 0xdc262302L, + 0xeb651b88L, + 0x23893e81L, 0xd396acc5L, 0x0f6d6ff3L, + 0x83f44239L, + 0x2e0b4482L, 0xa4842004L, 0x69c8f04aL, + 0x9e1f9b5eL, + 0x21c66842L, 0xf6e96c9aL, 0x670c9c61L, + 0xabd388f0L, + 0x6a51a0d2L, 0xd8542f68L, 0x960fa728L, + 0xab5133a3L, + 0x6eef0b6cL, 0x137a3be4L, 0xba3bf050L, + 0x7efb2a98L, + 0xa1f1651dL, 0x39af0176L, 0x66ca593eL, + 0x82430e88L, + 0x8cee8619L, 0x456f9fb4L, 0x7d84a5c3L, + 0x3b8b5ebeL, + 0xe06f75d8L, 0x85c12073L, 0x401a449fL, + 0x56c16aa6L, + 0x4ed3aa62L, 0x363f7706L, 0x1bfedf72L, + 0x429b023dL, + 0x37d0d724L, 0xd00a1248L, 0xdb0fead3L, + 0x49f1c09bL, + 0x075372c9L, 0x80991b7bL, 0x25d479d8L, + 0xf6e8def7L, + 0xe3fe501aL, 0xb6794c3bL, 0x976ce0bdL, + 0x04c006baL, + 0xc1a94fb6L, 0x409f60c4L, 0x5e5c9ec2L, + 0x196a2463L, + 0x68fb6fafL, 0x3e6c53b5L, 0x1339b2ebL, + 0x3b52ec6fL, + 0x6dfc511fL, 0x9b30952cL, 0xcc814544L, + 0xaf5ebd09L, + 0xbee3d004L, 0xde334afdL, 0x660f2807L, + 0x192e4bb3L, + 0xc0cba857L, 0x45c8740fL, 0xd20b5f39L, + 0xb9d3fbdbL, + 0x5579c0bdL, 0x1a60320aL, 0xd6a100c6L, + 0x402c7279L, + 0x679f25feL, 0xfb1fa3ccL, 0x8ea5e9f8L, + 0xdb3222f8L, + 0x3c7516dfL, 0xfd616b15L, 0x2f501ec8L, + 0xad0552abL, + 0x323db5faL, 0xfd238760L, 0x53317b48L, + 0x3e00df82L, + 0x9e5c57bbL, 0xca6f8ca0L, 0x1a87562eL, + 0xdf1769dbL, + 0xd542a8f6L, 0x287effc3L, 0xac6732c6L, + 0x8c4f5573L, + 0x695b27b0L, 0xbbca58c8L, 0xe1ffa35dL, + 0xb8f011a0L, + 0x10fa3d98L, 0xfd2183b8L, 0x4afcb56cL, + 0x2dd1d35bL, + 0x9a53e479L, 0xb6f84565L, 0xd28e49bcL, + 0x4bfb9790L, + 0xe1ddf2daL, 0xa4cb7e33L, 0x62fb1341L, + 0xcee4c6e8L, + 0xef20cadaL, 0x36774c01L, 0xd07e9efeL, + 0x2bf11fb4L, + 0x95dbda4dL, 0xae909198L, 0xeaad8e71L, + 0x6b93d5a0L, + 0xd08ed1d0L, 0xafc725e0L, 0x8e3c5b2fL, + 0x8e7594b7L, + 0x8ff6e2fbL, 0xf2122b64L, 0x8888b812L, + 0x900df01cL, + 0x4fad5ea0L, 0x688fc31cL, 0xd1cff191L, + 0xb3a8c1adL, + 0x2f2f2218L, 0xbe0e1777L, 0xea752dfeL, + 0x8b021fa1L, + 0xe5a0cc0fL, 0xb56f74e8L, 0x18acf3d6L, + 0xce89e299L, + 0xb4a84fe0L, 0xfd13e0b7L, 0x7cc43b81L, + 0xd2ada8d9L, + 0x165fa266L, 0x80957705L, 0x93cc7314L, + 0x211a1477L, + 0xe6ad2065L, 0x77b5fa86L, 0xc75442f5L, + 0xfb9d35cfL, + 0xebcdaf0cL, 0x7b3e89a0L, 0xd6411bd3L, + 0xae1e7e49L, + 0x00250e2dL, 0x2071b35eL, 0x226800bbL, + 0x57b8e0afL, + 0x2464369bL, 0xf009b91eL, 0x5563911dL, + 0x59dfa6aaL, + 0x78c14389L, 0xd95a537fL, 0x207d5ba2L, + 0x02e5b9c5L, + 0x83260376L, 0x6295cfa9L, 0x11c81968L, + 0x4e734a41L, + 0xb3472dcaL, 0x7b14a94aL, 0x1b510052L, + 0x9a532915L, + 0xd60f573fL, 0xbc9bc6e4L, 0x2b60a476L, + 0x81e67400L, + 0x08ba6fb5L, 0x571be91fL, 0xf296ec6bL, + 0x2a0dd915L, + 0xb6636521L, 0xe7b9f9b6L, 0xff34052eL, + 0xc5855664L, + 0x53b02d5dL, 0xa99f8fa1L, 0x08ba4799L, + 0x6e85076aL, + 0x4b7a70e9L, 0xb5b32944L, 0xdb75092eL, + 0xc4192623L, + 0xad6ea6b0L, 0x49a7df7dL, 0x9cee60b8L, + 0x8fedb266L, + 0xecaa8c71L, 0x699a17ffL, 0x5664526cL, + 0xc2b19ee1L, + 0x193602a5L, 0x75094c29L, 0xa0591340L, + 0xe4183a3eL, + 0x3f54989aL, 0x5b429d65L, 0x6b8fe4d6L, + 0x99f73fd6L, + 0xa1d29c07L, 0xefe830f5L, 0x4d2d38e6L, + 0xf0255dc1L, + 0x4cdd2086L, 0x8470eb26L, 0x6382e9c6L, + 0x021ecc5eL, + 0x09686b3fL, 0x3ebaefc9L, 0x3c971814L, + 0x6b6a70a1L, + 0x687f3584L, 0x52a0e286L, 0xb79c5305L, + 0xaa500737L, + 0x3e07841cL, 0x7fdeae5cL, 0x8e7d44ecL, + 0x5716f2b8L, + 0xb03ada37L, 0xf0500c0dL, 0xf01c1f04L, + 0x0200b3ffL, + 0xae0cf51aL, 0x3cb574b2L, 0x25837a58L, + 0xdc0921bdL, + 0xd19113f9L, 0x7ca92ff6L, 0x94324773L, + 0x22f54701L, + 0x3ae5e581L, 0x37c2dadcL, 0xc8b57634L, + 0x9af3dda7L, + 0xa9446146L, 0x0fd0030eL, 0xecc8c73eL, + 0xa4751e41L, + 0xe238cd99L, 0x3bea0e2fL, 0x3280bba1L, + 0x183eb331L, + 0x4e548b38L, 0x4f6db908L, 0x6f420d03L, + 0xf60a04bfL, + 0x2cb81290L, 0x24977c79L, 0x5679b072L, + 0xbcaf89afL, + 0xde9a771fL, 0xd9930810L, 0xb38bae12L, + 0xdccf3f2eL, + 0x5512721fL, 0x2e6b7124L, 0x501adde6L, + 0x9f84cd87L, + 0x7a584718L, 0x7408da17L, 0xbc9f9abcL, + 0xe94b7d8cL, + 0xec7aec3aL, 0xdb851dfaL, 0x63094366L, + 0xc464c3d2L, + 0xef1c1847L, 0x3215d908L, 0xdd433b37L, + 0x24c2ba16L, + 0x12a14d43L, 0x2a65c451L, 0x50940002L, + 0x133ae4ddL, + 0x71dff89eL, 0x10314e55L, 0x81ac77d6L, + 0x5f11199bL, + 0x043556f1L, 0xd7a3c76bL, 0x3c11183bL, + 0x5924a509L, + 0xf28fe6edL, 0x97f1fbfaL, 0x9ebabf2cL, + 0x1e153c6eL, + 0x86e34570L, 0xeae96fb1L, 0x860e5e0aL, + 0x5a3e2ab3L, + 0x771fe71cL, 0x4e3d06faL, 0x2965dcb9L, + 0x99e71d0fL, + 0x803e89d6L, 0x5266c825L, 0x2e4cc978L, + 0x9c10b36aL, + 0xc6150ebaL, 0x94e2ea78L, 0xa5fc3c53L, + 0x1e0a2df4L, + 0xf2f74ea7L, 0x361d2b3dL, 0x1939260fL, + 0x19c27960L, + 0x5223a708L, 0xf71312b6L, 0xebadfe6eL, + 0xeac31f66L, + 0xe3bc4595L, 0xa67bc883L, 0xb17f37d1L, + 0x018cff28L, + 0xc332ddefL, 0xbe6c5aa5L, 0x65582185L, + 0x68ab9802L, + 0xeecea50fL, 0xdb2f953bL, 0x2aef7dadL, + 0x5b6e2f84L, + 0x1521b628L, 0x29076170L, 0xecdd4775L, + 0x619f1510L, + 0x13cca830L, 0xeb61bd96L, 0x0334fe1eL, + 0xaa0363cfL, + 0xb5735c90L, 0x4c70a239L, 0xd59e9e0bL, + 0xcbaade14L, + 0xeecc86bcL, 0x60622ca7L, 0x9cab5cabL, + 0xb2f3846eL, + 0x648b1eafL, 0x19bdf0caL, 0xa02369b9L, + 0x655abb50L, + 0x40685a32L, 0x3c2ab4b3L, 0x319ee9d5L, + 0xc021b8f7L, + 0x9b540b19L, 0x875fa099L, 0x95f7997eL, + 0x623d7da8L, + 0xf837889aL, 0x97e32d77L, 0x11ed935fL, + 0x16681281L, + 0x0e358829L, 0xc7e61fd6L, 0x96dedfa1L, + 0x7858ba99L, + 0x57f584a5L, 0x1b227263L, 0x9b83c3ffL, + 0x1ac24696L, + 0xcdb30aebL, 0x532e3054L, 0x8fd948e4L, + 0x6dbc3128L, + 0x58ebf2efL, 0x34c6ffeaL, 0xfe28ed61L, + 0xee7c3c73L, + 0x5d4a14d9L, 0xe864b7e3L, 0x42105d14L, + 0x203e13e0L, + 0x45eee2b6L, 0xa3aaabeaL, 0xdb6c4f15L, + 0xfacb4fd0L, + 0xc742f442L, 0xef6abbb5L, 0x654f3b1dL, + 0x41cd2105L, + 0xd81e799eL, 0x86854dc7L, 0xe44b476aL, + 0x3d816250L, + 0xcf62a1f2L, 0x5b8d2646L, 0xfc8883a0L, + 0xc1c7b6a3L, + 0x7f1524c3L, 0x69cb7492L, 0x47848a0bL, + 0x5692b285L, + 0x095bbf00L, 0xad19489dL, 0x1462b174L, + 0x23820e00L, + 0x58428d2aL, 0x0c55f5eaL, 0x1dadf43eL, + 0x233f7061L, + 0x3372f092L, 0x8d937e41L, 0xd65fecf1L, + 0x6c223bdbL, + 0x7cde3759L, 0xcbee7460L, 0x4085f2a7L, + 0xce77326eL, + 0xa6078084L, 0x19f8509eL, 0xe8efd855L, + 0x61d99735L, + 0xa969a7aaL, 0xc50c06c2L, 0x5a04abfcL, + 0x800bcadcL, + 0x9e447a2eL, 0xc3453484L, 0xfdd56705L, + 0x0e1e9ec9L, + 0xdb73dbd3L, 0x105588cdL, 0x675fda79L, + 0xe3674340L, + 0xc5c43465L, 0x713e38d8L, 0x3d28f89eL, + 0xf16dff20L, + 0x153e21e7L, 0x8fb03d4aL, 0xe6e39f2bL, + 0xdb83adf7L, + 0xe93d5a68L, 0x948140f7L, 0xf64c261cL, + 0x94692934L, + 0x411520f7L, 0x7602d4f7L, 0xbcf46b2eL, + 0xd4a20068L, + 0xd4082471L, 0x3320f46aL, 0x43b7d4b7L, + 0x500061afL, + 0x1e39f62eL, 0x97244546L, 0x14214f74L, + 0xbf8b8840L, + 0x4d95fc1dL, 0x96b591afL, 0x70f4ddd3L, + 0x66a02f45L, + 0xbfbc09ecL, 0x03bd9785L, 0x7fac6dd0L, + 0x31cb8504L, + 0x96eb27b3L, 0x55fd3941L, 0xda2547e6L, + 0xabca0a9aL, + 0x28507825L, 0x530429f4L, 0x0a2c86daL, + 0xe9b66dfbL, + 0x68dc1462L, 0xd7486900L, 0x680ec0a4L, + 0x27a18deeL, + 0x4f3ffea2L, 0xe887ad8cL, 0xb58ce006L, + 0x7af4d6b6L, + 0xaace1e7cL, 0xd3375fecL, 0xce78a399L, + 0x406b2a42L, + 0x20fe9e35L, 0xd9f385b9L, 0xee39d7abL, + 0x3b124e8bL, + 0x1dc9faf7L, 0x4b6d1856L, 0x26a36631L, + 0xeae397b2L, + 0x3a6efa74L, 0xdd5b4332L, 0x6841e7f7L, + 0xca7820fbL, + 0xfb0af54eL, 0xd8feb397L, 0x454056acL, + 0xba489527L, + 0x55533a3aL, 0x20838d87L, 0xfe6ba9b7L, + 0xd096954bL, + 0x55a867bcL, 0xa1159a58L, 0xcca92963L, + 0x99e1db33L, + 0xa62a4a56L, 0x3f3125f9L, 0x5ef47e1cL, + 0x9029317cL, + 0xfdf8e802L, 0x04272f70L, 0x80bb155cL, + 0x05282ce3L, + 0x95c11548L, 0xe4c66d22L, 0x48c1133fL, + 0xc70f86dcL, + 0x07f9c9eeL, 0x41041f0fL, 0x404779a4L, + 0x5d886e17L, + 0x325f51ebL, 0xd59bc0d1L, 0xf2bcc18fL, + 0x41113564L, + 0x257b7834L, 0x602a9c60L, 0xdff8e8a3L, + 0x1f636c1bL, + 0x0e12b4c2L, 0x02e1329eL, 0xaf664fd1L, + 0xcad18115L, + 0x6b2395e0L, 0x333e92e1L, 0x3b240b62L, + 0xeebeb922L, + 0x85b2a20eL, 0xe6ba0d99L, 0xde720c8cL, + 0x2da2f728L, + 0xd0127845L, 0x95b794fdL, 0x647d0862L, + 0xe7ccf5f0L, + 0x5449a36fL, 0x877d48faL, 0xc39dfd27L, + 0xf33e8d1eL, + 0x0a476341L, 0x992eff74L, 0x3a6f6eabL, + 0xf4f8fd37L, + 0xa812dc60L, 0xa1ebddf8L, 0x991be14cL, + 0xdb6e6b0dL, + 0xc67b5510L, 0x6d672c37L, 0x2765d43bL, + 0xdcd0e804L, + 0xf1290dc7L, 0xcc00ffa3L, 0xb5390f92L, + 0x690fed0bL, + 0x667b9ffbL, 0xcedb7d9cL, 0xa091cf0bL, + 0xd9155ea3L, + 0xbb132f88L, 0x515bad24L, 0x7b9479bfL, + 0x763bd6ebL, + 0x37392eb3L, 0xcc115979L, 0x8026e297L, + 0xf42e312dL, + 0x6842ada7L, 0xc66a2b3bL, 0x12754cccL, + 0x782ef11cL, + 0x6a124237L, 0xb79251e7L, 0x06a1bbe6L, + 0x4bfb6350L, + 0x1a6b1018L, 0x11caedfaL, 0x3d25bdd8L, + 0xe2e1c3c9L, + 0x44421659L, 0x0a121386L, 0xd90cec6eL, + 0xd5abea2aL, + 0x64af674eL, 0xda86a85fL, 0xbebfe988L, + 0x64e4c3feL, + 0x9dbc8057L, 0xf0f7c086L, 0x60787bf8L, + 0x6003604dL, + 0xd1fd8346L, 0xf6381fb0L, 0x7745ae04L, + 0xd736fcccL, + 0x83426b33L, 0xf01eab71L, 0xb0804187L, + 0x3c005e5fL, + 0x77a057beL, 0xbde8ae24L, 0x55464299L, + 0xbf582e61L, + 0x4e58f48fL, 0xf2ddfda2L, 0xf474ef38L, + 0x8789bdc2L, + 0x5366f9c3L, 0xc8b38e74L, 0xb475f255L, + 0x46fcd9b9L, + 0x7aeb2661L, 0x8b1ddf84L, 0x846a0e79L, + 0x915f95e2L, + 0x466e598eL, 0x20b45770L, 0x8cd55591L, + 0xc902de4cL, + 0xb90bace1L, 0xbb8205d0L, 0x11a86248L, + 0x7574a99eL, + 0xb77f19b6L, 0xe0a9dc09L, 0x662d09a1L, + 0xc4324633L, + 0xe85a1f02L, 0x09f0be8cL, 0x4a99a025L, + 0x1d6efe10L, + 0x1ab93d1dL, 0x0ba5a4dfL, 0xa186f20fL, + 0x2868f169L, + 0xdcb7da83L, 0x573906feL, 0xa1e2ce9bL, + 0x4fcd7f52L, + 0x50115e01L, 0xa70683faL, 0xa002b5c4L, + 0x0de6d027L, + 0x9af88c27L, 0x773f8641L, 0xc3604c06L, + 0x61a806b5L, + 0xf0177a28L, 0xc0f586e0L, 0x006058aaL, + 0x30dc7d62L, + 0x11e69ed7L, 0x2338ea63L, 0x53c2dd94L, + 0xc2c21634L, + 0xbbcbee56L, 0x90bcb6deL, 0xebfc7da1L, + 0xce591d76L, + 0x6f05e409L, 0x4b7c0188L, 0x39720a3dL, + 0x7c927c24L, + 0x86e3725fL, 0x724d9db9L, 0x1ac15bb4L, + 0xd39eb8fcL, + 0xed545578L, 0x08fca5b5L, 0xd83d7cd3L, + 0x4dad0fc4L, + 0x1e50ef5eL, 0xb161e6f8L, 0xa28514d9L, + 0x6c51133cL, + 0x6fd5c7e7L, 0x56e14ec4L, 0x362abfceL, + 0xddc6c837L, + 0xd79a3234L, 0x92638212L, 0x670efa8eL, + 0x406000e0L, + 0x3a39ce37L, 0xd3faf5cfL, 0xabc27737L, + 0x5ac52d1bL, + 0x5cb0679eL, 0x4fa33742L, 0xd3822740L, + 0x99bc9bbeL, + 0xd5118e9dL, 0xbf0f7315L, 0xd62d1c7eL, + 0xc700c47bL, + 0xb78c1b6bL, 0x21a19045L, 0xb26eb1beL, + 0x6a366eb4L, + 0x5748ab2fL, 0xbc946e79L, 0xc6a376d2L, + 0x6549c2c8L, + 0x530ff8eeL, 0x468dde7dL, 0xd5730a1dL, + 0x4cd04dc6L, + 0x2939bbdbL, 0xa9ba4650L, 0xac9526e8L, + 0xbe5ee304L, + 0xa1fad5f0L, 0x6a2d519aL, 0x63ef8ce2L, + 0x9a86ee22L, + 0xc089c2b8L, 0x43242ef6L, 0xa51e03aaL, + 0x9cf2d0a4L, + 0x83c061baL, 0x9be96a4dL, 0x8fe51550L, + 0xba645bd6L, + 0x2826a2f9L, 0xa73a3ae1L, 0x4ba99586L, + 0xef5562e9L, + 0xc72fefd3L, 0xf752f7daL, 0x3f046f69L, + 0x77fa0a59L, + 0x80e4a915L, 0x87b08601L, 0x9b09e6adL, + 0x3b3ee593L, + 0xe990fd5aL, 0x9e34d797L, 0x2cf0b7d9L, + 0x022b8b51L, + 0x96d5ac3aL, 0x017da67dL, 0xd1cf3ed6L, + 0x7c7d2d28L, + 0x1f9f25cfL, 0xadf2b89bL, 0x5ad6b472L, + 0x5a88f54cL, + 0xe029ac71L, 0xe019a5e6L, 0x47b0acfdL, + 0xed93fa9bL, + 0xe8d3c48dL, 0x283b57ccL, 0xf8d56629L, + 0x79132e28L, + 0x785f0191L, 0xed756055L, 0xf7960e44L, + 0xe3d35e8cL, + 0x15056dd4L, 0x88f46dbaL, 0x03a16125L, + 0x0564f0bdL, + 0xc3eb9e15L, 0x3c9057a2L, 0x97271aecL, + 0xa93a072aL, + 0x1b3f6d9bL, 0x1e6321f5L, 0xf59c66fbL, + 0x26dcf319L, + 0x7533d928L, 0xb155fdf5L, 0x03563482L, + 0x8aba3cbbL, + 0x28517711L, 0xc20ad9f8L, 0xabcc5167L, + 0xccad925fL, + 0x4de81751L, 0x3830dc8eL, 0x379d5862L, + 0x9320f991L, + 0xea7a90c2L, 0xfb3e7bceL, 0x5121ce64L, + 0x774fbe32L, + 0xa8b6e37eL, 0xc3293d46L, 0x48de5369L, + 0x6413e680L, + 0xa2ae0810L, 0xdd6db224L, 0x69852dfdL, + 0x09072166L, + 0xb39a460aL, 0x6445c0ddL, 0x586cdecfL, + 0x1c20c8aeL, + 0x5bbef7ddL, 0x1b588d40L, 0xccd2017fL, + 0x6bb4e3bbL, + 0xdda26a7eL, 0x3a59ff45L, 0x3e350a44L, + 0xbcb4cdd5L, + 0x72eacea8L, 0xfa6484bbL, 0x8d6612aeL, + 0xbf3c6f47L, + 0xd29be463L, 0x542f5d9eL, 0xaec2771bL, + 0xf64e6370L, + 0x740e0d8dL, 0xe75b1357L, 0xf8721671L, + 0xaf537d5dL, + 0x4040cb08L, 0x4eb4e2ccL, 0x34d2466aL, + 0x0115af84L, + 0xe1b00428L, 0x95983a1dL, 0x06b89fb4L, + 0xce6ea048L, + 0x6f3f3b82L, 0x3520ab82L, 0x011a1d4bL, + 0x277227f8L, + 0x611560b1L, 0xe7933fdcL, 0xbb3a792bL, + 0x344525bdL, + 0xa08839e1L, 0x51ce794bL, 0x2f32c9b7L, + 0xa01fbac9L, + 0xe01cc87eL, 0xbcc7d1f6L, 0xcf0111c3L, + 0xa1e8aac7L, + 0x1a908749L, 0xd44fbd9aL, 0xd0dadecbL, + 0xd50ada38L, + 0x0339c32aL, 0xc6913667L, 0x8df9317cL, + 0xe0b12b4fL, + 0xf79e59b7L, 0x43f5bb3aL, 0xf2d519ffL, + 0x27d9459cL, + 0xbf97222cL, 0x15e6fc2aL, 0x0f91fc71L, + 0x9b941525L, + 0xfae59361L, 0xceb69cebL, 0xc2a86459L, + 0x12baa8d1L, + 0xb6c1075eL, 0xe3056a0cL, 0x10d25065L, + 0xcb03a442L, + 0xe0ec6e0eL, 0x1698db3bL, 0x4c98a0beL, + 0x3278e964L, + 0x9f1f9532L, 0xe0d392dfL, 0xd3a0342bL, + 0x8971f21eL, + 0x1b0a7441L, 0x4ba3348cL, 0xc5be7120L, + 0xc37632d8L, + 0xdf359f8dL, 0x9b992f2eL, 0xe60b6f47L, + 0x0fe3f11dL, + 0xe54cda54L, 0x1edad891L, 0xce6279cfL, + 0xcd3e7e6fL, + 0x1618b166L, 0xfd2c1d05L, 0x848fd2c5L, + 0xf6fb2299L, + 0xf523f357L, 0xa6327623L, 0x93a83531L, + 0x56cccd02L, + 0xacf08162L, 0x5a75ebb5L, 0x6e163697L, + 0x88d273ccL, + 0xde966292L, 0x81b949d0L, 0x4c50901bL, + 0x71c65614L, + 0xe6c6c7bdL, 0x327a140aL, 0x45e1d006L, + 0xc3f27b9aL, + 0xc9aa53fdL, 0x62a80f00L, 0xbb25bfe2L, + 0x35bdd2f6L, + 0x71126905L, 0xb2040222L, 0xb6cbcf7cL, + 0xcd769c2bL, + 0x53113ec0L, 0x1640e3d3L, 0x38abbd60L, + 0x2547adf0L, + 0xba38209cL, 0xf746ce76L, 0x77afa1c5L, + 0x20756060L, + 0x85cbfe4eL, 0x8ae88dd8L, 0x7aaaf9b0L, + 0x4cf9aa7eL, + 0x1948c25cL, 0x02fb8a8cL, 0x01c36ae4L, + 0xd6ebe1f9L, + 0x90d4f869L, 0xa65cdea0L, 0x3f09252dL, + 0xc208e69fL, + 0xb74e6132L, 0xce77e25bL, 0x578fdfe3L, + 0x3ac372e6L, + } +}; diff --git a/dap-sdk/crypto/src/blowfish/bf_skey.c b/dap-sdk/crypto/src/blowfish/bf_skey.c new file mode 100644 index 0000000000000000000000000000000000000000..cdf7f1e21b2a14a839c32292cc7383c1bb209352 --- /dev/null +++ b/dap-sdk/crypto/src/blowfish/bf_skey.c @@ -0,0 +1,58 @@ +#include <stdio.h> +#include <string.h> +#include "blowfish.h" +#include "bf_local.h" +#include "bf_pi.h" + +void BF_set_key(BF_KEY *key, int len, const unsigned char *data) +{ + int i; + BF_LONG *p, ri, in[2]; + const unsigned char *d, *end; + + memcpy(key, &bf_init, sizeof(BF_KEY)); + p = key->P; + + if (len > ((BF_ROUNDS + 2) * 4)) + len = (BF_ROUNDS + 2) * 4; + + d = data; + end = &(data[len]); + for (i = 0; i < (BF_ROUNDS + 2); i++) { + ri = *(d++); + if (d >= end) + d = data; + + ri <<= 8; + ri |= *(d++); + if (d >= end) + d = data; + + ri <<= 8; + ri |= *(d++); + if (d >= end) + d = data; + + ri <<= 8; + ri |= *(d++); + if (d >= end) + d = data; + + p[i] ^= ri; + } + + in[0] = 0L; + in[1] = 0L; + for (i = 0; i < (BF_ROUNDS + 2); i += 2) { + BF_encrypt(in, key); + p[i] = in[0]; + p[i + 1] = in[1]; + } + + p = key->S; + for (i = 0; i < 4 * 256; i += 2) { + BF_encrypt(in, key); + p[i] = in[0]; + p[i + 1] = in[1]; + } +} diff --git a/dap-sdk/crypto/src/blowfish/blowfish.h b/dap-sdk/crypto/src/blowfish/blowfish.h index 8326a5a844017cf86b3d703d884eca477252fe13..bc54e1b7015311e0ddab5464c355a4f96cc20a4c 100644 --- a/dap-sdk/crypto/src/blowfish/blowfish.h +++ b/dap-sdk/crypto/src/blowfish/blowfish.h @@ -1,10 +1,9 @@ //max using key size = (BF_ROUNDS + 2)*4 bytes = 72 bytes #ifndef BLOWFISH_H -#define BLOWFISH_H +# define BLOWFISH_H #include "inttypes.h" -# define BF_BLOCK 8 # define BF_ENCRYPT 1 @@ -24,10 +23,11 @@ typedef struct bf_key_st { BF_LONG S[4 * 256]; } BF_KEY; - # ifdef __cplusplus extern "C" { # endif +# define BF_BLOCK 8 + void BF_set_key(BF_KEY *key, int len, const unsigned char *data); @@ -54,5 +54,5 @@ const char *BF_options(void); # ifdef __cplusplus } # endif +# endif -#endif diff --git a/dap-sdk/crypto/src/blowfish/blowfish.pri b/dap-sdk/crypto/src/blowfish/blowfish.pri index 7c0dc12ee175ad1244da751df2db5242fe8fc851..fc7a886f3c5dc71b90c320d6d1c6c415e55d8771 100644 --- a/dap-sdk/crypto/src/blowfish/blowfish.pri +++ b/dap-sdk/crypto/src/blowfish/blowfish.pri @@ -1,6 +1,11 @@ INCLUDEPATH += $$PWD HEADERS += $$PWD/blowfish.h \ - $$PWD/bf_local.h + $$PWD/bf_local.h \ + $$PWD/bf_pi.h -SOURCES += $$PWD/blowfish.c +SOURCES += $$PWD/bf_cfb64.c \ + $$PWD/bf_ecb.c \ + $$PWD/bf_enc.c \ + $$PWD/bf_ofb64.c \ + $$PWD/bf_skey.c diff --git a/dap-sdk/crypto/src/dap_enc_GOST.c b/dap-sdk/crypto/src/dap_enc_GOST.c index 22c7fb98b2925802db533cfa7615179ce3fa96c8..dad7601c4062bb847ecf346801499f4a330a035a 100644 --- a/dap-sdk/crypto/src/dap_enc_GOST.c +++ b/dap-sdk/crypto/src/dap_enc_GOST.c @@ -22,10 +22,10 @@ void dap_enc_gost_key_generate(struct dap_enc_key * a_key, const void *kex_buf, a_key->priv_key_data_size = 32; - a_key->priv_key_data = DAP_NEW_SIZE(uint8_t, key_size); + a_key->priv_key_data = DAP_NEW_SIZE(uint8_t, a_key->priv_key_data_size); Keccak_HashInstance Keccak_ctx; - Keccak_HashInitialize(&Keccak_ctx, 1088, 512, 32*8, 0x06); + Keccak_HashInitialize(&Keccak_ctx, 1088, 512, a_key->priv_key_data_size*8, 0x06); Keccak_HashUpdate(&Keccak_ctx, kex_buf, kex_size*8); if(seed_size) Keccak_HashUpdate(&Keccak_ctx, seed, seed_size*8); @@ -37,9 +37,9 @@ void dap_enc_gost_key_delete(struct dap_enc_key *a_key) if(a_key->priv_key_data != NULL) { randombytes(a_key->priv_key_data,a_key->priv_key_data_size); - DAP_DELETE(a_key->priv_key_data); + //DAP_DELETE(a_key->priv_key_data); } - a_key->priv_key_data_size = 0; + //a_key->priv_key_data_size = 0; } //------GOST_OFB----------- void dap_enc_gost_ofb_key_new(struct dap_enc_key * a_key) @@ -56,16 +56,16 @@ void dap_enc_gost_ofb_key_new(struct dap_enc_key * a_key) size_t dap_enc_gost_ofb_decrypt(struct dap_enc_key *a_key, const void * a_in, size_t a_in_size, void ** a_out) { - size_t a_out_size = a_in_size - kBlockLen89; - if(a_out_size <= 0) { + size_t l_out_size = a_in_size - kBlockLen89; + if(l_out_size <= 0) { log_it(L_ERROR, "gost_ofb decryption ct with iv must be more than kBlockLen89 bytes"); return 0; } *a_out = DAP_NEW_SIZE(uint8_t, a_in_size - kBlockLen89); - a_out_size = dap_enc_gost_ofb_decrypt_fast(a_key, a_in, a_in_size, *a_out, a_out_size); - if(a_out_size == 0) + l_out_size = dap_enc_gost_ofb_decrypt_fast(a_key, a_in, a_in_size, *a_out, l_out_size); + if(l_out_size == 0) DAP_DEL_Z(*a_out); - return a_out_size; + return l_out_size; } size_t dap_enc_gost_ofb_encrypt(struct dap_enc_key * a_key, const void * a_in, size_t a_in_size, void ** a_out) @@ -74,12 +74,12 @@ size_t dap_enc_gost_ofb_encrypt(struct dap_enc_key * a_key, const void * a_in, s log_it(L_ERROR, "gost ofb encryption pt cannot be 0 bytes"); return 0; } - size_t a_out_size = a_in_size + kBlockLen89; - *a_out = DAP_NEW_SIZE(uint8_t, a_out_size); - a_out_size = dap_enc_gost_ofb_encrypt_fast(a_key, a_in, a_in_size, *a_out, a_out_size); - if(a_out_size == 0) + size_t l_out_size = a_in_size + kBlockLen89; + *a_out = DAP_NEW_SIZE(uint8_t, l_out_size); + l_out_size = dap_enc_gost_ofb_encrypt_fast(a_key, a_in, a_in_size, *a_out, l_out_size); + if(l_out_size == 0) DAP_DEL_Z(*a_out); - return a_out_size; + return l_out_size; } size_t dap_enc_gost_ofb_calc_encode_size(const size_t size_in) @@ -98,8 +98,8 @@ size_t dap_enc_gost_ofb_calc_decode_size(const size_t size_in) size_t dap_enc_gost_ofb_decrypt_fast(struct dap_enc_key *a_key, const void * a_in, size_t a_in_size, void * a_out, size_t buf_out_size) { - size_t a_out_size = a_in_size - kBlockLen89; - if(a_out_size > buf_out_size) { + size_t l_out_size = a_in_size - kBlockLen89; + if(l_out_size > buf_out_size) { log_it(L_ERROR, "gost_ofb fast_decryption too small buf_out_size"); return 0; } @@ -117,14 +117,14 @@ size_t dap_enc_gost_ofb_decrypt_fast(struct dap_enc_key *a_key, const void * a_i return 0; } free_ofb(ctx); - return a_out_size; + return l_out_size; } size_t dap_enc_gost_ofb_encrypt_fast(struct dap_enc_key * a_key, const void * a_in, size_t a_in_size, void * a_out,size_t buf_out_size) { //generate iv and put it in *a_out first bytes - size_t a_out_size = a_in_size + kBlockLen89; - if(a_out_size > buf_out_size) { + size_t l_out_size = a_in_size + kBlockLen89; + if(l_out_size > buf_out_size) { log_it(L_ERROR, "gost_ofb fast_encryption too small buf_out_size"); return 0; } @@ -147,7 +147,7 @@ size_t dap_enc_gost_ofb_encrypt_fast(struct dap_enc_key * a_key, const void * a_ return 0; } free_ofb(ctx); - return a_out_size; + return l_out_size; } //------KUZN_OFB----------- @@ -181,12 +181,12 @@ size_t dap_enc_kuzn_ofb_calc_decode_size(const size_t size_in) size_t dap_enc_kuzn_ofb_encrypt_fast(struct dap_enc_key * a_key, const void * a_in, size_t a_in_size, void * a_out,size_t buf_out_size) { //generate iv and put it in *a_out first bytes - size_t a_out_size = a_in_size + kBlockLen14; + size_t l_out_size = a_in_size + kBlockLen14; if(a_in_size <= 0) { log_it(L_ERROR, "kuzn_ofb fast_encryption too small a_in_size"); return 0; } - if(a_out_size > buf_out_size) { + if(l_out_size > buf_out_size) { log_it(L_ERROR, "kuzn_ofb fast_encryption too small buf_out_size"); return 0; } @@ -208,19 +208,19 @@ size_t dap_enc_kuzn_ofb_encrypt_fast(struct dap_enc_key * a_key, const void * a_ return -1; free_ofb(ctx); - return a_out_size; + return l_out_size; } size_t dap_enc_kuzn_ofb_decrypt_fast(struct dap_enc_key *a_key, const void * a_in, size_t a_in_size, void * a_out, size_t buf_out_size) { - size_t a_out_size = a_in_size - kBlockLen14; - if(a_out_size <= 0) { + size_t l_out_size = a_in_size - kBlockLen14; + if(l_out_size <= 0) { log_it(L_ERROR, "kuzn_ofb fast_decryption too small a_in_size"); return 0; } - if(a_out_size > buf_out_size) { + if(l_out_size > buf_out_size) { log_it(L_ERROR, "kuzn_ofb fast_decryption too small buf_out_size"); return 0; } @@ -231,26 +231,26 @@ size_t dap_enc_kuzn_ofb_decrypt_fast(struct dap_enc_key *a_key, const void * a_i if(init_ofb_14(a_key->priv_key_data, ctx, kBlockLen14, a_in, kBlockLen14, NULL, NULL)) return -1; - if(decrypt_ofb(ctx, a_in + kBlockLen14, a_out, a_out_size)) + if(decrypt_ofb(ctx, a_in + kBlockLen14, a_out, l_out_size)) return -1; free_ofb(ctx); - return a_out_size; + return l_out_size; } size_t dap_enc_kuzn_ofb_decrypt(struct dap_enc_key *a_key, const void * a_in, size_t a_in_size, void ** a_out) { - size_t a_out_size = a_in_size - kBlockLen14; - if(a_out_size <= 0) { + size_t l_out_size = a_in_size - kBlockLen14; + if(l_out_size <= 0) { log_it(L_ERROR, "kuzn_ofb decryption too small a_in_size"); return 0; } - *a_out = DAP_NEW_SIZE(uint8_t, a_out_size); - a_out_size = dap_enc_kuzn_ofb_decrypt_fast(a_key, a_in, a_in_size, *a_out, a_out_size); - if(!a_out_size) + *a_out = DAP_NEW_SIZE(uint8_t, l_out_size); + l_out_size = dap_enc_kuzn_ofb_decrypt_fast(a_key, a_in, a_in_size, *a_out, l_out_size); + if(!l_out_size) DAP_DEL_Z(*a_out); - return a_out_size; + return l_out_size; } size_t dap_enc_kuzn_ofb_encrypt(struct dap_enc_key * a_key, const void * a_in, size_t a_in_size, void ** a_out) @@ -260,11 +260,11 @@ size_t dap_enc_kuzn_ofb_encrypt(struct dap_enc_key * a_key, const void * a_in, s log_it(L_ERROR, "kuzn fast_encryption too small a_in_size"); return 0; } - size_t a_out_size = a_in_size + kBlockLen14; - *a_out = DAP_NEW_SIZE(uint8_t, a_out_size); + size_t l_out_size = a_in_size + kBlockLen14; + *a_out = DAP_NEW_SIZE(uint8_t, l_out_size); - a_out_size = dap_enc_kuzn_ofb_encrypt_fast(a_key, a_in, a_in_size, *a_out, a_out_size); - if(!a_out_size) + l_out_size = dap_enc_kuzn_ofb_encrypt_fast(a_key, a_in, a_in_size, *a_out, l_out_size); + if(!l_out_size) DAP_DEL_Z(*a_out); - return a_out_size; + return l_out_size; } diff --git a/dap-sdk/crypto/src/dap_enc_SEED.c b/dap-sdk/crypto/src/dap_enc_SEED.c new file mode 100644 index 0000000000000000000000000000000000000000..65ce0dfedb04d2e069d27f94edf5759168227791 --- /dev/null +++ b/dap-sdk/crypto/src/dap_enc_SEED.c @@ -0,0 +1,137 @@ +#include <stdlib.h> +#include <stdio.h> +#include <stdint.h> +#include <stddef.h> +#include <string.h> + +#include "dap_enc_SEED.h" +#include "dap_common.h" +#include "rand/dap_rand.h" +#include "sha3/KeccakHash.h" + +#define LOG_TAG "dap_enc_seed" +//# define SEED_BLOCK_SIZE 16 +//# define SEED_KEY_LENGTH 16 + +void dap_enc_seed_key_generate(struct dap_enc_key * a_key, const void *kex_buf, + size_t kex_size, const void * seed, size_t seed_size, size_t key_size) +{ + if(key_size < SEED_KEY_LENGTH) + { + log_it(L_ERROR, "seed key cannot be less than SEED_KEY_LENGTH bytes."); + } + a_key->last_used_timestamp = time(NULL); + + + a_key->priv_key_data_size = SEED_KEY_LENGTH; + a_key->priv_key_data = DAP_NEW_SIZE(uint8_t, a_key->priv_key_data_size); + + Keccak_HashInstance Keccak_ctx; + Keccak_HashInitialize(&Keccak_ctx, 1088, 512, a_key->priv_key_data_size*8, 0x06); + Keccak_HashUpdate(&Keccak_ctx, kex_buf, kex_size*8); + if(seed_size) + Keccak_HashUpdate(&Keccak_ctx, seed, seed_size*8); + Keccak_HashFinal(&Keccak_ctx, a_key->priv_key_data); +} + +void dap_enc_seed_key_delete(struct dap_enc_key *a_key) +{ + if(a_key->priv_key_data != NULL) + { + randombytes(a_key->priv_key_data,a_key->priv_key_data_size); + //DAP_DELETE(a_key->priv_key_data); + } + //a_key->priv_key_data_size = 0; +} +//------SEED_OFB----------- +void dap_enc_seed_ofb_key_new(struct dap_enc_key * a_key) +{ + a_key->_inheritor = NULL; + a_key->_inheritor_size = 0; + a_key->type = DAP_ENC_KEY_TYPE_SEED_OFB; + a_key->enc = dap_enc_seed_ofb_encrypt; + a_key->dec = dap_enc_seed_ofb_decrypt; + a_key->enc_na = dap_enc_seed_ofb_encrypt_fast; + a_key->dec_na = dap_enc_seed_ofb_decrypt_fast; +} + + +size_t dap_enc_seed_ofb_decrypt(struct dap_enc_key *a_key, const void * a_in, size_t a_in_size, void ** a_out) +{ + size_t l_out_size = a_in_size - SEED_BLOCK_SIZE; + if(l_out_size <= 0) { + log_it(L_ERROR, "seed_ofb decryption ct with iv must be more than SEED_BLOCK_SIZE bytes"); + return 0; + } + *a_out = DAP_NEW_SIZE(uint8_t, a_in_size - SEED_BLOCK_SIZE); + l_out_size = dap_enc_seed_ofb_decrypt_fast(a_key, a_in, a_in_size, *a_out, l_out_size); + if(l_out_size == 0) + DAP_DEL_Z(*a_out); + return l_out_size; +} + +size_t dap_enc_seed_ofb_encrypt(struct dap_enc_key * a_key, const void * a_in, size_t a_in_size, void ** a_out) +{ + if(a_in_size <= 0) { + log_it(L_ERROR, "seed ofb encryption pt cannot be 0 bytes"); + return 0; + } + size_t l_out_size = a_in_size + SEED_BLOCK_SIZE; + *a_out = DAP_NEW_SIZE(uint8_t, l_out_size); + l_out_size = dap_enc_seed_ofb_encrypt_fast(a_key, a_in, a_in_size, *a_out, l_out_size); + if(l_out_size == 0) + DAP_DEL_Z(*a_out); + return l_out_size; +} + +size_t dap_enc_seed_ofb_calc_encode_size(const size_t size_in) +{ + return size_in + SEED_BLOCK_SIZE; +} + +size_t dap_enc_seed_ofb_calc_decode_size(const size_t size_in) +{ + if(size_in <= SEED_BLOCK_SIZE) { + log_it(L_ERROR, "seed_ofb decryption size_in ct with iv must be more than SEED_BLOCK_SIZE bytes"); + return 0; + } + return size_in - SEED_BLOCK_SIZE; +} + +size_t dap_enc_seed_ofb_decrypt_fast(struct dap_enc_key *a_key, const void * a_in, + size_t a_in_size, void * a_out, size_t buf_out_size) { + size_t l_out_size = a_in_size - SEED_BLOCK_SIZE; + if(l_out_size > buf_out_size) { + log_it(L_ERROR, "seed_ofb fast_decryption too small buf_out_size"); + return 0; + } + uint8_t iv[SEED_BLOCK_SIZE]; + memcpy(iv, a_in, SEED_BLOCK_SIZE); + SEED_KEY_SCHEDULE ctx; + SEED_set_key(a_key->priv_key_data, &ctx); + int num = 0; + SEED_ofb128_encrypt(a_in + SEED_BLOCK_SIZE, a_out, a_in_size - SEED_BLOCK_SIZE, &ctx, iv, &num); + return l_out_size; +} + +size_t dap_enc_seed_ofb_encrypt_fast(struct dap_enc_key * a_key, const void * a_in, size_t a_in_size, void * a_out,size_t buf_out_size) +{ + //generate iv and put it in *a_out first bytes + size_t l_out_size = a_in_size + SEED_BLOCK_SIZE; + if(l_out_size > buf_out_size) { + log_it(L_ERROR, "seed_ofb fast_encryption too small buf_out_size"); + return 0; + } + uint8_t iv[SEED_BLOCK_SIZE]; + if(randombytes(iv, SEED_BLOCK_SIZE) == 1) + { + log_it(L_ERROR, "failed to get SEED_BLOCK_SIZE bytes iv seed ofb"); + return 0; + } + memcpy(a_out, iv, SEED_BLOCK_SIZE); + SEED_KEY_SCHEDULE ctx; + SEED_set_key(a_key->priv_key_data, &ctx); + int num = 0; + SEED_ofb128_encrypt(a_in, a_out + SEED_BLOCK_SIZE, a_in_size, &ctx, iv, &num); + return l_out_size; + } diff --git a/dap-sdk/crypto/src/dap_enc_bf.c b/dap-sdk/crypto/src/dap_enc_bf.c index f385aac59d58bfe7802f31dfb6e1e02a9ea4a559..025f2b726dda964fe39598e94d8a87acd7758786 100644 --- a/dap-sdk/crypto/src/dap_enc_bf.c +++ b/dap-sdk/crypto/src/dap_enc_bf.c @@ -19,7 +19,7 @@ void dap_enc_bf_key_generate(struct dap_enc_key * a_key, const void *kex_buf, a_key->priv_key_data_size = sizeof(BF_KEY); - a_key->priv_key_data = DAP_NEW_SIZE(uint8_t, sizeof(BF_KEY)); + a_key->priv_key_data = DAP_NEW_SIZE(uint8_t, a_key->priv_key_data_size); uint8_t *tmp_buf = DAP_NEW_SIZE(uint8_t, (BF_ROUNDS + 2)*4); Keccak_HashInstance Keccak_ctx; @@ -37,34 +37,28 @@ void dap_enc_bf_key_delete(struct dap_enc_key *a_key) if(a_key->priv_key_data != NULL) { randombytes(a_key->priv_key_data,a_key->priv_key_data_size); - DAP_DELETE(a_key->priv_key_data); + //DAP_DELETE(a_key->priv_key_data); } a_key->priv_key_data_size = 0; } //------CBC----------- size_t dap_enc_bf_cbc_decrypt(struct dap_enc_key *a_key, const void * a_in, size_t a_in_size, void ** a_out) { - uint8_t iv[8]; + uint8_t iv[BLOWFISH_BLOCK_SIZE]; //BF_KEY *key=a_key->priv_key_data; - if(a_in_size <= 8 || a_in_size%8) { - log_it(L_ERROR, "blowfish_cbc decryption ct with iv must be more than 8 bytes and equal to 8*k"); + if(a_in_size <= BLOWFISH_BLOCK_SIZE || a_in_size%BLOWFISH_BLOCK_SIZE) { + log_it(L_ERROR, "blowfish_cbc decryption ct with iv must be more than BLOWFISH_BLOCK_SIZE bytes and equal to BLOWFISH_BLOCK_SIZE*k"); return 0; } - *a_out = DAP_NEW_SIZE(uint8_t, a_in_size - 8); - memcpy(iv, a_in, 8); - BF_cbc_encrypt((unsigned char *)(a_in + 8), *a_out, a_in_size - 8, + *a_out = DAP_NEW_SIZE(uint8_t, a_in_size - BLOWFISH_BLOCK_SIZE); + memcpy(iv, a_in, BLOWFISH_BLOCK_SIZE); + BF_cbc_encrypt((unsigned char *)(a_in + BLOWFISH_BLOCK_SIZE), *a_out, a_in_size - BLOWFISH_BLOCK_SIZE, a_key->priv_key_data, iv, BF_DECRYPT); - int bf_cbc_padding_length = *(uint8_t*)(*a_out + a_in_size - 8 - 1); - -// for(int i=0;i < bf_cbc_padding_length + 4 + 1; ++i) -// printf("%.2x ", *(uint8_t*)(*a_out + a_in_size - 8 - 1 - bf_cbc_padding_length - 4 + i)); -// for(int i=0;i < a_in_size - 8; ++i) -// printf("%.2x ", *(uint8_t*)(*a_out + i)); -// printf("\n"); -// fflush(stdout); - size_t a_out_size = *(uint32_t*)(*a_out + a_in_size - 8 - 1 - bf_cbc_padding_length - 4); + int bf_cbc_padding_length = *(uint8_t*)(*a_out + a_in_size - BLOWFISH_BLOCK_SIZE - 1); + + size_t a_out_size = *(uint32_t*)(*a_out + a_in_size - BLOWFISH_BLOCK_SIZE - 1 - bf_cbc_padding_length - 4); return a_out_size; } @@ -73,8 +67,8 @@ size_t dap_enc_bf_cbc_decrypt(struct dap_enc_key *a_key, const void * a_in, size_t dap_enc_bf_cbc_encrypt(struct dap_enc_key * a_key, const void * a_in, size_t a_in_size, void ** a_out) { //generate iv and put it in *a_out first bytes - uint8_t iv[8]; - randombytes(iv, 8); + uint8_t iv[BLOWFISH_BLOCK_SIZE]; + randombytes(iv, BLOWFISH_BLOCK_SIZE); if(a_in_size <= 0) { log_it(L_ERROR, "blowfish_cbc encryption pt cannot be 0 bytes"); @@ -84,44 +78,44 @@ size_t dap_enc_bf_cbc_encrypt(struct dap_enc_key * a_key, const void * a_in, siz // BF_KEY *key = a_key->priv_key_data; - size_t a_out_size = (a_in_size + 4 + 1 + 7)/8*8 + 8; + size_t a_out_size = (a_in_size + 4 + 1 + BLOWFISH_BLOCK_SIZE - 1)/BLOWFISH_BLOCK_SIZE*BLOWFISH_BLOCK_SIZE + BLOWFISH_BLOCK_SIZE; *a_out = DAP_NEW_SIZE(uint8_t, a_out_size); - memcpy(*a_out, iv, 8); - BF_cbc_encrypt((unsigned char *)(a_in), *a_out + 8, a_in_size, + memcpy(*a_out, iv, BLOWFISH_BLOCK_SIZE); + BF_cbc_encrypt((unsigned char *)(a_in), *a_out + BLOWFISH_BLOCK_SIZE, a_in_size, a_key->priv_key_data, iv, BF_ENCRYPT); return a_out_size; } size_t dap_enc_bf_cbc_calc_encode_size(const size_t size_in) { - return (size_in + 4 + 1 + 7)/8*8 + 8; + return (size_in + 4 + 1 + BLOWFISH_BLOCK_SIZE - 1)/BLOWFISH_BLOCK_SIZE*BLOWFISH_BLOCK_SIZE + BLOWFISH_BLOCK_SIZE; } -size_t dap_enc_bf_cbc_calc_decode_size(const size_t size_in) +size_t dap_enc_bf_cbc_calc_decode_max_size(const size_t size_in) { - if(size_in <= 8) { - log_it(L_ERROR, "blowfish_cbc decryption size_in ct with iv must be more than 8 bytes"); + if(size_in <= 2*BLOWFISH_BLOCK_SIZE) { + log_it(L_ERROR, "blowfish_cbc decryption size_in ct with iv must be more than 2*8 bytes"); return 0; } - return size_in - 8; + return size_in - BLOWFISH_BLOCK_SIZE; } size_t dap_enc_bf_cbc_decrypt_fast(struct dap_enc_key *a_key, const void * a_in, size_t a_in_size, void * a_out, size_t buf_out_size) { - if(a_in_size - 8 > buf_out_size || a_in_size %8) { + if(a_in_size - BLOWFISH_BLOCK_SIZE > buf_out_size || a_in_size %BLOWFISH_BLOCK_SIZE || a_in_size <= BLOWFISH_BLOCK_SIZE) { log_it(L_ERROR, "blowfish_cbc fast_decryption too small buf_out_size or not 8*k"); return 0; } - uint8_t iv[8]; + uint8_t iv[BLOWFISH_BLOCK_SIZE]; //BF_KEY *key=a_key->priv_key_data; - memcpy(iv, a_in, 8); - BF_cbc_encrypt((unsigned char *)(a_in + 8), a_out, a_in_size - 8, + memcpy(iv, a_in, BLOWFISH_BLOCK_SIZE); + BF_cbc_encrypt((unsigned char *)(a_in + BLOWFISH_BLOCK_SIZE), a_out, a_in_size - BLOWFISH_BLOCK_SIZE, a_key->priv_key_data, iv, BF_DECRYPT); - int bf_cbc_padding_length = *(uint8_t*)(a_out + a_in_size - 8 - 1); + int bf_cbc_padding_length = *(uint8_t*)(a_out + a_in_size - BLOWFISH_BLOCK_SIZE - 1); - size_t a_out_size = *(uint32_t*)(a_out + a_in_size - 8 - 1 - bf_cbc_padding_length - 4); + size_t a_out_size = *(uint32_t*)(a_out + a_in_size - BLOWFISH_BLOCK_SIZE - 1 - bf_cbc_padding_length - 4); return a_out_size; } @@ -130,20 +124,20 @@ size_t dap_enc_bf_cbc_decrypt_fast(struct dap_enc_key *a_key, const void * a_in, size_t dap_enc_bf_cbc_encrypt_fast(struct dap_enc_key * a_key, const void * a_in, size_t a_in_size, void * a_out,size_t buf_out_size) { //generate iv and put it in *a_out first bytes - size_t a_out_size = (a_in_size + 4 + 1 + 7)/8*8 + 8; + size_t a_out_size = (a_in_size + 4 + 1 + BLOWFISH_BLOCK_SIZE-1)/BLOWFISH_BLOCK_SIZE*BLOWFISH_BLOCK_SIZE + BLOWFISH_BLOCK_SIZE; if(a_out_size > buf_out_size) { log_it(L_ERROR, "blowfish_cbc fast_encryption too small buf_out_size"); return 0; } - uint8_t iv[8]; - randombytes(iv, 8); + uint8_t iv[BLOWFISH_BLOCK_SIZE]; + randombytes(iv, BLOWFISH_BLOCK_SIZE); // BF_KEY *key = a_key->priv_key_data; - memcpy(a_out, iv, 8); - BF_cbc_encrypt((unsigned char *)(a_in), a_out + 8, a_in_size, + memcpy(a_out, iv, BLOWFISH_BLOCK_SIZE); + BF_cbc_encrypt((unsigned char *)(a_in), a_out + BLOWFISH_BLOCK_SIZE, a_in_size, a_key->priv_key_data, iv, BF_ENCRYPT); return a_out_size; } @@ -164,20 +158,20 @@ void dap_enc_bf_cbc_key_new(struct dap_enc_key * a_key) size_t dap_enc_bf_ofb_decrypt(struct dap_enc_key *a_key, const void * a_in, size_t a_in_size, void ** a_out) { - uint8_t iv[8]; + uint8_t iv[BLOWFISH_BLOCK_SIZE]; - if(a_in_size <= 8) { + if(a_in_size <= BLOWFISH_BLOCK_SIZE) { log_it(L_ERROR, "blowfish_ofb decryption ct with iv must be more than 8 bytes"); return 0; } - *a_out = DAP_NEW_SIZE(uint8_t, a_in_size - 8); - memcpy(iv, a_in, 8); + *a_out = DAP_NEW_SIZE(uint8_t, a_in_size - BLOWFISH_BLOCK_SIZE); + memcpy(iv, a_in, BLOWFISH_BLOCK_SIZE); int num = 0;//need for concatenate encryptions or decryptions - BF_ofb64_encrypt((unsigned char *)(a_in + 8), *a_out, a_in_size - 8, + BF_ofb64_encrypt((unsigned char *)(a_in + BLOWFISH_BLOCK_SIZE), *a_out, a_in_size - BLOWFISH_BLOCK_SIZE, a_key->priv_key_data, iv, &num); - size_t a_out_size = a_in_size - 8; + size_t a_out_size = a_in_size - BLOWFISH_BLOCK_SIZE; return a_out_size; } @@ -186,8 +180,8 @@ size_t dap_enc_bf_ofb_decrypt(struct dap_enc_key *a_key, const void * a_in, size_t dap_enc_bf_ofb_encrypt(struct dap_enc_key * a_key, const void * a_in, size_t a_in_size, void ** a_out) { //generate iv and put it in *a_out first bytes - uint8_t iv[8]; - randombytes(iv, 8); + uint8_t iv[BLOWFISH_BLOCK_SIZE]; + randombytes(iv, BLOWFISH_BLOCK_SIZE); if(a_in_size <= 0) { log_it(L_ERROR, "blowfish_ofb encryption pt cannot be 0 bytes"); @@ -197,45 +191,45 @@ size_t dap_enc_bf_ofb_encrypt(struct dap_enc_key * a_key, const void * a_in, siz - size_t a_out_size = a_in_size + 8; + size_t a_out_size = a_in_size + BLOWFISH_BLOCK_SIZE; *a_out = DAP_NEW_SIZE(uint8_t, a_out_size); - memcpy(*a_out, iv, 8); + memcpy(*a_out, iv, BLOWFISH_BLOCK_SIZE); int num = 0;//need for concatenate encryptions or decryptions - BF_ofb64_encrypt((unsigned char *)(a_in), *a_out + 8, a_in_size, + BF_ofb64_encrypt((unsigned char *)(a_in), *a_out + BLOWFISH_BLOCK_SIZE, a_in_size, a_key->priv_key_data, iv, &num); return a_out_size; } size_t dap_enc_bf_ofb_calc_encode_size(const size_t size_in) { - return size_in + 8; + return size_in + BLOWFISH_BLOCK_SIZE; } size_t dap_enc_bf_ofb_calc_decode_size(const size_t size_in) { - if(size_in <= 8) { + if(size_in <= BLOWFISH_BLOCK_SIZE) { log_it(L_ERROR, "blowfish_ofb decryption size_in ct with iv must be more than 8 bytes"); return 0; } - return size_in - 8; + return size_in - BLOWFISH_BLOCK_SIZE; } size_t dap_enc_bf_ofb_decrypt_fast(struct dap_enc_key *a_key, const void * a_in, size_t a_in_size, void * a_out, size_t buf_out_size) { - if(a_in_size - 8 > buf_out_size) { - log_it(L_ERROR, "blowfish_ofb fast_decryption too small buf_out_size"); + if(a_in_size - BLOWFISH_BLOCK_SIZE > buf_out_size || a_in_size <= BLOWFISH_BLOCK_SIZE) { + log_it(L_ERROR, "blowfish_ofb fast_decryption too small buf_out_size or a_in_size"); return 0; } - uint8_t iv[8]; + uint8_t iv[BLOWFISH_BLOCK_SIZE]; //BF_KEY *key=a_key->priv_key_data; - memcpy(iv, a_in, 8); + memcpy(iv, a_in, BLOWFISH_BLOCK_SIZE); int num = 0;//need for concatenate encryptions or decryptions - BF_ofb64_encrypt((unsigned char *)(a_in + 8), a_out, a_in_size - 8, + BF_ofb64_encrypt((unsigned char *)(a_in + BLOWFISH_BLOCK_SIZE), a_out, a_in_size - BLOWFISH_BLOCK_SIZE, a_key->priv_key_data, iv, &num); - size_t a_out_size = a_in_size - 8; + size_t a_out_size = a_in_size - BLOWFISH_BLOCK_SIZE; return a_out_size; } @@ -244,18 +238,18 @@ size_t dap_enc_bf_ofb_decrypt_fast(struct dap_enc_key *a_key, const void * a_in, size_t dap_enc_bf_ofb_encrypt_fast(struct dap_enc_key * a_key, const void * a_in, size_t a_in_size, void * a_out,size_t buf_out_size) { //generate iv and put it in *a_out first bytes - size_t a_out_size = a_in_size + 8; + size_t a_out_size = a_in_size + BLOWFISH_BLOCK_SIZE; if(a_out_size > buf_out_size) { log_it(L_ERROR, "blowfish_ofb fast_encryption too small buf_out_size"); return 0; } - uint8_t iv[8]; - randombytes(iv, 8); + uint8_t iv[BLOWFISH_BLOCK_SIZE]; + randombytes(iv, BLOWFISH_BLOCK_SIZE); - memcpy(a_out, iv, 8); + memcpy(a_out, iv, BLOWFISH_BLOCK_SIZE); int num = 0;//need for concatenate encryptions or decryptions - BF_ofb64_encrypt((unsigned char *)(a_in), a_out + 8, a_in_size, + BF_ofb64_encrypt((unsigned char *)(a_in), a_out + BLOWFISH_BLOCK_SIZE, a_in_size, a_key->priv_key_data, iv, &num); return a_out_size; } diff --git a/dap-sdk/crypto/src/dap_enc_bliss.c b/dap-sdk/crypto/src/dap_enc_bliss.c index c29eeaf7c3ba3a972fe982fa8277281efc1728c5..ce87eabdc2c342f6a65c622a2f02baa317c020ed 100755 --- a/dap-sdk/crypto/src/dap_enc_bliss.c +++ b/dap-sdk/crypto/src/dap_enc_bliss.c @@ -5,7 +5,7 @@ #include "dap_enc_bliss.h" #include "dap_common.h" -#include "dap_rand.h" +#include "rand/dap_rand.h" #include "SimpleFIPS202.h" #define LOG_TAG "dap_enc_sig_bliss" diff --git a/dap-sdk/crypto/src/dap_enc_dilithium.c b/dap-sdk/crypto/src/dap_enc_dilithium.c index 04cddb4a3af340dc78862ea9812dd163572e4a0c..6d59b941887655b5b97393a19d6963add2914304 100755 --- a/dap-sdk/crypto/src/dap_enc_dilithium.c +++ b/dap-sdk/crypto/src/dap_enc_dilithium.c @@ -4,7 +4,7 @@ #include "dap_enc_dilithium.h" #include "dap_common.h" -#include "dap_rand.h" +#include "rand/dap_rand.h" #define LOG_TAG "dap_enc_sig_dilithium" diff --git a/dap-sdk/crypto/src/dap_enc_key.c b/dap-sdk/crypto/src/dap_enc_key.c index 4d0812b5e90f571c36f4e7b234b89a62858b2a42..d646d399ac6178852e3f499705c5f338ca3fa931 100755 --- a/dap-sdk/crypto/src/dap_enc_key.c +++ b/dap-sdk/crypto/src/dap_enc_key.c @@ -28,6 +28,7 @@ #include "dap_enc_bf.h" #include "dap_enc_GOST.h" #include "dap_enc_salsa2012.h" +#include "dap_enc_SEED.h" #include "dap_enc_msrln.h" #include "dap_enc_defeo.h" @@ -35,6 +36,7 @@ #include "dap_enc_bliss.h" #include "dap_enc_tesla.h" #include "dap_enc_dilithium.h" +//#include "dap_enc_newhope.h" #include "dap_enc_ringct20.h" @@ -68,6 +70,7 @@ struct dap_enc_key_callbacks{ dap_enc_callback_new_generate new_generate_callback; dap_enc_callback_delete delete_callback; } s_callbacks[]={ + //-Symmetric ciphers---------------------- // AES [DAP_ENC_KEY_TYPE_IAES]={ .name = "IAES", @@ -114,7 +117,7 @@ struct dap_enc_key_callbacks{ .gen_key_public = NULL, .gen_key_public_size = NULL, .enc_out_size = dap_enc_bf_cbc_calc_encode_size, - .dec_out_size = dap_enc_bf_cbc_calc_decode_size, + .dec_out_size = dap_enc_bf_cbc_calc_decode_max_size, .sign_get = NULL, .sign_verify = NULL }, @@ -182,7 +185,24 @@ struct dap_enc_key_callbacks{ .sign_get = NULL, .sign_verify = NULL }, + [DAP_ENC_KEY_TYPE_SEED_OFB]={ + .name = "SEED_OFB", + .enc = dap_enc_seed_ofb_encrypt, + .enc_na = dap_enc_seed_ofb_encrypt_fast , + .dec = dap_enc_seed_ofb_decrypt, + .dec_na = dap_enc_seed_ofb_decrypt_fast , + .new_callback = dap_enc_seed_ofb_key_new, + .delete_callback = dap_enc_seed_key_delete, + .new_generate_callback = dap_enc_seed_key_generate, + .gen_key_public = NULL, + .gen_key_public_size = NULL, + .enc_out_size = dap_enc_seed_ofb_calc_encode_size, + .dec_out_size = dap_enc_seed_ofb_calc_decode_size, + .sign_get = NULL, + .sign_verify = NULL + }, + //-KEMs(Key Exchange Mechanism)---------------------- [DAP_ENC_KEY_TYPE_MSRLN] = { .name = "MSRLN", .enc = NULL, @@ -216,6 +236,25 @@ struct dap_enc_key_callbacks{ .sign_get = NULL, .sign_verify = NULL }, +// [DAP_ENC_KEY_TYPE_RLWE_NEWHOPE_CPA_KEM]={ +// .name = "NEWHOPE_CPA_KEM", +// .enc = NULL, +// .dec = NULL, +// .enc_na = NULL, +// .dec_na = NULL, +// .gen_key_public = NULL, +// .gen_key_public_size = NULL, +// .gen_bob_shared_key = dap_enc_newhope_pbk_enc, +// .gen_alice_shared_key = dap_enc_newhope_prk_dec, +// .new_callback = dap_enc_newhope_kem_key_new, +// .delete_callback = dap_enc_newhope_kem_key_delete, +// .new_generate_callback = dap_enc_newhope_kem_key_new_generate, +// .enc_out_size = NULL, +// .dec_out_size = NULL, +// .sign_get = NULL, +// .sign_verify = NULL +// }, + //------Signatures--------------------------- [DAP_ENC_KEY_TYPE_SIG_PICNIC]={ .name = "PICNIC", .enc = NULL, diff --git a/dap-sdk/crypto/src/dap_enc_oaes.c b/dap-sdk/crypto/src/dap_enc_oaes.c index d0a37d66dae177859a4b13cc68be846ae0561da9..ccfa529b91985bb3b302ec7f57cda902bf9abb70 100755 --- a/dap-sdk/crypto/src/dap_enc_oaes.c +++ b/dap-sdk/crypto/src/dap_enc_oaes.c @@ -67,10 +67,10 @@ void dap_enc_oaes_key_generate(struct dap_enc_key * a_key, const void *kex_buf, size_t dap_enc_oaes_calc_encode_size(const size_t size_in) { - size_t a_out_size = 2 * OAES_BLOCK_SIZE + size_in + size_t l_out_size = 2 * OAES_BLOCK_SIZE + size_in + (size_in % OAES_BLOCK_SIZE == 0 ? 0 : OAES_BLOCK_SIZE - size_in % OAES_BLOCK_SIZE); - return a_out_size; + return l_out_size; } size_t dap_enc_oaes_calc_decode_size(const size_t size_in) @@ -83,14 +83,14 @@ size_t dap_enc_oaes_decrypt(struct dap_enc_key *a_key, const void * a_in, OAES_CTX *ctx = get_oaes_ctx(a_key); if(!ctx) return 0; - size_t a_out_size = dap_enc_oaes_calc_decode_size(a_in_size); - *a_out = calloc(a_out_size, 1); - OAES_RET ret = oaes_decrypt(ctx, a_in, a_in_size, *a_out, &a_out_size); + size_t l_out_size = dap_enc_oaes_calc_decode_size(a_in_size); + *a_out = calloc(l_out_size, 1); + OAES_RET ret = oaes_decrypt(ctx, a_in, a_in_size, *a_out, &l_out_size); if(ret != OAES_RET_SUCCESS) { - a_out_size = 0; + l_out_size = 0; free(*a_out); } - return a_out_size; + return l_out_size; } size_t dap_enc_oaes_encrypt(struct dap_enc_key * a_key, const void * a_in, size_t a_in_size, void ** a_out) @@ -98,14 +98,14 @@ size_t dap_enc_oaes_encrypt(struct dap_enc_key * a_key, const void * a_in, size_ OAES_CTX *ctx = get_oaes_ctx(a_key); if(!ctx) return 0; - size_t a_out_size = dap_enc_oaes_calc_encode_size(a_in_size); - *a_out = calloc(a_out_size, 1); - OAES_RET ret = oaes_encrypt(ctx, a_in, a_in_size, *a_out, &a_out_size); + size_t l_out_size = dap_enc_oaes_calc_encode_size(a_in_size); + *a_out = calloc(l_out_size, 1); + OAES_RET ret = oaes_encrypt(ctx, a_in, a_in_size, *a_out, &l_out_size); if(ret != OAES_RET_SUCCESS) { - a_out_size = 0; + l_out_size = 0; free(*a_out); } - return a_out_size; + return l_out_size; } // Writes result ( out ) in already allocated buffer diff --git a/dap-sdk/crypto/src/dap_enc_ringct20.c b/dap-sdk/crypto/src/dap_enc_ringct20.c index f67af0b3f9bbcedd4d5a3764ad16cafabf1ec302..172690f5bbf1d4b874c62536dc70397612eb030f 100644 --- a/dap-sdk/crypto/src/dap_enc_ringct20.c +++ b/dap-sdk/crypto/src/dap_enc_ringct20.c @@ -4,7 +4,7 @@ #include "dap_enc_ringct20.h" #include "dap_common.h" -#include "dap_rand.h" +#include "rand/dap_rand.h" @@ -20,16 +20,16 @@ int32_t ringct20_private_and_public_keys_init(ringct20_private_key_t *private_ke void SetupPrintAH(poly_ringct20 *A, poly_ringct20 * H, const int mLen) { LRCT_Setup(A, H, mLen); - uint8_t polyb_tmp[NEWHOPE_POLYBYTES]; - printf("A_bpoly[%d][NEWHOPE_POLYBYTES] = {\n", mLen); + uint8_t polyb_tmp[NEWHOPE_RINGCT20_POLYBYTES]; + printf("A_bpoly[%d][NEWHOPE_RINGCT20_POLYBYTES] = {\n", mLen); for(int i = 0; i < mLen; ++i) { poly_tobytes(polyb_tmp,A + i); printf("{"); - for(int j = 0; j < NEWHOPE_POLYBYTES; ++j) + for(int j = 0; j < NEWHOPE_RINGCT20_POLYBYTES; ++j) { printf("0x%.2x", polyb_tmp[j]); - if(j < NEWHOPE_POLYBYTES - 1) + if(j < NEWHOPE_RINGCT20_POLYBYTES - 1) printf(", "); } printf("}"); @@ -37,15 +37,15 @@ void SetupPrintAH(poly_ringct20 *A, poly_ringct20 * H, const int mLen) printf(",\n"); } printf("};\n"); - printf("H_bpoly[%d][NEWHOPE_POLYBYTES] = {\n", mLen); + printf("H_bpoly[%d][NEWHOPE_RINGCT20_POLYBYTES] = {\n", mLen); for(int i = 0; i < mLen; ++i) { poly_tobytes(polyb_tmp,H + i); printf("{"); - for(int j = 0; j < NEWHOPE_POLYBYTES; ++j) + for(int j = 0; j < NEWHOPE_RINGCT20_POLYBYTES; ++j) { printf("0x%.2x", polyb_tmp[j]); - if(j < NEWHOPE_POLYBYTES - 1) + if(j < NEWHOPE_RINGCT20_POLYBYTES - 1) printf(", "); } printf("}"); @@ -284,7 +284,7 @@ int ringct20_crypto_sign( ringct20_signature_t *sig, const unsigned char *m, uns for(int i = 0; i < p->wLen; ++i) t[i] = malloc(p->M*p->POLY_RINGCT20_SIZE); - unsigned char *bt = malloc(NEWHOPE_POLYBYTES); + unsigned char *bt = malloc(NEWHOPE_RINGCT20_POLYBYTES); for (int i = 0; i < p->wLen; i++) { @@ -297,7 +297,7 @@ int ringct20_crypto_sign( ringct20_signature_t *sig, const unsigned char *m, uns for (int k = 0; k < p->M; k++) { - randombytes(bt, NEWHOPE_POLYBYTES); + randombytes(bt, NEWHOPE_RINGCT20_POLYBYTES); poly_frombytes(u + k, bt); poly_serial(u + k); //poly_print(u+k); @@ -659,7 +659,7 @@ int ringct20_crypto_sign_with_pbk_list( ringct20_signature_t *sig, const unsigne for(int i = 0; i < wLen; ++i) t[i] = malloc(p->M*p->POLY_RINGCT20_SIZE); - unsigned char *bt = malloc(NEWHOPE_POLYBYTES); + unsigned char *bt = malloc(NEWHOPE_RINGCT20_POLYBYTES); for (int i = 0; i < wLen; i++) { @@ -672,7 +672,7 @@ int ringct20_crypto_sign_with_pbk_list( ringct20_signature_t *sig, const unsigne for (int k = 0; k < p->M; k++) { - randombytes(bt, NEWHOPE_POLYBYTES); + randombytes(bt, NEWHOPE_RINGCT20_POLYBYTES); poly_frombytes(u + k, bt); poly_serial(u + k); //poly_print(u+k); diff --git a/dap-sdk/crypto/src/dap_enc_salsa2012.c b/dap-sdk/crypto/src/dap_enc_salsa2012.c index 767f9fb9e02447ba1517e19f11eb53909690085d..67796c3861232d0b75eb816fedf7580f925cd355 100644 --- a/dap-sdk/crypto/src/dap_enc_salsa2012.c +++ b/dap-sdk/crypto/src/dap_enc_salsa2012.c @@ -24,10 +24,10 @@ void dap_enc_salsa2012_key_generate(struct dap_enc_key * a_key, const void *kex_ a_key->priv_key_data_size = SALSA20_KEY_SIZE; - a_key->priv_key_data = DAP_NEW_SIZE(uint8_t, key_size); + a_key->priv_key_data = DAP_NEW_SIZE(uint8_t, a_key->priv_key_data_size); Keccak_HashInstance Keccak_ctx; - Keccak_HashInitialize(&Keccak_ctx, 1088, 512, SALSA20_KEY_SIZE*8, 0x06); + Keccak_HashInitialize(&Keccak_ctx, 1088, 512, a_key->priv_key_data_size*8, 0x06); Keccak_HashUpdate(&Keccak_ctx, kex_buf, kex_size*8); if(seed_size) Keccak_HashUpdate(&Keccak_ctx, seed, seed_size*8); @@ -39,9 +39,9 @@ void dap_enc_salsa2012_key_delete(struct dap_enc_key *a_key) if(a_key->priv_key_data != NULL) { randombytes(a_key->priv_key_data,a_key->priv_key_data_size); - DAP_DELETE(a_key->priv_key_data); + //DAP_DELETE(a_key->priv_key_data); } - a_key->priv_key_data_size = 0; + //a_key->priv_key_data_size = 0; } //------SALSA2012----------- void dap_enc_salsa2012_key_new(struct dap_enc_key * a_key) @@ -58,16 +58,16 @@ void dap_enc_salsa2012_key_new(struct dap_enc_key * a_key) size_t dap_enc_salsa2012_decrypt(struct dap_enc_key *a_key, const void * a_in, size_t a_in_size, void ** a_out) { - size_t a_out_size = a_in_size - SALSA20_NONCE_SIZE; - if(a_out_size <= 0) { + size_t l_out_size = a_in_size - SALSA20_NONCE_SIZE; + if(l_out_size <= 0) { log_it(L_ERROR, "salsa2012 decryption ct with iv must be more than kBlockLen89 bytes"); return 0; } *a_out = DAP_NEW_SIZE(uint8_t, a_in_size - SALSA20_NONCE_SIZE); - a_out_size = dap_enc_salsa2012_decrypt_fast(a_key, a_in, a_in_size, *a_out, a_out_size); - if(a_out_size == 0) + l_out_size = dap_enc_salsa2012_decrypt_fast(a_key, a_in, a_in_size, *a_out, l_out_size); + if(l_out_size == 0) DAP_DEL_Z(*a_out); - return a_out_size; + return l_out_size; } size_t dap_enc_salsa2012_encrypt(struct dap_enc_key * a_key, const void * a_in, size_t a_in_size, void ** a_out) @@ -76,12 +76,12 @@ size_t dap_enc_salsa2012_encrypt(struct dap_enc_key * a_key, const void * a_in, log_it(L_ERROR, "gost ofb encryption pt cannot be 0 bytes"); return 0; } - size_t a_out_size = a_in_size + SALSA20_NONCE_SIZE; - *a_out = DAP_NEW_SIZE(uint8_t, a_out_size); - a_out_size = dap_enc_salsa2012_encrypt_fast(a_key, a_in, a_in_size, *a_out, a_out_size); - if(a_out_size == 0) + size_t l_out_size = a_in_size + SALSA20_NONCE_SIZE; + *a_out = DAP_NEW_SIZE(uint8_t, l_out_size); + l_out_size = dap_enc_salsa2012_encrypt_fast(a_key, a_in, a_in_size, *a_out, l_out_size); + if(l_out_size == 0) DAP_DEL_Z(*a_out); - return a_out_size; + return l_out_size; } size_t dap_enc_salsa2012_calc_encode_size(const size_t size_in) @@ -100,21 +100,21 @@ size_t dap_enc_salsa2012_calc_decode_size(const size_t size_in) size_t dap_enc_salsa2012_decrypt_fast(struct dap_enc_key *a_key, const void * a_in, size_t a_in_size, void * a_out, size_t buf_out_size) { - size_t a_out_size = a_in_size - SALSA20_NONCE_SIZE; - if(a_out_size > buf_out_size) { + size_t l_out_size = a_in_size - SALSA20_NONCE_SIZE; + if(l_out_size > buf_out_size) { log_it(L_ERROR, "salsa2012 fast_decryption too small buf_out_size"); return 0; } //memcpy(nonce, a_in, SALSA20_NONCE_SIZE); crypto_stream_salsa2012_xor(a_out, a_in + SALSA20_NONCE_SIZE, a_in_size - SALSA20_NONCE_SIZE, a_in, a_key->priv_key_data); - return a_out_size; + return l_out_size; } size_t dap_enc_salsa2012_encrypt_fast(struct dap_enc_key * a_key, const void * a_in, size_t a_in_size, void * a_out,size_t buf_out_size) { - size_t a_out_size = a_in_size + SALSA20_NONCE_SIZE; - if(a_out_size > buf_out_size) { + size_t l_out_size = a_in_size + SALSA20_NONCE_SIZE; + if(l_out_size > buf_out_size) { log_it(L_ERROR, "salsa2012 fast_encryption too small buf_out_size"); return 0; } @@ -126,6 +126,6 @@ size_t dap_enc_salsa2012_encrypt_fast(struct dap_enc_key * a_key, const void * a } crypto_stream_salsa2012_xor(a_out + SALSA20_NONCE_SIZE, a_in, a_in_size, a_out, a_key->priv_key_data); - return a_out_size; + return l_out_size; } diff --git a/dap-sdk/crypto/src/dap_enc_tesla.c b/dap-sdk/crypto/src/dap_enc_tesla.c index ca979cb6c949872c072695d4f06988f5f4b8cc81..e8c03e6ba0521f801f9b1d178fc5b3eb1186f23c 100755 --- a/dap-sdk/crypto/src/dap_enc_tesla.c +++ b/dap-sdk/crypto/src/dap_enc_tesla.c @@ -4,7 +4,7 @@ #include "dap_enc_tesla.h" #include "dap_common.h" -#include "dap_rand.h" +#include "rand/dap_rand.h" #define LOG_TAG "dap_enc_sig_tesla" diff --git a/dap-sdk/crypto/src/rand/dap_rand.c b/dap-sdk/crypto/src/rand/dap_rand.c index c804f53899cc1d25e1b0962ea9176ab1db5f93c2..7a2c48e3a6c787e858c3fbde3d87f406c387f974 100755 --- a/dap-sdk/crypto/src/rand/dap_rand.c +++ b/dap-sdk/crypto/src/rand/dap_rand.c @@ -45,7 +45,7 @@ int randombase64(void*random_array, unsigned int size) ((uint8_t*)random_array)[size - odd_signs + i] = tmpv[i]; } } - return (int) size; + return passed; } diff --git a/dap-sdk/crypto/src/ringct20/ntt.c b/dap-sdk/crypto/src/ringct20/ntt.c index c96eb15dedb80d9b184f0e54279dbc14f36b2d69..1da87b9d1f750e9f21da971e7afe52d2de13bbf5 100644 --- a/dap-sdk/crypto/src/ringct20/ntt.c +++ b/dap-sdk/crypto/src/ringct20/ntt.c @@ -3,7 +3,7 @@ #include "params.h" #include "reduce.h" -#if (NEWHOPE_N == 512) +#if (NEWHOPE_RINGCT20_N == 512) /************************************************************ * Name: bitrev_table * @@ -28,14 +28,14 @@ static uint16_t bitrev_table[512] = { 263, 135, 391, 71, 327, 199, 455, 39, 295, 167, 423, 103, 359, 231, 487, 23, 279, 151, 407, 87, 343, 215, 471, 55, 311, 183, 439, 119, 375, 247, 503, 15, 271, 143, 399, 79, 335, 207, 463, 47, 303, 175, 431, 111, 367, 239, 495, 31, 287, 159, 415, 95, 351, 223, 479, 63, 319, 191, 447, 127, 383, 255, 511}; -#elif (NEWHOPE_N == 1024) +#elif (NEWHOPE_RINGCT20_N == 1024) /************************************************************ * Name: bitrev_table * * Description: Contains bit-reversed 10-bit indices to be used to re-order * polynomials before number theoratic transform ************************************************************/ -static uint16_t bitrev_table[NEWHOPE_N] = { +static uint16_t bitrev_table[NEWHOPE_RINGCT20_N] = { 0, 512, 256, 768, 128, 640, 384, 896, 64, 576, 320, 832, 192, 704, 448, 960, 32, 544, 288, 800, 160, 672, 416, 928, 96, 608, 352, 864, 224, 736, 480, 992, 16, 528, 272, 784, 144, 656, 400, 912, 80, 592, 336, 848, 208, 720, 464, 976, 48, 560, 304, 816, 176, 688, 432, 944, 112, 624, 368, 880, 240, 752, 496, 1008, 8, 520, 264, 776, 136, 648, 392, 904, 72, 584, 328, 840, 200, 712, 456, 968, 40, 552, 296, 808, 168, 680, 424, 936, 104, 616, 360, 872, 232, 744, 488, 1000, @@ -70,7 +70,7 @@ static uint16_t bitrev_table[NEWHOPE_N] = { 31, 543, 287, 799, 159, 671, 415, 927, 95, 607, 351, 863, 223, 735, 479, 991, 63, 575, 319, 831, 191, 703, 447, 959, 127, 639, 383, 895, 255, 767, 511, 1023}; #else -#error "NEWHOPE_N must be either 512 or 1024" +#error "NEWHOPE_RINGCT20_N must be either 512 or 1024" #endif /************************************************* @@ -84,7 +84,7 @@ void bitrev_vector(uint16_t *poly_ringct20) { unsigned int i, r; uint16_t tmp; - for (i = 0; i < NEWHOPE_N; i++) { + for (i = 0; i < NEWHOPE_RINGCT20_N; i++) { r = bitrev_table[i]; if (i < r) { tmp = poly_ringct20[i]; @@ -106,11 +106,11 @@ void bitrev_vector(uint16_t *poly_ringct20) { void mul_coefficients(uint16_t *poly_ringct20, const uint16_t *factors) { unsigned int i; - for (i = 0; i < NEWHOPE_N; i++) + for (i = 0; i < NEWHOPE_RINGCT20_N; i++) poly_ringct20[i] = montgomery_reduce_32_16((poly_ringct20[i] * factors[i])); } -#if (NEWHOPE_N == 512) +#if (NEWHOPE_RINGCT20_N == 512) /************************************************* * Name: ntt_ringct20 @@ -132,11 +132,11 @@ void ntt_ringct20(uint16_t *a, const uint16_t *omega) { distance = (1 << i); for (start = 0; start < distance; start++) { jTwiddle = 0; - for (j = start; j < NEWHOPE_N - 1; j += 2 * distance) { + for (j = start; j < NEWHOPE_RINGCT20_N - 1; j += 2 * distance) { W = omega[jTwiddle++]; temp = a[j]; a[j] = (temp + a[j + distance]); // Omit reduction (be lazy) - a[j + distance] = montgomery_reduce_32_16((W * ((uint32_t) temp + 3 * NEWHOPE_Q - a[j + distance]))); + a[j + distance] = montgomery_reduce_32_16((W * ((uint32_t) temp + 3 * NEWHOPE_RINGCT20_Q - a[j + distance]))); } } if (i + 1 < 9) { @@ -144,18 +144,18 @@ void ntt_ringct20(uint16_t *a, const uint16_t *omega) { distance <<= 1; for (start = 0; start < distance; start++) { jTwiddle = 0; - for (j = start; j < NEWHOPE_N - 1; j += 2 * distance) { + for (j = start; j < NEWHOPE_RINGCT20_N - 1; j += 2 * distance) { W = omega[jTwiddle++]; temp = a[j]; - a[j] = (temp + a[j + distance]) % NEWHOPE_Q; - a[j + distance] = montgomery_reduce_32_16((W * ((uint32_t) temp + 3 * NEWHOPE_Q - a[j + distance]))); + a[j] = (temp + a[j + distance]) % NEWHOPE_RINGCT20_Q; + a[j + distance] = montgomery_reduce_32_16((W * ((uint32_t) temp + 3 * NEWHOPE_RINGCT20_Q - a[j + distance]))); } } } } } -#elif (NEWHOPE_N == 1024) +#elif (NEWHOPE_RINGCT20_N == 1024) void /************************************************* * Name: ntt_ringct20 @@ -177,11 +177,11 @@ void /************************************************* distance = (1 << i); for (start = 0; start < distance; start++) { jTwiddle = 0; - for (j = start; j < NEWHOPE_N - 1; j += 2 * distance) { + for (j = start; j < NEWHOPE_RINGCT20_N - 1; j += 2 * distance) { W = omega[jTwiddle++]; temp = a[j]; a[j] = (temp + a[j + distance]); // Omit reduction (be lazy) - a[j + distance] = montgomery_reduce_32_16((W * ((uint32_t) temp + 3 * NEWHOPE_Q - a[j + distance]))); + a[j + distance] = montgomery_reduce_32_16((W * ((uint32_t) temp + 3 * NEWHOPE_RINGCT20_Q - a[j + distance]))); } } @@ -189,16 +189,16 @@ void /************************************************* distance <<= 1; for (start = 0; start < distance; start++) { jTwiddle = 0; - for (j = start; j < NEWHOPE_N - 1; j += 2 * distance) { + for (j = start; j < NEWHOPE_RINGCT20_N - 1; j += 2 * distance) { W = omega[jTwiddle++]; temp = a[j]; - a[j] = (temp + a[j + distance]) % NEWHOPE_Q; - a[j + distance] = montgomery_reduce_32_16((W * ((uint32_t) temp + 3 * NEWHOPE_Q - a[j + distance]))); + a[j] = (temp + a[j + distance]) % NEWHOPE_RINGCT20_Q; + a[j + distance] = montgomery_reduce_32_16((W * ((uint32_t) temp + 3 * NEWHOPE_RINGCT20_Q - a[j + distance]))); } } } } #else -#error "NEWHOPE_N must be either 512 or 1024" +#error "NEWHOPE_RINGCT20_N must be either 512 or 1024" #endif diff --git a/dap-sdk/crypto/src/ringct20/ntt.h b/dap-sdk/crypto/src/ringct20/ntt.h index 4054b2f0fa16719e7915ae1096d90b2c87bcecd4..f0b7bdfe347eaedb66f00af861ad563ac90e4952 100644 --- a/dap-sdk/crypto/src/ringct20/ntt.h +++ b/dap-sdk/crypto/src/ringct20/ntt.h @@ -1,5 +1,5 @@ -#ifndef NTT_H -#define NTT_H +#ifndef NTT_RINGCT20_H +#define NTT_RINGCT20_H #include "inttypes.h" diff --git a/dap-sdk/crypto/src/ringct20/params.h b/dap-sdk/crypto/src/ringct20/params.h index d3be8c68e8cf1f406f1ca735d10a7f521d3b370f..0ac7536abf1d8a7dc2d7b89a4a39c7528d214f24 100644 --- a/dap-sdk/crypto/src/ringct20/params.h +++ b/dap-sdk/crypto/src/ringct20/params.h @@ -1,26 +1,26 @@ -#ifndef PARAMS_H -#define PARAMS_H +#ifndef PARAMS_RINGCT20_H +#define PARAMS_RINGCT20_H -#define NEWHOPE_Q 12289 -#define NEWHOPE_2Q 24578 -#define NEWHOPE_K 8 /* used in noise sampling */ -#define NEWHOPE_N 512 +#define NEWHOPE_RINGCT20_Q 12289 +#define NEWHOPE_RINGCT20_2Q 24578 +#define NEWHOPE_RINGCT20_K 8 /* used in noise sampling */ +#define NEWHOPE_RINGCT20_N 512 -#define NEWHOPE_SYMBYTES 32 /* size of shared key, seeds/coins, and hashes */ +#define NEWHOPE_RINGCT20_SYMBYTES 32 /* size of shared key, seeds/coins, and hashes */ -#define NEWHOPE_POLYBYTES ((14 * NEWHOPE_N) / 8) -#define NEWHOPE_POLYCOMPRESSEDBYTES ((3 * NEWHOPE_N) / 8) +#define NEWHOPE_RINGCT20_POLYBYTES ((14 * NEWHOPE_RINGCT20_N) / 8) +#define NEWHOPE_RINGCT20_POLYCOMPRESSEDBYTES ((3 * NEWHOPE_RINGCT20_N) / 8) -#define NEWHOPE_CPAPKE_PUBLICKEYBYTES (NEWHOPE_POLYBYTES + NEWHOPE_SYMBYTES) -#define NEWHOPE_CPAPKE_SECRETKEYBYTES (NEWHOPE_POLYBYTES) -#define NEWHOPE_CPAPKE_CIPHERTEXTBYTES (NEWHOPE_POLYBYTES + NEWHOPE_POLYCOMPRESSEDBYTES) +#define NEWHOPE_RINGCT20_CPAPKE_PUBLICKEYBYTES (NEWHOPE_RINGCT20_POLYBYTES + NEWHOPE_RINGCT20_SYMBYTES) +#define NEWHOPE_RINGCT20_CPAPKE_SECRETKEYBYTES (NEWHOPE_RINGCT20_POLYBYTES) +#define NEWHOPE_RINGCT20_CPAPKE_CIPHERTEXTBYTES (NEWHOPE_RINGCT20_POLYBYTES + NEWHOPE_RINGCT20_POLYCOMPRESSEDBYTES) -#define NEWHOPE_CPAKEM_PUBLICKEYBYTES NEWHOPE_CPAPKE_PUBLICKEYBYTES -#define NEWHOPE_CPAKEM_SECRETKEYBYTES NEWHOPE_CPAPKE_SECRETKEYBYTES -#define NEWHOPE_CPAKEM_CIPHERTEXTBYTES NEWHOPE_CPAPKE_CIPHERTEXTBYTES +#define NEWHOPE_RINGCT20_CPAKEM_PUBLICKEYBYTES NEWHOPE_RINGCT20_CPAPKE_PUBLICKEYBYTES +#define NEWHOPE_RINGCT20_CPAKEM_SECRETKEYBYTES NEWHOPE_RINGCT20_CPAPKE_SECRETKEYBYTES +#define NEWHOPE_RINGCT20_CPAKEM_CIPHERTEXTBYTES NEWHOPE_RINGCT20_CPAPKE_CIPHERTEXTBYTES -#define NEWHOPE_CCAKEM_PUBLICKEYBYTES NEWHOPE_CPAPKE_PUBLICKEYBYTES -#define NEWHOPE_CCAKEM_SECRETKEYBYTES (NEWHOPE_CPAPKE_SECRETKEYBYTES + NEWHOPE_CPAPKE_PUBLICKEYBYTES + 2 * NEWHOPE_SYMBYTES) -#define NEWHOPE_CCAKEM_CIPHERTEXTBYTES (NEWHOPE_CPAPKE_CIPHERTEXTBYTES + NEWHOPE_SYMBYTES) /* Second part is for Targhi-Unruh */ +#define NEWHOPE_RINGCT20_CCAKEM_PUBLICKEYBYTES NEWHOPE_RINGCT20_CPAPKE_PUBLICKEYBYTES +#define NEWHOPE_RINGCT20_CCAKEM_SECRETKEYBYTES (NEWHOPE_RINGCT20_CPAPKE_SECRETKEYBYTES + NEWHOPE_RINGCT20_CPAPKE_PUBLICKEYBYTES + 2 * NEWHOPE_RINGCT20_SYMBYTES) +#define NEWHOPE_RINGCT20_CCAKEM_CIPHERTEXTBYTES (NEWHOPE_RINGCT20_CPAPKE_CIPHERTEXTBYTES + NEWHOPE_RINGCT20_SYMBYTES) /* Second part is for Targhi-Unruh */ #endif diff --git a/dap-sdk/crypto/src/ringct20/poly.c b/dap-sdk/crypto/src/ringct20/poly.c index 82e7a2d85798dd2fe2cd674a2724346ad9dcdb91..ed350c619ddbff01cbcc30892d2bdb58ec3aa6ec 100644 --- a/dap-sdk/crypto/src/ringct20/poly.c +++ b/dap-sdk/crypto/src/ringct20/poly.c @@ -10,7 +10,7 @@ void poly_init(poly_ringct20 *r) { size_t i; - for ( i = 0; i < NEWHOPE_N; i++) + for ( i = 0; i < NEWHOPE_RINGCT20_N; i++) { r->coeffs[i] = 0; } @@ -18,7 +18,7 @@ void poly_init(poly_ringct20 *r) void poly_setValue(poly_ringct20 *r, uint16_t v) { size_t i; - for (i = 0; i < NEWHOPE_N; i++) + for (i = 0; i < NEWHOPE_RINGCT20_N; i++) { r->coeffs[i] = v; } @@ -35,9 +35,9 @@ void poly_setValue(poly_ringct20 *r, uint16_t v) uint16_t coeff_freeze(uint16_t x) { uint16_t m, r; int16_t c; - r = x % NEWHOPE_Q; + r = x % NEWHOPE_RINGCT20_Q; - m = r - NEWHOPE_Q; + m = r - NEWHOPE_RINGCT20_Q; c = m; c >>= 15; r = m ^ ((r ^ m) & c); @@ -48,9 +48,9 @@ void poly_setValue(poly_ringct20 *r, uint16_t v) { uint16_t m, r; int16_t c; - r = x % NEWHOPE_2Q; + r = x % NEWHOPE_RINGCT20_2Q; - m = r - NEWHOPE_2Q; + m = r - NEWHOPE_RINGCT20_2Q; c = m; c >>= 15; r = m ^ ((r ^ m) & c); @@ -71,7 +71,7 @@ static uint16_t flipabs(uint16_t x) { int16_t r, m; r = coeff_freeze(x); - r = r - NEWHOPE_Q / 2; + r = r - NEWHOPE_RINGCT20_Q / 2; m = r >> 15; return (r + m) ^ m; } @@ -86,7 +86,7 @@ static uint16_t flipabs(uint16_t x) { **************************************************/ void poly_frombytes(poly_ringct20 *r, const unsigned char *a) { int i; - for (i = 0; i < NEWHOPE_N / 4; i++) { + for (i = 0; i < NEWHOPE_RINGCT20_N / 4; i++) { r->coeffs[4 * i + 0] = a[7 * i + 0] | (((uint16_t) a[7 * i + 1] & 0x3f) << 8); r->coeffs[4 * i + 1] = (a[7 * i + 1] >> 6) | (((uint16_t) a[7 * i + 2]) << 2) | (((uint16_t) a[7 * i + 3] & 0x0f) << 10); r->coeffs[4 * i + 2] = (a[7 * i + 3] >> 4) | (((uint16_t) a[7 * i + 4]) << 4) | (((uint16_t) a[7 * i + 5] & 0x03) << 12); @@ -105,7 +105,7 @@ void poly_frombytes(poly_ringct20 *r, const unsigned char *a) { void poly_tobytes(unsigned char *r, const poly_ringct20 *p) { int i; uint16_t t0, t1, t2, t3; - for (i = 0; i < NEWHOPE_N / 4; i++) { + for (i = 0; i < NEWHOPE_RINGCT20_N / 4; i++) { t0 = coeff_freeze(p->coeffs[4 * i + 0]); t1 = coeff_freeze(p->coeffs[4 * i + 1]); t2 = coeff_freeze(p->coeffs[4 * i + 2]); @@ -134,10 +134,10 @@ void poly_compress(unsigned char *r, const poly_ringct20 *p) { uint32_t t[8]; - for (i = 0; i < NEWHOPE_N; i += 8) { + for (i = 0; i < NEWHOPE_RINGCT20_N; i += 8) { for (j = 0; j < 8; j++) { t[j] = coeff_freeze(p->coeffs[i + j]); - t[j] = (((t[j] << 3) + NEWHOPE_Q / 2) / NEWHOPE_Q) & 0x7; + t[j] = (((t[j] << 3) + NEWHOPE_RINGCT20_Q / 2) / NEWHOPE_RINGCT20_Q) & 0x7; } r[k] = t[0] | (t[1] << 3) | (t[2] << 6); @@ -158,7 +158,7 @@ void poly_compress(unsigned char *r, const poly_ringct20 *p) { **************************************************/ void poly_decompress(poly_ringct20 *r, const unsigned char *a) { unsigned int i, j; - for (i = 0; i < NEWHOPE_N; i += 8) { + for (i = 0; i < NEWHOPE_RINGCT20_N; i += 8) { r->coeffs[i + 0] = a[0] & 7; r->coeffs[i + 1] = (a[0] >> 3) & 7; r->coeffs[i + 2] = (a[0] >> 6) | ((a[1] << 2) & 4); @@ -169,7 +169,7 @@ void poly_decompress(poly_ringct20 *r, const unsigned char *a) { r->coeffs[i + 7] = (a[2] >> 5); a += 3; for (j = 0; j < 8; j++) - r->coeffs[i + j] = ((uint32_t) r->coeffs[i + j] * NEWHOPE_Q + 4) >> 3; + r->coeffs[i + j] = ((uint32_t) r->coeffs[i + j] * NEWHOPE_RINGCT20_Q + 4) >> 3; } } @@ -187,11 +187,11 @@ void poly_frommsg(poly_ringct20 *r, const unsigned char *msg) { { for (j = 0; j < 8; j++) { mask = -((msg[i] >> j) & 1); - r->coeffs[8 * i + j + 0] = mask & (NEWHOPE_Q / 2); - r->coeffs[8 * i + j + 256] = mask & (NEWHOPE_Q / 2); -#if (NEWHOPE_N == 1024) - r->coeffs[8 * i + j + 512] = mask & (NEWHOPE_Q / 2); - r->coeffs[8 * i + j + 768] = mask & (NEWHOPE_Q / 2); + r->coeffs[8 * i + j + 0] = mask & (NEWHOPE_RINGCT20_Q / 2); + r->coeffs[8 * i + j + 256] = mask & (NEWHOPE_RINGCT20_Q / 2); +#if (NEWHOPE_RINGCT20_N == 1024) + r->coeffs[8 * i + j + 512] = mask & (NEWHOPE_RINGCT20_Q / 2); + r->coeffs[8 * i + j + 768] = mask & (NEWHOPE_RINGCT20_Q / 2); #endif } } @@ -215,12 +215,12 @@ void poly_tomsg(unsigned char *msg, const poly_ringct20 *x) { for (i = 0; i < 256; i++) { t = flipabs(x->coeffs[i + 0]); t += flipabs(x->coeffs[i + 256]); -#if (NEWHOPE_N == 1024) +#if (NEWHOPE_RINGCT20_N == 1024) t += flipabs(x->coeffs[i + 512]); t += flipabs(x->coeffs[i + 768]); - t = ((t - NEWHOPE_Q)); + t = ((t - NEWHOPE_RINGCT20_Q)); #else - t = ((t - NEWHOPE_Q / 2)); + t = ((t - NEWHOPE_RINGCT20_Q / 2)); #endif t >>= 15; @@ -242,28 +242,28 @@ void poly_uniform_ringct20(poly_ringct20 *a, const unsigned char *seed) { uint16_t val; uint64_t state[SHA3_STATESIZE]; uint8_t buf[SHAKE128_RATE]; - uint8_t extseed[NEWHOPE_SYMBYTES + 1]; + uint8_t extseed[NEWHOPE_RINGCT20_SYMBYTES + 1]; int i, j, k; - for (i = 0; i < NEWHOPE_SYMBYTES; i++) + for (i = 0; i < NEWHOPE_RINGCT20_SYMBYTES; i++) extseed[i] = seed[i]; for (i = 0; i < SHA3_STATESIZE; ++i) state[i] = 0; - for (i = 0; i < NEWHOPE_N / 64; i++) /* generate a in blocks of 64 coefficients */ + for (i = 0; i < NEWHOPE_RINGCT20_N / 64; i++) /* generate a in blocks of 64 coefficients */ { ctr = 0; - extseed[NEWHOPE_SYMBYTES] = i; /* domain-separate the 16 independent calls */ + extseed[NEWHOPE_RINGCT20_SYMBYTES] = i; /* domain-separate the 16 independent calls */ for (k = 0; k < SHA3_STATESIZE; ++k) state[k] = 0; - shake128_absorb(state, extseed, NEWHOPE_SYMBYTES + 1); + shake128_absorb(state, extseed, NEWHOPE_RINGCT20_SYMBYTES + 1); while (ctr < 64) /* Very unlikely to run more than once */ { shake128_squeezeblocks(buf, 1, state); for (j = 0; j < SHAKE128_RATE && ctr < 64; j += 2) { val = (buf[j] | ((uint16_t) buf[j + 1] << 8)); - if (val < 5 * NEWHOPE_Q) { + if (val < 5 * NEWHOPE_RINGCT20_Q) { a->coeffs[i * 64 + ctr] = val; ctr++; } @@ -298,27 +298,27 @@ static unsigned char hw(unsigned char a) { * - unsigned char nonce: one-byte input nonce **************************************************/ void poly_sample(poly_ringct20 *r, const unsigned char *seed, unsigned char nonce) { -#if NEWHOPE_K != 8 +#if NEWHOPE_RINGCT20_K != 8 #error "poly_sample in poly_ringct20.c only supports k=8" #endif unsigned char buf[128], a, b; // uint32_t t, d, a, b, c; int i, j; - unsigned char extseed[NEWHOPE_SYMBYTES + 2]; + unsigned char extseed[NEWHOPE_RINGCT20_SYMBYTES + 2]; - for (i = 0; i < NEWHOPE_SYMBYTES; i++) + for (i = 0; i < NEWHOPE_RINGCT20_SYMBYTES; i++) extseed[i] = seed[i]; - extseed[NEWHOPE_SYMBYTES] = nonce; + extseed[NEWHOPE_RINGCT20_SYMBYTES] = nonce; - for (i = 0; i < NEWHOPE_N / 64; i++) /* Generate noise in blocks of 64 coefficients */ + for (i = 0; i < NEWHOPE_RINGCT20_N / 64; i++) /* Generate noise in blocks of 64 coefficients */ { - extseed[NEWHOPE_SYMBYTES + 1] = i; - shake256(buf, 128, extseed, NEWHOPE_SYMBYTES + 2); + extseed[NEWHOPE_RINGCT20_SYMBYTES + 1] = i; + shake256(buf, 128, extseed, NEWHOPE_RINGCT20_SYMBYTES + 2); for (j = 0; j < 64; j++) { a = buf[2 * j]; b = buf[2 * j + 1]; - r->coeffs[64 * i + j] = hw(a) + NEWHOPE_Q - hw(b); + r->coeffs[64 * i + j] = hw(a) + NEWHOPE_RINGCT20_Q - hw(b); } } } @@ -336,7 +336,7 @@ void poly_mul_pointwise(poly_ringct20 *r, const poly_ringct20 *a, const poly_rin int i; uint16_t t; - for (i = 0; i < NEWHOPE_N; i++) { + for (i = 0; i < NEWHOPE_RINGCT20_N; i++) { t = montgomery_reduce_32_16(3186 * b->coeffs[i]); /* t is now in Montgomery domain */ r->coeffs[i] = montgomery_reduce_32_16(a->coeffs[i] * t); /* r->coeffs[i] is back in normal domain */ } @@ -354,8 +354,8 @@ void poly_mul_pointwise(poly_ringct20 *r, const poly_ringct20 *a, const poly_rin **************************************************/ void poly_add_ringct20(poly_ringct20 *r, const poly_ringct20 *a, const poly_ringct20 *b) { int i; - for (i = 0; i < NEWHOPE_N; i++) - r->coeffs[i] = (a->coeffs[i] + b->coeffs[i]) % NEWHOPE_Q; + for (i = 0; i < NEWHOPE_RINGCT20_N; i++) + r->coeffs[i] = (a->coeffs[i] + b->coeffs[i]) % NEWHOPE_RINGCT20_Q; } /************************************************* @@ -369,8 +369,8 @@ void poly_add_ringct20(poly_ringct20 *r, const poly_ringct20 *a, const poly_ring **************************************************/ void poly_sub_ringct20(poly_ringct20 *r, const poly_ringct20 *a, const poly_ringct20 *b) { int i; - for (i = 0; i < NEWHOPE_N; i++) - r->coeffs[i] = (a->coeffs[i] + 3 * NEWHOPE_Q - b->coeffs[i]) % NEWHOPE_Q; + for (i = 0; i < NEWHOPE_RINGCT20_N; i++) + r->coeffs[i] = (a->coeffs[i] + 3 * NEWHOPE_RINGCT20_Q - b->coeffs[i]) % NEWHOPE_RINGCT20_Q; } /************************************************* @@ -412,7 +412,7 @@ void poly_invntt(poly_ringct20 *r) { void poly_print(const poly_ringct20 *r) { size_t i = 0; - for ( i = 0; i < NEWHOPE_N; i++) + for ( i = 0; i < NEWHOPE_RINGCT20_N; i++) { printf("%04X", r->coeffs[i]); } @@ -422,7 +422,7 @@ void poly_print(const poly_ringct20 *r) void poly_serial(poly_ringct20 *r) { size_t i; - for ( i = 0; i < NEWHOPE_N; i++) + for ( i = 0; i < NEWHOPE_RINGCT20_N; i++) { r->coeffs[i] = coeff_freeze(r->coeffs[i]); } @@ -430,7 +430,7 @@ void poly_serial(poly_ringct20 *r) void poly_cofcopy(poly_ringct20 *des, poly_ringct20 *sour) { size_t i; - for ( i = 0; i < NEWHOPE_N; i++) + for ( i = 0; i < NEWHOPE_RINGCT20_N; i++) { des->coeffs[i] = sour->coeffs[i]; } @@ -447,7 +447,7 @@ void poly_copy(poly_ringct20 *des, poly_ringct20 *sou, size_t mLen) int poly_equal(const poly_ringct20 *a, const poly_ringct20 *b) { size_t i; - for ( i = 0; i < NEWHOPE_N; i++) + for ( i = 0; i < NEWHOPE_RINGCT20_N; i++) { if (a->coeffs[i] != b->coeffs[i]) { @@ -461,10 +461,10 @@ void poly_constmul(poly_ringct20 *r, const poly_ringct20 *a, uint16_t cof) { size_t i; uint32_t tmp = 0; - for (i = 0; i < NEWHOPE_N; i++) + for (i = 0; i < NEWHOPE_RINGCT20_N; i++) { tmp = cof * a->coeffs[i]; - r->coeffs[i] = tmp%NEWHOPE_2Q; + r->coeffs[i] = tmp%NEWHOPE_RINGCT20_2Q; } } //shift diff --git a/dap-sdk/crypto/src/ringct20/poly.h b/dap-sdk/crypto/src/ringct20/poly.h index 7c507b568d8e0ae46dbc17578dd684f141b3fbd0..78894205666f6bf34f20ef088bb7444ee302ab91 100644 --- a/dap-sdk/crypto/src/ringct20/poly.h +++ b/dap-sdk/crypto/src/ringct20/poly.h @@ -1,5 +1,5 @@ -#ifndef POLY_H -#define POLY_H +#ifndef POLY_RINGCT20_H +#define POLY_RINGCT20_H #include <stdint.h> #include <stddef.h> @@ -10,7 +10,7 @@ * coeffs[0] + X*coeffs[1] + X^2*xoeffs[2] + ... + X^{n-1}*coeffs[n-1] */ typedef struct { - uint16_t coeffs[NEWHOPE_N]; + uint16_t coeffs[NEWHOPE_RINGCT20_N]; } poly_ringct20 #if !defined(_WIN32) diff --git a/dap-sdk/crypto/src/ringct20/precomp.c b/dap-sdk/crypto/src/ringct20/precomp.c index d571ba3280b6fb908a03a6f0099e3772dfe0d712..3d3d9e4b234cf00d8d8a018dc07d990ae4f280c3 100644 --- a/dap-sdk/crypto/src/ringct20/precomp.c +++ b/dap-sdk/crypto/src/ringct20/precomp.c @@ -73,14 +73,14 @@ * psis_inv_montgomery = lift(vector(n, i, g^(-(i-1))/n*mont)) */ -#if (NEWHOPE_N == 512) +#if (NEWHOPE_RINGCT20_N == 512) /************************************************************ * Name: omegas_bitrev_montgomery * * Description: Contains powers of nth root of unity in Montgomery * domain with R=2^18 in bit-reversed order ************************************************************/ -uint16_t omegas_bitrev_montgomery[NEWHOPE_N / 2] = { +uint16_t omegas_bitrev_montgomery[NEWHOPE_RINGCT20_N / 2] = { 4075, 5315, 7965, 7373, 522, 10120, 9027, 5079, 2344, 1278, 1973, 5574, 1018, 6364, 11248, 8775, 7500, 7822, 5537, 4749, 8500, 12142, 5456, 7840, 5445, 3860, 4536, 11239, 6171, 8471, 2683, 11099, 10561, 400, 6137, 7341, 5415, 8646, 6136, 5862, 5529, 5206, 56, 9090, 8724, 11635, 1702, 10302, @@ -105,7 +105,7 @@ uint16_t omegas_bitrev_montgomery[NEWHOPE_N / 2] = { * Description: Contains inverses of powers of nth root of unity * in Montgomery domain with R=2^18 in bit-reversed order ************************************************************/ -uint16_t omegas_inv_bitrev_montgomery[NEWHOPE_N / 2] = { +uint16_t omegas_inv_bitrev_montgomery[NEWHOPE_RINGCT20_N / 2] = { 4075, 6974, 4916, 4324, 7210, 3262, 2169, 11767, 3514, 1041, 5925, 11271, 6715, 10316, 11011, 9945, 1190, 9606, 3818, 6118, 1050, 7753, 8429, 6844, 4449, 6833, 147, 3789, 7540, 6752, 4467, 4789, 10367, 3879, 2033, 3998, 11316, 1254, 6854, 1359, 3988, 468, 11907, 11973, 8579, 6196, 5446, 6950, @@ -130,7 +130,7 @@ uint16_t omegas_inv_bitrev_montgomery[NEWHOPE_N / 2] = { * Description: Contains powers of nth root of -1 in Montgomery * domain with R=2^18 in bit-reversed order ************************************************************/ -uint16_t psis_bitrev_montgomery[NEWHOPE_N] = { +uint16_t psis_bitrev_montgomery[NEWHOPE_RINGCT20_N] = { 4075, 5315, 7965, 7373, 522, 10120, 9027, 5079, 2344, 1278, 1973, 5574, 1018, 6364, 11248, 8775, 7500, 7822, 5537, 4749, 8500, 12142, 5456, 7840, 5445, 3860, 4536, 11239, 6171, 8471, 2683, 11099, 10561, 400, 6137, 7341, 5415, 8646, 6136, 5862, 5529, 5206, 56, 9090, 8724, 11635, 1702, 10302, @@ -171,7 +171,7 @@ uint16_t psis_bitrev_montgomery[NEWHOPE_N] = { * Description: Contains inverses of powers of nth root of -1 * divided by n in Montgomery domain with R=2^18 ************************************************************/ -uint16_t psis_inv_montgomery[NEWHOPE_N] = { +uint16_t psis_inv_montgomery[NEWHOPE_RINGCT20_N] = { 512, 3944, 4267, 5411, 9615, 5900, 3205, 6063, 9261, 2021, 3087, 4770, 1029, 1590, 343, 530, 8307, 4273, 2769, 9617, 923, 7302, 4404, 2434, 1468, 9004, 8682, 11194, 2894, 11924, 5061, 8071, 1687, 10883, 8755, 7724, 11111, 6671, 7800, 6320, 2600, 6203, 4963, 6164, 9847, 6151, 11475, 10243, @@ -206,14 +206,14 @@ uint16_t psis_inv_montgomery[NEWHOPE_N] = { 7954, 4050, 10844, 1350, 7711, 450, 10763, 150, 7684, 50, 10754, 4113, 7681, 1371, 10753, 457, }; -#elif (NEWHOPE_N == 1024) +#elif (NEWHOPE_RINGCT20_N == 1024) /************************************************************ * Name: omegas_bitrev_montgomery * * Description: Contains powers of nth root of unity in Montgomery * domain with R=2^18 in bit-reversed order ************************************************************/ -uint16_t omegas_bitrev_montgomery[NEWHOPE_N / 2] = { +uint16_t omegas_bitrev_montgomery[NEWHOPE_RINGCT20_N / 2] = { 4075, 6974, 7373, 7965, 3262, 5079, 522, 2169, 6364, 1018, 1041, 8775, 2344, 11011, 5574, 1973, 4536, 1050, 6844, 3860, 3818, 6118, 2683, 1190, 4789, 7822, 7540, 6752, 5456, 4449, 3789, 12142, 11973, 382, 3988, 468, 6843, 5339, 6196, 3710, 11316, 1254, 5435, 10930, 3998, 10256, 10367, 3879, @@ -253,7 +253,7 @@ uint16_t omegas_bitrev_montgomery[NEWHOPE_N / 2] = { * Description: Contains inverses of powers of nth root of unity * in Montgomery domain with R=2^18 in bit-reversed order ************************************************************/ -uint16_t omegas_inv_bitrev_montgomery[NEWHOPE_N / 2] = { +uint16_t omegas_inv_bitrev_montgomery[NEWHOPE_RINGCT20_N / 2] = { 4075, 5315, 4324, 4916, 10120, 11767, 7210, 9027, 10316, 6715, 1278, 9945, 3514, 11248, 11271, 5925, 147, 8500, 7840, 6833, 5537, 4749, 4467, 7500, 11099, 9606, 6171, 8471, 8429, 5445, 11239, 7753, 9090, 12233, 5529, 5206, 10587, 1987, 11635, 3565, 5415, 8646, 6153, 6427, 7341, 6152, 10561, 400, @@ -293,7 +293,7 @@ uint16_t omegas_inv_bitrev_montgomery[NEWHOPE_N / 2] = { * Description: Contains powers of nth root of -1 in Montgomery * domain with R=2^18 in bit-reversed order ************************************************************/ -uint16_t psis_bitrev_montgomery[NEWHOPE_N] = { +uint16_t psis_bitrev_montgomery[NEWHOPE_RINGCT20_N] = { 4075, 6974, 7373, 7965, 3262, 5079, 522, 2169, 6364, 1018, 1041, 8775, 2344, 11011, 5574, 1973, 4536, 1050, 6844, 3860, 3818, 6118, 2683, 1190, 4789, 7822, 7540, 6752, 5456, 4449, 3789, 12142, 11973, 382, 3988, 468, 6843, 5339, 6196, 3710, 11316, 1254, 5435, 10930, 3998, 10256, 10367, 3879, @@ -365,7 +365,7 @@ uint16_t psis_bitrev_montgomery[NEWHOPE_N] = { * Description: Contains inverses of powers of nth root of -1 * divided by n in Montgomery domain with R=2^18 ************************************************************/ -uint16_t psis_inv_montgomery[NEWHOPE_N] = { +uint16_t psis_inv_montgomery[NEWHOPE_RINGCT20_N] = { 256, 10570, 1510, 7238, 1034, 7170, 6291, 7921, 11665, 3422, 4000, 2327, 2088, 5565, 795, 10647, 1521, 5484, 2539, 7385, 1055, 7173, 8047, 11683, 1669, 1994, 3796, 5809, 4341, 9398, 11876, 12230, 10525, 12037, 12253, 3506, 4012, 9351, 4847, 2448, 7372, 9831, 3160, 2207, 5582, 2553, 7387, 6322, @@ -432,5 +432,5 @@ uint16_t psis_inv_montgomery[NEWHOPE_N] = { 8497, 4725, 675, 1852, 10798, 12076, 10503, 3256, 9243, 3076, 2195, 10847, 12083, 10504, 12034, 10497}; #else -#error "NEWHOPE_N must be either 512 or 1024" +#error "NEWHOPE_RINGCT20_N must be either 512 or 1024" #endif diff --git a/dap-sdk/crypto/src/ringct20/reduce.c b/dap-sdk/crypto/src/ringct20/reduce.c index 410a04d48d47f4a7f9c047ff8a460e58a6127da5..d9b53414cd51a2b8818be5642baba83788a3b813 100644 --- a/dap-sdk/crypto/src/ringct20/reduce.c +++ b/dap-sdk/crypto/src/ringct20/reduce.c @@ -20,7 +20,7 @@ uint16_t montgomery_reduce_32_16(uint32_t a) { u = (a * qinv); u &= ((1 << rlog) - 1); - u *= NEWHOPE_Q; + u *= NEWHOPE_RINGCT20_Q; a = a + u; return a >> 18; } diff --git a/dap-sdk/crypto/src/ringct20/reduce.h b/dap-sdk/crypto/src/ringct20/reduce.h index 6f716e34ef9f16d97efc38ecca8d422b9b186ee9..793a6a75d7a81f0bdb342c67cfdfe233294c14f9 100644 --- a/dap-sdk/crypto/src/ringct20/reduce.h +++ b/dap-sdk/crypto/src/ringct20/reduce.h @@ -1,5 +1,5 @@ -#ifndef REDUCE_H -#define REDUCE_H +#ifndef REDUCE_RINGCT20_H +#define REDUCE_RINGCT20_H #include <stdint.h> diff --git a/dap-sdk/crypto/src/ringct20/ring.c b/dap-sdk/crypto/src/ringct20/ring.c index 211e2ee524bd28cfde83742d38a69d77b563e339..ca36f6dfdb059169ced2222e99fa6b462a33ddeb 100644 --- a/dap-sdk/crypto/src/ringct20/ring.c +++ b/dap-sdk/crypto/src/ringct20/ring.c @@ -7,13 +7,13 @@ void LRCT_SampleKey(poly_ringct20 *r, size_t mLen) { - uint8_t seed[NEWHOPE_SYMBYTES] = { 0 }; + uint8_t seed[NEWHOPE_RINGCT20_SYMBYTES] = { 0 }; size_t i; for ( i = 0; i < mLen; i++) { #ifndef NEW_SAMPLE_KEY - randombytes(seed, NEWHOPE_SYMBYTES); - for (size_t j = 0; j < NEWHOPE_SYMBYTES; j++) + randombytes(seed, NEWHOPE_RINGCT20_SYMBYTES); + for (size_t j = 0; j < NEWHOPE_RINGCT20_SYMBYTES; j++) { r[i].coeffs[j * 8 + 0] = (seed[j] & 0x01); @@ -25,24 +25,24 @@ void LRCT_SampleKey(poly_ringct20 *r, size_t mLen) r[i].coeffs[j * 8 + 6] = (seed[j] & 0x40)>>6; r[i].coeffs[j * 8 + 7] = (seed[j] & 0x80)>>7; } - randombytes(seed, NEWHOPE_SYMBYTES); - for (size_t j = 0; j < NEWHOPE_SYMBYTES; j++) + randombytes(seed, NEWHOPE_RINGCT20_SYMBYTES); + for (size_t j = 0; j < NEWHOPE_RINGCT20_SYMBYTES; j++) { - r[i].coeffs[NEWHOPE_SYMBYTES * 8 + j * 8 + 0] = (seed[j] & 0x01); - r[i].coeffs[NEWHOPE_SYMBYTES * 8 + j * 8 + 1] = (seed[j] & 0x02)>>1; - r[i].coeffs[NEWHOPE_SYMBYTES * 8 + j * 8 + 2] = (seed[j] & 0x04)>>2; - r[i].coeffs[NEWHOPE_SYMBYTES * 8 + j * 8 + 3] = (seed[j] & 0x08)>>3; - r[i].coeffs[NEWHOPE_SYMBYTES * 8 + j * 8 + 4] = (seed[j] & 0x10)>>4; - r[i].coeffs[NEWHOPE_SYMBYTES * 8 + j * 8 + 5] = (seed[j] & 0x20)>>5; - r[i].coeffs[NEWHOPE_SYMBYTES * 8 + j * 8 + 6] = (seed[j] & 0x40)>>6; - r[i].coeffs[NEWHOPE_SYMBYTES * 8 + j * 8 + 7] = (seed[j] & 0x80)>>7; + r[i].coeffs[NEWHOPE_RINGCT20_SYMBYTES * 8 + j * 8 + 0] = (seed[j] & 0x01); + r[i].coeffs[NEWHOPE_RINGCT20_SYMBYTES * 8 + j * 8 + 1] = (seed[j] & 0x02)>>1; + r[i].coeffs[NEWHOPE_RINGCT20_SYMBYTES * 8 + j * 8 + 2] = (seed[j] & 0x04)>>2; + r[i].coeffs[NEWHOPE_RINGCT20_SYMBYTES * 8 + j * 8 + 3] = (seed[j] & 0x08)>>3; + r[i].coeffs[NEWHOPE_RINGCT20_SYMBYTES * 8 + j * 8 + 4] = (seed[j] & 0x10)>>4; + r[i].coeffs[NEWHOPE_RINGCT20_SYMBYTES * 8 + j * 8 + 5] = (seed[j] & 0x20)>>5; + r[i].coeffs[NEWHOPE_RINGCT20_SYMBYTES * 8 + j * 8 + 6] = (seed[j] & 0x40)>>6; + r[i].coeffs[NEWHOPE_RINGCT20_SYMBYTES * 8 + j * 8 + 7] = (seed[j] & 0x80)>>7; } #else - uint8_t stm[NEWHOPE_N*2]; - randombytes(stm, NEWHOPE_N*2); + uint8_t stm[NEWHOPE_RINGCT20_N*2]; + randombytes(stm, NEWHOPE_RINGCT20_N*2); const int gamma = 8; - for(int j = 0; j < NEWHOPE_N; ++j) + for(int j = 0; j < NEWHOPE_RINGCT20_N; ++j) { uint16_t v = stm[2*j]; v<<= 8; @@ -50,7 +50,7 @@ void LRCT_SampleKey(poly_ringct20 *r, size_t mLen) v %= gamma; v -= gamma/2; if(v < 0) - v += NEWHOPE_Q; + v += NEWHOPE_RINGCT20_Q; r[i].coeffs[j] = v; } #endif @@ -60,15 +60,15 @@ void LRCT_SampleKey(poly_ringct20 *r, size_t mLen) void LRCT_Setup(poly_ringct20 *A, poly_ringct20 *H, size_t mLen) { - uint8_t seed[NEWHOPE_SYMBYTES] = { 0 }; + uint8_t seed[NEWHOPE_RINGCT20_SYMBYTES] = { 0 }; size_t i = 0; for ( i = 0; i < mLen; i++) { - randombytes(seed, NEWHOPE_SYMBYTES); + randombytes(seed, NEWHOPE_RINGCT20_SYMBYTES); poly_uniform_ringct20(A + i, seed); poly_serial(A + i); - randombytes(seed, NEWHOPE_SYMBYTES); + randombytes(seed, NEWHOPE_RINGCT20_SYMBYTES); poly_uniform_ringct20(H + i, seed); poly_serial(H + i); } @@ -94,8 +94,8 @@ void LRCT_SigGen(poly_ringct20 *c1, poly_ringct20 **t, poly_ringct20 *h, poly_ri Keccak_HashInstance ctx; unsigned char bHash[32] = { 0 }; - unsigned char bpoly[NEWHOPE_POLYBYTES] = { 0 }; - unsigned char bt[NEWHOPE_POLYBYTES] = { 0 }; + unsigned char bpoly[NEWHOPE_RINGCT20_POLYBYTES] = { 0 }; + unsigned char bt[NEWHOPE_RINGCT20_POLYBYTES] = { 0 }; uint8_t coin = 0; for ( i = 0; i < (mLen+1); i++) { @@ -112,37 +112,37 @@ void LRCT_SigGen(poly_ringct20 *c1, poly_ringct20 **t, poly_ringct20 *h, poly_ri ///////////2. LRCT_Lift(A2qp, A, L + pai, mLen); //SHA256_Init(&ctx); - Keccak_HashInitialize_SHA3_KDF(&ctx, NEWHOPE_POLYBYTES); + Keccak_HashInitialize_SHA3_KDF(&ctx, NEWHOPE_RINGCT20_POLYBYTES); for (i = 0; i < w; i++) { poly_tobytes(bpoly, L + i); - //SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES); - Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8); + //SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES); + Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8); } for ( i = 0; i < mLen+1; i++) { poly_tobytes(bpoly, H2q + i); - //SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES); - Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8); + //SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES); + Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8); } //SHA256_Update(&ctx, msg, msgLen);//msg Keccak_HashUpdate(&ctx, msg, msgLen*8); LRCT_MatrixMulPoly(&tmp, A2qp, u, mLen + 1); poly_tobytes(bpoly, &tmp); - //SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES);//A2qb*U - Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8); + //SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES);//A2qb*U + Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8); LRCT_MatrixMulPoly(&tmp, H2q, u, mLen + 1); poly_tobytes(bpoly, &tmp); - //SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES);//H2q*U - Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8); + //SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES);//H2q*U + Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8); //SHA256_Final(bHash, &ctx);//C_(pai+1) //Keccak_HashFinal(&ctx, bHash); Keccak_HashFinal(&ctx, bt); - //SHA256_KDF(bHash, 32, NEWHOPE_POLYBYTES, bt); - //Keccak_256KDF(bHash, 32, bt, NEWHOPE_POLYBYTES); + //SHA256_KDF(bHash, 32, NEWHOPE_RINGCT20_POLYBYTES, bt); + //Keccak_256KDF(bHash, 32, bt, NEWHOPE_RINGCT20_POLYBYTES); poly_frombytes(&c, bt); poly_serial(&c); @@ -157,21 +157,21 @@ void LRCT_SigGen(poly_ringct20 *c1, poly_ringct20 **t, poly_ringct20 *h, poly_ri } LRCT_Lift(tmp2q, A, L + j, mLen); //SHA256_Init(&ctx); - Keccak_HashInitialize_SHA3_KDF(&ctx, NEWHOPE_POLYBYTES);//Keccak_HashInitialize_SHA3_256(&ctx); + Keccak_HashInitialize_SHA3_KDF(&ctx, NEWHOPE_RINGCT20_POLYBYTES);//Keccak_HashInitialize_SHA3_256(&ctx); for (k = 0; k < w; k++) { poly_tobytes(bpoly, L + k); - //SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES); - Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8); + //SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES); + Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8); } for (k = 0; k < mLen+1; k++) { poly_tobytes(bpoly, H2q + k); - //SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES); - Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8); + //SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES); + Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8); } //SHA256_Update(&ctx, msg, msgLen);//msg @@ -180,30 +180,30 @@ void LRCT_SigGen(poly_ringct20 *c1, poly_ringct20 **t, poly_ringct20 *h, poly_ri for ( k = 0; k < mLen+1; k++) { - randombytes(bt, NEWHOPE_POLYBYTES); + randombytes(bt, NEWHOPE_RINGCT20_POLYBYTES); poly_frombytes(t[j] + k, bt); poly_serial(t[j] + k); } LRCT_MatrixMulPoly(&tmp, tmp2q, t[j], mLen + 1); - poly_constmul(&tmp1, &c, NEWHOPE_Q); + poly_constmul(&tmp1, &c, NEWHOPE_RINGCT20_Q); poly_add_ringct20(&tmp, &tmp, &tmp1);//(+ qC_i)% Q poly_tobytes(bpoly, &tmp); - //SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES);// - Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8); + //SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES);// + Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8); LRCT_MatrixMulPoly(&tmp, H2q, t[j], mLen + 1); poly_add_ringct20(&tmp, &tmp, &tmp1);//(+ qC_i)% Q poly_tobytes(bpoly, &tmp); - //SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES);//H2q*U - Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8); + //SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES);//H2q*U + Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8); //SHA256_Final(bHash, &ctx);//C_(pai+1) //Keccak_HashFinal(&ctx, bHash); Keccak_HashFinal(&ctx, bt); // printf("sign bHash======================%d:\n", j); // BytePrint(bHash, 32); - //SHA256_KDF(bHash, 32, NEWHOPE_POLYBYTES, bt); -// Keccak_256KDF(bHash, 32, bt, NEWHOPE_POLYBYTES); + //SHA256_KDF(bHash, 32, NEWHOPE_RINGCT20_POLYBYTES, bt); +// Keccak_256KDF(bHash, 32, bt, NEWHOPE_RINGCT20_POLYBYTES); poly_frombytes(&c, bt); poly_serial(&c);//C_{j+1} if (j == (w + pai-1)%w) @@ -242,7 +242,7 @@ int LRCT_SigVer(const poly_ringct20 *c1, poly_ringct20 **t, poly_ringct20 *A, po //SHA256_CTX ctx; Keccak_HashInstance ctx; unsigned char bHash[32] = { 0 }; - unsigned char bpoly[NEWHOPE_POLYBYTES] = { 0 }; + unsigned char bpoly[NEWHOPE_RINGCT20_POLYBYTES] = { 0 }; for (i = 0; i < (mLen + 1); i++) { poly_init(H2q + i); @@ -255,37 +255,37 @@ int LRCT_SigVer(const poly_ringct20 *c1, poly_ringct20 **t, poly_ringct20 *A, po { LRCT_Lift(A2qp, A, L+i, mLen); //SHA256_Init(&ctx); - Keccak_HashInitialize_SHA3_KDF(&ctx, NEWHOPE_POLYBYTES);//Keccak_HashInitialize_SHA3_256(&ctx); + Keccak_HashInitialize_SHA3_KDF(&ctx, NEWHOPE_RINGCT20_POLYBYTES);//Keccak_HashInitialize_SHA3_256(&ctx); for (k = 0; k < w; k++) { poly_tobytes(bpoly, L + k); - //SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES); - Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8); + //SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES); + Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8); } for (k = 0; k < mLen+1; k++) { poly_tobytes(bpoly, H2q + k); - //SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES); - Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8); + //SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES); + Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8); } //SHA256_Update(&ctx, msg, msgLen);//msg Keccak_HashUpdate(&ctx, msg, msgLen*8); - poly_constmul(&tmp1, &c, NEWHOPE_Q); + poly_constmul(&tmp1, &c, NEWHOPE_RINGCT20_Q); LRCT_MatrixMulPoly(&tmp, A2qp, t[i], mLen + 1); poly_add_ringct20(&tmp, &tmp, &tmp1);//(+ qC_i)% Q poly_tobytes(bpoly, &tmp); - //SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES);//A2qb*U - Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8); + //SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES);//A2qb*U + Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8); LRCT_MatrixMulPoly(&tmp, H2q, t[i], mLen + 1); poly_add_ringct20(&tmp, &tmp, &tmp1);//(+ qC_i)% Q poly_serial(&tmp); poly_tobytes(bpoly, &tmp); - //SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES);//H2q*U - Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8); + //SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES);//H2q*U + Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8); //SHA256_Final(bHash, &ctx);//C_(pai+1) //Keccak_HashFinal(&ctx, bHash); @@ -293,8 +293,8 @@ int LRCT_SigVer(const poly_ringct20 *c1, poly_ringct20 **t, poly_ringct20 *A, po // printf("sign bHash======================%d:\n", j); // BytePrint(bHash, 32); - //SHA256_KDF(bHash, 32, NEWHOPE_POLYBYTES, bpoly); - //Keccak_256KDF(bHash, 32, bpoly, NEWHOPE_POLYBYTES); + //SHA256_KDF(bHash, 32, NEWHOPE_RINGCT20_POLYBYTES, bpoly); + //Keccak_256KDF(bHash, 32, bpoly, NEWHOPE_RINGCT20_POLYBYTES); poly_frombytes(&c, bpoly); poly_serial(&c); } @@ -346,15 +346,15 @@ int LRCT_Verify(poly_ringct20 *c1, poly_ringct20 **t, poly_ringct20 *h, poly_rin /////multiple void MIMO_LRCT_Setup(poly_ringct20 *A, poly_ringct20 *H, size_t mLen) { - uint8_t seed[NEWHOPE_SYMBYTES] = { 0 }; + uint8_t seed[NEWHOPE_RINGCT20_SYMBYTES] = { 0 }; size_t i = 0; for (i = 0; i < mLen; i++) { - randombytes(seed, NEWHOPE_SYMBYTES); + randombytes(seed, NEWHOPE_RINGCT20_SYMBYTES); poly_uniform_ringct20(A + i, seed); poly_serial(A + i); - randombytes(seed, NEWHOPE_SYMBYTES); + randombytes(seed, NEWHOPE_RINGCT20_SYMBYTES); poly_uniform_ringct20(H + i, seed); poly_serial(H + i); } @@ -376,27 +376,27 @@ void MIMO_LRCT_Hash(int *pTable, poly_ringct20 *cn, poly_ringct20 *a, poly_ringc Keccak_HashInstance ctx; unsigned char bHash[32] = { 0 }; - unsigned char bpoly[NEWHOPE_POLYBYTES] = { 0 }; - unsigned char bt[NEWHOPE_POLYCOMPRESSEDBYTES] = { 0 }; + unsigned char bpoly[NEWHOPE_RINGCT20_POLYBYTES] = { 0 }; + unsigned char bt[NEWHOPE_RINGCT20_POLYCOMPRESSEDBYTES] = { 0 }; int i; - int tmpTable[NEWHOPE_N] = { 0 }; - for ( i = 0; i < NEWHOPE_N; i++) + int tmpTable[NEWHOPE_RINGCT20_N] = { 0 }; + for ( i = 0; i < NEWHOPE_RINGCT20_N; i++) { tmpTable[i] = i; } - Keccak_HashInitialize_SHA3_KDF(&ctx, NEWHOPE_POLYCOMPRESSEDBYTES);//Keccak_HashInitialize_SHA3_256(&ctx);//SHA256_Init(&ctx); + Keccak_HashInitialize_SHA3_KDF(&ctx, NEWHOPE_RINGCT20_POLYCOMPRESSEDBYTES);//Keccak_HashInitialize_SHA3_256(&ctx);//SHA256_Init(&ctx); ////H(L) for (i = 0; i < beta; i++) { poly_tobytes(bpoly, cn + i); - Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES); + Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES); poly_tobytes(bpoly, a + i); - Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES); + Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES); poly_tobytes(bpoly, ia + i); - Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES); + Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES); }///H_1(L||) //Keccak_HashFinal(&ctx, bHash);//SHA256_Final(bHash, &ctx);//C_(pai) - //Keccak_256KDF(bHash, 32, bt, NEWHOPE_POLYCOMPRESSEDBYTES);//CHECKIT//SHA256_KDF(bHash, 32, NEWHOPE_POLYCOMPRESSEDBYTES, bt); + //Keccak_256KDF(bHash, 32, bt, NEWHOPE_RINGCT20_POLYCOMPRESSEDBYTES);//CHECKIT//SHA256_KDF(bHash, 32, NEWHOPE_RINGCT20_POLYCOMPRESSEDBYTES, bt); Keccak_HashFinal(&ctx, bt); } @@ -420,8 +420,8 @@ void MIMO_LRCT_SigGen(poly_ringct20 *c1, poly_ringct20 *tList, poly_ringct20 *hL poly_ringct20 tmp, tmp1, ctmp; poly_ringct20 c, cpai; unsigned char bHash[32] = { 0 }; - unsigned char bpoly[NEWHOPE_POLYBYTES] = { 0 }; - unsigned char bt[NEWHOPE_POLYBYTES] = { 0 }; + unsigned char bpoly[NEWHOPE_RINGCT20_POLYBYTES] = { 0 }; + unsigned char bt[NEWHOPE_RINGCT20_POLYBYTES] = { 0 }; uint8_t coin = 0; int i = 0; int k = 0; @@ -440,12 +440,12 @@ void MIMO_LRCT_SigGen(poly_ringct20 *c1, poly_ringct20 *tList, poly_ringct20 *hL poly_init(u+i); } ///// - Keccak_HashInitialize_SHA3_KDF(&ctx, NEWHOPE_POLYBYTES);//Keccak_HashInitialize_SHA3_256(&ctx);//SHA256_Init(&ctx); + Keccak_HashInitialize_SHA3_KDF(&ctx, NEWHOPE_RINGCT20_POLYBYTES);//Keccak_HashInitialize_SHA3_256(&ctx);//SHA256_Init(&ctx); ////H(L) for ( i = 0; i < wLen*NLen; i++) { poly_tobytes(bpoly, LList + i); - Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES); + Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES); }///H_1(L||) ///H(L||H2q..) for (i = 0; i < NLen; i++) @@ -455,7 +455,7 @@ void MIMO_LRCT_SigGen(poly_ringct20 *c1, poly_ringct20 *tList, poly_ringct20 *hL for (k = 0; k < mLen + 1; k++) { poly_tobytes(bpoly, H2q + i * (mLen + 1) + k); - Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES); + Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES); } } ////H(L||...||mu) @@ -465,7 +465,7 @@ void MIMO_LRCT_SigGen(poly_ringct20 *c1, poly_ringct20 *tList, poly_ringct20 *hL { for (k = 0; k < mLen + 1; k++) { - randombytes(bt, NEWHOPE_POLYBYTES); + randombytes(bt, NEWHOPE_RINGCT20_POLYBYTES); poly_frombytes(u + i * (mLen + 1) + k, bt); poly_serial(u + i * (mLen + 1) + k); } @@ -478,12 +478,12 @@ void MIMO_LRCT_SigGen(poly_ringct20 *c1, poly_ringct20 *tList, poly_ringct20 *hL LRCT_MatrixMulPoly(&tmp1, H2q + i * (mLen + 1), u+ i * (mLen + 1), mLen + 1); poly_tobytes(bpoly, &tmp); - Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES); + Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES); poly_tobytes(bpoly, &tmp1); - Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES); + Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES); } //Keccak_HashFinal(&ctx, bHash);//Keccak_HashFinal(&ctx, bHash);//SHA256_Final(bHash, &ctx);//C_(pai) - //Keccak_256KDF(bHash, 32, bt, NEWHOPE_POLYBYTES);//SHA256_KDF(bHash, 32, NEWHOPE_POLYBYTES, bt); + //Keccak_256KDF(bHash, 32, bt, NEWHOPE_RINGCT20_POLYBYTES);//SHA256_KDF(bHash, 32, NEWHOPE_RINGCT20_POLYBYTES, bt); Keccak_HashFinal(&ctx, bt); poly_frombytes(&c, bt); poly_serial(&c); @@ -497,30 +497,30 @@ void MIMO_LRCT_SigGen(poly_ringct20 *c1, poly_ringct20 *tList, poly_ringct20 *hL poly_cofcopy(c1, &ctmp); } - Keccak_HashInitialize_SHA3_KDF(&ctx, NEWHOPE_POLYBYTES);//Keccak_HashInitialize_SHA3_256(&ctx);//SHA256_Init(&ctx); + Keccak_HashInitialize_SHA3_KDF(&ctx, NEWHOPE_RINGCT20_POLYBYTES);//Keccak_HashInitialize_SHA3_256(&ctx);//SHA256_Init(&ctx); ////H_1(L||) for (j = 0; j < wLen*NLen; j++) { poly_tobytes(bpoly, LList + j); - Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES); + Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES); } for (j = 0; j < NLen; j++) { for (k = 0; k < mLen + 1; k++) { poly_tobytes(bpoly, H2q + j * (mLen + 1) + k); - Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES); + Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES); } }//H_1(L||H2q) Keccak_HashUpdate(&ctx, msg, msgLen*8);//SHA256_Update(&ctx, msg, msgLen);//H(L||...||mu) - poly_constmul(&tmp1, &ctmp, NEWHOPE_Q);//qC_i + poly_constmul(&tmp1, &ctmp, NEWHOPE_RINGCT20_Q);//qC_i for (j = 0; j < NLen; j++) { LRCT_Lift(tmp2q, A, LList + j * wLen + index, mLen); for (k = 0; k < mLen + 1; k++) { - randombytes(bt, NEWHOPE_POLYBYTES); + randombytes(bt, NEWHOPE_RINGCT20_POLYBYTES); poly_frombytes(tList + j * wLen*(mLen + 1) + index * (mLen + 1) + k, bt); poly_serial(tList + j * wLen*(mLen + 1) + index * (mLen+1)+ k); } @@ -528,15 +528,15 @@ void MIMO_LRCT_SigGen(poly_ringct20 *c1, poly_ringct20 *tList, poly_ringct20 *hL poly_add_ringct20(&tmp, &tmp, &tmp1);//(+ qC_i)% Q poly_tobytes(bpoly, &tmp); - Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES);// + Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES);// //////// LRCT_MatrixMulPoly(&tmp, H2q + j * (mLen + 1), tList + j * wLen*(mLen + 1) + index * (mLen + 1), mLen + 1); poly_add_ringct20(&tmp, &tmp, &tmp1);//(+ qC_i)% Q poly_tobytes(bpoly, &tmp); - Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES);//H2q*U + Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES);//H2q*U } //Keccak_HashFinal(&ctx, bHash);//SHA256_Final(bHash, &ctx);// - //Keccak_256KDF(bHash, 32, bt, NEWHOPE_POLYBYTES);//SHA256_KDF(bHash, 32, NEWHOPE_POLYBYTES, bt); + //Keccak_256KDF(bHash, 32, bt, NEWHOPE_RINGCT20_POLYBYTES);//SHA256_KDF(bHash, 32, NEWHOPE_RINGCT20_POLYBYTES, bt); Keccak_HashFinal(&ctx, bt); poly_frombytes(&ctmp, bt); poly_serial(&ctmp);//C_{index+1} @@ -582,7 +582,7 @@ int MIMO_LRCT_SigVer(poly_ringct20 *c1, poly_ringct20 *tList, poly_ringct20 *hLi Keccak_HashInstance ctx; unsigned char bHash[32] = { 0 }; - unsigned char bpoly[NEWHOPE_POLYBYTES] = { 0 }; + unsigned char bpoly[NEWHOPE_RINGCT20_POLYBYTES] = { 0 }; ///////// poly_cofcopy(&ctmp, c1); for (i = 0; i < NLen; i++) @@ -592,38 +592,38 @@ int MIMO_LRCT_SigVer(poly_ringct20 *c1, poly_ringct20 *tList, poly_ringct20 *hLi ////// for (i = 0; i < wLen; i++) { - Keccak_HashInitialize_SHA3_KDF(&ctx, NEWHOPE_POLYBYTES);//Keccak_HashInitialize_SHA3_256(&ctx);//SHA256_Init(&ctx); + Keccak_HashInitialize_SHA3_KDF(&ctx, NEWHOPE_RINGCT20_POLYBYTES);//Keccak_HashInitialize_SHA3_256(&ctx);//SHA256_Init(&ctx); for (k = 0; k < wLen*NLen; k++) { poly_tobytes(bpoly, LList + k); - Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES); + Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES); }///H_1(L||) for (j = 0; j< NLen; j++) { for (k = 0; k < (mLen + 1); k++) { poly_tobytes(bpoly, H2q + j * (mLen + 1) + k); - Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES); + Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES); } } Keccak_HashUpdate(&ctx, msg, msgLen*8);//Keccak_HashUpdate(&ctx, msg, msgLen*8);//SHA256_Update(&ctx, msg, msgLen);//H(L||...||mu) - poly_constmul(&tmp1, &ctmp, NEWHOPE_Q);//qC_i + poly_constmul(&tmp1, &ctmp, NEWHOPE_RINGCT20_Q);//qC_i for ( j = 0; j < NLen; j++) { LRCT_Lift(A2qp, A, LList + j * wLen + i , mLen); LRCT_MatrixMulPoly(&tmp, A2qp, tList + j * wLen*(mLen + 1) + i * (mLen + 1), mLen + 1); poly_add_ringct20(&tmp, &tmp, &tmp1);//(+ qC_i)% Q poly_tobytes(bpoly, &tmp); - Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES); + Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES); LRCT_MatrixMulPoly(&tmp, H2q + j * (mLen + 1), tList + j * wLen*(mLen + 1) + i* (mLen + 1), mLen + 1); poly_add_ringct20(&tmp, &tmp, &tmp1);//(+ qC_i)% Q poly_tobytes(bpoly, &tmp); - Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES);//H2q*U + Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES);//H2q*U } //Keccak_HashFinal(&ctx, bHash);//SHA256_Final(bHash, &ctx);// - //Keccak_256KDF(bHash, 32, bpoly, NEWHOPE_POLYBYTES);//SHA256_KDF(bHash, 32, NEWHOPE_POLYBYTES, bpoly); + //Keccak_256KDF(bHash, 32, bpoly, NEWHOPE_RINGCT20_POLYBYTES);//SHA256_KDF(bHash, 32, NEWHOPE_RINGCT20_POLYBYTES, bpoly); Keccak_HashFinal(&ctx, bpoly); poly_frombytes(&ctmp, bpoly); poly_serial(&ctmp);// @@ -646,14 +646,14 @@ void LRCT_Lift(poly_ringct20 *LA, poly_ringct20 *A, poly_ringct20 *a, size_t mLe int16_t tmp = 0; for ( i = 0; i < mLen; i++) { - for ( j = 0; j < NEWHOPE_N; j++) + for ( j = 0; j < NEWHOPE_RINGCT20_N; j++) { LA[i].coeffs[j] = 2 * A[i].coeffs[j]; } } - for ( j = 0; j < NEWHOPE_N; j++) + for ( j = 0; j < NEWHOPE_RINGCT20_N; j++) { - LA[mLen].coeffs[j] = coeff_freeze2Q(NEWHOPE_2Q+ NEWHOPE_Q - a->coeffs[j] * 2); + LA[mLen].coeffs[j] = coeff_freeze2Q(NEWHOPE_RINGCT20_2Q+ NEWHOPE_RINGCT20_Q - a->coeffs[j] * 2); } } @@ -667,14 +667,14 @@ void LRCT_Com(poly_ringct20 *r, poly_ringct20 *A, poly_ringct20 *sk, size_t mLen for (j = 0; j < msglen; j++) { - r->coeffs[j * 8 + 0] = (tmp.coeffs[j * 8 + 0] + (bMessage[j]&0x01))%NEWHOPE_Q; - r->coeffs[j * 8 + 1] = (tmp.coeffs[j * 8 + 1] + ((bMessage[j] & 0x02) >> 1)) % NEWHOPE_Q; - r->coeffs[j * 8 + 2] = (tmp.coeffs[j * 8 + 2] + ((bMessage[j] & 0x04) >> 2)) % NEWHOPE_Q; - r->coeffs[j * 8 + 3] = (tmp.coeffs[j * 8 + 3] + ((bMessage[j] & 0x08) >> 3)) % NEWHOPE_Q; - r->coeffs[j * 8 + 4] = (tmp.coeffs[j * 8 + 4] + ((bMessage[j] & 0x10) >> 4)) % NEWHOPE_Q; - r->coeffs[j * 8 + 5] = (tmp.coeffs[j * 8 + 5] + ((bMessage[j] & 0x20) >> 5)) % NEWHOPE_Q; - r->coeffs[j * 8 + 6] = (tmp.coeffs[j * 8 + 6] + ((bMessage[j] & 0x40) >> 6)) % NEWHOPE_Q; - r->coeffs[j * 8 + 7] = (tmp.coeffs[j * 8 + 7] + ((bMessage[j] & 0x80) >> 7)) % NEWHOPE_Q; + r->coeffs[j * 8 + 0] = (tmp.coeffs[j * 8 + 0] + (bMessage[j]&0x01))%NEWHOPE_RINGCT20_Q; + r->coeffs[j * 8 + 1] = (tmp.coeffs[j * 8 + 1] + ((bMessage[j] & 0x02) >> 1)) % NEWHOPE_RINGCT20_Q; + r->coeffs[j * 8 + 2] = (tmp.coeffs[j * 8 + 2] + ((bMessage[j] & 0x04) >> 2)) % NEWHOPE_RINGCT20_Q; + r->coeffs[j * 8 + 3] = (tmp.coeffs[j * 8 + 3] + ((bMessage[j] & 0x08) >> 3)) % NEWHOPE_RINGCT20_Q; + r->coeffs[j * 8 + 4] = (tmp.coeffs[j * 8 + 4] + ((bMessage[j] & 0x10) >> 4)) % NEWHOPE_RINGCT20_Q; + r->coeffs[j * 8 + 5] = (tmp.coeffs[j * 8 + 5] + ((bMessage[j] & 0x20) >> 5)) % NEWHOPE_RINGCT20_Q; + r->coeffs[j * 8 + 6] = (tmp.coeffs[j * 8 + 6] + ((bMessage[j] & 0x40) >> 6)) % NEWHOPE_RINGCT20_Q; + r->coeffs[j * 8 + 7] = (tmp.coeffs[j * 8 + 7] + ((bMessage[j] & 0x80) >> 7)) % NEWHOPE_RINGCT20_Q; } } @@ -688,14 +688,14 @@ void LRCT_nttCom(poly_ringct20 *r, poly_ringct20 *A, poly_ringct20 *sk, size_t m for (j = 0; j < msglen; j++) { - pMess.coeffs[j * 8 + 0] = (bMessage[j] & 0x01) % NEWHOPE_Q; - pMess.coeffs[j * 8 + 1] = (((bMessage[j] & 0x02) >> 1)) % NEWHOPE_Q; - pMess.coeffs[j * 8 + 2] = (((bMessage[j] & 0x04) >> 2)) % NEWHOPE_Q; - pMess.coeffs[j * 8 + 3] = ( ((bMessage[j] & 0x08) >> 3)) % NEWHOPE_Q; - pMess.coeffs[j * 8 + 4] = ( ((bMessage[j] & 0x10) >> 4)) % NEWHOPE_Q; - pMess.coeffs[j * 8 + 5] = ( ((bMessage[j] & 0x20) >> 5)) % NEWHOPE_Q; - pMess.coeffs[j * 8 + 6] = (((bMessage[j] & 0x40) >> 6)) % NEWHOPE_Q; - pMess.coeffs[j * 8 + 7] = ( ((bMessage[j] & 0x80) >> 7)) % NEWHOPE_Q; + pMess.coeffs[j * 8 + 0] = (bMessage[j] & 0x01) % NEWHOPE_RINGCT20_Q; + pMess.coeffs[j * 8 + 1] = (((bMessage[j] & 0x02) >> 1)) % NEWHOPE_RINGCT20_Q; + pMess.coeffs[j * 8 + 2] = (((bMessage[j] & 0x04) >> 2)) % NEWHOPE_RINGCT20_Q; + pMess.coeffs[j * 8 + 3] = ( ((bMessage[j] & 0x08) >> 3)) % NEWHOPE_RINGCT20_Q; + pMess.coeffs[j * 8 + 4] = ( ((bMessage[j] & 0x10) >> 4)) % NEWHOPE_RINGCT20_Q; + pMess.coeffs[j * 8 + 5] = ( ((bMessage[j] & 0x20) >> 5)) % NEWHOPE_RINGCT20_Q; + pMess.coeffs[j * 8 + 6] = (((bMessage[j] & 0x40) >> 6)) % NEWHOPE_RINGCT20_Q; + pMess.coeffs[j * 8 + 7] = ( ((bMessage[j] & 0x80) >> 7)) % NEWHOPE_RINGCT20_Q; } poly_ntt_ringct20(&pMess); poly_add_ringct20(r, &tmp, &pMess); @@ -752,7 +752,7 @@ void LRCT_ConstMulMatrix(poly_ringct20 *r, const poly_ringct20 *A, uint16_t cof, size_t i, j; for (i = 0; i < mLen; i++) { - for ( j = 0; j < NEWHOPE_N; j++) + for ( j = 0; j < NEWHOPE_RINGCT20_N; j++) { r[i].coeffs[j] = cof * A[i].coeffs[j]; } diff --git a/dap-sdk/crypto/src/ringct20/ring.h b/dap-sdk/crypto/src/ringct20/ring.h index 665110d5fa70dc3b3bb930a4271eccf0c07f6f74..63c94d7dce4b112ad4bfcb4eaa2dbf87ac7429ef 100644 --- a/dap-sdk/crypto/src/ringct20/ring.h +++ b/dap-sdk/crypto/src/ringct20/ring.h @@ -1,5 +1,5 @@ -#ifndef RING_H -#define RING_H +#ifndef RING_RINGCT20_H +#define RING_RINGCT20_H #include "params.h" diff --git a/dap-sdk/crypto/src/ringct20/ringct20_params.c b/dap-sdk/crypto/src/ringct20/ringct20_params.c index 3a4021c617fe0631dc3a00948b3e7ebe897ac03d..a0642d9046d1c21b3f76c2f9be1324e9d44642b6 100644 --- a/dap-sdk/crypto/src/ringct20/ringct20_params.c +++ b/dap-sdk/crypto/src/ringct20/ringct20_params.c @@ -1,22 +1,22 @@ #include "ringct20_params.h" -#if (NEWHOPE_N == 512) -uint8_t A_bpoly_MINSEC[5*NEWHOPE_POLYBYTES] = { +#if (NEWHOPE_RINGCT20_N == 512) +uint8_t A_bpoly_MINSEC[5*NEWHOPE_RINGCT20_POLYBYTES] = { 0x8c, 0x0b, 0x5e, 0x30, 0xfa, 0xca, 0x34, 0x37, 0xad, 0xd5, 0x42, 0x32, 0xc8, 0x53, 0x9d, 0x15, 0x35, 0xa6, 0x4b, 0xe8, 0x51, 0x40, 0x85, 0x18, 0xd7, 0x7e, 0xb0, 0x7a, 0x34, 0x44, 0xc7, 0xb8, 0x28, 0xe2, 0x8e, 0xbc, 0x2f, 0xe8, 0xba, 0x4d, 0x7d, 0xb1, 0x8e, 0xa0, 0x59, 0x71, 0x77, 0xa4, 0x74, 0x76, 0x1e, 0x4a, 0x84, 0xcc, 0x5d, 0x58, 0x38, 0x17, 0x5a, 0x17, 0xf1, 0xc4, 0xb6, 0x98, 0xc3, 0x2d, 0xf2, 0x08, 0xf9, 0x5c, 0x2d, 0x61, 0xf4, 0xf3, 0x94, 0xf2, 0x3c, 0x94, 0x2e, 0x6b, 0x8a, 0x1e, 0xca, 0x17, 0xc8, 0x54, 0xec, 0xf8, 0x57, 0x7d, 0x38, 0xda, 0x5a, 0x5b, 0x44, 0xb3, 0xb9, 0x0c, 0xe6, 0xc4, 0xdd, 0x32, 0x61, 0x0d, 0x7a, 0x3d, 0x54, 0xa2, 0x94, 0x2b, 0xf9, 0xaf, 0xd3, 0x97, 0xc1, 0xd7, 0x09, 0xa1, 0x8c, 0xa6, 0x46, 0x38, 0x9a, 0x17, 0x05, 0x95, 0x8d, 0x0e, 0x70, 0x7a, 0xef, 0x9e, 0x05, 0xb1, 0xdd, 0x2c, 0x25, 0xcc, 0x94, 0x9b, 0x1b, 0x90, 0x44, 0x56, 0x6a, 0xa4, 0xb0, 0xe1, 0xc7, 0x43, 0x20, 0xcc, 0xa5, 0x72, 0x21, 0xac, 0xee, 0x01, 0x53, 0x76, 0x50, 0xb6, 0x20, 0x35, 0x81, 0x0a, 0xa2, 0x18, 0x95, 0x2d, 0xe2, 0xb2, 0x55, 0xaa, 0x43, 0xa7, 0xd7, 0x24, 0x62, 0x89, 0xe9, 0x37, 0x99, 0xd7, 0x8c, 0x16, 0x25, 0xd5, 0x4f, 0x1e, 0x1b, 0xf6, 0xca, 0x99, 0x1a, 0x9f, 0x62, 0xd6, 0x96, 0xeb, 0x0c, 0x35, 0x86, 0xa0, 0x1b, 0x2c, 0x4b, 0xb7, 0x16, 0x25, 0xe5, 0xcb, 0x3c, 0xf5, 0xa2, 0x19, 0x0f, 0x90, 0x97, 0x72, 0xd6, 0xc8, 0x4a, 0x45, 0x76, 0x2c, 0x27, 0xd5, 0x52, 0xc9, 0x55, 0x38, 0xd2, 0x43, 0x82, 0x76, 0xf9, 0x68, 0x98, 0xc3, 0xb4, 0xc6, 0x74, 0xa5, 0x91, 0xd9, 0xc6, 0x4b, 0xb6, 0x60, 0x6d, 0x03, 0x8e, 0x53, 0x95, 0xb9, 0x5d, 0x58, 0x53, 0x98, 0x88, 0x03, 0xab, 0x0e, 0x04, 0x35, 0x03, 0x97, 0xa4, 0x63, 0x0c, 0xa2, 0x51, 0xb5, 0x14, 0x31, 0x7a, 0x0b, 0xc0, 0x0b, 0x4f, 0x03, 0x14, 0x36, 0x06, 0xfc, 0x33, 0xbc, 0xa9, 0x0d, 0x45, 0xec, 0x6a, 0x31, 0x34, 0x6e, 0x05, 0x0a, 0x3e, 0xb2, 0xb2, 0x54, 0xc4, 0x1e, 0x4a, 0x27, 0x2d, 0x06, 0x2e, 0xd6, 0x25, 0x37, 0x81, 0x76, 0x88, 0x90, 0x2e, 0xa4, 0x0b, 0x69, 0xf9, 0x64, 0x34, 0xde, 0x80, 0xf0, 0x5c, 0x41, 0x38, 0xa7, 0x6e, 0x72, 0xd3, 0xa3, 0x6a, 0xb8, 0x47, 0x9d, 0x27, 0x27, 0x9c, 0xc5, 0x9f, 0x9e, 0xd0, 0x54, 0x2b, 0xcd, 0xa5, 0x67, 0x37, 0x48, 0x20, 0x64, 0x4b, 0xe0, 0x49, 0x28, 0x49, 0xce, 0x48, 0x9a, 0x5d, 0x60, 0x33, 0xd3, 0x85, 0x41, 0x26, 0xdd, 0xb2, 0xae, 0x5a, 0x73, 0x58, 0x6a, 0x26, 0xb1, 0xf7, 0xa2, 0x75, 0xd8, 0xa7, 0x85, 0x00, 0xee, 0x85, 0x95, 0xa6, 0x7c, 0x62, 0x7a, 0x89, 0x29, 0x22, 0xba, 0xe1, 0xb9, 0x2f, 0x76, 0x08, 0x80, 0xe5, 0x45, 0x4c, 0x31, 0xbc, 0xa5, 0x5f, 0x80, 0x84, 0xc8, 0x26, 0xd5, 0xae, 0xd7, 0x94, 0x12, 0xca, 0xac, 0x04, 0x20, 0xec, 0x90, 0x26, 0xb4, 0xa4, 0x5d, 0x4c, 0x9e, 0xd7, 0xac, 0xfe, 0x78, 0x43, 0xe0, 0x76, 0xdb, 0x25, 0x5c, 0xba, 0x62, 0x9b, 0x8c, 0x31, 0x4f, 0x0a, 0x3e, 0x2b, 0x83, 0xc0, 0x39, 0x7c, 0xe4, 0x82, 0x80, 0x0c, 0x10, 0x39, 0xbb, 0xed, 0x62, 0xc8, 0x1f, 0xf8, 0x8b, 0x9c, 0x65, 0x20, 0xaa, 0xae, 0x1c, 0xf8, 0x0b, 0xc5, 0x9b, 0x38, 0xc5, 0x8d, 0xdb, 0xe7, 0x8e, 0xbd, 0xd1, 0x06, 0xbd, 0xb1, 0x20, 0xb4, 0x90, 0xff, 0x57, 0x39, 0x12, 0x82, 0xf2, 0x40, 0xd3, 0x50, 0x40, 0x2a, 0xe8, 0x74, 0x91, 0xcf, 0x64, 0x95, 0x04, 0x2c, 0x5e, 0x6a, 0x99, 0x65, 0xa9, 0xb6, 0x39, 0x70, 0xaf, 0xd4, 0x21, 0xc8, 0xe5, 0x1f, 0xe2, 0x3b, 0x37, 0xde, 0xb3, 0x21, 0xf2, 0x71, 0xa6, 0x31, 0x66, 0x21, 0x26, 0x5e, 0xf4, 0xba, 0xe0, 0xe2, 0x41, 0x12, 0xb7, 0x5e, 0x6b, 0xe6, 0x27, 0x29, 0x7a, 0x48, 0x6e, 0x7b, 0xf1, 0xd8, 0xf3, 0x98, 0xec, 0x66, 0x0f, 0x54, 0x4a, 0x8a, 0x30, 0xb1, 0x5c, 0xb0, 0x03, 0x82, 0xab, 0xa8, 0xe8, 0xec, 0x61, 0xc8, 0x5b, 0xd3, 0x33, 0xa7, 0x8c, 0x38, 0x40, 0x0b, 0xe2, 0x09, 0x37, 0xe2, 0xa9, 0xb8, 0x04, 0xdf, 0xf6, 0x3d, 0x96, 0x47, 0xbc, 0x93, 0x28, 0xd8, 0x62, 0xec, 0x89, 0x42, 0xce, 0x15, 0xf0, 0x81, 0x99, 0x01, 0x8e, 0x5d, 0x98, 0x67, 0xeb, 0x28, 0x3c, 0xdf, 0xef, 0x82, 0x08, 0x87, 0x7d, 0x3e, 0xe9, 0x85, 0x03, 0x57, 0xe4, 0x0c, 0x5f, 0x82, 0x6c, 0xfe, 0x99, 0xa4, 0x40, 0x76, 0x3d, 0x17, 0x79, 0x5a, 0xed, 0x19, 0x98, 0x53, 0x58, 0x5f, 0x63, 0xfa, 0x5c, 0x67, 0x75, 0x9e, 0x4f, 0xd9, 0x64, 0x6c, 0x61, 0x59, 0x87, 0x27, 0xa3, 0x5d, 0x9c, 0xbd, 0xad, 0x9b, 0xd0, 0x45, 0x40, 0xa2, 0x5d, 0xb4, 0xdc, 0x7b, 0x91, 0x2b, 0x1e, 0x91, 0x4a, 0xc6, 0xf7, 0x68, 0xbf, 0x55, 0x23, 0xe6, 0xad, 0x19, 0x07, 0xc5, 0x20, 0x73, 0xb1, 0x85, 0xb6, 0x02, 0x87, 0x95, 0xbd, 0xfe, 0xaf, 0x66, 0x57, 0x05, 0x69, 0x9b, 0xa5, 0xe0, 0x40, 0x39, 0xe0, 0x26, 0x33, 0xb0, 0xaf, 0x86, 0xb2, 0x79, 0x72, 0xbe, 0x82, 0x6b, 0x59, 0xda, 0x6f, 0xa6, 0xa3, 0x52, 0xe2, 0x05, 0x89, 0xea, 0x1c, 0x28, 0x9a, 0x6a, 0x71, 0x82, 0xdd, 0x94, 0x62, 0xcd, 0x50, 0x2c, 0x0a, 0xd4, 0xa8, 0x2c, 0x36, 0xcc, 0x3f, 0x53, 0xa3, 0xb9, 0x26, 0xd7, 0x02, 0x90, 0xf2, 0xdb, 0xc9, 0x28, 0x1c, 0xab, 0xc0, 0x10, 0x98, 0x36, 0x0f, 0xa3, 0xa3, 0x5d, 0xd4, 0x4f, 0x09, 0x8a, 0x81, 0xa6, 0xba, 0xe4, 0x17, 0x60, 0x34, 0xc9, 0x6d, 0xbf, 0xcb, 0x61, 0x9a, 0x1a, 0xf0, 0x10, 0xac, 0xc2, 0xe1, 0x3a, 0x1e, 0x8b, 0x2e, 0xd1, 0x5b, 0x5a, 0xd2, 0x76, 0xe4, 0x29, 0xe6, 0xa4, 0x42, 0x94, 0x85, 0x9b, 0x5f, 0x99, 0xb4, 0x0b, 0x66, 0xb7, 0x11, 0xdc, 0x47, 0xd7, 0x7b, 0x9e, 0x61, 0x96, 0x09, 0x42, 0x8b, 0x89, 0xee, 0x33, 0x40, 0xdc, 0xcf, 0x3b, 0xda, 0xc5, 0x41, 0x35, 0x00, 0xb3, 0xeb, 0x93, 0x88, 0x7f, 0xac, 0xea, 0x2d, 0xcb, 0xfa, 0xf4, 0x3e, 0xc1, 0x6b, 0xc3, 0x60, 0xa3, 0xc5, 0x73, 0x02, 0xa6, 0x1b, 0x37, 0xcd, 0x55, 0x18, 0xb2, 0xc3, 0xa7, 0x8b, 0x1d, 0x61, 0x81, 0x3c, 0x23, 0x3e, 0xf3, 0x1c, 0x86, 0x17, 0xb9, 0x80, 0xaf, 0xb2, 0xfa, 0x30, 0x68, 0x13, 0x23, 0x98, 0x38, 0x06, 0x5e, 0xa0, 0x1c, 0xcd, 0xbf, 0x53, 0x40, 0xe8, 0x51, 0xd2, 0xad, 0xde, 0xa3, 0xbb, 0xde, 0x5c, 0xeb, 0x54, 0x01, 0x2b, 0x4f, 0x55, 0x6c, 0xb5, 0x40, 0xc4, 0x56, 0xc1, 0x6e, 0x12, 0x74, 0xd8, 0x55, 0x96, 0x87, 0x95, 0xa0, 0x23, 0xd6, 0x3c, 0x74, 0xc1, 0xf8, 0xa7, 0x82, 0xaf, 0x88, 0xd3, 0x75, 0xf6, 0x08, 0xd8, 0x9e, 0xf1, 0x83, 0xb6, 0x20, 0xb9, 0x3d, 0xd0, 0xb1, 0x66, 0x85, 0x3a, 0xbc, 0xf0, 0x2a, 0x70, 0x17, 0x10, 0x48, 0x25, 0x23, 0x42, 0xe2, 0x47, 0xeb, 0x18, 0x4e, 0xaa, 0x90, 0x12, 0x66, 0xa8, 0xf0, 0x8b, 0xc9, 0x00, 0xc6, 0x58, 0x4d, 0xf1, 0xa1, 0x59, 0x17, 0xc8, 0x88, 0x07, 0xa0, 0x74, 0x9a, 0x27, 0x81, 0xf6, 0x7d, 0x71, 0xbb, 0x26, 0x5a, 0x77, 0xa6, 0x85, 0x11, 0x64, 0x10, 0x17, 0x3e, 0xd2, 0x31, 0x04, 0x4e, 0x2a, 0x81, 0x9c, 0x07, 0xac, 0x0c, 0x5d, 0xf8, 0xa7, 0xba, 0x17, 0xd3, 0xb2, 0xb4, 0xcd, 0x82, 0x33, 0x96, 0xfd, 0x52, 0x7e, 0x33, 0xee, 0x54, 0x0a, 0xbc, 0x3d, 0x3a, 0x17, 0x61, 0x19, 0x3b, 0xca, 0xb6, 0x81, 0xef, 0x26, 0xda, 0x7b, 0x43, 0xd2, 0x56, 0x56, 0xdd, 0x54, 0xf3, 0x06, 0x58, 0x3f, 0x8f, 0x1a, 0x1c, 0xb3, 0x11, 0x20, 0xbe, 0x2a, 0x26, 0xa5, 0xf9, 0xaf, 0x29, 0x7b, 0x84, 0x8c, 0x39, 0x80, 0xfe, 0x86, 0x90, 0x79, 0x4c, 0xea, 0xb6, 0x04, 0xba, 0xb8, 0x9a, 0x6e, 0x5a, 0x45, 0xda, 0xfc, 0x38, 0xc3, 0xd1, 0xe2, 0x87, 0x14, 0xe4, 0x41, 0xd2, 0x9b, 0x5f, 0x48, 0x7d, 0x80, 0x9f, 0x18, 0x93, 0xf6, 0xa7, 0x4b, 0x20, 0x34, 0xd8, 0x1d, 0x75, 0xca, 0xba, 0x35, 0x7f, 0x1a, 0xa6, 0x8d, 0x1b, 0xd7, 0x50, 0x76, 0x09, 0x2b, 0x14, 0x45, 0x79, 0x04, 0x70, 0x0b, 0xdb, 0x06, 0xf8, 0x50, 0xe5, 0x63, 0x7c, 0x2d, 0x09, 0x37, 0x91, 0xb5, 0x31, 0xc3, 0x50, 0xf3, 0xd8, 0x43, 0x2e, 0x31, 0x18, 0x9a, 0xa7, 0x52, 0xb2, 0xfa, 0x43, 0x77, 0x4d, 0x70, 0x08, 0xc3, 0x49, 0x59, 0x13, 0x55, 0x41, 0xd4, 0x47, 0x12, 0x5c, 0x6c, 0xae, 0xa6, 0x66, 0x79, 0xd0, 0xb3, 0xdc, 0x85, 0x65, 0x14, 0x17, 0xe4, 0x79, 0x77, 0xa2, 0x3f, 0x27, 0x16, 0x05, 0x15, 0x75, 0xe8, 0x6c, 0xb1, 0x31, 0x30, 0x4c, 0xcb, 0x52, 0xda, 0x56, 0x7a, 0xd6, 0x2c, 0x9c, 0xec, 0x3c, 0x52, 0x52, 0x79, 0x66, 0x10, 0xe6, 0xe7, 0xe7, 0xf2, 0x88, 0x9e, 0x82, 0x0d, 0x38, 0xb7, 0x50, 0x54, 0xba, 0xed, 0x85, 0xd9, 0x54, 0xb7, 0x72, 0x2a, 0x9d, 0x9e, 0x11, 0x62, 0x6a, 0x55, 0x5c, 0xd1, 0xef, 0x49, 0xfb, 0x73, 0xf2, 0x81, 0x2b, 0x4c, 0x49, 0x82, 0xfa, 0x99, 0xa4, 0x6c, 0x86, 0xec, 0x23, 0x65, 0x2a, 0x8e, 0xbe, 0x4e, 0x7c, 0x0b, 0x47, 0xe9, 0x17, 0xe0, 0xce, 0x25, 0x4a, 0xf4, 0xc1, 0x2c, 0xbe, 0x6f, 0x0c, 0x80, 0x46, 0xc2, 0x0c, 0xdc, 0x8c, 0x11, 0xeb, 0x7e, 0x1d, 0x09, 0xe0, 0xa6, 0x3d, 0xd3, 0x9c, 0x1c, 0x8b, 0x65, 0xc0, 0x37, 0xc4, 0x66, 0x88, 0x8d, 0xb7, 0xd7, 0x90, 0x64, 0x2b, 0xa9, 0x87, 0x20, 0xdb, 0x7c, 0xaa, 0x04, 0xae, 0x83, 0x1e, 0xed, 0x11, 0xf1, 0xec, 0x25, 0x73, 0x1b, 0x01, 0x1f, 0xc2, 0x25, 0xe4, 0xb8, 0xf5, 0x62, 0x1f, 0x64, 0xc4, 0x40, 0x02, 0xb2, 0x27, 0x69, 0x84, 0xd3, 0x8d, 0x64, 0x63, 0xd4, 0x08, 0x57, 0xf5, 0xe0, 0x82, 0xde, 0xd5, 0x57, 0x02, 0x06, 0x61, 0x24, 0x2c, 0x89, 0xf3, 0x92, 0xa4, 0x10, 0x0e, 0xf5, 0xe9, 0xb9, 0x44, 0xb1, 0x64, 0xbf, 0x27, 0x62, 0x51, 0x81, 0x98, 0x36, 0x9a, 0x88, 0x13, 0xc8, 0x99, 0xcd, 0x49, 0x34, 0x53, 0x40, 0xa2, 0xe1, 0xe4, 0x95, 0x89, 0x11, 0xd7, 0x47, 0xa3, 0x5f, 0xbe, 0x46, 0xa1, 0x48, 0xa0, 0x21, 0x51, 0x1a, 0x6a, 0xa1, 0x17, 0x47, 0x77, 0xa7, 0x6e, 0xa4, 0xea, 0xc2, 0x19, 0xe7, 0x92, 0xb6, 0x3c, 0xe4, 0x90, 0xc1, 0x44, 0x58, 0x0d, 0x7a, 0x66, 0x94, 0x82, 0x77, 0x9c, 0xa1, 0x27, 0x63, 0x2c, 0x42, 0xc4, 0x9a, 0x9c, 0x6c, 0xe4, 0x00, 0xba, 0xba, 0xd6, 0xe8, 0x6a, 0xf6, 0x48, 0x2e, 0x8b, 0x60, 0xd5, 0x59, 0xeb, 0xe1, 0x37, 0x87, 0x12, 0xc1, 0xb8, 0x33, 0x91, 0x40, 0x8b, 0xd8, 0x9e, 0xb2, 0xb1, 0xd0, 0xc8, 0x51, 0x5c, 0xa6, 0x65, 0x80, 0x8e, 0xf7, 0x01, 0x1d, 0x7d, 0x92, 0xdb, 0x2f, 0x3e, 0xf9, 0x33, 0xe6, 0x82, 0xbc, 0x8a, 0x19, 0x97, 0xb1, 0x51, 0x56, 0xd1, 0xed, 0x7e, 0x96, 0x05, 0x5a, 0x5b, 0x16, 0x0b, 0xd3, 0x95, 0xe4, 0xee, 0x44, 0x8c, 0x44, 0x50, 0xb9, 0xa7, 0x5d, 0x00, 0xa2, 0xc0, 0x42, 0xb9, 0x51, 0x6a, 0x41, 0x33, 0x2b, 0x5f, 0x29, 0x1e, 0x41, 0x07, 0x6b, 0x5f, 0x61, 0xc2, 0x72, 0xb8, 0x6d, 0x25, 0x69, 0xfd, 0x21, 0x34, 0x92, 0x08, 0x35, 0x83, 0x1b, 0xa7, 0x68, 0x48, 0x45, 0x79, 0x5f, 0xa2, 0xe8, 0xef, 0x74, 0x1b, 0x79, 0x1a, 0xd3, 0x14, 0xe3, 0x78, 0x05, 0x43, 0x6f, 0x33, 0x25, 0x4e, 0x41, 0xbb, 0x84, 0xac, 0xcc, 0xf5, 0x2a, 0xb1, 0x6a, 0x56, 0x1f, 0x03, 0xa7, 0x18, 0x79, 0xb0, 0xcd, 0xc3, 0x3c, 0x6b, 0x93, 0x02, 0x8e, 0x58, 0xdd, 0xe1, 0x88, 0x2e, 0x8d, 0x3f, 0x9f, 0xd2, 0xa4, 0x55, 0xfb, 0x06, 0x18, 0x3b, 0x65, 0x78, 0xf2, 0x3c, 0x09, 0xa6, 0xb1, 0xe1, 0x2f, 0x84, 0xab, 0x71, 0x99, 0x87, 0xe5, 0x9f, 0xeb, 0x73, 0xde, 0x96, 0xe3, 0xd5, 0x54, 0xea, 0x67, 0xe0, 0x06, 0x21, 0x8d, 0x88, 0xdb, 0x80, 0xa5, 0x7a, 0x97, 0x06, 0x24, 0x10, 0x22, 0x29, 0x73, 0x89, 0x26, 0x12, 0x6a, 0x65, 0x14, 0xbe, 0xbd, 0x69, 0x35, 0x41, 0xd6, 0x16, 0x00, 0x4b, 0xdb, 0x52, 0x11, 0xda, 0x8c, 0x2f, 0x8e, 0x87, 0xde, 0x40, 0xfe, 0xd6, 0x63, 0x18, 0xec, 0x1c, 0xfa, 0x8a, 0x06, 0xbf, 0x48, 0x23, 0x23, 0x24, 0x2f, 0xb8, 0x71, 0xea, 0xaa, 0x72, 0x68, 0x90, 0xba, 0xac, 0x16, 0x55, 0x37, 0x9a, 0x38, 0xad, 0x7b, 0x3b, 0xd0, 0x3d, 0x58, 0x9a, 0x39, 0xb2, 0x17, 0x57, 0x79, 0x53, 0xac, 0x12, 0x6e, 0x14, 0xe9, 0x2e, 0x0b, 0x59, 0xd9, 0x44, 0x36, 0xd1, 0x8a, 0x57, 0x8d, 0x76, 0x7d, 0x1e, 0x9b, 0xfe, 0xab, 0xe9, 0xbe, 0x66, 0x04, 0xa5, 0xc5, 0x06, 0xa2, 0xd4, 0xa0, 0xc4, 0x6f, 0xd5, 0xe1, 0xfe, 0x4e, 0x1c, 0xb6, 0x1c, 0x1e, 0xf8, 0x20, 0xde, 0x41, 0xe7, 0xa0, 0x83, 0x33, 0xad, 0xa9, 0x95, 0xdf, 0x2e, 0xcd, 0x38, 0x6c, 0x9e, 0x9f, 0x8c, 0x54, 0xe3, 0xf2, 0xff, 0x35, 0x59, 0x8d, 0x42, 0xf5, 0xe5, 0xdc, 0x35, 0x2a, 0xfd, 0xde, 0xcb, 0xd3, 0x8e, 0x55, 0xa1, 0xda, 0xea, 0x8b, 0x67, 0xea, 0x74, 0x26, 0x70, 0x8a, 0xfa, 0xfb, 0x3d, 0x0d, 0x39, 0xba, 0x5e, 0xf1, 0x71, 0x34, 0x7c, 0xbf, 0x95, 0x24, 0xd0, 0x1b, 0x8e, 0xaa, 0x74, 0x3f, 0x22, 0x94, 0xa9, 0xc2, 0x89, 0x54, 0x26, 0x6c, 0xf3, 0xe7, 0xb3, 0x71, 0x13, 0x3e, 0x5d, 0x46, 0xf8, 0xde, 0x9c, 0x51, 0x50, 0x10, 0x0f, 0x04, 0xb3, 0x9d, 0x7e, 0xfe, 0xd5, 0x2a, 0x04, 0x25, 0x14, 0x13, 0x1c, 0x6f, 0xa1, 0x46, 0xb1, 0x78, 0x3f, 0x16, 0xdc, 0x7f, 0x53, 0xd3, 0xf6, 0x28, 0x52, 0x6b, 0xcb, 0x37, 0xa6, 0x28, 0x12, 0x84, 0x25, 0x10, 0x38, 0xf8, 0x44, 0x1b, 0x22, 0xe5, 0x0e, 0x73, 0x35, 0x3c, 0x66, 0x12, 0x23, 0xab, 0x71, 0x21, 0x48, 0xa5, 0x3d, 0xd7, 0xa7, 0xc6, 0x72, 0x41, 0x4d, 0x49, 0x94, 0x8c, 0xa7, 0xf3, 0x58, 0x57, 0x80, 0xa7, 0xa7, 0xeb, 0xb7, 0xde, 0xb5, 0x97, 0xee, 0xd9, 0x56, 0xa6, 0x28, 0xb8, 0xd4, 0x1a, 0x75, 0x49, 0x57, 0x9e, 0x34, 0x7d, 0xdb, 0x1c, 0xd4, 0xce, 0xb9, 0x0e, 0x71, 0x1a, 0x92, 0xd2, 0x06, 0xb4, 0x46, 0xa9, 0x89, 0x43, 0x3b, 0xce, 0x46, 0x57, 0x4a, 0x8f, 0x1c, 0x3b, 0xf1, 0x1e, 0xbd, 0x98, 0xea, 0x6a, 0x5a, 0xc5, 0x28, 0x8a, 0xfa, 0x54, 0xb7, 0x67, 0x34, 0xb5, 0x57, 0xcb, 0xd3, 0xbf, 0xa0, 0x66, 0xc0, 0x63, 0xcd, 0x0f, 0x42, 0xe8, 0x5e, 0x59, 0x10, 0x6f, 0xde, 0x80, 0x42, 0x98, 0x1d, 0xaa, 0xf9, 0x94, 0xc6, 0x08, 0x45, 0xb5, 0xbb, 0x93, 0x5c, 0xf9, 0xdb, 0xe2, 0x76, 0x52, 0x5a, 0xc9, 0x7e, 0x13, 0x36, 0x1c, 0x19, 0x0d, 0x82, 0xa3, 0x05, 0xfe, 0x6d, 0x95, 0x1c, 0x47, 0x39, 0xc0, 0x7c, 0x79, 0x8a, 0x6e, 0x51, 0x52, 0x18, 0x9f, 0x91, 0x1a, 0xfa, 0xa0, 0xf7, 0x76, 0x29, 0x06, 0xb0, 0x51, 0xc1, 0xe7, 0xd8, 0xe9, 0x32, 0x72, 0x28, 0x8e, 0x5f, 0x64, 0x0c, 0x76, 0x3a, 0xd8, 0xdb, 0x33, 0xa7, 0x3f, 0xbd, 0x37, 0x23, 0x2e, 0xe0, 0x00, 0x36, 0x4d, 0x3e, 0xdd, 0x1e, 0x79, 0x96, 0x05, 0xde, 0xaa, 0xcd, 0x5e, 0x66, 0x62, 0xfc, 0x68, 0x45, 0x6a, 0x27, 0x04, 0xa4, 0xc0, 0x81, 0x67, 0x0e, 0x07, 0x6d, 0x63, 0xe6, 0x0a, 0x84, 0xb4, 0x58, 0xd8, 0x86, 0x73, 0x44, 0x5e, 0x70, 0x07, 0xaf, 0x1a, 0xf8, 0x6d, 0x17, 0xec, 0x8f, 0xb2, 0xf5, 0x1e, 0x76, 0x56, 0x45, 0x65, 0x3b, 0x8b, 0xee, 0xbc, 0x7b, 0x59, 0x43, 0xa5, 0x19, 0xcc, 0xee, 0x2f, 0x36, 0x92, 0x56, 0x96, 0x5b, 0x46, 0xb7, 0xbf, 0x2e, 0x0d, 0xd7, 0xb1, 0x4e, 0xbc, 0x46, 0x10, 0x1f, 0xf3, 0x36, 0x99, 0xa6, 0x64, 0xd4, 0xec, 0x1b, 0x21, 0xc2, 0x91, 0x15, 0x93, 0x3c, 0xfa, 0xb0, 0x8d, 0x86, 0x6c, 0xd5, 0x62, 0xda, 0x6a, 0x16, 0x96, 0x6c, 0x18, 0x8f, 0xc8, 0x40, 0xf4, 0xb0, 0xd1, 0x01, 0x8d, 0xb5, 0xb2, 0x19, 0xa2, 0x4a, 0x1d, 0xfc, 0x39, 0xd5, 0x66, 0x78, 0x87, 0x21, 0xa6, 0x80, 0x9d, 0x19, 0x5c, 0x90, 0x9b, 0xae, 0x84, 0xd4, 0xca, 0x5a, 0xb7, 0x53, 0x23, 0xc6, 0xaf, 0x46, 0x0c, 0xdf, 0x14, 0x7e, 0x74, 0xd7, 0x12, 0x88, 0x6b, 0x46, 0x3e, 0x77, 0x48, 0x01, 0x8a, 0xec, 0x67, 0xb6, 0xa2, 0xe7, 0x08, 0x0b, 0x8d, 0x9e, 0xbe, 0x2b, 0x95, 0x51, 0x2d, 0xf7, 0xcb, 0x25, 0x7b, 0x9b, 0x71, 0xb6, 0x7b, 0x05, 0x9b, 0x18, 0x20, 0x4c, 0xa9, 0x11, 0x50, 0xf2, 0xb5, 0x71, 0x30, 0x2f, 0x42, 0x8f, 0xf3, 0x37, 0x7d, 0x3c, 0x40, 0x49, 0x00, 0x34, 0xe8, 0x53, 0x68, 0x57, 0xf8, 0x26, 0x0b, 0x55, 0x21, 0x34, 0x56, 0xd5, 0x25, 0x86, 0xa4, 0xc7, 0x70, 0x68, 0x02, 0x1a, 0xae, 0x84, 0x34, 0x1c, 0x2d, 0xf3, 0xd3, 0x96, 0x32, 0x62, 0x8e, 0x67, 0x21, 0x49, 0xac, 0x29, 0x02, 0xea, 0x11, 0xf2, 0x04, 0xab, 0x24, 0x6c, 0x64, 0xb9, 0xd1, 0xc0, 0x04, 0xa2, 0x7d, 0xc6, 0x40, 0x97, 0xd4, 0x60, 0x84, 0xf1, 0x69, 0xa8, 0x37, 0x09, 0xf4, 0x13, 0xff, 0x46, 0x9a, 0x49, 0x10, 0x56, 0xe6, 0xd6, 0x79, 0x0d, 0x53, 0x5f, 0x72, 0x62, 0xe4, 0x22, 0xa2, 0x6d, 0x1d, 0x7c, 0xc0, 0x50, 0x29, 0x4d, 0x8c, 0x6b, 0x87, 0x75, 0xec, 0x09, 0x4b, 0xd1, 0x01, 0x4e, 0xb6, 0x67, 0x60, 0x11, 0xaa, 0x06, 0x3f, 0x09, 0xe2, 0x16, 0x02, 0x61, 0x58, 0x81, 0x54, 0xb0, 0xca, 0x48, 0x42, 0xdf, 0x48, 0xd4, 0xe6, 0x32, 0x72, 0x16, 0x5f, 0x71, 0x25, 0x23, 0x86, 0x23, 0x06, 0x1b, 0xdd, 0xb7, 0xc1, 0x70, 0x4a, 0xbb, 0x8c, 0x9a, 0xa0, 0x17, 0x22, 0x20, 0xb5, 0xaa, 0x99, 0xc2, 0xac, 0xb4, 0x05, 0xc9, 0x69, 0x3b, 0x79, 0x98, 0x16, 0x67, 0xd9, 0xc6, 0xf6, 0xe3, 0x0e, 0x3d, 0x57, 0xa0, 0x52, 0xd4, 0x50, 0xe0, 0xe4, 0x94, 0xca, 0x82, 0x19, 0x51, 0x0a, 0x74, 0x73, 0xae, 0x67, 0xf0, 0xf8, 0x4e, 0x92, 0xbf, 0x41, 0x9a, 0xdf, 0x9b, 0x6b, 0x11, 0x98, 0x2b, 0xa3, 0x3f, 0x39, 0x85, 0xb5, 0xaa, 0xdd, 0x86, 0xfc, 0x71, 0x17, 0x38, 0x8d, 0xec, 0xd2, 0x04, 0xb1, 0x63, 0xf1, 0x36, 0x61, 0x15, 0xf6, 0x93, 0x81, 0x60, 0x1b, 0x66, 0xdb, 0x79, 0xd7, 0x9c, 0x54, 0x83, 0xb4, 0x8e, 0xb4, 0x04, 0x6d, 0x26, 0xa0, 0xed, 0x20, 0x9b, 0xa8, 0x09, 0x14, 0x6b, 0x20, 0x16, 0x72, 0x54, 0x88, 0x2e, 0x32, 0xf9, 0x83, 0x7a, 0x5a, 0x21, 0x39, 0xa1, 0xf3, 0x0a, 0x30, 0x92, 0x41, 0xf0, 0x12, 0xb0, 0xe2, 0x1c, 0x76, 0x37, 0x45, 0x3b, 0x60, 0x52, 0xe3, 0x62, 0xfa, 0xa2, 0x99, 0x93, 0x53, 0x4c, 0xa7, 0x5d, 0xa1, 0x8c, 0x43, 0x51, 0xbf, 0x37, 0x94, 0x52, 0x73, 0x95, 0xdd, 0xf4, 0x59, 0x9f, 0x91, 0x19, 0x3a, 0xc4, 0x42, 0x00, 0x9c, 0x11, 0x02, 0x88, 0x17, 0x06, 0xb6, 0x5b, 0x16, 0x41, 0xa4, 0x0b, 0x63, 0x04, 0xa9, 0x1d, 0x5c, 0xc1, 0x92, 0x75, 0x27, 0x69, 0x5d, 0xa5, 0x7e, 0x18, 0xd9, 0xb9, 0x16, 0x65, 0xa0, 0x13, 0x0a, 0x24, 0x50, 0x7e, 0x9a, 0x2a, 0x2f, 0x4d, 0xe7, 0x10, 0x60, 0x60, 0xad, 0xa7, 0x8e, 0xce, 0x45, 0x1f, 0x78, 0x1f, 0x89, 0x8b, 0xe2, 0x44, 0x49, 0x39, 0x33, 0xcc, 0x6b, 0xe1, 0xb8, 0x49, 0xfa, 0x0b, 0xcb, 0x2e, 0xc1, 0xe5, 0x8e, 0xf2, 0xab, 0x6a, 0x80, 0xf2, 0xbb, 0xb5, 0x95, 0x7b, 0x38, 0x41, 0x6b, 0xb8, 0x2f, 0x22, 0x47, 0x2f, 0xc1, 0x79, 0xd7, 0x8a, 0xd0, 0x24, 0xc5, 0x59, 0x08, 0x07, 0x7f, 0xe2, 0x26, 0xff, 0x2a, 0x80, 0x8b, 0x59, 0x55, 0x26, 0x41, 0xe4, 0x6d, 0x26, 0xf4, 0xd6, 0xba, 0xdc, 0x84, 0xb2, 0xa1, 0x45, 0x55, 0x60, 0xf7, 0x90, 0x2d, 0x79, 0x36, 0xe2, 0x25, 0xaa, 0x8a, 0xe1, 0x59, 0x48, 0x68, 0xaa, 0xd9, 0x92, 0x87, 0x0a, 0x06, 0xc0, 0x1b, 0x8d, 0x66, 0x2d, 0x40, 0x42, 0x04, 0x4b, 0x27, 0x61, 0xff, 0x6b, 0x86, 0x19, 0x8f, 0xa1, 0x95, 0x1b, 0x94, 0x48, 0x50, 0x78, 0x73, 0x17, 0xe8, 0xb3, 0xc8, 0x35, 0x83, 0x8f, 0xda, 0x58, 0xdb, 0x04, 0x81, 0x9e, 0x02, 0x64, 0xdf, 0x84, 0x78, 0x16, 0xa1, 0x76, 0x00, 0x24, 0x82, 0x60, 0x52, 0x20, 0x7f, 0xc8, 0xdd, 0xd7, 0x05, 0x7c, 0xa3, 0xe2, 0x2f, 0x23, 0x5a, 0xc7, 0x80, 0x12, 0x96, 0xd4, 0x1f, 0xe0, 0xc1, 0x45, 0x18, 0x8f, 0xd8, 0x19, 0x15, 0x56, 0xd8, 0x0a, 0x05, 0x4a, 0xfe, 0x22, 0x17, 0x3a, 0x43, 0x57, 0x64, 0x28, 0xd7, 0x7b, 0x2e, 0x77, 0xe2, 0x06, 0x81, 0xd5, 0x6f, 0x12, 0x0a, 0xf6, 0x9d, 0x10, 0xbb, 0xc4, 0x49, 0x33, 0x5d, 0x8c, 0x2c, 0xe1, 0xa5, 0x9c, 0x02, 0x61, 0x8c, 0x29, 0xd6, 0x01, 0x5c, 0xb0, 0xe9, 0xdc, 0xc1, 0x59, 0xa3, 0xfe, 0x0e, 0xb6, 0xd6, 0xf9, 0x08, 0x08, 0x70, 0xa9, 0xcf, 0x8f, 0xe2, 0xb7, 0x54, 0x04, 0x19, 0x94, 0x11, 0xa8, 0xe7, 0xde, 0xfd, 0xa2, 0xed, 0x67, 0xd9, 0x03, 0xfe, 0x6a, 0x17, 0xa1, 0x1a, 0x00, 0x0a, 0x06, 0x1e, 0x08, 0x19, 0x93, 0x46, 0xf2, 0x2b, 0xd1, 0x08, 0x4e, 0xd5, 0xa5, 0x65, 0xd2, 0xad, 0x1d, 0x22, 0xa3, 0x1a, 0x19, 0x10, 0x08, 0x0a, 0xec, 0x97, 0xf9, 0x88, 0x0f, 0x76, 0x3e, 0xf2, 0x94, 0xbc, 0x7b, 0xf7, 0x2d, 0x5b, 0xf8, 0x2e, 0xcb, 0xe8, 0x18, 0x99, 0x91, 0xca, 0x22, 0xbe, 0x3b, 0xc4, 0xa5, 0xae, 0xa4, 0xa2, 0xf8, 0x21, 0xbd, 0x1a, 0xac, 0x1b, 0xd2, 0xc1, 0x85, 0x5c, 0xaa, 0x6a, 0xb6, 0x58, 0x7a, 0xa1, 0x3b, 0xc2, 0x1d, 0xac, 0xde, 0x83, 0xc4, 0xf3, 0xd9, 0x13, 0x29, 0x83, 0x45, 0xa6, 0xe4, 0x12, 0x9d, 0xb5, 0x80, 0x8a, 0x8a, 0x06, 0xce, 0x3d, 0xbc, 0x63, 0x2f, 0x4b, 0x0a, 0x20, 0x5c, 0x39, 0x20, 0x47, 0x11, 0xa8, 0xa5, 0x96, 0x2c, 0xcf, 0x50, 0x81, 0x0e, 0x2c, 0x2a, 0x22, 0x18, 0x6c, 0x7a, 0x87, 0x7d, 0x08, 0x1a, 0x64, 0x45, 0x43, 0x09, 0xf8, 0x31, 0xbf, 0xaa, 0x32, 0xc6, 0xb2, 0xe8, 0xbf, 0x43, 0xa9, 0x54, 0xf5, 0x90, 0x19, 0x33, 0x7d, 0xc6, 0x95, 0xa0, 0x81, 0x90, 0xbe, 0x52, 0xab, 0x24, 0x16, 0x63, 0x62, 0xb4, 0x02, 0x2d, 0xb7, 0xd0, 0x89, 0x2a, 0x50, 0x91, 0x2e, 0xe0, 0x35, 0xf8, 0x6c, 0x85, 0xd4, 0x64, 0x33, 0x77, 0x55, 0x94, 0xa0, 0xd7, 0xc4, 0xed, 0x28, 0xf0, 0x40, 0x79, 0x98, 0xde, 0x63, 0x66, 0x66, 0x9e, 0x11, 0x2a, 0x02, 0x39, 0xe5, 0xb8, 0x36, 0x60, 0xdf, 0x68, 0xbc, 0x64, 0xb5, 0xb5, 0x62, 0xb2, 0xc6, 0x4f, 0xb8, 0xa1, 0x7d, 0x7e, 0x4c, 0xc8, 0x50, 0xa2, 0x27, 0xb5, 0x20, 0x65, 0x2f, 0x6e, 0x12, 0xc6, 0x58, 0x84, 0x74, 0x9f, 0x95, 0x41, 0x25, 0x0d, 0x36, 0x7c, 0x80, 0x11, 0x56, 0x0e, 0xdc, 0xa7, 0xaf, 0x8c, 0x1e, 0x35, 0x83, 0x76, 0x5d, 0xc5, 0x18, 0x5d, 0x8a, 0x25, 0x05, 0x75, 0x2f, 0x19, 0xab, 0xc7, 0x56, 0x1e, 0x74, 0x87, 0x4b, 0xe8, 0xd9, 0x90, 0x3a, 0xa5, 0xc4, 0x23, 0x3f, 0x97, 0xf3, 0x55, 0x31, 0x89, 0x0c, 0x35, 0xe7, 0xfe, 0x01, 0x21, 0xf4, 0x54, 0x22, 0x90, 0x47, 0x8a, 0x10, 0xc5, 0x62, 0x40, 0x47, 0xa5, 0xd6, 0x8a, 0x62, 0x9f, 0xf5, 0x21, 0x02, 0x1c, 0x88, 0x56, 0x4e, 0xf7, 0xb5, 0x1a, 0x8a, 0x70, 0x30, 0x85, 0x2f, 0x87, 0x11, 0x02, 0x05, 0x63, 0xad, 0x0f, 0xa4, 0x93, 0x35, 0xae, 0xdd, 0x1b, 0xdf, 0xfb, 0xe3, 0x3d, 0x35, 0x07, 0x6f, 0x58, 0x87, 0x46, 0xc5, 0xa9, 0xd7, 0x4f, 0xf3, 0x09, 0x40, 0xbc, 0x74, 0x18, 0xd9, 0x20, 0x51, 0xe6, 0x22, 0x9c, 0x96, 0xe0, 0x3a, 0x94, 0xf6, 0x01, 0x99, 0x24, 0x13, 0xed, 0x5a, 0x92, 0xa1, 0xbf, 0x2f, 0x8b, 0x17, 0x15, 0xb4, 0x66, 0x57, 0x31, 0xc6, 0x9c, 0x06, 0xf4, 0x26, 0x03, 0x5b, 0x2e, 0xf5, 0xe4, 0x12, 0xc2, 0x5a, 0x8c, 0x84, 0x2f, 0xe4, 0x73, 0xa0, 0x9a, 0x99, 0x14, 0x62, 0x77, 0x32, 0x7c, 0x67, 0x3a, 0x56, 0x83, 0x18, 0x54, 0x7a, 0x20, 0x12, 0x1c, 0x46, 0x70, 0x18, 0x2e, 0x69, 0x94, 0x91, 0x30, 0x47, 0xaf, 0xf0, 0xbe, 0x17, 0x9b, 0x7e, 0xe8, 0xcc, 0x16, 0xa5, 0xbd, 0xe5, 0x06, 0xc5, 0x53, 0x38, 0x78, 0x56, 0x5d, 0xc2, 0xf6, 0xc1, 0x09, 0xab, 0xd3, 0x0e, 0x02, 0x88, 0xdc, 0xb9, 0x3f, 0x96, 0x41, 0x30, 0x48, 0x31, 0x51, 0x41, 0xa8, 0x2b, 0x2b, 0xe6, 0xd9, 0xe6, 0xa5, 0x76, 0x08, 0x15, 0x25, 0x64, 0xe9, 0x56, 0x37, 0x13, 0x2e, 0x25, 0x96, 0xba, 0xa4, 0xf6, 0x1d, 0xf3, 0xf0, 0x37, 0xa4, 0x2f, 0xfe, 0x4c, 0x9c, 0xc5, 0x6e, 0xae, 0x2f, 0xf5, 0xa6, 0x74, 0xf6, 0x1e, 0x4d, 0x59, 0x74, 0xd8, 0xb3, 0x80, 0x2d, 0x18, 0x4e, 0x26, 0x2b, 0xc5, 0x73, 0x8c, 0xd0, 0x8e, 0x9c, 0x2c, 0xeb, 0xb9, 0x7d, 0xb1, 0x22, 0xf3, 0x92, 0x60, 0x97, 0x10, 0xcc, 0x9f, 0xbc, 0x2b, 0xb3, 0xb7, 0x20, 0xa9, 0x01, 0x3c, 0x51, 0x77, 0x01, 0xdf, 0xad, 0xa3, 0xd6, 0x03, 0x6a, 0x92, 0xd9, 0xd4, 0x46, 0xaf, 0x2a, 0xcb, 0x40, 0xc2, 0xa0, 0x3a, 0x64, 0x16, 0xcd, 0x67, 0xc3, 0x6d, 0xaa, 0xfb, 0xca, 0xed, 0xb8, 0x56, 0x94, 0x13, 0x88, 0x42, 0x55, 0xc9, 0xdd, 0xca, 0x6e, 0xd1, 0xa8, 0x8a, 0x68, 0x13, 0x8a, 0x57, 0x80, 0x1f, 0x4d, 0x77, 0x44, 0x61, 0x6a, 0xce, 0x85, 0x5f, 0x15, 0xbb, 0xbc, 0x99, 0x28, 0x97, 0xbb, 0x30, 0xc7, 0xbc, 0x81, 0x1c, 0x98, 0xeb, 0xc4, 0x2d, 0x00, 0x45, 0x72, 0x0f, 0x85, 0xa7, 0x52, 0x6e, 0xa6, 0x48, 0x80, 0x4a, 0xa0, 0xe0, 0x2e, 0x61, 0x69, 0x44, 0x9b, 0x6b, 0x4a, 0xc0, 0x7d, 0x71, 0xcf, 0x0d, 0xd1, 0xae, 0x52, 0xab, 0xdf, 0xc1, 0xa0, 0x66, 0x39, 0x50, 0x6f, 0xa7, 0xc7, 0xd1, 0x96, 0x2e, 0xa0, 0xb1, 0x0d, 0x4d, 0x86, 0x32, 0x3a, 0x12, 0x0a, 0x1b, 0x1b, 0xd3, 0x66, 0x00, 0x10, 0x2e, 0x54, 0x48, 0x00, 0x51, 0x73, 0xdd, 0xbc, 0x6e, 0x9a, 0x8f, 0xc1, 0xa1, 0xcd, 0x3e, 0xd8, 0xa3, 0xb6, 0x56, 0x46, 0x44, 0x83, 0xc3, 0x4e, 0xe6, 0xb4, 0xd0, 0xb5, 0x68, 0x1c, 0xc7, 0x1d, 0xd1, 0x58, 0xa9, 0x88, 0x86, 0x0d, 0xf2, 0xc8, 0x0f, 0xe4, 0x44, 0x45, 0x2f, 0x3f, 0x65, 0x5c, 0xce, 0x61, 0x14, 0xea, 0x99, 0x02, 0xe4, 0xc5, 0x1a, 0x3b, 0x48, 0x50, 0xb7, 0xa5, 0xb8, 0x48, 0x94, 0x19, 0x81, 0x98, 0x49, 0xfe, 0x63, 0x2c, 0x9f, 0xff, 0x25, 0xb9, 0xe2, 0x49, 0xa9, 0xce, 0xea, 0x82, 0xc9, 0x9d, 0xb6, 0x83, 0xc4, 0x14, 0x87, 0x5f, 0xe8, 0x02, 0x0b, 0x2e, 0x43, 0x91, 0x73, 0x8e, 0x4d, 0x64, 0x1e, 0xba, 0x33, 0xb8, 0xcd, 0xbf, 0xc8, 0x4c, 0x2e, 0x48, 0x2f, 0x9c, 0x5b, 0x9e, 0x69, 0xf7, 0x8b, 0x39, 0xf8, 0x3e, 0x58, 0x62, 0x02, 0x4a, 0x7b, 0xfe, 0x7d, 0x0e, 0x80, 0x8e, 0xf8, 0x75, 0xf4, 0x98, 0x70, 0x11, 0x87, 0x5a, 0x5c, 0x9e, 0xb5, 0xb0, 0x62, 0x22, 0x39, 0xb3, 0x54, 0xb7, 0xcf, 0x0d, 0x2e, 0x9b, 0x47, 0x41, 0x47, 0x6a, 0xe5, 0xe2, 0x78, 0x8e, 0x8c, 0xa8, 0x7e, 0x5a, 0xea, 0xca, 0x75, 0x94, 0x83, 0xad, 0x67, 0x7b, 0x45, 0xf8, 0x1e, 0x93, 0x3c, 0x8d, 0x8f, 0x22, 0x75, 0xa4, 0x3d, 0x69, 0x62, 0xd2, 0xf1, 0x9a, 0x16, 0xba, 0x2f, 0x09, 0x8d, 0x71, 0x75, 0x1d, 0xa0, 0x35, 0xec, 0x4f, 0xf4, 0x14, 0xe8, 0x7d, 0x22, 0x67, 0xce, 0x63, 0xd1, 0x7c, 0x84, 0xf4, 0x4c, 0xc5, 0x85, 0x93, 0x20, 0xab, 0x2b, 0x00, 0x4e, 0x09, 0x09, 0xa8, 0x0c, 0x1d, 0xd0, 0x56, 0x64, 0x22, 0x08, 0x82, 0xa0, 0xd9, 0x34, 0xc9, 0xc3, 0x02, 0x72, 0x9b, 0x05, 0xbb, 0xf6, 0x51, 0x3e, 0x7f, 0x27, 0x17, 0xc1, 0x92, 0x6a, 0xb9, 0x92, 0x5f, 0xcb, 0x6d, 0x15, 0x3e, 0x1d, 0x4e, 0x8b, 0x14, 0xfd, 0xb4, 0xa2, 0xf4, 0x21, 0xdf, 0x4a, 0xb6, 0x71, 0x08, 0xba, 0xa4, 0x23, 0xcd, 0x28, 0x4a, 0x5e, 0x29, 0xa6, 0xa0, 0xa9, 0x2c, 0x96, 0x07, 0x4a, 0x94, 0xaf, 0x6c, 0x92, 0xab, 0x2a, 0xf5, 0x1b, 0x0c, 0x19, 0x46, 0x34, 0x84, 0xf4, 0xbd, 0xb4, 0x1d, 0xd3, 0xf8, 0xd4, 0x58, 0x14, 0x6b, 0xc6, 0x31, 0x2a, 0xfe, 0x8e, 0xba, 0xaa, 0x03, 0xc6, 0xa3, 0xeb, 0x72, 0x5a, 0x9f, 0x28, 0xc2, 0x26, 0x77, 0x34, 0x12, 0x60, 0x1f, 0x34, 0x1b, 0x38, 0x31, 0x3b, 0xaf, 0x64, 0x11, 0x38, 0x57, 0xbc, 0x0b, 0xbe, 0xee, 0x64, 0x32, 0x03, 0x79, 0x4c, 0xfc, 0x1a, 0xea, 0x21, 0xc1, 0xf0, 0xa1, 0x3f, 0x43, 0xb4, 0x00, 0xea, 0xf1, 0x82, 0x33, 0x9d, 0x23, 0x74, 0x15, 0x66, 0x43, 0x2d, 0x11, 0xc4, 0x64, 0xdc, 0x15, 0x64, 0x83, 0xd1, 0x63, 0xd9, 0xe1, 0x0a, 0xb0, 0x87, 0x57, 0xbd, 0x96, 0x67, 0x1a, 0x5c, 0x1c, 0xdf, 0x58, 0xdb, 0xca, 0xf1, 0x71, 0x68, 0x06, 0xff, 0xf9, 0x47, 0xe0, 0x43, 0x24, 0xeb, 0x40, 0x61, 0x0a, 0x90, 0xa6, 0xe6, 0x5e, 0xd1, 0x57, 0x84, 0x6c, 0x8f, 0xc6, 0xed, 0x78, 0x66, 0xda, 0xb6, 0x01, 0x9c, 0x56, 0xe1, 0x45, 0x51, 0x3d, 0xbe, 0x0c, 0x59, 0xef, 0x96, 0xd0, 0x0e, 0x27, 0xcc, 0x4f, 0x4a, 0x0b, 0x65, 0x2d, 0x37, 0xcd, 0xd6, 0xd3, 0xca, 0xe6, 0x01, 0x19, 0x51, 0x2f, 0xee, 0x12, 0x16, 0xfd, 0x90, 0x84, 0x22, 0x95, 0x83, 0xb5, 0x4d, 0x12, 0xef, 0xc8, 0xc1, 0x80, 0xa1, 0xf2, 0x76, 0x83, 0x89, 0xbc, 0x54, 0x9c, 0xc4, 0x80, 0xdf, 0x10, 0x64, 0x83, 0xd4, 0x62, 0xba, 0x9f, 0x17, 0xe9, 0x53, 0xf0, 0x4d, 0x19, 0x34, 0x4f, 0x7c, 0xc6, 0x93, 0x69, 0x52, 0xb8, 0xe9, 0x46, 0x37, 0x3d, 0xee, 0x9f, 0x71, 0xd7, 0xd1, 0xc2, 0x3f, 0xe8, 0x7e, 0xfa, 0x68, 0x55, 0x16, 0xec, 0x5a, 0x31, 0xf4, 0x4f, 0xb9, 0xbb, 0x38, 0xc4, 0x0f, 0xbb, 0xc3, 0xe4, 0xd2, 0xe7, 0x34, 0x49, 0x57, 0x47, 0xd0, 0x27, 0xcf, 0xe5, 0x00, 0x30, 0x03, 0xf3, 0xd2, 0xf5, 0x81, 0x47, 0x01, 0x03, 0x9e, 0x12, 0x55, 0x4a, 0x11, 0x55, 0x47, 0x1e, 0xe3, 0x60, 0x49, 0x12, 0x1e, 0xc0, 0xd5, 0x11, 0xfd, 0xbd, 0x43, 0x31, 0x15, 0x25, 0xd7, 0x03, 0x28, 0x8f, 0xd9, 0x1f, 0x32, 0x59, 0xcf, 0x22, 0x54, 0xfb, 0x81, 0x83, 0x84, 0xc5, 0xde, 0x91, 0x05, 0xe3, 0x8c, 0x38, 0x6e, 0x3c, 0x84, 0xc3, 0x4b, 0x8d, 0xd5, 0x50, 0x4c, 0x67, 0xd1, 0xaf, 0x7f, 0x03, 0xd2, 0x09, 0xa5, 0xe5, 0x9a, 0x29, 0xb5, 0x31, 0x86, 0x64, 0xda, 0xcb, 0x4b, 0x15, 0x9f, 0x36, 0x15, 0x07, 0x09, 0x50, 0x1b, 0x8c, 0x4e, 0x98, 0x82, 0x2b, 0x74, 0x19, 0x3f, 0x02, 0xb2, 0x47, 0x01, 0x90, 0x66, 0x4d, 0x16, 0x94, 0x85, 0xec, 0x31, 0x32, 0x7a, 0xea, 0x54, 0xa8, 0x4b, 0x16, 0x19, 0xd6, 0xaa, 0x5e, 0xe3, 0x5f, 0x8c, 0x53, 0xe0, 0x6a, 0x69, 0xb9, 0xe7, 0xec, 0x74, 0x29, 0x30, 0x23, 0x7c, 0x60, 0x53, 0x29, 0xac, 0x0a, 0x8e, 0x39, 0xaa, 0xe3, 0x79, 0x6b, 0xde, 0x71, 0xbe, 0xe6, 0x6b, 0x35, 0x95, 0x70, 0x23, 0x0c, 0x89, 0xb9, 0x19, 0xac, 0x76, 0xa9, 0xed, 0x2e, 0x8f, 0x22, 0xe6, 0x2a, 0x0d, 0x74, 0x43, 0xf2, 0xca, 0x94, 0xbd, 0x57, 0x38, 0x94, 0xe8, 0x46, 0x1a, 0xc0, 0x50, 0x59, 0xcd, 0xbe, 0xb6, 0x18, 0x28, 0x30, 0x1b, 0x53, 0x7c, 0xea, 0x9e, 0x2c, 0x49, 0x7b, 0xa0, 0xdc, 0x45, 0x0d, 0xe2, 0x0c, 0x4f, 0x8b, 0x01, 0xf4, 0xae, 0xd0, 0x6f, 0x49, 0x2a, 0x4a, 0xdb, 0x14, 0xa1, 0xae, 0xa9, 0x11, 0xa0, 0x80, 0x60, 0x05, 0xbb, 0xc2, 0xd1, 0x24, 0xf6, 0xe9, 0x2a, 0x14, 0x0b, 0xc1, 0x3c, 0x6a, 0x7c, 0x56, 0xb0, 0x65, 0xa0, 0xe1, 0x73, 0x1d, 0xe9, 0x35, 0xed, 0x2b, 0x04, 0x17, 0xbf, 0x50, 0xab, 0x4e, 0xc7, 0xdb, 0xba, 0x33, 0xe5, 0x2c, 0x98, 0xa1, 0x35, 0x13, 0x78, 0xfe, 0xa2, 0x0b, 0x4c, 0x27, 0xc5, 0x2b, 0x98, 0x86, 0x2c, 0x54, 0xa5, 0xab, 0x2c, 0x29, 0x86, 0xd3, 0x5e, 0x75, 0xf3, 0x4d, 0x4c, 0x4d, 0x21, 0x55, 0xbc, 0xe8, 0x5b, 0xc8, 0x55, 0x9f, 0xc6, 0xce, 0x95, 0x54, 0xc9, 0xba, 0x11, 0xc6, 0xb2, 0x50, 0x8c, 0x91, 0x0b, 0x20, 0x93, 0x7a, 0xb5, 0xe3, 0xf1, 0x70, 0x7e, 0x8a, 0x85, 0x19, 0xaa, 0xd1, 0x18, 0xe9, 0x2c, 0x20, 0x0b, 0xa9, 0x9c, 0xad, 0x2a, 0x21, 0x54, 0xba, 0xe9, 0x9c, 0x9e, 0x32, 0xea, 0x96, 0x04, 0x39, 0x7d, 0x6b, 0x74, 0x29, 0x70, 0xb4, 0x0c, 0x1c, 0xba, 0x62, 0x65, 0x61, 0x89, 0x7a, 0x61, 0x37, 0xc3, 0x85, 0x96, 0xf9, 0x57, 0x8d, 0x01, }; -uint8_t H_bpoly_MINSEC[5*NEWHOPE_POLYBYTES] = { +uint8_t H_bpoly_MINSEC[5*NEWHOPE_RINGCT20_POLYBYTES] = { 0xc7, 0x2a, 0x06, 0x40, 0xa2, 0xa6, 0x0b, 0xd5, 0xd5, 0x08, 0xba, 0xcd, 0x44, 0x4c, 0xbe, 0x9f, 0x44, 0xf7, 0x0c, 0x1c, 0x1b, 0xc2, 0xcf, 0x12, 0xc1, 0x75, 0x46, 0x23, 0x83, 0xcf, 0x2e, 0x61, 0xe2, 0xb8, 0x96, 0x17, 0xa9, 0x45, 0x19, 0xba, 0xce, 0x56, 0xcc, 0xd3, 0x35, 0x71, 0xcd, 0x89, 0x2b, 0x6f, 0xd7, 0x46, 0x16, 0x2d, 0xb8, 0xbb, 0x4f, 0x4f, 0x47, 0x70, 0x7b, 0x5a, 0x13, 0x01, 0x0a, 0x61, 0x29, 0xa2, 0xd6, 0x7b, 0xc8, 0xe7, 0xf9, 0x53, 0x36, 0xda, 0x9c, 0x37, 0xc9, 0x9f, 0x14, 0x9d, 0xea, 0x39, 0xe2, 0xc5, 0x4a, 0xa8, 0xc2, 0xa1, 0x91, 0xa5, 0x65, 0x78, 0x16, 0xc5, 0x4a, 0x30, 0xd7, 0xc7, 0xcf, 0xa0, 0xea, 0x68, 0xb7, 0x29, 0x50, 0x96, 0xf6, 0x2d, 0xcc, 0x55, 0x80, 0x82, 0x54, 0x19, 0xaa, 0x95, 0x42, 0xf8, 0xa9, 0x14, 0xe1, 0xe3, 0xee, 0xad, 0x2c, 0xe8, 0xd4, 0xdb, 0xa9, 0x19, 0x89, 0x68, 0xc9, 0x3c, 0xf0, 0x51, 0x38, 0x1d, 0xf8, 0x83, 0x88, 0x75, 0x7b, 0x3e, 0x40, 0x1d, 0x20, 0x9e, 0x00, 0xad, 0x51, 0x8c, 0x00, 0x46, 0x04, 0x67, 0x61, 0xb0, 0x42, 0xac, 0x25, 0x93, 0x94, 0xa3, 0x54, 0x33, 0xc2, 0xd9, 0xb5, 0x52, 0x84, 0xea, 0x51, 0x1b, 0x4a, 0xee, 0xfb, 0xa9, 0x84, 0x11, 0xf7, 0x9e, 0x99, 0x15, 0xc5, 0x2a, 0x64, 0x48, 0x91, 0x59, 0x09, 0x4a, 0x80, 0x68, 0xcf, 0x24, 0x2d, 0x83, 0x17, 0x82, 0x16, 0xe1, 0x12, 0x48, 0x7a, 0xd9, 0xac, 0x97, 0xeb, 0x48, 0x5b, 0x9a, 0x5a, 0xba, 0xb1, 0x4b, 0xa9, 0x65, 0x81, 0xec, 0x11, 0x9a, 0x31, 0xe2, 0x12, 0x17, 0x43, 0xf1, 0x0a, 0xee, 0x82, 0x28, 0x9b, 0x88, 0x9c, 0xbc, 0xba, 0x2d, 0x89, 0x28, 0xb2, 0xa8, 0x7b, 0x18, 0x60, 0x45, 0x66, 0x90, 0x8c, 0x36, 0x1d, 0x9b, 0xdb, 0xb5, 0xf0, 0x69, 0xb8, 0x17, 0x5e, 0x8f, 0x69, 0x83, 0x49, 0x89, 0xe2, 0x84, 0xd4, 0xa8, 0x65, 0x9d, 0xbc, 0x83, 0xda, 0x6c, 0x69, 0x74, 0xfa, 0x13, 0x87, 0xe9, 0x5b, 0x67, 0x32, 0x3e, 0x47, 0x79, 0xa9, 0x1a, 0xab, 0x06, 0xe8, 0xab, 0xdb, 0xac, 0x57, 0xb1, 0xba, 0xed, 0x1a, 0x75, 0xd9, 0x06, 0x36, 0xeb, 0x44, 0x50, 0x8b, 0x83, 0x02, 0x9b, 0x68, 0x45, 0x40, 0xf8, 0xc6, 0xe7, 0x8a, 0xc4, 0x00, 0x96, 0x56, 0xcf, 0xa2, 0xa6, 0xc0, 0xec, 0x09, 0x26, 0x47, 0xaf, 0xcb, 0x8d, 0x3e, 0x21, 0x80, 0x4f, 0xb6, 0x62, 0x23, 0x7d, 0x9c, 0x4e, 0x4f, 0x11, 0xbb, 0x9a, 0x05, 0x0f, 0x46, 0x8f, 0x3d, 0x75, 0x3f, 0x95, 0x20, 0x69, 0x59, 0x98, 0x39, 0xb4, 0x7d, 0x65, 0xdb, 0x90, 0xd0, 0x4b, 0xa4, 0x1a, 0xb2, 0x6e, 0xe3, 0xc0, 0xe9, 0xf1, 0x12, 0x82, 0xcc, 0x07, 0xcb, 0xa6, 0x59, 0x61, 0x50, 0x52, 0x0e, 0x95, 0x24, 0x2d, 0x51, 0x4d, 0x2c, 0x25, 0x5f, 0x30, 0x65, 0xe5, 0xaf, 0xa1, 0xaa, 0xa7, 0x01, 0x15, 0x1a, 0x0a, 0xb8, 0x09, 0x86, 0x2b, 0x42, 0xf8, 0xba, 0xc5, 0x41, 0x5a, 0x91, 0x14, 0x26, 0x95, 0xb3, 0x8a, 0x90, 0xf0, 0x89, 0x24, 0xa4, 0x97, 0x44, 0x71, 0x1b, 0xee, 0xc2, 0x4c, 0xee, 0xc5, 0xc6, 0xd9, 0x92, 0xdd, 0x20, 0x2e, 0xa8, 0x62, 0x41, 0xab, 0xf8, 0x58, 0xeb, 0x2a, 0x03, 0xb4, 0x1f, 0xac, 0xa3, 0x39, 0xa1, 0x04, 0x37, 0x99, 0x48, 0x6d, 0x09, 0x5d, 0x07, 0x88, 0x0d, 0x3d, 0x05, 0x54, 0x8f, 0x49, 0x88, 0x5f, 0x92, 0x49, 0x28, 0xe1, 0x5c, 0x16, 0xb0, 0x49, 0x5f, 0xea, 0xdc, 0x58, 0xb4, 0xf8, 0x90, 0x3e, 0xe1, 0x95, 0x64, 0x0a, 0xdf, 0x4d, 0x1b, 0x63, 0xc5, 0x53, 0x01, 0x75, 0x59, 0x37, 0x55, 0x41, 0x11, 0xf8, 0x3b, 0x2c, 0x60, 0xa4, 0xc0, 0xfe, 0x45, 0x8a, 0xc0, 0x0d, 0x90, 0x81, 0xc2, 0xf1, 0x76, 0x8d, 0x50, 0xe3, 0xca, 0xbd, 0xa5, 0x04, 0xc2, 0x03, 0xf8, 0xcd, 0xdf, 0xea, 0xce, 0xc2, 0x9c, 0x5a, 0x88, 0x78, 0xa7, 0x57, 0x14, 0xa2, 0x1f, 0xe6, 0x1f, 0x06, 0x00, 0xdd, 0xbd, 0x90, 0x50, 0x78, 0x75, 0x72, 0xb1, 0x6b, 0x25, 0x16, 0x12, 0xa9, 0x50, 0xa6, 0x77, 0x42, 0x29, 0x6e, 0x4b, 0x21, 0xf6, 0x91, 0xc3, 0x6b, 0xef, 0xc3, 0x11, 0xbd, 0x86, 0x0c, 0x5a, 0x67, 0x99, 0xc7, 0x7a, 0x11, 0xe2, 0xc7, 0xbd, 0x95, 0x9f, 0x6d, 0x85, 0xa6, 0x47, 0x8b, 0x17, 0xe6, 0x72, 0x50, 0x83, 0x5e, 0x15, 0xb0, 0xfc, 0x52, 0x0d, 0xa2, 0xdb, 0x0c, 0x01, 0xe1, 0xed, 0xae, 0x99, 0x2d, 0xea, 0xc0, 0x53, 0xe6, 0x32, 0xfe, 0x44, 0x54, 0x42, 0x74, 0x3e, 0x5e, 0x23, 0x2e, 0xfc, 0xca, 0x14, 0x79, 0x0f, 0xd6, 0x6b, 0x75, 0x30, 0x46, 0x64, 0x28, 0xe8, 0xc0, 0x42, 0x60, 0xad, 0x98, 0x35, 0xaa, 0x29, 0x1f, 0xb1, 0xa5, 0x5d, 0x22, 0x53, 0x06, 0x0b, 0x95, 0x8f, 0x5d, 0xa3, 0x53, 0xe4, 0xab, 0xf9, 0x96, 0x16, 0x1f, 0x3e, 0x12, 0x29, 0xc1, 0xbd, 0xd8, 0x3a, 0x6a, 0x9d, 0x27, 0xdb, 0x36, 0x91, 0x8e, 0x79, 0x84, 0x58, 0xc4, 0xcb, 0x64, 0xa1, 0x33, 0x1c, 0xee, 0xa9, 0xd0, 0xa0, 0x64, 0xb9, 0x07, 0x3d, 0x38, 0x89, 0x36, 0x6a, 0xc0, 0x60, 0x5e, 0x0a, 0x81, 0x24, 0x84, 0x1f, 0x0b, 0xdf, 0xa8, 0xd5, 0xdd, 0x8d, 0xdb, 0x1d, 0x3c, 0xa1, 0x28, 0xd4, 0x82, 0x3a, 0xd4, 0xd8, 0xb9, 0xdb, 0xc1, 0x52, 0x3a, 0x4d, 0xc4, 0x75, 0x98, 0xa8, 0x53, 0x1f, 0xd2, 0x27, 0xc9, 0xc4, 0x31, 0x5a, 0x3a, 0x84, 0x70, 0x93, 0x45, 0x8d, 0x01, 0x4e, 0x5f, 0x08, 0x86, 0x8a, 0x9a, 0x4b, 0x34, 0x46, 0x04, 0x4a, 0x6e, 0x8e, 0x17, 0x8c, 0x14, 0xd9, 0x2b, 0xd1, 0xe1, 0x6f, 0xbb, 0x1b, 0x95, 0xc7, 0x36, 0x70, 0x05, 0xe4, 0x0a, 0x97, 0x87, 0x05, 0xdd, 0x8d, 0x67, 0x80, 0x4d, 0x43, 0xbf, 0x11, 0x38, 0x23, 0x93, 0x08, 0xd1, 0xc3, 0x06, 0x1a, 0x02, 0x86, 0x3c, 0x08, 0x3b, 0xf4, 0x61, 0x49, 0xc2, 0xf5, 0xea, 0xdf, 0xe2, 0xa3, 0x76, 0xe5, 0x0d, 0xd0, 0x35, 0x9a, 0x8c, 0xc6, 0x18, 0xa0, 0x7b, 0x18, 0xcd, 0x51, 0xdc, 0x8f, 0xc2, 0x88, 0x02, 0x3e, 0x8d, 0x30, 0x68, 0xcf, 0x12, 0x11, 0x46, 0xbf, 0xa2, 0x53, 0x42, 0x00, 0xe5, 0x99, 0x85, 0x03, 0xeb, 0xf1, 0x85, 0x11, 0x7a, 0x82, 0xc8, 0x18, 0x51, 0xd0, 0xe1, 0x7a, 0x5b, 0x7f, 0x1e, 0xaf, 0x19, 0xde, 0x44, 0x2f, 0x80, 0x9f, 0x13, 0x29, 0x09, 0xd9, 0x9d, 0x8d, 0xce, 0xa3, 0xb3, 0xbd, 0xf5, 0x2f, 0xaa, 0xd2, 0x09, 0xa3, 0xfb, 0xb2, 0x5a, 0x56, 0xe9, 0xd1, 0xc8, 0x7f, 0xcc, 0x42, 0x2b, 0x51, 0x3f, 0xf5, 0xc9, 0x90, 0x4e, 0xe3, 0x94, 0xb9, 0x27, 0xe9, 0xe6, 0xa3, 0xdd, 0x9f, 0xaa, 0x12, 0x6a, 0x42, 0x16, 0x7d, 0x5d, 0x9f, 0x1b, 0xef, 0xa0, 0x6a, 0x86, 0x4d, 0xbe, 0xc4, 0x6b, 0x1d, 0x31, 0x74, 0x1b, 0x14, 0x18, 0x00, 0x12, 0x90, 0xa7, 0xc5, 0xb0, 0x28, 0x4a, 0xcd, 0xb6, 0x43, 0x6d, 0x00, 0x3b, 0xd6, 0x65, 0x0f, 0x99, 0xe6, 0x4b, 0xc5, 0xe0, 0xc4, 0x8d, 0xb0, 0x09, 0x41, 0xf8, 0x57, 0x1c, 0x4a, 0xaf, 0x20, 0xf1, 0x67, 0xb2, 0xa6, 0x39, 0xc8, 0xe5, 0x2f, 0x73, 0xb5, 0x42, 0x11, 0xe0, 0xc2, 0x19, 0xfa, 0x26, 0x52, 0x79, 0x84, 0x2b, 0x69, 0xd5, 0x2e, 0xf4, 0x30, 0x2d, 0xde, 0x11, 0x98, 0x00, 0xbc, 0xb2, 0xbc, 0xe8, 0xc8, 0xe3, 0x96, 0x20, 0x2e, 0x9e, 0xcd, 0x20, 0xfa, 0xef, 0xa5, 0x7b, 0x27, 0x2f, 0xeb, 0xa8, 0x0d, 0x94, 0x84, 0xd0, 0x15, 0xb2, 0xe5, 0xa4, 0x7d, 0x88, 0xa3, 0x98, 0x66, 0x66, 0x3f, 0x86, 0x42, 0x05, 0xd7, 0x25, 0xc8, 0xfb, 0xc8, 0x0f, 0x9a, 0x51, 0xe7, 0x8a, 0x3a, 0x0a, 0x88, 0x4a, 0x28, 0x69, 0xb2, 0x70, 0xa5, 0x82, 0xda, 0x59, 0x0a, 0x04, 0x68, 0x48, 0x29, 0x55, 0x5e, 0x2a, 0x16, 0x27, 0x88, 0x9a, 0xce, 0x95, 0x7d, 0x04, 0x41, 0x6c, 0xa9, 0x36, 0xa1, 0xf7, 0x30, 0x48, 0xb2, 0x56, 0xfb, 0x85, 0xc6, 0x25, 0xd0, 0xb8, 0x0d, 0x8a, 0x09, 0x24, 0xd9, 0xf0, 0x59, 0xa8, 0x99, 0xd6, 0x56, 0x67, 0x94, 0xb9, 0x30, 0x81, 0xca, 0x30, 0xea, 0x50, 0x64, 0x7f, 0xc5, 0x98, 0x8f, 0x36, 0xca, 0xb9, 0x3d, 0x4f, 0x5e, 0x26, 0x26, 0xe0, 0x34, 0x66, 0x7f, 0x87, 0x12, 0x9a, 0xf5, 0x26, 0xa2, 0xf7, 0x89, 0xf3, 0xe2, 0x5b, 0x4c, 0x9f, 0x91, 0x1d, 0x93, 0x76, 0xe9, 0xd8, 0x69, 0x1d, 0x57, 0xdc, 0x91, 0xa6, 0xf2, 0x21, 0xf4, 0x1d, 0x5a, 0x19, 0xdb, 0x2a, 0x1d, 0xbd, 0x24, 0xbd, 0x77, 0x72, 0x52, 0x5b, 0x85, 0xec, 0x2e, 0xa1, 0x31, 0x75, 0x8d, 0x60, 0xe3, 0x5c, 0x58, 0xbf, 0x02, 0x75, 0xea, 0x09, 0xdd, 0x45, 0x19, 0x00, 0x41, 0x5e, 0xe5, 0x7b, 0x46, 0xe7, 0xa8, 0x84, 0xd7, 0x28, 0xae, 0x53, 0x4e, 0x2d, 0x44, 0xf5, 0xda, 0x70, 0x96, 0xa3, 0x44, 0x86, 0xfd, 0x1e, 0x68, 0xea, 0x4c, 0xa0, 0x58, 0x33, 0x6b, 0x3c, 0x6a, 0x23, 0x81, 0xa3, 0xa8, 0x6f, 0x30, 0x39, 0xcb, 0xe9, 0x67, 0x0f, 0xc5, 0x21, 0x00, 0x61, 0xec, 0x20, 0x8f, 0xd8, 0x38, 0xc7, 0x6b, 0x3e, 0x7b, 0x66, 0x8c, 0x7b, 0x30, 0xf6, 0x28, 0x60, 0x61, 0xaa, 0xf3, 0x85, 0xc9, 0xc0, 0x56, 0x56, 0x41, 0x27, 0x01, 0x54, 0xb8, 0xa7, 0xab, 0xdf, 0x59, 0xf2, 0x24, 0xd5, 0xb3, 0x47, 0xe0, 0xa2, 0x06, 0x94, 0xb5, 0x01, 0x5e, 0x17, 0x43, 0x36, 0x73, 0xa6, 0x91, 0x05, 0xe6, 0x58, 0xda, 0x0c, 0x02, 0x7a, 0xa7, 0xeb, 0xce, 0x7a, 0xf2, 0x41, 0x7c, 0xc4, 0xcd, 0x7d, 0x29, 0x35, 0x46, 0xad, 0x93, 0x07, 0x54, 0x19, 0x57, 0xc0, 0x70, 0x94, 0x9b, 0xb3, 0x45, 0x83, 0x1a, 0x4f, 0x0b, 0x03, 0x78, 0x13, 0xca, 0xf5, 0x67, 0x50, 0xc3, 0x8f, 0x28, 0x6c, 0xce, 0x4a, 0x77, 0x20, 0x4d, 0xd7, 0x86, 0xae, 0xbc, 0x99, 0x98, 0x3a, 0xf0, 0x6b, 0x35, 0xbf, 0x7c, 0xe1, 0xe4, 0x26, 0xda, 0x72, 0x96, 0xd3, 0x58, 0xfd, 0x77, 0x1b, 0x06, 0x75, 0xd8, 0xd4, 0xab, 0xf4, 0x7e, 0x11, 0x4f, 0xbe, 0x16, 0xfb, 0xd4, 0x56, 0x1e, 0x02, 0xd5, 0xe3, 0x42, 0x0a, 0x14, 0x99, 0x69, 0xb5, 0x19, 0x4c, 0x12, 0x5d, 0x08, 0x65, 0xc4, 0x03, 0xc8, 0x60, 0x72, 0x6a, 0x84, 0x85, 0x81, 0x81, 0xa5, 0x61, 0x6e, 0x45, 0xf1, 0x13, 0x57, 0x27, 0x07, 0xd9, 0x67, 0x9e, 0xc4, 0x2d, 0x94, 0x72, 0xe1, 0xa8, 0xa3, 0x81, 0xbf, 0xb4, 0xc8, 0x9e, 0x86, 0x93, 0x82, 0x3f, 0xc5, 0xd3, 0x29, 0xa7, 0xe6, 0x02, 0x73, 0x62, 0xe1, 0xea, 0x9b, 0xe2, 0x13, 0xc3, 0xa8, 0x5e, 0xf5, 0xbc, 0xcb, 0xc7, 0xa2, 0x93, 0x1b, 0xf6, 0x6e, 0x10, 0x99, 0x60, 0x37, 0x19, 0x7c, 0xb2, 0xb8, 0xd8, 0xe8, 0x16, 0xe1, 0x42, 0x7b, 0x3f, 0x56, 0x4e, 0x82, 0x11, 0xee, 0x80, 0x15, 0x9a, 0xe9, 0xd0, 0xc3, 0x0a, 0x07, 0x91, 0x1e, 0xb6, 0x83, 0xf5, 0x28, 0x4c, 0xf2, 0x2d, 0x3c, 0x77, 0xa2, 0x8c, 0x0b, 0x41, 0xcb, 0xa5, 0xd4, 0xb4, 0x84, 0x82, 0xce, 0x15, 0xe0, 0x22, 0xed, 0x4c, 0x40, 0x7c, 0x4c, 0x7e, 0x72, 0x4b, 0xd9, 0x71, 0x51, 0x08, 0x38, 0x80, 0x35, 0xd8, 0x88, 0x7a, 0x4c, 0x6d, 0x45, 0xce, 0x59, 0x3a, 0x50, 0xaf, 0x6f, 0x99, 0x8a, 0x18, 0xae, 0xb0, 0xab, 0x31, 0x03, 0x3a, 0x7d, 0x0c, 0xd3, 0x62, 0x47, 0xb3, 0xa9, 0x62, 0x03, 0x69, 0x84, 0x5f, 0xba, 0x7e, 0x36, 0x31, 0x12, 0x95, 0xfa, 0x72, 0x1b, 0x05, 0x5e, 0x44, 0x95, 0xe2, 0x24, 0x4e, 0xe5, 0x6c, 0xdc, 0x6b, 0x28, 0x4b, 0x3f, 0xea, 0x1b, 0xad, 0x5c, 0xbb, 0x2b, 0x73, 0xe5, 0x9c, 0xab, 0x96, 0x6a, 0x76, 0x41, 0x88, 0x9a, 0x32, 0x99, 0x1c, 0x38, 0x36, 0x18, 0x16, 0xca, 0xaa, 0x11, 0xd4, 0x31, 0x88, 0x4d, 0x16, 0x1b, 0x52, 0x92, 0x27, 0x60, 0x24, 0xb3, 0xee, 0xe4, 0x76, 0x5b, 0xd1, 0x10, 0xbc, 0x2f, 0x86, 0xd6, 0x47, 0x60, 0x7c, 0x47, 0x24, 0x0a, 0x66, 0x45, 0xa6, 0x05, 0xde, 0x99, 0x06, 0xd2, 0xbe, 0x8d, 0xbd, 0x43, 0xe5, 0x68, 0x30, 0x54, 0xde, 0x8f, 0xaf, 0xea, 0x35, 0x82, 0xcd, 0x52, 0x06, 0x80, 0x6a, 0xa5, 0x16, 0xb1, 0x54, 0xb5, 0xcf, 0x64, 0x65, 0xd6, 0xff, 0x15, 0xa4, 0x29, 0x09, 0x7f, 0xb4, 0xe6, 0x3d, 0xa2, 0xb4, 0x4a, 0x54, 0xea, 0x1c, 0x1a, 0x2d, 0x50, 0x21, 0xd6, 0xf6, 0x19, 0x8c, 0x5a, 0x08, 0x67, 0xde, 0xb8, 0x88, 0xd5, 0x02, 0xa5, 0x6d, 0x49, 0x82, 0xf4, 0x2a, 0x3e, 0x6e, 0x80, 0x81, 0x04, 0x43, 0x24, 0x71, 0x47, 0x1b, 0x73, 0x16, 0x88, 0xc5, 0xac, 0x32, 0xce, 0x0a, 0x79, 0xb4, 0x18, 0x10, 0x8a, 0xc7, 0x4e, 0x2b, 0x4a, 0xa2, 0xb3, 0x27, 0xcf, 0x38, 0xd6, 0x3e, 0x5a, 0x08, 0x29, 0x2e, 0xf9, 0x48, 0x9e, 0xee, 0xa4, 0x6e, 0x42, 0xe0, 0x19, 0xf5, 0x4c, 0x58, 0x0c, 0x1b, 0x4c, 0x8a, 0x76, 0x29, 0x3e, 0x8d, 0x19, 0xa1, 0x67, 0x0f, 0x1c, 0x8d, 0x67, 0x19, 0x77, 0x52, 0x89, 0x35, 0x09, 0x00, 0x9c, 0x53, 0x01, 0xf8, 0x74, 0x7f, 0x7c, 0x40, 0xff, 0xdb, 0x7e, 0x15, 0x04, 0xad, 0xe4, 0x14, 0xaa, 0x70, 0xdd, 0xa1, 0xa9, 0x94, 0x9c, 0x55, 0xa1, 0x49, 0x5c, 0xde, 0x98, 0x3f, 0x58, 0x0e, 0x38, 0x6e, 0x1e, 0xa2, 0x37, 0x71, 0x44, 0x8c, 0x1d, 0x14, 0xc9, 0xd2, 0xb6, 0x9a, 0x25, 0x60, 0x77, 0x03, 0x92, 0x26, 0xe5, 0xda, 0x21, 0xd2, 0x0c, 0x32, 0xb1, 0x40, 0x7d, 0x89, 0x5a, 0xde, 0xdc, 0xe7, 0x4b, 0x8e, 0x92, 0xb8, 0xe2, 0xdd, 0x77, 0xae, 0x98, 0x13, 0x00, 0x25, 0x4c, 0xd3, 0x7d, 0x80, 0x16, 0x5d, 0x10, 0xe5, 0xb4, 0x32, 0xe8, 0x71, 0x91, 0xaa, 0x1c, 0x48, 0xc8, 0x68, 0x3e, 0xa2, 0xa2, 0xa6, 0x1a, 0x01, 0xfe, 0xa0, 0xff, 0x9c, 0xef, 0xd7, 0x1a, 0xe1, 0xb9, 0x11, 0x95, 0x0f, 0x94, 0xc5, 0x4d, 0x40, 0xe2, 0x45, 0x87, 0x22, 0x44, 0x6e, 0x69, 0x11, 0x13, 0xc7, 0x70, 0xa9, 0x76, 0x4e, 0x03, 0x1f, 0xa8, 0x9b, 0x1b, 0x60, 0x91, 0xd0, 0x89, 0x99, 0x77, 0x9f, 0xc5, 0x94, 0xac, 0x8a, 0xe2, 0x66, 0x09, 0xa8, 0x84, 0x41, 0x13, 0x68, 0x41, 0x2f, 0xf6, 0xab, 0x7f, 0xa7, 0xd3, 0xe7, 0xa3, 0x2e, 0x15, 0x00, 0xe8, 0x9b, 0x43, 0x9a, 0x89, 0x34, 0x38, 0xdb, 0x8c, 0x7b, 0x00, 0xba, 0x0f, 0x32, 0x49, 0x31, 0x64, 0xf4, 0x72, 0xa7, 0x9c, 0x92, 0x4a, 0x33, 0x66, 0x74, 0xab, 0xd7, 0x49, 0x03, 0xf0, 0xe4, 0x6e, 0x86, 0xbd, 0xc4, 0x10, 0xf7, 0xc3, 0xf5, 0x4f, 0xed, 0x1a, 0x6c, 0xf9, 0xac, 0xbe, 0xa8, 0x7d, 0x4b, 0x4c, 0xc2, 0x04, 0x26, 0xa9, 0xc7, 0x97, 0x43, 0x52, 0xbf, 0xc8, 0x8a, 0x32, 0x17, 0x99, 0x13, 0x47, 0x41, 0x6b, 0xde, 0x6e, 0x86, 0x57, 0x5a, 0x45, 0xaa, 0x1b, 0xe4, 0x68, 0xe3, 0xbb, 0x21, 0xb9, 0x2d, 0x89, 0xf0, 0xb6, 0x76, 0x44, 0x47, 0xc6, 0x8d, 0xe3, 0x9a, 0x72, 0xaa, 0xa5, 0xe5, 0x93, 0x30, 0x35, 0x86, 0x1e, 0x47, 0x48, 0x11, 0x61, 0x4a, 0x7b, 0x36, 0x60, 0x3d, 0x51, 0x97, 0xc2, 0x7b, 0x5a, 0xb9, 0x8a, 0x0d, 0x3d, 0xc1, 0xef, 0x1e, 0x6f, 0xe0, 0x52, 0x12, 0x21, 0x6f, 0x39, 0x52, 0x29, 0x06, 0xaa, 0xe7, 0x71, 0x64, 0x4b, 0x1e, 0x2b, 0x23, 0x54, 0xd8, 0x90, 0x2b, 0xf1, 0x83, 0x17, 0x84, 0xa1, 0x29, 0xa6, 0xd2, 0x07, 0x66, 0x5a, 0xe4, 0x0d, 0x6f, 0x96, 0x45, 0x63, 0x56, 0xe9, 0xfd, 0xb9, 0xc7, 0x90, 0x38, 0x84, 0x91, 0xb6, 0x10, 0x1a, 0xc4, 0x96, 0x64, 0xed, 0x32, 0x71, 0xf5, 0x4f, 0x41, 0x3a, 0x6b, 0x00, 0x6d, 0x7d, 0xad, 0xb4, 0xf7, 0x1e, 0x95, 0x20, 0x1d, 0x5b, 0xc5, 0x90, 0xba, 0xce, 0x68, 0x42, 0xd4, 0x88, 0x14, 0x17, 0x3e, 0x68, 0x27, 0x23, 0xeb, 0x1b, 0x0a, 0x8c, 0xa8, 0xe9, 0x55, 0xb5, 0x46, 0xef, 0x88, 0x82, 0xd0, 0x65, 0x36, 0x28, 0x9b, 0x5c, 0x17, 0xc5, 0x0f, 0x45, 0x07, 0x27, 0x84, 0x66, 0xa2, 0x49, 0x17, 0x35, 0x7a, 0xa2, 0x0d, 0xf4, 0x5d, 0xf5, 0x47, 0x86, 0xfd, 0x36, 0x74, 0xc4, 0x65, 0xf7, 0xf7, 0x6c, 0xa0, 0x13, 0x4d, 0x66, 0x52, 0x03, 0xf2, 0x4a, 0x12, 0xc3, 0xb4, 0xc6, 0x95, 0xd1, 0x1b, 0xcb, 0xcb, 0xed, 0xb0, 0x7a, 0xe0, 0x9b, 0xd5, 0xe9, 0xc9, 0x1a, 0x2a, 0xf8, 0x25, 0xc5, 0xef, 0xbb, 0x84, 0x4f, 0xa2, 0xb4, 0x67, 0xac, 0x39, 0xa8, 0x6a, 0x10, 0x5c, 0x4d, 0x98, 0x23, 0xc4, 0x22, 0xd5, 0x68, 0x97, 0x4f, 0xb1, 0x21, 0xfb, 0x20, 0x28, 0xf0, 0x8a, 0x65, 0x77, 0xf4, 0xfa, 0xa0, 0x29, 0xec, 0xc5, 0xc9, 0x74, 0xaa, 0x2c, 0xbb, 0x15, 0xba, 0xb4, 0x7d, 0x1c, 0xab, 0x1b, 0x05, 0xbc, 0xd7, 0xc8, 0x90, 0x3f, 0x0b, 0x5f, 0xef, 0xa0, 0xa5, 0x68, 0xbb, 0x7a, 0xcd, 0x6b, 0x4b, 0xfe, 0xb8, 0x77, 0xdf, 0xc6, 0x9d, 0x48, 0x63, 0x11, 0x35, 0x4b, 0x69, 0x98, 0x77, 0x60, 0x74, 0x03, 0x21, 0xdf, 0x79, 0xd7, 0x64, 0x1c, 0x6d, 0x05, 0x59, 0xf8, 0x93, 0xef, 0xc5, 0x16, 0x34, 0xc4, 0x67, 0x61, 0xa5, 0xfa, 0xb2, 0x7b, 0x1a, 0x29, 0xbb, 0x63, 0xa2, 0x5d, 0x3a, 0x1d, 0x78, 0x98, 0xb2, 0x80, 0x74, 0x67, 0x80, 0x27, 0x07, 0x84, 0x60, 0x38, 0x86, 0x94, 0x11, 0xf6, 0xec, 0x71, 0x71, 0x0a, 0x57, 0xa0, 0x85, 0x24, 0xc4, 0xae, 0x9c, 0xd0, 0x61, 0x31, 0xdb, 0x8a, 0x33, 0xc9, 0x50, 0x0d, 0x78, 0xc3, 0xd4, 0x07, 0xd3, 0x18, 0x1d, 0xc7, 0x2a, 0x4a, 0xbb, 0x45, 0x13, 0x3c, 0x0a, 0x8d, 0x68, 0x29, 0xa2, 0x2b, 0x0b, 0xa3, 0x99, 0x89, 0x34, 0x2d, 0x0b, 0xcd, 0x26, 0x7d, 0x55, 0x19, 0x0a, 0x21, 0x38, 0x88, 0x8a, 0x6d, 0x0b, 0x77, 0x20, 0xb7, 0x23, 0x1d, 0xc5, 0x22, 0x4b, 0xaf, 0xce, 0xe8, 0xe0, 0x99, 0x26, 0x0f, 0x62, 0xf7, 0x9a, 0x34, 0x54, 0x5c, 0x6b, 0x97, 0x11, 0xe8, 0x3b, 0x0c, 0x9b, 0xf0, 0x09, 0x14, 0xc8, 0x61, 0x10, 0x7f, 0x41, 0x47, 0xfe, 0x77, 0x7b, 0x5e, 0xa4, 0x03, 0x6a, 0xc6, 0xd9, 0x28, 0x99, 0x90, 0xd2, 0x10, 0x79, 0x45, 0x70, 0xdd, 0x69, 0xdc, 0x41, 0x59, 0xa0, 0xa9, 0x29, 0x11, 0xc5, 0x6d, 0xc3, 0x48, 0x92, 0xae, 0x04, 0x1d, 0xdb, 0x53, 0x84, 0x9a, 0x6c, 0x8d, 0xca, 0x03, 0x13, 0x67, 0x10, 0x02, 0xbd, 0x66, 0x84, 0xdd, 0x47, 0x22, 0xd5, 0xad, 0x58, 0xe9, 0x97, 0x8b, 0x13, 0x16, 0x4c, 0x74, 0xea, 0x2e, 0xe1, 0x3b, 0x69, 0x7a, 0x37, 0x9c, 0x1d, 0xcb, 0x0f, 0x0c, 0xbc, 0x22, 0x18, 0x61, 0x80, 0x54, 0x95, 0x6c, 0x1c, 0x22, 0xbc, 0xa1, 0xa4, 0x61, 0x3c, 0x66, 0x5c, 0x5f, 0x74, 0x08, 0xf4, 0xa6, 0x03, 0x05, 0xb5, 0xc6, 0xee, 0x71, 0x69, 0xcf, 0x85, 0xdc, 0x96, 0xe0, 0x0c, 0x8b, 0x83, 0xd9, 0x98, 0x49, 0xc5, 0x50, 0xab, 0x31, 0xd9, 0x58, 0x60, 0x93, 0x8c, 0x12, 0x69, 0x86, 0xd8, 0x27, 0xad, 0xfc, 0x1b, 0x82, 0x4d, 0x1c, 0xe7, 0xd0, 0x8a, 0xb2, 0x7c, 0x48, 0xbe, 0x56, 0x4a, 0x91, 0xb9, 0x32, 0x19, 0x13, 0xf2, 0x24, 0xb2, 0x61, 0x77, 0x11, 0x47, 0xc9, 0xe7, 0xc4, 0x00, 0xad, 0x0d, 0x4e, 0xba, 0xa5, 0xf9, 0x4c, 0x17, 0x2f, 0x9b, 0xd1, 0x2a, 0xce, 0x21, 0x45, 0x99, 0xf3, 0x08, 0xb2, 0x64, 0x08, 0x0c, 0x50, 0x68, 0x58, 0xed, 0xa0, 0xb8, 0xf0, 0xa7, 0xb3, 0x41, 0x06, 0x28, 0x12, 0x5a, 0x06, 0x03, 0x53, 0xb0, 0x85, 0x4e, 0x07, 0xe0, 0x49, 0x76, 0x07, 0x15, 0x1b, 0x3f, 0x0a, 0x4f, 0x05, 0xee, 0x51, 0x33, 0x87, 0x65, 0x76, 0x41, 0xcb, 0xdc, 0x05, 0x8b, 0x4b, 0x55, 0x60, 0xcb, 0xe5, 0x46, 0x53, 0x14, 0x17, 0x98, 0x7e, 0x71, 0x42, 0x65, 0x2d, 0x3c, 0x05, 0x0b, 0x02, 0x7d, 0x3a, 0x93, 0x3f, 0xd3, 0xea, 0x68, 0x91, 0x08, 0x61, 0xb1, 0x86, 0x50, 0x4e, 0x27, 0xc5, 0x24, 0x6c, 0x72, 0x78, 0x26, 0xae, 0xde, 0x18, 0x98, 0x11, 0xad, 0xb4, 0xab, 0x98, 0xdc, 0x6a, 0x8b, 0x9a, 0x66, 0x81, 0x31, 0x91, 0x69, 0x59, 0xcf, 0x78, 0x5b, 0xc8, 0x9a, 0x3b, 0x36, 0x2e, 0xfe, 0x1d, 0x88, 0x0b, 0xe0, 0x39, 0xb7, 0x5d, 0x67, 0xc6, 0x87, 0x59, 0x2b, 0x6a, 0x45, 0x8e, 0xbd, 0x00, 0x0b, 0x78, 0xb1, 0x68, 0x58, 0x18, 0xcb, 0x2c, 0x27, 0x16, 0x48, 0xa5, 0x38, 0x4f, 0x03, 0x76, 0x3d, 0x4c, 0x46, 0x46, 0x0c, 0x6a, 0xe1, 0xba, 0x85, 0xb1, 0xea, 0xe9, 0x3c, 0x11, 0x88, 0xe1, 0x66, 0x07, 0xca, 0x70, 0x28, 0x04, 0x01, 0x44, 0x2b, 0x80, 0x30, 0x2b, 0x96, 0x65, 0x1f, 0xb2, 0x57, 0x4b, 0x02, 0x3d, 0x5e, 0x01, 0x45, 0xc5, 0xa7, 0x34, 0x0a, 0xc5, 0x14, 0xfe, 0x2d, 0x31, 0x80, 0xf3, 0xed, 0x96, 0x9d, 0xca, 0x50, 0x7a, 0x51, 0x3d, 0x64, 0xa5, 0xd5, 0x70, 0x60, 0x26, 0x30, 0x45, 0xa5, 0x13, 0x89, 0x13, 0xcc, 0xec, 0x48, 0x25, 0xd6, 0x70, 0x21, 0xa2, 0x92, 0x78, 0x35, 0xdb, 0xa0, 0x58, 0x2e, 0x9a, 0xb3, 0x61, 0xd1, 0x47, 0x31, 0x2c, 0x38, 0xad, 0x61, 0x54, 0xde, 0x6b, 0x00, 0x19, 0xb3, 0x2e, 0xa1, 0x32, 0xd6, 0xed, 0x42, 0x2e, 0xc8, 0x2a, 0xc0, 0x66, 0x6d, 0x99, 0x21, 0x0a, 0x27, 0x6c, 0xe5, 0xb9, 0x54, 0x4d, 0xec, 0x46, 0x2f, 0x25, 0xe7, 0x55, 0x88, 0x0a, 0x91, 0x8e, 0x14, 0xca, 0x84, 0x14, 0xd6, 0x40, 0x32, 0xe1, 0x03, 0xe8, 0xb1, 0x90, 0x0c, 0x0d, 0x56, 0x13, 0xb8, 0x1c, 0x28, 0x26, 0x5a, 0x06, 0x76, 0x70, 0x77, 0x14, 0xee, 0x83, 0xe1, 0x6f, 0x1d, 0x7a, 0x87, 0x54, 0x82, 0x1b, 0x9e, 0x55, 0x50, 0x7a, 0xd7, 0x7b, 0x93, 0xa5, 0x9e, 0x0b, 0xbe, 0x1d, 0x10, 0xc5, 0x2a, 0xfe, 0xa4, 0xab, 0x94, 0xd2, 0xe6, 0xb0, 0xe9, 0x75, 0xba, 0x4a, 0x65, 0x05, 0x52, 0xbc, 0x94, 0xae, 0x56, 0x33, 0x84, 0xee, 0x52, 0x46, 0x73, 0x99, 0xca, 0xa9, 0x4d, 0x64, 0x0a, 0x07, 0xec, 0x77, 0x38, 0xd0, 0xc0, 0x1f, 0xaf, 0x58, 0x0a, 0xf4, 0xa4, 0x0a, 0x72, 0x62, 0x9c, 0xfc, 0xc6, 0xf0, 0x20, 0x5c, 0xc2, 0x48, 0x49, 0x79, 0x00, 0x05, 0x5d, 0xf8, 0xa9, 0x67, 0x9a, 0xb0, 0x80, 0x24, 0x5e, 0x94, 0xd8, 0x01, 0xcc, 0x31, 0x75, 0x11, 0x0a, 0x6f, 0x43, 0xac, 0xad, 0x0b, 0x26, 0xd2, 0x7a, 0x3b, 0x01, 0xe0, 0x25, 0x87, 0x45, 0xe7, 0x6a, 0xe5, 0x36, 0x1d, 0x6f, 0x69, 0xcf, 0xcb, 0x1c, 0xda, 0x67, 0x3f, 0x59, 0x38, 0xa7, 0x9e, 0xf0, 0x8e, 0xb1, 0x91, 0xd5, 0x29, 0xa5, 0x31, 0x8c, 0x6d, 0xee, 0xba, 0xb1, 0x3a, 0xc8, 0x07, 0x29, 0xad, 0x8d, 0xc0, 0x54, 0x68, 0x17, 0x2e, 0x9c, 0xd0, 0x21, 0xcf, 0x1c, 0x87, 0xaf, 0x8f, 0x68, 0xf1, 0x8d, 0x19, 0x23, 0xe8, 0x6c, 0x78, 0x3a, 0x5f, 0x80, 0x90, 0x0f, 0x4a, 0x6d, 0xa0, 0xc4, 0x8a, 0x58, 0x36, 0xa5, 0x1f, 0x04, 0x2e, 0x6a, 0x14, 0x3e, 0xce, 0x7e, 0xc6, 0xe2, 0x65, 0x67, 0x5c, 0xcc, 0xde, 0x5b, 0xfb, 0xac, 0xa3, 0xc7, 0x83, 0x31, 0xc6, 0x11, 0xa6, 0xbd, 0x70, 0x68, 0x42, 0x55, 0x87, 0x39, 0x3b, 0xfe, 0x96, 0x7f, 0x93, 0x49, 0xbc, 0x49, 0xd6, 0xc9, 0x8a, 0x93, 0xe9, 0xa0, 0x9c, 0x41, 0xd6, 0x7f, 0x82, 0x01, 0xc6, 0x4e, 0x31, 0xa0, 0x35, 0x84, 0x5a, 0xbd, 0x4d, 0xb0, 0x6f, 0xf5, 0xc9, 0x83, 0x06, 0x2c, 0x82, 0xdd, 0x55, 0xdb, 0x13, 0x1a, 0x0a, 0xfa, 0xe2, 0x0f, 0x98, 0xcb, 0x1e, 0x8e, 0x3e, 0xa2, 0x39, 0x63, 0x2e, 0x85, 0x0c, 0xf6, 0x6c, 0x00, 0x89, 0xe3, 0x5d, 0x14, 0x22, 0x13, 0x5b, 0x56, 0xbc, 0x90, 0xb3, 0xe3, 0xd3, 0x8f, 0xf2, 0x3d, 0x76, 0x0f, 0x51, 0xaf, 0x6a, 0xab, 0x04, 0xbe, 0x4b, 0x97, 0x6d, 0x51, 0xeb, 0x6b, 0x00, 0x8d, 0xfd, 0xdd, 0xfc, 0x35, 0x80, 0xd0, 0x1c, 0x0d, 0x9c, 0xe2, 0x68, 0x60, 0xfc, 0x80, 0xdb, 0xa5, 0x14, 0x41, 0x90, 0x4c, 0x57, 0xfe, 0x61, 0x82, 0x76, 0x4a, 0x1d, 0x0f, 0xfb, 0x97, 0xa7, 0x54, 0xb5, 0x14, 0x15, 0xda, 0xd9, 0x5b, 0x94, 0x93, 0xd4, 0x5a, 0x85, 0xd3, 0xd9, 0xa1, 0xeb, 0xd0, 0xa9, 0xa2, 0xe7, 0x1c, 0x39, 0x56, 0xc8, 0x7e, 0x5e, 0xa7, 0xb5, 0x35, 0xd7, 0xfe, 0x31, 0xc1, 0xc1, 0x30, 0x59, 0x63, 0xc8, 0x92, 0xc1, 0x43, 0xa9, 0x33, 0xc4, 0xdd, 0x16, 0x29, 0xef, 0x95, 0xe8, 0x46, 0x16, 0xa9, 0x9d, 0x25, 0x60, 0x37, 0xd1, 0xde, 0x2b, 0xae, 0x13, 0xa5, 0x00, 0x9a, 0x65, 0x10, 0xd4, 0x93, 0xad, 0x16, 0x3e, 0xf1, 0xa1, 0x6d, 0x57, 0x36, 0x40, 0xdc, 0x4c, 0x32, 0x00, 0x5c, 0x12, 0x88, 0x14, 0x9a, 0x2c, 0x21, 0xd2, 0xc9, 0x47, 0xfc, 0x80, 0x30, 0xf7, 0x49, 0x9d, 0x64, 0x7f, 0x96, 0x54, 0x8a, 0x53, 0xba, 0x42, 0xdf, 0x51, 0x38, 0x9f, 0xdf, 0xc2, 0xbb, 0x12, 0xf8, 0xb5, 0xe4, 0x87, 0x68, 0x52, 0x9b, 0x61, 0x2d, 0xcc, 0x07, 0xfa, 0x82, 0xa8, 0x24, 0x67, 0x55, 0x1e, 0xd7, 0x18, 0x33, 0x94, 0x3c, 0xda, 0x12, 0xe9, 0xe9, 0x59, 0x88, 0x02, 0xa8, 0x82, 0x7e, 0x33, 0xa4, 0xb9, 0x6a, 0xd0, 0x0a, 0xc5, 0x49, 0x86, 0x9a, 0xbd, 0x84, 0x94, 0x0a, 0xa7, 0x8a, 0x38, 0xbf, 0x49, 0xa5, 0xa8, 0x95, 0x41, 0xb2, 0x1b, 0x6c, 0x54, 0x6e, 0x7b, 0xcb, 0x00, 0x7c, 0xbe, 0xad, 0xde, 0x46, 0x15, 0x8e, 0x6f, 0x51, 0x98, 0x68, 0x92, 0x29, 0x0c, 0x3f, 0x44, 0x9e, 0xce, 0x33, 0x9b, 0x24, 0x8f, 0x54, 0x9b, 0x94, 0xb5, 0x04, 0x46, 0x1c, 0xe1, 0x88, 0xe8, 0x24, 0x0c, 0xb9, 0x69, 0x8a, 0x68, 0x66, 0xa1, 0x40, 0x49, 0x69, 0x12, 0x9c, 0xdc, 0x05, 0x85, 0xa0, 0x89, 0x9a, 0x1e, 0xdb, 0x6b, 0x3f, 0x40, 0x2c, 0x4f, 0xa7, 0xb0, 0xf7, 0xdc, 0xa4, 0x2c, 0x6d, 0x21, 0xc4, 0x40, 0x4b, 0xb5, 0x76, 0x77, 0x63, 0xa7, 0xeb, 0x77, 0x1c, 0x35, 0x87, 0x17, 0x17, 0x87, 0x90, 0x78, 0x2f, 0x7f, 0xa5, 0x34, 0x82, 0x93, 0xc4, 0xb4, 0x4a, 0x86, 0xc5, 0x20, 0x33, 0x08, 0xb0, 0x1a, 0x9b, 0x5b, 0xd1, 0x77, 0x95, 0x2d, 0xa2, 0x9c, 0xa5, 0xd5, 0x13, 0x09, 0x78, 0x5a, 0x62, 0xf3, 0xf3, 0x6a, 0x59, 0x7f, 0x6e, 0x82, 0x83, 0x60, 0x72, 0x79, 0xb6, 0x09, 0x54, 0x7f, 0x69, 0x0d, 0x65, 0x06, 0x13, 0x9d, 0xbf, 0x6b, 0x58, 0xa8, 0x1a, 0x7e, 0xce, 0xb7, 0x80, 0xbf, 0xb9, 0xac, 0x92, 0xa8, 0x13, 0xd3, 0x9c, 0x45, 0x55, 0x0a, 0x5a, 0xe2, 0xb8, 0xe2, 0x3e, 0xac, 0x93, 0x4f, 0xb4, 0xe3, 0xfa, 0xb0, 0xa7, 0xce, 0xe0, 0x5c, 0x72, 0xf1, 0x75, 0xa7, 0x2a, 0x55, 0xaf, 0x2a, 0x44, 0x9c, 0x00, 0xad, 0x04, 0xea, 0x69, 0x7e, 0xac, 0x9f, 0x40, 0x12, 0x86, 0xc3, 0xe5, 0xa2, 0x19, 0x0e, 0x89, 0x57, 0x96, 0x08, 0x6c, 0x1c, 0x9e, 0x5c, 0xf1, 0xc2, 0x63, 0xbc, 0x25, 0x35, 0x5c, 0xa2, 0xb5, 0xc8, 0xa8, 0x40, 0x02, 0x2d, 0x76, 0x4b, 0x6b, 0xca, 0x9a, 0xc8, 0xc8, 0x6e, 0xf9, 0x99, 0xcd, 0x8a, 0xae, 0x47, 0x9a, 0xba, 0xca, 0x4c, 0x81, 0x14, 0xd4, 0x82, 0x21, 0x53, 0xcd, 0x80, 0x8a, 0x92, 0x9a, 0xba, 0x12, 0x64, 0x80, 0x1d, 0x0b, 0x0f, 0xe2, 0xd1, 0x9e, 0x3b, 0x64, 0x6c, 0xdb, 0x27, 0x19, 0x8a, 0x3e, 0xd5, 0x43, 0x81, 0x90, 0x67, 0x0e, 0x04, 0x41, 0x1c, 0xcf, 0x52, 0x56, 0x1d, 0x77, 0x9b, 0x6a, 0x74, 0x89, 0xe6, 0xc1, 0x97, 0xb2, 0x23, 0x46, 0x74, 0xb2, 0xc8, 0x2c, 0x76, 0x8f, 0xa6, 0xd4, 0x88, 0xaa, 0x71, 0xcb, 0x4b, 0x57, 0x1b, 0xf0, 0x08, 0x88, 0x04, 0x22, 0x5a, 0xf8, 0x03, 0x99, 0x56, 0x72, 0xc2, 0xf7, 0x15, 0x51, 0x76, 0x26, 0x12, 0x9e, 0xc4, 0xa6, 0x38, 0xec, 0x58, 0xb2, 0x2c, 0x77, 0x66, 0x48, 0x05, 0x90, 0x61, 0x05, 0x71, 0x6a, 0x70, 0x26, 0x9d, 0x09, 0x1b, 0xcb, 0x57, 0x1d, 0x70, 0x35, 0x5c, 0xdd, 0xaf, 0x01, 0xd3, 0x79, 0x73, 0x96, 0x0f, 0xc1, 0x69, 0xa2, 0xed, 0xa2, 0x7e, 0x24, 0x87, 0x76, 0x13, 0x86, 0x74, 0x62, 0x1a, 0xed, 0x37, 0xa8, 0x54, 0x31, 0x57, 0x5a, 0xeb, 0x9a, 0x1f, 0xc8, 0xb3, 0xc3, 0x2e, 0x57, 0x19, 0x6c, 0x59, 0x81, 0x34, 0x9b, 0x36, 0x6b, 0xa6, 0x88, 0x74, 0x58, 0x22, 0x8a, 0x27, 0xdd, 0xe5, 0x97, 0x51, 0x69, 0x7c, 0xb2, 0x65, 0xa2, 0x3f, 0x2f, 0x25, 0x85, 0x74, 0x20, 0x7e, 0x98, 0xed, 0x52, 0x99, 0x75, 0x5a, 0xa5, 0x05, 0x6f, 0x9a, 0x6f, 0x75, 0xc4, 0xcc, 0x97, 0x56, 0x1f, 0xb4, 0x29, 0xe3, 0xed, 0x30, 0xe9, 0xa0, 0xae, 0x07, 0xb2, 0xe2, 0x24, 0x6c, 0x0d, 0xb8, 0x6b, 0x73, 0x4c, 0x8e, 0x51, 0xd1, 0x32, 0xa1, 0x65, 0xda, 0x96, 0x47, 0xec, 0x24, 0x0a, 0x1a, 0xfe, 0xb5, 0x31, 0x14, 0x59, 0x8a, 0x19, 0x8e, 0x74, 0x98, 0x5c, 0xf6, 0x04, 0xb5, 0xc9, 0x10, 0x0b, 0x8d, 0xfb, 0x68, 0x1c, 0x46, 0x3b, 0x04, 0x9e, 0x6f, 0x07, 0x15, 0x89, 0x28, 0x4e, 0xdc, 0x9e, 0xe6, 0x9f, 0x95, 0x7e, 0x5d, 0xd9, 0xc2, 0xf1, 0xb4, 0x0e, 0x36, 0x5d, 0xa3, 0x8a, 0xb9, 0xe5, 0x1c, 0x0c, 0x25, 0x6e, 0x3b, 0xe5, 0x58, 0x30, 0x01, 0x03, 0x9a, 0xbf, 0x90, 0x53, 0x5d, 0x03, 0x00, 0x19, 0x16, 0x15, 0xa3, 0xa0, 0x89, 0x13, 0x27, 0x7b, 0x47, 0xbd, 0x80, 0x6a, 0x9d, 0x9d, 0x83, 0x29, 0x27, 0x0e, 0x38, 0x7f, 0x98, 0x4e, 0x94, 0x82, 0x04, 0x4f, 0x3e, 0x68, 0x0e, 0xb3, 0x2a, 0xf1, 0x21, 0x77, 0x6a, 0x02, 0xc5, 0x49, 0x56, 0x07, 0x24, 0xd8, 0xdc, 0x89, 0x88, 0xe8, 0x7b, 0x21, 0xce, 0x8e, 0xf8, 0x7f, 0xae, 0x04, 0x4d, 0xa8, 0x85, 0x7a, 0x2e, 0x90, 0x54, 0x0d, 0x65, 0x22, 0x2b, 0x0c, 0x4e, 0xaa, 0x60, 0x82, 0x04, 0x66, 0x7e, 0x14, 0x8d, 0xeb, 0x27, 0x69, 0x3a, 0xb9, 0xea, 0x95, 0xea, 0x97, 0x31, 0x2b, 0xdd, 0x4c, 0x23, 0xd9, 0x0f, 0x63, 0x98, 0xfc, 0xfc, 0x49, 0xd5, 0x8e, 0xd4, 0x64, 0x87, 0x7c, 0x58, 0x2c, 0x49, 0x6b, 0x49, 0x83, 0x8d, 0x97, 0x20, 0xe1, 0x15, 0x79, 0x94, 0xb0, 0x6f, 0x5b, 0x07, 0x39, 0xc4, 0x96, 0xee, 0x87, 0x88, 0xa2, 0x88, 0x2a, 0x11, 0x0c, 0x1a, 0x0f, 0x41, 0xc9, 0xf3, 0x42, 0xe8, 0x05, 0xe4, 0x2e, 0x0a, 0x39, 0xce, 0x81, 0x3b, 0x36, 0x53, 0xf1, 0x19, 0x7c, 0x84, 0x5d, 0xa6, 0x17, 0x94, 0x3a, 0x51, 0x44, 0x78, 0x09, 0xdf, 0xc3, 0xc9, 0x7b, 0x38, 0x4c, 0xc6, 0x9a, 0xe3, 0x54, 0xa8, 0x3d, 0x8f, 0xc3, 0xde, 0xfb, 0x77, 0x7c, 0x21, 0x9a, 0x86, 0x54, 0x99, 0x83, 0x68, 0x59, 0x2f, 0x95, 0x91, 0xea, 0xe4, 0x5e, 0x24, 0x71, 0x72, 0xd8, 0xba, 0x06, 0x4f, 0x8d, 0x7b, 0x43, 0x6a, 0x8a, 0x91, 0xdd, 0x70, 0xae, 0x03, 0x84, 0x36, 0x91, 0x4e, 0xad, 0x90, 0x72, 0x06, 0xdd, 0x7b, 0x09, 0x21, 0x28, 0xd0, 0x08, 0x2d, 0x92, 0xd8, 0x2e, 0x33, 0x1d, 0xa9, 0xdc, 0x14, 0x63, 0x05, 0x5c, 0x1a, 0xd6, 0x16, 0x50, 0x6d, 0x5e, 0xaa, 0x53, 0x25, 0xb3, 0xea, 0x11, 0x2d, 0xa2, 0xaf, 0x41, 0x14, 0x36, 0x3c, 0x84, 0x49, 0xbd, 0x95, 0x55, 0x94, 0x22, 0x54, 0x72, 0x38, 0x49, 0x9f, 0xfa, 0x59, 0x6c, 0x44, 0xc7, 0xe3, 0x9b, 0xba, 0x18, 0x1a, 0xa7, 0x43, 0x61, 0xf7, 0x6b, 0xc2, 0x76, 0x18, 0x73, 0x8d, 0xe3, 0xe3, 0xdf, 0xa9, 0x27, 0xe2, 0x1c, 0x79, 0xc9, 0x43, 0x96, 0xaa, 0x27, 0x05, 0xff, 0x93, 0x32, 0xd9, 0x9a, 0x76, 0x23, 0x46, 0xf2, 0x5b, 0x89, 0x40, 0xb7, 0x05, 0x3c, 0x22, 0x26, 0x39, 0x80, 0xf6, 0x65, 0x1a, 0x22, 0x89, 0x90, 0x59, 0xe2, 0x48, 0x2d, 0xfb, 0xdc, 0xd1, 0xb6, 0x72, 0xa9, 0xba, 0xc1, 0x1e, 0x29, 0xa4, 0x91, 0xdc, 0x91, 0xd5, 0xaa, 0xd9, 0x01, 0xbf, 0x8e, 0x47, 0xb8, 0xd0, 0x19, 0x93, 0x25, 0x58, 0x50, 0x80, 0xd5, 0x00, 0xbf, 0xdc, 0xd1, 0x2a, 0x15, 0xba, 0x21, 0x8b, 0x48, 0xc0, 0xd1, 0x11, 0xd0, 0xdc, 0x5c, 0x6e, 0x21, 0xa4, 0xd8, 0x6b, 0x18, 0x7d, 0xd0, 0x8c, 0xc1, 0x15, 0xb1, 0xd2, 0x14, 0x2b, 0x40, 0x67, 0x2b, 0x3a, 0xfd, 0x28, 0x72, 0x09, 0x55, 0x72, 0x4e, 0x28, 0x98, 0xf6, 0x14, 0x0d, 0x81, 0xb7, 0x3e, 0x34, 0x06, 0xd1, 0x27, 0x87, 0xf8, 0x42, 0x20, 0x5e, 0x06, 0x96, 0xc7, 0xf9, 0x88, 0x6b, 0x89, 0x98, 0x4a, 0x4b, 0xd1, 0xf4, 0x12, 0x4d, 0x85, 0xd5, 0x46, 0xdd, 0x90, 0x0e, 0x9f, 0x13, 0x53, 0x84, 0xd5, 0xa6, 0x5d, 0xf2, 0x0a, 0x86, 0xa0, 0xa7, 0x49, 0x0c, 0x1d, 0x11, 0x54, 0x4b, 0xc3, 0xdd, 0x07, 0x4d, 0x44, 0x4d, 0x51, 0x06, 0xdd, 0x7a, 0x29, 0xe6, 0xa9, 0xf1, 0xa8, 0xfc, 0x70, 0xb1, 0x49, 0x84, 0xd1, 0xa0, 0xac, 0x94, }; -uint8_t A_bpoly_MIDSEC[9*NEWHOPE_POLYBYTES] = { +uint8_t A_bpoly_MIDSEC[9*NEWHOPE_RINGCT20_POLYBYTES] = { 0x32, 0xca, 0xd3, 0x14, 0x15, 0x0d, 0x4d, 0xc3, 0x81, 0x6f, 0x3b, 0xef, 0xc8, 0x3c, 0xc7, 0xe7, 0x8f, 0x77, 0xf8, 0xde, 0x5d, 0xb0, 0xdc, 0xb5, 0x62, 0x90, 0x26, 0x12, 0xce, 0x0d, 0xdd, 0x05, 0xe5, 0xd1, 0xb5, 0xb9, 0xec, 0x60, 0x29, 0x85, 0x54, 0x81, 0xe8, 0x5c, 0x26, 0x18, 0x1c, 0x4d, 0x79, 0xa1, 0x2e, 0x4a, 0x6b, 0xba, 0x3c, 0x1b, 0xb6, 0x5f, 0x4a, 0xc3, 0xd1, 0xc6, 0x67, 0xf2, 0x98, 0x23, 0xe4, 0x30, 0x26, 0x11, 0xbd, 0xc7, 0xe3, 0x44, 0x26, 0x92, 0x7b, 0xed, 0x9f, 0xda, 0x17, 0xc3, 0x42, 0x1d, 0xb1, 0xcd, 0xa1, 0xcb, 0x03, 0xfc, 0x76, 0xe8, 0x83, 0x66, 0xb4, 0x4b, 0xee, 0x0f, 0x1f, 0x4a, 0x7b, 0x70, 0xc7, 0x48, 0x37, 0x40, 0x96, 0xb1, 0x65, 0xed, 0xca, 0x10, 0x63, 0x0f, 0xf6, 0x5a, 0x55, 0x1d, 0xaf, 0x75, 0xcd, 0xf0, 0x75, 0x73, 0x9a, 0x9a, 0xa7, 0x45, 0x6f, 0xd5, 0xb0, 0x74, 0xa6, 0xe6, 0xc0, 0x88, 0xe0, 0x79, 0x70, 0x97, 0x18, 0xa2, 0x1f, 0x16, 0x1c, 0x94, 0x42, 0xe0, 0x21, 0xab, 0xaa, 0x27, 0x0c, 0x7c, 0x28, 0x1f, 0xe6, 0x2a, 0xfe, 0x58, 0x25, 0xbc, 0xd1, 0xa4, 0x0a, 0xae, 0x44, 0x15, 0x69, 0xc1, 0x98, 0x72, 0xe7, 0xb4, 0xbb, 0x61, 0x6c, 0x06, 0xc6, 0x6c, 0xf8, 0x44, 0x30, 0xee, 0x09, 0xc4, 0x17, 0xf2, 0x65, 0xba, 0x07, 0xe8, 0x12, 0x5d, 0xa6, 0x66, 0x97, 0x65, 0x50, 0xa9, 0x89, 0xf1, 0x4c, 0x39, 0x22, 0x5b, 0xa6, 0xf8, 0xf5, 0x4c, 0x98, 0xc5, 0x61, 0xc2, 0xea, 0x5a, 0x4d, 0x78, 0xaa, 0xa0, 0x11, 0x8f, 0xc1, 0x15, 0xc6, 0xde, 0xdb, 0x40, 0xd6, 0xca, 0x55, 0x50, 0x01, 0xb9, 0x02, 0xfe, 0xd8, 0x85, 0x73, 0x67, 0x90, 0x51, 0xa0, 0x3e, 0x10, 0x1d, 0xa5, 0xa5, 0xb7, 0x3b, 0x20, 0x92, 0xf5, 0xcb, 0xe4, 0xaa, 0x01, 0xd0, 0x42, 0xd0, 0x54, 0x2c, 0xe0, 0x2d, 0x28, 0x82, 0x80, 0x80, 0x4b, 0x76, 0x4c, 0xc9, 0x6f, 0xb7, 0x9d, 0xd9, 0x50, 0x6e, 0x2c, 0x86, 0xb3, 0x1a, 0xa4, 0xc2, 0x20, 0x98, 0x25, 0x0e, 0x43, 0x5a, 0x67, 0x94, 0xe9, 0x11, 0x10, 0x61, 0x21, 0x42, 0x48, 0x74, 0x28, 0x1b, 0x40, 0x72, 0xa7, 0x1c, 0x79, 0x07, 0xa0, 0xce, 0x9d, 0x32, 0xeb, 0x30, 0x64, 0x06, 0x5b, 0x83, 0x4a, 0x83, 0x45, 0x19, 0x33, 0x08, 0x7b, 0x39, 0x2a, 0xf4, 0x98, 0x43, 0x4e, 0xfa, 0xa7, 0x69, 0x30, 0x66, 0xc2, 0xd0, 0xd0, 0x1b, 0x70, 0x19, 0x10, 0xf4, 0x9f, 0x6c, 0x08, 0x8b, 0x18, 0x4c, 0x73, 0x2e, 0x96, 0x1a, 0xe4, 0x34, 0x1a, 0x97, 0xa5, 0x30, 0x32, 0xe1, 0xee, 0x2a, 0x56, 0x67, 0x18, 0xcb, 0x49, 0xb1, 0x36, 0x26, 0xa6, 0x67, 0x18, 0x8c, 0x19, 0x87, 0xc4, 0x83, 0xf5, 0x60, 0x45, 0x31, 0x34, 0x98, 0x95, 0x23, 0xb0, 0xa6, 0xc5, 0x63, 0x81, 0x69, 0x67, 0xc0, 0xa0, 0x45, 0x9c, 0xda, 0xde, 0x8d, 0x85, 0x09, 0x01, 0x30, 0xff, 0x26, 0xd0, 0x6a, 0xf9, 0x9c, 0x7e, 0x50, 0xaf, 0x7d, 0xd7, 0xcf, 0x1e, 0x7e, 0x2c, 0xde, 0x72, 0x79, 0x38, 0x21, 0x21, 0x88, 0x66, 0x9a, 0x47, 0x82, 0x2e, 0x1b, 0x0e, 0xcf, 0xf0, 0xfb, 0x21, 0x12, 0x70, 0xdc, 0xac, 0x16, 0x26, 0x41, 0x6a, 0x7e, 0x60, 0xde, 0x22, 0xca, 0x2b, 0xa4, 0x36, 0x94, 0x1f, 0xfd, 0x95, 0x11, 0xf6, 0xb4, 0xdf, 0x07, 0x57, 0xda, 0x70, 0xf4, 0x5f, 0x57, 0x05, 0x24, 0xa0, 0x9a, 0x25, 0xa1, 0x6f, 0x52, 0x5d, 0x23, 0xe8, 0x5c, 0x2b, 0xca, 0x81, 0xf4, 0xb0, 0x3e, 0xd6, 0x42, 0x3f, 0x4d, 0x77, 0x85, 0x25, 0x58, 0x70, 0x70, 0x66, 0x07, 0x13, 0x56, 0xf8, 0x69, 0xf4, 0x62, 0x68, 0x3a, 0xae, 0x26, 0x38, 0xd5, 0xd4, 0xc2, 0x22, 0x2f, 0x2d, 0x62, 0xb9, 0x57, 0x70, 0x85, 0x9a, 0x06, 0x4b, 0xbe, 0xa4, 0x41, 0xe9, 0x13, 0x2a, 0xa3, 0xb2, 0x54, 0x7c, 0x94, 0x20, 0xe4, 0x38, 0xe1, 0x2e, 0x7c, 0x96, 0x90, 0xc2, 0x12, 0x87, 0x28, 0x14, 0xd8, 0xff, 0x71, 0xa9, 0x37, 0x6f, 0x03, 0x45, 0xf2, 0x58, 0xb4, 0x97, 0x00, 0xb8, 0x5a, 0x40, 0x1d, 0xab, 0x63, 0x82, 0x0e, 0xe6, 0xdb, 0x30, 0x0a, 0xe5, 0x0d, 0x60, 0xf5, 0xdf, 0x8c, 0x61, 0x16, 0x5e, 0x06, 0x47, 0x4e, 0x90, 0x08, 0x34, 0x9d, 0x67, 0x45, 0x0b, 0xd2, 0x0c, 0xca, 0x25, 0xea, 0xe2, 0x56, 0xc6, 0x82, 0x89, 0xe1, 0x07, 0x2b, 0x2c, 0x55, 0xb6, 0x4a, 0x8a, 0x3e, 0x36, 0x7f, 0x22, 0x2b, 0xe9, 0xc9, 0xb1, 0xb4, 0xb7, 0x56, 0x8e, 0xae, 0x56, 0x97, 0x21, 0xc2, 0xa6, 0x8b, 0xf2, 0x61, 0x52, 0x90, 0x8f, 0x34, 0xb7, 0x2a, 0x84, 0x2d, 0xb2, 0x5e, 0xba, 0xb0, 0xf7, 0x14, 0xb5, 0xea, 0xcc, 0x54, 0x3d, 0x55, 0xdc, 0x10, 0x7a, 0x59, 0xd0, 0x36, 0xbe, 0xef, 0x72, 0x08, 0xb0, 0xdc, 0x59, 0x77, 0xa3, 0xd0, 0x49, 0x24, 0x91, 0x4b, 0xff, 0xa0, 0xe3, 0x55, 0x4c, 0x02, 0x19, 0x33, 0x13, 0xcb, 0x42, 0xfd, 0x7d, 0xa1, 0x72, 0x29, 0xdf, 0x38, 0xb6, 0x9c, 0x4a, 0x3b, 0x24, 0xfc, 0x02, 0xec, 0xd5, 0x07, 0x27, 0x0f, 0xf3, 0x9b, 0x7a, 0x42, 0x7e, 0x25, 0x62, 0x2f, 0xaa, 0x32, 0xe9, 0x4c, 0xc2, 0xa6, 0x91, 0xd9, 0xfa, 0x04, 0x13, 0x03, 0xdf, 0xaf, 0x05, 0xa2, 0x46, 0x05, 0xc5, 0x89, 0x34, 0x12, 0x62, 0x88, 0xb2, 0x3b, 0x1d, 0x49, 0x8b, 0x6f, 0xb5, 0x2b, 0x5d, 0x05, 0x93, 0xd1, 0xad, 0x1c, 0x3a, 0xeb, 0xe0, 0x4c, 0x15, 0x34, 0x88, 0xab, 0xdc, 0xeb, 0xab, 0x03, 0xe1, 0xdd, 0x28, 0x93, 0x84, 0x34, 0x42, 0x4c, 0x01, 0x28, 0x44, 0x06, 0x3f, 0x10, 0x8e, 0x44, 0xbc, 0x40, 0xa4, 0x0f, 0x7a, 0xb3, 0x81, 0x88, 0xed, 0xa5, 0x0c, 0x23, 0x8e, 0x42, 0x34, 0x5d, 0x07, 0xac, 0x28, 0xea, 0xe2, 0x46, 0x60, 0xec, 0x2d, 0xbb, 0xff, 0xdd, 0x04, 0xd1, 0x21, 0xa6, 0xc7, 0xc4, 0x7c, 0x2a, 0x3d, 0x6a, 0xcd, 0xba, 0x87, 0x86, 0x66, 0x3e, 0xc6, 0x74, 0x16, 0x9a, 0x70, 0x08, 0x2a, 0xc5, 0xe0, 0x94, 0xec, 0x08, 0x79, 0x81, 0x8e, 0xbc, 0x19, 0x57, 0xe8, 0x2f, 0x2f, 0x80, 0xac, 0x46, 0xe1, 0x58, 0x80, 0x09, 0x61, 0x58, 0xcb, 0x86, 0xa4, 0x2f, 0xb6, 0xae, 0xd0, 0x25, 0x7f, 0x6a, 0x09, 0x13, 0x2f, 0xad, 0xe4, 0x89, 0x01, 0x15, 0x79, 0x57, 0xdf, 0x22, 0x8f, 0xbc, 0x87, 0xd1, 0x60, 0xa2, 0x50, 0x51, 0xc6, 0xa7, 0xa2, 0xe0, 0xfd, 0xb7, 0x06, 0x05, 0x64, 0x38, 0xab, 0x34, 0x26, 0xa8, 0x71, 0x60, 0x6b, 0x18, 0x6e, 0x85, 0x40, 0x8a, 0x54, 0xe7, 0x61, 0x90, 0xe8, 0xb6, 0x94, 0x81, 0x35, 0x8e, 0xf7, 0x96, 0x9a, 0x39, 0x34, 0x92, 0x13, 0x93, 0xf8, 0x71, 0x7e, 0x06, 0x6e, 0xd6, 0x51, 0x3b, 0xa1, 0x25, 0x0b, 0x0b, 0x52, 0xd3, 0x52, 0x51, 0xaa, 0x62, 0xb7, 0x6f, 0x17, 0x59, 0x45, 0x16, 0x23, 0xf2, 0x48, 0x68, 0x57, 0x1f, 0x3a, 0x29, 0x9e, 0x43, 0x7a, 0x4b, 0x0a, 0x78, 0x89, 0xb9, 0xac, 0x3c, 0x47, 0x88, 0x54, 0x04, 0xf5, 0x90, 0x32, 0x18, 0x17, 0x1d, 0x92, 0x8d, 0xe8, 0x79, 0xdb, 0xbd, 0xa6, 0x67, 0x7a, 0x47, 0x84, 0x16, 0x68, 0xb1, 0x5c, 0x7e, 0x5a, 0xcb, 0xd0, 0x9d, 0x08, 0x01, 0xe5, 0xc5, 0x54, 0xf0, 0x6f, 0x6e, 0x6c, 0x61, 0x53, 0x1a, 0x26, 0x50, 0x62, 0x88, 0x62, 0x1b, 0xbe, 0xd0, 0x40, 0xec, 0x30, 0x7c, 0x56, 0x62, 0x07, 0x4c, 0x01, 0x7d, 0x7e, 0x88, 0x56, 0x89, 0x13, 0x76, 0x6b, 0x2f, 0x0e, 0x7e, 0xe2, 0x1a, 0x2e, 0x87, 0x8d, 0x46, 0xcf, 0x39, 0x54, 0x3e, 0x25, 0xd7, 0x2d, 0x14, 0x77, 0x59, 0x79, 0x9b, 0x89, 0x65, 0x42, 0x92, 0xe8, 0xcc, 0x05, 0xe7, 0x5a, 0xf4, 0x9b, 0xcc, 0x6c, 0x3c, 0x16, 0x2c, 0xf9, 0xf1, 0x05, 0x1c, 0x6f, 0x58, 0x6e, 0xcd, 0x49, 0x85, 0x0c, 0xa6, 0x3e, 0x4e, 0x11, 0x30, 0xdf, 0xa2, 0xa6, 0x2e, 0x2a, 0x4b, 0x3b, 0x82, 0xce, 0x52, 0xbb, 0xcb, 0x7b, 0xc6, 0xd5, 0x71, 0x4e, 0x37, 0x8f, 0x80, 0xd7, 0x4c, 0x25, 0x77, 0x77, 0x0b, 0xf6, 0x87, 0x02, 0xe8, 0x73, 0xc1, 0x96, 0xa7, 0xf5, 0x0c, 0x65, 0x10, 0x7e, 0xae, 0x5c, 0x29, 0x90, 0x11, 0x14, 0xb4, 0x49, 0x87, 0x82, 0x67, 0xe1, 0x05, 0x19, 0x41, 0xc3, 0x26, 0x5f, 0x45, 0x6f, 0x54, 0xe4, 0xd4, 0xd0, 0xf3, 0x12, 0x01, 0x4f, 0x2b, 0x21, 0x75, 0x0f, 0x91, 0x54, 0x23, 0x4c, 0x6f, 0xd0, 0x96, 0xd2, 0xa2, 0xad, 0x92, 0x12, 0x66, 0xcd, 0x39, 0x25, 0xc3, 0x6b, 0x82, 0xc4, 0xcf, 0x6a, 0xad, 0x0c, 0x22, 0xda, 0x73, 0x08, 0xcc, 0x99, 0xdb, 0x2b, 0x4b, 0x9a, 0x4e, 0xf6, 0x74, 0x5a, 0xc1, 0x8f, 0x78, 0xa4, 0x4c, 0xb7, 0xa1, 0x5a, 0x3a, 0x15, 0x77, 0x01, 0xab, 0xde, 0x51, 0x7c, 0x8a, 0x8b, 0x29, 0x51, 0x24, 0x14, 0xaf, 0xda, 0xe5, 0x2a, 0xb1, 0xa3, 0x4d, 0xfd, 0x41, 0x27, 0x3e, 0x94, 0xdc, 0xd7, 0x88, 0x05, 0x5f, 0x46, 0x5d, 0xe7, 0x29, 0x60, 0x37, 0x88, 0xa2, 0x8f, 0xd1, 0x97, 0xc9, 0x43, 0x90, 0xa6, 0x1a, 0x81, 0x1d, 0x17, 0x39, 0xcf, 0x22, 0xac, 0x80, 0x26, 0x2f, 0xa6, 0x7d, 0xb4, 0x22, 0xef, 0xa8, 0xce, 0x08, 0xe4, 0xb1, 0x80, 0x65, 0x4f, 0xad, 0x60, 0xfd, 0xb1, 0x95, 0x5a, 0x5d, 0x2f, 0x41, 0x4d, 0xbc, 0x7d, 0x94, 0xe0, 0x87, 0xbb, 0x8a, 0xa8, 0xad, 0x3b, 0xe7, 0x32, 0xbb, 0x82, 0x61, 0x35, 0x30, 0xe9, 0x38, 0x72, 0x9b, 0x7e, 0x9b, 0x58, 0x83, 0xe3, 0x07, 0x8c, 0x91, 0x8c, 0x19, 0xda, 0xae, 0x78, 0x7f, 0x6c, 0x21, 0xea, 0x50, 0x9c, 0xfb, 0x40, 0x28, 0x96, 0x8a, 0x13, 0x6e, 0x6b, 0x51, 0x85, 0x67, 0x37, 0x66, 0xc4, 0x55, 0x25, 0x88, 0xb1, 0x28, 0x2e, 0xfc, 0xd8, 0x78, 0xe6, 0x38, 0xb2, 0x89, 0xc3, 0x92, 0xa4, 0x16, 0x77, 0x28, 0x80, 0x4b, 0x17, 0x32, 0xf2, 0xb3, 0xbe, 0x51, 0x7d, 0x34, 0x5f, 0xf0, 0x2d, 0xc7, 0x27, 0x04, 0xdb, 0x8f, 0x26, 0xa4, 0xed, 0xa8, 0xdf, 0xf7, 0xaf, 0xb8, 0x13, 0xfb, 0x60, 0x16, 0x09, 0x7c, 0xa4, 0x01, 0x5a, 0x50, 0x3b, 0xca, 0xe9, 0xd6, 0x66, 0xff, 0xe9, 0x95, 0xa0, 0x75, 0x29, 0x87, 0xc0, 0x43, 0x55, 0xd5, 0x3f, 0x8a, 0x74, 0x08, 0x40, 0x4e, 0x69, 0xd3, 0xe1, 0x73, 0x91, 0x87, 0xf5, 0x33, 0x0e, 0x12, 0x0e, 0x74, 0x43, 0x01, 0x75, 0x21, 0x81, 0x8a, 0x59, 0xd7, 0xe2, 0x50, 0x23, 0x51, 0x1d, 0x58, 0xa2, 0x8c, 0xa3, 0x6a, 0xd2, 0xbd, 0x98, 0xe9, 0x03, 0x13, 0x4d, 0x68, 0xa3, 0xd1, 0x2e, 0x47, 0xe3, 0x75, 0xb4, 0xb4, 0xac, 0x40, 0x1a, 0x87, 0x28, 0xce, 0xa7, 0x67, 0xa3, 0xb4, 0x18, 0x17, 0x45, 0x6b, 0xb9, 0x41, 0x57, 0x20, 0x98, 0xfa, 0x09, 0x2b, 0x44, 0x25, 0xb8, 0x16, 0x4d, 0x7a, 0x16, 0xc6, 0xcf, 0x54, 0xaf, 0x34, 0x12, 0x91, 0x21, 0x6e, 0x45, 0xb8, 0x2d, 0x6f, 0x4b, 0xcb, 0x8a, 0x51, 0x03, 0x86, 0xb5, 0xb8, 0xc9, 0xa1, 0xf8, 0x39, 0x09, 0x61, 0x13, 0x1c, 0x35, 0x80, 0x79, 0x31, 0x26, 0x27, 0x83, 0x4c, 0xa4, 0x25, 0x28, 0x66, 0x3f, 0x6b, 0x35, 0x91, 0xa2, 0x96, 0x99, 0x82, 0x03, 0x5b, 0xb3, 0x3a, 0xfd, 0x8e, 0x8c, 0xae, 0xda, 0xf4, 0x9c, 0x75, 0x81, 0xa8, 0x06, 0xea, 0x8b, 0x11, 0x3d, 0x8d, 0x06, 0x27, 0x5e, 0x94, 0xa7, 0x61, 0x1f, 0x1b, 0x65, 0x68, 0x24, 0xc5, 0xb0, 0x61, 0x45, 0x2e, 0x21, 0x81, 0xfa, 0xbe, 0xb1, 0x64, 0xc3, 0x86, 0x46, 0x6c, 0x74, 0x62, 0x3d, 0x96, 0xe6, 0x61, 0x97, 0x04, 0xbf, 0xef, 0x4f, 0xdc, 0xaa, 0x21, 0x79, 0x8f, 0x13, 0xa5, 0xbc, 0x60, 0xfd, 0x2d, 0x5c, 0x19, 0xd9, 0xa5, 0x3b, 0xed, 0xf0, 0xaa, 0xda, 0x9b, 0x7f, 0x07, 0x13, 0x21, 0xbd, 0xbd, 0x13, 0x68, 0x30, 0x34, 0xcd, 0xbf, 0x42, 0x56, 0xac, 0x6b, 0x3d, 0xae, 0x84, 0x74, 0x8b, 0xef, 0xb6, 0x4d, 0x28, 0x99, 0x0f, 0x1e, 0x35, 0xe9, 0x86, 0xe1, 0x08, 0xbc, 0x07, 0x6e, 0x86, 0x9d, 0x5a, 0x34, 0x0d, 0x2a, 0xe4, 0x32, 0xcb, 0x82, 0x03, 0x69, 0x65, 0xaa, 0x43, 0xfd, 0x00, 0x12, 0x9b, 0x57, 0x80, 0x0b, 0xae, 0x1a, 0x9a, 0xa1, 0xdd, 0x66, 0xda, 0x33, 0x1d, 0x26, 0x51, 0xe9, 0x4e, 0x80, 0xe4, 0x6c, 0xa4, 0x8a, 0x90, 0x61, 0xd1, 0x30, 0x3a, 0x64, 0x1f, 0x6e, 0xb8, 0xe0, 0xa6, 0x78, 0x3b, 0xb0, 0xda, 0x7e, 0x44, 0x33, 0xb9, 0x7c, 0x22, 0x2b, 0x20, 0x20, 0xab, 0xa9, 0x44, 0x3b, 0x1f, 0x5c, 0x8b, 0x2d, 0xbe, 0x3d, 0xfe, 0xd7, 0xa0, 0x1a, 0xec, 0x1c, 0x1f, 0xa8, 0x4c, 0xb7, 0xe5, 0xfc, 0x7c, 0xb6, 0xd6, 0x93, 0x37, 0x06, 0x38, 0x34, 0x6c, 0x95, 0x28, 0xd5, 0xf7, 0xa4, 0xce, 0xb6, 0x3f, 0xeb, 0x13, 0x91, 0x79, 0xb4, 0x99, 0x3c, 0x9c, 0x4b, 0xd0, 0x05, 0xc0, 0x76, 0x42, 0xde, 0x2e, 0x27, 0x9a, 0x7d, 0x5f, 0x58, 0x1b, 0x4d, 0x88, 0xa8, 0x4c, 0x10, 0x47, 0x1f, 0x1f, 0x10, 0xc9, 0x78, 0x27, 0xa9, 0xd0, 0x8b, 0xe4, 0x1a, 0x04, 0x0c, 0x57, 0x6a, 0xe3, 0xd2, 0x3b, 0x55, 0x16, 0x40, 0x01, 0x79, 0x7b, 0xf3, 0x2e, 0xb0, 0x74, 0x48, 0xf1, 0xdb, 0xc8, 0xc6, 0x44, 0x0f, 0xe7, 0x73, 0x90, 0x19, 0x58, 0x5a, 0x58, 0x4d, 0xbf, 0x31, 0xd4, 0xa6, 0x80, 0xf1, 0x4b, 0xbc, 0x92, 0x21, 0x64, 0x89, 0x78, 0x4a, 0x38, 0xb5, 0xd2, 0x81, 0x57, 0x55, 0x65, 0x76, 0x12, 0x77, 0x2c, 0x2f, 0xb7, 0xe4, 0xbb, 0x4a, 0x02, 0xb8, 0x0d, 0xb5, 0x6f, 0x98, 0xdb, 0xb0, 0x7e, 0x2b, 0x01, 0x1b, 0xa9, 0xb3, 0x1e, 0x44, 0x7b, 0x40, 0x1b, 0x3f, 0xab, 0x50, 0x22, 0xb9, 0x6d, 0x4e, 0xe6, 0x74, 0xd2, 0xa2, 0x3b, 0x58, 0xd4, 0x5f, 0x54, 0x39, 0x6d, 0xbf, 0x37, 0x68, 0xf9, 0x37, 0x8c, 0x0c, 0x91, 0x4e, 0x8a, 0xb7, 0xe2, 0x8c, 0xa2, 0x0b, 0x72, 0x5a, 0xbd, 0x31, 0x40, 0x3d, 0xb1, 0x3e, 0xc0, 0x4a, 0xd4, 0x7e, 0x5d, 0x35, 0xf3, 0x16, 0x0a, 0x94, 0x63, 0x09, 0xa8, 0x78, 0xdb, 0xe8, 0xcb, 0x63, 0x5c, 0x44, 0x93, 0x84, 0x3d, 0x44, 0xe6, 0x04, 0xa3, 0x1d, 0x17, 0x32, 0x42, 0x89, 0x41, 0x7d, 0x32, 0x26, 0x4d, 0x13, 0x39, 0x6c, 0x8d, 0xf7, 0x62, 0xf2, 0x3b, 0x40, 0xfd, 0x7a, 0x47, 0x25, 0x5c, 0xd0, 0xd2, 0x79, 0xb5, 0x08, 0x51, 0x3b, 0x39, 0x2b, 0xca, 0x0d, 0x29, 0xd6, 0x46, 0xc2, 0x71, 0xfc, 0x3f, 0x18, 0x0f, 0xf9, 0xb8, 0x95, 0xca, 0x37, 0xd5, 0x6e, 0xb7, 0xe9, 0x7c, 0x85, 0xbb, 0x81, 0xdd, 0x72, 0x70, 0x78, 0xe1, 0x5f, 0x82, 0x05, 0xbb, 0x21, 0x11, 0x7c, 0x8b, 0x6f, 0x0e, 0x5d, 0xb5, 0x45, 0x3a, 0x53, 0xfa, 0x5f, 0x1f, 0x65, 0x75, 0x76, 0x68, 0x78, 0xa5, 0x13, 0xe2, 0x21, 0x29, 0x2b, 0x71, 0xdf, 0x24, 0x03, 0x79, 0x7c, 0x91, 0x5a, 0x40, 0x4d, 0xa0, 0x80, 0x08, 0x37, 0x17, 0x66, 0x3f, 0x05, 0x75, 0xf4, 0x91, 0xb6, 0xa5, 0x08, 0x98, 0x13, 0x48, 0x95, 0x93, 0x22, 0x2a, 0x14, 0x2b, 0xbe, 0x60, 0xa0, 0xd7, 0x82, 0xf1, 0xd0, 0x41, 0x2c, 0x3a, 0x4d, 0xbb, 0x7b, 0xb1, 0x11, 0x03, 0xdd, 0x8f, 0x19, 0x18, 0xa8, 0xb1, 0x90, 0x34, 0x9c, 0xc0, 0x49, 0x18, 0xba, 0x45, 0x86, 0x2a, 0x9a, 0x6a, 0xd4, 0xea, 0x1a, 0x05, 0x22, 0xe5, 0xc0, 0xf6, 0x14, 0x01, 0x0f, 0xe3, 0xab, 0xfb, 0xd3, 0xfe, 0xad, 0xf4, 0x07, 0xcf, 0x13, 0x90, 0x62, 0xbe, 0xc2, 0xcd, 0x0b, 0x82, 0xe7, 0x21, 0x12, 0x81, 0x64, 0x9c, 0x04, 0x58, 0x48, 0x83, 0x35, 0xa6, 0x39, 0x4b, 0x84, 0xf8, 0x8b, 0xb9, 0xa4, 0x50, 0xb3, 0x2c, 0x41, 0x62, 0xb2, 0x8b, 0xc5, 0x68, 0xf1, 0xf1, 0x48, 0xaf, 0x0b, 0x40, 0xc5, 0xcb, 0x5c, 0x7e, 0x39, 0xe5, 0xfb, 0x90, 0xde, 0xc8, 0x7a, 0xb9, 0x05, 0x8b, 0xa7, 0xa9, 0xd5, 0x56, 0x72, 0x57, 0xf9, 0x13, 0x7a, 0xf0, 0x7a, 0xff, 0x56, 0xcc, 0xa7, 0x71, 0x7a, 0x13, 0xf6, 0x01, 0xa0, 0xa5, 0xdd, 0x32, 0x83, 0x73, 0x56, 0xbb, 0xa5, 0xec, 0xf2, 0x85, 0xa2, 0x2d, 0x91, 0xb5, 0xe3, 0xb8, 0x62, 0xa8, 0xa9, 0x65, 0x83, 0x73, 0x0d, 0x94, 0x54, 0x9e, 0x36, 0xe1, 0x8e, 0x68, 0xa6, 0xc8, 0x52, 0x57, 0x33, 0x30, 0x22, 0x6e, 0x3c, 0x80, 0xf6, 0x00, 0x4c, 0xc1, 0x31, 0xb2, 0xae, 0x97, 0xca, 0x62, 0x84, 0x1f, 0xc2, 0x4f, 0xd2, 0xa1, 0x4e, 0xa0, 0x8e, 0xaa, 0xc5, 0x52, 0xcb, 0x7e, 0x78, 0x0e, 0x4b, 0x6b, 0xf3, 0xe3, 0x35, 0x91, 0x24, 0x01, 0x25, 0xd8, 0x70, 0x59, 0x11, 0x57, 0x4d, 0x1c, 0x94, 0xd5, 0xe2, 0xa2, 0x38, 0xfd, 0xaf, 0xe8, 0x73, 0x06, 0x40, 0x5b, 0xa4, 0xa6, 0x85, 0xf1, 0x25, 0xf8, 0xb1, 0x99, 0xe5, 0x26, 0x58, 0x04, 0x54, 0x36, 0x53, 0x85, 0xd6, 0x12, 0x0d, 0xb5, 0x33, 0x4c, 0x8a, 0x37, 0x34, 0x35, 0x4e, 0x48, 0xaf, 0x9f, 0x9c, 0x0a, 0xd9, 0x49, 0x82, 0x8c, 0x54, 0x87, 0x1a, 0xb6, 0xf2, 0x63, 0x6f, 0xdc, 0xbf, 0xab, 0xbc, 0x1a, 0x02, 0x56, 0xac, 0xec, 0xe5, 0x53, 0xda, 0x15, 0xa0, 0xa7, 0x94, 0xd1, 0x5c, 0x50, 0xb5, 0x94, 0x53, 0x85, 0x36, 0x46, 0x18, 0x44, 0x74, 0xec, 0x04, 0x07, 0x7a, 0xba, 0x86, 0x8f, 0x64, 0xa8, 0xc1, 0xa5, 0x39, 0x2e, 0x47, 0xcd, 0x4c, 0x17, 0xf8, 0xa1, 0x22, 0x70, 0x0b, 0x18, 0x29, 0x68, 0xb0, 0x15, 0x1c, 0x9c, 0xb4, 0x08, 0xdf, 0xad, 0x63, 0xf3, 0x5d, 0xea, 0x33, 0xeb, 0x71, 0x7a, 0x85, 0x43, 0xf3, 0x48, 0x4a, 0xf9, 0x16, 0x4f, 0x4d, 0xa3, 0xcb, 0xf5, 0x5e, 0xaf, 0xe6, 0x9e, 0x93, 0xf8, 0xca, 0xb6, 0x44, 0x29, 0x2a, 0x5c, 0x40, 0x7c, 0xb2, 0x2d, 0xb0, 0xea, 0xc4, 0x71, 0xb0, 0xc6, 0x1c, 0xc3, 0xe7, 0x38, 0xe0, 0xfc, 0x0a, 0x87, 0x9f, 0x41, 0x05, 0x09, 0x13, 0xc0, 0x85, 0xae, 0x18, 0x61, 0x5a, 0xe9, 0x85, 0x5c, 0x51, 0x63, 0x5d, 0x14, 0xc0, 0x5e, 0x51, 0x16, 0x4e, 0x34, 0x59, 0xcc, 0x82, 0x4e, 0x16, 0x91, 0x8a, 0x06, 0x89, 0xac, 0x49, 0xd9, 0xce, 0x11, 0x85, 0x83, 0x7c, 0x02, 0x99, 0xea, 0x53, 0xf5, 0xfc, 0x55, 0x10, 0x72, 0xe1, 0xc1, 0xd7, 0xd2, 0x16, 0x68, 0x5b, 0xea, 0x24, 0xeb, 0xbf, 0x01, 0x35, 0x55, 0x94, 0xe1, 0xa7, 0x28, 0x4d, 0xb5, 0xb3, 0x10, 0x15, 0x72, 0x1a, 0xae, 0x77, 0x69, 0x22, 0x2a, 0x9a, 0x10, 0x56, 0x47, 0x9c, 0xc4, 0x30, 0xd4, 0x2c, 0x79, 0x22, 0xb5, 0xd2, 0xb9, 0x71, 0x5e, 0x72, 0x96, 0xc6, 0xa7, 0xf0, 0xd7, 0xbe, 0x82, 0x1d, 0xcd, 0x21, 0x4b, 0x22, 0x64, 0x1a, 0x18, 0xf7, 0x10, 0x26, 0x19, 0xcf, 0xde, 0x6f, 0x84, 0x4a, 0xee, 0xc5, 0x37, 0x78, 0x95, 0xa0, 0xc4, 0x41, 0xb2, 0xf2, 0x58, 0x7c, 0x0a, 0x5e, 0xd8, 0x20, 0xa4, 0x5d, 0x94, 0x88, 0xcd, 0xf9, 0x99, 0x81, 0xd9, 0x4e, 0xce, 0x04, 0xad, 0xc8, 0x16, 0xd2, 0x48, 0x26, 0x29, 0x0d, 0x6a, 0xf8, 0x8e, 0x5f, 0x02, 0xac, 0xd9, 0xf5, 0x9e, 0x40, 0x4d, 0x15, 0xe7, 0x9a, 0xc6, 0x4b, 0x80, 0xad, 0x5c, 0x23, 0xfe, 0x07, 0x71, 0xaa, 0x50, 0x05, 0xae, 0xc1, 0xaa, 0xc2, 0x8e, 0x1a, 0x00, 0x2d, 0xaa, 0x29, 0x44, 0xbe, 0x2f, 0x00, 0xa7, 0x3e, 0x2a, 0xc8, 0xf2, 0x46, 0xb0, 0x2b, 0x4d, 0xa2, 0x4d, 0x98, 0x74, 0xe6, 0x0f, 0xea, 0x67, 0x2a, 0x45, 0x19, 0xec, 0x52, 0xc7, 0x49, 0x73, 0xf2, 0x0e, 0x0e, 0x84, 0x5c, 0x15, 0x82, 0x56, 0x98, 0x20, 0x1b, 0xa9, 0x90, 0xa2, 0x6a, 0x0e, 0xa6, 0x93, 0x80, 0x05, 0x32, 0xed, 0x6f, @@ -27,7 +27,7 @@ uint8_t A_bpoly_MIDSEC[9*NEWHOPE_POLYBYTES] = { 0xa7, 0x12, 0x21, 0x1b, 0xc5, 0x80, 0x21, 0x51, 0x45, 0x90, 0x66, 0x5d, 0xf9, 0x62, 0x5b, 0xdd, 0xbb, 0x20, 0x6d, 0x15, 0x20, 0x45, 0x5f, 0xda, 0xa0, 0xb2, 0x5e, 0x53, 0x9d, 0x19, 0x33, 0x45, 0x86, 0x58, 0x44, 0xe2, 0x44, 0xce, 0x14, 0x99, 0x0a, 0x80, 0xfa, 0x82, 0x4b, 0xda, 0xb9, 0x25, 0x50, 0xd9, 0x90, 0xe4, 0x06, 0xeb, 0xa0, 0x42, 0xdb, 0x6b, 0x66, 0x55, 0x61, 0xce, 0x4c, 0x9e, 0x8b, 0x54, 0x65, 0x67, 0x78, 0x73, 0x5b, 0x46, 0x68, 0x69, 0x65, 0xc9, 0x2e, 0x62, 0x84, 0xe0, 0x25, 0x3c, 0x68, 0x2c, 0x5d, 0x68, 0x30, 0x82, 0x89, 0x71, 0x68, 0x96, 0x1f, 0x27, 0x82, 0x30, 0xa2, 0x2b, 0x66, 0x03, 0x23, 0x20, 0x26, 0xce, 0x44, 0x98, 0x58, 0xf8, 0x50, 0xe9, 0x16, 0x43, 0xe1, 0xe9, 0x33, 0x21, 0xe6, 0x1d, 0x97, 0xef, 0x18, 0xfc, 0xfa, 0xfc, 0x44, 0x37, 0xef, 0xa1, 0xbd, 0x04, 0x43, 0x4a, 0x90, 0xaa, 0x84, 0x74, 0xe9, 0xa5, 0xc8, 0x16, 0x71, 0xd0, 0xd1, 0x80, 0x54, 0x32, 0xa4, 0xe7, 0x85, 0x3a, 0xf9, 0xa3, 0xb9, 0x74, 0x3d, 0xce, 0xea, 0xd3, 0x64, 0x5d, 0x95, 0xd3, 0x24, 0xf6, 0x1a, 0x40, 0x20, 0x25, 0x9d, 0x2d, 0x5e, 0x06, 0xba, 0xae, 0xa5, 0x5f, 0xcc, 0x75, 0x70, 0xf3, 0x25, 0x81, 0x2d, 0x80, 0xe6, 0x8a, 0x7d, 0xf4, 0x57, 0x63, 0xd0, 0x55, 0xb4, 0x66, 0x30, 0x86, 0x8a, 0xe6, 0x83, 0xdb, 0xbb, 0x1d, 0x73, 0xa1, 0x5a, 0x2a, 0xe1, 0xd5, 0xb8, 0x14, 0xa1, 0xe7, 0xf2, 0x0a, 0xd5, 0x05, 0x4f, 0x94, 0xd0, 0x73, 0x59, 0xea, 0x82, 0x6e, 0xda, 0x95, 0x6e, 0x6a, 0xb5, 0x56, 0xb2, 0x6f, 0x45, 0xd7, 0x72, 0xac, 0x86, 0x6f, 0xdb, 0xd4, 0x69, 0xa9, 0x61, 0xfc, 0xa7, 0xd8, 0x57, 0x62, 0x1a, 0x87, 0xea, 0x64, 0xb8, 0x69, 0x50, 0x02, 0x62, 0x9a, 0x1e, 0xbd, 0x0c, 0x74, 0xd2, 0xd9, 0xa9, 0x17, 0xe1, 0x85, 0xe6, 0x87, 0xb0, 0x60, 0x26, 0x6b, 0x2c, 0x70, 0x40, 0x2c, 0xa6, 0x9d, 0x9f, 0xea, 0xdb, 0xb0, 0x6c, 0xc6, 0x52, 0x9a, 0x24, 0x23, 0x39, 0x9a, 0x04, 0x66, 0x8f, 0x8a, 0x8c, 0xb2, 0x04, 0xb4, 0x9b, 0x89, 0x03, 0x7f, 0xa8, 0xfb, 0xad, 0xb5, 0x20, 0xdb, 0xcc, 0x8a, 0x60, 0x16, 0x11, 0x1f, 0x58, 0x2d, 0x98, 0xdb, 0x44, 0x7e, 0x35, 0x9e, 0x90, 0xf1, 0xf8, 0x86, 0xbf, 0xe2, 0x97, 0x96, 0x5a, 0xdd, 0xd9, 0x39, 0xd6, 0x09, 0x97, 0x44, 0xc4, 0xa0, 0x26, 0x13, 0x9b, 0x50, 0xca, 0xa7, 0x6e, 0x01, 0xb6, 0x9b, 0xab, 0x76, 0x4b, 0x2e, 0x1a, 0x75, 0x6c, 0xc9, 0x41, 0xd2, 0x91, 0x45, 0x76, 0x8f, 0x2c, 0x90, 0xf1, 0xd2, 0x0f, 0xd2, 0x13, 0xa0, 0x68, 0xa3, 0xf2, 0x88, 0xce, 0xac, 0x1f, 0x95, 0x7a, 0xc6, 0x01, 0x8d, 0x07, 0xac, 0x70, 0xc7, 0x5d, 0x24, 0x2e, 0x60, 0x4a, 0xc2, 0xbf, 0x62, 0x51, 0x95, 0x26, 0x25, 0xab, 0xa7, 0xb5, 0x53, 0x24, 0xe6, 0xb6, 0x27, 0x16, 0x6a, 0xb1, 0xc9, 0xec, 0x76, 0xd2, 0x81, 0xfc, 0xb7, 0x73, 0x17, 0xdf, 0xcb, 0xae, 0xbc, 0xb9, 0x26, 0xa7, 0xa0, 0x33, 0x61, 0x06, 0x65, 0x1b, 0xc9, 0xb7, 0x20, 0x51, 0xe4, 0xb1, 0x5e, 0x67, 0x5d, 0x0b, 0x96, 0xc2, 0x01, 0xf3, 0x02, 0x78, 0x98, 0x3f, 0x68, 0x45, 0x94, 0x1f, 0xce, 0x29, 0x6b, 0x5e, 0x59, 0xf6, 0x84, 0xf6, 0x51, 0x3c, 0x3c, 0x68, 0xfe, 0x56, 0xb3, 0xd6, 0x99, 0x26, 0x17, 0xe2, 0x5a, 0x9a, 0x42, 0xfe, 0x52, 0x59, 0x87, 0x14, 0x7c, 0x55, 0xe8, 0x28, 0x49, 0x9d, 0x9d, 0x43, 0x65, 0xee, 0xc6, 0x3a, 0xe9, 0xa6, 0xe2, 0xa1, 0x90, 0x50, 0x64, 0xc1, 0x2f, 0xfe, 0x18, 0xe7, 0x6d, 0x6c, 0x85, 0x6d, 0x8b, 0x91, 0xdc, 0xc5, 0x5d, 0x88, 0x2f, 0x02, 0x07, 0xee, 0x39, 0x24, 0xbe, 0x4f, 0x12, 0x58, 0xe2, 0x14, 0x2b, 0x9b, 0xcd, 0xa9, 0x77, 0x7d, 0x4c, 0x22, 0xed, 0xa9, 0x63, 0x78, 0x34, 0x9a, 0x0c, 0x18, 0xe6, 0xed, 0x78, 0x2a, 0x4d, 0x44, 0x52, 0x44, 0x03, 0x5a, 0x79, 0x35, 0x70, 0x48, 0x58, 0x21, 0x6a, 0xdb, 0x82, 0x8a, 0x34, 0xaf, 0xe3, 0x63, 0xf4, 0x0a, 0xa8, 0x13, 0x4e, 0x15, 0x23, 0xf3, 0x59, 0x84, 0x3a, 0x61, 0xa8, 0x21, 0x8b, 0x8e, 0x84, 0xa4, 0x42, 0xbd, 0x35, 0x80, 0x61, 0x36, 0x05, 0x83, 0x81, 0x95, 0xe2, 0x7d, 0x73, 0xf2, 0x4c, 0xb6, 0x13, 0xbf, 0xf9, 0x60, 0x28, 0x2d, 0xc3, 0xa6, 0xea, 0x4d, 0xb1, 0x0a, 0xe8, 0xb6, 0x77, 0xf8, 0x6a, 0x5a, 0x80, 0x0c, 0x1c, 0xf5, 0x43, 0xb6, 0x4a, 0xfe, 0xdc, 0xe3, 0x94, 0xac, 0x90, 0x8b, 0xba, 0x83, 0xaf, 0x69, 0x91, 0x46, 0x57, 0x35, 0x18, 0xa7, 0x67, 0x69, 0x42, 0x03, 0x70, 0x09, 0x43, 0x06, 0xd2, 0xfe, 0x4f, 0x1e, 0x29, 0x48, 0x8a, 0xbf, 0xda, 0x38, 0x60, 0xcf, 0x17, 0x22, 0xcb, 0xf0, 0x44, 0x49, 0x46, 0xca, 0x99, 0x1e, 0x22, 0xa5, 0x34, 0x29, 0x6e, 0x5b, 0xf9, 0xdd, 0x0e, 0x7e, 0x0d, 0xb3, 0x87, 0x67, 0x18, 0x32, 0xe0, 0x0b, 0x36, 0xf6, 0x5e, 0x4a, 0x7d, 0xcb, 0x18, 0xce, 0x72, 0xe4, 0xc1, 0x8c, 0xe7, 0x00, 0x2c, 0xf0, 0x11, 0x50, 0x34, 0x4a, 0xe9, 0xe7, 0x87, 0x62, 0xa0, 0x71, 0xbe, 0xdd, 0x71, 0xc1, 0x2c, 0xea, 0x72, 0x96, 0xc6, 0x71, 0x75, 0x49, 0xb0, 0x56, 0x43, 0xa5, 0xfb, 0xe8, 0x3d, 0xac, 0x2e, 0x9d, 0x95, 0x33, 0x26, 0x24, 0xdc, 0x78, 0xdb, 0x6e, 0x64, 0x48, 0x13, 0xac, 0x4b, 0x36, 0x40, 0x71, 0x15, 0xda, 0x0e, 0x52, 0x77, 0x51, 0x53, 0xd6, 0x85, 0x88, 0xae, 0x6f, 0xca, 0x50, 0x66, 0x1c, 0x5d, 0x80, 0xe0, 0x03, 0x1d, 0xeb, 0xe3, 0xea, 0x5f, 0x83, 0x47, 0xbf, 0xc7, 0x87, 0x0a, 0x32, 0xe3, 0x1a, 0x82, 0xf1, 0x76, 0xf6, 0x03, 0x86, 0x17, 0x80, 0xd8, 0x61, 0xca, 0x36, 0x39, 0xd2, 0x83, 0x65, 0x41, 0xb0, 0x41, 0x42, 0x69, 0x0d, 0xa2, 0x32, 0x26, 0x4d, 0xbe, 0x8b, 0x94, 0x40, 0x10, 0x60, 0xa7, 0x3d, 0xab, 0x02, 0xc2, 0x69, 0xca, 0x82, 0x8f, 0xdc, 0x6e, 0xc2, 0xf2, 0x49, 0xa0, 0x94, 0x25, 0x33, 0x02, 0x15, 0xec, 0x67, 0x3f, 0x49, 0xff, 0xf9, 0xbe, 0xba, 0x45, 0x88, 0xe3, 0x00, 0xe8, 0x6c, 0x2a, 0x41, 0x41, 0xdc, 0xd2, 0xd6, 0x69, 0x74, 0x4b, 0x33, 0xa0, 0x3e, 0x67, 0x8f, 0xd5, 0xa9, 0x3b, 0x42, 0x6f, 0x11, 0x3d, 0x84, 0x8a, 0xff, 0x57, 0xb5, 0x0b, 0x77, 0x84, 0x15, 0xc0, 0x09, 0x28, 0x1b, 0xd5, 0xc0, 0x31, 0x68, 0x05, 0xed, 0x99, 0x1a, 0xd9, 0x3c, 0x9c, 0xd2, 0x0a, 0x0b, 0x33, 0x88, 0x05, 0x4a, 0x6e, 0x7c, 0x52, 0x94, 0x72, 0xb1, 0x3f, 0xc7, 0x02, 0x8b, 0xb5, 0x48, 0x39, 0x47, 0x53, 0xb3, 0x23, 0x90, 0xa2, 0x6c, 0x24, 0x2c, 0x0e, 0x33, 0xd2, 0xea, 0x2e, 0xac, 0xa0, 0xe8, 0xfb, 0x10, 0x72, 0x42, 0x73, 0x5f, 0x31, 0xe8, 0xe4, 0xfc, 0x65, 0x6b, 0x49, 0x1f, 0xab, 0x1f, 0x6d, 0x2a, 0x7c, 0x23, 0x1e, 0xfb, 0x4b, 0xbd, 0x22, 0x22, 0x55, 0x31, 0xf6, 0x29, 0xe1, 0x8f, 0x32, 0xae, 0xb4, 0x22, 0x07, 0x00, 0x6b, 0xb1, 0xd5, 0xa0, 0xa9, 0x4f, 0x35, 0x21, 0x79, 0x81, 0xb9, 0xd3, 0x6d, 0x58, 0x5c, 0xb5, 0x8e, 0xf9, 0x15, 0x05, 0x4a, 0xa6, 0xb0, 0x6a, 0x8d, 0xc3, 0x49, 0x2c, 0x92, 0x46, 0xd3, 0xe5, 0xf0, 0x13, 0xb0, 0x29, 0x6d, 0x80, 0x44, 0x60, 0xc1, 0xf1, 0xa0, 0xbc, 0x08, 0x05, 0xca, 0xdb, 0xe8, 0x90, 0x2f, 0x1c, 0x0c, 0x44, 0xae, 0x28, 0x6f, 0xb9, 0xc7, 0xcd, 0x03, 0x7d, 0xf6, 0x13, 0xfb, 0x6d, 0x4b, 0x20, 0xe1, 0x61, 0x78, 0x65, 0x26, 0xb2, 0xd9, 0xdc, 0xa8, 0x69, 0xfe, 0x23, 0x03, 0x01, 0xb9, 0xd6, 0x25, 0x54, 0x23, 0xef, 0x90, 0x12, 0x8a, 0x92, 0xe5, 0x59, 0x6b, 0xe3, 0x42, 0xb1, 0x92, 0xfa, 0xaf, 0x3a, 0xc0, 0x3e, 0xf6, 0x77, 0xc1, 0xa5, 0x09, 0xab, 0x0b, 0x06, 0x06, 0xd0, 0xe2, 0xef, 0xe3, 0x32, 0xc4, 0x15, 0x4e, 0xe9, 0x9f, 0x27, 0x80, 0x04, 0x2c, 0xb9, 0x50, 0x02, 0x35, 0x09, 0xa6, 0xad, 0x2b, 0x6c, 0x3a, 0xa1, 0x1c, 0xb4, 0x18, 0xdf, 0xea, 0x6c, 0xb2, 0x9f, 0xc9, 0x30, 0xe2, 0xd0, 0x7a, 0x9b, 0xf0, 0xac, 0xbc, 0x29, 0x8a, 0x9c, 0xa0, 0x87, 0x96, 0xa3, 0xa4, 0x0a, 0xb4, 0x64, 0xe4, 0xad, 0x69, 0xa1, 0xef, 0x51, 0x67, 0xdc, 0x98, 0x97, 0xb0, 0x6a, 0x5f, 0x78, 0x98, 0x75, 0x0a, 0x56, 0xd7, 0x1c, 0x83, 0xd6, 0x42, 0xa4, 0x2f, 0x28, 0x57, 0x78, 0xcb, 0x25, 0x2b, 0x69, 0x54, 0x86, 0x23, 0x0a, 0x0a, 0xac, 0x93, 0x51, 0x89, 0x03, 0xd6, 0xc6, 0x81, 0x96, 0x04, 0x06, 0xf0, 0xad, 0xe4, 0x87, 0x49, 0x13, 0x01, 0xa9, 0xff, 0x05, 0x53, 0xa7, 0x02, 0x96, 0x73, 0xa1, 0xe6, 0x6d, 0xc5, 0x1e, 0xca, 0x37, 0x59, 0xf5, 0xab, 0xec, 0xeb, 0xf7, 0x45, 0xf3, 0xe0, 0x83, 0x50, 0xab, 0x11, 0xfb, 0x95, 0x59, 0x2c, 0xca, 0x07, 0x68, 0x1a, 0xfb, 0xd8, 0x86, 0xbc, 0x05, 0x86, 0x6a, 0x08, 0xc8, 0x21, 0xb3, 0x8d, 0x2d, 0x9b, 0xea, 0xb8, 0x75, 0x2f, 0x09, 0x43, 0x76, 0x4a, 0xca, 0x59, 0xed, 0xc2, 0x9f, 0xa2, 0x3b, 0x9d, 0x71, 0x57, 0x8a, 0x26, 0x4a, 0x9f, 0xc4, 0x17, 0x44, 0x03, 0xb8, 0xa2, 0xfc, 0xed, 0xa8, 0x4c, 0x93, 0x0c, 0x81, 0x61, 0x09, 0x9d, 0x8f, 0x2b, 0xfd, 0x98, 0x02, 0x34, 0x6e, 0xd1, 0x56, 0xbf, 0x01, 0xd0, 0x9c, 0x1a, 0x62, 0x60, 0xe5, 0x13, 0x0b, 0x8a, 0x71, 0xfc, 0xa4, 0xd3, 0x76, 0x2d, 0x79, 0x7d, 0x95, 0x68, 0xf6, 0x8b, 0xa7, 0x12, 0x8d, 0x2b, 0xcb, 0x73, 0x82, 0x03, 0xc4, 0x4b, 0x92, 0xdb, 0xfd, 0x39, 0x08, 0x71, 0xbb, 0x00, 0x92, 0xc7, 0x12, 0x6f, 0x3d, 0x3d, 0x22, 0x5d, 0x3d, 0x22, 0xb4, 0x79, 0x73, 0xb5, 0xe6, 0x13, 0x96, 0x15, 0x5e, 0x55, 0xeb, 0x45, 0x8c, 0x84, 0x87, 0x5e, 0xa2, 0xcf, 0xda, 0x99, 0xc8, 0x34, 0x12, 0x02, 0x9d, 0xe4, 0x02, 0x07, 0xa0, 0x7c, 0x61, 0x1a, 0xa8, 0xb2, 0x88, 0xad, 0x04, 0x8c, 0xbd, 0x43, 0xd8, 0x4a, 0x0c, 0x1e, 0x43, 0x99, 0x0d, 0x4a, 0x62, 0x52, 0xca, 0x90, 0xe8, 0x1e, 0x41, 0xd4, 0x48, 0xae, 0x98, 0x01, 0x9a, 0xed, 0x76, 0xee, 0x69, 0x79, 0xaf, 0x4a, 0xf6, 0x74, 0x4e, 0x80, 0x7b, 0x96, 0x51, 0x48, 0x03, 0xd6, 0x60, 0x8b, 0x02, 0x81, 0xa8, 0xc6, 0xa7, 0x54, 0x4e, 0xbe, 0x6f, 0x4c, 0x80, 0xef, 0xd8, 0x92, 0x53, 0xab, 0x87, 0x4a, 0x24, 0xca, 0x91, 0x06, 0x0f, 0x8e, 0x92, 0x85, 0x56, 0x9c, 0xbb, 0xeb, 0x50, 0x50, 0x23, 0x3e, 0xba, 0x45, 0x18, 0x58, 0x03, 0xfb, 0x7e, 0x25, 0x59, 0xcb, 0x36, 0x33, 0xb9, 0x01, 0x7d, 0x4f, 0xd5, 0x3b, 0x47, 0x9a, 0xa1, 0x4a, 0x55, 0x45, 0x9a, 0x75, 0xe5, 0x14, 0x7b, 0xf7, 0x80, 0x07, 0x42, 0xb7, 0x88, 0xb4, 0x30, 0x10, 0x99, 0x44, 0x8b, 0xda, 0x59, 0x21, 0xee, 0xdb, 0x80, 0xf1, 0x60, 0xb7, 0x60, 0x01, 0x6f, 0xd8, 0xca, 0x68, 0x93, 0x73, 0x83, 0x6d, 0x23, 0xe2, 0x14, 0x1d, 0xb9, 0xd0, 0xf9, 0xd1, 0x24, 0xe2, 0x42, 0xf6, 0xac, 0x68, 0x56, 0xec, 0xd1, 0x9e, 0x35, 0x5f, 0x32, 0x11, 0x98, 0xec, 0x06, 0x4f, 0x8e, 0xe1, 0x7a, 0xbe, 0x9a, 0x00, 0x49, 0xc6, 0x39, 0x21, 0x2b, 0x31, 0x12, 0xc0, 0x83, 0xd5, 0x6b, 0x91, 0xe2, 0x3c, 0x79, 0xd0, 0xd1, 0xf4, 0xf6, 0xca, 0xa4, 0x39, 0x64, 0x7a, 0x38, 0xa9, 0x5e, 0x77, 0x75, 0xa2, 0x59, 0x6b, 0x9e, 0x04, 0x1e, 0x12, 0x6a, 0x83, 0xd5, 0x69, 0x45, 0x0e, 0xf2, 0xe8, 0xbf, 0x83, 0xe7, 0xb2, 0x35, 0xab, 0x17, 0x8e, 0xc7, 0x83, 0xfe, 0x96, 0x7e, 0xa2, 0x08, 0xaa, 0x4b, 0x61, 0x14, 0xd0, 0x44, 0x31, 0x86, 0x15, 0x3c, 0x4d, 0xc2, 0xcd, 0x00, 0xd0, 0xb7, 0x0c, 0x4b, 0x04, 0x42, 0x2b, 0x91, 0xe2, 0xc0, 0xba, 0xf8, 0x2c, 0xde, 0x62, 0x33, 0x00, 0xab, 0x6e, 0x5c, 0x7f, 0x7b, 0xa6, 0x88, 0x62, 0xf8, 0x22, 0x2f, 0x9a, 0x7e, 0x16, 0x9b, 0x45, 0xd0, 0x2b, 0x62, 0xbd, 0x20, 0x6a, 0x53, 0x25, 0xc9, 0x8b, 0x84, 0x72, 0x2d, 0xac, 0x6a, 0x1a, 0x71, 0xcf, 0xe8, 0x45, 0xb6, 0x08, 0xf1, 0x27, 0xc5, 0x76, 0x9a, 0xac, 0x98, 0x0c, 0xa2, 0xdc, 0x7a, 0xaf, 0x0c, 0x28, 0xab, 0x48, 0xcf, 0x79, 0xb2, 0x37, 0x02, 0x51, 0x37, 0xa9, 0xa2, 0x9c, 0x2d, 0x47, 0x25, 0x78, 0xb7, 0xc5, 0x3d, 0x88, 0x97, 0x86, 0x11, 0x82, 0x2e, 0x21, 0x46, 0x26, 0x76, 0x74, 0x30, 0x19, 0x06, 0xf5, 0x0f, 0x60, 0xb9, 0xc5, 0x65, 0xb4, 0xa3, 0x59, 0xf3, 0x33, 0xeb, 0x10, 0x74, 0xaf, 0xc4, 0x8d, 0x0a, 0x4d, 0x20, 0x7d, 0x0f, 0x92, 0x69, 0x57, 0xd9, 0x92, 0x4e, 0x40, 0x07, 0x7d, 0xb6, 0x17, 0x99, 0x47, 0x88, 0x5d, 0xdb, 0xd2, 0x13, 0xd9, 0x42, 0xcb, 0x0a, 0xff, 0xe9, 0xd3, 0x26, 0x80, 0xfa, 0x00, 0xc9, 0x7a, 0xee, 0xd5, 0x71, 0xb0, 0xdb, 0x49, 0x10, 0xb8, 0xfd, 0x01, }; -uint8_t H_bpoly_MIDSEC[9*NEWHOPE_POLYBYTES] = { +uint8_t H_bpoly_MIDSEC[9*NEWHOPE_RINGCT20_POLYBYTES] = { 0x2d, 0x49, 0x5e, 0x31, 0x60, 0x14, 0x2a, 0x8e, 0x1a, 0x93, 0x55, 0xab, 0x21, 0xbe, 0x55, 0x59, 0x6d, 0x2b, 0x0d, 0x92, 0xa9, 0x85, 0x23, 0xa3, 0xc8, 0x6c, 0x5a, 0x85, 0x56, 0xc4, 0x9e, 0x32, 0x74, 0x82, 0xb8, 0x3d, 0xd0, 0x17, 0x03, 0xe2, 0xb2, 0x61, 0xd0, 0x63, 0xe9, 0xd9, 0xad, 0x04, 0x98, 0x64, 0x9c, 0xd9, 0xc9, 0x7d, 0x95, 0x98, 0x57, 0xa0, 0x58, 0x32, 0x68, 0x84, 0x3d, 0xd8, 0xe6, 0x0f, 0xc7, 0x02, 0x81, 0x65, 0x02, 0x50, 0xd8, 0xa8, 0xfe, 0xda, 0x5f, 0x83, 0xa4, 0x2f, 0xe6, 0xb4, 0xad, 0x4e, 0x2d, 0xc3, 0x6b, 0xe4, 0xf6, 0xf5, 0xb9, 0xee, 0x6b, 0xb2, 0x4a, 0x4d, 0xd9, 0x17, 0xea, 0x2e, 0xa8, 0xca, 0x50, 0x25, 0x4c, 0x7d, 0x80, 0xcc, 0xd9, 0xdd, 0xda, 0x7d, 0x43, 0x57, 0xc2, 0xeb, 0x98, 0xb0, 0x88, 0x54, 0x11, 0x29, 0xc3, 0xf0, 0x51, 0x32, 0x6e, 0x4a, 0x12, 0xfa, 0x75, 0xce, 0x38, 0xed, 0x21, 0x42, 0x89, 0xda, 0xfc, 0x1e, 0x74, 0xe8, 0x69, 0x0a, 0x7d, 0x0c, 0x78, 0xb7, 0x03, 0x0d, 0xba, 0xac, 0x89, 0x63, 0x6c, 0x5f, 0x98, 0x87, 0x4c, 0x91, 0x8f, 0xd3, 0x9d, 0x53, 0x07, 0xdd, 0x64, 0x9d, 0x5d, 0x66, 0xca, 0x55, 0x72, 0x2e, 0x97, 0x50, 0x6d, 0x8a, 0x75, 0xe9, 0x85, 0x96, 0x5a, 0x5c, 0x4c, 0xe3, 0xea, 0xd0, 0x8c, 0x0a, 0xdf, 0x55, 0x02, 0x85, 0x3d, 0x74, 0x7c, 0x18, 0x70, 0xc7, 0xcc, 0x5d, 0x4f, 0xe6, 0xd4, 0x96, 0xb8, 0x53, 0x54, 0x87, 0x69, 0x06, 0xdc, 0x61, 0xa3, 0x6a, 0x53, 0x6e, 0xe2, 0xe2, 0x26, 0x78, 0xf5, 0x59, 0xaa, 0x13, 0x4e, 0xc4, 0xe7, 0x4a, 0x41, 0xbf, 0xa6, 0x54, 0x11, 0xfc, 0x16, 0x86, 0x11, 0xae, 0x39, 0x04, 0x9f, 0xa6, 0x73, 0x23, 0xe3, 0x4c, 0x4a, 0x3a, 0x19, 0x72, 0x69, 0x8c, 0xff, 0x86, 0x7d, 0x76, 0x58, 0xb5, 0xe4, 0xf2, 0x15, 0xca, 0xdc, 0x8d, 0x16, 0x4c, 0x42, 0xe6, 0x07, 0x58, 0x4c, 0x42, 0x0d, 0xbc, 0xc9, 0x34, 0xdd, 0x36, 0xa7, 0xa8, 0x11, 0xc5, 0x43, 0x11, 0x84, 0xac, 0x45, 0xb5, 0x27, 0x77, 0x32, 0x5f, 0x8b, 0xe4, 0x7c, 0xe7, 0x79, 0x86, 0xaf, 0xc4, 0x08, 0x91, 0x48, 0x1e, 0xf5, 0x97, 0xfe, 0x55, 0x9c, 0x9b, 0x6e, 0x90, 0x15, 0x4d, 0x58, 0x79, 0x60, 0xef, 0x18, 0x32, 0x13, 0xee, 0x96, 0x8b, 0xd2, 0x24, 0x94, 0xd2, 0x4c, 0xec, 0x79, 0xcc, 0xfc, 0x21, 0x63, 0xa5, 0x0e, 0xd4, 0x65, 0x06, 0x1c, 0x34, 0x4c, 0xcb, 0x93, 0x19, 0xfa, 0xbb, 0xda, 0xd8, 0xbc, 0xb2, 0x0c, 0xac, 0xa0, 0x8d, 0x4c, 0x9a, 0xa6, 0xd3, 0x96, 0x4b, 0xa3, 0x58, 0x36, 0x17, 0xab, 0x70, 0x96, 0xae, 0x95, 0x77, 0x51, 0xa9, 0x52, 0x47, 0x87, 0x27, 0x3d, 0xc0, 0xcb, 0xe8, 0x5c, 0x7e, 0x04, 0xd5, 0x47, 0x01, 0x44, 0x82, 0xf4, 0xe7, 0xd3, 0xd1, 0xd2, 0x2d, 0x8f, 0x49, 0x2b, 0xb9, 0x26, 0x55, 0xd8, 0x17, 0x18, 0x63, 0x3d, 0x29, 0x88, 0x7d, 0x2d, 0xc0, 0x83, 0x1f, 0xa0, 0x2c, 0x39, 0x8b, 0xb1, 0x2a, 0xf7, 0xe6, 0xb5, 0x20, 0x9c, 0x54, 0xc7, 0x19, 0x8a, 0xac, 0x06, 0x02, 0x4c, 0x0c, 0x1f, 0x95, 0x11, 0xd4, 0xb2, 0x7b, 0x1d, 0xdc, 0x91, 0x80, 0xbc, 0x08, 0x29, 0x17, 0xf4, 0x43, 0x1c, 0x7c, 0x61, 0xcd, 0x4b, 0x79, 0xba, 0x96, 0xf5, 0x27, 0x40, 0x20, 0x5e, 0x87, 0xfa, 0x62, 0x31, 0x45, 0x40, 0x2e, 0x64, 0x23, 0xc4, 0x73, 0x8d, 0x92, 0xae, 0x13, 0xb3, 0xd8, 0x3a, 0xcf, 0xe4, 0xbf, 0x64, 0xee, 0x5e, 0x85, 0xe0, 0xd5, 0x79, 0xa3, 0xe8, 0xca, 0xb8, 0x7c, 0xae, 0xde, 0x0b, 0x0a, 0xbc, 0x50, 0xb4, 0x46, 0x6e, 0x91, 0xec, 0x28, 0x74, 0x92, 0x1c, 0xde, 0x3b, 0x75, 0x51, 0xab, 0x49, 0xec, 0x9b, 0x47, 0x15, 0x92, 0x4e, 0x75, 0x54, 0x63, 0xa1, 0x96, 0x6c, 0x14, 0x90, 0x48, 0xbd, 0x20, 0xe9, 0xd8, 0x45, 0xcc, 0x83, 0xb7, 0xe4, 0x62, 0x2d, 0x8f, 0x9a, 0x4c, 0x59, 0xd5, 0xc6, 0x4e, 0x2e, 0x9e, 0xa7, 0x23, 0xcb, 0x3d, 0x2e, 0x22, 0x45, 0x13, 0xf1, 0x13, 0xcb, 0x15, 0x79, 0xec, 0x4b, 0x0f, 0xda, 0x71, 0x61, 0x82, 0xd7, 0x2d, 0x08, 0x73, 0x63, 0xf5, 0x81, 0x8c, 0xed, 0xb3, 0x88, 0x69, 0xed, 0x8f, 0x8f, 0x6e, 0xf8, 0x52, 0x4f, 0x14, 0x2d, 0x94, 0x14, 0xaa, 0x63, 0xfe, 0xa8, 0x66, 0xcc, 0xa7, 0xd8, 0xe8, 0x1b, 0x3e, 0xbc, 0x99, 0xd2, 0x79, 0xaa, 0xcf, 0xd8, 0x4a, 0x9c, 0x02, 0x96, 0x90, 0x59, 0xc2, 0x1c, 0xbf, 0xc7, 0xc6, 0x33, 0x65, 0x19, 0x1b, 0xca, 0x12, 0x28, 0x61, 0x61, 0x7e, 0x2f, 0xe7, 0xc9, 0x7b, 0xab, 0x32, 0x66, 0x3d, 0xb3, 0x1e, 0xbb, 0xf6, 0x5a, 0xba, 0x67, 0xa0, 0x0c, 0x45, 0x67, 0x09, 0xec, 0x02, 0x3e, 0xde, 0x46, 0x62, 0xd3, 0xe2, 0xae, 0x3d, 0x46, 0xa9, 0xc1, 0x74, 0x3a, 0x24, 0xaa, 0x6c, 0xac, 0xc4, 0x10, 0x94, 0x56, 0x1c, 0xcb, 0x17, 0xd0, 0x54, 0x41, 0x39, 0xf8, 0x95, 0xc7, 0x95, 0xd0, 0xda, 0x09, 0x62, 0xa6, 0xf0, 0x1a, 0x2b, 0xd0, 0x2c, 0xca, 0xec, 0xef, 0x45, 0x59, 0x69, 0xa5, 0xbc, 0xa7, 0x0a, 0x05, 0x90, 0x30, 0x40, 0x54, 0xd0, 0xb2, 0xc8, 0x40, 0xa5, 0x21, 0x65, 0xee, 0xba, 0x01, 0xf9, 0xcd, 0x2c, 0x3c, 0x66, 0xe2, 0x67, 0x25, 0x24, 0x04, 0x04, 0x96, 0x59, 0x21, 0xab, 0xa0, 0x5c, 0xe7, 0xd6, 0xa4, 0x28, 0xad, 0x1c, 0x4d, 0x89, 0x21, 0xab, 0xc5, 0xd3, 0x9a, 0x60, 0x6a, 0x44, 0x34, 0xc0, 0x0a, 0xa4, 0x28, 0xd8, 0xe4, 0x4b, 0x81, 0x27, 0x49, 0x48, 0x86, 0x0c, 0x88, 0xe8, 0x9a, 0xc6, 0x3a, 0xb1, 0x63, 0xf4, 0xc4, 0x7e, 0xa2, 0x94, 0xc1, 0x02, 0x55, 0x11, 0xf8, 0xe9, 0x60, 0x82, 0x94, 0xbf, 0xa4, 0x6c, 0x2d, 0x69, 0x6f, 0x50, 0x80, 0x64, 0xe1, 0x68, 0xa2, 0x5a, 0x43, 0xb1, 0xc2, 0x28, 0xcc, 0x7d, 0x84, 0xa8, 0xe4, 0x5b, 0xbd, 0xed, 0xb6, 0xac, 0x4c, 0x67, 0x51, 0xce, 0x59, 0x99, 0xe6, 0x22, 0xad, 0x22, 0x2c, 0xf0, 0xb7, 0x36, 0x90, 0x57, 0xf0, 0x5c, 0x75, 0x4b, 0x3d, 0xaf, 0x58, 0xcb, 0xc4, 0x05, 0x8e, 0xaf, 0x93, 0x1b, 0x25, 0x1d, 0x68, 0xa5, 0x8d, 0x01, 0xef, 0xb7, 0x4f, 0x49, 0x10, 0x72, 0x41, 0xf3, 0x73, 0x5d, 0x00, 0x70, 0x2e, 0xab, 0x84, 0xe8, 0xa1, 0x8a, 0x29, 0x24, 0x96, 0x7c, 0xd6, 0x1f, 0x8c, 0x97, 0x10, 0x50, 0x2b, 0x58, 0x5b, 0x19, 0x3a, 0x03, 0x2b, 0x6a, 0xf0, 0x2b, 0x2c, 0x3e, 0x59, 0x5a, 0xe8, 0xe0, 0x4f, 0xed, 0x19, 0x3a, 0x82, 0x39, 0xb9, 0x74, 0x8d, 0x66, 0xff, 0x6f, 0x3f, 0x29, 0x23, 0x95, 0x96, 0x65, 0xa8, 0xa0, 0x8b, 0xc4, 0xa4, 0x78, 0xf4, 0xa1, 0x8f, 0xdb, 0x31, 0x0d, 0x47, 0xc1, 0x2f, 0xe4, 0xa1, 0x27, 0xa1, 0x24, 0xfe, 0xae, 0xf1, 0xea, 0x75, 0x75, 0x21, 0x63, 0x62, 0xea, 0xe3, 0x3f, 0xcd, 0x5f, 0xee, 0x2f, 0xff, 0x16, 0x5d, 0xe4, 0xbb, 0xec, 0xa8, 0x8e, 0x13, 0x59, 0x5c, 0x2c, 0xad, 0x97, 0xd3, 0x0a, 0x65, 0x76, 0x7c, 0x8e, 0x9a, 0x7a, 0x65, 0x96, 0x95, 0x0f, 0xf0, 0x8d, 0xe6, 0x16, 0x1b, 0x72, 0x27, 0x3b, 0x42, 0xed, 0xca, 0x0c, 0xae, 0x80, 0x45, 0xc6, 0xb0, 0x43, 0xd9, 0x82, 0x2c, 0x88, 0xd9, 0x5c, 0x61, 0x32, 0x1c, 0x9c, 0x17, 0x29, 0xf2, 0xa8, 0x2d, 0xb6, 0x38, 0xf1, 0xcb, 0xea, 0x51, 0x42, 0x96, 0x2a, 0x09, 0x0b, 0xee, 0x53, 0xb5, 0x1d, 0x1d, 0x43, 0x19, 0xc8, 0xd1, 0xa5, 0xc2, 0x20, 0xf8, 0x9c, 0xc6, 0x86, 0x0c, 0xf8, 0x3f, 0x51, 0x8b, 0x28, 0x46, 0xf3, 0x9a, 0xb9, 0xeb, 0x14, 0xcf, 0xf1, 0x1e, 0xf1, 0xb1, 0x04, 0x2e, 0x67, 0x50, 0xfa, 0x38, 0x92, 0x88, 0xe3, 0x13, 0xd4, 0x45, 0x2c, 0x3e, 0x11, 0xe4, 0xb2, 0x03, 0xf3, 0x44, 0xa2, 0x28, 0xab, 0x14, 0xe1, 0xcc, 0xdd, 0x70, 0x36, 0xa9, 0xdc, 0x04, 0x73, 0xbd, 0x73, 0xb0, 0xeb, 0x49, 0x09, 0x1f, 0xc9, 0x6f, 0x0e, 0xaf, 0x93, 0xea, 0x26, 0xba, 0x94, 0x0c, 0x96, 0x36, 0xf7, 0x5c, 0x36, 0x5d, 0x7d, 0x54, 0x39, 0x57, 0x61, 0x71, 0x6f, 0xad, 0xac, 0x75, 0xa9, 0xfb, 0x3d, 0x93, 0x3d, 0x6a, 0xa1, 0x71, 0xcd, 0x94, 0x25, 0xe2, 0xcc, 0x5f, 0x17, 0x79, 0x29, 0x32, 0x48, 0x25, 0xa7, 0x54, 0x03, 0x75, 0xa3, 0x75, 0x06, 0xae, 0x85, 0x40, 0x82, 0x05, 0x5a, 0x92, 0x40, 0x31, 0x66, 0xe2, 0xa5, 0x50, 0x94, 0x37, 0xe0, 0x31, 0xad, 0x66, 0x57, 0x19, 0xf0, 0x21, 0x05, 0x9d, 0x8b, 0xbf, 0x2e, 0xab, 0x40, 0x6d, 0x4a, 0x11, 0x27, 0xae, 0xd9, 0x25, 0x1f, 0xea, 0xab, 0x95, 0xa7, 0x42, 0x37, 0xbc, 0x3c, 0x2b, 0xc1, 0x2d, 0x89, 0x74, 0x6b, 0xc6, 0x76, 0xb6, 0xc4, 0xcc, 0xe9, 0x70, 0x21, 0x62, 0xe3, 0x4a, 0x8f, 0x82, 0xc2, 0x08, 0x40, 0x04, 0x29, 0x75, 0x6b, 0x57, 0xb8, 0x4d, 0x66, 0x55, 0xa6, 0x96, 0x29, 0xb9, 0x2e, 0xd7, 0x94, 0x7f, 0xa4, 0xf9, 0x9d, 0x71, 0x0f, 0x05, 0x1c, 0x4a, 0xa0, 0x56, 0xb7, 0xd5, 0x40, 0x5d, 0x4a, 0x22, 0x20, 0x72, 0x8f, 0x17, 0x3c, 0xd5, 0xaf, 0x0a, 0x6c, 0xcb, 0xd8, 0xdb, 0x35, 0x43, 0xb1, 0x3b, 0x02, 0x69, 0xc2, 0x43, 0x39, 0x38, 0x77, 0x54, 0xe8, 0x39, 0xab, 0x8b, 0x9a, 0x94, 0x52, 0xcc, 0xdd, 0xf5, 0x09, 0xb6, 0x79, 0x69, 0x59, 0x58, 0xf8, 0x79, 0x3a, 0x9b, 0x49, 0x69, 0xdd, 0xc8, 0xf9, 0x0d, 0x3d, 0xbe, 0x6c, 0x8a, 0x26, 0x0a, 0xd0, 0x52, 0x58, 0x4b, 0xe6, 0xe5, 0x15, 0xca, 0x6e, 0xe7, 0x60, 0xb9, 0x37, 0x94, 0x45, 0x45, 0x1e, 0x1d, 0x0c, 0xa1, 0xa8, 0x49, 0x79, 0x25, 0x46, 0xc0, 0x08, 0xb3, 0x32, 0x5a, 0xd0, 0x8a, 0xc9, 0x21, 0x81, 0xb2, 0x2b, 0xcf, 0x19, 0x06, 0x58, 0x27, 0x0a, 0x53, 0xd1, 0x8c, 0xba, 0x42, 0x9a, 0xe0, 0x0c, 0x4a, 0xae, 0x22, 0x82, 0xa6, 0x3d, 0x44, 0xa8, 0x0a, 0xdf, 0x87, 0xc1, 0x26, 0x55, 0xf1, 0x0f, 0x4c, 0x59, 0x43, 0xc0, 0x1d, 0xd9, 0x96, 0x4a, 0x25, 0x74, 0x49, 0x5f, 0x61, 0x5d, 0xb5, 0x88, 0x72, 0xdc, 0x61, 0x85, 0xd3, 0x7c, 0xe6, 0x73, 0x80, 0xb9, 0x97, 0x91, 0x83, 0x40, 0xf8, 0xd8, 0xbb, 0x5f, 0x0d, 0x13, 0x01, 0x0b, 0x9a, 0x2e, 0xdc, 0xaf, 0x65, 0x12, 0x82, 0x3c, 0x8c, 0x65, 0x11, 0x1a, 0xa0, 0x34, 0x62, 0x23, 0xd0, 0x47, 0x4d, 0x94, 0x6c, 0x6c, 0x51, 0x0c, 0xc1, 0xee, 0x36, 0x41, 0xea, 0x14, 0x0e, 0x8b, 0xd4, 0xc5, 0x6a, 0x85, 0x70, 0x39, 0xee, 0x3e, 0x31, 0x91, 0x82, 0x3d, 0x89, 0xa9, 0xaf, 0xa6, 0x0c, 0x19, 0xb9, 0x3d, 0xa2, 0x17, 0xf2, 0x6c, 0x48, 0x5f, 0xb9, 0xdf, 0x34, 0x0b, 0xf4, 0x16, 0xa6, 0xe7, 0x10, 0xb7, 0x33, 0x1d, 0x2c, 0x80, 0xea, 0xd4, 0x0b, 0xb5, 0x14, 0x0a, 0xac, 0x74, 0x4a, 0x90, 0x5b, 0xe7, 0x0d, 0xad, 0xce, 0xe4, 0x5f, 0x96, 0x00, 0x4a, 0x43, 0x14, 0x10, 0x25, 0x56, 0x6e, 0x34, 0x57, 0xaf, 0x11, 0x43, 0xa6, 0x0f, 0xf2, 0xbf, 0xd2, 0x64, 0x7b, 0xe3, 0x02, 0xac, 0x8d, 0x36, 0x8a, 0x7d, 0x06, 0x3c, 0x61, 0x7c, 0x1a, 0x1e, 0x01, 0xf3, 0x5c, 0x60, 0x56, 0x5a, 0xca, 0xa5, 0xea, 0x89, 0x14, 0x4a, 0x44, 0x51, 0xf1, 0xe1, 0xef, 0xd6, 0x5b, 0xbc, 0x0f, 0xce, 0x59, 0x83, 0x66, 0x07, 0x9e, 0xe2, 0xe6, 0x26, 0xda, 0x8d, 0x6c, 0x4e, 0x23, 0xa7, 0x40, 0xc4, 0x7c, 0x75, 0xca, 0x4b, 0x94, 0x44, 0xa1, 0x65, 0x94, 0x08, 0xcc, 0x6e, 0xda, 0x5a, 0xf5, 0x6d, 0x43, 0x48, 0xc3, 0x64, 0x49, 0xb1, 0x55, 0xc6, 0x61, 0xef, 0x7b, 0xe8, 0x78, 0xb5, 0x68, 0x43, 0x1b, 0x20, 0x0b, 0xd4, 0x73, 0x9e, 0x27, 0xb8, 0xd5, 0x2f, 0x66, 0x17, 0xb2, 0x58, 0x53, 0x52, 0xf1, 0x25, 0x39, 0x7a, 0x96, 0x97, 0x50, 0x0c, 0x50, 0x23, 0x2f, 0x40, 0x4a, 0x17, 0x60, 0xc8, 0x70, 0x3a, 0xcc, 0x62, 0x98, 0xc1, 0x50, 0x09, 0x13, 0x20, 0x5a, 0x03, 0x46, 0x41, 0x00, 0x31, 0x8b, 0x33, 0x73, 0x2f, 0x31, 0xb7, 0x2b, 0x9b, 0x5d, 0xc6, 0xd7, 0x7a, 0x6c, 0x55, 0x21, 0x82, 0x95, 0x98, 0xce, 0x1c, 0xfa, 0x5d, 0x86, 0xb2, 0x3e, 0x29, 0x5e, 0x53, 0xc5, 0x12, 0xc5, 0x67, 0x5c, 0x8d, 0x98, 0x8d, 0x78, 0x77, 0x57, 0x30, 0x29, 0xe4, 0x94, 0x99, 0x50, 0x26, 0x05, 0x86, 0x3a, 0x04, 0xb6, 0x5b, 0xf0, 0x44, 0xb3, 0xa8, 0xd4, 0x60, 0xba, 0xd0, 0x96, 0x44, 0x45, 0x92, 0x60, 0xa5, 0x7c, 0xe9, 0x45, 0x43, 0x51, 0x5e, 0xc8, 0x45, 0xec, 0xa4, 0xb1, 0x66, 0x38, 0x88, 0xf9, 0x4c, 0x6e, 0x18, 0xa1, 0xbe, 0x07, 0x44, 0x76, 0x26, 0x89, 0x4f, 0xf6, 0x74, 0x1e, 0x14, 0x3c, 0x59, 0x23, 0x6e, 0x07, 0xb2, 0x22, 0xa0, 0x9d, 0x89, 0x84, 0x89, 0x12, 0xc8, 0x5f, 0x4a, 0x90, 0x5c, 0x97, 0x18, 0x38, 0x78, 0x4e, 0x89, 0x30, 0x6b, 0x05, 0xb9, 0x52, 0xdd, 0x29, 0xe1, 0x36, 0xf1, 0x65, 0x6a, 0x59, 0x57, 0xb4, 0xf5, 0x36, 0xb1, 0xa7, 0x29, 0x29, 0x2f, 0x86, 0xae, 0x92, 0x80, 0xb5, 0xdb, 0x2a, 0x11, 0x61, 0x6c, 0x7a, 0x70, 0xe4, 0xe9, 0xd1, 0xea, 0xe1, 0xb6, 0xfa, 0x26, 0x03, 0x05, 0xa9, 0x6a, 0x3b, 0xaa, 0x66, 0xda, 0x63, 0x9a, 0xb4, 0x71, 0x49, 0xdb, 0x6f, 0x68, 0x03, 0x7d, 0x92, 0x2d, 0xc2, 0x3d, 0x55, 0x23, 0xb8, 0xb2, 0xb4, 0xab, 0x16, 0x36, 0x86, 0xb0, 0x11, 0x59, 0x12, 0xc0, 0x13, 0x2b, 0x84, 0x64, 0x7e, 0xe6, 0x3d, 0xab, 0xbb, 0x3a, 0x50, 0x12, 0xae, 0x5e, 0x0b, 0x32, 0xd9, 0x48, 0xb5, 0x82, 0xed, 0x50, 0x4b, 0xb4, 0x78, 0x19, 0xc2, 0xb7, 0xc4, 0x19, 0x86, 0x1f, 0x96, 0xc4, 0xed, 0x95, 0xb8, 0x15, 0x23, 0x4c, 0x0e, 0xb4, 0x66, 0x73, 0x0a, 0x50, 0x76, 0x03, 0xf9, 0x1b, 0xa0, 0x9a, 0xba, 0xe3, 0x8b, 0xe2, 0x0b, 0x5e, 0x6d, 0x75, 0x81, 0x8d, 0x73, 0x0b, 0xe1, 0x80, 0x33, 0x75, 0x0c, 0x32, 0xc7, 0xe6, 0xde, 0x06, 0x3a, 0xe7, 0x18, 0x8b, 0x88, 0x3e, 0x3d, 0x7c, 0xc4, 0x44, 0xaa, 0x9f, 0x16, 0x35, 0xca, 0x6b, 0x40, 0x24, 0x46, 0x29, 0xb3, 0x06, 0x8c, 0x7a, 0x02, 0x95, 0x3c, 0x10, 0x24, 0xc1, 0x3c, 0xba, 0xe5, 0x82, 0x63, 0x7f, 0xc8, 0x08, 0xc0, 0x1b, 0x36, 0x4e, 0x18, 0x89, 0x0d, 0x25, 0x12, 0xf9, 0x20, 0xac, 0x5c, 0x60, 0x11, 0x5b, 0xde, 0x7c, 0xd4, 0x66, 0xbc, 0x9b, 0xc8, 0x4d, 0x30, 0x2e, 0x64, 0x80, 0x00, 0x73, 0x79, 0x1c, 0xd8, 0x21, 0xe9, 0x25, 0xcf, 0x61, 0x54, 0x8b, 0xef, 0x0d, 0xe1, 0xc6, 0x8c, 0xaa, 0xdc, 0xde, 0xf8, 0xd3, 0x0d, 0xb4, 0x6a, 0xa9, 0x50, 0x87, 0x91, 0x5f, 0x66, 0x14, 0x91, 0x94, 0x89, 0x7a, 0x13, 0xd1, 0x1f, 0x37, 0x1e, 0xf2, 0xeb, 0xff, 0xa4, 0x94, 0xdc, 0x07, 0x69, 0x8a, 0xe5, 0x6c, 0x9d, 0xc6, 0x0b, 0x62, 0x3a, 0x4b, 0x3e, 0x73, 0xbc, 0x28, 0x60, 0xf0, 0xab, 0x5a, 0x6c, 0xfa, 0x22, 0x74, 0xb3, 0x0a, 0x3d, 0xba, 0x22, 0x48, 0x51, 0xf5, 0x5d, 0x8e, 0x6b, 0x2c, 0x46, 0x14, 0xf4, 0x62, 0x28, 0x2c, 0xa1, 0x9e, 0x3e, 0x49, 0x22, 0xd9, 0x7c, 0x59, 0xa7, 0xa0, 0x59, 0xf0, 0x18, 0x5f, 0x33, 0xd3, 0x6e, 0x57, 0x6d, 0xf4, 0xa3, 0x84, 0xdc, 0xb2, 0xea, 0xb6, 0xaa, 0x3c, 0xe2, 0x07, 0xda, 0xe2, 0x5e, 0x74, 0xb9, 0x86, 0x06, 0x6b, 0x18, 0xfe, 0x6c, 0x1a, 0x3c, 0x61, 0x89, 0x7b, 0x58, 0x65, 0x96, 0xc8, 0x58, 0x9a, 0x15, 0xa8, 0x64, 0x89, 0xfb, 0xdc, 0x9e, 0x80, 0x5b, 0x1c, 0x33, 0x56, 0xe4, 0x93, 0x74, 0xe7, 0x25, 0x69, 0x0a, 0xa0, 0x93, 0x54, 0x1d, 0xaa, 0x20, 0x6f, 0xad, 0x1d, 0x03, 0xfa, 0x2c, 0xba, 0x66, 0x12, 0xf6, 0xeb, 0x03, 0xe8, 0x59, 0x3a, 0x1e, 0xd7, 0x9b, 0x2d, 0x2c, 0x32, 0xeb, 0x6c, 0x35, 0x89, 0x1b, 0xf2, 0xa7, 0x18, 0x53, 0xea, 0x51, 0xea, 0x49, 0xaa, 0x5f, 0x8e, 0x99, 0x64, 0x49, 0xd0, 0x99, 0xd8, 0x43, 0x44, 0xa6, 0x98, 0x94, 0x43, 0xe7, 0x4f, 0x17, 0x97, 0x39, 0xf6, 0x95, 0xc6, 0x56, 0x5a, 0x08, 0x32, 0x5a, 0x6a, 0xc0, 0x99, 0x07, 0xbb, 0x46, 0x14, 0x7d, 0x8e, 0xc7, 0x83, 0xda, 0x39, 0xd2, 0xb2, 0xdf, 0xde, 0x07, 0x45, 0xf6, 0xc9, 0x4d, 0x5f, 0x91, 0x57, 0x8a, 0x73, 0x10, 0x77, 0x97, 0x9c, 0x74, 0x02, 0xa2, 0x18, 0x40, 0x60, 0xa1, 0xba, 0xd1, 0xdc, 0xd8, 0x2c, 0x4f, 0xcb, 0x10, 0x41, 0x76, 0x2d, 0x16, 0x5c, 0x6e, 0x38, 0xa2, 0xca, 0x4c, 0x3e, 0xa3, 0x56, 0xd2, 0x61, 0x9d, 0x15, 0x77, 0x69, 0xc7, 0xc2, 0xb2, 0xcb, 0x19, 0x9f, 0xa3, 0x46, 0xd3, 0xa8, 0x01, 0x2a, 0x72, 0xdb, 0xa7, 0xd4, 0x44, 0x58, 0x0c, 0x8e, 0x91, 0x1d, 0xdb, 0x32, 0xd8, 0xfd, 0x3f, 0x66, 0xe8, 0xc9, 0xe1, 0xb3, 0x26, 0x47, 0x28, 0x28, 0xa3, 0x8b, 0x51, 0xe2, 0x31, 0x90, 0x95, 0x73, 0xe0, 0xa0, 0xec, 0x08, 0xc5, 0xd6, 0xb4, 0x4b, 0xca, 0x6c, 0x80, 0x87, 0xe1, 0x37, 0xb7, 0x4f, 0x46, 0x0d, 0xaf, 0x4f, 0x1f, 0x09, 0x6c, 0xfa, 0x97, 0xb5, 0x67, 0xc8, 0xf1, 0x0c, 0x41, 0x35, 0xbc, 0xd5, 0xd4, 0xb1, 0x2e, 0xd5, 0x11, 0x5e, 0xd5, 0xb8, 0x02, 0xd3, 0x3e, 0x89, 0xcf, 0x95, 0xee, 0xca, 0xfb, 0x94, 0xb8, 0xb6, 0x87, 0x87, 0x36, 0x1c, 0xfe, 0x49, 0x46, 0x00, 0x54, 0x28, 0x4a, 0x46, 0x59, 0xe8, 0xd3, 0xab, 0x05, 0xdc, 0x66, 0x42, 0x2d, 0x44, 0x29, 0xb1, 0xd1, 0x8a, 0xaa, 0x82, 0xc5, 0x95, 0xd7, 0xdf, 0xdd, 0x16, 0x21, 0x83, 0x3c, 0x96, 0x4a, 0x8c, 0x54, 0xcc, 0x50, 0x87, 0x40, 0x60, 0x3e, 0xa5, 0x89, 0xc2, 0x3d, 0xab, 0x93, 0x3d, 0x80, 0xc2, 0x94, 0x95, 0x17, 0xe0, 0x9c, 0x90, 0x62, 0x85, 0xd3, 0x82, 0x4e, 0x62, 0x80, 0xd3, 0xca, 0x0e, 0xd4, 0x01, 0x61, 0x0a, 0x6a, 0xd0, 0x09, 0x4b, 0x32, 0x9e, 0x5e, 0x29, 0x1d, 0x4e, 0x7a, 0xb2, 0xae, 0x41, 0xdd, 0xd3, 0xf7, 0x21, 0xd9, 0xf1, 0x65, 0x64, 0x03, 0x73, 0xc0, 0xd6, 0x7d, 0x5f, 0xdf, 0x64, 0xfc, 0x78, 0xb5, 0x54, 0x29, 0x8e, 0x2c, 0x48, 0xc8, 0xc9, 0xe5, 0x94, 0x13, 0xa1, 0x67, 0x14, 0x41, 0xf4, 0x6b, 0x50, 0x46, 0x05, 0xc9, 0x30, 0x7c, 0x45, 0xb1, 0x91, 0xb3, 0x34, 0x21, 0x25, 0x5e, 0x44, 0x9a, 0x9b, 0x3a, 0x43, 0x70, 0x35, 0x71, 0x2e, 0x9f, 0xc3, 0x4f, 0xed, 0x68, 0x5b, 0x21, 0x14, 0xb0, 0x79, 0xd5, 0x00, 0x6c, 0xe4, 0x9c, 0x04, 0x4d, 0xd4, 0x4e, 0x8e, 0x42, 0x60, 0x52, 0x43, 0xbc, 0x86, 0x01, 0x56, 0x63, 0x1a, 0x94, 0xd6, 0x6a, 0x15, 0x21, 0x2f, 0x53, 0x49, 0x9d, 0x71, 0xb2, 0x67, 0x52, 0xb8, 0xcd, 0x90, 0x19, 0xce, 0x28, 0xcd, 0x21, 0x94, 0x82, 0x2b, 0x76, 0x8b, 0x1c, 0xe3, 0x8f, 0xf9, 0x4b, 0xb8, 0x96, 0xd8, 0xfb, 0xd7, 0x58, 0x9b, 0xdf, 0x1b, 0x47, 0x92, 0x09, 0x81, 0x51, 0x0a, 0xe2, 0xb7, 0x81, 0xfe, 0x3c, 0x53, 0x5f, 0x03, 0xd1, 0xb8, 0xb4, 0x26, 0xaa, 0x03, 0x89, 0x7a, 0x97, 0xb9, 0xfd, 0xb0, 0x6a, 0x48, 0xb2, 0x24, 0x55, 0x4e, 0x59, 0xeb, 0x5b, 0x0a, 0x2a, 0x0b, 0xb8, 0x27, 0x7f, 0x92, 0x08, 0xa3, 0xdc, 0x4a, 0x20, 0x7d, 0x82, 0xd9, 0x1a, 0x57, 0x32, 0x85, 0x03, 0x2f, 0xb6, 0x83, 0x87, 0x1d, 0x2e, 0x94, 0x40, 0xb2, 0xa5, 0x63, 0xd0, 0x39, 0x85, 0x8b, 0xe7, 0xb8, 0xd3, 0x82, 0x4a, 0xe4, 0x18, 0x5c, 0xd5, 0x92, 0x36, 0x7c, 0x1b, 0x95, 0x49, 0xb1, 0xbc, 0x3a, 0x77, @@ -38,7 +38,7 @@ uint8_t H_bpoly_MIDSEC[9*NEWHOPE_POLYBYTES] = { 0x99, 0x66, 0xdb, 0xf0, 0x45, 0xfc, 0xa4, 0xc3, 0x62, 0x0b, 0x47, 0x9b, 0x59, 0xa0, 0xb2, 0x8a, 0x34, 0x13, 0x27, 0x0c, 0xa4, 0x32, 0xce, 0x07, 0x19, 0x82, 0x32, 0xa9, 0x56, 0x8d, 0x30, 0xea, 0x25, 0x8e, 0xa8, 0x1a, 0x84, 0x1f, 0xb0, 0xa2, 0xa9, 0x6c, 0x9b, 0x5a, 0x6e, 0x69, 0x31, 0xa4, 0x72, 0x71, 0x0f, 0xf6, 0x3a, 0xcb, 0xe6, 0x71, 0xa5, 0x88, 0x7b, 0x69, 0x96, 0x52, 0x4f, 0x56, 0x6f, 0x68, 0x97, 0x2f, 0xa5, 0x43, 0x1f, 0x28, 0x76, 0x50, 0xcd, 0x24, 0xb2, 0xae, 0xef, 0xc2, 0xcb, 0xc3, 0x34, 0x4a, 0x51, 0x85, 0x14, 0xe8, 0x8b, 0xde, 0xba, 0xe2, 0xa1, 0x34, 0x79, 0xba, 0x7c, 0x44, 0x29, 0x9d, 0x22, 0x09, 0xe7, 0x35, 0x10, 0xee, 0x27, 0xf0, 0x48, 0xec, 0x48, 0x5e, 0xcc, 0x49, 0x78, 0x3b, 0x27, 0xaa, 0x21, 0x46, 0x11, 0xe1, 0x58, 0xd3, 0x16, 0x25, 0x5a, 0x92, 0xf9, 0x62, 0x6f, 0xf5, 0x47, 0x47, 0x6c, 0x75, 0x93, 0xbf, 0x7a, 0x86, 0x1a, 0x1c, 0xdc, 0x2a, 0x28, 0xb9, 0x01, 0x30, 0x45, 0xa6, 0xeb, 0x3d, 0x18, 0x9f, 0x13, 0x5e, 0x5c, 0x50, 0x50, 0x6d, 0x7e, 0xa3, 0xa2, 0x50, 0x21, 0xf4, 0x12, 0x0c, 0xdf, 0x1a, 0x0e, 0xeb, 0x95, 0x1a, 0x43, 0x95, 0x02, 0xd5, 0xc2, 0x73, 0x01, 0x18, 0xd5, 0x43, 0x9e, 0x4a, 0x2b, 0x91, 0x5a, 0xaa, 0x16, 0xf4, 0x01, 0x57, 0xad, 0x7e, 0x24, 0xcd, 0x3d, 0x15, 0xed, 0xfc, 0x99, 0x14, 0x10, 0xa1, 0x38, 0x5e, 0x51, 0x49, 0x7b, 0x1f, 0xd4, 0x59, 0x2f, 0x25, 0x84, 0x9f, 0xcb, 0xb9, 0x1b, 0x20, 0xf8, 0x1b, 0x2c, 0x8c, 0x3c, 0xeb, 0x93, 0x50, 0x71, 0x27, 0xcf, 0xcb, 0xf6, 0x41, 0x75, 0x19, 0x09, 0x86, 0xf1, 0x93, 0x5f, 0x52, 0x8c, 0xd1, 0xe7, 0xa6, 0x41, 0x7e, 0x6d, 0x3f, 0xc3, 0x52, 0x69, 0xd9, 0x49, 0xb6, 0x00, 0x30, 0x59, 0x1c, 0xba, 0xf3, 0xb8, 0x49, 0x65, 0xd4, 0xae, 0x08, 0x36, 0x7e, 0x6b, 0x32, 0x05, 0x9a, 0xba, 0xa4, 0x31, 0xb0, 0x30, 0x54, 0xe7, 0x07, 0x26, 0x41, 0x61, 0x70, 0x96, 0xdc, 0x05, 0xd2, 0xd1, 0xa3, 0xc7, 0x0a, 0x08, 0x67, 0xf5, 0xd1, 0x05, 0x1e, 0x84, 0x7a, 0xb0, 0x1b, 0xac, 0x85, 0xe7, 0x11, 0xf8, 0xc8, 0x6c, 0x22, 0x89, 0x46, 0x59, 0x68, 0xf0, 0x74, 0xcd, 0x0f, 0x07, 0xda, 0xa5, 0x07, 0x55, 0x98, 0x1d, 0x83, 0x62, 0x77, 0x27, 0x9b, 0x34, 0x09, 0xad, 0x05, 0x82, 0x68, 0x2c, 0x18, 0x18, 0x41, 0x9e, 0xae, 0x39, 0x09, 0xe5, 0x3f, 0x7b, 0xcf, 0xb7, 0xb4, 0x7d, 0xa8, 0x91, 0xce, 0x1c, 0x5b, 0xd9, 0xd0, 0x2d, 0x04, 0x52, 0x8b, 0x41, 0x93, 0x3a, 0xa9, 0x75, 0x92, 0x69, 0x9a, 0xa9, 0x46, 0xfa, 0x3e, 0x75, 0xca, 0x7a, 0x4a, 0x1a, 0x22, 0x0b, 0x69, 0x6f, 0x4d, 0xb4, 0x4e, 0x0c, 0x2d, 0x63, 0xcd, 0x15, 0x59, 0x66, 0x9c, 0xa8, 0xd0, 0x8c, 0xca, 0xab, 0x70, 0xe6, 0x1b, 0x88, 0xd9, 0xad, 0x68, 0x07, 0x68, 0x13, 0x28, 0x98, 0x88, 0x98, 0xae, 0x49, 0x47, 0x05, 0x89, 0x20, 0xd4, 0x08, 0x7d, 0x74, 0x81, 0xe6, 0xc5, 0x03, 0xc5, 0x55, 0x10, 0x7d, 0xca, 0x01, 0xe6, 0x5e, 0x28, 0x68, 0x52, 0xe2, 0x61, 0x16, 0x4d, 0x28, 0x38, 0x37, 0xdb, 0xa6, 0x3b, 0xa1, 0x24, 0x97, 0xd1, 0x1b, 0x56, 0x91, 0x01, 0xce, 0x59, 0x11, 0x2d, 0x88, 0x1b, 0x8f, 0x51, 0x59, 0x83, 0x68, 0x77, 0x39, 0x4d, 0xd8, 0x09, 0x2f, 0xe1, 0x55, 0x69, 0x62, 0xed, 0x3e, 0x05, 0xe2, 0x34, 0xd9, 0xaf, 0x8a, 0x5f, 0x0c, 0xe2, 0x80, 0xb5, 0x29, 0xdc, 0x02, 0x28, 0x50, 0xe3, 0x5a, 0xad, 0x70, 0x09, 0x57, 0xe5, 0xfb, 0xc5, 0xe9, 0xa6, 0x87, 0x27, 0xdf, 0x23, 0xf8, 0x1e, 0x6e, 0xb7, 0x00, 0x2c, 0x93, 0x83, 0x40, 0x6d, 0x60, 0x77, 0xd6, 0xc1, 0x60, 0x75, 0x21, 0x14, 0xf9, 0x9b, 0xd4, 0xf2, 0xd0, 0x79, 0x41, 0xf6, 0x07, 0xf6, 0xd3, 0xf5, 0xf8, 0x19, 0x0b, 0x52, 0xaa, 0xe1, 0xe8, 0xf1, 0xb7, 0x17, 0xa1, 0x82, 0x74, 0x4e, 0x48, 0xab, 0xe9, 0x61, 0x01, 0x78, 0x47, 0x22, 0x86, 0xbd, 0x8b, 0x50, 0xd8, 0xee, 0xd5, 0x9f, 0x67, 0x15, 0x56, 0x4a, 0x8d, 0xf0, 0x79, 0xb8, 0xef, 0xaf, 0x43, 0x20, 0x18, 0x87, 0x74, 0x40, 0x4f, 0x1a, 0x20, 0xb5, 0x31, 0x12, 0xd0, 0xfb, 0x16, 0x24, 0x94, 0x20, 0xb7, 0xaf, 0x2a, 0x4a, 0xd3, 0xa1, 0xa6, 0x00, 0xef, 0x75, 0xd1, 0x7b, 0x66, 0xb1, 0xbf, 0x25, 0x49, 0x88, 0xb5, 0x30, 0xa5, 0x08, 0xa6, 0x8c, 0x78, 0xa0, 0x41, 0x22, 0xdb, 0x27, 0x5e, 0xa9, 0x62, 0xd2, 0xa3, 0x97, 0x49, 0x8b, 0xc5, 0xa8, 0x96, 0x21, 0xf3, 0xe8, 0xeb, 0xe2, 0x7d, 0x0d, 0xae, 0xb5, 0xe6, 0xbc, 0xd7, 0x35, 0x5d, 0x18, 0xbb, 0xc4, 0xdf, 0x07, 0x10, 0xa5, 0x76, 0x97, 0x63, 0x1d, 0x15, 0xdb, 0x2e, 0x47, 0x12, 0xa5, 0x34, 0x3a, 0x90, 0xf4, 0x55, 0x9a, 0xa6, 0x33, 0xb9, 0x5f, 0xd5, 0x37, 0xcc, 0x53, 0xfe, 0x51, 0x87, 0x26, 0xa2, 0x46, 0x5f, 0xc0, 0xc5, 0x0c, 0xa5, 0x35, 0x17, 0x03, 0x24, 0x53, 0x11, 0x55, 0x06, 0x4b, 0x0d, 0x8e, 0xf2, 0x66, 0x12, 0x70, 0x4f, 0xcb, 0x66, 0xa6, 0x8d, 0x8c, 0xb0, 0x7d, 0x07, 0xc2, 0xc8, 0x5c, 0x85, 0x65, 0x3d, 0xde, 0x09, 0xf8, 0xd3, 0xf4, 0x97, 0x27, 0x42, 0xb7, 0xa4, 0x11, 0x66, 0x30, 0x26, 0xca, 0xd4, 0x81, 0x9a, 0x94, 0x5b, 0x0d, 0x1d, 0x38, 0xc8, 0x40, 0xce, 0xac, 0x70, 0x99, 0x54, 0x24, 0x2c, 0x99, 0x73, 0xc2, 0xd9, 0x16, 0x15, 0x58, 0x79, 0x4c, 0x4f, 0x1e, 0xbf, 0xd1, 0xe1, 0x52, 0x7f, 0x00, 0x90, 0x5f, 0x3a, 0xd5, 0x2d, 0x9d, 0x2a, 0x27, 0xdb, 0xaa, 0x4c, 0x64, 0x80, 0x02, 0x67, 0xfd, 0x43, 0xc7, 0xb9, 0x35, 0x47, 0x5c, 0x12, 0xb0, 0xd9, 0xfe, 0xbf, 0x52, 0x4e, 0x7c, 0x70, 0x42, 0x95, 0x5c, 0x1d, 0x58, 0xf0, 0x09, 0x82, 0x8c, 0x2d, 0x15, 0x2a, 0xeb, 0x33, 0xe3, 0x2e, 0x44, 0x92, 0xeb, 0x17, 0x56, 0x70, 0xe2, 0x14, 0xb4, 0xcd, 0xd7, 0x50, 0xb9, 0x84, 0x1c, 0xe5, 0xac, 0xb2, 0xe6, 0xee, 0xbd, 0x30, 0x84, 0xa7, 0x54, 0xe6, 0x5c, 0xf0, 0xa1, 0x4c, 0x1e, 0xd1, 0x8b, 0xea, 0x92, 0x6d, 0x4c, 0x91, 0x93, 0x80, 0xf8, 0x92, 0x8b, 0x5a, 0xa2, 0x76, 0x97, 0x74, 0xcd, 0x2e, 0x79, 0xea, 0x13, 0x72, 0xf9, 0xc8, 0x40, 0x93, 0x9b, 0xd5, 0x12, 0x72, 0xf2, 0x15, 0x55, 0x43, 0x55, 0xc7, 0x3c, 0x91, 0x87, 0x61, 0x9e, 0x1b, 0x10, 0x65, 0xf6, 0x2e, 0x4c, 0x42, 0xab, 0xa0, 0x89, 0x06, 0xa2, 0xf6, 0xc4, 0x3c, 0xb5, 0xfc, 0x32, 0x59, 0xdb, 0x84, 0x9f, 0xe4, 0x99, 0xa9, 0x21, 0x8c, 0x23, 0x16, 0xaa, 0x57, 0x0d, 0x09, 0x92, 0xc8, 0xe7, 0x21, 0xfd, 0x24, 0x88, 0x4b, 0x1e, 0xc3, 0x9a, 0xd6, 0x61, 0x79, 0xdc, 0x1d, 0x24, 0x30, 0x43, 0x88, 0x6b, 0x89, 0x6d, 0x45, 0xdb, 0x30, 0x3e, 0x75, 0x67, 0x29, 0xfc, 0x2a, 0x13, 0xb8, 0x2e, 0x92, 0x64, 0x7c, 0xd4, 0x0d, 0x69, 0x08, 0xe4, 0xd1, 0x77, 0x68, 0x8b, 0x84, 0x2c, 0x90, 0x0f, 0x7e, 0xb3, 0x25, 0x1a, 0x3c, 0x9d, 0xda, 0x74, 0x22, 0xa2, 0xb2, 0x5e, 0x51, 0xa4, 0xd1, 0x94, 0xdc, 0x30, 0x56, 0x5d, 0xac, 0x1c, 0x54, 0x8f, 0xe9, 0x0d, 0x37, 0xe2, 0xa4, 0xd8, 0xd6, 0x1c, 0x2c, 0x00, 0xcb, 0xdf, 0xda, 0x1c, 0x82, 0x03, 0x41, 0xc3, 0xfa, 0xfa, 0xed, 0x9a, 0x6c, 0xc6, 0xcf, 0x30, 0xe6, 0x56, 0x28, 0x4d, 0x01, 0x12, 0xed, 0x19, 0x3d, 0x68, 0x98, 0xc3, 0x1e, 0xa7, 0xe9, 0x97, 0x98, 0x15, 0x01, 0x00, 0x60, 0x3b, 0x17, 0x8e, 0x17, 0x19, 0x12, 0x5a, 0x60, 0x4b, 0xe4, 0x02, 0x97, 0x28, 0x26, 0x75, 0xa0, 0x72, 0x20, 0x30, 0x28, 0xa7, 0x90, 0x71, 0xae, 0x94, 0x40, 0x99, 0xfd, 0xb5, 0x1a, 0xa1, 0x6f, 0xde, 0x29, 0x64, 0x75, 0x6d, 0x7d, 0x74, 0x1d, 0xd4, 0x67, 0xcb, 0x9d, 0xae, 0x12, 0x89, 0xdc, 0x88, 0xc6, 0xc7, 0x01, 0x5b, 0xf7, 0xe8, 0x06, 0x89, 0x1b, 0x34, 0x21, 0x5e, 0xaf, 0x04, 0xd5, 0x5e, 0x28, 0x39, 0x90, 0x14, 0x01, 0x5b, 0x02, 0xc9, 0x55, 0xc9, 0x5a, 0x53, 0xe7, 0xd7, 0x01, 0xbc, 0xa0, 0x43, 0x91, 0xb3, 0xb7, 0x6a, 0x81, 0xcd, 0x81, 0x49, 0x80, 0x82, 0x42, 0x98, 0x21, 0x05, 0x81, 0xd3, 0xd2, 0x50, 0xa0, 0xb1, 0x24, 0xf7, 0x50, 0x63, 0xb1, 0xaf, 0x86, 0x96, 0x31, 0x7a, 0x4d, 0x06, 0x98, 0x9f, 0x62, 0xd4, 0x07, 0x85, 0xf4, 0x90, 0x0e, 0x0b, 0xf9, 0xf4, 0x3c, 0x01, 0x9f, 0x3a, 0xc8, 0x97, 0x43, 0x07, 0x29, 0x6a, 0x72, 0xe8, 0x41, 0xf5, 0x2a, 0x7e, 0x5e, 0xad, 0xe6, 0x3f, 0xa5, 0x72, 0xbe, 0x99, 0x1e, 0x80, 0x87, 0x07, 0xc8, 0xe2, 0x94, 0x1b, 0x6d, 0x5b, 0xba, 0x31, 0x55, 0x8b, 0xbc, 0x66, 0x86, 0xe5, 0x25, 0x22, 0x10, 0x3a, 0xa6, 0xb6, 0x58, 0x5d, 0x81, 0x6d, 0x74, 0xc3, 0x25, 0xf1, 0x3a, 0xd2, 0x55, 0x62, 0x8d, 0x24, 0x77, 0x0a, 0xbd, 0x2d, 0x42, 0xac, 0xcc, 0x20, 0xfb, 0x54, 0x8c, 0x20, 0x8f, 0x0a, 0x63, 0x05, 0x80, 0x07, 0x98, 0x5c, 0x23, 0x7b, 0x1c, 0x78, 0x2f, 0x37, 0xaf, 0xb9, 0xe8, 0xa2, 0xcc, 0x98, 0x6d, 0x98, 0x3e, 0x88, 0x45, 0xc9, 0x82, 0x4b, 0x5c, 0xe6, 0x85, 0x95, 0x29, 0xa3, 0x68, 0x51, 0x49, 0x31, 0xfe, 0x68, 0xa8, 0x11, 0x54, 0x67, 0x26, 0xb8, 0x88, 0xb9, 0x48, 0xac, 0x53, 0x11, 0x35, 0xf6, 0x81, 0xa5, 0xce, 0x3c, 0xa0, 0xae, 0x88, 0x53, 0xf1, 0xcc, 0xf4, 0x89, 0x4f, 0xfa, 0x9e, 0xdf, 0x81, 0xff, 0xf8, 0xa8, 0x71, 0x03, 0xdd, 0xc0, 0x4e, 0x8b, 0x3a, 0xb0, 0x9b, 0x0a, 0x68, 0x66, 0x13, 0x14, 0x41, 0xbe, 0x11, 0x68, 0x54, 0x92, 0xb8, 0x38, 0x4f, 0x41, 0xd7, 0x91, 0xf3, 0x44, 0xa8, 0xac, 0x9d, 0x54, 0xbf, 0x8b, 0x90, 0x08, 0x11, 0x7c, 0x90, 0x93, 0x38, 0x29, 0x22, 0xa6, 0xa7, 0x59, 0x1e, 0x4b, 0xcd, 0x2e, 0xb5, 0xed, 0xeb, 0xf8, 0xc9, 0xcd, 0x2c, 0x20, 0x77, 0x80, 0x3f, 0x82, 0x69, 0x0e, 0x8c, 0x24, 0x01, 0x05, 0x68, 0x65, 0x90, 0x5f, 0x03, 0x9e, 0x22, 0x51, 0xe1, 0xcd, 0x21, 0x82, 0x22, 0xef, 0x75, 0xcd, 0x68, 0x6f, 0xa1, 0x07, 0x62, 0x0a, 0xbb, 0xad, 0x38, 0x67, 0x6c, 0xcd, 0xd7, 0x2f, 0xbc, 0x7f, 0xb0, 0x05, 0x69, 0x60, 0x45, 0x76, 0xb1, 0x37, 0xee, 0xec, 0xc7, 0x7a, 0x11, 0x7b, 0x08, 0xd2, 0x1d, 0xa3, 0x9d, 0x08, 0xa9, 0x6c, 0xac, 0x1a, 0xca, 0xfe, 0x88, 0x4f, 0x4a, 0x85, 0x5e, 0xc4, 0xec, 0x95, 0x91, 0xbd, 0x40, 0xce, 0x53, 0x0d, 0xcd, 0x97, 0x92, 0x43, 0x53, 0x17, 0x32, 0xaa, 0xb4, 0xda, 0x58, 0xc6, 0xbb, 0xc1, 0x32, 0x63, 0x31, 0x6d, 0x5f, 0x51, 0x5d, 0xd9, 0xa4, 0xc8, 0xc6, 0x1d, 0x43, 0x9e, 0x76, 0xa0, 0x19, 0x02, 0x58, 0x81, 0x2e, 0xb4, 0x1e, 0x4a, 0x13, 0x44, 0xb4, 0x0a, 0xdc, 0x8d, 0xd4, 0x63, 0x3e, 0x12, 0x22, 0x9a, 0x39, 0xa7, 0xa5, 0xa6, 0xd3, 0x73, 0x39, 0x92, 0x46, 0x57, 0xa9, 0xb6, 0x8e, 0xd8, 0x78, 0x5f, 0xaa, 0x6a, 0x49, 0x21, 0x6a, 0x41, 0x1d, 0x65, 0xf3, 0x07, 0x55, 0x60, 0xa9, 0x17, 0x99, 0xe1, 0x7a, 0x13, 0xf6, 0x35, 0x70, 0x4f, 0x95, 0x10, 0x03, 0x20, 0x37, 0xb0, 0x89, 0xb9, 0x24, 0xa4, 0xf0, 0x5d, 0x97, 0x54, 0x26, 0x68, 0x85, 0x48, 0x35, 0xfd, 0xa0, 0x19, 0xd4, 0x66, 0x19, 0x76, 0xf1, 0xd4, 0x13, 0xe3, 0x6e, 0xa5, 0x4b, 0x7d, 0x82, 0xb6, 0x4b, 0x61, 0x52, 0x35, 0xbf, 0x5c, 0xc7, 0xdb, 0x51, 0x1a, 0x23, 0xe6, 0x4d, 0x96, 0x60, 0xad, 0x22, 0x01, 0xb2, 0x1a, 0xd9, 0xb2, 0x89, 0xce, 0x43, 0x93, 0xa2, 0xdf, 0x41, 0x20, 0xdc, 0x36, 0x81, 0xd3, 0x0d, 0x28, 0x7c, 0xf6, 0x9c, 0xd4, 0x16, 0x28, 0x45, 0xda, 0x00, 0x3d, 0x91, 0x62, 0x66, 0x7a, 0x6b, 0xbc, 0xb4, 0x30, 0x92, 0xb8, 0xd1, 0x46, 0x1c, 0x71, 0x1e, 0x67, 0x10, 0xb3, 0xe3, 0xf1, 0x06, 0xb7, 0x5f, 0x31, 0xd6, 0xe0, 0x26, 0x24, 0x3d, 0x01, 0x32, 0x64, 0xc6, 0x89, 0x47, 0x11, 0xa0, 0x4a, 0x6b, 0xb2, 0x0d, 0x06, 0x51, 0x49, 0xc8, 0x40, 0xc4, 0x6d, 0x4c, 0x51, 0x5c, 0xec, 0x94, 0x72, 0x34, 0xa7, 0xeb, 0x22, 0xab, 0x05, 0x3b, 0x15, 0x6f, 0x66, 0xd4, 0xea, 0x3b, 0x05, 0xe9, 0x53, 0xe0, 0x26, 0x7f, 0xa2, 0x54, 0x29, 0x34, 0x5b, 0x1a, 0xae, 0xe7, 0x6e, 0xd0, 0x54, 0x9f, 0xc8, 0xd7, 0x55, 0x09, 0x1a, 0x3e, 0xea, 0x28, 0x85, 0x91, 0x52, 0x41, 0x4e, 0x67, 0x43, 0x16, 0xb6, 0xc8, 0xcc, 0x06, 0xbb, 0x00, 0x0c, 0x47, 0x82, 0xf5, 0x64, 0x44, 0x2e, 0xf7, 0xcb, 0x42, 0x6c, 0x78, 0x53, 0xdf, 0xe0, 0x5a, 0x9f, 0x22, 0x61, 0x89, 0x66, 0xe0, 0x51, 0x05, 0x20, 0x2f, 0x7b, 0x1a, 0x69, 0xf2, 0xd7, 0xf5, 0x65, 0x06, 0xdb, 0x99, 0x51, 0xa1, 0xec, 0xbb, 0xb7, 0x96, 0x91, 0xc2, 0xfd, 0x58, 0x15, }; -uint8_t A_bpoly_MAXSEC[14*NEWHOPE_POLYBYTES] = { +uint8_t A_bpoly_MAXSEC[14*NEWHOPE_RINGCT20_POLYBYTES] = { 0x48, 0x13, 0xa2, 0xdb, 0x76, 0x2d, 0x63, 0x4a, 0xdf, 0x02, 0xc8, 0xd3, 0x45, 0x5a, 0xc3, 0x6c, 0x10, 0xc7, 0x46, 0x1c, 0x52, 0x8f, 0x09, 0xc2, 0x77, 0x99, 0xc2, 0x88, 0x79, 0x6f, 0x0b, 0xd9, 0xdf, 0xd0, 0x02, 0xb1, 0xc5, 0x52, 0xa6, 0x49, 0xc4, 0x07, 0xef, 0x8d, 0x11, 0x96, 0xa5, 0x21, 0x03, 0xfd, 0x03, 0x44, 0xb0, 0xe6, 0x90, 0x23, 0xbe, 0xc6, 0x69, 0x1a, 0xea, 0x5d, 0x5c, 0x18, 0xca, 0xaa, 0x03, 0x50, 0xb9, 0x15, 0x4d, 0xce, 0x87, 0xd8, 0xdb, 0xb8, 0x8b, 0x40, 0xac, 0xa8, 0xf8, 0xd6, 0xf9, 0x5f, 0x18, 0x41, 0x9d, 0xd4, 0x4a, 0xf1, 0x73, 0x93, 0x24, 0x1c, 0x73, 0xa2, 0xfa, 0xaa, 0xfa, 0x84, 0x88, 0x60, 0x5d, 0x3c, 0x96, 0xd1, 0x97, 0x9f, 0x13, 0xbe, 0x34, 0x61, 0x54, 0x05, 0x09, 0xb0, 0xb0, 0x9d, 0x00, 0xa8, 0xc3, 0x88, 0x58, 0xb5, 0x12, 0x62, 0x68, 0x9f, 0xf4, 0x7b, 0xb0, 0x71, 0xbf, 0xbf, 0x86, 0x7b, 0xb7, 0xac, 0xb4, 0x55, 0x85, 0x53, 0x3d, 0xe6, 0x1d, 0x4e, 0x99, 0x9c, 0x01, 0xaf, 0xf8, 0x56, 0xde, 0x75, 0xa3, 0x60, 0xa8, 0x9b, 0x88, 0x4c, 0x8f, 0x42, 0xd9, 0x2a, 0x84, 0x08, 0xc4, 0x40, 0x58, 0x1a, 0x10, 0x98, 0xb7, 0x19, 0x87, 0x08, 0x0f, 0x2f, 0xb4, 0xbd, 0x6c, 0x75, 0xb4, 0x57, 0x98, 0x02, 0xab, 0xb0, 0xae, 0x8f, 0x09, 0xac, 0x8a, 0x0c, 0xfa, 0x99, 0x5c, 0x89, 0xe2, 0x37, 0x7e, 0x1d, 0x06, 0x44, 0x62, 0xa2, 0x91, 0xd8, 0x92, 0xba, 0x69, 0xa4, 0x92, 0x71, 0x9e, 0x72, 0xa1, 0x97, 0x40, 0x3e, 0x65, 0xf2, 0xd0, 0x56, 0x8a, 0x67, 0x7b, 0xa5, 0x40, 0x44, 0x79, 0x2f, 0xd1, 0x70, 0xc9, 0xee, 0x34, 0xa4, 0xee, 0x17, 0x52, 0xc2, 0x4e, 0xfc, 0x73, 0xa7, 0xc8, 0xd6, 0xba, 0xdc, 0xee, 0x07, 0x21, 0xa5, 0xd2, 0xa9, 0x36, 0xb5, 0x5f, 0x0b, 0xae, 0x47, 0x21, 0xe7, 0xa1, 0x92, 0x6e, 0xd5, 0xf8, 0xb7, 0x3f, 0x4c, 0x61, 0x2d, 0x24, 0x19, 0xa8, 0x4d, 0x42, 0x3a, 0xb7, 0x4f, 0x47, 0xf9, 0x7d, 0x48, 0x52, 0x11, 0x2f, 0x42, 0x2a, 0x43, 0x26, 0x04, 0x25, 0x21, 0x5c, 0xc1, 0x6e, 0x8d, 0x0a, 0xe7, 0x60, 0x1a, 0x86, 0x9f, 0xf6, 0x28, 0xec, 0x45, 0x60, 0x13, 0xcf, 0x85, 0x0f, 0xda, 0xc5, 0xc1, 0x21, 0x87, 0x3a, 0x70, 0x36, 0x66, 0xc9, 0x21, 0x41, 0xc9, 0x37, 0x71, 0xc6, 0x02, 0xd4, 0x48, 0x41, 0xb1, 0x3c, 0x68, 0x87, 0xe3, 0xf7, 0xd8, 0x7b, 0x61, 0x8f, 0x4d, 0xfb, 0xfd, 0xa8, 0xb7, 0x34, 0xeb, 0x3a, 0x52, 0xea, 0x54, 0x4d, 0x54, 0x42, 0xc1, 0x95, 0xe0, 0x18, 0x00, 0x1b, 0xcc, 0xda, 0x67, 0x4f, 0xcc, 0x78, 0xe5, 0x66, 0x02, 0x55, 0x5f, 0x05, 0x2b, 0x1c, 0xeb, 0xe1, 0xc0, 0x1a, 0xb9, 0x62, 0x30, 0x66, 0x55, 0x18, 0x31, 0x09, 0x9f, 0x05, 0x9f, 0x22, 0xc9, 0x39, 0xe1, 0x8f, 0x07, 0xd2, 0x3b, 0x80, 0x6e, 0xa6, 0xbc, 0xf2, 0x1f, 0xe4, 0xb2, 0xba, 0x1e, 0xb2, 0xe7, 0x46, 0x0c, 0x2b, 0xee, 0x14, 0x33, 0xe3, 0xd5, 0xa7, 0x74, 0x6f, 0xc4, 0xb3, 0xb8, 0x98, 0x20, 0x48, 0x7b, 0xd2, 0x95, 0x14, 0xe9, 0xc8, 0xca, 0x79, 0x02, 0xb5, 0x8a, 0xc9, 0x95, 0x58, 0xb1, 0x69, 0x4c, 0xc2, 0x5f, 0x00, 0x18, 0xd6, 0xb2, 0x5e, 0x26, 0x91, 0xe1, 0x03, 0x7a, 0x79, 0x27, 0x26, 0x20, 0xf9, 0xb3, 0xf8, 0x68, 0x86, 0x67, 0x0d, 0x7d, 0x86, 0x4d, 0x4a, 0x84, 0x6c, 0x48, 0x93, 0xf2, 0x5a, 0x7a, 0x62, 0x17, 0x59, 0xbd, 0xb0, 0x17, 0x40, 0x62, 0x6e, 0x8e, 0xeb, 0x03, 0x3d, 0x74, 0x13, 0x0a, 0x64, 0x93, 0x32, 0xd0, 0x16, 0x61, 0xd2, 0x07, 0xd2, 0x88, 0xc7, 0x48, 0x25, 0xf0, 0x1c, 0xa8, 0xd0, 0x85, 0xad, 0x45, 0xbc, 0x47, 0x0b, 0x72, 0x9d, 0xe0, 0x3e, 0xf3, 0x53, 0xee, 0xf9, 0x3f, 0x29, 0xa1, 0x82, 0x59, 0x95, 0x65, 0x6c, 0x14, 0x0d, 0x0a, 0x60, 0x7f, 0xf3, 0x8e, 0x0e, 0x7f, 0xf7, 0x6a, 0xd0, 0x57, 0xd4, 0x48, 0x6b, 0x05, 0xa4, 0xfc, 0x69, 0x66, 0x0d, 0x3a, 0x98, 0xaa, 0x0d, 0x65, 0xd0, 0x94, 0x15, 0x2d, 0x41, 0xe3, 0x67, 0x33, 0x4d, 0x11, 0xfc, 0x46, 0x36, 0xaa, 0x82, 0xc1, 0x28, 0xdd, 0x5d, 0x12, 0xb5, 0x5f, 0x9a, 0x55, 0xbd, 0x2b, 0xf6, 0x92, 0xbe, 0x05, 0x3f, 0x64, 0x50, 0xc4, 0xe7, 0x58, 0x44, 0xb0, 0x47, 0x41, 0xf0, 0x86, 0xa7, 0xe0, 0x49, 0x45, 0xa2, 0xde, 0x57, 0x0f, 0xb1, 0x3e, 0xb7, 0x5b, 0xf2, 0xc0, 0xde, 0xc0, 0x59, 0x15, 0xd4, 0x43, 0x90, 0xfb, 0x34, 0x1d, 0xd9, 0xc2, 0x80, 0xc3, 0x37, 0xd9, 0xaa, 0x6a, 0x17, 0x31, 0x2b, 0xe0, 0x0c, 0x5d, 0x63, 0x64, 0xc0, 0xd8, 0x4c, 0x0a, 0x4d, 0x74, 0x06, 0xe2, 0xf8, 0x3c, 0x09, 0x65, 0x57, 0x42, 0xea, 0x79, 0xfd, 0xe9, 0x74, 0xa1, 0x0f, 0xb5, 0x73, 0x9b, 0xd0, 0x7c, 0xde, 0x66, 0xe3, 0xaa, 0x63, 0x04, 0x7e, 0x1d, 0x92, 0xf3, 0x34, 0x8e, 0x00, 0x61, 0xb2, 0x84, 0x8e, 0xa9, 0xfc, 0x31, 0x93, 0xa0, 0x64, 0x33, 0x79, 0xdd, 0x0d, 0x51, 0x2a, 0x56, 0x3c, 0xea, 0xf9, 0xea, 0x0b, 0x9b, 0x07, 0x58, 0x67, 0xc4, 0xbd, 0x1a, 0x5b, 0x50, 0x01, 0x66, 0x38, 0x88, 0x7b, 0xb6, 0x1e, 0xeb, 0x66, 0x9d, 0xcc, 0x84, 0x80, 0x2e, 0xe8, 0xc2, 0x68, 0x52, 0xa7, 0xc7, 0xee, 0xf3, 0x68, 0x65, 0x30, 0x3d, 0x83, 0x87, 0xc8, 0x00, 0xc3, 0xf0, 0x16, 0xa0, 0x47, 0xa5, 0xf7, 0x45, 0xce, 0xa8, 0x6d, 0xc0, 0x91, 0x10, 0xee, 0x92, 0x59, 0x0d, 0xd8, 0x04, 0xf7, 0x30, 0x80, 0x1c, 0xdd, 0x9b, 0x79, 0x1a, 0x2e, 0xbd, 0x6e, 0x58, 0x64, 0xeb, 0x01, 0x83, 0x4a, 0x93, 0xe6, 0x0b, 0x0c, 0x61, 0xbb, 0xe5, 0x01, 0x73, 0xdf, 0xf0, 0x93, 0x99, 0x78, 0x88, 0x91, 0xa5, 0xdb, 0xeb, 0xa5, 0xa8, 0xa0, 0x7b, 0xab, 0x6b, 0x54, 0xd7, 0xca, 0x7d, 0x09, 0x89, 0x3c, 0xa4, 0x2e, 0x85, 0x22, 0x73, 0x8d, 0xe0, 0xaa, 0xf5, 0x41, 0x10, 0x35, 0x86, 0xfb, 0x0b, 0x88, 0xed, 0x6c, 0xaf, 0x2d, 0xc4, 0xc0, 0x8f, 0x28, 0x1a, 0x4b, 0x6f, 0xe5, 0xa2, 0x48, 0x46, 0x39, 0x7d, 0x46, 0x5f, 0x68, 0x27, 0x72, 0x5e, 0xdf, 0x11, 0x6b, 0x14, 0xb4, 0x9d, 0x65, 0xd4, 0xe7, 0x76, 0xd5, 0xd0, 0x06, 0x37, 0xe7, 0x5b, 0x72, 0x27, 0xc3, 0x0d, 0x15, 0x6f, 0x5c, 0x98, 0x53, 0x5e, 0x24, 0xa3, 0x2c, 0x86, 0x4d, 0x79, 0x6c, 0xf8, 0xab, 0x38, 0x43, 0x80, 0x79, 0xd6, 0x5a, 0x1b, 0x9e, 0x25, 0xcf, 0x48, 0xe5, 0x5d, 0x26, 0x53, 0x8a, 0x1e, 0x18, 0xd1, 0x24, 0xac, 0x3b, 0xde, 0xed, 0x61, 0xd1, 0x6d, 0x87, 0x05, 0x4c, 0xc7, 0x72, 0x60, 0x54, 0x90, 0x5e, 0x25, 0x8e, 0x96, 0x64, 0x92, 0x02, 0x4d, 0x8a, 0x75, 0x94, 0x9d, 0x00, 0x97, 0x08, 0x1c, 0xac, 0x28, 0x80, 0xc6, 0x78, 0x15, 0x6a, 0xaf, 0xd0, 0x37, 0x46, 0x7b, 0xaf, 0xef, 0x07, 0xe9, 0xda, 0x34, 0xb4, 0xd0, 0xc3, 0xc8, 0x45, 0x9e, 0xae, 0x4f, 0xe6, 0x22, 0x49, 0x62, 0xd2, 0x1e, 0x6f, 0x12, 0x5b, 0x7a, 0x05, 0x11, 0x01, 0x4f, 0xb6, 0xc9, 0x52, 0xe8, 0xf6, 0x65, 0x6a, 0x21, 0x20, 0x25, 0x74, 0x60, 0x80, 0x9f, 0x76, 0xc8, 0x11, 0x18, 0x26, 0x58, 0x50, 0x0d, 0xd3, 0xdf, 0x44, 0xd3, 0xba, 0x28, 0x5f, 0xa8, 0x67, 0xd4, 0x0f, 0x8e, 0x9f, 0xbb, 0xed, 0x91, 0x04, 0x5a, 0x65, 0x64, 0xe3, 0x99, 0xec, 0x02, 0x45, 0xdc, 0x07, 0x91, 0x12, 0xbd, 0x85, 0x7c, 0x34, 0x2a, 0xb8, 0x23, 0x92, 0x93, 0x2a, 0x3c, 0xa0, 0x87, 0xe2, 0xbe, 0xc0, 0x5d, 0xec, 0x78, 0xf6, 0x2b, 0x6d, 0x32, 0x08, 0xf6, 0x5d, 0xeb, 0xca, 0xfe, 0x2b, 0x7c, 0x8e, 0x09, 0x27, 0x9b, 0xf1, 0x28, 0x03, 0xb2, 0x46, 0x3f, 0xd3, 0x68, 0x96, 0xdc, 0xc6, 0x13, 0xba, 0xe1, 0x14, 0x02, 0x56, 0x60, 0x56, 0xd7, 0xd2, 0xd6, 0xf8, 0xe6, 0xc4, 0x4c, 0xc0, 0x65, 0xd4, 0x9a, 0x53, 0xe2, 0x4b, 0x96, 0x19, 0xfd, 0x1a, 0x6a, 0x2e, 0x00, 0x1e, 0x00, 0x36, 0xa7, 0x55, 0x2c, 0x93, 0xf5, 0x22, 0xf3, 0x3a, 0xec, 0x34, 0x22, 0x87, 0xec, 0xa6, 0xf4, 0x2e, 0x9a, 0x85, 0x5f, 0x23, 0x26, 0x9a, 0xaf, 0x85, 0xb8, 0x88, 0x5d, 0x6b, 0x13, 0x58, 0x1e, 0x7d, 0x51, 0x6b, 0x07, 0x56, 0x04, 0x56, 0x8e, 0xa5, 0xaf, 0xbb, 0x25, 0x3c, 0xe2, 0xa4, 0x42, 0xa6, 0xb9, 0x33, 0x0c, 0x09, 0x0d, 0xe5, 0x83, 0x1b, 0xa5, 0x09, 0xe4, 0x14, 0x1c, 0x96, 0xfd, 0xb5, 0xc9, 0xa9, 0xb3, 0xaa, 0x59, 0xef, 0xe2, 0x7a, 0x8e, 0x1d, 0xdb, 0x9b, 0x17, 0x0b, 0xe8, 0x65, 0xb9, 0xe3, 0xd7, 0xd2, 0x35, 0x2f, 0x56, 0x39, 0x6a, 0x49, 0x2f, 0xfa, 0xd4, 0x94, 0x4d, 0xeb, 0x83, 0x85, 0x3b, 0xb0, 0x29, 0xb5, 0xec, 0x60, 0x2f, 0xb3, 0x05, 0x06, 0x98, 0xab, 0x0b, 0x29, 0x59, 0x58, 0x81, 0x02, 0x81, 0xd5, 0x7e, 0x55, 0xca, 0x40, 0xb1, 0xa7, 0x08, 0xc2, 0x9b, 0x8d, 0x68, 0x71, 0x76, 0x16, 0xdd, 0xf9, 0x2d, 0xee, 0x48, 0x88, 0x61, 0x12, 0xd9, 0x0a, 0x0c, 0x65, 0x3c, 0xd5, 0x61, 0xd7, 0xa7, 0x14, 0x43, 0x95, 0x6b, 0xbd, 0x88, 0x7b, 0xca, 0x82, 0xf2, 0xc6, 0x40, 0xab, 0xe9, 0x58, 0x54, 0x63, 0xe5, 0x17, 0x82, 0xe3, 0x7e, 0x2e, 0x75, 0x81, 0x49, 0x52, 0xfc, 0x04, 0x92, 0x0a, 0x6a, 0xf9, 0x00, 0xf4, 0xa8, 0x61, 0x10, 0x6b, 0x2d, 0x0a, 0xc9, 0xea, 0xa5, 0x73, 0x47, 0xcd, 0xb3, 0x38, 0xac, 0x9e, 0xf6, 0xeb, 0x4c, 0x30, 0x12, 0xe2, 0x2c, 0x95, 0x93, 0x92, 0xcb, 0x26, 0xf4, 0x4c, 0x2c, 0x01, 0xf7, 0x31, 0x9e, 0xa9, 0x85, 0x87, 0xe6, 0x8c, 0xc5, 0xd1, 0x42, 0x5b, 0x2c, 0x9d, 0xcb, 0x27, 0x6c, 0x1c, 0x2d, 0x83, 0x09, 0x1e, 0x8b, 0xc7, 0x52, 0x1b, 0x0e, 0x6f, 0x78, 0x44, 0xf9, 0x04, 0x18, 0xc7, 0x58, 0xac, 0x29, 0x64, 0xde, 0x61, 0xa0, 0x4a, 0xd9, 0xd0, 0x6e, 0xd2, 0x2e, 0xde, 0x81, 0x01, 0x23, 0xf2, 0x00, 0x17, 0xdb, 0x29, 0xf9, 0x40, 0x1a, 0x1a, 0x57, 0xeb, 0x29, 0xc4, 0xd7, 0x3c, 0xbc, 0x08, 0x35, 0xa9, 0xc1, 0x76, 0x9b, 0x40, 0x49, 0x94, 0xcf, 0xbb, 0x24, 0xb9, 0x8d, 0x18, 0x98, 0x54, 0x77, 0xa2, 0x1f, 0xb5, 0xa2, 0x5d, 0x08, 0x58, 0xcb, 0x31, 0x36, 0x80, 0xb4, 0x98, 0x41, 0x2a, 0x21, 0x3c, 0x09, 0xc2, 0x5e, 0x61, 0x21, 0xfe, 0xec, 0x2f, 0x1f, 0xe0, 0x17, 0x3b, 0x01, 0xd0, 0x53, 0x8c, 0x86, 0x76, 0x91, 0x8d, 0x66, 0x96, 0x4d, 0x11, 0x66, 0xe1, 0x0c, 0x96, 0x71, 0x2d, 0x65, 0xfe, 0xf6, 0x62, 0x2a, 0x71, 0x80, 0xea, 0xaa, 0x52, 0x60, 0x38, 0xba, 0x95, 0xde, 0xab, 0x78, 0x8a, 0x1c, 0x5c, 0xae, 0xce, 0x0d, 0x17, 0xb1, 0x00, 0x92, 0x8b, 0x9d, 0x2a, 0xc4, 0xf6, 0x65, 0x85, 0x15, 0x6b, 0xc3, 0x2b, 0x21, 0xfe, 0x19, 0xcd, 0x29, 0x55, 0xc1, 0xf3, 0xc5, 0x84, 0xeb, 0x6b, 0x07, 0x67, 0x78, 0xf0, 0x90, 0xd0, 0x2f, 0xdf, 0x61, 0x3f, 0x9a, 0x7d, 0x00, 0xa6, 0x39, 0x22, 0xbb, 0x58, 0x4e, 0x12, 0xcf, 0x03, 0x18, 0x14, 0x58, 0x0b, 0x01, 0x14, 0x8a, 0xa4, 0xc0, 0xf0, 0xb2, 0x0f, 0xe7, 0xeb, 0xa3, 0x9b, 0xf4, 0xbc, 0x63, 0x28, 0x8b, 0x21, 0xef, 0x1e, 0xa5, 0xec, 0x64, 0x4e, 0xa2, 0x2f, 0x06, 0xa0, 0x02, 0xa5, 0x9c, 0x23, 0xbb, 0x61, 0xb9, 0x4d, 0xdf, 0xf6, 0x05, 0x3b, 0x66, 0x03, 0x22, 0x41, 0x3a, 0xf0, 0x83, 0xf0, 0x7f, 0x57, 0xd4, 0x2e, 0xf4, 0xae, 0x42, 0xb7, 0xd0, 0x63, 0x5a, 0x83, 0xd6, 0x64, 0x5b, 0x5d, 0x9d, 0xa5, 0xb1, 0x35, 0x66, 0x17, 0xc5, 0x5e, 0x6c, 0x95, 0xa3, 0xa0, 0x59, 0xe4, 0xda, 0x6e, 0xea, 0xc8, 0x95, 0x81, 0xf5, 0x1a, 0xb6, 0xb7, 0x92, 0xa1, 0x90, 0xfb, 0x1c, 0x40, 0x94, 0x5a, 0x96, 0x03, 0xf2, 0x06, 0x17, 0xb7, 0xf5, 0xb8, 0x39, 0xbd, 0x22, 0x15, 0x80, 0x02, 0x36, 0x39, 0x1b, 0x85, 0x31, 0x61, 0xf3, 0xaa, 0xbd, 0xb9, 0x64, 0x08, 0xe4, 0x0d, 0x30, 0x7a, 0xef, 0xdb, 0xa6, 0xb6, 0x80, 0x2e, 0x18, 0xb9, 0x5c, 0x10, 0x6a, 0xd6, 0xca, 0x0c, 0x58, 0x99, 0xef, 0x76, 0x7b, 0x72, 0x1d, 0x78, 0x01, 0xdc, 0xa2, 0xcb, 0x71, 0xb9, 0xd6, 0xdb, 0x97, 0xaa, 0x21, 0xe2, 0x9d, 0xfd, 0xeb, 0xec, 0x87, 0xb8, 0xe6, 0xb8, 0x72, 0x1a, 0x2d, 0xe0, 0xce, 0x81, 0x90, 0x67, 0x19, 0x5c, 0x33, 0x97, 0xce, 0x31, 0x39, 0x4b, 0x01, 0x20, 0xa4, 0xfd, 0x05, 0xa5, 0x0c, 0xbd, 0x28, 0xac, 0x24, 0x5d, 0x8e, 0x0d, 0xfc, 0xa0, 0xc4, 0x40, 0x79, 0x32, 0xd1, 0x52, 0x62, 0x58, 0x05, 0x5a, 0xc9, 0x20, 0xe2, 0x26, 0x58, 0xb2, 0x9c, 0xe3, 0x9e, 0xcd, 0xc0, 0x21, 0xba, 0x1b, 0x5e, 0x18, 0x4a, 0x37, 0x1f, 0xc1, 0x5b, 0x39, 0x6d, 0x66, 0xab, 0xe3, 0xc1, 0x60, 0x22, 0x6f, 0xc4, 0xe1, 0x20, 0x69, 0xbb, 0x6b, 0x21, 0xed, 0x03, 0x77, 0x92, 0x08, 0x40, 0x87, 0xb4, 0x45, 0xb1, 0xa9, 0x70, 0xae, 0x19, 0x2f, 0x02, 0x9a, 0xdc, 0x5e, 0x08, 0xa7, 0xfe, 0xaa, 0xa2, 0x02, 0x34, 0x6f, 0xc9, 0x20, 0x56, 0x19, 0x62, 0x8e, 0x3a, 0xe8, 0x6d, 0x4b, 0x92, 0x70, 0x8b, 0x1b, 0x99, 0x94, 0x01, 0x06, 0x71, 0xb0, 0x8d, 0xaf, 0x3b, 0x4a, 0xa6, 0x92, 0x45, 0x40, 0x51, 0xa6, 0x7a, 0x4f, 0xa5, 0x10, 0x34, 0x0c, 0x5f, 0xf0, 0xa8, 0x44, 0xa4, 0x01, 0x08, 0x13, 0x9b, 0x1b, 0xdd, 0x7e, 0x83, 0xca, 0x38, 0xd3, 0x5b, 0xe6, 0x8a, 0x78, 0x1a, 0x6b, 0x64, 0x9d, 0x2a, 0x70, 0x20, 0x27, 0x36, 0x30, 0xeb, 0xe0, 0x0f, 0x7b, 0x86, 0x79, 0xd1, 0x6c, 0xad, 0x06, 0x46, 0x2f, 0x12, 0x69, 0xa1, 0xc9, 0x45, 0xa9, 0x40, 0x9c, 0xd4, 0x51, 0x19, 0x92, 0x7b, 0x15, 0x70, 0xb8, 0xe1, 0x82, 0xa5, 0xd3, 0xe8, 0xb1, 0x67, 0x01, 0xd8, 0x2f, 0x3f, 0x4d, 0xab, 0x68, 0xfe, 0x4c, 0x75, 0x89, 0x48, 0xfd, 0x22, 0xe7, 0xc0, 0xab, 0xfe, 0x84, 0x4b, 0xb7, 0x75, 0xb0, 0xaf, 0xc2, 0x8f, 0x7d, 0x66, 0xfa, 0x95, 0x53, 0x8e, 0x89, 0x3c, 0xb7, 0xbc, 0x6e, 0x86, 0xf0, 0xea, 0x59, 0x8b, 0x32, 0xa9, 0x88, 0xf6, 0xa9, 0xa9, 0x84, 0xfc, 0x60, 0x47, 0x4c, 0x1d, 0x54, 0x78, 0xb8, 0x9e, 0x2d, 0xa0, 0x91, 0x04, 0xa3, 0x23, 0x2d, 0x8f, 0x7b, 0x23, 0xc8, 0x72, 0x7d, 0x06, 0x58, 0xf0, 0x43, 0x76, 0xf8, 0x72, 0xc5, 0x30, 0x56, 0xe1, 0x1d, 0x92, 0x03, 0xb2, 0x8d, 0x05, 0x94, 0x7a, 0xc1, 0xc9, 0x02, 0x65, 0xf7, 0x5a, 0xc2, 0xaa, 0xe8, 0xec, 0x89, 0x19, 0x2a, 0x85, 0x00, 0xf2, 0x56, 0x7f, 0x6a, 0xc3, 0x91, 0x57, 0x38, 0x35, 0x5e, 0xd0, 0x94, 0x2b, 0x46, 0xed, 0x65, 0x4e, 0x28, 0xe0, 0x68, 0xb4, 0x60, 0x26, 0xbb, 0xd0, 0xea, 0x10, 0xf5, 0xcd, 0x89, 0x52, 0x32, 0x28, 0xd2, 0x42, 0x4a, 0x30, 0x74, 0xe3, 0xe1, 0x25, 0xd7, 0x84, 0x50, 0x12, 0xb0, 0x99, 0xbb, 0xe5, 0x2f, 0x01, 0x48, 0x7c, 0xab, 0xbd, 0xba, 0xf9, 0x59, 0x7a, 0xf5, 0x58, 0xc4, 0xb6, 0x30, 0xf9, 0x3b, 0xa4, 0x0b, 0x6b, 0xd4, 0x56, 0x5d, 0x1b, 0xc6, 0xda, 0xf3, 0xca, 0x10, 0x1c, 0x18, 0x72, 0x2b, 0xe3, 0x94, 0x7a, 0x99, 0x6d, 0xf8, 0x2c, 0x00, 0x2c, 0x22, 0x3d, 0x08, 0xeb, 0x14, 0x92, 0xe4, 0x6b, 0xb4, 0x87, 0xab, 0x0f, 0x63, 0x5a, 0x57, 0x80, 0x43, 0x70, 0xe8, 0xad, 0xd4, 0xdb, 0xe9, 0xbc, 0x81, 0x80, 0xec, 0xa6, 0x8a, 0x08, 0x69, 0xdc, 0x86, 0xfd, 0x3b, 0x7f, 0xc4, 0xaa, 0x2f, 0xc5, 0x16, 0x92, 0x2c, 0x66, 0xa1, 0xaf, 0x2e, 0x4b, 0xc3, 0xf7, 0x0d, 0x34, 0xbe, 0x17, 0xe2, 0xb5, 0xf0, 0x3e, 0x3b, 0x6b, 0xaf, 0x50, 0xa0, 0x20, 0x58, 0xa5, 0x59, 0x05, 0x4a, 0x95, 0xed, 0x66, 0x8a, 0x5a, 0x65, 0x93, 0xf5, 0xa9, 0x55, 0x5b, 0x67, 0xd0, 0x0b, 0x09, 0xb2, 0xf9, 0x13, 0x73, 0x97, 0x26, 0x47, 0xe8, 0x31, 0x03, 0x91, 0xd1, 0x25, 0x29, 0x08, 0xcd, 0x1a, 0x54, 0x19, 0x7d, 0xc3, 0x7f, 0xba, 0x7c, 0xc3, 0x6e, 0x8e, 0xba, 0xf4, 0x51, 0x7a, 0x57, 0xa5, 0x33, 0x3b, 0x3a, 0x1d, 0x1f, 0x28, 0xe3, 0xe6, 0xc8, 0x83, 0xde, 0x00, 0xb5, 0x80, 0xeb, 0xf8, 0x16, 0x0d, 0x68, 0xc0, 0x9e, 0xd6, 0x48, 0x3f, 0x7d, 0x67, 0xd9, 0xee, 0xbd, 0xfa, 0xa7, 0xba, 0x8b, 0x5f, 0x66, 0x7b, 0x9b, 0x6f, 0x20, 0x4a, 0x26, 0xed, 0x58, 0x48, 0x20, 0x49, 0x2f, 0xcd, 0x9e, 0x19, 0x17, 0x5c, 0x30, 0x62, 0x6b, 0x69, 0x6c, 0xc6, 0xce, 0x9c, 0x22, 0x8f, 0x50, 0xa9, 0x29, 0xe6, 0x41, 0x5d, 0xd4, 0x4c, 0x66, 0xf6, 0x73, 0x71, 0x85, 0x10, 0x4a, 0x50, 0x43, 0xf4, 0xac, 0x1c, 0xb6, 0xee, 0x2f, 0x9a, 0xb5, 0xca, 0x28, 0xcf, 0xe8, 0x37, 0x20, 0x30, 0x9a, 0x89, 0xbb, 0xe1, 0xfa, 0x94, 0x22, 0x81, 0xa0, 0x74, 0x5b, 0xbf, 0xc6, 0x7a, 0x5e, 0x15, 0x17, 0xca, 0x41, 0x75, 0xcf, 0x76, 0x78, 0xbb, 0xd3, 0xec, 0x18, 0xa9, 0x8d, 0x0c, 0x09, 0x98, 0x5d, 0x86, 0xec, 0x99, 0xba, 0xb7, 0x46, 0xd8, 0xf5, 0xd0, 0x9e, 0xb6, 0x37, 0xa9, 0x75, 0xb2, 0x47, 0xf2, 0x84, 0x5a, 0x6b, 0xcd, 0x54, 0x6e, 0x1a, 0x18, 0xb2, 0x5c, 0x94, 0xb7, 0x25, 0x84, 0x91, 0x21, 0x05, 0x0f, 0x25, 0xb5, 0x20, 0x83, 0xe3, 0x1c, 0xde, 0x61, 0x09, 0xd5, 0x34, 0x43, 0xef, 0x0d, 0x80, 0x4a, 0xf1, 0x65, 0x8a, 0x43, 0xf0, 0x52, 0xcb, 0x95, 0x17, 0x95, 0x84, 0x1d, 0xca, 0x77, 0xe2, 0x2f, 0x4b, 0x20, 0x31, 0x64, 0xe5, 0x30, 0xab, 0xad, 0x1f, 0x02, 0x39, 0xbe, 0x7d, 0x77, 0x86, 0xda, 0x54, 0x75, 0x78, 0x6c, 0x3e, 0xcc, 0x81, 0x09, 0xc3, 0x70, 0x98, 0x3f, 0xf3, 0xec, 0xc9, 0x1b, 0x50, 0x6c, 0x16, 0x63, 0xc7, 0xa0, 0xd5, 0x91, 0xde, 0x35, 0x20, 0xab, 0xb8, 0x95, 0x2b, 0x1a, 0x94, 0x69, 0x17, 0x02, 0x88, 0x28, 0xe6, 0x2c, 0xcf, 0x43, 0xcc, 0x07, 0x71, 0xa9, 0x7e, 0xd2, 0xcd, 0xe3, 0xa0, 0xcf, 0x31, 0xb2, 0x41, 0x82, 0xe9, 0xbb, 0xe5, 0x92, 0xa8, 0xc6, 0x2e, 0xc7, 0xf0, 0xf8, 0x41, 0x96, 0x7a, 0x06, 0x59, 0x02, 0xbd, 0x55, 0xb7, 0x5a, 0x81, 0x8b, 0x68, 0x45, 0x30, 0x3b, 0x07, 0x13, 0x78, 0xd5, 0xcf, 0xf1, 0x3d, 0x61, 0xe5, 0x23, 0x57, 0x53, 0xb0, 0x85, 0x6e, 0xd9, 0x4d, 0x89, 0x2c, 0x68, 0x6d, 0x69, 0x05, 0x4e, 0xc6, 0x2a, 0x6d, 0x8c, 0x00, 0xad, 0xa6, 0x65, 0x79, 0x6d, 0x4b, 0xf1, 0x49, 0x42, 0x31, 0x41, 0x59, 0x0d, 0x71, 0x0e, 0x3f, 0x83, 0xdd, 0x2a, 0x44, 0x16, 0x2d, 0xb7, 0x25, 0xb6, 0xf2, 0x9f, 0x17, 0x02, 0xc1, 0x71, 0xa9, 0x5d, 0x6c, 0x6e, 0x87, 0xe7, 0xf2, 0x68, 0xdd, 0x69, 0x57, 0x5d, 0x35, 0x40, 0x19, 0x7e, 0x0f, 0x8a, 0x0f, 0x48, 0x71, 0x18, 0x1e, 0x8c, 0x92, 0xa6, 0x6a, 0xd1, 0x8a, 0x41, 0x89, 0xd9, 0x4d, 0xf8, 0x9a, 0xbc, 0x4a, 0x09, 0xe9, 0x95, 0x71, 0x09, 0x31, 0xb0, 0x51, 0xf8, 0x8c, 0x64, 0xa4, 0x40, 0xd0, 0x75, 0x27, 0x82, 0xa9, 0xc2, 0xd5, 0x29, 0x5f, 0xef, 0xc5, 0x4a, 0x96, 0xef, 0x81, 0x9a, 0x0c, 0x80, 0x98, 0xba, 0x97, 0xdc, 0x03, 0xbd, 0xc0, 0x26, 0x92, 0x0f, 0x1a, 0xbc, 0xde, 0x66, 0x97, 0xca, 0x08, 0xe4, 0x19, 0x53, 0x93, 0x5d, 0xc5, 0x1b, 0x4e, 0x17, 0x52, 0x63, 0x7e, 0x39, 0x77, 0xc8, 0x69, 0xdc, 0xe8, 0x9e, 0x86, 0xb7, 0x19, 0x6d, 0x5c, 0x05, 0x5c, 0x57, 0x28, 0x88, 0xa7, @@ -54,7 +54,7 @@ uint8_t A_bpoly_MAXSEC[14*NEWHOPE_POLYBYTES] = { 0x5c, 0x66, 0x0e, 0x58, 0x76, 0x39, 0xa4, 0x48, 0x9d, 0xea, 0xc1, 0x6c, 0xc9, 0x86, 0x98, 0x2e, 0x15, 0x55, 0x4e, 0xfd, 0x69, 0xf1, 0xdf, 0xce, 0x46, 0xb3, 0x84, 0x92, 0xe3, 0x8c, 0xfc, 0x09, 0xf4, 0xa0, 0xa4, 0xe1, 0x4f, 0x21, 0xc5, 0xc2, 0x06, 0x62, 0x0d, 0x87, 0x42, 0xc0, 0x2a, 0x61, 0x02, 0x70, 0x10, 0x07, 0xd2, 0x2d, 0x84, 0x5b, 0xba, 0xdc, 0xd4, 0x45, 0x8d, 0x8a, 0x59, 0xf5, 0x5d, 0xc3, 0x9b, 0x28, 0x6c, 0x12, 0xd2, 0xa4, 0x6b, 0x93, 0xfd, 0xdd, 0x06, 0x1b, 0x1a, 0xcb, 0x20, 0xd3, 0xe1, 0x71, 0x60, 0xa0, 0x61, 0x59, 0xe8, 0xf5, 0x64, 0x0c, 0x2b, 0x6e, 0xaa, 0x6e, 0xbd, 0x41, 0xaf, 0x9c, 0x11, 0x73, 0xbb, 0x65, 0x58, 0xff, 0x2e, 0xbb, 0x3b, 0xab, 0x20, 0x75, 0x42, 0x5e, 0x11, 0x54, 0xa3, 0x80, 0x91, 0xa6, 0x99, 0x11, 0x1b, 0x13, 0xa2, 0xac, 0x9a, 0x64, 0xe5, 0x34, 0xb3, 0xa5, 0x47, 0xdf, 0xa8, 0x9f, 0x1a, 0x8d, 0x16, 0x10, 0x32, 0x67, 0x8c, 0x06, 0xaf, 0x99, 0x52, 0x3c, 0x92, 0x3a, 0x23, 0x23, 0x41, 0x30, 0xf7, 0x66, 0x4a, 0x13, 0x76, 0xa4, 0x81, 0x6c, 0x59, 0x6c, 0x57, 0x5c, 0xc1, 0x1b, 0x1f, 0x50, 0x6f, 0x44, 0xd0, 0x2c, 0xbf, 0x3c, 0x03, 0xda, 0x82, 0xde, 0x16, 0xa2, 0x98, 0x8c, 0xef, 0x00, 0xc0, 0x1d, 0x15, 0x4d, 0x0c, 0x6c, 0xd7, 0x0a, 0xc9, 0x8e, 0x07, 0x12, 0xe9, 0xa6, 0x41, 0x5d, 0x98, 0x0b, 0xe9, 0x07, 0x77, 0xfd, 0xd9, 0xad, 0x45, 0x99, 0x87, 0x86, 0x87, 0x38, 0x68, 0x91, 0x19, 0x80, 0x29, 0x13, 0x8e, 0xb9, 0x0b, 0xd5, 0xda, 0xf4, 0x50, 0x45, 0x89, 0xc6, 0x45, 0xcc, 0x65, 0x4d, 0x24, 0x12, 0x0b, 0xcd, 0x83, 0x04, 0x02, 0x36, 0x4f, 0x36, 0x1a, 0x9b, 0x2b, 0xb9, 0xe9, 0x6a, 0x67, 0x09, 0x53, 0xb0, 0x91, 0xc9, 0xb3, 0xc5, 0x06, 0xdd, 0x64, 0xcd, 0xcc, 0x41, 0x13, 0x0d, 0x9b, 0x39, 0x73, 0x62, 0x9a, 0x22, 0x6b, 0xbf, 0xe7, 0x47, 0x2e, 0x16, 0x52, 0x86, 0x43, 0x32, 0xa5, 0x8d, 0x33, 0xf8, 0x19, 0x92, 0x1b, 0x41, 0xc9, 0x92, 0xa2, 0xe8, 0xba, 0x85, 0x64, 0xc0, 0x1c, 0x71, 0x93, 0xe8, 0x78, 0xbf, 0x3c, 0x3e, 0xc9, 0x2c, 0x5d, 0x42, 0x1a, 0xbc, 0x9c, 0xe1, 0x14, 0xbf, 0x33, 0xf1, 0x8d, 0xa6, 0xe0, 0x0b, 0xaa, 0x06, 0x4d, 0xf0, 0x1d, 0xe9, 0x54, 0x85, 0xcb, 0xba, 0x9a, 0x33, 0xbf, 0x17, 0x42, 0xe1, 0x1c, 0x1a, 0x08, 0x26, 0x12, 0xcc, 0x4a, 0x51, 0x96, 0x31, 0xb5, 0xc0, 0x7d, 0x2b, 0x5c, 0x9d, 0x7c, 0x01, 0x9c, 0x01, 0x34, 0x65, 0x4d, 0x77, 0xc8, 0x5d, 0xf6, 0x25, 0xfb, 0xcc, 0x4a, 0x84, 0x5d, 0x40, 0x36, 0xde, 0x59, 0x74, 0xc2, 0x02, 0xea, 0xd2, 0x7c, 0x36, 0x9c, 0xae, 0xcc, 0xb7, 0x76, 0x73, 0xea, 0xa4, 0x80, 0x84, 0x20, 0x75, 0x66, 0x7a, 0x1d, 0xa8, 0x06, 0xae, 0xa6, 0x60, 0xfc, 0x83, 0x67, 0x45, 0x93, 0x97, 0x9b, 0xee, 0x17, 0x97, 0xd8, 0x4f, 0x39, 0xc1, 0x60, 0x92, 0x63, 0x6a, 0xcd, 0x30, 0xb9, 0x5c, 0xb0, 0xe0, 0x42, 0xd2, 0x73, 0xd1, 0x76, 0x3a, 0xd7, 0x69, 0xd5, 0x98, 0x4e, 0x29, 0x54, 0xe4, 0x08, 0x1a, 0x84, 0x5e, 0x75, 0xa3, 0xa1, 0x23, 0xad, 0x69, 0x89, 0x41, 0x17, 0x19, 0xd2, 0x6b, 0xf4, 0xae, 0xaa, 0x0c, 0x97, 0x1f, 0x36, 0x7a, 0x7b, 0xa8, 0x6f, 0x93, 0x8e, 0x3d, 0x4a, 0x68, 0x7d, 0xac, 0x01, 0x6b, 0x97, 0x28, 0x3b, 0x10, 0x1c, 0xb3, 0x2b, 0xb7, 0x86, 0x52, 0xf1, 0x28, 0x70, 0x56, 0x93, 0xa9, 0x53, 0x91, 0x90, 0x6e, 0x19, 0xb6, 0xe6, 0x4f, 0x41, 0x28, 0x38, 0x62, 0x67, 0xe9, 0xc2, 0x84, 0x89, 0xc3, 0xd0, 0xe5, 0x66, 0xd5, 0x15, 0x2f, 0x2f, 0xac, 0x6b, 0xd6, 0x3f, 0x41, 0x17, 0x05, 0x22, 0xaf, 0x45, 0x1d, 0x38, 0xa0, 0x3a, 0x55, 0x13, 0x85, 0x51, 0x08, 0x79, 0x13, 0xc0, 0x25, 0x36, 0x8f, 0x5c, 0x3d, 0xf5, 0x86, 0xaa, 0x16, 0xfa, 0x9d, 0xbd, 0xe2, 0x43, 0xa7, 0x32, 0x0c, 0x08, 0x28, 0x49, 0x58, 0x04, 0x72, 0xec, 0x70, 0x0f, 0x36, 0x4b, 0x26, 0x65, 0x88, 0x68, 0x76, 0x38, 0xe0, 0xe8, 0xf4, 0x51, 0xe5, 0x7e, 0x8f, 0xd3, 0x78, 0x45, 0xa2, 0x89, 0xaf, 0xfe, 0x23, 0x75, 0x17, 0x43, 0x6c, 0xbf, 0x8f, 0x03, 0xcb, 0x28, 0x08, 0x12, 0xbe, 0xc6, 0xec, 0x46, 0x85, 0x46, 0x01, 0xa5, 0x82, 0x2e, 0xa9, 0xb1, 0xb7, 0xb5, 0x62, 0xe2, 0x24, 0x7c, 0xea, 0x41, 0xae, 0x10, 0x35, 0xa7, 0xef, 0x01, 0x8e, 0x42, 0xa3, 0xe2, 0x04, 0x68, 0x4a, 0x98, 0xed, 0x97, 0xb4, 0xd0, 0x5d, 0xd6, 0x48, 0x95, 0xa4, 0xfe, 0xea, 0x76, 0x61, 0x72, 0x6c, 0x05, 0xb5, 0x62, 0xfb, 0x21, 0xe7, 0x5c, 0x57, 0x99, 0x8c, 0x67, 0x4a, 0x95, 0x18, 0x92, 0xc8, 0x0e, 0xea, 0x39, 0x2d, 0xe1, 0x35, 0x93, 0xd4, 0xd9, 0x35, 0x6e, 0x69, 0x55, 0xc1, 0x43, 0xe4, 0xab, 0x8f, 0x66, 0x83, 0x94, 0xee, 0x4a, 0xc0, 0x89, 0x15, 0x2e, 0x43, 0x17, 0x51, 0x95, 0xf1, 0x01, 0x50, 0x7e, 0x20, 0x83, 0x13, 0x00, 0x64, 0x9a, 0xe9, 0x47, 0x59, 0x66, 0x18, 0xb2, 0x79, 0x83, 0x4e, 0xde, 0x92, 0xf2, 0xee, 0x87, 0x59, 0x96, 0xd6, 0xd7, 0xc7, 0xba, 0x44, 0x66, 0xda, 0xdd, 0x57, 0xa7, 0xa9, 0x7c, 0xa3, 0x0e, 0x31, 0xbb, 0x88, 0x85, 0x8d, 0xdd, 0x4e, 0x92, 0xc4, 0x95, 0xc9, 0x07, 0x81, 0x26, 0xb6, 0xf7, 0x64, 0xc5, 0x89, 0x61, 0x9e, 0x0f, 0x99, 0x94, 0x38, 0x43, 0x1f, 0x6f, 0x5e, 0x82, 0xd5, 0x59, 0x0a, 0x5e, 0xdc, 0x71, 0x43, 0xd9, 0x58, 0x33, 0xf3, 0x9d, 0xb5, 0xba, 0xfd, 0x92, 0x49, 0x32, 0x29, 0x04, 0xe8, 0xc9, 0x2e, 0x96, 0x66, 0x1c, 0x4a, 0x87, 0x4e, 0x8e, 0x71, 0xb6, 0x15, 0xf7, 0x42, 0xc3, 0x5e, 0x66, 0x9b, 0xc1, 0x0e, 0x3a, 0x1b, 0x8c, 0xa7, 0x42, 0x08, 0xab, 0x1b, 0x28, 0xdc, 0x1d, 0x35, 0xe4, 0xb1, 0x29, 0x8e, 0x38, 0x4d, 0x2c, 0xc6, 0xd8, 0x78, 0xe7, 0x21, 0x11, 0x55, 0x96, 0x32, 0x73, 0x67, 0xfd, 0xba, 0x4f, 0x10, 0xb0, 0x75, 0xd1, 0x51, 0x16, 0x08, 0x45, 0xb6, 0x14, 0xea, 0x2a, 0x97, 0x39, 0xa6, 0xf8, 0x08, 0x72, 0xc6, 0xa9, 0xbf, 0x5d, 0xeb, 0xc0, 0xb5, 0xfc, 0x2a, 0x30, 0x09, 0xb5, 0x03, 0x0e, 0xd9, 0x08, 0xc8, 0xcd, 0x28, 0x06, 0x7c, 0xa9, 0x56, 0x03, 0x40, 0xba, 0x44, 0x47, 0xdd, 0x98, 0x19, 0x88, 0x5a, 0x36, 0xab, 0xd0, 0x48, 0x55, 0x53, 0xaf, 0x3b, 0xfb, 0x90, 0x8f, 0xb0, 0x50, 0xbe, 0x02, 0x7c, 0x40, 0xb2, 0xee, 0x6b, 0x7b, 0xc9, 0x23, 0x51, 0x9a, 0xc7, 0x9b, 0x66, 0x00, 0xfe, 0x72, 0x10, 0x13, 0x6b, 0x32, 0x80, 0xa6, 0x1a, 0xb3, 0xed, 0x8e, 0x2f, 0x81, 0xa7, 0x5e, 0x87, 0x89, 0x2c, 0xb0, 0x55, 0xd5, 0x54, 0x6b, 0xe2, 0x18, 0xf0, 0x3b, 0xc8, 0x8e, 0x7d, 0x47, 0x00, 0xc5, 0xa2, 0x61, 0x88, 0xac, 0xc8, 0x9e, 0xdd, 0x81, 0x68, 0x3e, 0xa6, 0x87, 0xda, 0xd9, 0x61, 0x5f, 0xa4, 0x62, 0x73, 0x0c, 0x55, 0x5b, 0x92, 0xca, 0x62, 0x4b, 0xc9, 0x50, 0x08, 0xbd, 0xb0, 0x6a, 0x38, 0xc7, 0x5f, 0x38, 0xa3, 0x2c, 0xb1, 0xf4, 0x45, 0xc0, 0xd3, 0xac, 0x35, 0x18, 0x96, 0x99, 0xee, 0x13, 0x97, 0xf9, 0x4a, 0x47, 0x17, 0xa7, 0x59, 0x2f, 0x72, 0x30, 0x7c, 0x8c, 0xab, 0x95, 0x9a, 0x56, 0x6e, 0x2a, 0xc3, 0x00, 0x49, 0x15, 0x21, 0x61, 0x52, 0xa2, 0xf1, 0xc7, 0x85, 0x36, 0xa0, 0x09, 0xc6, 0x40, 0x09, 0xfc, 0x42, 0x06, 0x5b, 0xe3, 0x5a, 0xb2, 0xa2, 0xc6, 0xa5, 0x30, 0xcc, 0xe5, 0x22, 0x38, 0x58, 0x26, 0xea, 0xc2, 0x1b, 0x65, 0xde, 0xd6, 0x6e, 0xdc, 0x24, 0xe4, 0x26, 0x1f, 0x7c, 0x90, 0x91, 0x57, 0x90, 0xc4, 0x53, 0x55, 0x57, 0x4a, 0x94, 0x78, 0xd5, 0xb3, 0xf8, 0xbd, 0xb4, 0x27, 0xff, 0xb7, 0xfb, 0x90, 0x5a, 0x70, 0x5e, 0x61, 0x42, 0x1b, 0xec, 0x9e, 0x5b, 0x41, 0x65, 0x43, 0xed, 0x82, 0x6f, 0x3f, 0x1d, 0xab, 0xfa, 0xbe, 0x92, 0xb3, 0xd8, 0xd2, 0x9e, 0x66, 0xd7, 0xed, 0x8f, 0x96, 0xc8, 0xcc, 0x61, 0x03, 0xc8, 0x72, 0x98, 0x29, 0xcb, 0x25, 0xba, 0x1a, 0x58, 0xc1, 0xe2, 0x73, 0x85, 0xee, 0xed, 0xb3, 0x24, 0xce, 0xec, 0x90, 0x17, 0x32, 0x37, 0x76, 0xa3, 0x1a, 0x4b, 0x19, 0x8a, 0x13, 0x04, 0x67, 0x25, 0xe2, 0x6d, 0x2d, 0xb9, 0x16, 0x8b, 0x5e, 0xd6, 0x64, 0x14, 0xae, 0x8c, 0x2d, 0x44, 0x30, 0x8e, 0xac, 0xbb, 0x50, 0x42, 0x83, 0x29, 0x36, 0xcd, 0x3f, 0x76, 0xa2, 0x63, 0x79, 0x73, 0x36, 0x49, 0x36, 0xda, 0x7b, 0xa2, 0x1e, 0x36, 0x89, 0x7d, 0x59, 0xe2, 0x12, 0xee, 0x1d, 0x5d, 0x9b, 0xc8, 0xed, 0x90, 0xa7, 0x99, 0x40, 0x25, 0xc9, 0xc5, 0x3a, 0x6e, 0x4d, 0x94, 0x2d, 0xe8, 0xc7, 0x55, 0xce, 0x2e, 0x72, 0xa1, 0xce, 0xba, 0x76, 0xe1, 0x1e, 0x94, 0x07, 0x9a, 0x7f, 0xf9, 0x53, 0x16, 0x0f, 0x7f, 0x91, 0xb0, 0x54, 0x8f, 0x4c, 0x76, 0x0d, 0x4b, 0xf6, 0xba, 0x37, 0x4c, 0x74, 0x80, 0x57, 0x21, 0x2a, 0xd4, 0x4c, 0x4e, 0x20, 0x9b, 0x19, 0xaa, 0x82, 0x66, 0x8b, 0xc6, 0x2f, 0x1a, 0xa0, 0xa7, 0xfc, 0x72, 0x86, 0xa7, 0x11, 0xf5, 0x5e, 0x19, 0x10, 0x2a, 0x4b, 0xb9, 0x19, 0x78, 0x6d, 0x28, 0xe6, 0x47, 0xab, 0x64, 0x9e, 0x79, 0x92, 0x27, 0xac, 0x05, 0x02, 0xf6, 0x50, 0x97, 0x45, 0x69, 0xf1, 0x93, 0x12, 0xd5, 0x83, 0xdc, 0xc5, 0x5a, 0x8b, 0x5d, 0xd2, 0x48, 0xd3, 0xa1, 0xc2, 0x1b, 0x36, 0x20, 0x9c, 0x34, 0xca, 0x7b, 0x80, 0x30, 0x2c, 0xb4, 0xcc, 0xcf, 0x90, 0x01, 0xc7, 0xae, 0x7e, 0x21, 0x86, 0x30, 0x46, 0x7c, 0x70, 0x48, 0xf5, 0x58, 0x75, 0xc7, 0xdc, 0x05, 0xb1, 0xa0, 0x47, 0x8b, 0x40, 0x42, 0xb1, 0x7b, 0xfa, 0xd6, 0xd3, 0x60, 0xaa, 0x5d, 0x2a, 0x4c, 0x2c, 0xf8, 0x11, 0xe1, 0x06, 0x44, 0x99, 0xe5, 0xdc, 0x10, 0x2d, 0x98, 0x6d, 0x30, 0x48, 0x7c, 0xe6, 0xb4, 0x89, 0x30, 0xc8, 0x52, 0xa5, 0xb7, 0x38, 0xf8, 0xbc, 0x6c, 0x1a, 0x93, 0xd2, 0x5d, 0xc6, 0xa2, 0x63, 0xa3, 0x70, 0x63, 0xfe, 0x99, 0x5d, 0x18, 0x9a, 0x10, 0xf5, 0x1e, 0xe0, 0x57, 0x80, 0x9e, 0x3e, 0x36, 0x5b, 0x1a, 0x6b, 0xea, 0xd7, 0x21, 0x54, 0x42, 0x06, 0xb1, 0x63, 0xe4, 0xf4, 0x75, 0x7e, 0xb6, 0x85, 0x55, 0x0c, 0x81, 0x60, 0x42, 0x15, 0x8f, 0xf4, 0xc0, 0xab, 0x65, 0x76, 0x76, 0x19, 0x40, 0x2b, 0x72, 0xc8, 0x62, 0x2a, 0x88, 0x63, 0xe7, 0xfa, 0x38, 0xad, 0x65, 0x8d, 0x88, 0x1d, 0x84, 0x48, 0x74, 0xc9, 0x0a, 0xc4, 0x5a, 0xee, 0xd3, 0xd3, 0x08, 0x43, 0x69, 0x20, 0x69, 0xf5, 0xe6, 0xe9, 0xbf, 0x91, 0x04, 0xbf, 0xda, 0x9a, 0xc6, 0x84, 0xcb, 0x19, 0xc5, 0xb9, 0x1c, 0xc2, 0x7f, 0x79, 0x4f, 0x0f, 0x08, 0xae, 0x7c, 0x1c, 0x3d, 0xc3, 0x0c, 0x08, 0x07, 0xc0, 0x7f, 0x92, 0xca, 0xb4, 0xc3, 0xa5, 0x36, 0xaa, 0x96, 0x88, 0xdc, 0xc3, 0x68, 0x06, 0x15, 0x59, 0xa5, 0xf5, 0x03, 0xe2, 0xb4, 0x79, 0x6e, 0x8f, 0x5a, 0x00, 0xa4, 0x4a, 0x0e, 0xab, 0x6c, 0x98, 0x84, 0x85, 0x86, 0xa4, 0x83, 0x4f, 0x40, 0x66, 0x47, 0xaa, 0x97, 0x58, 0x5b, 0xb4, 0x72, 0x1e, 0x2c, 0x7a, 0x03, 0xe4, 0xd2, 0x20, 0x81, 0x8a, 0x04, 0x1b, 0x80, 0xe3, 0x11, 0x2b, 0x02, 0x6f, 0x5b, 0xad, 0x7e, 0xb3, 0x45, 0xbd, 0xb7, 0x40, 0x20, 0xf5, 0x47, 0xeb, 0xa0, 0xbd, 0xdd, 0x64, 0x02, 0xd1, 0x1a, 0xbe, 0x8e, 0x0c, 0x24, 0x78, 0xa9, 0x04, 0x18, 0x9a, 0xd9, 0x6d, 0xf1, 0xa2, 0x06, 0x5e, 0x59, 0x59, 0xc8, 0xea, 0xf0, 0x44, 0xf2, 0xbb, 0xf1, 0xc8, 0x31, 0x33, 0xdc, 0xc8, 0x19, 0x9a, 0xc2, 0x2c, 0x77, 0xce, 0xca, 0x9c, 0xe3, 0xa8, 0xd5, 0xd0, 0x5a, 0xb9, 0x11, 0x52, 0x6d, 0x1b, 0x95, 0x70, 0x5c, 0x97, 0xbb, 0x9b, 0x8f, 0xd8, 0xb2, 0x21, 0x37, 0x29, 0x6c, 0x2a, 0x28, 0xe9, 0xf0, 0x4b, 0x33, 0xcc, 0x95, 0xc6, 0x84, 0x61, 0x01, 0xe1, 0x06, 0xac, 0xb6, 0x3a, 0x94, 0xb6, 0xc4, 0x1e, 0xe9, 0x5a, 0xc1, 0x16, 0x7c, 0x6e, 0x59, 0x98, 0xc1, 0xcd, 0x29, 0x81, 0x02, 0x2d, 0x67, 0x00, 0xdb, 0x9d, 0x0a, 0x84, 0x2e, 0xf8, 0xf0, 0x49, 0xf4, 0x11, 0x47, 0x0d, 0x36, 0x18, 0x21, 0x69, 0x25, 0xfb, 0x10, 0x15, 0x25, 0x2b, 0xb8, 0x43, 0x35, 0x68, 0xce, 0x93, 0x20, 0x90, 0x06, 0xc6, 0x57, 0x3d, 0x70, 0x98, 0x42, 0x6c, 0x1b, 0x25, 0xdd, 0x46, 0x57, 0xe5, 0x40, 0xe3, 0x4e, 0xe0, 0x1b, 0xba, 0x26, 0x10, 0xb4, 0x87, 0x6c, 0xb8, 0x44, 0x86, 0x3d, 0x92, 0x0c, 0x88, 0x18, 0xd2, 0x6c, 0xa1, 0x5f, 0xdb, 0x2c, 0x66, 0x88, 0x39, 0x73, 0xd0, 0x23, 0xe8, 0x2a, 0x96, 0xa6, 0x0b, 0x18, 0x6a, 0xb0, 0x97, 0x7f, 0xb8, 0x2a, 0x7c, 0xd9, 0xbd, 0xd0, 0xbd, 0x56, 0x0c, 0x76, 0x12, 0xaa, 0xc7, 0x49, 0x25, 0x14, }; -uint8_t H_bpoly_MAXSEC[14*NEWHOPE_POLYBYTES] = { +uint8_t H_bpoly_MAXSEC[14*NEWHOPE_RINGCT20_POLYBYTES] = { 0x43, 0x23, 0xa2, 0x78, 0xf2, 0x74, 0x24, 0x23, 0x54, 0xb9, 0xe2, 0x58, 0x50, 0x64, 0x52, 0x61, 0xde, 0x64, 0xe4, 0x61, 0x14, 0x74, 0xc1, 0x77, 0xe5, 0x53, 0xc9, 0x07, 0xa6, 0x25, 0x4b, 0x73, 0x18, 0xb0, 0x10, 0x07, 0x0b, 0x01, 0xb9, 0xe7, 0x11, 0x7c, 0xf6, 0x91, 0x96, 0x72, 0x8c, 0xe9, 0x8f, 0x46, 0x9e, 0xdd, 0x19, 0x07, 0x6a, 0xa1, 0xd5, 0xd7, 0x87, 0xc6, 0x9d, 0x38, 0xb6, 0xd0, 0x86, 0xbd, 0xf8, 0x71, 0xdd, 0x9b, 0x81, 0x91, 0x67, 0x51, 0xee, 0x9e, 0x03, 0x45, 0x27, 0xd6, 0x73, 0x12, 0x60, 0x2d, 0xc1, 0xa4, 0xc2, 0xa1, 0x7f, 0xa0, 0x82, 0x22, 0x9b, 0x88, 0x13, 0xf8, 0xa0, 0x2f, 0x76, 0x46, 0x3e, 0xda, 0xb8, 0xe8, 0x9c, 0x1c, 0xc5, 0x2d, 0x23, 0x80, 0xbd, 0x8b, 0x53, 0x56, 0x83, 0x36, 0xc9, 0xd2, 0x8b, 0x97, 0xe5, 0x94, 0x09, 0x3c, 0xae, 0x61, 0xca, 0xd5, 0x37, 0xfa, 0x13, 0xd6, 0x11, 0xfb, 0x50, 0x6f, 0x06, 0x5d, 0x44, 0xa7, 0xbe, 0x2d, 0xf4, 0xa1, 0xda, 0x88, 0x00, 0xdb, 0x88, 0xa5, 0x4b, 0x25, 0x85, 0x3e, 0x96, 0x97, 0x20, 0x2b, 0x8c, 0x48, 0xb6, 0x09, 0x26, 0x0b, 0x76, 0xb3, 0x00, 0x42, 0xcf, 0x92, 0x9e, 0xa7, 0x05, 0x48, 0xa5, 0xea, 0x59, 0x4c, 0xfa, 0x01, 0xe9, 0x76, 0x5e, 0xe6, 0x56, 0x36, 0x24, 0x30, 0x12, 0x07, 0xc5, 0xea, 0xe7, 0xd8, 0x08, 0x64, 0x28, 0x1a, 0xa6, 0xca, 0x4f, 0xf0, 0x69, 0xf3, 0xce, 0x51, 0xc6, 0xab, 0x56, 0x51, 0x3c, 0x2e, 0x5d, 0xe0, 0x24, 0x8a, 0xa7, 0x8a, 0x82, 0xaf, 0x88, 0xc9, 0xa9, 0x54, 0xdb, 0xdb, 0x0b, 0xc3, 0x6b, 0x0a, 0x5a, 0x7a, 0x1c, 0x47, 0x43, 0x3a, 0x12, 0x01, 0x12, 0xa0, 0x19, 0xfa, 0xf2, 0x7d, 0xb9, 0x52, 0x02, 0x70, 0x66, 0x50, 0xed, 0x82, 0x63, 0xd6, 0x0b, 0x60, 0x93, 0xf9, 0x21, 0x48, 0x1b, 0x25, 0x6b, 0xe1, 0xc8, 0xba, 0x09, 0x85, 0xdb, 0x1b, 0xe7, 0x81, 0xb6, 0x31, 0xa0, 0x02, 0xf5, 0x35, 0x64, 0x5c, 0xa6, 0x00, 0x7d, 0x23, 0x58, 0x3a, 0x16, 0x94, 0x07, 0x56, 0x84, 0x07, 0x28, 0x86, 0x85, 0x88, 0xc4, 0xf4, 0x64, 0x15, 0x86, 0x8e, 0xe6, 0x1a, 0x17, 0x26, 0xee, 0x59, 0x5e, 0x06, 0x69, 0xab, 0x1e, 0x0e, 0x39, 0x51, 0x02, 0x1b, 0xd4, 0x69, 0x0c, 0x44, 0x1b, 0xdc, 0x62, 0x36, 0x69, 0x2e, 0xa2, 0xd4, 0xc5, 0x1b, 0x2b, 0x78, 0x9d, 0x2e, 0x5b, 0x59, 0xcd, 0xc9, 0x4b, 0x68, 0xb6, 0x98, 0x91, 0xf7, 0xcb, 0xdf, 0x04, 0x18, 0x91, 0xc4, 0x74, 0x21, 0x82, 0x69, 0x83, 0x2d, 0x6c, 0x46, 0x07, 0x5d, 0x10, 0xa3, 0x3c, 0x12, 0x64, 0xb3, 0x9d, 0xc0, 0x1e, 0x55, 0xab, 0x67, 0x68, 0xe2, 0xa2, 0x8e, 0x05, 0x8e, 0x5b, 0xea, 0xb1, 0xec, 0x29, 0xd7, 0x1a, 0xd8, 0xe4, 0xc7, 0xb4, 0x8d, 0x3b, 0x88, 0xbf, 0x73, 0xd0, 0x48, 0x80, 0x35, 0xd1, 0xb0, 0x83, 0x53, 0xba, 0xa0, 0x1e, 0x59, 0xe0, 0xc2, 0x64, 0xf1, 0xb4, 0x6f, 0xa9, 0x22, 0xb3, 0xcd, 0x19, 0x43, 0xa0, 0xde, 0xd6, 0x98, 0x72, 0x91, 0x35, 0xf2, 0x1f, 0x92, 0xc5, 0x18, 0x6a, 0x4d, 0xd8, 0x80, 0x91, 0xe7, 0x7a, 0x49, 0xac, 0x80, 0xab, 0xdd, 0xc2, 0x32, 0x29, 0x4e, 0xca, 0xdd, 0x82, 0x91, 0xbf, 0xe1, 0x94, 0x59, 0xae, 0x79, 0x27, 0x4d, 0x3c, 0xa7, 0xfd, 0x97, 0x88, 0x47, 0x8d, 0x86, 0x77, 0x1d, 0x13, 0xaf, 0x69, 0x85, 0xce, 0x1b, 0xdd, 0x0f, 0x72, 0x0b, 0xf0, 0x4e, 0x9b, 0xd8, 0x4c, 0x64, 0x43, 0xd6, 0x00, 0xb1, 0xab, 0x10, 0x75, 0xcb, 0x1c, 0x39, 0xb0, 0x8d, 0xd5, 0xca, 0x37, 0x18, 0xee, 0x07, 0xd2, 0x97, 0x21, 0x64, 0x9c, 0x3d, 0x8e, 0x16, 0xa4, 0x64, 0xb0, 0xc0, 0x90, 0x50, 0x48, 0x2f, 0xdf, 0x60, 0x6a, 0x8e, 0x4e, 0x6b, 0x51, 0xbc, 0x05, 0xc0, 0x76, 0x0a, 0xcd, 0x5a, 0xb7, 0xc3, 0xf1, 0x1d, 0x26, 0x68, 0xa9, 0x35, 0x22, 0x74, 0xfa, 0x5b, 0x93, 0x09, 0x22, 0x95, 0x22, 0xfe, 0x6c, 0x52, 0xd7, 0x05, 0x33, 0xf1, 0x0e, 0x8f, 0xbe, 0x84, 0xa9, 0xf3, 0x11, 0xf0, 0xbc, 0x17, 0xed, 0x95, 0x4a, 0xb9, 0xb4, 0x63, 0x21, 0xc9, 0xe7, 0x54, 0x00, 0xf2, 0x01, 0x53, 0xc3, 0x60, 0x4b, 0xda, 0x05, 0xbe, 0x08, 0x42, 0xff, 0x7a, 0x9d, 0xb8, 0x80, 0x80, 0x0a, 0x8a, 0xf3, 0xd4, 0x70, 0x5e, 0x72, 0xc5, 0x59, 0xa2, 0x02, 0x10, 0x14, 0x47, 0x6f, 0x61, 0x98, 0x2a, 0xe9, 0x29, 0x65, 0xc4, 0x5c, 0x08, 0xa0, 0xcc, 0x6f, 0xac, 0x09, 0x72, 0x94, 0xa6, 0x15, 0x21, 0x45, 0xe2, 0x75, 0x61, 0xa7, 0x46, 0x5f, 0xb3, 0xe8, 0xf6, 0xaa, 0xc9, 0x4d, 0x93, 0x42, 0x6c, 0x6a, 0xe3, 0xe8, 0x64, 0x1a, 0x15, 0xac, 0x93, 0xa0, 0xd8, 0x02, 0xb3, 0xc5, 0x26, 0x3f, 0x24, 0x08, 0xc9, 0xbc, 0xb4, 0x5d, 0xb8, 0x67, 0x33, 0xfe, 0x6d, 0x7f, 0x28, 0xd2, 0x88, 0xdb, 0x84, 0x60, 0x84, 0xd6, 0x91, 0xc0, 0x8e, 0x39, 0x78, 0x4c, 0x4f, 0x63, 0x78, 0x52, 0x44, 0x2e, 0x71, 0x1e, 0xbf, 0xe8, 0x0c, 0xc4, 0x1c, 0xa0, 0x82, 0x82, 0x55, 0x55, 0xa5, 0x02, 0xad, 0x9f, 0xa8, 0xc1, 0x8c, 0xa5, 0xaa, 0x79, 0xec, 0x10, 0x25, 0xf3, 0x2c, 0x4e, 0xb9, 0x6d, 0xc5, 0xa2, 0x73, 0xcc, 0x23, 0x79, 0xac, 0xfa, 0xa0, 0x14, 0xba, 0x6f, 0xbf, 0x46, 0xaa, 0xa2, 0xfd, 0x0d, 0x51, 0xbb, 0x65, 0x13, 0xa7, 0xd8, 0x3d, 0x97, 0x0a, 0xa0, 0x23, 0x40, 0xaa, 0x25, 0x01, 0xb6, 0xc4, 0x2c, 0x03, 0x84, 0x39, 0x02, 0x86, 0x0b, 0x23, 0x54, 0xdf, 0x49, 0x88, 0x68, 0xa2, 0x6e, 0x65, 0x92, 0xc8, 0x64, 0xff, 0x80, 0xfb, 0xf5, 0xfe, 0x41, 0x1a, 0x1d, 0x47, 0xb8, 0x72, 0xb9, 0x18, 0x57, 0xc6, 0x19, 0xab, 0xc2, 0x82, 0x91, 0x12, 0xa7, 0x63, 0xbe, 0x41, 0x62, 0x90, 0x23, 0x5e, 0x2e, 0x82, 0x5a, 0x1c, 0x26, 0x02, 0xfb, 0x86, 0x3b, 0xb0, 0x51, 0x50, 0xa2, 0xeb, 0xe6, 0x17, 0xa7, 0x7a, 0xb4, 0x90, 0x83, 0x82, 0x61, 0x46, 0x1c, 0xc1, 0x17, 0x6d, 0x6c, 0x55, 0xf4, 0x9e, 0x36, 0x21, 0xc9, 0x5f, 0x20, 0x38, 0x09, 0x00, 0xb2, 0x91, 0x4e, 0x17, 0xc8, 0x99, 0x60, 0x10, 0xb8, 0x2f, 0x66, 0x2a, 0xde, 0x99, 0x99, 0x55, 0xd9, 0xc6, 0xb3, 0x4b, 0xe4, 0x69, 0xec, 0x28, 0xaf, 0xd2, 0x6a, 0x0d, 0x3c, 0x3b, 0x42, 0xf5, 0x79, 0x87, 0x50, 0x1a, 0x7f, 0x6a, 0x54, 0x99, 0xa9, 0xee, 0xae, 0x9d, 0x6e, 0xa0, 0x4a, 0xa8, 0xe1, 0x74, 0x7b, 0x22, 0x1f, 0x93, 0xbf, 0x2e, 0x5c, 0x3b, 0xa8, 0xe1, 0x51, 0xb8, 0x8e, 0x63, 0x7c, 0x13, 0xcd, 0xc1, 0x30, 0xc0, 0x78, 0x5c, 0xac, 0xb4, 0xa3, 0xfb, 0x24, 0x43, 0xe6, 0x90, 0x2c, 0x88, 0x5f, 0x30, 0x60, 0xa4, 0x62, 0xa0, 0x11, 0xc3, 0xc6, 0x82, 0xb5, 0xe9, 0x55, 0x28, 0xd8, 0x35, 0xb7, 0x67, 0x2d, 0x7c, 0x6a, 0x24, 0xca, 0x04, 0xea, 0x4c, 0xec, 0x80, 0xd7, 0xec, 0x81, 0x9d, 0x6f, 0x1e, 0x02, 0xe7, 0xf8, 0x6b, 0xe5, 0x10, 0x61, 0xd5, 0x99, 0x68, 0x86, 0x52, 0x54, 0x6e, 0x77, 0x7a, 0xad, 0x25, 0x87, 0xe2, 0xb4, 0xa9, 0xbe, 0x61, 0x10, 0x02, 0xdc, 0xe1, 0x41, 0x42, 0x79, 0x57, 0x2c, 0xd3, 0x60, 0x46, 0x99, 0x09, 0xbd, 0x9e, 0x49, 0x09, 0x61, 0x46, 0x39, 0x0d, 0x89, 0xa9, 0x97, 0x47, 0x6e, 0x2d, 0x91, 0x09, 0xca, 0xbe, 0x2a, 0xdb, 0xfd, 0x02, 0xcb, 0xc5, 0x2b, 0xa3, 0x17, 0x0c, 0x0c, 0x90, 0x42, 0x9f, 0x40, 0xcf, 0x06, 0x7f, 0x36, 0xa4, 0x33, 0xab, 0xde, 0x41, 0x37, 0xe4, 0xc2, 0x70, 0x0a, 0xeb, 0xf9, 0x47, 0x74, 0xe1, 0x94, 0xca, 0x94, 0x05, 0xac, 0x79, 0x91, 0xd6, 0x7b, 0x33, 0xa8, 0xa8, 0xeb, 0x9f, 0x53, 0x61, 0xa1, 0xf6, 0x4d, 0x00, 0xa2, 0xed, 0x8b, 0x56, 0x86, 0x4d, 0xd1, 0x9b, 0xb9, 0xf8, 0xfe, 0xf6, 0x8b, 0x3f, 0x66, 0x24, 0x7b, 0x78, 0x96, 0x30, 0x0c, 0xd7, 0x5a, 0xe6, 0xb8, 0x39, 0x24, 0x1a, 0x8a, 0x33, 0x13, 0xa6, 0xa2, 0x44, 0x4f, 0xa6, 0x9c, 0xda, 0x77, 0x8d, 0x63, 0xe2, 0x01, 0x09, 0xb0, 0xbb, 0x49, 0xa5, 0x42, 0x8f, 0xa9, 0xa8, 0xae, 0x09, 0x20, 0x18, 0x02, 0xf2, 0xf1, 0x1b, 0xd6, 0xa8, 0x70, 0x9c, 0xe6, 0x02, 0xb1, 0x6a, 0x62, 0x9f, 0xd6, 0x7d, 0x93, 0xea, 0x0a, 0x39, 0x35, 0x51, 0xd6, 0x26, 0xe7, 0xe5, 0x30, 0x51, 0xa7, 0x18, 0xc6, 0x6b, 0xb9, 0x28, 0x01, 0x29, 0x63, 0x71, 0x63, 0xec, 0x7c, 0x37, 0x92, 0xf1, 0x69, 0x8d, 0xd6, 0x95, 0xcd, 0xaf, 0x05, 0xe4, 0x2a, 0x65, 0x0a, 0x99, 0x59, 0x22, 0x64, 0xc2, 0x5d, 0x80, 0xfa, 0xe6, 0xa4, 0xd6, 0x52, 0x35, 0x2e, 0x48, 0x23, 0x63, 0xa0, 0x5b, 0x3c, 0x98, 0x04, 0x16, 0xf3, 0xd6, 0xf1, 0x38, 0x3a, 0xb3, 0x68, 0x72, 0x25, 0x19, 0x92, 0x3d, 0x52, 0x44, 0x95, 0x61, 0x61, 0xbc, 0x67, 0x79, 0x4f, 0xb2, 0x54, 0xb6, 0xf5, 0xab, 0x05, 0x01, 0x07, 0x91, 0x10, 0x71, 0x85, 0x61, 0x81, 0xc6, 0x84, 0x37, 0xea, 0x8d, 0x06, 0xed, 0x60, 0x96, 0xd7, 0x95, 0xac, 0x30, 0x1a, 0xf3, 0x07, 0xc4, 0xdc, 0xad, 0x3a, 0xef, 0x7e, 0x3a, 0x17, 0xaa, 0x71, 0x6c, 0x47, 0x6b, 0x89, 0xcd, 0x62, 0x92, 0x08, 0xa0, 0xc9, 0x9a, 0x8e, 0xc4, 0x2b, 0xba, 0xa0, 0x65, 0x67, 0xde, 0xd1, 0xaa, 0x7e, 0xd7, 0xf8, 0x22, 0xf0, 0xa5, 0xbd, 0xb9, 0x68, 0xec, 0x44, 0x0b, 0x38, 0x0a, 0xba, 0xe3, 0xfc, 0xfa, 0x63, 0xb6, 0x2a, 0x85, 0x49, 0x7b, 0xc6, 0x29, 0x66, 0x5f, 0xa4, 0x49, 0xf1, 0x56, 0x24, 0xb1, 0x8e, 0xd8, 0x0c, 0x3c, 0xc5, 0x52, 0xa6, 0x03, 0x35, 0x12, 0xd9, 0x90, 0x6e, 0x25, 0x16, 0xe7, 0x0b, 0x21, 0xb7, 0x7b, 0x79, 0x50, 0x51, 0x8b, 0xbf, 0x44, 0xac, 0x3e, 0xb6, 0x9b, 0x1b, 0x7e, 0x52, 0x38, 0xda, 0x9d, 0xdc, 0x07, 0x5c, 0x3a, 0xd7, 0x36, 0x0b, 0x88, 0x0b, 0xbd, 0x51, 0x9e, 0x5e, 0x46, 0x27, 0x5c, 0xea, 0x17, 0x3a, 0x20, 0x87, 0xa7, 0xaf, 0x4d, 0x09, 0xbc, 0xa9, 0x6a, 0x82, 0x18, 0xb7, 0xa8, 0xe2, 0x96, 0x18, 0x4c, 0x47, 0x88, 0x20, 0x82, 0xf0, 0x4b, 0x01, 0xdd, 0x2a, 0x14, 0xe7, 0xf4, 0x5b, 0x57, 0x28, 0x9d, 0xa7, 0x8a, 0xb9, 0x4b, 0x02, 0xec, 0x4b, 0x30, 0x7e, 0xa1, 0x0a, 0x29, 0x6e, 0x72, 0xbb, 0xb3, 0x36, 0x4e, 0xb3, 0xe3, 0x82, 0x95, 0xd5, 0x02, 0x59, 0xe4, 0x04, 0x35, 0x5a, 0x5e, 0xf1, 0x43, 0x03, 0x2a, 0xad, 0xa7, 0x74, 0x84, 0x20, 0x47, 0x9a, 0xd3, 0x24, 0x4e, 0x8a, 0x91, 0x1a, 0x0b, 0x42, 0x12, 0xf6, 0x49, 0x61, 0x82, 0x81, 0xa8, 0x73, 0xa0, 0x8e, 0x49, 0x09, 0x25, 0xe7, 0x15, 0x9f, 0x85, 0x19, 0x23, 0x82, 0x94, 0x30, 0xf1, 0xc4, 0x0c, 0xbf, 0x95, 0x4a, 0x93, 0xfd, 0x19, 0xb5, 0x1c, 0xcf, 0x1f, 0x3b, 0x2d, 0xfa, 0x00, 0x49, 0x16, 0xf0, 0xf6, 0xfd, 0xa6, 0x17, 0x70, 0xec, 0x3b, 0x3b, 0x10, 0xb1, 0x50, 0x6b, 0x97, 0xb7, 0x37, 0xc8, 0xe4, 0xa8, 0x52, 0x06, 0x0c, 0x53, 0x1f, 0x3e, 0x1d, 0x8c, 0x65, 0x9a, 0xea, 0xa2, 0x52, 0x73, 0x2f, 0xc3, 0x1f, 0x98, 0xda, 0x38, 0xaf, 0x5e, 0x2b, 0x63, 0x25, 0x04, 0x82, 0x75, 0x52, 0xad, 0x49, 0xa4, 0x8e, 0x4a, 0xa1, 0xe4, 0x06, 0x09, 0x0b, 0x19, 0xf9, 0x57, 0xcd, 0x65, 0xef, 0xa8, 0x2d, 0xea, 0x6f, 0x62, 0x01, 0x2e, 0x72, 0x3d, 0x5c, 0x15, 0x18, 0x9a, 0x63, 0xe5, 0x81, 0x06, 0x74, 0x5d, 0x91, 0xb3, 0x18, 0xb5, 0xe8, 0x3b, 0x35, 0xa5, 0xe7, 0xa5, 0x87, 0x76, 0x66, 0xb8, 0x69, 0x33, 0xa9, 0xfb, 0x9e, 0xa2, 0xd3, 0x96, 0x40, 0xb5, 0x84, 0x5a, 0x8b, 0xc6, 0x0b, 0xd8, 0x53, 0x8f, 0x11, 0x0c, 0x5a, 0x22, 0xd5, 0xc1, 0xf8, 0x2d, 0x7c, 0x32, 0x1f, 0xdd, 0x40, 0x3f, 0x21, 0x95, 0xad, 0x2a, 0x87, 0x31, 0xce, 0x2c, 0xbd, 0x6d, 0xe2, 0x5d, 0x54, 0x95, 0xc0, 0x04, 0x7c, 0x9a, 0xed, 0xd2, 0x43, 0x75, 0xb6, 0xf0, 0x5a, 0xd5, 0x59, 0x7d, 0xd9, 0x28, 0x1f, 0x45, 0x21, 0x13, 0xd0, 0xfd, 0x24, 0x92, 0x08, 0xcf, 0xc9, 0x1e, 0x39, 0xa4, 0xa9, 0xcf, 0xcc, 0xf9, 0x46, 0x58, 0x5b, 0xed, 0x55, 0x68, 0x31, 0xfa, 0xf0, 0x90, 0x49, 0xd3, 0xc4, 0x73, 0xc4, 0x58, 0x7a, 0x8e, 0xc6, 0x6d, 0x04, 0x76, 0x05, 0x9f, 0x68, 0x6e, 0xb5, 0x74, 0x21, 0xf1, 0x46, 0x0c, 0x83, 0x52, 0x75, 0xc4, 0x69, 0xa8, 0xde, 0x25, 0x08, 0x93, 0x8f, 0x36, 0x82, 0xa3, 0xca, 0x48, 0x4a, 0xf9, 0x25, 0x7e, 0xc8, 0xc3, 0x71, 0x75, 0x86, 0x99, 0x0b, 0xee, 0x2b, 0x17, 0xab, 0x7f, 0xa9, 0x3b, 0xeb, 0x0e, 0xe1, 0x6b, 0xbe, 0x89, 0xa8, 0xa6, 0x25, 0xb8, 0x60, 0x3e, 0xa2, 0x2b, 0x6c, 0x43, 0xf2, 0x3b, 0x63, 0xae, 0x39, 0xdc, 0xa4, 0x04, 0x43, 0x14, 0x48, 0x25, 0xb9, 0x9d, 0xc9, 0xdb, 0x60, 0x69, 0x64, 0x3f, 0x48, 0x6a, 0xa5, 0x77, 0xb1, 0x56, 0xdd, 0x91, 0x38, 0xc0, 0xb8, 0x11, 0x88, 0xb5, 0xac, 0x4f, 0xbb, 0x18, 0x6d, 0x65, 0x7a, 0xc4, 0x3f, 0x26, 0x89, 0x10, 0x88, 0x63, 0xa6, 0x6c, 0x23, 0x7f, 0x1d, 0x13, 0xac, 0x83, 0x27, 0xe1, 0x46, 0x8e, 0x24, 0x05, 0x05, 0x93, 0x76, 0x1f, 0x71, 0x24, 0x59, 0xa6, 0xa7, 0xf7, 0x93, 0x56, 0x25, 0x77, 0x67, 0xa3, 0xa3, 0xd8, 0x1c, 0x53, 0x47, 0x2d, 0x36, 0xa3, 0x9a, 0x36, 0x1d, 0x34, 0x4f, 0x34, 0x87, 0x92, 0x4d, 0x00, 0x6a, 0x89, 0x34, 0xa2, 0xa9, 0x84, 0xb2, 0x5d, 0x42, 0xbc, 0xe5, 0xd1, 0x8c, 0x79, 0x1a, 0x23, 0x6d, 0x99, 0xff, 0x09, 0x82, 0xd1, 0x66, 0x29, 0x80, 0x6d, 0x12, 0x62, 0xca, 0xd1, 0x52, 0x52, 0xab, 0x7a, 0x9d, 0xde, 0x80, 0x26, 0x17, 0x1c, 0xed, 0xb9, 0xe2, 0xab, 0x12, 0xb0, 0x53, 0x58, 0x90, 0x40, 0xee, 0xb5, 0x80, 0xdb, 0x5c, 0xa1, 0xd3, 0x40, 0xd3, 0xf2, 0x72, 0x55, 0x27, 0x1f, 0x00, 0xce, 0x01, 0xc0, 0x2e, 0x29, 0x5e, 0xd1, 0x83, 0x26, 0x07, 0x31, 0x8e, 0x74, 0xc0, 0x6f, 0x89, 0x2b, 0xee, 0x81, 0xd8, 0x9d, 0xcb, 0x8a, 0x19, 0x86, 0x51, 0xa4, 0x0e, 0xdb, 0xe2, 0xbf, 0x2c, 0x66, 0x4f, 0x9d, 0xac, 0x62, 0x89, 0x2a, 0x5e, 0xbd, 0x5c, 0xfa, 0x2a, 0xd0, 0x18, 0x51, 0x31, 0x02, 0x6a, 0x56, 0x62, 0x3a, 0x37, 0x93, 0x55, 0xa1, 0xd7, 0x48, 0x25, 0x25, 0x46, 0x95, 0x25, 0x00, 0x24, 0x12, 0x4f, 0xed, 0x92, 0x5f, 0x87, 0xfd, 0xa8, 0x6e, 0x67, 0x9c, 0x73, 0x7a, 0xe4, 0x40, 0x83, 0xae, 0x64, 0x72, 0x8b, 0x2a, 0x66, 0x74, 0xa4, 0x9f, 0x9e, 0x34, 0x21, 0xb6, 0x96, 0x26, 0xc5, 0x1d, 0x00, 0x85, 0xe0, 0x7d, 0x2e, 0x26, 0xb3, 0x12, 0x74, 0xc9, 0x59, 0xa5, 0x99, 0x9c, 0x43, 0x85, 0xdd, 0x99, 0xd6, 0x55, 0x1c, 0x47, 0x62, 0xe2, 0x3e, 0x24, 0x90, 0x4d, 0x7a, 0x54, 0x68, 0x45, 0x9b, 0xee, 0xbb, 0x19, 0x4a, 0x8a, 0x37, 0xf3, 0xa6, 0xa8, 0xb4, 0x77, 0x0d, 0x12, 0x30, 0xee, 0x4e, 0xea, 0x6c, 0x95, 0x21, 0x4a, 0xec, 0x47, 0x06, 0x8d, 0x70, 0x86, 0xfa, 0x8c, 0x74, 0x80, 0xb4, 0xd5, 0x36, 0x29, 0xd5, 0x05, 0xd4, 0x53, 0xb2, 0x50, 0xa9, 0xdd, 0xfb, 0x66, 0x69, 0xde, 0x91, 0x13, 0x11, 0x04, 0x42, 0x8e, 0x52, 0xad, 0xe2, 0x13, 0xa4, 0xb3, 0x1d, 0x79, 0x37, 0x31, 0x40, 0xfe, 0x20, 0xd8, 0x29, 0x9c, 0xfd, 0xa2, 0x1b, 0x2b, 0x26, 0x00, 0x7f, 0xa4, 0x63, 0xce, 0xe2, 0xa0, 0xe5, 0x64, 0x70, 0x07, 0x32, 0xfb, 0xd5, 0x0c, 0x21, 0x72, 0x5f, 0x3f, 0xaa, 0x84, 0xf8, 0x93, 0x02, 0x8d, 0x37, 0x15, 0x2b, 0x71, 0x6e, 0xe7, 0x03, 0xb2, 0x16, 0x64, 0x1c, 0x3b, 0x57, 0x29, 0x74, 0x59, 0xe4, 0x26, 0x95, 0x50, 0x52, 0xe2, 0xc1, 0x22, 0x3a, 0x47, 0xa8, 0x19, 0xb0, 0x03, 0x7c, 0xd2, 0xa9, 0xde, 0x9f, 0xb3, 0x37, 0x03, 0x21, 0x7b, 0xad, 0x68, 0x74, 0xc0, 0x64, 0x61, 0x36, 0x96, 0x1b, 0x90, 0xd1, 0xb6, 0xe6, 0x2f, 0x7e, 0x56, 0xbd, 0x22, 0xa7, 0x68, 0x91, 0xff, 0x5b, 0xcb, 0xc6, 0xea, 0x10, 0x54, 0xa3, 0x05, 0x3f, 0x04, 0x1e, 0xe8, 0x27, 0x9e, 0xea, 0x02, 0xa8, 0x16, 0x9a, 0x5f, 0xc3, 0x4d, 0x90, 0xe2, 0x82, 0x05, 0x6b, 0xe9, 0x90, 0x9f, 0x87, 0xa1, 0xb9, 0x75, 0x74, 0x41, 0x25, 0x61, 0x89, 0xc9, 0x09, 0xdc, 0x48, 0xfb, 0x82, 0x4b, 0x22, 0x33, 0x87, 0x5e, 0x64, 0xf3, 0x62, 0x71, 0x32, 0x25, 0xde, 0xda, 0x95, 0x72, 0x4e, 0x03, 0x5a, 0x18, 0x7e, 0x25, 0xa2, 0x86, 0x8a, 0xf8, 0x6a, 0xaf, 0x9a, 0xdf, 0x52, 0x50, 0xa5, 0xe1, 0xdb, 0xaa, 0x63, 0x2a, 0x3e, 0xf5, 0x2e, 0x4e, 0xc1, 0x23, 0xa2, 0x02, 0x4b, 0x90, 0x86, 0xc7, 0x68, 0xaa, 0x74, 0xd6, 0xcc, 0xa8, 0xb8, 0x05, 0x12, 0xb8, 0xab, 0x51, 0xb5, 0x6a, 0x16, 0x2a, 0x99, 0xcb, 0x9f, 0x03, 0xa8, 0x9b, 0xb2, 0x69, 0x13, 0xdf, 0x40, 0xb1, 0xc0, 0x0c, 0xaf, 0x4f, 0x12, 0xb5, 0x35, 0x74, 0x7c, 0x42, 0xc7, 0x04, 0x41, 0x82, 0x0f, 0xb5, 0x27, 0xd9, 0x29, 0xee, 0xc3, 0xa5, 0x76, 0x6c, 0x86, 0x6d, 0x8c, 0x9b, 0x04, 0x5a, 0x8a, 0x38, 0x22, 0x8a, 0x42, 0xfc, 0xc1, 0x14, 0x60, 0x8d, 0xb8, 0x75, 0xd9, 0x36, 0xa1, 0xb2, 0x9e, 0x36, 0xb3, 0x8b, 0xe2, 0x15, 0x35, 0x54, 0xd3, 0xaa, 0x24, 0xb2, 0x46, 0x09, 0x9c, 0x27, 0x02, 0xdb, 0x62, 0x7b, 0x9d, 0xc1, 0x42, 0xe8, 0x53, 0xca, 0x99, 0x57, 0xd6, 0x61, 0xeb, 0x62, 0x4a, 0x89, 0x59, 0xed, 0x3a, 0x38, 0xac, 0xda, 0x8c, 0x2c, 0xcd, 0xff, 0x13, 0xe4, 0x92, 0x69, 0x59, 0x09, 0xc7, 0xb7, 0x92, 0x25, 0x47, 0x14, 0x9c, 0x61, 0xa1, 0xe4, 0xfd, 0x76, 0x78, 0x9f, 0x6c, 0xb0, 0x25, 0xba, 0x7d, 0x96, 0x6f, 0x64, 0xfa, 0x45, 0xfd, 0x48, 0x34, 0x6d, 0xad, 0x5b, 0x06, 0x95, 0x20, 0xec, 0xa2, 0x64, 0x8a, 0x14, 0xe6, 0x9d, 0xa5, 0xda, 0xd8, 0xf3, 0x90, 0x95, 0x4a, 0x1e, 0x8e, 0xf6, 0x26, 0x6a, 0x01, 0x40, 0xe3, 0x6c, 0x6b, 0xab, 0xeb, 0xd8, 0x3e, 0x57, 0xdf, 0x8a, 0x48, 0x10, 0xa8, 0x63, 0x9c, 0xd4, 0xf1, 0x91, 0x35, 0xae, 0x97, 0x13, 0x6b, 0x9e, 0x77, 0x73, 0x3a, 0xa6, 0x13, 0x0f, 0x30, 0x6a, 0x74, 0x88, 0x82, 0x09, 0x0e, 0xcb, 0xc4, 0x44, 0x6e, 0x43, 0x75, 0x61, 0x80, 0x19, 0xc2, 0x9e, 0x4a, 0x20, 0x14, 0x7a, 0x67, 0x80, 0xe8, 0x62, 0x6d, 0xe2, 0x3a, 0xd9, 0x86, 0x10, 0xb3, 0x96, 0x4a, 0x71, 0x5a, 0xc9, 0x6a, 0x3c, 0x07, 0x17, 0xd3, 0x2a, 0x37, 0xb8, 0x3f, 0x88, 0x11, 0x47, 0x89, 0xc5, 0xa5, 0x89, 0xd5, 0x1d, 0xe4, 0xfa, 0x43, 0xe1, 0xb6, 0x3f, 0x5e, 0x28, 0x61, 0x4d, 0xcd, 0x10, 0xd8, 0x0b, 0x05, 0x01, 0x7c, 0xd6, 0x58, 0xbe, 0x60, 0xb9, 0xfa, 0x01, 0xae, 0xab, 0x2a, 0x02, 0xa8, 0x58, 0xa6, 0x08, 0x20, 0x88, 0x29, 0x6a, 0x70, 0x48, 0x68, 0x3c, 0x0e, 0xdd, 0xf4, 0x66, 0xf7, 0xfd, 0x9f, 0x6a, 0x44, 0xe2, 0x30, 0xe5, 0x41, 0x82, 0x01, 0x43, 0x63, 0x28, 0xfa, 0x62, 0x06, 0x8d, 0x56, 0xab, 0x74, 0x4a, 0xac, 0xa0, 0x6e, 0x05, 0x79, 0x93, 0x84, 0x74, 0x31, 0xcb, 0x22, 0x00, 0x83, 0x62, 0x6e, 0x41, 0x28, 0xe1, 0xf4, 0xd6, 0xde, 0xd2, 0x5f, 0x81, 0xe9, 0x5e, 0x47, 0xb5, 0x86, 0x36, 0x8d, 0x4c, 0x3d, 0x40, 0x35, 0x48, 0x62, 0x9c, 0xa4, 0x96, 0x93, 0x1e, 0x75, 0x23, 0x28, 0x21, 0x43, 0x94, 0x1e, 0xde, 0x73, @@ -71,10 +71,10 @@ uint8_t H_bpoly_MAXSEC[14*NEWHOPE_POLYBYTES] = { 0x83, 0xce, 0xee, 0x26, 0xfe, 0xc8, 0x55, 0xfb, 0xab, 0x61, 0x7a, 0xb4, 0x3e, 0x98, 0xa5, 0x83, 0xa8, 0x74, 0x74, 0x6a, 0x70, 0x92, 0x40, 0x4b, 0x30, 0x6c, 0x24, 0xb1, 0x72, 0x56, 0xd3, 0x41, 0x87, 0x86, 0xaa, 0xc6, 0x46, 0x39, 0x95, 0x16, 0x50, 0xa9, 0x1b, 0xd6, 0x4c, 0x1b, 0xde, 0xd5, 0x5c, 0x7a, 0x47, 0x8c, 0x75, 0xf9, 0x79, 0xad, 0x0b, 0xe1, 0x23, 0xb2, 0xfa, 0xc5, 0x0b, 0xf3, 0x6c, 0xcd, 0x96, 0xcc, 0x8d, 0x35, 0xca, 0xaa, 0xa9, 0xa6, 0xf0, 0xa5, 0x9f, 0xff, 0x25, 0x0a, 0x18, 0x6f, 0x40, 0xbe, 0xda, 0x14, 0xf8, 0xd2, 0x99, 0xc5, 0xb5, 0x2a, 0xad, 0x14, 0x2b, 0x88, 0x9a, 0x75, 0x49, 0x92, 0x0d, 0xd0, 0x6a, 0x75, 0x5c, 0x49, 0x14, 0xda, 0x40, 0x97, 0xb2, 0x73, 0x94, 0x1e, 0xa2, 0xf4, 0x7e, 0xf2, 0x6d, 0xfe, 0x5b, 0x6f, 0xcb, 0xcc, 0x25, 0x8f, 0x60, 0xad, 0x33, 0xfa, 0xff, 0x86, 0x91, 0xd8, 0x8f, 0x7f, 0x68, 0xce, 0xe8, 0x94, 0x6c, 0x26, 0xcf, 0x21, 0xbb, 0xa8, 0x54, 0x2f, 0x90, 0xe6, 0xbb, 0x6b, 0x20, 0x0a, 0xcd, 0x87, 0x8d, 0x05, 0x03, 0xb8, 0x4e, 0xaf, 0xa5, 0x86, 0xe5, 0x46, 0x12, 0x74, 0xe0, 0xa1, 0x06, 0x97, 0xd8, 0xfd, 0x46, 0xb9, 0xd6, 0x48, 0x99, 0x7e, 0xed, 0x42, 0x01, 0xa3, 0x05, 0xc5, 0xff, 0x64, 0xb3, 0x97, 0xa5, 0x6d, 0xb3, 0x9b, 0xa9, 0x7e, 0xda, 0x4a, 0x09, 0xc3, 0x79, 0xc6, 0x23, 0xe7, 0x55, 0x10, 0x58, 0xaa, 0x26, 0x55, 0x14, 0xe6, 0xc2, 0x86, 0xf7, 0x1e, 0x33, 0xba, 0x13, 0xc8, 0x06, 0xe1, 0xa0, 0xa9, 0xd8, 0x07, 0x0b, 0x14, 0xf7, 0x95, 0x23, 0xdc, 0x5b, 0xc3, 0xe8, 0xc9, 0x4c, 0x7f, 0xf5, 0x00, 0x22, 0x76, 0x91, 0xa4, 0x3b, 0xae, 0x8f, 0x50, 0xa4, 0xc2, 0x91, 0x21, 0x41, 0x9a, 0xff, 0xa1, 0x06, 0xbc, 0x18, 0x03, 0xa0, 0xc6, 0x49, 0x37, 0x91, 0x16, 0x2a, 0xdf, 0xa5, 0x78, 0xfe, 0xe1, 0x3f, 0xf1, 0xcc, 0x5b, 0x1a, 0x55, 0xe0, 0x57, 0x6c, 0x89, 0xe3, 0x19, 0x3b, 0x84, 0x67, 0xb2, 0x2e, 0x13, 0xa5, 0xdd, 0xbe, 0x6c, 0xe9, 0x03, 0xac, 0x38, 0x61, 0x69, 0xb9, 0xd5, 0x83, 0xd7, 0x63, 0xd3, 0x8d, 0x9d, 0x30, 0xcc, 0xd1, 0xd0, 0x52, 0x7d, 0xb7, 0x3c, 0x82, 0x41, 0x4a, 0x67, 0x25, 0x25, 0xa0, 0x4c, 0x69, 0x09, 0xa3, 0x1c, 0x0f, 0x2a, 0x2d, 0x86, 0x96, 0xcc, 0xb9, 0x2d, 0x02, 0x5e, 0x30, 0x46, 0x3c, 0x8c, 0x99, 0x26, 0xd0, 0xc6, 0xb2, 0x30, 0x80, 0x81, 0xa2, 0x18, 0xd7, 0xfa, 0xe0, 0xd2, 0x8c, 0x65, 0x17, 0x08, 0xd0, 0x50, 0x54, 0x87, 0x40, 0x5a, 0xa5, 0xf0, 0x6a, 0x84, 0xb6, 0x61, 0x1f, 0x81, 0xc8, 0xdb, 0x0a, 0xa9, 0x30, 0x56, 0x57, 0xd3, 0xf2, 0x20, 0x20, 0xbe, 0xdd, 0x27, 0x52, 0xb7, 0x29, 0x64, 0x55, 0x17, 0xfb, 0x24, 0xe8, 0xd6, 0xbe, 0xc2, 0xc0, 0x9b, 0x1b, 0x20, 0xaa, 0x04, 0x0a, 0x28, 0xe2, 0x00, 0x13, 0x1a, 0x61, 0xfe, 0x8c, 0x4d, 0xd1, 0xd2, 0x46, 0x56, 0xed, 0xc9, 0x30, 0x02, 0xaf, 0xd1, 0x46, 0xaa, 0x8f, 0xcc, 0x85, 0xe2, 0xec, 0x66, 0x59, 0xad, 0x27, 0x2b, 0x72, 0x35, 0x21, 0x0b, 0x95, 0xfb, 0x62, 0xb6, 0x76, 0x1b, 0x33, 0x9f, 0xa5, 0xe6, 0x84, 0x48, 0x43, 0xe7, 0x1f, 0x6b, 0x03, 0x06, 0x31, 0x7d, 0x42, 0xeb, 0x46, 0xd6, 0x9f, 0x40, 0x7c, 0x2f, 0xd1, 0x53, 0x23, 0x84, 0xd5, 0xba, 0x11, 0xde, 0x04, 0xa8, 0x16, 0x2c, 0x67, 0x3f, 0xd7, 0xa2, 0x2b, 0xe3, 0xd1, 0x53, 0xb6, 0xab, 0xdc, 0x4b, 0x2b, 0xec, 0x4d, 0x03, 0xc8, 0x00, 0xd2, 0x20, 0xb2, 0x7f, 0x40, 0xd0, 0xf5, 0x0a, 0x10, 0x74, 0x68, 0xe5, 0x89, 0x7e, 0x21, 0x70, 0x11, 0x3a, 0xc4, 0x95, 0xb6, 0xe4, 0x98, 0x79, 0x75, 0xbf, 0xcc, 0x11, 0xb5, 0x9e, 0x16, 0x3b, 0xbd, 0x19, 0x43, 0xf7, 0xad, 0xc0, 0xa9, 0xc1, 0x9c, 0xdb, 0x47, 0xea, 0x3a, 0x30, 0xf5, 0x08, 0x82, 0x0a, 0xb6, 0x15, 0x47, 0x71, 0x2e, 0x85, 0xf5, 0x47, 0x52, 0x31, 0xce, 0x54, 0xb9, 0x43, 0x40, 0xc1, 0x32, 0xed, 0x20, 0xa6, 0xeb, 0x7f, 0x4c, 0x94, 0x91, 0x29, 0x59, 0xe3, 0x9e, 0x4d, 0x99, 0x92, 0x8c, 0x14, 0x27, 0x9e, 0xc4, 0x0f, 0xab, 0xcb, 0x44, 0x77, 0xc3, 0x5e, 0x4b, 0x2a, 0x13, 0x5d, 0xf0, 0xaf, 0xf0, 0xbc, 0xf4, 0x06, 0xcd, 0x71, 0xc7, 0xc4, 0xba, 0xbe, 0xd4, 0x50, 0x16, 0x3f, 0xcd, 0x63, 0x8c, 0x22, 0xac, 0x90, 0x04, 0xf6, 0x16, 0x60, 0x6c, 0xff, 0x30, 0x6a, 0x95, 0x36, 0x58, 0x29, 0x3b, 0x91, 0xb6, 0xfa, 0xa3, 0xe0, 0x03, 0x4e, 0xc9, 0x4f, 0xc0, 0xb6, 0xe4, 0x5e, 0xb6, 0xb5, 0x47, 0x54, 0x93, 0x9f, 0x4c, 0xc9, 0xca, 0xa0, 0x05, 0x2d, 0xca, 0xd3, 0xef, 0x72, 0x28, 0x68, 0x82, 0xfe, 0x9d, 0x3b, 0x70, 0xd2, 0x38, 0x09, 0x08, 0xc3, 0x00, 0x8a, 0x88, 0xc1, 0x45, 0x28, 0x84, 0x39, 0xd5, 0xa6, 0x91, 0x86, 0x75, 0xa3, 0x37, 0x64, 0xec, 0xe9, 0x1f, 0xdb, 0x15, 0xdb, 0x40, 0x71, 0x15, 0x17, 0xb2, 0xe4, 0x77, 0x60, 0xc6, 0xd0, 0x3c, 0xaf, 0x6c, 0x98, 0x93, 0x1c, 0xba, 0x2a, 0x35, 0x97, 0x45, 0x71, 0x3c, 0xf4, 0x79, 0x3b, 0x0f, 0xbc, 0x58, 0xda, 0x66, 0x2a, 0x67, 0x04, 0x74, 0xe7, 0x40, 0x04, 0x75, 0x65, 0x67, 0x8f, 0x74, 0x5e, 0x75, 0x0e, 0x6b, 0x84, 0x8b, 0xd4, 0x6b, 0xa5, 0x9d, 0x6a, 0xaa, 0x31, 0x66, 0x14, 0x79, 0x0f, 0xd1, 0x93, 0x0a, 0x09, 0x85, 0x5d, 0x31, 0x1c, 0x2e, 0x29, 0xd5, 0xad, 0x00, 0x3f, 0xd0, 0x6b, 0xd5, 0xb8, 0x99, 0xde, 0x13, 0x44, 0x0b, 0x8c, 0xb0, 0xb9, 0xe0, 0x66, 0x08, 0x94, 0xa7, 0x20, 0x36, 0x64, 0x06, 0x20, 0x05, 0xf5, 0xe5, 0x44, 0xb1, 0x0b, 0x37, 0x0d, 0x15, 0x2a, 0x8f, 0x59, 0x3d, 0xd7, 0xd9, 0x6d, 0xb5, 0xed, 0x52, 0x07, 0xa8, 0x98, 0xd5, 0x20, 0xe6, 0xa8, 0x73, 0x59, 0x15, 0xad, 0x3b, 0xb1, 0x14, 0x95, 0xc6, 0xc1, 0x35, 0x82, 0xf7, 0x78, 0xb0, 0xe3, 0x1e, 0x45, 0x25, 0x8e, 0xee, 0x79, 0xc1, 0x85, 0x4a, 0x13, 0x4a, 0xc5, 0x74, 0x3c, 0x55, 0x32, 0x58, 0x42, 0x70, 0xbb, 0x99, 0x80, 0x33, 0x06, 0xc1, 0x71, 0x67, 0x67, 0xd5, 0xf4, 0x38, 0x75, 0x16, 0xac, 0x66, 0xa9, 0x95, 0x93, 0x41, 0x4e, 0x6d, 0xc0, 0x0a, 0x3e, 0x21, 0xa8, 0xfe, 0x59, 0x15, 0x88, 0x02, 0xa1, 0xb2, 0xdd, 0x2b, 0x2b, 0xab, 0xf1, 0x63, 0xe7, 0x1c, 0xae, }; -#elif (NEWHOPE_N == 1024) -#error "NEWHOPE_N must be either 512 or 1024.. NEWHOPE_N == 1024 not implemented yet" +#elif (NEWHOPE_RINGCT20_N == 1024) +#error "NEWHOPE_RINGCT20_N must be either 512 or 1024.. NEWHOPE_RINGCT20_N == 1024 not implemented yet" #elif -#error "NEWHOPE_N must be either 512 or 1024.." +#error "NEWHOPE_RINGCT20_N must be either 512 or 1024.." #endif bool ringct20_params_init(ringct20_param_t *ringct20_p, DAP_RINGCT20_SIGN_SECURITY kind)//, const int wLen) @@ -116,15 +116,15 @@ bool ringct20_params_init(ringct20_param_t *ringct20_p, DAP_RINGCT20_SIGN_SECURI ringct20_p->mLen = ringct20_p->M-1; ringct20_p->wLen = 3; ringct20_p->kind = kind; - ringct20_p->POLY_RINGCT20_SIZE_PACKED = NEWHOPE_POLYBYTES; - ringct20_p->POLY_RINGCT20_SIZE = NEWHOPE_N*sizeof(uint16_t); + ringct20_p->POLY_RINGCT20_SIZE_PACKED = NEWHOPE_RINGCT20_POLYBYTES; + ringct20_p->POLY_RINGCT20_SIZE = NEWHOPE_RINGCT20_N*sizeof(uint16_t); ringct20_p->A = malloc(ringct20_p->POLY_RINGCT20_SIZE * ringct20_p->mLen);//CRUTCH//dont forget to free ringct20_p->H = malloc(ringct20_p->POLY_RINGCT20_SIZE * ringct20_p->mLen);//CRUTCH//dont forget to free for(int i = 0; i < ringct20_p->mLen; ++i) { - poly_frombytes(ringct20_p->A + i, A_bpoly + i*NEWHOPE_POLYBYTES); - poly_frombytes(ringct20_p->H + i, H_bpoly + i*NEWHOPE_POLYBYTES); + poly_frombytes(ringct20_p->A + i, A_bpoly + i*NEWHOPE_RINGCT20_POLYBYTES); + poly_frombytes(ringct20_p->H + i, H_bpoly + i*NEWHOPE_RINGCT20_POLYBYTES); } ringct20_p->RINGCT20_PBK_SIZE = ringct20_p->POLY_RINGCT20_SIZE_PACKED; ringct20_p->RINGCT20_PRK_SIZE = ringct20_p->mLen*ringct20_p->POLY_RINGCT20_SIZE_PACKED; diff --git a/dap-sdk/crypto/src/ringct20/verify.c b/dap-sdk/crypto/src/ringct20/verify.c deleted file mode 100644 index f87691a1ab8b56957ebd3608037a0dce6abe3b27..0000000000000000000000000000000000000000 --- a/dap-sdk/crypto/src/ringct20/verify.c +++ /dev/null @@ -1,52 +0,0 @@ -#include <string.h> -#include <stdint.h> - -/************************************************* -* Name: verify_ringct20 -* -* Description: Compare two arrays for equality in constant time. -* -* Arguments: const unsigned char *a: pointer to first byte array -* const unsigned char *b: pointer to second byte array -* size_t len: length of the byte arrays -* -* Returns 0 if the byte arrays are equal, 1 otherwise -**************************************************/ -int verify_ringct20(const unsigned char *a, const unsigned char *b, size_t len) { - uint64_t r; - size_t i; - r = 0; - i = 0; - while (i < len) - { - if (a[i] != b[i]) - { - r = 1; - break; - } - i++; - } - - return r; -} - -/************************************************* -* Name: cmov -* -* Description: Copy len bytes from x to r if b is 1; -* don't modify x if b is 0. Requires b to be in {0,1}; -* assumes two's complement representation of negative integers. -* Runs in constant time. -* -* Arguments: unsigned char *r: pointer to output byte array -* const unsigned char *x: pointer to input byte array -* size_t len: Amount of bytes to be copied -* unsigned char b: Condition bit; has to be in {0,1} -**************************************************/ -void cmov(unsigned char *r, const unsigned char *x, size_t len, unsigned char b) { - size_t i; - - b = -b; - for (i = 0; i < len; i++) - r[i] ^= b & (x[i] ^ r[i]); -} diff --git a/dap-sdk/crypto/src/ringct20/verify.h b/dap-sdk/crypto/src/ringct20/verify.h deleted file mode 100644 index 007eaa39e26f0457d2816af0e7b9993c33fbcaf0..0000000000000000000000000000000000000000 --- a/dap-sdk/crypto/src/ringct20/verify.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef VERIFY_H -#define VERIFY_H - -#include <stdio.h> - -/* returns 0 for equal strings, 1 for non-equal strings */ -int verify_ringct20(const unsigned char *a, const unsigned char *b, size_t len); - -/* b = 1 means mov, b = 0 means don't mov*/ -void cmov(unsigned char *r, const unsigned char *x, size_t len, unsigned char b); - -#endif diff --git a/dap-sdk/crypto/src/seed/modes.h b/dap-sdk/crypto/src/seed/modes.h new file mode 100644 index 0000000000000000000000000000000000000000..22b609bac7414f596ff34c8a1c968e9a59465557 --- /dev/null +++ b/dap-sdk/crypto/src/seed/modes.h @@ -0,0 +1,79 @@ +/* + * Copyright 2008-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_MODES_H +# define OPENSSL_MODES_H +#include<stddef.h> + +# ifdef __cplusplus +extern "C" { +# endif +typedef void (*block128_f) (const unsigned char in[16], + unsigned char out[16], const void *key); + +typedef void (*cbc128_f) (const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], int enc); + +typedef void (*ecb128_f) (const unsigned char *in, unsigned char *out, + size_t len, const void *key, + int enc); + +typedef void (*ctr128_f) (const unsigned char *in, unsigned char *out, + size_t blocks, const void *key, + const unsigned char ivec[16]); + +typedef void (*ccm128_f) (const unsigned char *in, unsigned char *out, + size_t blocks, const void *key, + const unsigned char ivec[16], + unsigned char cmac[16]); + +void CRYPTO_cbc128_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], block128_f block); +void CRYPTO_cbc128_decrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], block128_f block); + +void CRYPTO_ctr128_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], + unsigned char ecount_buf[16], unsigned int *num, + block128_f block); + +void CRYPTO_ctr128_encrypt_ctr32(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], + unsigned char ecount_buf[16], + unsigned int *num, ctr128_f ctr); + +void CRYPTO_ofb128_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], int *num, + block128_f block); + +void CRYPTO_cfb128_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], int *num, + int enc, block128_f block); +void CRYPTO_cfb128_8_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const void *key, + unsigned char ivec[16], int *num, + int enc, block128_f block); +void CRYPTO_cfb128_1_encrypt(const unsigned char *in, unsigned char *out, + size_t bits, const void *key, + unsigned char ivec[16], int *num, + int enc, block128_f block); + + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/dap-sdk/crypto/src/seed/ofb128.c b/dap-sdk/crypto/src/seed/ofb128.c new file mode 100644 index 0000000000000000000000000000000000000000..23182677f4be730b598e0ab89c596455792d7609 --- /dev/null +++ b/dap-sdk/crypto/src/seed/ofb128.c @@ -0,0 +1,65 @@ +/* + * Copyright 2008-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include "modes.h" + +/* + * The input and output encrypted as though 128bit ofb mode is being used. + * The extra state information to record how much of the 128bit block we have + * used is contained in *num; + */ +void CRYPTO_ofb128_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], int *num, block128_f block) +{ + unsigned int n; + size_t l = 0; + + n = *num; + + if (16 % sizeof(size_t) == 0) { /* always true actually */ + do { + while (n && len) { + *(out++) = *(in++) ^ ivec[n]; + --len; + n = (n + 1) % 16; + } + while (len >= 16) { + (*block) (ivec, ivec, key); + for (; n < 16; n += sizeof(size_t)) + *(size_t *)(out + n) = + *(size_t *)(in + n) ^ *(size_t *)(ivec + n); + len -= 16; + out += 16; + in += 16; + n = 0; + } + if (len) { + (*block) (ivec, ivec, key); + while (len--) { + out[n] = in[n] ^ ivec[n]; + ++n; + } + } + *num = n; + return; + } while (0); + } + /* the rest would be commonly eliminated by x86* compiler */ + while (l < len) { + if (n == 0) { + (*block) (ivec, ivec, key); + } + out[l] = in[l] ^ ivec[n]; + ++l; + n = (n + 1) % 16; + } + + *num = n; +} diff --git a/dap-sdk/crypto/src/seed/seed.c b/dap-sdk/crypto/src/seed/seed.c new file mode 100644 index 0000000000000000000000000000000000000000..3d0d9d433a58c75004c95b28ce2f57ad2a0beb48 --- /dev/null +++ b/dap-sdk/crypto/src/seed/seed.c @@ -0,0 +1,449 @@ +/* + * Copyright 2007-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* + * Copyright (c) 2007 KISA(Korea Information Security Agency). All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Neither the name of author nor the names of its contributors may + * be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + */ + +/* + * SEED low level APIs are deprecated for public use, but still ok for + * internal use. + */ + +# include "seed.h" +# include "seed_local.h" + + +# define G_FUNC(v) \ + SS[0][(unsigned char) (v) & 0xff] ^ \ + SS[1][(unsigned char) ((v)>>8) & 0xff] ^ \ + SS[2][(unsigned char)((v)>>16) & 0xff] ^ \ + SS[3][(unsigned char)((v)>>24) & 0xff] + +static const seed_word SS[4][256] = { + { 0x2989a1a8, 0x05858184, 0x16c6d2d4, 0x13c3d3d0, + 0x14445054, 0x1d0d111c, 0x2c8ca0ac, 0x25052124, + 0x1d4d515c, 0x03434340, 0x18081018, 0x1e0e121c, + 0x11415150, 0x3cccf0fc, 0x0acac2c8, 0x23436360, + 0x28082028, 0x04444044, 0x20002020, 0x1d8d919c, + 0x20c0e0e0, 0x22c2e2e0, 0x08c8c0c8, 0x17071314, + 0x2585a1a4, 0x0f8f838c, 0x03030300, 0x3b4b7378, + 0x3b8bb3b8, 0x13031310, 0x12c2d2d0, 0x2ecee2ec, + 0x30407070, 0x0c8c808c, 0x3f0f333c, 0x2888a0a8, + 0x32023230, 0x1dcdd1dc, 0x36c6f2f4, 0x34447074, + 0x2ccce0ec, 0x15859194, 0x0b0b0308, 0x17475354, + 0x1c4c505c, 0x1b4b5358, 0x3d8db1bc, 0x01010100, + 0x24042024, 0x1c0c101c, 0x33437370, 0x18889098, + 0x10001010, 0x0cccc0cc, 0x32c2f2f0, 0x19c9d1d8, + 0x2c0c202c, 0x27c7e3e4, 0x32427270, 0x03838380, + 0x1b8b9398, 0x11c1d1d0, 0x06868284, 0x09c9c1c8, + 0x20406060, 0x10405050, 0x2383a3a0, 0x2bcbe3e8, + 0x0d0d010c, 0x3686b2b4, 0x1e8e929c, 0x0f4f434c, + 0x3787b3b4, 0x1a4a5258, 0x06c6c2c4, 0x38487078, + 0x2686a2a4, 0x12021210, 0x2f8fa3ac, 0x15c5d1d4, + 0x21416160, 0x03c3c3c0, 0x3484b0b4, 0x01414140, + 0x12425250, 0x3d4d717c, 0x0d8d818c, 0x08080008, + 0x1f0f131c, 0x19899198, 0x00000000, 0x19091118, + 0x04040004, 0x13435350, 0x37c7f3f4, 0x21c1e1e0, + 0x3dcdf1fc, 0x36467274, 0x2f0f232c, 0x27072324, + 0x3080b0b0, 0x0b8b8388, 0x0e0e020c, 0x2b8ba3a8, + 0x2282a2a0, 0x2e4e626c, 0x13839390, 0x0d4d414c, + 0x29496168, 0x3c4c707c, 0x09090108, 0x0a0a0208, + 0x3f8fb3bc, 0x2fcfe3ec, 0x33c3f3f0, 0x05c5c1c4, + 0x07878384, 0x14041014, 0x3ecef2fc, 0x24446064, + 0x1eced2dc, 0x2e0e222c, 0x0b4b4348, 0x1a0a1218, + 0x06060204, 0x21012120, 0x2b4b6368, 0x26466264, + 0x02020200, 0x35c5f1f4, 0x12829290, 0x0a8a8288, + 0x0c0c000c, 0x3383b3b0, 0x3e4e727c, 0x10c0d0d0, + 0x3a4a7278, 0x07474344, 0x16869294, 0x25c5e1e4, + 0x26062224, 0x00808080, 0x2d8da1ac, 0x1fcfd3dc, + 0x2181a1a0, 0x30003030, 0x37073334, 0x2e8ea2ac, + 0x36063234, 0x15051114, 0x22022220, 0x38083038, + 0x34c4f0f4, 0x2787a3a4, 0x05454144, 0x0c4c404c, + 0x01818180, 0x29c9e1e8, 0x04848084, 0x17879394, + 0x35053134, 0x0bcbc3c8, 0x0ecec2cc, 0x3c0c303c, + 0x31417170, 0x11011110, 0x07c7c3c4, 0x09898188, + 0x35457174, 0x3bcbf3f8, 0x1acad2d8, 0x38c8f0f8, + 0x14849094, 0x19495158, 0x02828280, 0x04c4c0c4, + 0x3fcff3fc, 0x09494148, 0x39093138, 0x27476364, + 0x00c0c0c0, 0x0fcfc3cc, 0x17c7d3d4, 0x3888b0b8, + 0x0f0f030c, 0x0e8e828c, 0x02424240, 0x23032320, + 0x11819190, 0x2c4c606c, 0x1bcbd3d8, 0x2484a0a4, + 0x34043034, 0x31c1f1f0, 0x08484048, 0x02c2c2c0, + 0x2f4f636c, 0x3d0d313c, 0x2d0d212c, 0x00404040, + 0x3e8eb2bc, 0x3e0e323c, 0x3c8cb0bc, 0x01c1c1c0, + 0x2a8aa2a8, 0x3a8ab2b8, 0x0e4e424c, 0x15455154, + 0x3b0b3338, 0x1cccd0dc, 0x28486068, 0x3f4f737c, + 0x1c8c909c, 0x18c8d0d8, 0x0a4a4248, 0x16465254, + 0x37477374, 0x2080a0a0, 0x2dcde1ec, 0x06464244, + 0x3585b1b4, 0x2b0b2328, 0x25456164, 0x3acaf2f8, + 0x23c3e3e0, 0x3989b1b8, 0x3181b1b0, 0x1f8f939c, + 0x1e4e525c, 0x39c9f1f8, 0x26c6e2e4, 0x3282b2b0, + 0x31013130, 0x2acae2e8, 0x2d4d616c, 0x1f4f535c, + 0x24c4e0e4, 0x30c0f0f0, 0x0dcdc1cc, 0x08888088, + 0x16061214, 0x3a0a3238, 0x18485058, 0x14c4d0d4, + 0x22426260, 0x29092128, 0x07070304, 0x33033330, + 0x28c8e0e8, 0x1b0b1318, 0x05050104, 0x39497178, + 0x10809090, 0x2a4a6268, 0x2a0a2228, 0x1a8a9298 + }, + { 0x38380830, 0xe828c8e0, 0x2c2d0d21, 0xa42686a2, + 0xcc0fcfc3, 0xdc1eced2, 0xb03383b3, 0xb83888b0, + 0xac2f8fa3, 0x60204060, 0x54154551, 0xc407c7c3, + 0x44044440, 0x6c2f4f63, 0x682b4b63, 0x581b4b53, + 0xc003c3c3, 0x60224262, 0x30330333, 0xb43585b1, + 0x28290921, 0xa02080a0, 0xe022c2e2, 0xa42787a3, + 0xd013c3d3, 0x90118191, 0x10110111, 0x04060602, + 0x1c1c0c10, 0xbc3c8cb0, 0x34360632, 0x480b4b43, + 0xec2fcfe3, 0x88088880, 0x6c2c4c60, 0xa82888a0, + 0x14170713, 0xc404c4c0, 0x14160612, 0xf434c4f0, + 0xc002c2c2, 0x44054541, 0xe021c1e1, 0xd416c6d2, + 0x3c3f0f33, 0x3c3d0d31, 0x8c0e8e82, 0x98188890, + 0x28280820, 0x4c0e4e42, 0xf436c6f2, 0x3c3e0e32, + 0xa42585a1, 0xf839c9f1, 0x0c0d0d01, 0xdc1fcfd3, + 0xd818c8d0, 0x282b0b23, 0x64264662, 0x783a4a72, + 0x24270723, 0x2c2f0f23, 0xf031c1f1, 0x70324272, + 0x40024242, 0xd414c4d0, 0x40014141, 0xc000c0c0, + 0x70334373, 0x64274763, 0xac2c8ca0, 0x880b8b83, + 0xf437c7f3, 0xac2d8da1, 0x80008080, 0x1c1f0f13, + 0xc80acac2, 0x2c2c0c20, 0xa82a8aa2, 0x34340430, + 0xd012c2d2, 0x080b0b03, 0xec2ecee2, 0xe829c9e1, + 0x5c1d4d51, 0x94148490, 0x18180810, 0xf838c8f0, + 0x54174753, 0xac2e8ea2, 0x08080800, 0xc405c5c1, + 0x10130313, 0xcc0dcdc1, 0x84068682, 0xb83989b1, + 0xfc3fcff3, 0x7c3d4d71, 0xc001c1c1, 0x30310131, + 0xf435c5f1, 0x880a8a82, 0x682a4a62, 0xb03181b1, + 0xd011c1d1, 0x20200020, 0xd417c7d3, 0x00020202, + 0x20220222, 0x04040400, 0x68284860, 0x70314171, + 0x04070703, 0xd81bcbd3, 0x9c1d8d91, 0x98198991, + 0x60214161, 0xbc3e8eb2, 0xe426c6e2, 0x58194951, + 0xdc1dcdd1, 0x50114151, 0x90108090, 0xdc1cccd0, + 0x981a8a92, 0xa02383a3, 0xa82b8ba3, 0xd010c0d0, + 0x80018181, 0x0c0f0f03, 0x44074743, 0x181a0a12, + 0xe023c3e3, 0xec2ccce0, 0x8c0d8d81, 0xbc3f8fb3, + 0x94168692, 0x783b4b73, 0x5c1c4c50, 0xa02282a2, + 0xa02181a1, 0x60234363, 0x20230323, 0x4c0d4d41, + 0xc808c8c0, 0x9c1e8e92, 0x9c1c8c90, 0x383a0a32, + 0x0c0c0c00, 0x2c2e0e22, 0xb83a8ab2, 0x6c2e4e62, + 0x9c1f8f93, 0x581a4a52, 0xf032c2f2, 0x90128292, + 0xf033c3f3, 0x48094941, 0x78384870, 0xcc0cccc0, + 0x14150511, 0xf83bcbf3, 0x70304070, 0x74354571, + 0x7c3f4f73, 0x34350531, 0x10100010, 0x00030303, + 0x64244460, 0x6c2d4d61, 0xc406c6c2, 0x74344470, + 0xd415c5d1, 0xb43484b0, 0xe82acae2, 0x08090901, + 0x74364672, 0x18190911, 0xfc3ecef2, 0x40004040, + 0x10120212, 0xe020c0e0, 0xbc3d8db1, 0x04050501, + 0xf83acaf2, 0x00010101, 0xf030c0f0, 0x282a0a22, + 0x5c1e4e52, 0xa82989a1, 0x54164652, 0x40034343, + 0x84058581, 0x14140410, 0x88098981, 0x981b8b93, + 0xb03080b0, 0xe425c5e1, 0x48084840, 0x78394971, + 0x94178793, 0xfc3cccf0, 0x1c1e0e12, 0x80028282, + 0x20210121, 0x8c0c8c80, 0x181b0b13, 0x5c1f4f53, + 0x74374773, 0x54144450, 0xb03282b2, 0x1c1d0d11, + 0x24250521, 0x4c0f4f43, 0x00000000, 0x44064642, + 0xec2dcde1, 0x58184850, 0x50124252, 0xe82bcbe3, + 0x7c3e4e72, 0xd81acad2, 0xc809c9c1, 0xfc3dcdf1, + 0x30300030, 0x94158591, 0x64254561, 0x3c3c0c30, + 0xb43686b2, 0xe424c4e0, 0xb83b8bb3, 0x7c3c4c70, + 0x0c0e0e02, 0x50104050, 0x38390931, 0x24260622, + 0x30320232, 0x84048480, 0x68294961, 0x90138393, + 0x34370733, 0xe427c7e3, 0x24240420, 0xa42484a0, + 0xc80bcbc3, 0x50134353, 0x080a0a02, 0x84078783, + 0xd819c9d1, 0x4c0c4c40, 0x80038383, 0x8c0f8f83, + 0xcc0ecec2, 0x383b0b33, 0x480a4a42, 0xb43787b3 + }, + { 0xa1a82989, 0x81840585, 0xd2d416c6, 0xd3d013c3, + 0x50541444, 0x111c1d0d, 0xa0ac2c8c, 0x21242505, + 0x515c1d4d, 0x43400343, 0x10181808, 0x121c1e0e, + 0x51501141, 0xf0fc3ccc, 0xc2c80aca, 0x63602343, + 0x20282808, 0x40440444, 0x20202000, 0x919c1d8d, + 0xe0e020c0, 0xe2e022c2, 0xc0c808c8, 0x13141707, + 0xa1a42585, 0x838c0f8f, 0x03000303, 0x73783b4b, + 0xb3b83b8b, 0x13101303, 0xd2d012c2, 0xe2ec2ece, + 0x70703040, 0x808c0c8c, 0x333c3f0f, 0xa0a82888, + 0x32303202, 0xd1dc1dcd, 0xf2f436c6, 0x70743444, + 0xe0ec2ccc, 0x91941585, 0x03080b0b, 0x53541747, + 0x505c1c4c, 0x53581b4b, 0xb1bc3d8d, 0x01000101, + 0x20242404, 0x101c1c0c, 0x73703343, 0x90981888, + 0x10101000, 0xc0cc0ccc, 0xf2f032c2, 0xd1d819c9, + 0x202c2c0c, 0xe3e427c7, 0x72703242, 0x83800383, + 0x93981b8b, 0xd1d011c1, 0x82840686, 0xc1c809c9, + 0x60602040, 0x50501040, 0xa3a02383, 0xe3e82bcb, + 0x010c0d0d, 0xb2b43686, 0x929c1e8e, 0x434c0f4f, + 0xb3b43787, 0x52581a4a, 0xc2c406c6, 0x70783848, + 0xa2a42686, 0x12101202, 0xa3ac2f8f, 0xd1d415c5, + 0x61602141, 0xc3c003c3, 0xb0b43484, 0x41400141, + 0x52501242, 0x717c3d4d, 0x818c0d8d, 0x00080808, + 0x131c1f0f, 0x91981989, 0x00000000, 0x11181909, + 0x00040404, 0x53501343, 0xf3f437c7, 0xe1e021c1, + 0xf1fc3dcd, 0x72743646, 0x232c2f0f, 0x23242707, + 0xb0b03080, 0x83880b8b, 0x020c0e0e, 0xa3a82b8b, + 0xa2a02282, 0x626c2e4e, 0x93901383, 0x414c0d4d, + 0x61682949, 0x707c3c4c, 0x01080909, 0x02080a0a, + 0xb3bc3f8f, 0xe3ec2fcf, 0xf3f033c3, 0xc1c405c5, + 0x83840787, 0x10141404, 0xf2fc3ece, 0x60642444, + 0xd2dc1ece, 0x222c2e0e, 0x43480b4b, 0x12181a0a, + 0x02040606, 0x21202101, 0x63682b4b, 0x62642646, + 0x02000202, 0xf1f435c5, 0x92901282, 0x82880a8a, + 0x000c0c0c, 0xb3b03383, 0x727c3e4e, 0xd0d010c0, + 0x72783a4a, 0x43440747, 0x92941686, 0xe1e425c5, + 0x22242606, 0x80800080, 0xa1ac2d8d, 0xd3dc1fcf, + 0xa1a02181, 0x30303000, 0x33343707, 0xa2ac2e8e, + 0x32343606, 0x11141505, 0x22202202, 0x30383808, + 0xf0f434c4, 0xa3a42787, 0x41440545, 0x404c0c4c, + 0x81800181, 0xe1e829c9, 0x80840484, 0x93941787, + 0x31343505, 0xc3c80bcb, 0xc2cc0ece, 0x303c3c0c, + 0x71703141, 0x11101101, 0xc3c407c7, 0x81880989, + 0x71743545, 0xf3f83bcb, 0xd2d81aca, 0xf0f838c8, + 0x90941484, 0x51581949, 0x82800282, 0xc0c404c4, + 0xf3fc3fcf, 0x41480949, 0x31383909, 0x63642747, + 0xc0c000c0, 0xc3cc0fcf, 0xd3d417c7, 0xb0b83888, + 0x030c0f0f, 0x828c0e8e, 0x42400242, 0x23202303, + 0x91901181, 0x606c2c4c, 0xd3d81bcb, 0xa0a42484, + 0x30343404, 0xf1f031c1, 0x40480848, 0xc2c002c2, + 0x636c2f4f, 0x313c3d0d, 0x212c2d0d, 0x40400040, + 0xb2bc3e8e, 0x323c3e0e, 0xb0bc3c8c, 0xc1c001c1, + 0xa2a82a8a, 0xb2b83a8a, 0x424c0e4e, 0x51541545, + 0x33383b0b, 0xd0dc1ccc, 0x60682848, 0x737c3f4f, + 0x909c1c8c, 0xd0d818c8, 0x42480a4a, 0x52541646, + 0x73743747, 0xa0a02080, 0xe1ec2dcd, 0x42440646, + 0xb1b43585, 0x23282b0b, 0x61642545, 0xf2f83aca, + 0xe3e023c3, 0xb1b83989, 0xb1b03181, 0x939c1f8f, + 0x525c1e4e, 0xf1f839c9, 0xe2e426c6, 0xb2b03282, + 0x31303101, 0xe2e82aca, 0x616c2d4d, 0x535c1f4f, + 0xe0e424c4, 0xf0f030c0, 0xc1cc0dcd, 0x80880888, + 0x12141606, 0x32383a0a, 0x50581848, 0xd0d414c4, + 0x62602242, 0x21282909, 0x03040707, 0x33303303, + 0xe0e828c8, 0x13181b0b, 0x01040505, 0x71783949, + 0x90901080, 0x62682a4a, 0x22282a0a, 0x92981a8a + }, + { 0x08303838, 0xc8e0e828, 0x0d212c2d, 0x86a2a426, + 0xcfc3cc0f, 0xced2dc1e, 0x83b3b033, 0x88b0b838, + 0x8fa3ac2f, 0x40606020, 0x45515415, 0xc7c3c407, + 0x44404404, 0x4f636c2f, 0x4b63682b, 0x4b53581b, + 0xc3c3c003, 0x42626022, 0x03333033, 0x85b1b435, + 0x09212829, 0x80a0a020, 0xc2e2e022, 0x87a3a427, + 0xc3d3d013, 0x81919011, 0x01111011, 0x06020406, + 0x0c101c1c, 0x8cb0bc3c, 0x06323436, 0x4b43480b, + 0xcfe3ec2f, 0x88808808, 0x4c606c2c, 0x88a0a828, + 0x07131417, 0xc4c0c404, 0x06121416, 0xc4f0f434, + 0xc2c2c002, 0x45414405, 0xc1e1e021, 0xc6d2d416, + 0x0f333c3f, 0x0d313c3d, 0x8e828c0e, 0x88909818, + 0x08202828, 0x4e424c0e, 0xc6f2f436, 0x0e323c3e, + 0x85a1a425, 0xc9f1f839, 0x0d010c0d, 0xcfd3dc1f, + 0xc8d0d818, 0x0b23282b, 0x46626426, 0x4a72783a, + 0x07232427, 0x0f232c2f, 0xc1f1f031, 0x42727032, + 0x42424002, 0xc4d0d414, 0x41414001, 0xc0c0c000, + 0x43737033, 0x47636427, 0x8ca0ac2c, 0x8b83880b, + 0xc7f3f437, 0x8da1ac2d, 0x80808000, 0x0f131c1f, + 0xcac2c80a, 0x0c202c2c, 0x8aa2a82a, 0x04303434, + 0xc2d2d012, 0x0b03080b, 0xcee2ec2e, 0xc9e1e829, + 0x4d515c1d, 0x84909414, 0x08101818, 0xc8f0f838, + 0x47535417, 0x8ea2ac2e, 0x08000808, 0xc5c1c405, + 0x03131013, 0xcdc1cc0d, 0x86828406, 0x89b1b839, + 0xcff3fc3f, 0x4d717c3d, 0xc1c1c001, 0x01313031, + 0xc5f1f435, 0x8a82880a, 0x4a62682a, 0x81b1b031, + 0xc1d1d011, 0x00202020, 0xc7d3d417, 0x02020002, + 0x02222022, 0x04000404, 0x48606828, 0x41717031, + 0x07030407, 0xcbd3d81b, 0x8d919c1d, 0x89919819, + 0x41616021, 0x8eb2bc3e, 0xc6e2e426, 0x49515819, + 0xcdd1dc1d, 0x41515011, 0x80909010, 0xccd0dc1c, + 0x8a92981a, 0x83a3a023, 0x8ba3a82b, 0xc0d0d010, + 0x81818001, 0x0f030c0f, 0x47434407, 0x0a12181a, + 0xc3e3e023, 0xcce0ec2c, 0x8d818c0d, 0x8fb3bc3f, + 0x86929416, 0x4b73783b, 0x4c505c1c, 0x82a2a022, + 0x81a1a021, 0x43636023, 0x03232023, 0x4d414c0d, + 0xc8c0c808, 0x8e929c1e, 0x8c909c1c, 0x0a32383a, + 0x0c000c0c, 0x0e222c2e, 0x8ab2b83a, 0x4e626c2e, + 0x8f939c1f, 0x4a52581a, 0xc2f2f032, 0x82929012, + 0xc3f3f033, 0x49414809, 0x48707838, 0xccc0cc0c, + 0x05111415, 0xcbf3f83b, 0x40707030, 0x45717435, + 0x4f737c3f, 0x05313435, 0x00101010, 0x03030003, + 0x44606424, 0x4d616c2d, 0xc6c2c406, 0x44707434, + 0xc5d1d415, 0x84b0b434, 0xcae2e82a, 0x09010809, + 0x46727436, 0x09111819, 0xcef2fc3e, 0x40404000, + 0x02121012, 0xc0e0e020, 0x8db1bc3d, 0x05010405, + 0xcaf2f83a, 0x01010001, 0xc0f0f030, 0x0a22282a, + 0x4e525c1e, 0x89a1a829, 0x46525416, 0x43434003, + 0x85818405, 0x04101414, 0x89818809, 0x8b93981b, + 0x80b0b030, 0xc5e1e425, 0x48404808, 0x49717839, + 0x87939417, 0xccf0fc3c, 0x0e121c1e, 0x82828002, + 0x01212021, 0x8c808c0c, 0x0b13181b, 0x4f535c1f, + 0x47737437, 0x44505414, 0x82b2b032, 0x0d111c1d, + 0x05212425, 0x4f434c0f, 0x00000000, 0x46424406, + 0xcde1ec2d, 0x48505818, 0x42525012, 0xcbe3e82b, + 0x4e727c3e, 0xcad2d81a, 0xc9c1c809, 0xcdf1fc3d, + 0x00303030, 0x85919415, 0x45616425, 0x0c303c3c, + 0x86b2b436, 0xc4e0e424, 0x8bb3b83b, 0x4c707c3c, + 0x0e020c0e, 0x40505010, 0x09313839, 0x06222426, + 0x02323032, 0x84808404, 0x49616829, 0x83939013, + 0x07333437, 0xc7e3e427, 0x04202424, 0x84a0a424, + 0xcbc3c80b, 0x43535013, 0x0a02080a, 0x87838407, + 0xc9d1d819, 0x4c404c0c, 0x83838003, 0x8f838c0f, + 0xcec2cc0e, 0x0b33383b, 0x4a42480a, 0x87b3b437 + } +}; + + +/* key schedule constants - golden ratio */ +# define KC0 0x9e3779b9 +# define KC1 0x3c6ef373 +# define KC2 0x78dde6e6 +# define KC3 0xf1bbcdcc +# define KC4 0xe3779b99 +# define KC5 0xc6ef3733 +# define KC6 0x8dde6e67 +# define KC7 0x1bbcdccf +# define KC8 0x3779b99e +# define KC9 0x6ef3733c +# define KC10 0xdde6e678 +# define KC11 0xbbcdccf1 +# define KC12 0x779b99e3 +# define KC13 0xef3733c6 +# define KC14 0xde6e678d +# define KC15 0xbcdccf1b + + +void SEED_set_key(const unsigned char rawkey[SEED_KEY_LENGTH], + SEED_KEY_SCHEDULE *ks) +{ + seed_word x1, x2, x3, x4; + seed_word t0, t1; + + char2word(rawkey, x1); + char2word(rawkey + 4, x2); + char2word(rawkey + 8, x3); + char2word(rawkey + 12, x4); + + t0 = (x1 + x3 - KC0) & 0xffffffff; + t1 = (x2 - x4 + KC0) & 0xffffffff; + KEYUPDATE_TEMP(t0, t1, &ks->data[0]); + KEYSCHEDULE_UPDATE1(t0, t1, x1, x2, x3, x4, KC1); + KEYUPDATE_TEMP(t0, t1, &ks->data[2]); + + KEYSCHEDULE_UPDATE0(t0, t1, x1, x2, x3, x4, KC2); + KEYUPDATE_TEMP(t0, t1, &ks->data[4]); + KEYSCHEDULE_UPDATE1(t0, t1, x1, x2, x3, x4, KC3); + KEYUPDATE_TEMP(t0, t1, &ks->data[6]); + KEYSCHEDULE_UPDATE0(t0, t1, x1, x2, x3, x4, KC4); + KEYUPDATE_TEMP(t0, t1, &ks->data[8]); + KEYSCHEDULE_UPDATE1(t0, t1, x1, x2, x3, x4, KC5); + KEYUPDATE_TEMP(t0, t1, &ks->data[10]); + KEYSCHEDULE_UPDATE0(t0, t1, x1, x2, x3, x4, KC6); + KEYUPDATE_TEMP(t0, t1, &ks->data[12]); + KEYSCHEDULE_UPDATE1(t0, t1, x1, x2, x3, x4, KC7); + KEYUPDATE_TEMP(t0, t1, &ks->data[14]); + KEYSCHEDULE_UPDATE0(t0, t1, x1, x2, x3, x4, KC8); + KEYUPDATE_TEMP(t0, t1, &ks->data[16]); + KEYSCHEDULE_UPDATE1(t0, t1, x1, x2, x3, x4, KC9); + KEYUPDATE_TEMP(t0, t1, &ks->data[18]); + KEYSCHEDULE_UPDATE0(t0, t1, x1, x2, x3, x4, KC10); + KEYUPDATE_TEMP(t0, t1, &ks->data[20]); + KEYSCHEDULE_UPDATE1(t0, t1, x1, x2, x3, x4, KC11); + KEYUPDATE_TEMP(t0, t1, &ks->data[22]); + KEYSCHEDULE_UPDATE0(t0, t1, x1, x2, x3, x4, KC12); + KEYUPDATE_TEMP(t0, t1, &ks->data[24]); + KEYSCHEDULE_UPDATE1(t0, t1, x1, x2, x3, x4, KC13); + KEYUPDATE_TEMP(t0, t1, &ks->data[26]); + KEYSCHEDULE_UPDATE0(t0, t1, x1, x2, x3, x4, KC14); + KEYUPDATE_TEMP(t0, t1, &ks->data[28]); + KEYSCHEDULE_UPDATE1(t0, t1, x1, x2, x3, x4, KC15); + KEYUPDATE_TEMP(t0, t1, &ks->data[30]); +} + +void SEED_encrypt(const unsigned char s[SEED_BLOCK_SIZE], + unsigned char d[SEED_BLOCK_SIZE], + const SEED_KEY_SCHEDULE *ks) +{ + seed_word x1, x2, x3, x4; + seed_word t0, t1; + + char2word(s, x1); + char2word(s + 4, x2); + char2word(s + 8, x3); + char2word(s + 12, x4); + + E_SEED(t0, t1, x1, x2, x3, x4, 0); + E_SEED(t0, t1, x3, x4, x1, x2, 2); + E_SEED(t0, t1, x1, x2, x3, x4, 4); + E_SEED(t0, t1, x3, x4, x1, x2, 6); + E_SEED(t0, t1, x1, x2, x3, x4, 8); + E_SEED(t0, t1, x3, x4, x1, x2, 10); + E_SEED(t0, t1, x1, x2, x3, x4, 12); + E_SEED(t0, t1, x3, x4, x1, x2, 14); + E_SEED(t0, t1, x1, x2, x3, x4, 16); + E_SEED(t0, t1, x3, x4, x1, x2, 18); + E_SEED(t0, t1, x1, x2, x3, x4, 20); + E_SEED(t0, t1, x3, x4, x1, x2, 22); + E_SEED(t0, t1, x1, x2, x3, x4, 24); + E_SEED(t0, t1, x3, x4, x1, x2, 26); + E_SEED(t0, t1, x1, x2, x3, x4, 28); + E_SEED(t0, t1, x3, x4, x1, x2, 30); + + word2char(x3, d); + word2char(x4, d + 4); + word2char(x1, d + 8); + word2char(x2, d + 12); +} + +void SEED_decrypt(const unsigned char s[SEED_BLOCK_SIZE], + unsigned char d[SEED_BLOCK_SIZE], + const SEED_KEY_SCHEDULE *ks) +{ + seed_word x1, x2, x3, x4; + seed_word t0, t1; + + char2word(s, x1); + char2word(s + 4, x2); + char2word(s + 8, x3); + char2word(s + 12, x4); + + E_SEED(t0, t1, x1, x2, x3, x4, 30); + E_SEED(t0, t1, x3, x4, x1, x2, 28); + E_SEED(t0, t1, x1, x2, x3, x4, 26); + E_SEED(t0, t1, x3, x4, x1, x2, 24); + E_SEED(t0, t1, x1, x2, x3, x4, 22); + E_SEED(t0, t1, x3, x4, x1, x2, 20); + E_SEED(t0, t1, x1, x2, x3, x4, 18); + E_SEED(t0, t1, x3, x4, x1, x2, 16); + E_SEED(t0, t1, x1, x2, x3, x4, 14); + E_SEED(t0, t1, x3, x4, x1, x2, 12); + E_SEED(t0, t1, x1, x2, x3, x4, 10); + E_SEED(t0, t1, x3, x4, x1, x2, 8); + E_SEED(t0, t1, x1, x2, x3, x4, 6); + E_SEED(t0, t1, x3, x4, x1, x2, 4); + E_SEED(t0, t1, x1, x2, x3, x4, 2); + E_SEED(t0, t1, x3, x4, x1, x2, 0); + + word2char(x3, d); + word2char(x4, d + 4); + word2char(x1, d + 8); + word2char(x2, d + 12); +} diff --git a/dap-sdk/crypto/src/seed/seed.h b/dap-sdk/crypto/src/seed/seed.h new file mode 100644 index 0000000000000000000000000000000000000000..d8d182d9c9f6366195d925f543ee025a233ce65d --- /dev/null +++ b/dap-sdk/crypto/src/seed/seed.h @@ -0,0 +1,84 @@ +/* + * Copyright 2007-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* + * Copyright (c) 2007 KISA(Korea Information Security Agency). All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Neither the name of author nor the names of its contributors may + * be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +#ifndef HEADER_SEED_H +# define HEADER_SEED_H + +#include<stddef.h> +#include<stdint.h> +# ifdef __cplusplus +extern "C" { +# endif + +# define SEED_BLOCK_SIZE 16 +# define SEED_KEY_LENGTH 16 + + + +typedef struct seed_key_st { + uint32_t data[32]; +} SEED_KEY_SCHEDULE; + +void SEED_set_key(const unsigned char rawkey[SEED_KEY_LENGTH], + SEED_KEY_SCHEDULE *ks); + +void SEED_encrypt(const unsigned char s[SEED_BLOCK_SIZE], + unsigned char d[SEED_BLOCK_SIZE], + const SEED_KEY_SCHEDULE *ks); +void SEED_decrypt(const unsigned char s[SEED_BLOCK_SIZE], + unsigned char d[SEED_BLOCK_SIZE], + const SEED_KEY_SCHEDULE *ks); + +void SEED_ecb_encrypt(const unsigned char *in, + unsigned char *out, + const SEED_KEY_SCHEDULE *ks, int enc); +void SEED_cbc_encrypt(const unsigned char *in, + unsigned char *out, size_t len, + const SEED_KEY_SCHEDULE *ks, + unsigned char ivec[SEED_BLOCK_SIZE], + int enc); +void SEED_cfb128_encrypt(const unsigned char *in, + unsigned char *out, size_t len, + const SEED_KEY_SCHEDULE *ks, + unsigned char ivec[SEED_BLOCK_SIZE], + int *num, int enc); +void SEED_ofb128_encrypt(const unsigned char *in, + unsigned char *out, size_t len, + const SEED_KEY_SCHEDULE *ks, + unsigned char ivec[SEED_BLOCK_SIZE], + int *num); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/dap-sdk/crypto/src/seed/seed_local.h b/dap-sdk/crypto/src/seed/seed_local.h new file mode 100644 index 0000000000000000000000000000000000000000..713fa07cdaf9276b0a9aa5328f9d035bb730c9a2 --- /dev/null +++ b/dap-sdk/crypto/src/seed/seed_local.h @@ -0,0 +1,106 @@ +/* + * Copyright 2007-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* + * Copyright (c) 2007 KISA(Korea Information Security Agency). All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Neither the name of author nor the names of its contributors may + * be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + */ +#ifndef OSSL_CRYPTO_SEED_LOCAL_H +# define OSSL_CRYPTO_SEED_LOCAL_H + +# include "seed.h" + +typedef uint32_t seed_word; + +# define char2word(c, i) \ + (i) = ((((seed_word)(c)[0]) << 24) | (((seed_word)(c)[1]) << 16) | (((seed_word)(c)[2]) << 8) | ((seed_word)(c)[3])) + +# define word2char(l, c) \ + *((c)+0) = (unsigned char)((l)>>24) & 0xff; \ + *((c)+1) = (unsigned char)((l)>>16) & 0xff; \ + *((c)+2) = (unsigned char)((l)>> 8) & 0xff; \ + *((c)+3) = (unsigned char)((l)) & 0xff + +# define KEYSCHEDULE_UPDATE0(T0, T1, X1, X2, X3, X4, KC) \ + (T0) = (X3); \ + (X3) = (((X3)<<8) ^ ((X4)>>24)) & 0xffffffff; \ + (X4) = (((X4)<<8) ^ ((T0)>>24)) & 0xffffffff; \ + (T0) = ((X1) + (X3) - (KC)) & 0xffffffff; \ + (T1) = ((X2) + (KC) - (X4)) & 0xffffffff + +# define KEYSCHEDULE_UPDATE1(T0, T1, X1, X2, X3, X4, KC) \ + (T0) = (X1); \ + (X1) = (((X1)>>8) ^ ((X2)<<24)) & 0xffffffff; \ + (X2) = (((X2)>>8) ^ ((T0)<<24)) & 0xffffffff; \ + (T0) = ((X1) + (X3) - (KC)) & 0xffffffff; \ + (T1) = ((X2) + (KC) - (X4)) & 0xffffffff + +# define KEYUPDATE_TEMP(T0, T1, K) \ + (K)[0] = G_FUNC((T0)); \ + (K)[1] = G_FUNC((T1)) + +# define XOR_SEEDBLOCK(DST, SRC) \ + ((DST))[0] ^= ((SRC))[0]; \ + ((DST))[1] ^= ((SRC))[1]; \ + ((DST))[2] ^= ((SRC))[2]; \ + ((DST))[3] ^= ((SRC))[3] + +# define MOV_SEEDBLOCK(DST, SRC) \ + ((DST))[0] = ((SRC))[0]; \ + ((DST))[1] = ((SRC))[1]; \ + ((DST))[2] = ((SRC))[2]; \ + ((DST))[3] = ((SRC))[3] + +# define CHAR2WORD(C, I) \ + char2word((C), (I)[0]); \ + char2word((C+4), (I)[1]); \ + char2word((C+8), (I)[2]); \ + char2word((C+12), (I)[3]) + +# define WORD2CHAR(I, C) \ + word2char((I)[0], (C)); \ + word2char((I)[1], (C+4)); \ + word2char((I)[2], (C+8)); \ + word2char((I)[3], (C+12)) + +# define E_SEED(T0, T1, X1, X2, X3, X4, rbase) \ + (T0) = (X3) ^ (ks->data)[(rbase)]; \ + (T1) = (X4) ^ (ks->data)[(rbase)+1]; \ + (T1) ^= (T0); \ + (T1) = G_FUNC((T1)); \ + (T0) = ((T0) + (T1)) & 0xffffffff; \ + (T0) = G_FUNC((T0)); \ + (T1) = ((T1) + (T0)) & 0xffffffff; \ + (T1) = G_FUNC((T1)); \ + (T0) = ((T0) + (T1)) & 0xffffffff; \ + (X1) ^= (T0); \ + (X2) ^= (T1) + +#endif /* OSSL_CRYPTO_SEED_LOCAL_H */ diff --git a/dap-sdk/crypto/src/seed/seed_ofb.c b/dap-sdk/crypto/src/seed/seed_ofb.c new file mode 100644 index 0000000000000000000000000000000000000000..9d2226d8a9b8d62fad97fa84e8ca5c0e59e7d5be --- /dev/null +++ b/dap-sdk/crypto/src/seed/seed_ofb.c @@ -0,0 +1,24 @@ +/* + * Copyright 2007-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* + * SEED low level APIs are deprecated for public use, but still ok for + * internal use. + */ + +#include "seed.h" +#include "modes.h" + +void SEED_ofb128_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const SEED_KEY_SCHEDULE *ks, + unsigned char ivec[SEED_BLOCK_SIZE], int *num) +{ + CRYPTO_ofb128_encrypt(in, out, len, ks, ivec, num, + (block128_f) SEED_encrypt); +} diff --git a/dap-sdk/crypto/src/sig_picnic/picnic_impl.c b/dap-sdk/crypto/src/sig_picnic/picnic_impl.c index 2736ff31e7cc049e40f976dec7367036dc04aed1..a98e7fd85aad97e5ece7c90c64a9939c91fc5125 100755 --- a/dap-sdk/crypto/src/sig_picnic/picnic_impl.c +++ b/dap-sdk/crypto/src/sig_picnic/picnic_impl.c @@ -32,8 +32,8 @@ #include "lowmc_constants.h" #include "hash.h" #include "picnic_types.h" +#include "dap_common.h" -//#define MAX(a, b) ((a) > (b)) ? (a) : (b) #define VIEW_OUTPUTS(i, j) viewOutputs[(i) * 3 + (j)] diff --git a/dap-sdk/crypto/src/sig_tesla/sig_tesla.pri b/dap-sdk/crypto/src/sig_tesla/sig_tesla.pri index 0f45f03ef713e7e8bc12afbbe571366392684236..87cd4cee22ad7125f9430f61805c9b6e76942a66 100755 --- a/dap-sdk/crypto/src/sig_tesla/sig_tesla.pri +++ b/dap-sdk/crypto/src/sig_tesla/sig_tesla.pri @@ -2,6 +2,7 @@ HEADERS += $$PWD/tesla_params.h SOURCES += $$PWD/consts.c \ + $$PWD/poly.c \ $$PWD/sample.c \ $$PWD/sign.c \ $$PWD/tesla_params.c diff --git a/dap-sdk/crypto/test/crypto/dap_enc_test.c b/dap-sdk/crypto/test/crypto/dap_enc_test.c index 430e1d62e9995f2fd0ece9f15f6ee75216160095..ad3fb8c32e9cebef46abb2b67766c0fd537fa16f 100755 --- a/dap-sdk/crypto/test/crypto/dap_enc_test.c +++ b/dap-sdk/crypto/test/crypto/dap_enc_test.c @@ -66,7 +66,7 @@ void test_encypt_decrypt_fast(int count_steps, const dap_enc_key_type_t key_type const int max_source_size = 10000; dap_print_module_name(dap_enc_get_type_name(key_type)); char buf_encrypt_out[max_source_size+128]; - char buf_decrypt_out[max_source_size]; + char buf_decrypt_out[max_source_size+32]; int time_beg = get_cur_time_msec(); @@ -85,6 +85,7 @@ void test_encypt_decrypt_fast(int count_steps, const dap_enc_key_type_t key_type for(int i = 0; i < count_steps; i++) { source_size = 1 + random_uint32_t(max_source_size); +// printf("ss = %d\n", source_size);fflush(stdout); uint8_t *source = DAP_NEW_SIZE(uint8_t,source_size + 0); randombytes(source, source_size);//randombase64(source, source_size); @@ -92,7 +93,7 @@ void test_encypt_decrypt_fast(int count_steps, const dap_enc_key_type_t key_type size_t encrypted_size = key->enc_na(key, source, source_size, buf_encrypt_out, max_source_size+128); - size_t result_size = key->dec_na(key, buf_encrypt_out, encrypted_size, buf_decrypt_out, max_source_size); + size_t result_size = key->dec_na(key, buf_encrypt_out, encrypted_size, buf_decrypt_out, max_source_size+32); diff --git a/dap-sdk/crypto/test/crypto/main.c b/dap-sdk/crypto/test/crypto/main.c index 937cabdf0d27cd7847769b84d9d8b586599aada8..9815690c257a5cdb572465904b8f5367209bee95 100755 --- a/dap-sdk/crypto/test/crypto/main.c +++ b/dap-sdk/crypto/test/crypto/main.c @@ -12,43 +12,43 @@ #include "rand/dap_rand.h" #include "dap_common.h" +void dap_enc_newhope_tests_run(const int times); + int main(void) { // switch off debug info from library dap_log_level_set(L_CRITICAL); - const int test_numbers = 100; - test_encypt_decrypt (test_numbers, DAP_ENC_KEY_TYPE_SALSA2012, 32); - test_encypt_decrypt (test_numbers, DAP_ENC_KEY_TYPE_SALSA2012, 32); - test_encypt_decrypt_fast (test_numbers, DAP_ENC_KEY_TYPE_SALSA2012, 32); - test_encypt_decrypt (test_numbers, DAP_ENC_KEY_TYPE_GOST_OFB, 32); + //dap_enc_newhope_tests_run(test_numbers); + test_encypt_decrypt (test_numbers, DAP_ENC_KEY_TYPE_SEED_OFB, 32); + test_encypt_decrypt_fast (test_numbers, DAP_ENC_KEY_TYPE_SEED_OFB, 32); + test_encypt_decrypt (test_numbers, DAP_ENC_KEY_TYPE_SALSA2012, 32); + test_encypt_decrypt_fast (test_numbers, DAP_ENC_KEY_TYPE_SALSA2012, 32); test_encypt_decrypt (test_numbers, DAP_ENC_KEY_TYPE_GOST_OFB, 32); test_encypt_decrypt_fast (test_numbers, DAP_ENC_KEY_TYPE_GOST_OFB, 32); test_encypt_decrypt (test_numbers, DAP_ENC_KEY_TYPE_KUZN_OFB, 32); - test_encypt_decrypt (test_numbers, DAP_ENC_KEY_TYPE_KUZN_OFB, 32); - test_encypt_decrypt_fast (test_numbers, DAP_ENC_KEY_TYPE_KUZN_OFB, 32); test_encypt_decrypt_fast (test_numbers, DAP_ENC_KEY_TYPE_KUZN_OFB, 32); test_encypt_decrypt (test_numbers, DAP_ENC_KEY_TYPE_BF_CBC, 0); test_encypt_decrypt_fast (test_numbers, DAP_ENC_KEY_TYPE_BF_CBC, 0); test_encypt_decrypt (test_numbers, DAP_ENC_KEY_TYPE_BF_OFB, 0); test_encypt_decrypt_fast (test_numbers, DAP_ENC_KEY_TYPE_BF_OFB, 0); - test_encypt_decrypt (test_numbers, DAP_ENC_KEY_TYPE_IAES, 32); - test_encypt_decrypt_fast (test_numbers, DAP_ENC_KEY_TYPE_IAES, 32); - test_encypt_decrypt (test_numbers, DAP_ENC_KEY_TYPE_OAES, 32); - test_encypt_decrypt_fast (test_numbers, DAP_ENC_KEY_TYPE_OAES, 32); + test_encypt_decrypt (test_numbers, DAP_ENC_KEY_TYPE_IAES, 32); + test_encypt_decrypt_fast (test_numbers, DAP_ENC_KEY_TYPE_IAES, 32); + test_encypt_decrypt (test_numbers, DAP_ENC_KEY_TYPE_OAES, 32); + test_encypt_decrypt_fast (test_numbers, DAP_ENC_KEY_TYPE_OAES, 32); dap_enc_ringct20_tests_run(test_numbers); - return 0; + // return 0; dap_enc_tests_run(); dap_enc_picnic_tests_run(); dap_enc_sig_bliss_tests_run(); dap_enc_dilithium_tests_run(); + dap_enc_msrln_tests_run(); dap_enc_base64_tests_run(); dap_enc_base58_tests_run(); - dap_enc_msrln_tests_run(); dap_enc_defeo_tests_run(); dap_enc_tesla_tests_run(); dap_enc_multi_sign_tests_run(); diff --git a/modules/test/dap_test.c b/modules/test/dap_test.c index e4603b71d210ea96d5db7dc2690861a920a449a3..55517435e174987576d3ab75178ddd74fc730193 100644 --- a/modules/test/dap_test.c +++ b/modules/test/dap_test.c @@ -63,7 +63,7 @@ void benchmark_mgs_rate(const char *test_name, float rate) /** * @return current time in milliseconds */ -static int get_cur_time_msec(void) +int get_cur_time_msec(void) { struct timespec time; clock_gettime(CLOCK_MONOTONIC, &time); diff --git a/modules/test/dap_test.h b/modules/test/dap_test.h index 0c346732faf6f13ae2d744601ee77f1156693b3b..4a6445d82fcdf681290fae32d9a47070c92cf0e2 100644 --- a/modules/test/dap_test.h +++ b/modules/test/dap_test.h @@ -66,6 +66,7 @@ #define dap_str_equals(str1, str2) strcmp(str1, str2) == 0 #define dap_strn_equals(str1, str2, count) strncmp(str1, str2, count) == 0 +int get_cur_time_msec(void); /* How to use benchmark_xxx() functions: