diff --git a/examples/test.rs b/examples/test.rs index 3c92ef6..9265f4e 100644 --- a/examples/test.rs +++ b/examples/test.rs @@ -6,7 +6,7 @@ use std::ffi::{CStr, CString}; use std::os::raw::c_char; -use rustwallet::{new_wallet, get_address, restore_wallet, free_cwallet, sign, CWallet}; +use rustwallet::{new_wallet, get_address, restore_wallet, reset_wallet, free_cwallet, sign, CWallet}; macro_rules! print_cchar{ ($p1:expr) => ( @@ -70,8 +70,13 @@ fn main() { let address3 = get_address(&tmp_cwallet2); print_cchar!(address3); - let sign = sign(&tmp_cwallet2,str_to_cchar!("111")); - print_cchar!(sign); + let sign_str = sign(&tmp_cwallet2,str_to_cchar!("111")); + print_cchar!(sign_str); + + let cwallet3 = reset_wallet(&tmp_cwallet2); + print_wallet(&cwallet3); + let sign_str2 = sign(&cwallet3, str_to_cchar!("111")); + print_cchar!(sign_str2); // print_wallet(&tmp_cwallet2); // println!("---- saving the wallet to wallet.json ----"); // save_wallet(&wallet); diff --git a/src/lib.rs b/src/lib.rs index b73c567..5d5dc74 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -102,6 +102,15 @@ pub unsafe extern "C" fn restore_wallet(cw: &CWallet) -> CWallet { convert_to_cwallet(rust_wallet) } +#[no_mangle] +pub unsafe extern "C" fn reset_wallet(cw: &CWallet) -> CWallet { + println!("restore wallet"); + let rust_wallet = convert_to_rwallet(cw); + let rust_wallet2 = rust_wallet.reset_wallet(); + println!("new rust_wallet: {:?}", &rust_wallet2); + convert_to_cwallet(rust_wallet2) +} + #[no_mangle] pub unsafe extern "C" fn free_cwallet(cw: CWallet) { drop(CString::from_raw(cw.msg_key)); diff --git a/src/wallet/wallet_impl.rs b/src/wallet/wallet_impl.rs index 8b65dad..9aae4a2 100644 --- a/src/wallet/wallet_impl.rs +++ b/src/wallet/wallet_impl.rs @@ -98,32 +98,32 @@ impl Wallet { } } - pub fn restore_wallet(msg: &str, _key_master: &str, _key_second: Option<&str>, _key_backup: Option<&str>) -> Self { - let key_second: Option = match _key_second { - None => None, - Some(val) => Some(val.to_string()) - }; - let key_backup: Option = match _key_backup { - None => None, - Some(val) => Some(val.to_string()) - }; - Wallet { - msg_key: msg.to_string(), - master_key: _key_master.to_string(), - second_key: key_second, - backup_key: key_backup - } - } + // pub fn restore_wallet(msg: &str, _key_master: &str, _key_second: Option<&str>, _key_backup: Option<&str>) -> Self { + // let key_second: Option = match _key_second { + // None => None, + // Some(val) => Some(val.to_string()) + // }; + // let key_backup: Option = match _key_backup { + // None => None, + // Some(val) => Some(val.to_string()) + // }; + // Wallet { + // msg_key: msg.to_string(), + // master_key: _key_master.to_string(), + // second_key: key_second, + // backup_key: key_backup + // } + // } - pub fn reset_eallet(msg: &str, _key_master: &str, _key_second: Option<&str>, _key_backup: Option<&str>) -> Self{ - let tmp_wallet = Wallet::restore_wallet(msg, _key_master, _key_second, _key_backup); - let secret_key = tmp_wallet.get_secret_key(); + pub fn reset_wallet(&self) -> Self{ + let secret_key = self.get_secret_key(); let s = hex::encode(&secret_key.serialize_secret()); - let shares_str = generate_sss_keypair(msg, &s); + let shares_str = generate_sss_keypair(&self.msg_key, &s); let second_key = shares_str.get(1).map(String::clone); let backup_key = shares_str.get(2).map(String::clone); + Wallet { - msg_key: msg.to_string(), + msg_key: self.msg_key.clone(), master_key: shares_str.get(0).unwrap().to_string(), second_key: second_key, backup_key: backup_key