Skip to content

Commit

Permalink
Operationen auf Punkten in endlichen Körpern beschleunigt, in dem ers…
Browse files Browse the repository at this point in the history
…t am Ende der Berechnung eine Normalisierung (mod p) ausgeführt wird und nicht mehr in jedem Zwischenschritt.
  • Loading branch information
Tristan-H11 committed Feb 17, 2024
1 parent 8226500 commit 787b0fe
Showing 1 changed file with 10 additions and 7 deletions.
17 changes: 10 additions & 7 deletions src/math_core/ecc/finite_field_elliptic_curve_point.rs
Original file line number Diff line number Diff line change
Expand Up @@ -64,10 +64,10 @@ impl FiniteFieldEllipticCurvePoint {
let slope_denom = service.modulo_inverse(&(&other.x - &self.x), p).unwrap();

// Steigung der Geraden durch die beiden Punkte berechnen
let slope = (slope_numer * slope_denom).rem_euclid(p);
let slope = slope_numer * slope_denom;

let x_sum = (&slope * &slope - &self.x - &other.x).rem_euclid(p);
let y_sum = (&slope * (&self.x - &x_sum) - &self.y).rem_euclid(p);
let x_sum = &slope * &slope - &self.x - &other.x;
let y_sum = &slope * (&self.x - &x_sum) - &self.y;

Some(FiniteFieldEllipticCurvePoint::new(x_sum, y_sum, Rc::clone(&self.curve)).normalize())
}
Expand All @@ -85,10 +85,10 @@ impl FiniteFieldEllipticCurvePoint {
let slope_denom = 2u32 * &self.y;
let slope_denom = service.modulo_inverse(&slope_denom, p).unwrap();
// Steigung der Geraden durch die beiden Punkte berechnen
let slope = (slope_numer * slope_denom).rem_euclid(p);
let slope = slope_numer * slope_denom;

let x_sum = (&slope * &slope - 2u32 * &self.x).rem_euclid(p);
let y_sum = (&slope * (&self.x - &x_sum) - &self.y).rem_euclid(p);
let x_sum = &slope * &slope - 2u32 * &self.x;
let y_sum = &slope * (&self.x - &x_sum) - &self.y;

FiniteFieldEllipticCurvePoint::new(x_sum, y_sum, Rc::clone(&self.curve)).normalize()
}
Expand Down Expand Up @@ -126,6 +126,7 @@ impl FiniteFieldEllipticCurvePoint {

///
/// Normalisiert den Punkt, indem negative Koordinaten in positive Koordinaten umgewandelt werden.
/// Anschließend wird der Punkt wieder in den Körper der elliptischen Kurve zurückgeführt.
///
fn normalize(&self) -> Self {
let p = &self.curve.p;
Expand All @@ -141,7 +142,9 @@ impl FiniteFieldEllipticCurvePoint {
y += p;
}

FiniteFieldEllipticCurvePoint::new(x, y, Rc::clone(&self.curve))
let normalized_x = x.rem_euclid(p);
let normalized_y = y.rem_euclid(p);
FiniteFieldEllipticCurvePoint::new(normalized_x, normalized_y, Rc::clone(&self.curve))
}
}

Expand Down

0 comments on commit 787b0fe

Please sign in to comment.