Browse Source

Use negative non-residue optimization

fq2_neg_nonresidue
ValarDragon 3 years ago
parent
commit
bb033e9949
1 changed files with 21 additions and 0 deletions
  1. +21
    -0
      bls12_377/src/fields/fq2.rs

+ 21
- 0
bls12_377/src/fields/fq2.rs

@ -25,6 +25,7 @@ impl Fp2Parameters for Fq2Parameters {
field_new!(Fq, "-1"), field_new!(Fq, "-1"),
]; ];
// Mul by -5
#[inline(always)] #[inline(always)]
fn mul_fp_by_nonresidue(fe: &Self::Fp) -> Self::Fp { fn mul_fp_by_nonresidue(fe: &Self::Fp) -> Self::Fp {
let original = fe; let original = fe;
@ -32,6 +33,26 @@ impl Fp2Parameters for Fq2Parameters {
fe.double_in_place(); fe.double_in_place();
fe - original fe - original
} }
// x + -5 * y, computed as x - 5*y
#[inline(always)]
fn add_and_mul_fp_by_nonresidue(x: &Self::Fp, y: &Self::Fp) -> Self::Fp {
// c becomes 5 * y
let mut c = y.double();
c.double_in_place();
c += y;
*x - c
}
// x - (-5 * y), computed as x + 5*y
#[inline(always)]
fn sub_and_mul_fp_by_nonresidue(x: &Self::Fp, y: &Self::Fp) -> Self::Fp {
// c becomes 5 * y
let mut c = y.double();
c.double_in_place();
c += y;
*x + c
}
} }
pub const FQ2_ZERO: Fq2 = field_new!(Fq2, FQ_ZERO, FQ_ZERO); pub const FQ2_ZERO: Fq2 = field_new!(Fq2, FQ_ZERO, FQ_ZERO);

Loading…
Cancel
Save