use pairing::{Engine}; use bellman::{ConstraintSystem, SynthesisError}; use bellman::gadgets::boolean::{Boolean}; use super::*; use super::prfs::*; use super::commitment::note_comm; pub struct OutputNote { pub cm: Vec } impl OutputNote { pub fn compute<'a, E, CS>( mut cs: CS, a_pk: Option, value: &NoteValue, r: Option, phi: &[Boolean], h_sig: &[Boolean], nonce: bool ) -> Result where E: Engine, CS: ConstraintSystem, { let rho = prf_rho( cs.namespace(|| "rho"), phi, h_sig, nonce )?; let a_pk = witness_u256( cs.namespace(|| "a_pk"), a_pk.as_ref().map(|a_pk| &a_pk.0[..]) )?; let r = witness_u256( cs.namespace(|| "r"), r.as_ref().map(|r| &r.0[..]) )?; let cm = note_comm( cs.namespace(|| "cm computation"), &a_pk, &value.bits_le(), &rho, &r )?; Ok(OutputNote { cm: cm }) } }