Rename Group to Curve.
This commit is contained in:
parent
d95a9b0b29
commit
56c75c0c8a
@ -43,7 +43,7 @@ macro_rules! curve_impl {
|
||||
}
|
||||
}
|
||||
|
||||
impl GroupAffine<$engine, $name> for $name_affine {
|
||||
impl CurveAffine<$engine, $name> for $name_affine {
|
||||
type Uncompressed = $name_uncompressed;
|
||||
|
||||
fn is_valid(&self, e: &$engine) -> bool {
|
||||
@ -118,7 +118,7 @@ macro_rules! curve_impl {
|
||||
}
|
||||
}
|
||||
|
||||
impl Group<$engine> for $name {
|
||||
impl Curve<$engine> for $name {
|
||||
type Affine = $name_affine;
|
||||
type Prepared = $name_prepared;
|
||||
|
||||
|
@ -5,9 +5,9 @@ use std::borrow::Borrow;
|
||||
use super::{
|
||||
WindowTable,
|
||||
Engine,
|
||||
Group,
|
||||
GroupAffine,
|
||||
GroupRepresentation,
|
||||
Curve,
|
||||
CurveAffine,
|
||||
CurveRepresentation,
|
||||
PrimeField,
|
||||
Field,
|
||||
SnarkField,
|
||||
@ -334,7 +334,7 @@ impl<'a> Deserialize<'a> for G2Uncompressed {
|
||||
}
|
||||
}
|
||||
|
||||
impl GroupRepresentation<Bls381, G1> for G1Uncompressed {
|
||||
impl CurveRepresentation<Bls381, G1> for G1Uncompressed {
|
||||
fn to_affine_unchecked(&self, e: &Bls381) -> Result<G1Affine, ()> {
|
||||
match self {
|
||||
&G1Uncompressed::Infinity => {
|
||||
@ -365,7 +365,7 @@ impl GroupRepresentation<Bls381, G1> for G1Uncompressed {
|
||||
}
|
||||
}
|
||||
|
||||
impl GroupRepresentation<Bls381, G2> for G2Uncompressed {
|
||||
impl CurveRepresentation<Bls381, G2> for G2Uncompressed {
|
||||
fn to_affine_unchecked(&self, e: &Bls381) -> Result<G2Affine, ()> {
|
||||
match self {
|
||||
&G2Uncompressed::Infinity => {
|
||||
@ -948,8 +948,8 @@ impl Engine for Bls381 {
|
||||
|
||||
fn miller_loop<'a, I>(&self, i: I) -> Self::Fqk
|
||||
where I: IntoIterator<Item=&'a (
|
||||
&'a <Self::G1 as Group<Self>>::Prepared,
|
||||
&'a <Self::G2 as Group<Self>>::Prepared
|
||||
&'a <Self::G1 as Curve<Self>>::Prepared,
|
||||
&'a <Self::G2 as Curve<Self>>::Prepared
|
||||
)>
|
||||
{
|
||||
let mut pairs = vec![];
|
||||
@ -1009,7 +1009,7 @@ impl Engine for Bls381 {
|
||||
f
|
||||
}
|
||||
|
||||
fn batch_baseexp<G: Group<Self>, S: AsRef<[Self::Fr]>>(&self, table: &WindowTable<Self, G, Vec<G>>, s: S) -> Vec<G::Affine>
|
||||
fn batch_baseexp<G: Curve<Self>, S: AsRef<[Self::Fr]>>(&self, table: &WindowTable<Self, G, Vec<G>>, s: S) -> Vec<G::Affine>
|
||||
{
|
||||
use crossbeam;
|
||||
use num_cpus;
|
||||
@ -1036,7 +1036,7 @@ impl Engine for Bls381 {
|
||||
ret
|
||||
}
|
||||
|
||||
fn multiexp<G: Group<Self>>(&self, g: &[G::Affine], s: &[Fr]) -> Result<G, ()> {
|
||||
fn multiexp<G: Curve<Self>>(&self, g: &[G::Affine], s: &[Fr]) -> Result<G, ()> {
|
||||
if g.len() != s.len() {
|
||||
return Err(());
|
||||
}
|
||||
@ -1063,7 +1063,7 @@ impl Engine for Bls381 {
|
||||
Ok(acc)
|
||||
});
|
||||
|
||||
fn multiexp_inner<G: Group<Bls381>>(engine: &Bls381, g: &[G::Affine], s: &[Fr]) -> G
|
||||
fn multiexp_inner<G: Curve<Bls381>>(engine: &Bls381, g: &[G::Affine], s: &[Fr]) -> G
|
||||
{
|
||||
// This performs a multi-exponentiation calculation, i.e., multiplies
|
||||
// each group element by the corresponding scalar and adds all of the
|
||||
@ -1196,7 +1196,7 @@ impl Engine for Bls381 {
|
||||
}
|
||||
}
|
||||
|
||||
impl<G: Group<Bls381>, B: Borrow<[G]>> WindowTable<Bls381, G, B> {
|
||||
impl<G: Curve<Bls381>, B: Borrow<[G]>> WindowTable<Bls381, G, B> {
|
||||
fn exp(&mut self, e: &Bls381, into: &mut G, mut c: <Fr as PrimeField<Bls381>>::Repr) {
|
||||
assert!(self.window > 1);
|
||||
|
||||
@ -1252,7 +1252,7 @@ impl<G: Group<Bls381>, B: Borrow<[G]>> WindowTable<Bls381, G, B> {
|
||||
}
|
||||
|
||||
// Performs optimal exponentiation
|
||||
fn opt_exp<G: Group<Bls381>>(e: &Bls381, base: &mut G, scalar: <Fr as PrimeField<Bls381>>::Repr, table: &mut WindowTable<Bls381, G, Vec<G>>)
|
||||
fn opt_exp<G: Curve<Bls381>>(e: &Bls381, base: &mut G, scalar: <Fr as PrimeField<Bls381>>::Repr, table: &mut WindowTable<Bls381, G, Vec<G>>)
|
||||
{
|
||||
let bits = fr_arith::num_bits(&scalar);
|
||||
match G::optimal_window(e, bits) {
|
||||
|
@ -3,7 +3,7 @@ extern crate bincode;
|
||||
use curves::*;
|
||||
use super::*;
|
||||
|
||||
fn test_vectors<E: Engine, G: Group<E>>(e: &E, expected: &[u8]) {
|
||||
fn test_vectors<E: Engine, G: Curve<E>>(e: &E, expected: &[u8]) {
|
||||
let mut bytes = vec![];
|
||||
let mut acc = G::zero(e);
|
||||
let mut expected_reader = expected;
|
||||
@ -11,7 +11,7 @@ fn test_vectors<E: Engine, G: Group<E>>(e: &E, expected: &[u8]) {
|
||||
for _ in 0..10000 {
|
||||
{
|
||||
let acc = acc.to_affine(e);
|
||||
let exp: <G::Affine as GroupAffine<E, G>>::Uncompressed =
|
||||
let exp: <G::Affine as CurveAffine<E, G>>::Uncompressed =
|
||||
bincode::deserialize_from(&mut expected_reader, bincode::Infinite).unwrap();
|
||||
|
||||
assert!(acc == exp.to_affine(e).unwrap());
|
||||
|
@ -15,8 +15,8 @@ pub trait Engine: Sized + Clone
|
||||
type Fr: SnarkField<Self>;
|
||||
type Fqe: SqrtField<Self>;
|
||||
type Fqk: Field<Self>;
|
||||
type G1: Group<Self> + Convert<<Self::G1 as Group<Self>>::Affine, Self>;
|
||||
type G2: Group<Self> + Convert<<Self::G2 as Group<Self>>::Affine, Self>;
|
||||
type G1: Curve<Self> + Convert<<Self::G1 as Curve<Self>>::Affine, Self>;
|
||||
type G2: Curve<Self> + Convert<<Self::G2 as Curve<Self>>::Affine, Self>;
|
||||
|
||||
fn new() -> Self;
|
||||
|
||||
@ -24,8 +24,8 @@ pub trait Engine: Sized + Clone
|
||||
fn with<R, F: for<'a> FnOnce(&'a Self) -> R>(F) -> R;
|
||||
|
||||
fn pairing<G1, G2>(&self, p: &G1, q: &G2) -> Self::Fqk
|
||||
where G1: Convert<<Self::G1 as Group<Self>>::Affine, Self>,
|
||||
G2: Convert<<Self::G2 as Group<Self>>::Affine, Self>
|
||||
where G1: Convert<<Self::G1 as Curve<Self>>::Affine, Self>,
|
||||
G2: Convert<<Self::G2 as Curve<Self>>::Affine, Self>
|
||||
{
|
||||
self.final_exponentiation(&self.miller_loop(
|
||||
[(
|
||||
@ -36,17 +36,17 @@ pub trait Engine: Sized + Clone
|
||||
}
|
||||
fn miller_loop<'a, I>(&self, I) -> Self::Fqk
|
||||
where I: IntoIterator<Item=&'a (
|
||||
&'a <Self::G1 as Group<Self>>::Prepared,
|
||||
&'a <Self::G2 as Group<Self>>::Prepared
|
||||
&'a <Self::G1 as Curve<Self>>::Prepared,
|
||||
&'a <Self::G2 as Curve<Self>>::Prepared
|
||||
)>;
|
||||
fn final_exponentiation(&self, &Self::Fqk) -> Self::Fqk;
|
||||
|
||||
/// Perform multi-exponentiation. g and s must have the same length.
|
||||
fn multiexp<G: Group<Self>>(&self, g: &[G::Affine], s: &[Self::Fr]) -> Result<G, ()>;
|
||||
fn batch_baseexp<G: Group<Self>, S: AsRef<[Self::Fr]>>(&self, table: &WindowTable<Self, G, Vec<G>>, scalars: S) -> Vec<G::Affine>;
|
||||
fn multiexp<G: Curve<Self>>(&self, g: &[G::Affine], s: &[Self::Fr]) -> Result<G, ()>;
|
||||
fn batch_baseexp<G: Curve<Self>, S: AsRef<[Self::Fr]>>(&self, table: &WindowTable<Self, G, Vec<G>>, scalars: S) -> Vec<G::Affine>;
|
||||
}
|
||||
|
||||
pub trait Group<E: Engine>: Sized +
|
||||
pub trait Curve<E: Engine>: Sized +
|
||||
Copy +
|
||||
Clone +
|
||||
Send +
|
||||
@ -54,7 +54,7 @@ pub trait Group<E: Engine>: Sized +
|
||||
fmt::Debug +
|
||||
'static
|
||||
{
|
||||
type Affine: GroupAffine<E, Self>;
|
||||
type Affine: CurveAffine<E, Self>;
|
||||
type Prepared: Clone + Send + Sync + 'static;
|
||||
|
||||
fn zero(&E) -> Self;
|
||||
@ -78,7 +78,7 @@ pub trait Group<E: Engine>: Sized +
|
||||
fn optimal_window_batch(&self, &E, scalars: usize) -> WindowTable<E, Self, Vec<Self>>;
|
||||
}
|
||||
|
||||
pub trait GroupAffine<E: Engine, G: Group<E>>: Copy +
|
||||
pub trait CurveAffine<E: Engine, G: Curve<E>>: Copy +
|
||||
Clone +
|
||||
Sized +
|
||||
Send +
|
||||
@ -88,7 +88,7 @@ pub trait GroupAffine<E: Engine, G: Group<E>>: Copy +
|
||||
Eq +
|
||||
'static
|
||||
{
|
||||
type Uncompressed: GroupRepresentation<E, G>;
|
||||
type Uncompressed: CurveRepresentation<E, G>;
|
||||
|
||||
fn to_jacobian(&self, &E) -> G;
|
||||
fn prepare(self, &E) -> G::Prepared;
|
||||
@ -106,7 +106,7 @@ pub trait GroupAffine<E: Engine, G: Group<E>>: Copy +
|
||||
fn to_uncompressed(&self, &E) -> Self::Uncompressed;
|
||||
}
|
||||
|
||||
pub trait GroupRepresentation<E: Engine, G: Group<E>>: Serialize + for<'a> Deserialize<'a>
|
||||
pub trait CurveRepresentation<E: Engine, G: Curve<E>>: Serialize + for<'a> Deserialize<'a>
|
||||
{
|
||||
/// If the point representation is valid (lies on the curve, correct
|
||||
/// subgroup) this function will return it.
|
||||
@ -207,7 +207,7 @@ pub struct WindowTable<E, G, Table: Borrow<[G]>> {
|
||||
_marker: PhantomData<(E, G)>
|
||||
}
|
||||
|
||||
impl<E: Engine, G: Group<E>> WindowTable<E, G, Vec<G>> {
|
||||
impl<E: Engine, G: Curve<E>> WindowTable<E, G, Vec<G>> {
|
||||
fn new() -> Self {
|
||||
WindowTable {
|
||||
table: vec![],
|
||||
|
@ -1,7 +1,7 @@
|
||||
use rand;
|
||||
use super::super::{Engine, Field, PrimeField, Group, GroupAffine};
|
||||
use super::super::{Engine, Field, PrimeField, Curve, CurveAffine};
|
||||
|
||||
fn random_test_mixed_addition<E: Engine, G: Group<E>>(e: &E)
|
||||
fn random_test_mixed_addition<E: Engine, G: Curve<E>>(e: &E)
|
||||
{
|
||||
let rng = &mut rand::thread_rng();
|
||||
|
||||
@ -78,7 +78,7 @@ fn random_test_mixed_addition<E: Engine, G: Group<E>>(e: &E)
|
||||
}
|
||||
}
|
||||
|
||||
fn random_test_addition<E: Engine, G: Group<E>>(e: &E) {
|
||||
fn random_test_addition<E: Engine, G: Curve<E>>(e: &E) {
|
||||
let rng = &mut rand::thread_rng();
|
||||
|
||||
for _ in 0..50 {
|
||||
@ -111,7 +111,7 @@ fn random_test_addition<E: Engine, G: Group<E>>(e: &E) {
|
||||
}
|
||||
}
|
||||
|
||||
fn random_test_doubling<E: Engine, G: Group<E>>(e: &E) {
|
||||
fn random_test_doubling<E: Engine, G: Curve<E>>(e: &E) {
|
||||
let rng = &mut rand::thread_rng();
|
||||
|
||||
for _ in 0..50 {
|
||||
@ -141,7 +141,7 @@ fn random_test_doubling<E: Engine, G: Group<E>>(e: &E) {
|
||||
}
|
||||
}
|
||||
|
||||
fn random_test_dh<E: Engine, G: Group<E>>(e: &E) {
|
||||
fn random_test_dh<E: Engine, G: Curve<E>>(e: &E) {
|
||||
let rng = &mut rand::thread_rng();
|
||||
|
||||
for _ in 0..50 {
|
||||
@ -162,7 +162,7 @@ fn random_test_dh<E: Engine, G: Group<E>>(e: &E) {
|
||||
}
|
||||
}
|
||||
|
||||
fn random_mixed_addition<E: Engine, G: Group<E>>(e: &E) {
|
||||
fn random_mixed_addition<E: Engine, G: Curve<E>>(e: &E) {
|
||||
let rng = &mut rand::thread_rng();
|
||||
|
||||
for _ in 0..50 {
|
||||
@ -179,7 +179,7 @@ fn random_mixed_addition<E: Engine, G: Group<E>>(e: &E) {
|
||||
}
|
||||
}
|
||||
|
||||
fn random_test_equality<E: Engine, G: Group<E>>(e: &E) {
|
||||
fn random_test_equality<E: Engine, G: Curve<E>>(e: &E) {
|
||||
let rng = &mut rand::thread_rng();
|
||||
|
||||
for _ in 0..50 {
|
||||
@ -222,7 +222,7 @@ fn random_test_equality<E: Engine, G: Group<E>>(e: &E) {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn test_group<E: Engine, G: Group<E>>(e: &E) {
|
||||
pub fn test_curve<E: Engine, G: Curve<E>>(e: &E) {
|
||||
{
|
||||
let rng = &mut rand::thread_rng();
|
||||
let mut g = G::random(e, rng);
|
@ -1,11 +1,11 @@
|
||||
use super::{Engine, Group, GroupAffine, Field, PrimeField};
|
||||
use super::{Engine, Curve, CurveAffine, Field, PrimeField};
|
||||
use rand;
|
||||
|
||||
mod fields;
|
||||
mod groups;
|
||||
mod curves;
|
||||
|
||||
fn test_multiexp<E: Engine, G: Group<E>>(e: &E) {
|
||||
fn naiveexp<E: Engine, G: Group<E>>(e: &E, g: &[G::Affine], s: &[E::Fr]) -> G
|
||||
fn test_multiexp<E: Engine, G: Curve<E>>(e: &E) {
|
||||
fn naiveexp<E: Engine, G: Curve<E>>(e: &E, g: &[G::Affine], s: &[E::Fr]) -> G
|
||||
{
|
||||
assert!(g.len() == s.len());
|
||||
|
||||
@ -112,8 +112,8 @@ pub fn test_engine<E: Engine>() {
|
||||
fields::test_field::<E, E::Fqe>(&engine);
|
||||
fields::test_field::<E, E::Fqk>(&engine);
|
||||
|
||||
groups::test_group::<E, E::G1>(&engine);
|
||||
groups::test_group::<E, E::G2>(&engine);
|
||||
curves::test_curve::<E, E::G1>(&engine);
|
||||
curves::test_curve::<E, E::G2>(&engine);
|
||||
|
||||
test_bilinearity(&engine);
|
||||
test_multimiller(&engine);
|
||||
|
@ -4,34 +4,34 @@ use super::*;
|
||||
mod domain;
|
||||
|
||||
pub struct ProvingKey<E: Engine> {
|
||||
a_inputs: Vec<<E::G1 as Group<E>>::Affine>,
|
||||
b1_inputs: Vec<<E::G1 as Group<E>>::Affine>,
|
||||
b2_inputs: Vec<<E::G2 as Group<E>>::Affine>,
|
||||
a_aux: Vec<<E::G1 as Group<E>>::Affine>,
|
||||
b1_aux: Vec<<E::G1 as Group<E>>::Affine>,
|
||||
b2_aux: Vec<<E::G2 as Group<E>>::Affine>,
|
||||
h: Vec<<E::G1 as Group<E>>::Affine>,
|
||||
l: Vec<<E::G1 as Group<E>>::Affine>,
|
||||
alpha_g1: <E::G1 as Group<E>>::Affine,
|
||||
beta_g1: <E::G1 as Group<E>>::Affine,
|
||||
beta_g2: <E::G2 as Group<E>>::Affine,
|
||||
delta_g1: <E::G1 as Group<E>>::Affine,
|
||||
delta_g2: <E::G2 as Group<E>>::Affine
|
||||
a_inputs: Vec<<E::G1 as Curve<E>>::Affine>,
|
||||
b1_inputs: Vec<<E::G1 as Curve<E>>::Affine>,
|
||||
b2_inputs: Vec<<E::G2 as Curve<E>>::Affine>,
|
||||
a_aux: Vec<<E::G1 as Curve<E>>::Affine>,
|
||||
b1_aux: Vec<<E::G1 as Curve<E>>::Affine>,
|
||||
b2_aux: Vec<<E::G2 as Curve<E>>::Affine>,
|
||||
h: Vec<<E::G1 as Curve<E>>::Affine>,
|
||||
l: Vec<<E::G1 as Curve<E>>::Affine>,
|
||||
alpha_g1: <E::G1 as Curve<E>>::Affine,
|
||||
beta_g1: <E::G1 as Curve<E>>::Affine,
|
||||
beta_g2: <E::G2 as Curve<E>>::Affine,
|
||||
delta_g1: <E::G1 as Curve<E>>::Affine,
|
||||
delta_g2: <E::G2 as Curve<E>>::Affine
|
||||
}
|
||||
|
||||
pub struct VerifyingKey<E: Engine> {
|
||||
alpha_g1: <E::G1 as Group<E>>::Affine,
|
||||
beta_g2: <E::G2 as Group<E>>::Affine,
|
||||
gamma_g2: <E::G2 as Group<E>>::Affine,
|
||||
delta_g2: <E::G2 as Group<E>>::Affine,
|
||||
ic: Vec<<E::G1 as Group<E>>::Affine>
|
||||
alpha_g1: <E::G1 as Curve<E>>::Affine,
|
||||
beta_g2: <E::G2 as Curve<E>>::Affine,
|
||||
gamma_g2: <E::G2 as Curve<E>>::Affine,
|
||||
delta_g2: <E::G2 as Curve<E>>::Affine,
|
||||
ic: Vec<<E::G1 as Curve<E>>::Affine>
|
||||
}
|
||||
|
||||
pub struct PreparedVerifyingKey<E: Engine> {
|
||||
alpha_g1_beta_g2: E::Fqk,
|
||||
neg_gamma_g2: <E::G2 as Group<E>>::Prepared,
|
||||
neg_delta_g2: <E::G2 as Group<E>>::Prepared,
|
||||
ic: Vec<<E::G1 as Group<E>>::Affine>
|
||||
neg_gamma_g2: <E::G2 as Curve<E>>::Prepared,
|
||||
neg_delta_g2: <E::G2 as Curve<E>>::Prepared,
|
||||
ic: Vec<<E::G1 as Curve<E>>::Affine>
|
||||
}
|
||||
|
||||
pub struct Proof<E: Engine> {
|
||||
@ -317,7 +317,7 @@ pub fn verify<E: Engine, C: Input<E>, F: FnOnce(&mut ConstraintSystem<E>) -> C>(
|
||||
struct VerifierInput<'a, E: Engine + 'a> {
|
||||
e: &'a E,
|
||||
acc: E::G1,
|
||||
ic: &'a [<E::G1 as Group<E>>::Affine],
|
||||
ic: &'a [<E::G1 as Curve<E>>::Affine],
|
||||
insufficient_inputs: bool,
|
||||
num_inputs: usize,
|
||||
num_aux: usize
|
||||
|
Loading…
Reference in New Issue
Block a user