1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
use ark_ec::pairing::Pairing;
use ark_std::{rand::RngCore, UniformRand};
use digest::Digest;
use dock_crypto_utils::{affine_group_element_from_byte_slices, join};

pub type GeneratorPair<E> = (<E as Pairing>::G1Affine, <E as Pairing>::G2Affine);

pub fn generator_pair<E: Pairing, R: RngCore>(rng: &mut R) -> GeneratorPair<E> {
    (E::G1Affine::rand(rng), E::G2Affine::rand(rng))
}

pub fn generator_pair_deterministic<E: Pairing, D: Digest>(label: &[u8]) -> GeneratorPair<E> {
    join!(
        affine_group_element_from_byte_slices!(label, b" : G1"),
        affine_group_element_from_byte_slices!(label, b" : G2")
    )
}