diff --git a/CHANGELOG.md b/CHANGELOG.md index 5fea405..7ce35d7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,5 +7,11 @@ and this project adheres to Rust's notion of ## [Unreleased] +## [0.1.1] - 2021-06-04 +## Added +- Implementations of `group::cofactor::{CofactorCurve, CofactorCurveAffine}` for + Pallas and Vesta, enabling them to be used in cofactor-aware protocols that + also want to leverage the affine point representation. + ## [0.1.0] - 2021-06-01 Initial release! diff --git a/Cargo.toml b/Cargo.toml index 4f543de..18e8d57 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "pasta_curves" description = "Implementation of the Pallas and Vesta (Pasta) curve cycle" -version = "0.1.0" +version = "0.1.1" authors = [ "Sean Bowe ", "Ying Tong Lai ", diff --git a/src/curves.rs b/src/curves.rs index 047c799..e784902 100644 --- a/src/curves.rs +++ b/src/curves.rs @@ -7,7 +7,7 @@ use core::iter::Sum; use core::ops::{Add, Mul, Neg, Sub}; use ff::Field; use group::{ - cofactor::CofactorGroup, + cofactor::{CofactorCurve, CofactorGroup}, prime::{PrimeCurve, PrimeCurveAffine, PrimeGroup}, Curve as _, Group as _, GroupEncoding, }; @@ -218,6 +218,10 @@ macro_rules! new_curve_impl { type Affine = $name_affine; } + impl CofactorCurve for $name { + type Affine = $name_affine; + } + impl GroupEncoding for $name { type Repr = [u8; 32]; @@ -594,6 +598,27 @@ macro_rules! new_curve_impl { } } + impl group::cofactor::CofactorCurveAffine for $name_affine { + type Curve = $name; + type Scalar = $scalar; + + fn identity() -> Self { + ::identity() + } + + fn generator() -> Self { + ::generator() + } + + fn is_identity(&self) -> Choice { + ::is_identity(self) + } + + fn to_curve(&self) -> Self::Curve { + ::to_curve(self) + } + } + impl GroupEncoding for $name_affine { type Repr = [u8; 32];