Derive the full range of ValueCommitment values.

Co-authored-by: str4d <jack@electriccoin.co>
This commit is contained in:
Kris Nuttycombe 2021-05-05 11:55:06 -06:00 committed by Kris Nuttycombe
parent e72d74ccd6
commit aa11eb1372
2 changed files with 8 additions and 10 deletions

View File

@ -11,7 +11,7 @@ use crate::{
}; };
/// A unique nullifier for a note. /// A unique nullifier for a note.
#[derive(Debug, Clone)] #[derive(Clone, Debug)]
pub struct Nullifier(pub(crate) pallas::Base); pub struct Nullifier(pub(crate) pallas::Base);
impl Nullifier { impl Nullifier {

View File

@ -221,12 +221,12 @@ impl ValueCommitment {
let hasher = pallas::Point::hash_to_curve("z.cash:Orchard-cv"); let hasher = pallas::Point::hash_to_curve("z.cash:Orchard-cv");
let V = hasher(b"v"); let V = hasher(b"v");
let R = hasher(b"r"); let R = hasher(b"r");
let value = i64::try_from(value.0).expect("value must be in valid range"); let abs_value = u64::try_from(value.0.abs()).expect("value must be in valid range");
let value = if value.is_negative() { let value = if value.0.is_negative() {
-pallas::Scalar::from_u64((-value) as u64) -pallas::Scalar::from_u64(abs_value)
} else { } else {
pallas::Scalar::from_u64(value as u64) pallas::Scalar::from_u64(abs_value)
}; };
ValueCommitment(V * value + R * rcv.0) ValueCommitment(V * value + R * rcv.0)
@ -254,7 +254,7 @@ pub mod testing {
use pasta_curves::{arithmetic::FieldExt, pallas}; use pasta_curves::{arithmetic::FieldExt, pallas};
use proptest::prelude::*; use proptest::prelude::*;
use super::{NoteValue, ValueCommitTrapdoor, ValueSum}; use super::{NoteValue, ValueCommitTrapdoor, ValueSum, VALUE_SUM_RANGE};
/// Maximum note value. /// Maximum note value.
pub const MAX_NOTE_VALUE: u64 = u64::MAX - 1; pub const MAX_NOTE_VALUE: u64 = u64::MAX - 1;
@ -271,7 +271,7 @@ pub mod testing {
prop_compose! { prop_compose! {
/// Generate an arbitrary [`ValueSum`] in the range of valid Zcash values. /// Generate an arbitrary [`ValueSum`] in the range of valid Zcash values.
pub fn arb_value_sum(bound: i64)(value in -bound..bound) -> ValueSum { pub fn arb_value_sum()(value in VALUE_SUM_RANGE) -> ValueSum {
ValueSum(value as i128) ValueSum(value as i128)
} }
} }
@ -317,12 +317,10 @@ mod tests {
}; };
use crate::primitives::redpallas; use crate::primitives::redpallas;
const MAX_MONEY: i64 = 21_000_000 * 1_0000_0000;
proptest! { proptest! {
#[test] #[test]
fn bsk_consistent_with_bvk( fn bsk_consistent_with_bvk(
values in prop::collection::vec((arb_value_sum(MAX_MONEY), arb_trapdoor()), 1..10), values in prop::collection::vec((arb_value_sum(), arb_trapdoor()), 1..10),
) { ) {
let value_balance = values let value_balance = values
.iter() .iter()