JJChiDguez/CSSI

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