//test.rs // // 测试在Rust侧生成钱包密钥对,转换成C侧的数据结构。 // 测试钱包在C侧调用接口存储和重新读出钱包密钥 // use rustwallet::{ generate_sec_key, new_wallet, sign, sign_for_tran, wdecrypt, wencrypt, wget_address, }; use std::ffi::{CStr, CString}; use std::os::raw::c_char; macro_rules! print_cchar { ($p1:expr) => { let s = CStr::from_ptr($p1); let ps = s.to_str().unwrap(); println!("{}=> {}", stringify!($p1), ps) }; ($p1:expr, $p2:expr) => { let s = CStr::from_ptr($p2); let ps = s.to_str().unwrap(); println!("{}{}", $p1, ps) }; } macro_rules! cchar_to_str { ($p1:expr) => {{ let s = CStr::from_ptr($p1); let ps = s.to_str().unwrap(); ps }}; } macro_rules! str_to_cchar { ($p1:expr) => {{ let c_msgkey = $p1.to_string(); c_msgkey }}; } fn main() { unsafe { let msg = "a0f2022d15fd8072f12c76cc1596c4f1"; // let wallet: CWallet = new_wallet(str_to_cchar!(msg)); // println!("---- generated a wallet to be used on C-side ----"); // print_wallet(&wallet); // let address = get_address(&wallet); // print_cchar!(address); // let address_str = cchar_to_str!(address); // println!("address: {}", address_str); // let sign_str = sign_for_tran(&wallet,str_to_cchar!("cc0dac9a2bd7125bbe9130b83053494860f7a444868a45a9c00a865631ba8894")); // print_cchar!(sign_str); // let s_key = generate_sec_key(&wallet); // print_cchar!(s_key); let key0 = "3f26e586111b5c4cab6a5dd5e0d13c3b13184ba74410ba064a3b485be4f9a2cd"; let key1 = ""; let key2 = "cd00eb0126aeed39762579ce94c90a04695ad17fbd5e79aa4e9fc4a34ba32a5"; let private_key = generate_sec_key( msg.to_string(), key0.to_string(), str_to_cchar!(key1), str_to_cchar!(key2), ); println!("private_key=> {}", private_key); let address2 = wget_address( str_to_cchar!(msg), str_to_cchar!(key0), Option(key1), str_to_cchar!(key2), ); println!("address=> {}", address2); let message = "helloword"; let msg_encrypt = wencrypt( str_to_cchar!(msg), str_to_cchar!(key0), str_to_cchar!(key1), str_to_cchar!(key2), str_to_cchar!(message), ); println!("msg_encrypt=> {}", msg_encrypt); let msg_decrypt = wdecrypt( str_to_cchar!(msg), str_to_cchar!(key0), str_to_cchar!(key1), str_to_cchar!(key2), msg_encrypt, ); println!("msg_decrypt=> {}", msg_decrypt); // let tmp_cwallet2 = restore_wallet(&tmp_cwallet); // let address3 = get_address(&tmp_cwallet2); // print_cchar!(address3); // 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); // println!("---- saved! ----"); // println!("---- fetching the saved wallet to be exposed to C-side ----"); // let fetched = fetch_cwallet(); // print_wallet(&fetched); // sign(); // let sign_str = "111"; // let cstr = std::ffi::CString::new(sign_str).unwrap(); // sss_sign(cstr.into_raw()); // // free_cwallet(wallet); // 对应 generate_cwallet() // free_cwallet(fetched); // 对应 fetch_wallet() } }