Shift sq2/pow22523. Everything should be properly in FieldElement now.
This commit is contained in:
@@ -889,18 +889,19 @@ fn is_tests() {
|
||||
});
|
||||
}
|
||||
|
||||
pub fn fe_sq2(h: &mut FieldElement, f: &FieldElement)
|
||||
impl FieldElement {
|
||||
pub fn sq2(&self) -> 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];
|
||||
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
|
||||
impl FieldElement {
|
||||
pub fn pow22523(&self) -> FieldElement
|
||||
{
|
||||
let mut t0 = z.square();
|
||||
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);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user