Requesting to share setup_EC.h and setup_FF.h
Closed this issue · 1 comments
Dear Team,
As I have installation issues with magma, is it possible to share the setup_EC.h and setup_FF.h for the following primes
var_A := 36; var_B := 22; var_f := 31
var_A := 40; var_B := 25; var_f := 71
var_A := 44; var_B := 27; var_f := 37
to the kthasamyu39@gmail.com
Thanks in Advance.
Hi,
I've included the files you asked for below.
Concerning var_A := 36; var_B := 22; var_f := 31
#ifndef SP
#define SP
static uint8_t expn_a = 36;
static uint8_t expn_b = 22;
static uint64_t p[] = {0x2A0B06FFFFFFFFF, 0xE28};
static uint64_t base_mont[] = {0x68B83F2624F57D33, 0x486};
// R = 2^{64 * words} mod p
static uint64_t base_mont_2[] = {0x9AEB249E616945D3, 0xDDE};
// R^2 mod p
static uint64_t mu[] = {0x2A0B07000000001, 0x7AAFBA9EC59A3F28};
// You must update mu in Arith.S: mu * p = -1 mod 2^{64 * words}
static uint64_t zeroM[] = {0x0000000000000000, 0x0000000000000000};
static uint64_t uno[] = {0x0000000000000001, 0x0000000000000000};
// "Normal" One for exponentiation
static uint64_t unoM[] = {0x68B83F2624F57D33, 0x486};
// Montgomery's one
static uint64_t negM[] = {0x99E87149DB0A82CC, 0x9A1};
// Montgomery's minus one
static uint64_t constant_sqrt1[] = {0xA82C1BFFFFFFFF, 0x38A};
// Used for square root computation: (p - 3) / 4
static uint64_t constant_sqrt2[] = {0x1505837FFFFFFFF, 0x714};
// Used for square root computation: (p - 1) / 2
#define WORD_N 2
#define Log2_E 38
#endif
#ifndef SEC
#define SEC
static Curve E_0 = { { {0xE988A9883AC67153, 0x521}, {0x32D009F0F973CB73,
0xCDD} },
{ {0xD169D92C65D0E8BD, 0x39E}, {0xA484EA44148E4D10,
0x7CB} }
};
static Point P_a = { { {0x1D2684BE40AF7858, 0xB21}, {0xC480C7C3A0D82A38,
0xDA1} },
{ {0xB9BAFD6776BE594E, 0x842}, {0xC3BAC92E18C604DE,
0x7A3} },
{ {0x1, 0x0}, {0x0, 0x0} }
};
static Point Q_a = { { {0xCC92864852392A74, 0x106}, {0x2DDBEEF3EFE46FEB,
0xAB5} },
{ {0xF7D5931CCA1FBC3D, 0x9D}, {0xA9B5F872D9345F3D,
0x3AE} },
{ {0x1, 0x0}, {0x0, 0x0} }
};
static Point P_b = { { {0xC9680A697349A2F2, 0xC3C}, {0x8EDBBD8184C0FE7A,
0x712} },
{ {0xB83E33FE5ED0A55C, 0xDC4}, {0xBA6D3A1BC9CF08D3,
0xA70} },
{ {0x1, 0x0}, {0x0, 0x0} }
};
static Point Q_b = { { {0xA7B7FF8A7E0FEE0C, 0x961}, {0xC92C340CB4D93720,
0x322} },
{ {0x26396F65A98D03C3, 0xBFC}, {0xC275D2AEB8425270,
0x904} },
{ {0x1, 0x0}, {0x0, 0x0} }
};
//---------------------------------------------
static Curve E_A = { { {0x20D3072C1210E103, 0x226}, {0xC8CBE7B815799E1F,
0x3C9} },
{ {0xBED55C657A0B5235, 0x3CD}, {0xE4E78322792BC26E,
0x648} }
};
static Point phi_P_b = { { {0xAC942FCCC294392B, 0x90A}, {0x7D0513838C503A21,
0xA3} },
{ {0x43F8E24283D39D01, 0xAE3}, {0x511EB1DEB3D08703,
0xB1B} },
{ {0x1, 0x0}, {0x0, 0x0} }
};
static Point phi_Q_b = { { {0x8044408624636730, 0x342}, {0xD111DC5C9EDFBA73,
0xC76} },
{ {0xE3DC7E9070340D65, 0x550}, {0xD1246ED2DA0088C6,
0x305} },
{ {0x1, 0x0}, {0x0, 0x0} }
};
static Point S_a = { { {0x5A8271B4931E3BC5, 0xD39}, {0x506C75CE1BB52C82,
0x41A} },
{ {0xEE1A58C006B502D4, 0x5DE}, {0x9D976AE1199CDEB5,
0x54D} },
{ {0x1, 0x0}, {0x0, 0x0} }
};
static Point T_a = { { {0x51D862193CEA77F2, 0xADD}, {0xF8BE4B1DD474263C,
0x9FB} },
{ {0x78ECFB0F1D95A2FC, 0x270}, {0x1A552D1B8F3A0A35,
0x2BD} },
{ {0x1, 0x0}, {0x0, 0x0} }
};
//---------------------------------------------
static Curve E_B = { { {0xFE0D4B445D4BF0CE, 0xB7D}, {0xFF20752B6065AF73,
0x4ED} },
{ {0x4896F0F83A3F3F0C, 0xB8}, {0x2E3D4B570AB7C297,
0x923} }
};
static Point psi_P_a = { { {0xEAB0B79DE3271F31, 0xC5A}, {0x277DEA2AC0B4B744,
0x626} },
{ {0x8F54E92C0D984EA0, 0xFF}, {0x814A1CD1C5878501,
0xDE1} },
{ {0x1, 0x0}, {0x0, 0x0} }
};
static Point psi_Q_a = { { {0xB50FA19BD9DDC066, 0x61F}, {0x892E227FF4934CE7,
0x67B} },
{ {0x759EF1C1EBFA30EC, 0xA3F}, {0x1A4C339341BEBCB8,
0x2DF} },
{ {0x1, 0x0}, {0x0, 0x0} }
};
static Point S_b = { { {0xCB9B16C9C2112831, 0x377}, {0x8B26D9511D36386E,
0x478} },
{ {0xC86E0609E3044D1A, 0x13E}, {0xD69BE699CD6FCC16,
0x240} },
{ {0x1, 0x0}, {0x0, 0x0} }
};
static Point T_b = { { {0x2C96D837AB3FF39F, 0xA17}, {0xCFB5FDD264F2405D,
0x64C} },
{ {0x700E98C235210D0B, 0x1AE}, {0x3F2CC472AE6B9E1A,
0xC2E} },
{ {0x1, 0x0}, {0x0, 0x0} }
};
#endif
Concerning var_A := 40; var_B := 25; var_f := 71
#ifndef SP
#define SP
static uint8_t expn_a = 40;
static uint8_t expn_b = 25;
static uint64_t p[] = {0xE5D334FFFFFFFFFF, 0x36B681};
static uint64_t base_mont[] = {0xDB196FADD0D8D1E1, 0x534EE};
// R = 2^{64 * words} mod p
static uint64_t base_mont_2[] = {0x5AA0B43B3D5B01AA, 0xCCB7};
// R^2 mod p
static uint64_t mu[] = {0xE5D3350000000001, 0xA58AF512692FB681};
// You must update mu in Arith.S: mu * p = -1 mod 2^{64 * words}
static uint64_t zeroM[] = {0x0000000000000000, 0x0000000000000000};
static uint64_t uno[] = {0x0000000000000001, 0x0000000000000000};
// "Normal" One for exponentiation
static uint64_t unoM[] = {0xDB196FADD0D8D1E1, 0x534EE};
// Montgomery's one
static uint64_t negM[] = {0xAB9C5522F272E1E, 0x318193};
// Montgomery's minus one
static uint64_t constant_sqrt1[] = {0x7974CD3FFFFFFFFF, 0xDADA0};
// Used for square root computation: (p - 3) / 4
static uint64_t constant_sqrt2[] = {0xF2E99A7FFFFFFFFF, 0x1B5B40};
// Used for square root computation: (p - 1) / 2
#define WORD_N 2
#define Log2_E 43
#endif
#ifndef SEC
#define SEC
static Curve E_0 = { { {0xFF6AFC589E6B08CD, 0x298614}, {0x1CA1E33B42BB90E,
0x2859BF} },
{ {0x3A156E67B86671C, 0x1D1605}, {0x38FC94D3C6F5F13A,
0x340A41} }
};
static Point P_a = { { {0x761CC64E9BFC0D22, 0x19742E}, {0x4074C60E1EB7D9FA,
0xE9E60} },
{ {0x693222748FEF7754, 0x173AF8}, {0xC237B987A1EFCB35,
0x289063} },
{ {0x1, 0x0}, {0x0, 0x0} }
};
static Point Q_a = { { {0xF84F8FA688500E50, 0x352F82}, {0xED64E1C99F383A8F,
0x32296B} },
{ {0xE55C4AF7A2A7A17A, 0x3563F8}, {0xA3230854C55FACAB,
0xF9513} },
{ {0x1, 0x0}, {0x0, 0x0} }
};
static Point P_b = { { {0x41CF6A09FFC437E8, 0x26B58B}, {0x211EA03E54E07D95,
0xA70FB} },
{ {0x75E6B9DB3C87D56E, 0x683DD}, {0xCFD638D1A9BDB3E,
0xB71ED} },
{ {0x1, 0x0}, {0x0, 0x0} }
};
static Point Q_b = { { {0x8A0825F581A9155B, 0x1F526C}, {0xDA6328C458CF4739,
0x15A74B} },
{ {0x3F5B2E33D7C9A4C1, 0x202E60}, {0x4E538C1B0A24BB69,
0x1BFDFC} },
{ {0x1, 0x0}, {0x0, 0x0} }
};
//---------------------------------------------
static Curve E_A = { { {0x51D456A9F0DD0276, 0x298BD7}, {0x102CAD371B2EB37,
0xE2C72} },
{ {0xF64524CAB2FA2DFA, 0x2A24F4}, {0x416E957818D8BD7E,
0xCD60A} }
};
static Point phi_P_b = { { {0x4D4B3DFFA38983FD, 0x264BA1}, {0xE45AED86264F73A,
0x359167} },
{ {0x84005AE1A35832EC, 0x359B72}, {0x57AB3A1B5D656305,
0x34B4C3} },
{ {0x1, 0x0}, {0x0, 0x0} }
};
static Point phi_Q_b = { { {0xF6452590F4EF6337, 0x14112}, {0x60BE892B09F1CF57,
0x354F8C} },
{ {0xE1D5A396AC1D3364, 0x18A3F6}, {0xAF6073B5EE92D3B7,
0x22F564} },
{ {0x1, 0x0}, {0x0, 0x0} }
};
static Point S_a = { { {0x467533FBEB4BB855, 0x34F5C5}, {0x12F7DC8699245CC9,
0x1A0F64} },
{ {0xB780913D96F98D12, 0x220240}, {0x286D631A23817275,
0x163F91} },
{ {0x1, 0x0}, {0x0, 0x0} }
};
static Point T_a = { { {0x9215E15F4F3C0514, 0x69066}, {0x6A9287E02ABDDE0,
0x7BE} },
{ {0x2212A0DDDCD1C349, 0x241FD8}, {0x4CC5FD7937FA5BE0,
0xE4F59} },
{ {0x1, 0x0}, {0x0, 0x0} }
};
//---------------------------------------------
static Curve E_B = { { {0x4884C08F25944EBE, 0x43186}, {0x5A8F15C7994E4A0C,
0x2AE374} },
{ {0x65CB91DCA5F37928, 0x58128}, {0xAB80FD6642B1463A,
0x112B1} }
};
static Point psi_P_a = { { {0xA8A8E4C3398383AB, 0x26947}, {0x7DB39DDF5134DDAD,
0x13F37B} },
{ {0x39F63938214DF444, 0x1F4E79}, {0x19AC6DC82EAC5688,
0x30851E} },
{ {0x1, 0x0}, {0x0, 0x0} }
};
static Point psi_Q_a = { { {0x615DFB187BAD0520, 0x3023BC}, {0x2BE8F7A3BB57745E,
0x20581C} },
{ {0xAB44A1E3F5085796, 0xDAB06}, {0xDA21EE88A8A9DB90,
0x215B4E} },
{ {0x1, 0x0}, {0x0, 0x0} }
};
static Point S_b = { { {0x960C82613F613B82, 0x5A564}, {0xDB3197A1FE7FC426,
0x2F55FB} },
{ {0x254D53B111782066, 0x19B428}, {0xA9DB8FE8D032B0A5,
0x1AF85C} },
{ {0x1, 0x0}, {0x0, 0x0} }
};
static Point T_b = { { {0x915ED088E64D48AD, 0x348787}, {0xD8274F6400731E50,
0x15F6CD} },
{ {0x67123C36A3A54BE0, 0x19F12E}, {0x3E220D13E6033739,
0x2826DE} },
{ {0x1, 0x0}, {0x0, 0x0} }
};
#endif
Concerning var_A := 44; var_B := 27; var_f := 37
#ifndef SP
#define SP
static uint8_t expn_a = 44;
static uint8_t expn_b = 27;
static uint64_t p[] = {0x57606FFFFFFFFFFF, 0x1009C7E1};
static uint64_t base_mont[] = {0x329900FF63E15A1, 0xB436A22};
// R = 2^{64 * words} mod p
static uint64_t base_mont_2[] = {0xAA642DA60E97D90D, 0xAE20DAF};
// R^2 mod p
static uint64_t mu[] = {0x5760700000000001, 0x837790744109C7E1};
// You must update mu in Arith.S: mu * p = -1 mod 2^{64 * words}
static uint64_t zeroM[] = {0x0000000000000000, 0x0000000000000000};
static uint64_t uno[] = {0x0000000000000001, 0x0000000000000000};
// "Normal" One for exponentiation
static uint64_t unoM[] = {0x329900FF63E15A1, 0xB436A22};
// Montgomery's one
static uint64_t negM[] = {0x5436DFF009C1EA5E, 0x4C65DBF};
// Montgomery's minus one
static uint64_t constant_sqrt1[] = {0x55D81BFFFFFFFFFF, 0x40271F8};
// Used for square root computation: (p - 3) / 4
static uint64_t constant_sqrt2[] = {0xABB037FFFFFFFFFF, 0x804E3F0};
// Used for square root computation: (p - 1) / 2
#define WORD_N 2
#define Log2_E 47
#endif
#ifndef SEC
#define SEC
static Curve E_0 = { { {0xD6D8FC125B041B95, 0x60B9CF9}, {0x1F5789C98BBA6B21,
0x8591846} },
{ {0x971001E1364427E1, 0x7FF2E1B}, {0xAB29DCA2D97C94BE,
0xCC9E21F} }
};
static Point P_a = { { {0x2B2104CAAA28FA75, 0x52C5E88}, {0x88BC25B115A60B9,
0xEE0EAB3} },
{ {0xAE840E4DF4A8A1D7, 0xAF0B68A}, {0x3D240C40046A9DE9,
0x8B93984} },
{ {0x1, 0x0}, {0x0, 0x0} }
};
static Point Q_a = { { {0xB7B6B2C2F9BB02FE, 0xD10F4E2}, {0x47A76E26D16C0376,
0xF54CB43} },
{ {0x54ACBE4555E35FFD, 0x97BE5D8}, {0x4A5E5DDA914302DF,
0x2C5DA7A} },
{ {0x1, 0x0}, {0x0, 0x0} }
};
static Point P_b = { { {0xBEA4B7E3D7155729, 0x94C12DC}, {0x1CD404F7591D0A25,
0x212180C} },
{ {0xA8E60420ADD56F09, 0x4DC9EAF}, {0x273570417AED057A,
0xBE73DE3} },
{ {0x1, 0x0}, {0x0, 0x0} }
};
static Point Q_b = { { {0x5B0EF641284B6E32, 0x7E64145}, {0x32D49F7302B1D635,
0x54DF62F} },
{ {0x83C287F9080C80E, 0x742D41E}, {0xB2556D1C84F9F755,
0x641EEFA} },
{ {0x1, 0x0}, {0x0, 0x0} }
};
//---------------------------------------------
static Curve E_A = { { {0xE295DAD64F87BE4F, 0x972E856}, {0xC425BDC038A26FA0,
0xE722000} },
{ {0x608AAD158F458528, 0x51CEBA0}, {0x72E531C30A929FF2,
0x4BDC4F6} }
};
static Point phi_P_b = { { {0xC44705A528136B97, 0x53528AF}, {0x2033EA17DF5EC0AF,
0x6036FB6} },
{ {0xE9142FCE4FD867C3, 0x160B78}, {0x2386A0C6E556E683,
0x1B64D26} },
{ {0x1, 0x0}, {0x0, 0x0} }
};
static Point phi_Q_b = { { {0x285637122E25D56F, 0x2B3262B}, {0x4C47A8ABED060FD1,
0x81D923E} },
{ {0x2468E321D6404043, 0xB54A981}, {0x9BE26700ED2891E3,
0xD252B7} },
{ {0x1, 0x0}, {0x0, 0x0} }
};
static Point S_a = { { {0x512D725D58EC8017, 0x1A0D213}, {0x62A65BA1ECA498E3,
0x25AD8A8} },
{ {0x80A19A2ABA11067E, 0xE6AFAA8}, {0x4B3DD2337DCA1EA2,
0x4A65DAB} },
{ {0x1, 0x0}, {0x0, 0x0} }
};
static Point T_a = { { {0x402D503AF5FE1FE5, 0xB073D6C}, {0x471BBCEE5623CE7B,
0x8CD821E} },
{ {0xF94A125D3C3C43E1, 0xF2ACCCE}, {0x3ED4793E99A077FF,
0x79F5388} },
{ {0x1, 0x0}, {0x0, 0x0} }
};
//---------------------------------------------
static Curve E_B = { { {0x3EB63E338D9A3F8E, 0xF1BDCD2}, {0xC5666B01F0A2163F,
0xC444AB5} },
{ {0x6236E6D29123D495, 0x52EF9B2}, {0x6150AF6DD87B2EA7,
0x8728B27} }
};
static Point psi_P_a = { { {0x1D7F62BA007D7023, 0xC5960C5}, {0x260F316F4465F36,
0xE0C4D23} },
{ {0x8854BFA92E188E26, 0xE8851B5}, {0x7A7846DEA8A40604,
0xC741BA} },
{ {0x1, 0x0}, {0x0, 0x0} }
};
static Point psi_Q_a = { { {0x3B7C93496D8DE5EA, 0x82594DB}, {0x7179DFCEEF87192D,
0x243AF2C} },
{ {0x50F01CAFBD6C043F, 0x17C39A4}, {0x8FCC99CCC9180B02,
0x3AE2E7C} },
{ {0x1, 0x0}, {0x0, 0x0} }
};
static Point S_b = { { {0x10CDDDE159FEB35D, 0x41DB5FA}, {0x929CB236FD7C7B4B,
0x16B5DF8} },
{ {0x34C8B74A7C39DB6F, 0xDBB3C05}, {0x4D96E7D7D2AC6287,
0xD91BB91} },
{ {0x1, 0x0}, {0x0, 0x0} }
};
static Point T_b = { { {0xE95231815B438293, 0x31CFD61}, {0xA77F92159CC1EBD9,
0x34A7F05} },
{ {0x77FE76D56DCE74F8, 0xBA39BCD}, {0xDC71C63840C3BC07,
0x55A6C2A} },
{ {0x1, 0x0}, {0x0, 0x0} }
};
#endif
Additionally, Maybe you could also use (require) the improved implementation of this repository (check the SIPFD repository). You can find efficient implementations over Montgomery and Short Weierstrass curves in that repository.
PS. Let me know if the shared headers work for you!
Best regards