Skip to content

Commit

Permalink
Migrate to group::CurveAffine
Browse files Browse the repository at this point in the history
  • Loading branch information
str4d committed Jul 30, 2023
1 parent a586b8c commit fb643a4
Show file tree
Hide file tree
Showing 5 changed files with 19 additions and 43 deletions.
3 changes: 3 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -72,3 +72,6 @@ sqrt-table = ["alloc", "lazy_static"]
repr-c = []
uninline-portable = []
serde = ["hex", "serde_crate"]

[patch.crates-io]
group = { git = "https://github.com/zkcrypto/group.git", rev = "696c2128529b5a9e18eed46d1da531753695db04" }
2 changes: 1 addition & 1 deletion benches/point.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ fn point_bench<C: CurveExt>(c: &mut Criterion, name: &str) {

for &n in [100, 1000, 10000].iter() {
let input = vec![a; n];
let mut output = vec![C::AffineRepr::default(); n];
let mut output = vec![C::Affine::default(); n];
group.bench_function(format!("point batch_normalize/{}", n), |bencher| {
bencher.iter(|| C::batch_normalize(input.as_slice(), output.as_mut_slice()));
});
Expand Down
14 changes: 6 additions & 8 deletions src/arithmetic/curves.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ pub trait CurveExt:
+ Default
+ ConditionallySelectable
+ ConstantTimeEq
+ From<<Self as PrimeCurve>::Affine>
+ From<Self::Affine>
{
/// The scalar field of this elliptic curve.
type ScalarExt: ff::WithSmallOrderMulGroup<3>;
Expand Down Expand Up @@ -88,15 +88,13 @@ pub trait CurveExt:
#[cfg(feature = "alloc")]
#[cfg_attr(docsrs, doc(cfg(feature = "alloc")))]
pub trait CurveAffine:
PrimeCurveAffine<
Scalar = <Self as CurveAffine>::ScalarExt,
Curve = <Self as CurveAffine>::CurveExt,
> + Default
+ Add<Output = <Self as PrimeCurveAffine>::Curve>
+ Sub<Output = <Self as PrimeCurveAffine>::Curve>
PrimeCurveAffine<Curve = Self::CurveExt, Scalar = Self::ScalarExt>
+ Default
+ Add<Output = Self::Curve>
+ Sub<Output = Self::Curve>
+ ConditionallySelectable
+ ConstantTimeEq
+ From<<Self as PrimeCurveAffine>::Curve>
+ From<Self::Curve>
{
/// The scalar field of this elliptic curve.
type ScalarExt: ff::WithSmallOrderMulGroup<3> + Ord;
Expand Down
41 changes: 8 additions & 33 deletions src/curves.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ use alloc::boxed::Box;
use ff::{Field, PrimeField};
use group::{
cofactor::{CofactorCurve, CofactorGroup},
prime::{PrimeCurve, PrimeCurveAffine, PrimeGroup},
Curve as _, Group as _, GroupEncoding,
prime::{PrimeCurve, PrimeGroup},
Curve as _, CurveAffine as _, Group as _, GroupEncoding,
};
use rand::RngCore;
use subtle::{Choice, ConditionallySelectable, ConstantTimeEq, CtOption};
Expand Down Expand Up @@ -168,9 +168,9 @@ macro_rules! new_curve_impl {
}

impl group::Curve for $name {
type AffineRepr = $name_affine;
type Affine = $name_affine;

fn batch_normalize(p: &[Self], q: &mut [Self::AffineRepr]) {
fn batch_normalize(p: &[Self], q: &mut [Self::Affine]) {
assert_eq!(p.len(), q.len());

let mut acc = $base::one();
Expand Down Expand Up @@ -207,7 +207,7 @@ macro_rules! new_curve_impl {
}
}

fn to_affine(&self) -> Self::AffineRepr {
fn to_affine(&self) -> Self::Affine {
let zinv = self.z.invert().unwrap_or($base::zero());
let zinv2 = zinv.square();
let x = self.x * zinv2;
Expand Down Expand Up @@ -244,13 +244,9 @@ macro_rules! new_curve_impl {
}
}

impl PrimeCurve for $name {
type Affine = $name_affine;
}
impl PrimeCurve for $name {}

impl CofactorCurve for $name {
type Affine = $name_affine;
}
impl CofactorCurve for $name {}

impl GroupEncoding for $name {
type Repr = [u8; 32];
Expand Down Expand Up @@ -610,7 +606,7 @@ macro_rules! new_curve_impl {
}
}

impl PrimeCurveAffine for $name_affine {
impl group::CurveAffine for $name_affine {
type Curve = $name;
type Scalar = $scalar;

Expand All @@ -636,27 +632,6 @@ macro_rules! new_curve_impl {
}
}

impl group::cofactor::CofactorCurveAffine for $name_affine {
type Curve = $name;
type Scalar = $scalar;

fn identity() -> Self {
<Self as PrimeCurveAffine>::identity()
}

fn generator() -> Self {
<Self as PrimeCurveAffine>::generator()
}

fn is_identity(&self) -> Choice {
<Self as PrimeCurveAffine>::is_identity(self)
}

fn to_curve(&self) -> Self::Curve {
<Self as PrimeCurveAffine>::to_curve(self)
}
}

impl GroupEncoding for $name_affine {
type Repr = [u8; 32];

Expand Down
2 changes: 1 addition & 1 deletion src/serde_impl.rs
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ mod tests {
use core::fmt::Debug;

use ff::Field;
use group::{prime::PrimeCurveAffine, Curve, Group};
use group::{Curve, CurveAffine, Group};
use rand::SeedableRng;
use rand_xorshift::XorShiftRng;

Expand Down

0 comments on commit fb643a4

Please sign in to comment.