2023-03-01 17:27:22 +08:00

116 lines
3.8 KiB
Rust
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//test.rs
//
// 测试在Rust侧生成钱包密钥对转换成C侧的数据结构。
// 测试钱包在C侧调用接口存储和重新读出钱包密钥
//
use rustwallet::{
free_cwallet, generate_sec_key, get_address, new_wallet, sign, sign_for_tran, 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 = 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 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 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);
}