Skip to content

Commit bea8cde

Browse files
committed
use hex-conservative 1.0 rc1 everywhere for decoding
It turns out we only ever use do decoding of fixed test vectors. It would be nice to have a hex! macro for this. Eventually. In some cases we were able to use inherent methods on bitcoin types -- for example ScriptBuf::from_hex or deserialize_hex.
1 parent 6d1da92 commit bea8cde

16 files changed

+55
-127
lines changed

Cargo-minimal.lock

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ dependencies = [
5252
"bitcoin-io",
5353
"bitcoin-units",
5454
"bitcoin_hashes",
55-
"hex-conservative",
55+
"hex-conservative 0.2.1",
5656
"hex_lit",
5757
"secp256k1",
5858
"serde",
@@ -90,7 +90,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
9090
checksum = "bb18c03d0db0247e147a21a6faafd5a7eb851c743db062de72018b6b7e8e4d16"
9191
dependencies = [
9292
"bitcoin-io",
93-
"hex-conservative",
93+
"hex-conservative 0.2.1",
9494
"serde",
9595
]
9696

@@ -136,6 +136,12 @@ dependencies = [
136136
"arrayvec",
137137
]
138138

139+
[[package]]
140+
name = "hex-conservative"
141+
version = "1.0.0-rc.1"
142+
source = "registry+https://github.com/rust-lang/crates.io-index"
143+
checksum = "2bed36619564f5293a0113d1c29000cca879b8d3813e92983e50551668ccfd08"
144+
139145
[[package]]
140146
name = "hex_lit"
141147
version = "0.1.1"
@@ -196,6 +202,7 @@ version = "13.0.0"
196202
dependencies = [
197203
"bech32",
198204
"bitcoin",
205+
"hex-conservative 1.0.0-rc.1",
199206
"secp256k1",
200207
"serde",
201208
"serde_test",

Cargo-recent.lock

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ dependencies = [
5252
"bitcoin-io",
5353
"bitcoin-units",
5454
"bitcoin_hashes",
55-
"hex-conservative",
55+
"hex-conservative 0.2.1",
5656
"hex_lit",
5757
"secp256k1",
5858
"serde",
@@ -90,7 +90,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
9090
checksum = "bb18c03d0db0247e147a21a6faafd5a7eb851c743db062de72018b6b7e8e4d16"
9191
dependencies = [
9292
"bitcoin-io",
93-
"hex-conservative",
93+
"hex-conservative 0.2.1",
9494
"serde",
9595
]
9696

@@ -136,6 +136,12 @@ dependencies = [
136136
"arrayvec",
137137
]
138138

139+
[[package]]
140+
name = "hex-conservative"
141+
version = "1.0.0-rc.1"
142+
source = "registry+https://github.com/rust-lang/crates.io-index"
143+
checksum = "2bed36619564f5293a0113d1c29000cca879b8d3813e92983e50551668ccfd08"
144+
139145
[[package]]
140146
name = "hex_lit"
141147
version = "0.1.1"
@@ -196,6 +202,7 @@ version = "13.0.0"
196202
dependencies = [
197203
"bech32",
198204
"bitcoin",
205+
"hex-conservative 1.0.0-rc.1",
199206
"secp256k1",
200207
"serde",
201208
"serde_test",

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ base64 = ["bitcoin/base64"]
2424
[dependencies]
2525
bech32 = { version = "0.11.0", default-features = false, features = ["alloc"] }
2626
bitcoin = { version = "0.32.0", default-features = false }
27+
hex = { package = "hex-conservative", default-features = false, features = ["alloc"], version = "1.0.0-rc.1" }
2728

2829
serde = { version = "1.0.103", optional = true }
2930

examples/psbt_sign_finalize.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@
33
use std::collections::BTreeMap;
44
use std::str::FromStr;
55

6-
use miniscript::bitcoin::consensus::encode::deserialize;
7-
use miniscript::bitcoin::hashes::hex::FromHex;
6+
use miniscript::bitcoin::consensus::encode::deserialize_hex;
87
use miniscript::bitcoin::psbt::{self, Psbt};
98
use miniscript::bitcoin::sighash::SighashCache;
109
//use miniscript::bitcoin::secp256k1; // https://github.com/rust-lang/rust/issues/121684
@@ -71,7 +70,7 @@ fn main() {
7170
};
7271

7372
let hex_tx = "020000000001018ff27041f3d738f5f84fd5ee62f1c5b36afebfb15f6da0c9d1382ddd0eaaa23c0000000000feffffff02b3884703010000001600142ca3b4e53f17991582d47b15a053b3201891df5200e1f50500000000220020c0ebf552acd2a6f5dee4e067daaef17b3521e283aeaa44a475278617e3d2238a0247304402207b820860a9d425833f729775880b0ed59dd12b64b9a3d1ab677e27e4d6b370700220576003163f8420fe0b9dc8df726cff22cbc191104a2d4ae4f9dfedb087fcec72012103817e1da42a7701df4db94db8576f0e3605f3ab3701608b7e56f92321e4d8999100000000";
74-
let depo_tx: Transaction = deserialize(&Vec::<u8>::from_hex(hex_tx).unwrap()).unwrap();
73+
let depo_tx: Transaction = deserialize_hex(hex_tx).unwrap();
7574

7675
let receiver = Address::from_str("bcrt1qsdks5za4t6sevaph6tz9ddfjzvhkdkxe9tfrcy")
7776
.unwrap()

fuzz/fuzz_targets/miniscript_satisfy.rs

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -166,27 +166,11 @@ fn main() {
166166

167167
#[cfg(test)]
168168
mod tests {
169-
fn extend_vec_from_hex(hex: &str, out: &mut Vec<u8>) {
170-
let mut b = 0;
171-
for (idx, c) in hex.as_bytes().iter().enumerate() {
172-
b <<= 4;
173-
match *c {
174-
b'A'..=b'F' => b |= c - b'A' + 10,
175-
b'a'..=b'f' => b |= c - b'a' + 10,
176-
b'0'..=b'9' => b |= c - b'0',
177-
_ => panic!("Bad hex"),
178-
}
179-
if (idx & 1) == 1 {
180-
out.push(b);
181-
b = 0;
182-
}
183-
}
184-
}
169+
use miniscript::hex;
185170

186171
#[test]
187172
fn duplicate_crash() {
188-
let mut a = Vec::new();
189-
extend_vec_from_hex("", &mut a);
190-
super::do_test(&a);
173+
let v = hex::decode_to_vec("abcd").unwrap();
174+
super::do_test(&v);
191175
}
192176
}

fuzz/fuzz_targets/roundtrip_concrete.rs

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -30,27 +30,11 @@ fn main() {
3030

3131
#[cfg(test)]
3232
mod tests {
33-
fn extend_vec_from_hex(hex: &str, out: &mut Vec<u8>) {
34-
let mut b = 0;
35-
for (idx, c) in hex.as_bytes().iter().enumerate() {
36-
b <<= 4;
37-
match *c {
38-
b'A'..=b'F' => b |= c - b'A' + 10,
39-
b'a'..=b'f' => b |= c - b'a' + 10,
40-
b'0'..=b'9' => b |= c - b'0',
41-
_ => panic!("Bad hex"),
42-
}
43-
if (idx & 1) == 1 {
44-
out.push(b);
45-
b = 0;
46-
}
47-
}
48-
}
33+
use miniscript::hex;
4934

5035
#[test]
5136
fn duplicate_crash() {
52-
let mut a = Vec::new();
53-
extend_vec_from_hex("048531e80700ae6400670000af5168", &mut a);
54-
super::do_test(&a);
37+
let v = hex::decode_to_vec("abcd").unwrap();
38+
super::do_test(&v);
5539
}
5640
}

fuzz/fuzz_targets/roundtrip_descriptor.rs

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -25,27 +25,11 @@ fn main() {
2525

2626
#[cfg(test)]
2727
mod tests {
28-
fn extend_vec_from_hex(hex: &str, out: &mut Vec<u8>) {
29-
let mut b = 0;
30-
for (idx, c) in hex.as_bytes().iter().enumerate() {
31-
b <<= 4;
32-
match *c {
33-
b'A'..=b'F' => b |= c - b'A' + 10,
34-
b'a'..=b'f' => b |= c - b'a' + 10,
35-
b'0'..=b'9' => b |= c - b'0',
36-
_ => panic!("Bad hex"),
37-
}
38-
if (idx & 1) == 1 {
39-
out.push(b);
40-
b = 0;
41-
}
42-
}
43-
}
28+
use miniscript::hex;
4429

4530
#[test]
46-
fn duplicate_crash3() {
47-
let mut a = Vec::new();
48-
extend_vec_from_hex("747228726970656d616e645f6e5b5c79647228726970656d616e645f6e5b5c7964646464646464646464646464646464646464646464646464646b5f6872702c29", &mut a);
49-
super::do_test(&a);
31+
fn duplicate_crash() {
32+
let v = hex::decode_to_vec("abcd").unwrap();
33+
super::do_test(&v);
5034
}
5135
}

fuzz/fuzz_targets/roundtrip_miniscript_script.rs

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -25,27 +25,11 @@ fn main() {
2525

2626
#[cfg(test)]
2727
mod tests {
28-
fn extend_vec_from_hex(hex: &str, out: &mut Vec<u8>) {
29-
let mut b = 0;
30-
for (idx, c) in hex.as_bytes().iter().enumerate() {
31-
b <<= 4;
32-
match *c {
33-
b'A'..=b'F' => b |= c - b'A' + 10,
34-
b'a'..=b'f' => b |= c - b'a' + 10,
35-
b'0'..=b'9' => b |= c - b'0',
36-
_ => panic!("Bad hex"),
37-
}
38-
if (idx & 1) == 1 {
39-
out.push(b);
40-
b = 0;
41-
}
42-
}
43-
}
28+
use miniscript::hex;
4429

4530
#[test]
46-
fn duplicate_crash3() {
47-
let mut a = Vec::new();
48-
extend_vec_from_hex("1479002d00000020323731363342740000004000000000000000000000000000000000000063630004636363639c00000000000000000000", &mut a);
49-
super::do_test(&a);
31+
fn duplicate_crash() {
32+
let v = hex::decode_to_vec("abcd").unwrap();
33+
super::do_test(&v);
5034
}
5135
}

fuzz/fuzz_targets/roundtrip_miniscript_str.rs

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -30,27 +30,11 @@ fn main() {
3030

3131
#[cfg(test)]
3232
mod tests {
33-
fn extend_vec_from_hex(hex: &str, out: &mut Vec<u8>) {
34-
let mut b = 0;
35-
for (idx, c) in hex.as_bytes().iter().enumerate() {
36-
b <<= 4;
37-
match *c {
38-
b'A'..=b'F' => b |= c - b'A' + 10,
39-
b'a'..=b'f' => b |= c - b'a' + 10,
40-
b'0'..=b'9' => b |= c - b'0',
41-
_ => panic!("Bad hex"),
42-
}
43-
if (idx & 1) == 1 {
44-
out.push(b);
45-
b = 0;
46-
}
47-
}
48-
}
33+
use miniscript::hex;
4934

5035
#[test]
5136
fn duplicate_crash() {
52-
let mut a = Vec::new();
53-
extend_vec_from_hex("1479002d00000020323731363342740000004000000000000000000000000000000000000063630004636363639c00000000000000000000", &mut a);
54-
super::do_test(&a);
37+
let v = hex::decode_to_vec("abcd").unwrap();
38+
super::do_test(&v);
5539
}
5640
}

src/descriptor/mod.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1047,7 +1047,6 @@ mod tests {
10471047
use bitcoin::blockdata::opcodes::all::{OP_CLTV, OP_CSV};
10481048
use bitcoin::blockdata::script::Instruction;
10491049
use bitcoin::blockdata::{opcodes, script};
1050-
use bitcoin::hashes::hex::FromHex;
10511050
use bitcoin::hashes::Hash;
10521051
use bitcoin::script::PushBytes;
10531052
use bitcoin::sighash::EcdsaSighashType;
@@ -1645,7 +1644,7 @@ mod tests {
16451644
.unwrap();
16461645
assert_eq!(
16471646
*descriptor.script_code().unwrap().as_bytes(),
1648-
Vec::<u8>::from_hex("76a9141d0f172a0ecb48aee1be1f2687d2963ae33f71a188ac").unwrap()[..]
1647+
hex::decode_to_vec("76a9141d0f172a0ecb48aee1be1f2687d2963ae33f71a188ac").unwrap()[..]
16491648
);
16501649

16511650
// P2SH-P2WPKH (from bip143 test vectors)
@@ -1655,7 +1654,7 @@ mod tests {
16551654
.unwrap();
16561655
assert_eq!(
16571656
*descriptor.script_code().unwrap().as_bytes(),
1658-
Vec::<u8>::from_hex("76a91479091972186c449eb1ded22b78e40d009bdf008988ac").unwrap()[..]
1657+
hex::decode_to_vec("76a91479091972186c449eb1ded22b78e40d009bdf008988ac").unwrap()[..]
16591658
);
16601659

16611660
// P2WSH (from bitcoind's `createmultisig`)
@@ -1667,7 +1666,7 @@ mod tests {
16671666
*descriptor
16681667
.script_code().unwrap()
16691668
.as_bytes(),
1670-
Vec::<u8>::from_hex("522103789ed0bb717d88f7d321a368d905e7430207ebbd82bd342cf11ae157a7ace5fd2103dbc6764b8884a92e871274b87583e6d5c2a58819473e17e107ef3f6aa5a6162652ae").unwrap()[..]
1669+
hex::decode_to_vec("522103789ed0bb717d88f7d321a368d905e7430207ebbd82bd342cf11ae157a7ace5fd2103dbc6764b8884a92e871274b87583e6d5c2a58819473e17e107ef3f6aa5a6162652ae").unwrap()[..]
16711670
);
16721671

16731672
// P2SH-P2WSH (from bitcoind's `createmultisig`)
@@ -1676,7 +1675,7 @@ mod tests {
16761675
*descriptor
16771676
.script_code().unwrap()
16781677
.as_bytes(),
1679-
Vec::<u8>::from_hex("522103789ed0bb717d88f7d321a368d905e7430207ebbd82bd342cf11ae157a7ace5fd2103dbc6764b8884a92e871274b87583e6d5c2a58819473e17e107ef3f6aa5a6162652ae")
1678+
hex::decode_to_vec("522103789ed0bb717d88f7d321a368d905e7430207ebbd82bd342cf11ae157a7ace5fd2103dbc6764b8884a92e871274b87583e6d5c2a58819473e17e107ef3f6aa5a6162652ae")
16801679
.unwrap()[..]
16811680
);
16821681
}

src/interpreter/inner.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -398,9 +398,9 @@ mod tests {
398398
use core::str::FromStr;
399399

400400
use bitcoin::blockdata::script;
401-
use bitcoin::hashes::hex::FromHex;
402401
use bitcoin::script::PushBytes;
403402
use bitcoin::ScriptBuf;
403+
use hex;
404404

405405
use super::*;
406406

@@ -422,7 +422,7 @@ mod tests {
422422
impl KeyTestData {
423423
fn from_key(key: bitcoin::PublicKey) -> KeyTestData {
424424
// what a funny looking signature..
425-
let dummy_sig_vec = Vec::from_hex(
425+
let dummy_sig_vec = hex::decode_to_vec(
426426
"\
427427
302e02153b78ce563f89a0ed9414f5aa28ad0d96d6795f9c63\
428428
02153b78ce563f89a0ed9414f5aa28ad0d96d6795f9c65\

src/lib.rs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ compile_error!(
8989
"rust-miniscript currently only supports architectures with pointers wider than 16 bits"
9090
);
9191

92-
pub use bitcoin;
92+
pub use {bitcoin, hex};
9393

9494
#[cfg(not(feature = "std"))]
9595
#[macro_use]
@@ -677,10 +677,7 @@ fn push_opcode_size(script_size: usize) -> usize {
677677

678678
/// Helper function used by tests
679679
#[cfg(test)]
680-
fn hex_script(s: &str) -> bitcoin::ScriptBuf {
681-
let v: Vec<u8> = bitcoin::hashes::hex::FromHex::from_hex(s).unwrap();
682-
bitcoin::ScriptBuf::from(v)
683-
}
680+
fn hex_script(s: &str) -> bitcoin::ScriptBuf { bitcoin::ScriptBuf::from_hex(s).unwrap() }
684681

685682
#[cfg(test)]
686683
mod tests {

src/miniscript/mod.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -550,7 +550,6 @@ impl<Ctx: ScriptContext> Miniscript<Ctx::Key, Ctx> {
550550
/// ```rust
551551
/// use miniscript::{Miniscript, Segwitv0, Tap};
552552
/// use miniscript::bitcoin::secp256k1::XOnlyPublicKey;
553-
/// use miniscript::bitcoin::hashes::hex::FromHex;
554553
///
555554
/// type Segwitv0Script = Miniscript<bitcoin::PublicKey, Segwitv0>;
556555
/// type TapScript = Miniscript<XOnlyPublicKey, Tap>;

0 commit comments

Comments
 (0)