secret keys: debug output only when `hashes` is enabled

This commit is contained in:
Andrew Poelstra 2024-08-25 15:21:42 +00:00
parent 5d2149f60d
commit a16e5ecd49
No known key found for this signature in database
GPG Key ID: C588D63CE41B97C1
2 changed files with 11 additions and 26 deletions

View File

@ -1705,12 +1705,15 @@ mod test {
} }
#[test] #[test]
#[cfg(all(feature = "rand", feature = "alloc"))] #[cfg(all(feature = "rand", feature = "alloc", not(feature = "hashes")))]
fn test_debug_output() { fn test_debug_output() {
let s = Secp256k1::new(); let s = Secp256k1::new();
let (sk, _) = s.generate_keypair(&mut StepRng::new(1, 1)); let (sk, _) = s.generate_keypair(&mut StepRng::new(1, 1));
assert_eq!(&format!("{:?}", sk), "SecretKey(#d3e0c51a23169bb5)"); assert_eq!(
&format!("{:?}", sk),
"<secret key; enable `hashes` feature of `secp256k1` to display fingerprint>"
);
let mut buf = [0u8; constants::SECRET_KEY_SIZE * 2]; let mut buf = [0u8; constants::SECRET_KEY_SIZE * 2];
assert_eq!( assert_eq!(

View File

@ -11,28 +11,7 @@ use crate::to_hex;
macro_rules! impl_display_secret { macro_rules! impl_display_secret {
// Default hasher exists only in standard library and not alloc // Default hasher exists only in standard library and not alloc
($thing:ident) => { ($thing:ident) => {
#[cfg(feature = "std")] #[cfg(feature = "hashes")]
impl core::fmt::Debug for $thing {
fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
use core::hash::Hasher;
const DEBUG_HASH_TAG: &[u8] = &[
0x66, 0xa6, 0x77, 0x1b, 0x9b, 0x6d, 0xae, 0xa1, 0xb2, 0xee, 0x4e, 0x07, 0x49,
0x4a, 0xac, 0x87, 0xa9, 0xb8, 0x5b, 0x4b, 0x35, 0x02, 0xaa, 0x6d, 0x0f, 0x79,
0xcb, 0x63, 0xe6, 0xf8, 0x66, 0x22,
]; // =SHA256(b"rust-secp256k1DEBUG");
let mut hasher = std::collections::hash_map::DefaultHasher::new();
hasher.write(DEBUG_HASH_TAG);
hasher.write(DEBUG_HASH_TAG);
hasher.write(&self.secret_bytes());
let hash = hasher.finish();
f.debug_tuple(stringify!($thing)).field(&format_args!("#{:016x}", hash)).finish()
}
}
#[cfg(all(not(feature = "std"), feature = "hashes"))]
impl ::core::fmt::Debug for $thing { impl ::core::fmt::Debug for $thing {
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
use hashes::{sha256, Hash, HashEngine}; use hashes::{sha256, Hash, HashEngine};
@ -50,10 +29,13 @@ macro_rules! impl_display_secret {
} }
} }
#[cfg(all(not(feature = "std"), not(feature = "hashes")))] #[cfg(not(feature = "hashes"))]
impl ::core::fmt::Debug for $thing { impl ::core::fmt::Debug for $thing {
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
write!(f, "<secret requires std or hashes feature to display>") write!(
f,
"<secret key; enable `hashes` feature of `secp256k1` to display fingerprint>"
)
} }
} }
}; };