use blake2b_simd::Hash as Blake2bHash;
use crate::transaction::{
Authorization, TransactionData, TransparentDigests, TxDigests,
sighash::{SignableInput, TransparentAuthorizingContext},
transparent,
txid::{hash_transparent_txid_data, to_hash},
};
fn transparent_sig_digest<A: TransparentAuthorizingContext>(
tx_data: Option<(&transparent::Bundle<A>, &TransparentDigests<Blake2bHash>)>,
_input: &SignableInput,
) -> Blake2bHash {
match tx_data {
None => hash_transparent_txid_data(None),
Some((_bundle, txid_digests)) => hash_transparent_txid_data(Some(txid_digests)),
}
}
pub fn v5_signature_hash<
TA: TransparentAuthorizingContext,
A: Authorization<TransparentAuth = TA>,
>(
tx: &TransactionData<A>,
signable_input: &SignableInput,
txid_parts: &TxDigests<Blake2bHash>,
) -> Blake2bHash {
assert_eq!(
tx.transparent_bundle.is_some(),
txid_parts.transparent_digests.is_some()
);
to_hash(
tx.version,
tx.consensus_branch_id,
txid_parts.header_digest,
transparent_sig_digest(
tx.transparent_bundle
.as_ref()
.zip(txid_parts.transparent_digests.as_ref()),
signable_input,
),
txid_parts.sapling_digest,
)
}