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}