mercurial_signature/
lib.rs

1#![doc = include_str!("../README.md")]
2
3use ark_ec::pairing::Pairing;
4use ark_serialize::{CanonicalDeserialize, CanonicalSerialize};
5use ark_std::{One, UniformRand, Zero};
6use std::ops::{Add, Div, Mul, MulAssign};
7
8mod params;
9mod public_key;
10
11mod representation;
12pub use representation::change_representation;
13
14mod secret_key;
15mod signature;
16
17pub trait Curve: Clone {
18    type F: Pairing;
19    type Fr: Clone
20        + Copy
21        + PartialEq
22        + Eq
23        + CanonicalSerialize
24        + CanonicalDeserialize
25        + UniformRand
26        + One
27        + Mul
28        + MulAssign
29        + for<'a> Mul<&'a Self::Fr, Output = Self::Fr>
30        + Div<Output = Self::Fr>;
31    type G1: Clone
32        + Copy
33        + PartialEq
34        + Eq
35        + CanonicalSerialize
36        + CanonicalDeserialize
37        + UniformRand
38        + Zero
39        + Into<<<Self as Curve>::F as Pairing>::G1Prepared>
40        + Add
41        + for<'a> Mul<&'a Self::Fr, Output = Self::G1>
42        + Mul<Self::Fr, Output = Self::G1>
43        + MulAssign<Self::Fr>;
44    type G2: Clone
45        + Copy
46        + PartialEq
47        + Eq
48        + CanonicalSerialize
49        + CanonicalDeserialize
50        + UniformRand
51        + Zero
52        + Into<<<Self as Curve>::F as Pairing>::G2Prepared>
53        + for<'a> Mul<&'a Self::Fr, Output = Self::G2>
54        + Mul<Self::Fr, Output = Self::G2>
55        + MulAssign<Self::Fr>;
56}
57
58#[derive(Clone, PartialEq, Eq)]
59pub struct CurveBls12_381;
60
61impl Curve for CurveBls12_381 {
62    type F = ark_bls12_381::Bls12_381;
63    type Fr = <ark_bls12_381::Bls12_381 as Pairing>::ScalarField;
64    type G1 = ark_bls12_381::G1Projective;
65    type G2 = ark_bls12_381::G2Projective;
66}
67
68pub type PublicParams = params::PublicParams<CurveBls12_381>;
69pub type PublicKey = public_key::PublicKey<CurveBls12_381>;
70pub type SecretKey = secret_key::SecretKey<CurveBls12_381>;
71pub type Signature = signature::Signature<CurveBls12_381>;