From 613fddc82be3b17696eaf4589d30995ba29f529b Mon Sep 17 00:00:00 2001 From: "Tobin C. Harding" Date: Fri, 7 Feb 2025 07:00:01 +1100 Subject: [PATCH] Delete deprecated sha256t_hash_newtype macro This macro is a maintenance burden. We would like to put a tag on the hash engine but doing so would require breaking this macro anyway so lets just delete it. --- hashes/src/sha256t/mod.rs | 99 --------------------------------------- 1 file changed, 99 deletions(-) diff --git a/hashes/src/sha256t/mod.rs b/hashes/src/sha256t/mod.rs index 6c62846c8..2e7ddf89d 100644 --- a/hashes/src/sha256t/mod.rs +++ b/hashes/src/sha256t/mod.rs @@ -140,105 +140,6 @@ where Hash::from_byte_array(sha256::Hash::from_engine(e).to_byte_array()) } -/// Macro used to define a newtype tagged hash. -/// -/// This macro creates two types: -/// -/// * a tag struct -/// * a hash wrapper -/// -/// The syntax is: -/// -/// ``` -/// # #[allow(deprecated)] { -/// # use bitcoin_hashes::sha256t_hash_newtype; -/// sha256t_hash_newtype! { -/// /// Optional documentation details here. -/// /// Summary is always generated. -/// pub struct FooTag = hash_str("foo"); -/// -/// /// A foo hash. -/// // Direction works just like the hash_newtype! macro. -/// #[hash_newtype(backward)] -/// pub struct FooHash(_); -/// } -/// # } -/// ``` -/// -/// The structs must be defined in this order - tag first, then hash type. `hash_str` marker -/// says the midstate should be generated by hashing the supplied string in a way described in -/// BIP-341. Alternatively, you can supply `hash_bytes` to hash raw bytes. If you have the midstate -/// already pre-computed and prefer **compiler** performance to readability you may use -/// `raw(MIDSTATE_BYTES, HASHED_BYTES_LENGTH)` instead. -/// -/// Both visibility modifiers and attributes are optional and passed to inner structs (excluding -/// `#[hash_newtype(...)]`). The attributes suffer same compiler performance limitations as in -/// [`hash_newtype`] macro. -/// -/// [`hash_newtype`]: crate::hash_newtype -#[macro_export] -#[deprecated(since = "0.15.0", note = "use `sha256_tag!` combined with `hash_newtype!` instead")] -macro_rules! sha256t_hash_newtype { - ($(#[$($tag_attr:tt)*])* $tag_vis:vis struct $tag:ident = $constructor:tt($($tag_value:tt)+); $(#[$($hash_attr:tt)*])* $hash_vis:vis struct $hash_name:ident($(#[$($field_attr:tt)*])* _);) => { - $crate::sha256t_tag_struct!($tag_vis, $tag, stringify!($hash_name), $(#[$($tag_attr)*])*); - - impl $crate::sha256t::Tag for $tag { - #[inline] - fn engine() -> $crate::sha256::HashEngine { - const MIDSTATE: $crate::sha256::Midstate = $crate::sha256t_tag_constructor!($constructor, $($tag_value)+); - $crate::sha256::HashEngine::from_midstate(MIDSTATE) - } - } - - $crate::hash_newtype! { - $(#[$($hash_attr)*])* - $hash_vis struct $hash_name($(#[$($field_attr)*])* $crate::sha256t::Hash<$tag>); - } - - impl $hash_name { - /// Constructs a new engine. - #[allow(unused)] // the user of macro may not need this - pub fn engine() -> <$hash_name as $crate::GeneralHash>::Engine { - <$hash_name as $crate::GeneralHash>::engine() - } - - /// Produces a hash from the current state of a given engine. - #[allow(unused)] // the user of macro may not need this - pub fn from_engine(e: <$hash_name as $crate::GeneralHash>::Engine) -> Self { - <$hash_name as $crate::GeneralHash>::from_engine(e) - } - - /// Hashes some bytes. - #[allow(unused)] // the user of macro may not need this - pub fn hash(data: &[u8]) -> Self { - <$hash_name as $crate::GeneralHash>::hash(data) - } - - /// Hashes all the byte slices retrieved from the iterator together. - #[allow(unused)] // the user of macro may not need this - pub fn hash_byte_chunks(byte_slices: I) -> Self - where - B: AsRef<[u8]>, - I: IntoIterator, - { - <$hash_name as $crate::GeneralHash>::hash_byte_chunks(byte_slices) - } - } - - impl $crate::GeneralHash for $hash_name { - type Engine = <$crate::sha256t::Hash<$tag> as $crate::GeneralHash>::Engine; - - fn engine() -> Self::Engine { - <$crate::sha256t::Hash<$tag> as $crate::GeneralHash>::engine() - } - - fn from_engine(e: Self::Engine) -> $hash_name { - Self::from(<$crate::sha256t::Hash<$tag> as $crate::GeneralHash>::from_engine(e)) - } - } - } -} - // Workaround macros being unavailable in attributes. #[doc(hidden)] #[macro_export]