libzeropool_rs/
keys.rs

1use libzeropool::{
2    fawkes_crypto::ff_uint::{Num, NumRepr, PrimeField, Uint},
3    native::{
4        key::{derive_key_a, derive_key_eta},
5        params::PoolParams,
6    },
7};
8
9pub fn reduce_sk<Fs: PrimeField>(seed: &[u8]) -> Num<Fs> {
10    Num::<Fs>::from_uint_reduced(NumRepr(Uint::from_little_endian(seed)))
11}
12
13#[derive(Clone)]
14pub struct Keys<P: PoolParams> {
15    pub sk: Num<P::Fs>,
16    pub a: Num<P::Fr>,
17    pub eta: Num<P::Fr>,
18}
19
20impl<P: PoolParams> Keys<P> {
21    pub fn derive(sk: Num<P::Fs>, params: &P) -> Self {
22        let a = derive_key_a(sk, params).x;
23        let eta = derive_key_eta(a, params);
24
25        Keys { sk, a, eta }
26    }
27}