use pairing::bls12_381::Bls12;
use zcash_primitives::jubjub::{
edwards, fs::FsRepr, FixedGenerators, JubjubBls12, JubjubParams, Unknown,
};
use zcash_primitives::transaction::components::Amount;
mod prover;
mod verifier;
pub use self::prover::SaplingProvingContext;
pub use self::verifier::SaplingVerificationContext;
fn compute_value_balance(
value: Amount,
params: &JubjubBls12,
) -> Option<edwards::Point<Bls12, Unknown>> {
let abs = match i64::from(value).checked_abs() {
Some(a) => a as u64,
None => return None,
};
let is_negative = value.is_negative();
let mut value_balance = params
.generator(FixedGenerators::ValueCommitmentValue)
.mul(FsRepr::from(abs), params);
if is_negative {
value_balance = value_balance.negate();
}
Some(value_balance.into())
}