//test.rs // // 测试在Rust侧生成钱包密钥对,转换成C侧的数据结构。 // 测试钱包在C侧调用接口存储和重新读出钱包密钥 // use rustwallet::{ aes_decrypt, aes_encrypt, free_cwallet, generate_sec_key, get_address, get_public_key, hash_pass_svr, hex_deflate, hex_inflate, keccak256_hash, new_wallet, rencrypt, sign, sign_for_tran, wallet_decrypt, wallet_encrypt, CWallet, }; 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 msgkey = CString::new($p1).unwrap(); let c_msgkey: *mut c_char = msgkey.into_raw(); c_msgkey }}; } fn main() { unsafe { let msg_key = "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 address2 = get_address( str_to_cchar!(msg_key), str_to_cchar!(key0), str_to_cchar!(key1), str_to_cchar!(key2), ); print_cchar!(address2); let key_public = get_public_key( str_to_cchar!(msg_key), str_to_cchar!(key0), str_to_cchar!(key1), str_to_cchar!(key2), ); print_cchar!(key_public); let key_private = generate_sec_key( str_to_cchar!(msg_key), str_to_cchar!(key0), str_to_cchar!(key1), str_to_cchar!(key2), ); print_cchar!(key_private); let msg = "hello world"; let str_signed = sign( str_to_cchar!(msg_key), str_to_cchar!(key0), str_to_cchar!(key1), str_to_cchar!(key2), str_to_cchar!(msg), ); print_cchar!(str_signed); let tran_str = "0cd00eb0126aeed39762579ce94c90a04695ad17fbd5e79aa4e9fc4a34ba32a5"; let str_signed2 = sign_for_tran( str_to_cchar!(msg_key), str_to_cchar!(key0), str_to_cchar!(key1), str_to_cchar!(key2), str_to_cchar!(tran_str), ); print_cchar!(str_signed2); let str_encrypt = wallet_encrypt( str_to_cchar!(msg_key), str_to_cchar!(key0), str_to_cchar!(key1), str_to_cchar!(key2), str_to_cchar!(msg), ); print_cchar!(str_encrypt); let str_decrypt = wallet_decrypt( str_to_cchar!(msg_key), str_to_cchar!(key0), str_to_cchar!(key1), str_to_cchar!(key2), str_encrypt, ); print_cchar!(str_decrypt); let pk = "031a8338368250f544b6cc8f5d72d77ab13bd067f51d4e84b8148edcc6595327e2"; let str_encrypt2 = rencrypt(str_to_cchar!(pk), str_to_cchar!(msg)); print_cchar!(str_encrypt2); let str_decrypt2 = wallet_decrypt( str_to_cchar!(msg_key), str_to_cchar!(key0), str_to_cchar!(key1), str_to_cchar!(key2), str_encrypt2, ); print_cchar!(str_decrypt2); let str_encode = hex_deflate(key_public); print_cchar!(str_encode); let str_decode = hex_inflate(str_encode); print_cchar!(str_decode); let msg = "$argon2id$v=19$m=19456,t=2,p=1$adcr3ix1Mpcx2wWd/It8gw$VG1I+RrEQ5rbKlGiVDB2Lux50XTfxgaxLsvHG4SCtTI"; let result = keccak256_hash(str_to_cchar!(msg)); print_cchar!(result); let address2 = get_address( str_to_cchar!(msg_key), str_to_cchar!(key0), result, str_to_cchar!(key1), ); print_cchar!(address2); let pass = "111111"; let hash_pass = hash_pass_svr(str_to_cchar!(pass)); print_cchar!(hash_pass); let str_encrypt = aes_encrypt(str_to_cchar!(pass)); print_cchar!(str_encrypt); let str_plain = aes_decrypt(str_encrypt); print_cchar!(str_plain); } }