Implement `Hash` for all array newtypes

* implements `Hash` as part of the newtype macro
* removes type-specific implementations
This commit is contained in:
elsirion 2021-11-04 15:48:08 +01:00
parent 24a9c9c765
commit 75b49efb3d
No known key found for this signature in database
GPG Key ID: B3005E571AA314DA
2 changed files with 7 additions and 19 deletions

View File

@ -36,7 +36,7 @@ pub mod types;
#[cfg(feature = "recovery")] #[cfg(feature = "recovery")]
pub mod recovery; pub mod recovery;
use core::{hash, slice, ptr}; use core::{slice, ptr};
use types::*; use types::*;
/// Flag for context to enable no precomputation /// Flag for context to enable no precomputation
@ -133,12 +133,6 @@ impl PublicKey {
} }
} }
impl hash::Hash for PublicKey {
fn hash<H: hash::Hasher>(&self, state: &mut H) {
state.write(&self.0)
}
}
/// Library-internal representation of a Secp256k1 signature /// Library-internal representation of a Secp256k1 signature
#[repr(C)] #[repr(C)]
pub struct Signature([c_uchar; 64]); pub struct Signature([c_uchar; 64]);
@ -210,12 +204,6 @@ impl XOnlyPublicKey {
} }
} }
impl hash::Hash for XOnlyPublicKey {
fn hash<H: hash::Hasher>(&self, state: &mut H) {
state.write(&self.0)
}
}
#[repr(C)] #[repr(C)]
pub struct KeyPair([c_uchar; 96]); pub struct KeyPair([c_uchar; 96]);
impl_array_newtype!(KeyPair, c_uchar, 96); impl_array_newtype!(KeyPair, c_uchar, 96);
@ -251,12 +239,6 @@ impl KeyPair {
} }
} }
impl hash::Hash for KeyPair {
fn hash<H: hash::Hasher>(&self, state: &mut H) {
state.write(&self.0)
}
}
extern "C" { extern "C" {
/// Default ECDH hash function /// Default ECDH hash function
#[cfg_attr(not(rust_secp_no_symbol_renaming), link_name = "rustsecp256k1_v0_4_1_ecdh_hash_function_default")] #[cfg_attr(not(rust_secp_no_symbol_renaming), link_name = "rustsecp256k1_v0_4_1_ecdh_hash_function_default")]

View File

@ -61,6 +61,12 @@ macro_rules! impl_array_newtype {
impl Eq for $thing {} impl Eq for $thing {}
impl ::core::hash::Hash for $thing {
fn hash<H: ::core::hash::Hasher>(&self, state: &mut H) {
(&self[..]).hash(state)
}
}
impl PartialOrd for $thing { impl PartialOrd for $thing {
#[inline] #[inline]
fn partial_cmp(&self, other: &$thing) -> Option<::core::cmp::Ordering> { fn partial_cmp(&self, other: &$thing) -> Option<::core::cmp::Ordering> {