From aa11eb137231d990bc0760a3f875de21cfe58ea0 Mon Sep 17 00:00:00 2001 From: Kris Nuttycombe Date: Wed, 5 May 2021 11:55:06 -0600 Subject: [PATCH] Derive the full range of ValueCommitment values. Co-authored-by: str4d --- src/note/nullifier.rs | 2 +- src/value.rs | 16 +++++++--------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/note/nullifier.rs b/src/note/nullifier.rs index a9a517c0..6c1f0471 100644 --- a/src/note/nullifier.rs +++ b/src/note/nullifier.rs @@ -11,7 +11,7 @@ use crate::{ }; /// A unique nullifier for a note. -#[derive(Debug, Clone)] +#[derive(Clone, Debug)] pub struct Nullifier(pub(crate) pallas::Base); impl Nullifier { diff --git a/src/value.rs b/src/value.rs index b572941e..10379d6d 100644 --- a/src/value.rs +++ b/src/value.rs @@ -221,12 +221,12 @@ impl ValueCommitment { let hasher = pallas::Point::hash_to_curve("z.cash:Orchard-cv"); let V = hasher(b"v"); 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() { - -pallas::Scalar::from_u64((-value) as u64) + let value = if value.0.is_negative() { + -pallas::Scalar::from_u64(abs_value) } else { - pallas::Scalar::from_u64(value as u64) + pallas::Scalar::from_u64(abs_value) }; ValueCommitment(V * value + R * rcv.0) @@ -254,7 +254,7 @@ pub mod testing { use pasta_curves::{arithmetic::FieldExt, pallas}; use proptest::prelude::*; - use super::{NoteValue, ValueCommitTrapdoor, ValueSum}; + use super::{NoteValue, ValueCommitTrapdoor, ValueSum, VALUE_SUM_RANGE}; /// Maximum note value. pub const MAX_NOTE_VALUE: u64 = u64::MAX - 1; @@ -271,7 +271,7 @@ pub mod testing { prop_compose! { /// 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) } } @@ -317,12 +317,10 @@ mod tests { }; use crate::primitives::redpallas; - const MAX_MONEY: i64 = 21_000_000 * 1_0000_0000; - proptest! { #[test] 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 .iter()