|
@@ -153,28 +153,13 @@ CurveBipoint BGNPrivateKey::pi_1(const CurveBipoint& input) const
|
|
|
CurveBipoint retval;
|
|
|
curvepoint_fp_t temp0, temp1;
|
|
|
|
|
|
+ (-b1 * c1).mult(temp0, input[0]);
|
|
|
+ (a1 * c1).mult(temp1, input[1]);
|
|
|
+ curvepoint_fp_add_vartime(retval[0], temp0, temp1);
|
|
|
|
|
|
- b1.mult(temp0, input[0]);
|
|
|
- c1.mult(temp0, temp0);
|
|
|
- curvepoint_fp_neg(temp0, temp0);
|
|
|
-
|
|
|
- a1.mult(temp1, input[1]);
|
|
|
- c1.mult(temp1, temp1);
|
|
|
-
|
|
|
- curvepoint_fp_add_vartime(temp0, temp0, temp1);
|
|
|
- curvepoint_fp_set(retval[0], temp0);
|
|
|
-
|
|
|
-
|
|
|
- b1.mult(temp0, input[0]);
|
|
|
- d1.mult(temp0, temp0);
|
|
|
- curvepoint_fp_neg(temp0, temp0);
|
|
|
-
|
|
|
- a1.mult(temp1, input[1]);
|
|
|
- d1.mult(temp1, temp1);
|
|
|
-
|
|
|
- curvepoint_fp_add_vartime(temp0, temp0, temp1);
|
|
|
- curvepoint_fp_set(retval[1], temp0);
|
|
|
-
|
|
|
+ (-b1 * d1).mult(temp0, input[0]);
|
|
|
+ (a1 * d1).mult(temp1, input[1]);
|
|
|
+ curvepoint_fp_add_vartime(retval[1], temp0, temp1);
|
|
|
|
|
|
return retval;
|
|
|
}
|
|
@@ -184,28 +169,13 @@ TwistBipoint BGNPrivateKey::pi_2(const TwistBipoint& input) const
|
|
|
TwistBipoint retval;
|
|
|
twistpoint_fp2_t temp0, temp1;
|
|
|
|
|
|
+ (-b2 * c2).mult(temp0, input[0]);
|
|
|
+ (a2 * c2).mult(temp1, input[1]);
|
|
|
+ twistpoint_fp2_add_vartime(retval[0], temp0, temp1);
|
|
|
|
|
|
- b2.mult(temp0, input[0]);
|
|
|
- c2.mult(temp0, temp0);
|
|
|
- twistpoint_fp2_neg(temp0, temp0);
|
|
|
-
|
|
|
- a2.mult(temp1, input[1]);
|
|
|
- c2.mult(temp1, temp1);
|
|
|
-
|
|
|
- twistpoint_fp2_add_vartime(temp0, temp0, temp1);
|
|
|
- twistpoint_fp2_set(retval[0], temp0);
|
|
|
-
|
|
|
-
|
|
|
- b2.mult(temp0, input[0]);
|
|
|
- d2.mult(temp0, temp0);
|
|
|
- twistpoint_fp2_neg(temp0, temp0);
|
|
|
-
|
|
|
- a2.mult(temp1, input[1]);
|
|
|
- d2.mult(temp1, temp1);
|
|
|
-
|
|
|
- twistpoint_fp2_add_vartime(temp0, temp0, temp1);
|
|
|
- twistpoint_fp2_set(retval[1], temp0);
|
|
|
-
|
|
|
+ (-b2 * d2).mult(temp0, input[0]);
|
|
|
+ (a2 * d2).mult(temp1, input[1]);
|
|
|
+ twistpoint_fp2_add_vartime(retval[1], temp0, temp1);
|
|
|
|
|
|
return retval;
|
|
|
}
|
|
@@ -213,120 +183,39 @@ TwistBipoint BGNPrivateKey::pi_2(const TwistBipoint& input) const
|
|
|
Quadripoint BGNPrivateKey::pi_T(const Quadripoint& input) const
|
|
|
{
|
|
|
Quadripoint retval;
|
|
|
- fp12e_t temp0, temp1, temp2, temp3;
|
|
|
-
|
|
|
-
|
|
|
- b1.mult(temp0, input[0]);
|
|
|
- c1.mult(temp0, temp0);
|
|
|
- b2.mult(temp0, temp0);
|
|
|
- c2.mult(temp0, temp0);
|
|
|
-
|
|
|
- b1.mult(temp1, input[1]);
|
|
|
- c1.mult(temp1, temp1);
|
|
|
- a2.mult(temp1, temp1);
|
|
|
- c2.mult(temp1, temp1);
|
|
|
- fp12e_invert(temp1, temp1);
|
|
|
-
|
|
|
- a1.mult(temp2, input[2]);
|
|
|
- c1.mult(temp2, temp2);
|
|
|
- b2.mult(temp2, temp2);
|
|
|
- c2.mult(temp2, temp2);
|
|
|
- fp12e_invert(temp2, temp2);
|
|
|
-
|
|
|
- a1.mult(temp3, input[3]);
|
|
|
- c1.mult(temp3, temp3);
|
|
|
- a2.mult(temp3, temp3);
|
|
|
- c2.mult(temp3, temp3);
|
|
|
+ fp12e_t temp0, temp1, temp2;
|
|
|
|
|
|
+ (b1 * c1 * b2 * c2).mult(temp0, input[0]);
|
|
|
+ (-b1 * c1 * a2 * c2).mult(temp1, input[1]);
|
|
|
fp12e_mul(temp0, temp0, temp1);
|
|
|
- fp12e_mul(temp1, temp2, temp3);
|
|
|
- fp12e_mul(temp0, temp0, temp1);
|
|
|
- fp12e_set(retval[0], temp0);
|
|
|
-
|
|
|
-
|
|
|
- b1.mult(temp0, input[0]);
|
|
|
- c1.mult(temp0, temp0);
|
|
|
- b2.mult(temp0, temp0);
|
|
|
- d2.mult(temp0, temp0);
|
|
|
-
|
|
|
- b1.mult(temp1, input[1]);
|
|
|
- c1.mult(temp1, temp1);
|
|
|
- a2.mult(temp1, temp1);
|
|
|
- d2.mult(temp1, temp1);
|
|
|
- fp12e_invert(temp1, temp1);
|
|
|
-
|
|
|
- a1.mult(temp2, input[2]);
|
|
|
- c1.mult(temp2, temp2);
|
|
|
- b2.mult(temp2, temp2);
|
|
|
- d2.mult(temp2, temp2);
|
|
|
- fp12e_invert(temp2, temp2);
|
|
|
-
|
|
|
- a1.mult(temp3, input[3]);
|
|
|
- c1.mult(temp3, temp3);
|
|
|
- a2.mult(temp3, temp3);
|
|
|
- d2.mult(temp3, temp3);
|
|
|
+ (-a1 * c1 * b2 * c2).mult(temp1, input[2]);
|
|
|
+ (a1 * c1 * a2 * c2).mult(temp2, input[3]);
|
|
|
+ fp12e_mul(temp1, temp1, temp2);
|
|
|
+ fp12e_mul(retval[0], temp0, temp1);
|
|
|
|
|
|
+ (b1 * c1 * b2 * d2).mult(temp0, input[0]);
|
|
|
+ (-b1 * c1 * a2 * d2).mult(temp1, input[1]);
|
|
|
fp12e_mul(temp0, temp0, temp1);
|
|
|
- fp12e_mul(temp1, temp2, temp3);
|
|
|
- fp12e_mul(temp0, temp0, temp1);
|
|
|
- fp12e_set(retval[1], temp0);
|
|
|
-
|
|
|
-
|
|
|
- b1.mult(temp0, input[0]);
|
|
|
- d1.mult(temp0, temp0);
|
|
|
- b2.mult(temp0, temp0);
|
|
|
- c2.mult(temp0, temp0);
|
|
|
-
|
|
|
- b1.mult(temp1, input[1]);
|
|
|
- d1.mult(temp1, temp1);
|
|
|
- a2.mult(temp1, temp1);
|
|
|
- c2.mult(temp1, temp1);
|
|
|
- fp12e_invert(temp1, temp1);
|
|
|
-
|
|
|
- a1.mult(temp2, input[2]);
|
|
|
- d1.mult(temp2, temp2);
|
|
|
- b2.mult(temp2, temp2);
|
|
|
- c2.mult(temp2, temp2);
|
|
|
- fp12e_invert(temp2, temp2);
|
|
|
+ (-a1 * c1 * b2 * d2).mult(temp1, input[2]);
|
|
|
+ (a1 * c1 * a2 * d2).mult(temp2, input[3]);
|
|
|
+ fp12e_mul(temp1, temp1, temp2);
|
|
|
+ fp12e_mul(retval[1], temp0, temp1);
|
|
|
|
|
|
- a1.mult(temp3, input[3]);
|
|
|
- d1.mult(temp3, temp3);
|
|
|
- a2.mult(temp3, temp3);
|
|
|
- c2.mult(temp3, temp3);
|
|
|
-
|
|
|
- fp12e_mul(temp0, temp0, temp1);
|
|
|
- fp12e_mul(temp1, temp2, temp3);
|
|
|
+ (b1 * d1 * b2 * c2).mult(temp0, input[0]);
|
|
|
+ (-b1 * d1 * a2 * c2).mult(temp1, input[1]);
|
|
|
fp12e_mul(temp0, temp0, temp1);
|
|
|
- fp12e_set(retval[2], temp0);
|
|
|
-
|
|
|
-
|
|
|
- b1.mult(temp0, input[0]);
|
|
|
- d1.mult(temp0, temp0);
|
|
|
- b2.mult(temp0, temp0);
|
|
|
- d2.mult(temp0, temp0);
|
|
|
+ (-a1 * d1 * b2 * c2).mult(temp1, input[2]);
|
|
|
+ (a1 * d1 * a2 * c2).mult(temp2, input[3]);
|
|
|
+ fp12e_mul(temp1, temp1, temp2);
|
|
|
+ fp12e_mul(retval[2], temp0, temp1);
|
|
|
|
|
|
- b1.mult(temp1, input[1]);
|
|
|
- d1.mult(temp1, temp1);
|
|
|
- a2.mult(temp1, temp1);
|
|
|
- d2.mult(temp1, temp1);
|
|
|
- fp12e_invert(temp1, temp1);
|
|
|
-
|
|
|
- a1.mult(temp2, input[2]);
|
|
|
- d1.mult(temp2, temp2);
|
|
|
- b2.mult(temp2, temp2);
|
|
|
- d2.mult(temp2, temp2);
|
|
|
- fp12e_invert(temp2, temp2);
|
|
|
-
|
|
|
- a1.mult(temp3, input[3]);
|
|
|
- d1.mult(temp3, temp3);
|
|
|
- a2.mult(temp3, temp3);
|
|
|
- d2.mult(temp3, temp3);
|
|
|
-
|
|
|
+ (b1 * d1 * b2 * d2).mult(temp0, input[0]);
|
|
|
+ (-b1 * d1 * a2 * d2).mult(temp1, input[1]);
|
|
|
fp12e_mul(temp0, temp0, temp1);
|
|
|
- fp12e_mul(temp1, temp2, temp3);
|
|
|
- fp12e_mul(temp0, temp0, temp1);
|
|
|
- fp12e_set(retval[3], temp0);
|
|
|
-
|
|
|
+ (-a1 * d1 * b2 * d2).mult(temp1, input[2]);
|
|
|
+ (a1 * d1 * a2 * d2).mult(temp2, input[3]);
|
|
|
+ fp12e_mul(temp1, temp1, temp2);
|
|
|
+ fp12e_mul(retval[3], temp0, temp1);
|
|
|
|
|
|
return retval;
|
|
|
}
|