From 47948fa1fc6e8fe05b7d19ef06f82f0c51bb39f0 Mon Sep 17 00:00:00 2001 From: Lucas Meier Date: Mon, 12 Feb 2024 15:33:59 -0800 Subject: [PATCH] Unify identity treatment across both backends --- src/ark_curve/element/projective.rs | 4 ++++ src/min_curve/element.rs | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/src/ark_curve/element/projective.rs b/src/ark_curve/element/projective.rs index 0dda93b..de75f83 100644 --- a/src/ark_curve/element/projective.rs +++ b/src/ark_curve/element/projective.rs @@ -20,6 +20,10 @@ impl Element { pub const GENERATOR: Self = Self { inner: EdwardsProjective::new_unchecked(B_X, B_Y, B_T, B_Z), }; + + pub const IDENTITY: Self = Self { + inner: EdwardsProjective::new_unchecked(Fq::ZERO, Fq::ONE, Fq::ZERO, Fq::ONE), + }; } impl Hash for Element { diff --git a/src/min_curve/element.rs b/src/min_curve/element.rs index b6e2fa8..98c0900 100644 --- a/src/min_curve/element.rs +++ b/src/min_curve/element.rs @@ -108,6 +108,13 @@ impl Element { Element { x, y, z, t } } } + /// + /// Convenience method to make identity checks more readable. + pub fn is_identity(&self) -> bool { + // Section 4.5 of Decaf paper states for cofactor 4 curves we can + // just check X = 0 to check equality with identity + self.x == Fq::ZERO + } pub fn double(self) -> Self { // https://eprint.iacr.org/2008/522 Section 3.3