Shift sq2/pow22523. Everything should be properly in FieldElement now.

This commit is contained in:
2019-05-26 14:27:52 -07:00
parent fc09ff48a2
commit 2b63dfa376
2 changed files with 188 additions and 188 deletions

View File

@@ -889,18 +889,19 @@ fn is_tests() {
});
}
pub fn fe_sq2(h: &mut FieldElement, f: &FieldElement)
{
let f0 = f.value[0];
let f1 = f.value[1];
let f2 = f.value[2];
let f3 = f.value[3];
let f4 = f.value[4];
let f5 = f.value[5];
let f6 = f.value[6];
let f7 = f.value[7];
let f8 = f.value[8];
let f9 = f.value[9];
impl FieldElement {
pub fn sq2(&self) -> FieldElement
{
let f0 = self.value[0];
let f1 = self.value[1];
let f2 = self.value[2];
let f3 = self.value[3];
let f4 = self.value[4];
let f5 = self.value[5];
let f6 = self.value[6];
let f7 = self.value[7];
let f8 = self.value[8];
let f9 = self.value[9];
let f0_2 = 2 * f0;
let f1_2 = 2 * f1;
let f2_2 = 2 * f2;
@@ -1020,16 +1021,14 @@ pub fn fe_sq2(h: &mut FieldElement, f: &FieldElement)
carry0 = h0 + (1 << 25); h1 += carry0 >> 26; h0 -= carry0 & KTOP_38BITS;
h.value[0] = h0 as i32;
h.value[1] = h1 as i32;
h.value[2] = h2 as i32;
h.value[3] = h3 as i32;
h.value[4] = h4 as i32;
h.value[5] = h5 as i32;
h.value[6] = h6 as i32;
h.value[7] = h7 as i32;
h.value[8] = h8 as i32;
h.value[9] = h9 as i32;
FieldElement {
value: [ h0 as i32, h1 as i32,
h2 as i32, h3 as i32,
h4 as i32, h5 as i32,
h6 as i32, h7 as i32,
h8 as i32, h9 as i32, ]
}
}
}
#[cfg(test)]
@@ -1043,20 +1042,20 @@ fn square2() {
assert!(!nega && !negc);
let a = test_from_bytes(&abytes);
let c = test_from_bytes(&cbytes);
let mut r = FieldElement::new();
fe_sq2(&mut r, &a);
let r = a.sq2();
assert_eq!(r, c);
});
}
pub fn fe_pow22523(z: &FieldElement) -> FieldElement
{
let mut t0 = z.square();
impl FieldElement {
pub fn pow22523(&self) -> FieldElement
{
let mut t0 = self.square();
let mut t1 = t0.square();
for _ in 1..2 {
t1.square_mut();
}
t1 *= &z;
t1 *= &self;
t0 *= &t1;
t0.square_mut();
t0 *= &t1;
@@ -1099,7 +1098,8 @@ pub fn fe_pow22523(z: &FieldElement) -> FieldElement
for _ in 1..2 {
t0.square_mut();
}
&t0 * &z
&t0 * &self
}
}
#[cfg(test)]
@@ -1113,7 +1113,7 @@ fn pow22523() {
assert!(!nega && !negc);
let a = test_from_bytes(&abytes);
let c = test_from_bytes(&cbytes);
let r = fe_pow22523(&a);
let r = a.pow22523();
assert_eq!(r, c);
});
}

View File

@@ -51,7 +51,7 @@ impl Point {
let mut hx = v3.square();
hx *= &v;
hx *= &u; /* x = uv^7 */
hx = fe_pow22523(&hx); /* x = (uv^7)^((q-5)/8) */
hx = hx.pow22523(); /* x = (uv^7)^((q-5)/8) */
hx *= &v3;
hx *= &u; /* x = uv^3(uv^7)^((q-5)/8) */
@@ -312,7 +312,7 @@ fn ge_p2_dbl(r: &mut PointP1P1, p: &Point2)
{
r.x = p.x.square();
r.z = p.y.square();
fe_sq2(&mut r.t, &p.z);
r.t = p.z.sq2();
r.y = &p.x + &p.y;
let t0 = r.y.square();
r.y = &r.z + &r.x;