Merge rust-bitcoin/rust-bitcoin#1340: Move sighash module to crate root

fd7f8daeff Move sighash module to crate root (Tobin C. Harding)

Pull request description:

  Done as part of the effort to flatten the `util` module.

  The `sighash` module can stand alone in the crate root, it provides a discreet set of functionality - the `SighashCache` and associated types.

  Marking as high priority because this is part of flattening `util` which is a required step before we start crate smashing.

ACKs for top commit:
  Kixunil:
    ACK fd7f8daeff
  apoelstra:
    ACK fd7f8daeff

Tree-SHA512: e812ca903f7dccfa5a06084e23f93f617d016583bdf082d7a36ca8e67e49f1d140a3e138b93939e816861460ff2c04d49d5e37a555dd853dca1c76dbccd910bf
This commit is contained in:
Andrew Poelstra 2022-10-25 00:57:09 +00:00
commit 03d67dd1da
No known key found for this signature in database
GPG Key ID: C588D63CE41B97C1
8 changed files with 15 additions and 16 deletions

View File

@ -658,7 +658,7 @@ impl Transaction {
script_pubkey: &Script, script_pubkey: &Script,
sighash_type: U, sighash_type: U,
) -> EncodeSigningDataResult<io::Error> { ) -> EncodeSigningDataResult<io::Error> {
use crate::util::sighash::{self, SighashCache}; use crate::sighash::{self, SighashCache};
use EncodeSigningDataResult::*; use EncodeSigningDataResult::*;
assert!(input_index < self.input.len()); // Panic on OOB assert!(input_index < self.input.len()); // Panic on OOB
@ -708,7 +708,7 @@ impl Transaction {
) -> Sighash { ) -> Sighash {
assert!(input_index < self.input.len()); // Panic on OOB, enables expect below. assert!(input_index < self.input.len()); // Panic on OOB, enables expect below.
let cache = crate::util::sighash::SighashCache::new(self); let cache = crate::sighash::SighashCache::new(self);
cache.legacy_signature_hash(input_index, script_pubkey, sighash_u32) cache.legacy_signature_hash(input_index, script_pubkey, sighash_u32)
.expect("cache method doesn't error") .expect("cache method doesn't error")
} }

View File

@ -9,7 +9,7 @@ use secp256k1::ecdsa;
use crate::consensus::encode::{Error, MAX_VEC_SIZE}; use crate::consensus::encode::{Error, MAX_VEC_SIZE};
use crate::consensus::{Decodable, Encodable, WriteExt}; use crate::consensus::{Decodable, Encodable, WriteExt};
use crate::util::sighash::EcdsaSighashType; use crate::sighash::EcdsaSighashType;
use crate::io::{self, Read, Write}; use crate::io::{self, Read, Write};
use crate::prelude::*; use crate::prelude::*;
use crate::VarInt; use crate::VarInt;

View File

