diff --git a/zcash_primitives/src/transaction/builder.rs b/zcash_primitives/src/transaction/builder.rs index ae47a32ae..b7e2ee22d 100644 --- a/zcash_primitives/src/transaction/builder.rs +++ b/zcash_primitives/src/transaction/builder.rs @@ -178,6 +178,31 @@ impl TransparentInputs { Amount::zero() } } + + #[cfg(feature = "transparent-inputs")] + fn apply_signatures(&self, mtx: &mut TransactionData, consensus_branch_id: u32) { + for (i, info) in self.inputs.iter().enumerate() { + sighash.copy_from_slice(&signature_hash_data( + mtx, + consensus_branch_id, + SIGHASH_ALL, + Some((i, &info.coin.script_pubkey, info.coin.value)), + )); + + let msg = secp256k1::Message::from_slice(&sighash).expect("32 bytes"); + let sig = self.secp.sign(&msg, &info.sk); + + // Signature has to have "SIGHASH_ALL" appended to it + let mut sig_bytes: Vec = sig.serialize_der()[..].to_vec(); + sig_bytes.extend(&[SIGHASH_ALL as u8]); + + // P2PKH scriptSig + mtx.vin[i].script_sig = Script::default() << &sig_bytes[..] << &info.pubkey[..]; + } + } + + #[cfg(not(feature = "transparent-inputs"))] + fn apply_signatures(&self, _: &mut TransactionData, _: u32) {} } /// Metadata about a transaction created by a [`Builder`]. @@ -612,28 +637,8 @@ impl Builder { ); // Transparent signatures - #[cfg(feature = "transparent-inputs")] - { - for (i, info) in self.legacy.inputs.iter().enumerate() { - sighash.copy_from_slice(&signature_hash_data( - &self.mtx, - consensus_branch_id, - SIGHASH_ALL, - Some((i, &info.coin.script_pubkey, info.coin.value)), - )); - - let msg = secp256k1::Message::from_slice(&sighash).expect("32 bytes"); - let sig = self.legacy.secp.sign(&msg, &info.sk); - - // Signature has to have "SIGHASH_ALL" appended to it - let mut sig_bytes: Vec = sig.serialize_der()[..].to_vec(); - sig_bytes.extend(&[SIGHASH_ALL as u8]); - - // P2PKH scriptSig - self.mtx.vin[i].script_sig = - Script::default() << &sig_bytes[..] << &info.pubkey[..]; - } - } + self.legacy + .apply_signatures(&mut self.mtx, consensus_branch_id); Ok(( self.mtx.freeze().expect("Transaction should be complete"),