Skip to content

Commit 443cc87

Browse files
committed
Merge #81: elip151: use correct tag
7469bfe elip151: tests: check blinding key from spec (Leonardo Comandini) 2a00c3d elip151: tests: empty hash (Leonardo Comandini) 92eba51 elip151: use correct tag (Leonardo Comandini) Pull request description: Fixes a regression introduced in b8ceef7 And add tests to make sure it does not happen again. ACKs for top commit: apoelstra: ACK 7469bfe Tree-SHA512: 8d9d81f29af5830cffed6a06ed9d7779c346956b2343598437ef5b7a42aa4939effe80484a4f31559beaaaeb5dd81cc8d606749623c99aacda17b35a15ecb6b4
2 parents 759b0cf + 7469bfe commit 443cc87

File tree

1 file changed

+11
-5
lines changed

1 file changed

+11
-5
lines changed

src/confidential/elip151.rs

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ use crate::extensions::{Extension, ParseableExt};
3030
use crate::{Descriptor as OrdinaryDescriptor, DescriptorPublicKey, Error};
3131

3232
sha256t_hash_newtype! {
33-
pub struct Elip151Tag = hash_str("ELIP-151 Deterministic descriptor blinding keys");
33+
pub struct Elip151Tag = hash_str("Deterministic-View-Key/1.0");
3434
/// ELIP-151 Deterministic descriptor blinding keys
3535
#[hash_newtype(forward)]
3636
pub struct Elip151Hash(_);
@@ -103,7 +103,7 @@ impl<T: Extension + ParseableExt> ConfidentialDescriptor<DescriptorPublicKey, T>
103103
mod test {
104104
use super::*;
105105
use crate::descriptor::checksum::desc_checksum;
106-
use bitcoin::hashes::{sha256, HashEngine};
106+
use bitcoin::hashes::{sha256, HashEngine, sha256t::Tag};
107107
use std::str::FromStr;
108108

109109
/// The SHA-256 initial midstate value for the [`Elip151Hash`].
@@ -121,6 +121,11 @@ mod test {
121121
engine.input(&tag_hash[..]);
122122
engine.input(&tag_hash[..]);
123123
assert_eq!(MIDSTATE_ELIP151, engine.midstate().to_byte_array());
124+
125+
// Test empty hash
126+
let expected = "dcd8403dcf5af960f69fa41d114931a840877dfb5378046018f78ea894a36ebd";
127+
assert_eq!(Elip151Hash::from_engine(Elip151Tag::engine()).to_string(), expected);
128+
assert_eq!(Elip151Hash::hash(&[]).to_string(), expected);
124129
}
125130

126131
fn add_checksum(desc: &str) -> String {
@@ -168,15 +173,16 @@ mod test {
168173
let pubkey = "03d902f35f560e0470c63313c7369168d9d7df2d49bf295fd9fb7cb109ccee0494";
169174

170175
let mut _i = 0;
171-
for desc in [
172-
&format!("elwpkh({xpub}/<0;1>/*)"),
173-
&format!("elwpkh({xpub}/0/*)"),
176+
for (desc, key) in [
177+
(&format!("elwpkh({xpub}/<0;1>/*)"), "b3baf94d60cf8423cd257283575997a2c00664ced3e8de00f8726703142b1989"),
178+
(&format!("elwpkh({xpub}/0/*)"), "de9c5fb624154624146a8aea0489b30f05c720eed6b493b1f3ab63405a11bf37"),
174179
] {
175180
let conf_desc = confidential_descriptor(desc).unwrap();
176181
let elip151_desc = add_checksum(&format!("ct(elip151,{})", desc));
177182
let conf_desc_elip151 =
178183
ConfidentialDescriptor::<DescriptorPublicKey>::from_str(&elip151_desc).unwrap();
179184
assert_eq!(conf_desc, conf_desc_elip151);
185+
assert_eq!(conf_desc.key.to_string(), key);
180186

181187
// Uncomment this and below to regenerate test vectors; to see the output, run
182188
// cargo test test_vectors_elip151 -- --nocapture

0 commit comments

Comments
 (0)