@ -89,6 +89,7 @@ pub mod error;
pub mod hash_types; pub mod hash_types;
pub mod policy; pub mod policy;
pub mod pow; pub mod pow;
pub mod sighash;
pub mod sign_message; pub mod sign_message;
pub mod util; pub mod util;
@ -114,7 +115,7 @@ pub use crate::util::ecdsa::{self, EcdsaSig, EcdsaSigError};
pub use crate::util::key::{KeyPair, PrivateKey, PublicKey, XOnlyPublicKey}; pub use crate::util::key::{KeyPair, PrivateKey, PublicKey, XOnlyPublicKey};
pub use crate::util::merkleblock::MerkleBlock; pub use crate::util::merkleblock::MerkleBlock;
pub use crate::util::schnorr::{self, SchnorrSig, SchnorrSigError}; pub use crate::util::schnorr::{self, SchnorrSig, SchnorrSigError};
pub use crate::util::{psbt, sighash, Error}; pub use crate::util::{psbt, Error};
#[cfg(not(feature = "std"))] #[cfg(not(feature = "std"))]
mod io_extras { mod io_extras {

View File

@ -1080,7 +1080,7 @@ mod tests {
use crate::internal_macros::{hex_into, hex_script, hex_decode, hex_from_slice}; use crate::internal_macros::{hex_into, hex_script, hex_decode, hex_from_slice};
use crate::network::constants::Network; use crate::network::constants::Network;
use crate::util::key::PublicKey; use crate::util::key::PublicKey;
use crate::util::sighash::{Annex, Error, Prevouts, ScriptPath, SighashCache}; use crate::sighash::{Annex, Error, Prevouts, ScriptPath, SighashCache};
use crate::util::taproot::{TapTweakHash, TapSighashHash, TapBranchHash, TapLeafHash}; use crate::util::taproot::{TapTweakHash, TapSighashHash, TapBranchHash, TapLeafHash};
extern crate serde_json; extern crate serde_json;
@ -1109,7 +1109,7 @@ mod tests {
#[cfg(feature = "serde")] #[cfg(feature = "serde")]
fn legacy_sighash() { fn legacy_sighash() {
use serde_json::Value; use serde_json::Value;
use crate::util::sighash::SighashCache; use crate::sighash::SighashCache;
fn run_test_sighash(tx: &str, script: &str, input_index: usize, hash_type: i64, expected_result: &str) { fn run_test_sighash(tx: &str, script: &str, input_index: usize, hash_type: i64, expected_result: &str) {
let tx: Transaction = deserialize(&Vec::from_hex(tx).unwrap()[..]).unwrap(); let tx: Transaction = deserialize(&Vec::from_hex(tx).unwrap()[..]).unwrap();
@ -1127,7 +1127,7 @@ mod tests {
// These test vectors were stolen from libbtc, which is Copyright 2014 Jonas Schnelli MIT // These test vectors were stolen from libbtc, which is Copyright 2014 Jonas Schnelli MIT
// They were transformed by replacing {...} with run_test_sighash(...), then the ones containing // They were transformed by replacing {...} with run_test_sighash(...), then the ones containing
// OP_CODESEPARATOR in their pubkeys were removed // OP_CODESEPARATOR in their pubkeys were removed
let data = include_str!("../../test_data/legacy_sighash.json"); let data = include_str!("../test_data/legacy_sighash.json");
let testdata = serde_json::from_str::<Value>(data).unwrap().as_array().unwrap().clone(); let testdata = serde_json::from_str::<Value>(data).unwrap().as_array().unwrap().clone();
for t in testdata.iter().skip(1) { for t in testdata.iter().skip(1) {
@ -1479,7 +1479,7 @@ mod tests {
} }
fn bip_341_read_json() -> serde_json::Value { fn bip_341_read_json() -> serde_json::Value {
let json_str = include_str!("../../test_data/bip341_tests.json"); let json_str = include_str!("../test_data/bip341_tests.json");
serde_json::from_str(json_str).expect("JSON was not well-formatted") serde_json::from_str(json_str).expect("JSON was not well-formatted")
} }

View File

@ -13,7 +13,7 @@ use secp256k1;
use crate::prelude::*; use crate::prelude::*;
use crate::hashes::hex::{self, FromHex}; use crate::hashes::hex::{self, FromHex};
use crate::util::sighash::{EcdsaSighashType, NonStandardSighashType}; use crate::sighash::{EcdsaSighashType, NonStandardSighashType};
/// An ECDSA signature with the corresponding hash type. /// An ECDSA signature with the corresponding hash type.
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]

View File

@ -15,7 +15,6 @@ pub mod hash;
pub mod merkleblock; pub mod merkleblock;
pub mod psbt; pub mod psbt;
pub mod taproot; pub mod taproot;
pub mod sighash;
pub(crate) mod endian; pub(crate) mod endian;

View File

@ -21,10 +21,9 @@ use crate::util::psbt::raw;
use crate::util::psbt::serialize::Deserialize; use crate::util::psbt::serialize::Deserialize;
use crate::util::psbt::{Error, error}; use crate::util::psbt::{Error, error};
use crate::util::key::PublicKey; use crate::util::key::PublicKey;
use crate::util::sighash::{NonStandardSighashType, SighashTypeParseError, EcdsaSighashType, SchnorrSighashType}; use crate::sighash::{NonStandardSighashType, SighashTypeParseError, EcdsaSighashType, SchnorrSighashType};
use crate::util::taproot::{ControlBlock, LeafVersion, TapLeafHash, TapBranchHash}; use crate::util::taproot::{ControlBlock, LeafVersion, TapLeafHash, TapBranchHash};
use crate::util::sighash; use crate::{sighash, EcdsaSig, SchnorrSig};
use crate::{EcdsaSig, SchnorrSig};
/// Type: Non-Witness UTXO PSBT_IN_NON_WITNESS_UTXO = 0x00 /// Type: Non-Witness UTXO PSBT_IN_NON_WITNESS_UTXO = 0x00
const PSBT_IN_NON_WITNESS_UTXO: u8 = 0x00; const PSBT_IN_NON_WITNESS_UTXO: u8 = 0x00;

View File

@ -25,9 +25,9 @@ use crate::consensus::{encode, Encodable, Decodable};
use crate::util::bip32::{self, ExtendedPrivKey, ExtendedPubKey, KeySource}; use crate::util::bip32::{self, ExtendedPrivKey, ExtendedPubKey, KeySource};
use crate::util::ecdsa::{EcdsaSig, EcdsaSigError}; use crate::util::ecdsa::{EcdsaSig, EcdsaSigError};
use crate::util::key::{PublicKey, PrivateKey}; use crate::util::key::{PublicKey, PrivateKey};
use crate::util::sighash::{self, EcdsaSighashType, SighashCache}; use crate::sighash::{self, EcdsaSighashType, SighashCache};
pub use crate::util::sighash::Prevouts; pub use crate::sighash::Prevouts;
#[macro_use] #[macro_use]
mod macros; mod macros;
@ -1152,7 +1152,7 @@ mod tests {
use crate::util::psbt::map::{Map, Input, Output}; use crate::util::psbt::map::{Map, Input, Output};
use crate::util::psbt::raw; use crate::util::psbt::raw;
use crate::util::psbt::{PartiallySignedTransaction, Error}; use crate::util::psbt::{PartiallySignedTransaction, Error};
use crate::util::sighash::EcdsaSighashType; use crate::sighash::EcdsaSighashType;
use std::collections::BTreeMap; use std::collections::BTreeMap;
use crate::blockdata::witness::Witness; use crate::blockdata::witness::Witness;
use crate::internal_macros::hex_script; use crate::internal_macros::hex_script;