Skip to content

Commit 05302d1

Browse files
authored
Merge pull request #19 from stevenroose/no-hex
Clean up dependencies a bit
2 parents e3c582c + 63ebf91 commit 05302d1

File tree

7 files changed

+58
-55
lines changed

7 files changed

+58
-55
lines changed

Cargo.toml

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,17 @@ description = "Wallet library for Bitcoin"
1010
keywords = [ "crypto", "bitcoin" ]
1111
readme = "README.md"
1212

13+
[features]
14+
use-serde = ["serde", "bitcoin/use-serde"]
15+
1316
[dependencies]
14-
bitcoin = { version= "0.23", features=["use-serde"]}
15-
rand="0.7"
17+
bitcoin = "0.26"
18+
rand = "0.7"
1619
rust-crypto = "0.2"
17-
serde = "1"
18-
serde_derive = "1"
20+
21+
serde = { version = "1", optional = true, features = ["derive"] }
1922

2023
[dev-dependencies]
21-
bitcoin = { version= "0.23", features=["use-serde", "bitcoinconsensus"]}
22-
serde_json="1"
23-
hex = "0.3"
24+
bitcoin = { version = "0.26", features = ["use-serde", "bitcoinconsensus"] }
25+
serde = { version = "1", features = ["derive"] }
26+
serde_json = "1"

