@@ -86,6 +86,7 @@ impl ShieldedHDWallet {
86
86
#[ cfg( test) ]
87
87
mod tests {
88
88
use super :: * ;
89
+ use crate :: crypto:: bip39;
89
90
use masp_primitives:: sapling:: PaymentAddress ;
90
91
use wasm_bindgen_test:: * ;
91
92
@@ -134,4 +135,36 @@ mod tests {
134
135
assert_eq ! ( xsk. expsk. to_bytes( ) . len( ) , KEY_SIZE ) ;
135
136
assert_eq ! ( xfvk. fvk. to_bytes( ) . len( ) , KEY_SIZE ) ;
136
137
}
138
+
139
+ #[ wasm_bindgen_test]
140
+ fn can_restore_keys_from_mnemonic ( ) {
141
+ let phrase = "great sphere inmate december menu warrior adjust glass flat heavy act mail" ;
142
+ let mnemonic = bip39:: Mnemonic :: from_phrase ( phrase. into ( ) ) . unwrap ( ) ;
143
+ let seed = mnemonic
144
+ . to_seed ( None )
145
+ . expect ( "Should return seed from mnemonic phrase" ) ;
146
+
147
+ let shielded_wallet = ShieldedHDWallet :: new ( JsValue :: from ( seed) )
148
+ . expect ( "Instantiating ShieldedHDWallet should not fail" ) ;
149
+
150
+ let shielded_account = shielded_wallet
151
+ . derive ( vec ! [ 32 , 877 , 0 ] , None )
152
+ . expect ( "Deriving from ExtendedKeys should not fail" ) ;
153
+
154
+ let payment_address = PaymentAddress :: try_from_slice ( & shielded_account. payment_address ( ) )
155
+ . expect ( "should instantiate from serialized bytes" ) ;
156
+ let xfvk = ExtendedFullViewingKey :: try_from_slice ( & shielded_account. xfvk ( ) )
157
+ . expect ( "should instantiate from serialized bytes" ) ;
158
+
159
+ assert_eq ! ( payment_address. to_string( ) , "0a918bd974d1abddcc2e15eddec2557abae385ed59fb3089ed4aff418819a63bf4a7890591ff107a2b7569" ) ;
160
+ assert_eq ! (
161
+ xfvk. fvk. to_string( ) ,
162
+ format!(
163
+ "{}{}{}" ,
164
+ "9f89bdaf176f8528f43303ae793ce128af3436902a39ebbe46509f6fef11eb" ,
165
+ "585270060da4c12f1a52b63c7c6906dddcabb0ecd00735e11b0d7cbee277342dd89a10e9c7" ,
166
+ "e69bca34b50a3c8525bbee96347a7cadfd6c32d3af5b92ad1ecf07da"
167
+ )
168
+ ) ;
169
+ }
137
170
}
0 commit comments