1
1
// Bitcoin Dev Kit
2
2
// Written in 2020 by Alekos Filini <alekos.filini@gmail.com>
3
3
//
4
- // Copyright (c) 2020-2021 Bitcoin Dev Kit Developers
4
+ // Copyright (c) 2020-2025 Bitcoin Dev Kit Developers
5
5
//
6
6
// This file is licensed under the Apache License, Version 2.0 <LICENSE-APACHE
7
7
// or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
15
15
// something that should be fairly simple to re-implement.
16
16
17
17
use alloc:: string:: String ;
18
- use bitcoin:: bip32;
19
- use bitcoin:: Network ;
20
18
19
+ use bitcoin:: { bip32, Network } ;
21
20
use miniscript:: ScriptContext ;
22
21
22
+ use super :: {
23
+ any_network_kind, DerivableKey , DescriptorKey , ExtendedKey , GeneratableKey , GeneratedKey ,
24
+ KeyError ,
25
+ } ;
26
+
23
27
pub use bip39:: { Error , Language , Mnemonic } ;
24
28
25
29
type Seed = [ u8 ; 64 ] ;
@@ -38,20 +42,16 @@ pub enum WordCount {
38
42
Words24 = 256 ,
39
43
}
40
44
41
- use super :: {
42
- any_network, DerivableKey , DescriptorKey , ExtendedKey , GeneratableKey , GeneratedKey , KeyError ,
43
- } ;
44
-
45
- fn set_valid_on_any_network < Ctx : ScriptContext > (
45
+ fn set_valid_on_any_network_kind < Ctx : ScriptContext > (
46
46
descriptor_key : DescriptorKey < Ctx > ,
47
47
) -> DescriptorKey < Ctx > {
48
- // We have to pick one network to build the xprv, but since the bip39 standard doesn't
49
- // encode the network, the xprv we create is actually valid everywhere. So we override the
50
- // valid networks with `any_network ()`.
51
- descriptor_key. override_valid_networks ( any_network ( ) )
48
+ // We have to pick one network kind to build the xprv, but since the BIP39 standard doesn't
49
+ // encode the network kind , the xprv we create is actually valid everywhere. So we override the
50
+ // valid network kinds with `any_network_kind ()`.
51
+ descriptor_key. override_valid_network_kinds ( any_network_kind ( ) )
52
52
}
53
53
54
- /// Type for a BIP39 mnemonic with an optional passphrase
54
+ /// Type for a BIP39 mnemonic with an optional passphrase.
55
55
pub type MnemonicWithPassphrase = ( Mnemonic , Option < String > ) ;
56
56
57
57
#[ cfg_attr( docsrs, doc( cfg( feature = "keys-bip39" ) ) ) ]
@@ -69,7 +69,7 @@ impl<Ctx: ScriptContext> DerivableKey<Ctx> for Seed {
69
69
. into_extended_key ( ) ?
70
70
. into_descriptor_key ( source, derivation_path) ?;
71
71
72
- Ok ( set_valid_on_any_network ( descriptor_key) )
72
+ Ok ( set_valid_on_any_network_kind ( descriptor_key) )
73
73
}
74
74
}
75
75
@@ -91,7 +91,7 @@ impl<Ctx: ScriptContext> DerivableKey<Ctx> for MnemonicWithPassphrase {
91
91
. into_extended_key ( ) ?
92
92
. into_descriptor_key ( source, derivation_path) ?;
93
93
94
- Ok ( set_valid_on_any_network ( descriptor_key) )
94
+ Ok ( set_valid_on_any_network_kind ( descriptor_key) )
95
95
}
96
96
}
97
97
@@ -127,7 +127,7 @@ impl<Ctx: ScriptContext> DerivableKey<Ctx> for Mnemonic {
127
127
. into_extended_key ( ) ?
128
128
. into_descriptor_key ( source, derivation_path) ?;
129
129
130
- Ok ( set_valid_on_any_network ( descriptor_key) )
130
+ Ok ( set_valid_on_any_network_kind ( descriptor_key) )
131
131
}
132
132
}
133
133
@@ -145,22 +145,21 @@ impl<Ctx: ScriptContext> GeneratableKey<Ctx> for Mnemonic {
145
145
let entropy = & entropy[ ..( word_count as usize / 8 ) ] ;
146
146
let mnemonic = Mnemonic :: from_entropy_in ( language, entropy) ?;
147
147
148
- Ok ( GeneratedKey :: new ( mnemonic, any_network ( ) ) )
148
+ Ok ( GeneratedKey :: new ( mnemonic, any_network_kind ( ) ) )
149
149
}
150
150
}
151
151
152
152
#[ cfg( test) ]
153
153
mod test {
154
+ use super :: WordCount ;
155
+
154
156
use alloc:: string:: ToString ;
155
157
use core:: str:: FromStr ;
156
158
157
- use bitcoin:: bip32;
158
-
159
159
use bip39:: { Language , Mnemonic } ;
160
+ use bitcoin:: bip32;
160
161
161
- use crate :: keys:: { any_network, GeneratableKey , GeneratedKey } ;
162
-
163
- use super :: WordCount ;
162
+ use crate :: keys:: { any_network_kind, GeneratableKey , GeneratedKey } ;
164
163
165
164
#[ test]
166
165
fn test_keys_bip39_mnemonic ( ) {
@@ -170,10 +169,10 @@ mod test {
170
169
let path = bip32:: DerivationPath :: from_str ( "m/44'/0'/0'/0" ) . unwrap ( ) ;
171
170
172
171
let key = ( mnemonic, path) ;
173
- let ( desc, keys, networks ) = crate :: descriptor!( wpkh( key) ) . unwrap ( ) ;
172
+ let ( desc, keys, network_kinds ) = crate :: descriptor!( wpkh( key) ) . unwrap ( ) ;
174
173
assert_eq ! ( desc. to_string( ) , "wpkh([be83839f/44'/0'/0']xpub6DCQ1YcqvZtSwGWMrwHELPehjWV3f2MGZ69yBADTxFEUAoLwb5Mp5GniQK6tTp3AgbngVz9zEFbBJUPVnkG7LFYt8QMTfbrNqs6FNEwAPKA/0/*)#0r8v4nkv" ) ;
175
174
assert_eq ! ( keys. len( ) , 1 ) ;
176
- assert_eq ! ( networks , any_network ( ) ) ;
175
+ assert_eq ! ( network_kinds , any_network_kind ( ) ) ;
177
176
}
178
177
179
178
#[ test]
@@ -184,10 +183,10 @@ mod test {
184
183
let path = bip32:: DerivationPath :: from_str ( "m/44'/0'/0'/0" ) . unwrap ( ) ;
185
184
186
185
let key = ( ( mnemonic, Some ( "passphrase" . into ( ) ) ) , path) ;
187
- let ( desc, keys, networks ) = crate :: descriptor!( wpkh( key) ) . unwrap ( ) ;
186
+ let ( desc, keys, network_kinds ) = crate :: descriptor!( wpkh( key) ) . unwrap ( ) ;
188
187
assert_eq ! ( desc. to_string( ) , "wpkh([8f6cb80c/44'/0'/0']xpub6DWYS8bbihFevy29M4cbw4ZR3P5E12jB8R88gBDWCTCNpYiDHhYWNywrCF9VZQYagzPmsZpxXpytzSoxynyeFr4ZyzheVjnpLKuse4fiwZw/0/*)#h0j0tg5m" ) ;
189
188
assert_eq ! ( keys. len( ) , 1 ) ;
190
- assert_eq ! ( networks , any_network ( ) ) ;
189
+ assert_eq ! ( network_kinds , any_network_kind ( ) ) ;
191
190
}
192
191
193
192
#[ test]
@@ -198,7 +197,7 @@ mod test {
198
197
crate :: keys:: test:: TEST_ENTROPY ,
199
198
)
200
199
. unwrap ( ) ;
201
- assert_eq ! ( generated_mnemonic. valid_networks , any_network ( ) ) ;
200
+ assert_eq ! ( generated_mnemonic. valid_network_kinds , any_network_kind ( ) ) ;
202
201
assert_eq ! (
203
202
generated_mnemonic. to_string( ) ,
204
203
"primary fetch primary fetch primary fetch primary fetch primary fetch primary fever"
@@ -210,18 +209,18 @@ mod test {
210
209
crate :: keys:: test:: TEST_ENTROPY ,
211
210
)
212
211
. unwrap ( ) ;
213
- assert_eq ! ( generated_mnemonic. valid_networks , any_network ( ) ) ;
212
+ assert_eq ! ( generated_mnemonic. valid_network_kinds , any_network_kind ( ) ) ;
214
213
assert_eq ! ( generated_mnemonic. to_string( ) , "primary fetch primary fetch primary fetch primary fetch primary fetch primary fetch primary fetch primary fetch primary fetch primary fetch primary fetch primary foster" ) ;
215
214
}
216
215
217
216
#[ test]
218
217
fn test_keys_generate_bip39_random ( ) {
219
218
let generated_mnemonic: GeneratedKey < _ , miniscript:: Segwitv0 > =
220
219
Mnemonic :: generate ( ( WordCount :: Words12 , Language :: English ) ) . unwrap ( ) ;
221
- assert_eq ! ( generated_mnemonic. valid_networks , any_network ( ) ) ;
220
+ assert_eq ! ( generated_mnemonic. valid_network_kinds , any_network_kind ( ) ) ;
222
221
223
222
let generated_mnemonic: GeneratedKey < _ , miniscript:: Segwitv0 > =
224
223
Mnemonic :: generate ( ( WordCount :: Words24 , Language :: English ) ) . unwrap ( ) ;
225
- assert_eq ! ( generated_mnemonic. valid_networks , any_network ( ) ) ;
224
+ assert_eq ! ( generated_mnemonic. valid_network_kinds , any_network_kind ( ) ) ;
226
225
}
227
226
}
0 commit comments