src/account.rs

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,7 @@ impl Unlocker {
307307
Network::Bitcoin => 0,
308308
Network::Testnet => 1,
309309
Network::Regtest => 1,
310+
Network::Signet => 1,
310311
};
311312
let by_coin_type = by_purpose.1.entry(coin_type).or_insert((
312313
self.context
@@ -641,8 +642,9 @@ impl Account {
641642
R: Fn(&OutPoint) -> Option<TxOut>,
642643
{
643644
let mut signed = 0;
645+
//TODO(stevenroose) try to prevent this clone here
644646
let txclone = transaction.clone();
645-
let mut bip143hasher: Option<bip143::SighashComponents> = None;
647+
let mut bip143hasher = bip143::SigHashCache::new(&txclone);
646648
for (ix, input) in transaction.input.iter_mut().enumerate() {
647649
if let Some(spend) = resolver(&input.previous_output) {
648650
if let Some((kix, instantiated)) = self
@@ -680,14 +682,12 @@ impl Account {
680682
return Err(Error::Unsupported("can only sign all inputs for now"));
681683
}
682684
input.script_sig = Script::new();
683-
let hasher =
684-
bip143hasher.unwrap_or(bip143::SighashComponents::new(&txclone));
685-
let sighash = hasher.sighash_all(
686-
&txclone.input[ix],
685+
let sighash = bip143hasher.signature_hash(
686+
ix,
687687
&instantiated.script_code,
688688
spend.value,
689+
hash_type,
689690
);
690-
bip143hasher = Some(hasher);
691691
let signature = self.context.sign(&sighash[..], &pk)?.serialize_der();
692692
let mut with_hashtype = signature.to_vec();
693693
with_hashtype.push(hash_type.as_u32() as u8);
@@ -712,14 +712,12 @@ impl Account {
712712
.into_script()[..],
713713
)
714714
.into_script();
715-
let hasher =
716-
bip143hasher.unwrap_or(bip143::SighashComponents::new(&txclone));
717-
let sighash = hasher.sighash_all(
718-
&txclone.input[ix],
715+
let sighash = bip143hasher.signature_hash(
716+
ix,
719717
&instantiated.script_code,
720718
spend.value,
719+
hash_type,
721720
);
722-
bip143hasher = Some(hasher);
723721
let signature = self.context.sign(&sighash[..], &pk)?.serialize_der();
724722
let mut with_hashtype = signature.to_vec();
725723
with_hashtype.push(hash_type.as_u32() as u8);
@@ -733,14 +731,12 @@ impl Account {
733731
return Err(Error::Unsupported("can only sign all inputs for now"));
734732
}
735733
input.script_sig = Script::new();
736-
let hasher =
737-
bip143hasher.unwrap_or(bip143::SighashComponents::new(&txclone));
738-
let sighash = hasher.sighash_all(
739-
&txclone.input[ix],
734+
let sighash = bip143hasher.signature_hash(
735+
ix,
740736
&instantiated.script_code,
741737
spend.value,
738+
hash_type,
742739
);
743-
bip143hasher = Some(hasher);
744740
let signature = self.context.sign(&sighash[..], &pk)?.serialize_der();
745741
let mut with_hashtype = signature.to_vec();
746742
with_hashtype.push(hash_type.as_u32() as u8);
@@ -758,7 +754,8 @@ impl Account {
758754
}
759755

760756
/// instantiated key of an account
761-
#[derive(Clone, Serialize, Deserialize)]
757+
#[derive(Clone)]
758+
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
762759
pub struct InstantiatedKey {
763760
pub public: PublicKey,
764761
pub script_code: Script,
@@ -788,10 +785,15 @@ impl InstantiatedKey {
788785
context.tweak_exp_add(&mut public, tweak)?;
789786
}
790787
let script_code = scripter(&public, csv);
788+
assert!(public.compressed);
791789
let address = match address_type {
792790
AccountAddressType::P2PKH => Address::p2pkh(&public, network),
793-
AccountAddressType::P2SHWPKH => Address::p2shwpkh(&public, network),
794-
AccountAddressType::P2WPKH => Address::p2wpkh(&public, network),
791+
AccountAddressType::P2SHWPKH => {
792+
Address::p2shwpkh(&public, network).expect("compressed pubkey")
793+
}
794+
AccountAddressType::P2WPKH => {
795+
Address::p2wpkh(&public, network).expect("compressed pubkey")
796+
}
795797
AccountAddressType::P2WSH(_) => Address::p2wsh(&script_code, network),
796798
};
797799
Ok(InstantiatedKey {
@@ -880,12 +882,12 @@ mod test {
880882
use std::io::Read;
881883
use std::path::PathBuf;
882884

885+
use bitcoin::hashes::hex::FromHex;
883886
use bitcoin::blockdata::opcodes::all;
884887
use bitcoin::blockdata::script::Builder;
885888
use bitcoin::blockdata::transaction::{OutPoint, TxIn, TxOut};
886889
use bitcoin::network::constants::Network;
887890
use bitcoin::util::bip32::ChildNumber;
888-
use hex::decode;
889891
use rand::Rng;
890892
use serde_json::Value;
891893

@@ -1352,7 +1354,7 @@ mod test {
13521354
let json: Value = serde_json::from_str(&data).unwrap();
13531355
let tests = json.as_array().unwrap();
13541356
for test in tests {
1355-
let seed = Seed(decode(test["seed"].as_str().unwrap()).unwrap());
1357+
let seed = Seed(Vec::<u8>::from_hex(test["seed"].as_str().unwrap()).unwrap());
13561358
let master_private = context.master_private_key(Network::Bitcoin, &seed).unwrap();
13571359
assert_eq!(
13581360
test["private"].as_str().unwrap(),

src/coins.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@
2020
2121
use std::collections::HashMap;
2222

23-
use bitcoin::Block;
24-
use bitcoin::{OutPoint, Script, Transaction, TxOut};
23+
use bitcoin::{Block, OutPoint, Script, Transaction, TxOut};
2524
use rand::thread_rng;
2625

2726
use account::{KeyDerivation, MasterAccount};
@@ -321,11 +320,12 @@ mod test {
321320
time::{SystemTime, UNIX_EPOCH},
322321
};
323322

323+
use bitcoin::hashes::hex::FromHex;
324324
use bitcoin::blockdata::constants::genesis_block;
325325
use bitcoin::blockdata::script::Builder;
326326
use bitcoin::util::bip32::ExtendedPubKey;
327327
use bitcoin::{
328-
network::constants::Network, Address, BitcoinHash, Block, BlockHeader, OutPoint,
328+
network::constants::Network, Address, Block, BlockHeader, OutPoint,
329329
Transaction, TxIn, TxOut,
330330
};
331331

@@ -378,7 +378,7 @@ mod test {
378378

379379
fn new_master() -> MasterAccount {
380380
let mut master = MasterAccount::from_encrypted(
381-
hex::decode("e541bc73d9990b290cc4a8d8ff4592183171d1808a32695b1835aa3c12f50f34849a0dc5b730c507f19f22af393b5e5453e0974977922dbba513dadf81d364d8e204209ea02af35693b49b3b09191f01").unwrap().as_slice(),
381+
Vec::<u8>::from_hex("e541bc73d9990b290cc4a8d8ff4592183171d1808a32695b1835aa3c12f50f34849a0dc5b730c507f19f22af393b5e5453e0974977922dbba513dadf81d364d8e204209ea02af35693b49b3b09191f01").unwrap().as_slice(),
382382
ExtendedPubKey::from_str("tpubD6NzVbkrYhZ4YUqaTmpewwbvSoA4dkwzGzvwGcUbwbRyu8i6dCSroCsvFmC6qzQgJxddMfA6Mg8r6XmkJVhQ8ihAWzfRBYTG5o28AC5HWX2").unwrap(),
383383
1567260002);
384384
let mut unlocker = Unlocker::new_for_master(&master, "whatever").unwrap();
@@ -406,10 +406,10 @@ mod test {
406406
.address
407407
.clone();
408408
let genesis = genesis_block(Network::Testnet);
409-
let next = mine(&genesis.bitcoin_hash(), 1, miner);
409+
let next = mine(&genesis.block_hash(), 1, miner);
410410
coins.process(&mut master, &next);
411411
assert_eq!(coins.confirmed_balance(), NEW_COINS);
412-
coins.unwind_tip(&next.bitcoin_hash());
412+
coins.unwind_tip(&next.block_hash());
413413
assert_eq!(coins.confirmed_balance(), 0);
414414
}
415415
}

src/lib.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,14 @@
2121
#![deny(unused_must_use)]
2222
#![forbid(unsafe_code)]
2323

24-
extern crate bitcoin;
25-
extern crate crypto;
26-
#[cfg(test)]
27-
extern crate hex;
24+
pub extern crate bitcoin;
25+
pub extern crate crypto;
2826
extern crate rand;
29-
extern crate serde;
27+
28+
#[cfg(feature = "serde")]
3029
#[macro_use]
31-
extern crate serde_derive;
30+
extern crate serde;
31+
3232
#[cfg(test)]
3333
extern crate serde_json;
3434

src/mnemonic.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -167,8 +167,8 @@ mod test {
167167
use std::io::Read;
168168
use std::path::PathBuf;
169169

170+
use bitcoin::hashes::hex::FromHex;
170171
use bitcoin::network::constants::Network;
171-
use hex::decode;
172172
use serde_json::Value;
173173

174174
use context::SecpContext;
@@ -191,15 +191,15 @@ mod test {
191191

192192
for t in 0..tests.len() {
193193
let values = tests[t].as_array().unwrap();
194-
let data = decode(values[0].as_str().unwrap()).unwrap();
194+
let data = Vec::<u8>::from_hex(values[0].as_str().unwrap()).unwrap();
195195
let m = values[1].as_str().unwrap();
196196
let mnemonic = Mnemonic::from_str(m).unwrap();
197197
let seed = mnemonic.to_seed(Some("TREZOR"));
198198
assert_eq!(
199199
mnemonic.to_string(),
200200
Mnemonic::new(data.as_slice()).unwrap().to_string()
201201
);
202-
assert_eq!(seed.0, decode(values[2].as_str().unwrap()).unwrap());
202+
assert_eq!(seed.0, Vec::<u8>::from_hex(values[2].as_str().unwrap()).unwrap());
203203

204204
if values.len() == 4 {
205205
let pk = values[3].as_str().unwrap();

src/proved.rs

Lines changed: 7 additions & 5 deletions
Large diffs are not rendered by default.

src/sss.rs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -678,6 +678,7 @@ mod test {
678678
use std::collections::HashSet;
679679
use std::str::FromStr;
680680

681+
use bitcoin::hashes::hex::ToHex;
681682
use bitcoin::network::constants::Network;
682683
use bitcoin::Address;
683684
use rand::{thread_rng, Rng};
@@ -822,13 +823,8 @@ mod test {
822823
.iter()
823824
.map(|v| Share::from_mnemonic(v.as_str().unwrap()).unwrap())
824825
.collect::<Vec<_>>();
825-
assert_eq!(
826-
result,
827-
hex::encode(
828-
ShamirSecretSharing::combine(&shares, Some("TREZOR"))
829-
.unwrap()
830-
.0
831-
)
826+
assert_eq!(result,
827+
ShamirSecretSharing::combine(&shares, Some("TREZOR")).unwrap().0.to_hex(),
832828
);
833829
}
834830
}

0 commit comments

Comments
 (0)