libzeropool_rs/
proof.rs

1use libzeropool::{
2    circuit::{tree::tree_update, tx::c_transfer},
3    fawkes_crypto::{
4        backend::bellman_groth16::{
5            engines::Engine,
6            prover::{prove, Proof},
7            Parameters,
8        },
9        ff_uint::Num,
10    },
11    native::{
12        params::PoolParams,
13        tree::{TreePub, TreeSec},
14        tx::{TransferPub, TransferSec},
15    },
16};
17
18pub fn prove_tx<P, E>(
19    params: &Parameters<E>,
20    pool_params: &P,
21    transfer_pub: TransferPub<E::Fr>,
22    transfer_sec: TransferSec<E::Fr>,
23) -> (Vec<Num<E::Fr>>, Proof<E>)
24where
25    P: PoolParams<Fr = E::Fr>,
26    E: Engine,
27{
28    let circuit = |public, secret| {
29        c_transfer(&public, &secret, pool_params);
30    };
31
32    prove(params, &transfer_pub, &transfer_sec, circuit)
33}
34
35pub fn prove_tree<P, E>(
36    params: &Parameters<E>,
37    pool_params: &P,
38    tree_pub: TreePub<E::Fr>,
39    tree_sec: TreeSec<E::Fr>,
40) -> (Vec<Num<E::Fr>>, Proof<E>)
41where
42    P: PoolParams<Fr = E::Fr>,
43    E: Engine,
44{
45    let circuit = |public, secret| {
46        tree_update(&public, &secret, pool_params);
47    };
48
49    prove(params, &tree_pub, &tree_sec, circuit)
50}