110 lines
3.5 KiB
Rust
110 lines
3.5 KiB
Rust
//test.rs
|
||
//
|
||
// 测试在Rust侧生成钱包密钥对,转换成C侧的数据结构。
|
||
// 测试钱包在C侧调用接口存储和重新读出钱包密钥
|
||
//
|
||
|
||
use std::ffi::{CStr, CString};
|
||
use std::os::raw::c_char;
|
||
use rustwallet::{new_wallet, get_address, restore_wallet, reset_wallet, free_cwallet, sign, sign_for_tran, CWallet, generate_sec_key};
|
||
|
||
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 = "099c9c3da391df6e7e82141888db5cca";
|
||
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 = "aadcabedb89a41db4c815bd149d3e7a1ff04247947efd5768666ba5f5e2df2e2";
|
||
let key1 = "5b5d60194aa6588db9c52182a50d4657d918af3a9ff681207243957bac94791a";
|
||
let key2 = "";
|
||
let tmp_cwallet = CWallet{
|
||
msg_key: str_to_cchar!(msg),
|
||
master_key: str_to_cchar!(key0),
|
||
second_key: str_to_cchar!(key1),
|
||
backup_key: str_to_cchar!("")
|
||
};
|
||
let address2 = get_address(&tmp_cwallet);
|
||
print_cchar!(address2);
|
||
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()
|
||
}
|
||
}
|
||
|
||
unsafe fn print_wallet(cwallet: &CWallet) {
|
||
print_cchar!("msg=> ", cwallet.msg_key);
|
||
print_cchar!("master key=> ", cwallet.master_key);
|
||
print_cchar!("second key=> ", cwallet.second_key);
|
||
print_cchar!("backup key=> ", cwallet.backup_key);
|
||
}
|