@@ -27,37 +27,6 @@ pub fn get_word(idx: u16) -> Result<zeroize::Zeroizing<String>, ()> {
2727
2828// C API
2929
30- /// # Safety
31- ///
32- /// The passphrase must be not NULL and null-terminated.
33- ///
34- /// `seed` must be 16, 24 or 32 bytes long.
35- /// `bip39_seed_out` must be exactly 64 bytes long.
36- /// `root_fingerprint_out` must be exactly 4 bytes long.
37- #[ unsafe( no_mangle) ]
38- pub unsafe extern "C" fn rust_derive_bip39_seed (
39- seed : util:: bytes:: Bytes ,
40- passphrase : * const core:: ffi:: c_char ,
41- mut bip39_seed_out : util:: bytes:: BytesMut ,
42- mut root_fingerprint_out : util:: bytes:: BytesMut ,
43- ) {
44- let mnemonic =
45- bip39:: Mnemonic :: from_entropy_in ( bip39:: Language :: English , seed. as_ref ( ) ) . unwrap ( ) ;
46- let passphrase = unsafe { core:: ffi:: CStr :: from_ptr ( passphrase) } ;
47- let bip39_seed: zeroize:: Zeroizing < [ u8 ; 64 ] > =
48- zeroize:: Zeroizing :: new ( mnemonic. to_seed_normalized ( passphrase. to_str ( ) . unwrap ( ) ) ) ;
49- bip39_seed_out. as_mut ( ) . clone_from_slice ( & bip39_seed[ ..] ) ;
50-
51- let root_fingerprint: [ u8 ; 4 ] =
52- bitcoin:: bip32:: Xpriv :: new_master ( bitcoin:: NetworkKind :: Main , bip39_seed. as_ref ( ) )
53- . unwrap ( )
54- . fingerprint ( crate :: secp256k1:: SECP256K1 )
55- . to_bytes ( ) ;
56- root_fingerprint_out
57- . as_mut ( )
58- . clone_from_slice ( & root_fingerprint) ;
59- }
60-
6130#[ unsafe( no_mangle) ]
6231pub extern "C" fn rust_get_bip39_word ( idx : u16 , mut out : util:: bytes:: BytesMut ) -> bool {
6332 let word = match get_word ( idx) {
@@ -78,80 +47,6 @@ pub extern "C" fn rust_get_bip39_word(idx: u16, mut out: util::bytes::BytesMut)
7847mod tests {
7948 use super :: * ;
8049
81- #[ test]
82- fn test_rust_derive_bip39_seed ( ) {
83- struct Test {
84- seed : & ' static str ,
85- passphrase : & ' static core:: ffi:: CStr ,
86- expected_bip39_seed : & ' static str ,
87- expected_root_fingerprint : & ' static str ,
88- }
89-
90- let tests = & [
91- // 16 byte seed
92- Test {
93- seed : "fb5cf00d5ea61059fa066e25a6be9544" ,
94- passphrase : c"" ,
95- expected_bip39_seed : "f4577e463be595868060e5a763328153155b4167cd284998c8c6096d044742372020f5b052d0c41c1c5e6a6a7da2cb8a367aaaa074fab7773e8d5b2f684257ed" ,
96- expected_root_fingerprint : "0b2fa4e5" ,
97- } ,
98- Test {
99- seed : "fb5cf00d5ea61059fa066e25a6be9544" ,
100- passphrase : c"password" ,
101- expected_bip39_seed : "5922fb7630bc7cb871af102f733b6bdb8f05945147cd4646a89056fde0bdad5c3a4ff5be3f9e7af535f570e7053b5b22472555b331bc89cb797c306f7eb6a5a1" ,
102- expected_root_fingerprint : "c4062d44" ,
103- } ,
104- // 24 byte seed
105- Test {
106- seed : "23705a91b177b49822f28b3f1a60072d113fcaff4f250191" ,
107- passphrase : c"" ,
108- expected_bip39_seed : "4a2a016a6d90eb3a79b7931ca0a172df5c5bfee3e5b47f0fd84bc0791ea3bbc9476c3d5de71cdb12c37e93c2aa3d5c303257f1992aed400fc5bbfc7da787bfa7" ,
109- expected_root_fingerprint : "62fd19e0" ,
110- } ,
111- Test {
112- seed : "23705a91b177b49822f28b3f1a60072d113fcaff4f250191" ,
113- passphrase : c"password" ,
114- expected_bip39_seed : "bc317ee0f88870254be32274d63ec2b0e962bf09f3ca04287912bfc843f2fab7c556f8657cadc924f99a217b0daa91898303a8414102031a125c50023e45a80b" ,
115- expected_root_fingerprint : "c745266d" ,
116- } ,
117- // 32 byte seed
118- Test {
119- seed : "bd83a008b3b78c8cc56c678d1b7bfc651cc5be8242f44b5c0db96a34ee297833" ,
120- passphrase : c"" ,
121- expected_bip39_seed : "63f844e2c61ecfb20f9100de381a7a9ec875b085f5ac7735a2ba4d615a0f4147b87be402f65651969130683deeef752760c09e291604fe4b89d61ffee2630be8" ,
122- expected_root_fingerprint : "93ba3a7b" ,
123- } ,
124- Test {
125- seed : "bd83a008b3b78c8cc56c678d1b7bfc651cc5be8242f44b5c0db96a34ee297833" ,
126- passphrase : c"password" ,
127- expected_bip39_seed : "42e90dacd61f3373542d212f0fb9c291dcea84a6d85034272372dde7188638a98527280d65e41599f30d3434d8ee3d4747dbb84801ff1a851d2306c7d1648374" ,
128- expected_root_fingerprint : "b95c9318" ,
129- } ,
130- ] ;
131-
132- for test in tests {
133- let seed = hex:: decode ( test. seed ) . unwrap ( ) ;
134- let mut bip39_seed = [ 0u8 ; 64 ] ;
135- let mut root_fingerprint = [ 0u8 ; 4 ] ;
136- unsafe {
137- rust_derive_bip39_seed (
138- util:: bytes:: rust_util_bytes ( seed. as_ptr ( ) , seed. len ( ) ) ,
139- test. passphrase . as_ptr ( ) ,
140- util:: bytes:: rust_util_bytes_mut ( bip39_seed. as_mut_ptr ( ) , bip39_seed. len ( ) ) ,
141- util:: bytes:: rust_util_bytes_mut (
142- root_fingerprint. as_mut_ptr ( ) ,
143- root_fingerprint. len ( ) ,
144- ) ,
145- ) ;
146- }
147- assert_eq ! ( hex:: encode( bip39_seed) . as_str( ) , test. expected_bip39_seed) ;
148- assert_eq ! (
149- hex:: encode( root_fingerprint) . as_str( ) ,
150- test. expected_root_fingerprint
151- ) ;
152- }
153- }
154-
15550 #[ test]
15651 fn test_rust_get_bip39_word ( ) {
15752 let mut word = [ 1u8 ; 10 ] ;
0 commit comments