Clearmatics Libff
0.1
C++ library for Finite Fields and Elliptic Curves
|
Go to the documentation of this file.
49 sizeof(mp_limb_t) == 8 ||
50 sizeof(mp_limb_t) == 4);
53 mnt6_modulus_r = bigint_r(
"475922286169261325753349249653048451545124879242"
54 "694725395555128576210262817955800483758081");
56 if (
sizeof(mp_limb_t) == 8) {
58 bigint_r(
"273000478523237720910981655601160860640083126627235719712"
59 "980612296263966512828033847775776");
61 bigint_r(
"427298980065529822574935274648041073124704261331681436071"
62 "990730954930769758106792920349077");
65 if (
sizeof(mp_limb_t) == 4) {
67 bigint_r(
"273000478523237720910981655601160860640083126627235719712"
68 "980612296263966512828033847775776");
70 bigint_r(
"427298980065529822574935274648041073124704261331681436071"
71 "990730954930769758106792920349077");
75 mnt6_Fr::euler = bigint_r(
"237961143084630662876674624826524225772562439621"
76 "347362697777564288105131408977900241879040");
78 mnt6_Fr::t = bigint_r(
"3630998887399759870554727551674258816109656366292531"
79 "779446068791017229177993437198515");
81 bigint_r(
"1815499443699879935277363775837129408054828183146265889723034"
82 "395508614588996718599257");
85 mnt6_Fr(
"26470625057180008075806930236965430553012567552126397603405487"
86 "8017580902343339784464690243");
89 "21263976034054878017580902343339784464690243");
93 mnt6_modulus_q = bigint_q(
"475922286169261325753349249653048451545124878552"
94 "823515553267735739164647307408490559963137");
96 if (
sizeof(mp_limb_t) == 8) {
98 bigint_q(
"163983144722506446826715124368972380525894397127205577781"
99 "234305496325861831001705438796139");
101 bigint_q(
"207236281459091063710247635236340312578688659363066707916"
102 "716212805695955118593239854980171");
105 if (
sizeof(mp_limb_t) == 4) {
107 bigint_q(
"163983144722506446826715124368972380525894397127205577781"
108 "234305496325861831001705438796139");
110 bigint_q(
"207236281459091063710247635236340312578688659363066707916"
111 "716212805695955118593239854980171");
115 mnt6_Fq::euler = bigint_q(
"237961143084630662876674624826524225772562439276"
116 "411757776633867869582323653704245279981568");
118 mnt6_Fq::t = bigint_q(
"2770232305450256248897344628657729199302411164115319"
119 "9339359284829066871159442729");
121 bigint_q(
"1385116152725128124448672314328864599651205582057659966967964"
122 "2414533435579721364");
125 mnt6_Fq(
"12063881782691317345876882948569009984537700803089161801010977"
126 "2937363554409782252579816313");
129 "08985450684842547562990900634752279902740880");
134 "5389868017855495171539724515479603613946389158900147862919313636912491"
135 "5637741423690184935056189295242736833704290747216410090671804540908400"
136 "2107789344621296256462630953983234857955575512841902241668515716158341"
137 "94321908328559167529729507439069424158411618728014749106176");
140 "6274632199033507112809136178669989590936327770934612330653836993631547"
141 "7403976749268110067416202853483540045218880692515999649967770721889566"
142 "8755040206738394052328810740708414066996862544726932237004530285669423"
143 "1080113482726640944570478452261237446033817102203");
145 "3137316099516753556404568089334994795468163885467306165326918496815773"
146 "8701988374634055033708101426741770022609440346257999824983885360944783"
147 "4377520103369197026164405370354207033498431272363466118502265142834711"
148 "5540056741363320472285239226130618723016908551101");
152 mnt6_Fq(
"15436144967878350507698415627597793765433110336117446963234623"
153 "0549735979552469642799720052"),
158 mnt6_Fq(
"47173889896752102913304085131844916599730410872955897377007731"
159 "9830005517129946578866686956");
161 mnt6_Fq(
"41833872017402966203083983345992855478207698232645417831904159"
162 "09159130177461911693276180");
165 mnt6_Fq(
"41833872017402966203083983345992855478207698232645417831904159"
166 "09159130177461911693276180");
168 mnt6_Fq(
"47173889896752102913304085131844916599730410872955897377007731"
169 "9830005517129946578866686956");
175 mnt6_Fq(
"47173889896752102913304085131844916599730410872955897377007731"
176 "9830005517129946578866686957");
178 mnt6_Fq(
"47173889896752102913304085131844916599730410872955897377007731"
179 "9830005517129946578866686956");
181 mnt6_Fq(
"47592228616926132575334924965304845154512487855282351555326773"
182 "5739164647307408490559963136");
184 mnt6_Fq(
"41833872017402966203083983345992855478207698232645417831904159"
185 "09159130177461911693276180");
187 mnt6_Fq(
"41833872017402966203083983345992855478207698232645417831904159"
188 "09159130177461911693276181");
194 "1367587890185989362936000262606668469523074");
212 mnt6_Fq(
"41833872017402966203083983345992855478207698232645417831904159"
213 "09159130177461911693276180");
215 mnt6_Fq(
"47592228616926132575334924965304845154512487855282351555326773"
216 "5739164647307408490559963136");
223 mnt6_Fq(
"33668575288308222810928984635393710418569820937140417834296883"
224 "8739115829740084426881123453"),
225 mnt6_Fq(
"40259629013978098970933270771656892077762203207376274986234237"
226 "4583908837063963736098549800"),
291 mnt6_Fq(
"4214564357728118462568265615939083222885091154891199075603"
292 "82401870203318738334702321297427"),
293 mnt6_Fq(
"1030729274385485024635270099613449150211675847064399454049"
294 "59058962657261178393635706405114"),
295 mnt6_Fq(
"1430291721437318526270029263247351838097683633011490092048"
296 "49580478324784395590388826052558")),
298 mnt6_Fq(
"4646735966686894631300992275756395125412181334453888693838"
299 "93594087634649237515554342751377"),
300 mnt6_Fq(
"1006429075019773751845750759671180718078211179601527433356"
301 "03284583254620685343989304941678"),
302 mnt6_Fq(
"1230198555029698960269405457158411813002751801572880446630"
303 "51565390506010149881373807142903")),
308 "2265020224725762701964986904983084617918287627326025861622075353519602"
309 "7008271269497733337236154908221451925226173504813188901850140437785678"
310 "6623430385820659037970876666767495659520");
367 bigint_q(
"689871209842287392837045615510547309923794944");
370 "2441632013809050969789059541431343876835397748986254393590401071543906"
371 "6975957855922532159264213056712140358746422742237328406558352706591021"
372 "6422306180605028554512640453974447931868761990152567816487468886255270"
373 "7546606307501130780086217376423631134210521168112142693161684363521585"
374 "2236649271569251468773714424208521977615548771268520882870120900360322"
375 "0442188067120277293518453076904749855025875277538472001305920580983636"
376 "41559341826790559426614919168");
378 bigint_q(
"689871209842287392837045615510547309923794944");
static Fp3_model< n, modulus > nqr_to_t
nqr^t
static my_Fp Frobenius_coeffs_c1[3]
non_residue^((modulus^i-1)/3) for i=0,1,2
bigint< mnt6_q_limbs > mnt6_ate_loop_count
mnt6_Fq mnt6_twist_mul_by_a_c0
mnt6_Fq mnt6_twist_mul_by_b_c2
static bigint< 3 *n > euler
(modulus^3-1)/2
static size_t s
modulus^3 = 2^s * t + 1
static Fp3_model< n, modulus > one()
bigint< mnt6_q_limbs > mnt6_final_exponent_last_chunk_w1
Fp_model< mnt6_q_limbs, mnt6_modulus_q > mnt6_Fq
mnt6_Fq mnt6_twist_mul_by_b_c1
mnt6_Fq mnt6_twist_mul_by_q_Y
static Fp_model< n, modulus > nqr
a quadratic nonresidue
static const Fp_model< n, modulus > & zero()
static bigint< 3 *n > t_minus_1_over_2
(t-1)/2
mnt6_Fq mnt6_twist_mul_by_a_c1
static bigint< n > t
with t odd
mnt6_Fq mnt6_twist_mul_by_q_X
static size_t s
modulus = 2^s * t + 1
mnt6_Fq3 mnt6_twist_coeff_b
static bigint< n > euler
(modulus-1)/2
static bool modulus_is_valid()
static const Fp_model< n, modulus > & one()
static std::vector< size_t > wnaf_window_table
static my_Fp Frobenius_coeffs_c2[3]
non_residue^((2*modulus^i-2)/3) for i=0,1,2
mnt6_Fq3 mnt6_twist_coeff_a
static bigint< h_limbs > h
static std::vector< size_t > fixed_base_exp_window_table
static bigint< n > t_minus_1_over_2
(t-1)/2
static Fp3_model< n, modulus > nqr
a quadratic nonresidue in Fp3
static void static_init()
Fp3_model< mnt6_q_limbs, mnt6_modulus_q > mnt6_Fq3
static Fp_model< n, modulus > root_of_unity
generator^((modulus-1)/2^s)
static std::vector< size_t > fixed_base_exp_window_table
mnt6_Fq mnt6_twist_mul_by_a_c2
Fp_model< mnt6_r_limbs, mnt6_modulus_r > mnt6_Fr
static my_Fp Frobenius_coeffs_c1[6]
non_residue^((modulus^i-1)/6) for i=0,1,2,3,4,5
static std::vector< size_t > wnaf_window_table
static bigint< h_limbs > h
static Fp_model< n, modulus > nqr_to_t
nqr^t
static Fp_model< n, modulus > multiplicative_generator
generator of Fp^*
static mp_limb_t inv
-modulus^(-1) mod W, where W = 2^(word size)
bigint< mnt6_r_limbs > mnt6_modulus_r
bigint< mnt6_q_limbs > mnt6_modulus_q
bool mnt6_ate_is_loop_count_neg
static bigint< n > Rsquared
R^2, where R = W^k, where k = ??
bigint< 6 *mnt6_q_limbs > mnt6_final_exponent
bool mnt6_final_exponent_last_chunk_is_w0_neg
bigint< mnt6_q_limbs > mnt6_final_exponent_last_chunk_abs_of_w0
static bigint< n > Rcubed
R^3.
static Fp3_model< n, modulus > zero()
mnt6_Fq mnt6_twist_mul_by_b_c0
static bigint< 3 *n > t
with t odd