mercurial_signature/
lib.rs1#![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>;