From 90656b0bbf04f73617906715f45bd759b68d384a Mon Sep 17 00:00:00 2001 From: Sean Bowe Date: Fri, 14 Oct 2016 12:03:50 -0600 Subject: [PATCH] Don't perform field inverse/squaring during affine conversion if point is already in affine. --- src/groups/mod.rs | 5 +++++ tests/serialization.rs | 2 ++ 2 files changed, 7 insertions(+) diff --git a/src/groups/mod.rs b/src/groups/mod.rs index 8ff08ba..4afb8fd 100644 --- a/src/groups/mod.rs +++ b/src/groups/mod.rs @@ -112,6 +112,11 @@ impl G

{ pub fn to_affine(&self) -> Option> { if self.z.is_zero() { None + } else if self.z == P::Base::one() { + Some(AffineG { + x: self.x, + y: self.y + }) } else { let zinv = self.z.inverse().unwrap(); let zinv_squared = zinv.squared(); diff --git a/tests/serialization.rs b/tests/serialization.rs index 9125df5..9377312 100644 --- a/tests/serialization.rs +++ b/tests/serialization.rs @@ -35,6 +35,7 @@ fn group_serialization_and_deserialization() { a = a * b; assert!(reserialize(a) == a); + assert!(reserialize(reserialize(a)) == a); } let mut a = G2::one(); @@ -42,6 +43,7 @@ fn group_serialization_and_deserialization() { a = a * b; assert!(reserialize(a) == a); + assert!(reserialize(reserialize(a)) == a); } }