Extract single-TxOut hashing from signature_hash_data() for clarity

This commit is contained in:
Jack Grigg 2018-11-30 23:13:39 +00:00
parent e25b614573
commit c9b23dfdef
No known key found for this signature in database
GPG Key ID: 1B8D649257DB0829

View File

@ -3,7 +3,7 @@ use byteorder::{LittleEndian, WriteBytesExt};
use pairing::{PrimeField, PrimeFieldRepr}; use pairing::{PrimeField, PrimeFieldRepr};
use super::{ use super::{
components::{Amount, Script}, components::{Amount, Script, TxOut},
Transaction, TransactionData, OVERWINTER_VERSION_GROUP_ID, SAPLING_TX_VERSION, Transaction, TransactionData, OVERWINTER_VERSION_GROUP_ID, SAPLING_TX_VERSION,
SAPLING_VERSION_GROUP_ID, SAPLING_VERSION_GROUP_ID,
}; };
@ -99,6 +99,14 @@ fn outputs_hash(tx: &TransactionData) -> Vec<u8> {
h.finalize().as_ref().to_vec() h.finalize().as_ref().to_vec()
} }
fn single_output_hash(tx_out: &TxOut) -> Vec<u8> {
let mut data = vec![];
tx_out.write(&mut data).unwrap();
let mut h = Blake2b::with_params(32, &[], &[], ZCASH_OUTPUTS_HASH_PERSONALIZATION);
h.update(&data);
h.finalize().as_ref().to_vec()
}
fn joinsplits_hash(tx: &TransactionData) -> Vec<u8> { fn joinsplits_hash(tx: &TransactionData) -> Vec<u8> {
let mut data = Vec::with_capacity( let mut data = Vec::with_capacity(
tx.joinsplits.len() * if tx.version < SAPLING_TX_VERSION { tx.joinsplits.len() * if tx.version < SAPLING_TX_VERSION {
@ -157,13 +165,7 @@ pub fn signature_hash_data(
&& transparent_input.is_some() && transparent_input.is_some()
&& transparent_input.as_ref().unwrap().0 < tx.vout.len() && transparent_input.as_ref().unwrap().0 < tx.vout.len()
{ {
let mut data = vec![]; single_output_hash(&tx.vout[transparent_input.as_ref().unwrap().0])
tx.vout[transparent_input.as_ref().unwrap().0]
.write(&mut data)
.unwrap();
let mut h = Blake2b::with_params(32, &[], &[], ZCASH_OUTPUTS_HASH_PERSONALIZATION);
h.update(&data);
h.finalize().as_ref().to_vec()
} else { } else {
vec![0; 32] vec![0; 32]
}; };