Skip to content

Commit a16e5ec

Browse files
committed
secret keys: debug output only when hashes is enabled
1 parent 5d2149f commit a16e5ec

File tree

2 files changed

+11
-26
lines changed

2 files changed

+11
-26
lines changed

src/key.rs

+5-2
Original file line numberDiff line numberDiff line change
@@ -1705,12 +1705,15 @@ mod test {
17051705
}
17061706

17071707
#[test]
1708-
#[cfg(all(feature = "rand", feature = "alloc"))]
1708+
#[cfg(all(feature = "rand", feature = "alloc", not(feature = "hashes")))]
17091709
fn test_debug_output() {
17101710
let s = Secp256k1::new();
17111711
let (sk, _) = s.generate_keypair(&mut StepRng::new(1, 1));
17121712

1713-
assert_eq!(&format!("{:?}", sk), "SecretKey(#d3e0c51a23169bb5)");
1713+
assert_eq!(
1714+
&format!("{:?}", sk),
1715+
"<secret key; enable `hashes` feature of `secp256k1` to display fingerprint>"
1716+
);
17141717

17151718
let mut buf = [0u8; constants::SECRET_KEY_SIZE * 2];
17161719
assert_eq!(

src/secret.rs

+6-24
Original file line numberDiff line numberDiff line change
@@ -11,28 +11,7 @@ use crate::to_hex;
1111
macro_rules! impl_display_secret {
1212
// Default hasher exists only in standard library and not alloc
1313
($thing:ident) => {
14-
#[cfg(feature = "std")]
15-
impl core::fmt::Debug for $thing {
16-
fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
17-
use core::hash::Hasher;
18-
const DEBUG_HASH_TAG: &[u8] = &[
19-
0x66, 0xa6, 0x77, 0x1b, 0x9b, 0x6d, 0xae, 0xa1, 0xb2, 0xee, 0x4e, 0x07, 0x49,
20-
0x4a, 0xac, 0x87, 0xa9, 0xb8, 0x5b, 0x4b, 0x35, 0x02, 0xaa, 0x6d, 0x0f, 0x79,
21-
0xcb, 0x63, 0xe6, 0xf8, 0x66, 0x22,
22-
]; // =SHA256(b"rust-secp256k1DEBUG");
23-
24-
let mut hasher = std::collections::hash_map::DefaultHasher::new();
25-
26-
hasher.write(DEBUG_HASH_TAG);
27-
hasher.write(DEBUG_HASH_TAG);
28-
hasher.write(&self.secret_bytes());
29-
let hash = hasher.finish();
30-
31-
f.debug_tuple(stringify!($thing)).field(&format_args!("#{:016x}", hash)).finish()
32-
}
33-
}
34-
35-
#[cfg(all(not(feature = "std"), feature = "hashes"))]
14+
#[cfg(feature = "hashes")]
3615
impl ::core::fmt::Debug for $thing {
3716
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
3817
use hashes::{sha256, Hash, HashEngine};
@@ -50,10 +29,13 @@ macro_rules! impl_display_secret {
5029
}
5130
}
5231

53-
#[cfg(all(not(feature = "std"), not(feature = "hashes")))]
32+
#[cfg(not(feature = "hashes"))]
5433
impl ::core::fmt::Debug for $thing {
5534
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
56-
write!(f, "<secret requires std or hashes feature to display>")
35+
write!(
36+
f,
37+
"<secret key; enable `hashes` feature of `secp256k1` to display fingerprint>"
38+
)
5739
}
5840
}
5941
};

0 commit comments

Comments
 (0)