169 lines
7.8 KiB
Rust
169 lines
7.8 KiB
Rust
//test.rs
|
||
//
|
||
// 测试在Rust侧生成钱包密钥对,转换成C侧的数据结构。
|
||
// 测试钱包在C侧调用接口存储和重新读出钱包密钥
|
||
//
|
||
|
||
use rustwallet::{
|
||
aes_decrypt, aes_encrypt, generate_sec_key, get_address, get_public_key, hash_pass_svr,
|
||
hex_deflate, hex_inflate, keccak256_hash, local_pass_hasher, rdecrypt, rencrypt, sign,
|
||
sign_for_tran, wallet_decrypt, wallet_encrypt,simple_sign,rsa_key_pair,rsa_decrypt, rsa_encrypt,
|
||
};
|
||
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 = "3f26e586111b5c4cab6a5dd5e0d13c3b13184ba74410ba064a3b485be4f9a2ed";
|
||
let key1 = "cd00eb0126aeed39762579ce94c90a04695ad17fbd5e79aa4e9fc4a34ba32c5";
|
||
let address2 = get_address(
|
||
str_to_cchar!(msg_key),
|
||
str_to_cchar!(key0),
|
||
str_to_cchar!(key1),
|
||
);
|
||
print_cchar!(address2);
|
||
let key_public = get_public_key(
|
||
str_to_cchar!(msg_key),
|
||
str_to_cchar!(key0),
|
||
str_to_cchar!(key1),
|
||
);
|
||
print_cchar!(key_public);
|
||
let key_private = generate_sec_key(
|
||
str_to_cchar!(msg_key),
|
||
str_to_cchar!(key0),
|
||
str_to_cchar!(key1),
|
||
);
|
||
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!(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!(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!(msg),
|
||
);
|
||
print_cchar!(str_encrypt);
|
||
let str_decrypt = wallet_decrypt(
|
||
str_to_cchar!(msg_key),
|
||
str_to_cchar!(key0),
|
||
str_to_cchar!(key1),
|
||
str_encrypt,
|
||
);
|
||
print_cchar!(str_decrypt);
|
||
|
||
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);
|
||
print_cchar!(address2);
|
||
let pass = "111111";
|
||
let hash_pass = hash_pass_svr(str_to_cchar!(pass));
|
||
print_cchar!(hash_pass);
|
||
let aes_key = "111111";
|
||
let str_aes_encrypt = aes_encrypt(str_to_cchar!(pass), str_to_cchar!(aes_key));
|
||
print_cchar!(str_aes_encrypt);
|
||
|
||
let str_aes_plain = aes_decrypt(str_aes_encrypt, str_to_cchar!(aes_key));
|
||
print_cchar!(str_aes_plain);
|
||
|
||
let local_pass_hass = local_pass_hasher(str_to_cchar!(pass));
|
||
print_cchar!(local_pass_hass);
|
||
|
||
let msg_to_encrypt = "hello world";
|
||
let msg_encrypted = rencrypt(key_public, str_to_cchar!(msg_to_encrypt));
|
||
print_cchar!(msg_encrypted);
|
||
let msg_d = hex_deflate(msg_encrypted);
|
||
print_cchar!(msg_d);
|
||
let msg_decrypted = rdecrypt(key_private, msg_encrypted);
|
||
print_cchar!(msg_decrypted);
|
||
let msg = "hello world";
|
||
let sig = simple_sign(str_to_cchar!(msg), key_private);
|
||
print_cchar!(sig);
|
||
|
||
// let str_1111 = "67181d63581e5506f137cfc66af17ffc8c0138238eb7fb9c2b4f424402d6c9d1";
|
||
// let aes_key = "02aaaafbd375639879d6a694893dd14413662d90c59abaceb6cc4c791aa0834352";
|
||
// let str_aes_plain = aes_decrypt(str_to_cchar!(str_1111), str_to_cchar!(aes_key));
|
||
// print_cchar!(str_aes_plain);
|
||
|
||
let rsa_keys_str = rsa_key_pair();
|
||
let keys_str = cchar_to_str!(rsa_keys_str);
|
||
let mut strs = keys_str.split("|");
|
||
let s_key_str = strs.next().expect("empty private key");
|
||
println!("RSA private key=> {}", s_key_str);
|
||
let p_key_str = strs.next().expect("empty public key");
|
||
println!("RSA public key=> {}", p_key_str);
|
||
let msg = "hello world";
|
||
let p_key_str = "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0NCk1JR2ZNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0R05BRENCaVFLQmdRRGFrUXlQYmorWlZTS21KYllveFI5ZGVPb1UNCndSQWk1SjhMcG5wcWtTQUsvcVd6VVhNd0llajFENkVJYWdoR2RNSWtUWDFqT2h1N2U0blRxWmNyTmNzR1J5RXENCnVyT0pKcVNVMExQZ0ttdTRkM2pJa0RwMmgva1Zjc0hEcHM0emM2d1lnNEIzK2FRcC8ySldjbDBFWjBPbUdqNmkNCnJUY3dHbGFzbnVsdlYrM1V0UUlEQVFBQg0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tDQo=";
|
||
let s_key_str = "LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tDQpNSUlDZUFJQkFEQU5CZ2txaGtpRzl3MEJBUUVGQUFTQ0FtSXdnZ0plQWdFQUFvR0JBTnFSREk5dVA1bFZJcVlsDQp0aWpGSDExNDZoVEJFQ0xrbnd1bWVtcVJJQXIrcGJOUmN6QWg2UFVQb1FocUNFWjB3aVJOZldNNkc3dDdpZE9wDQpseXMxeXdaSElTcTZzNGttcEpUUXMrQXFhN2gzZU1pUU9uYUgrUlZ5d2NPbXpqTnpyQmlEZ0hmNXBDbi9ZbFp5DQpYUVJuUTZZYVBxS3ROekFhVnF5ZTZXOVg3ZFMxQWdNQkFBRUNnWUVBZ1Zrd0pyNG5VMVlvQUUzM0pOK3I5VVIyDQp1N3VhRWh4YzU2Y3BjV0hicGNZWVNDd2UwRkJ4TG42R1haVnF1aytsQ1pqMmFML2Q0N0Z6MnRqVnh0TzZCekFBDQpWVGNZWVJqRnFody9JMitPaEJTRjF3U3doYUhvQ2dEZUFua2dOMTFlVDJCN3R3d2NvRHhsQ1h1WWQ3MEx3MEpkDQozbXVwejhOalV6ZC8vdzYwVG9FQ1FRRHpSbUlSckZMdyt6VWtqKzFWdHFnSklQZU56eXZ5R0JmUW5ZMEN1VVdjDQpMQ2xta1UwaHdNM0g2ODJIbEk0RWJSTkhVejVJTTVORm9mSGlVUDRVTjljVkFrRUE1Zi9OOXRnUjNjY1ZVems4DQp1Mk5iN3d2b1FMekVBd2lJN2tQTFp1SlI0MTZjSHEwWmZEUHZ5LytuZXRVZEJuZTFreHJwRmxyRFBwSVdDU3hHDQp5dFZ2SVFKQkFNb0gxNFhKMEkra2IzdlBzMUFOZ3ZzaHo3U0xLbm5CSEhYNWdaT1RmWVcyL3lMWTVHOTFpTy9RDQptajFRVjZqQlZOTlZCRkk5MHI1dlFVdXI2M1dxOGdrQ1FRRGlDWHpKMDUvN2JlU3ZYZGtwOElReGNtcFc5UzFPDQpMZDBsRE11aDJWclJNZklNMCtId0JycnNxZHhYQTRyN0NEc1N6NmV6cUkrcHRyaWhXenBYclZzQkFrQU1NT01WDQo4UmFJaDkwckJMWWpLN2l1SmZOeXhvemFQQkNVZ0J0UTZhMEdzbGo2OERCdDVEek1iRkFCelZKdE9hL25qTFE1DQpXMGs1R2tlYjR5M2NFOGoyDQotLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tDQo=";
|
||
let str_encrypt = rsa_encrypt(str_to_cchar!(msg), str_to_cchar!(p_key_str));
|
||
print_cchar!(str_encrypt);
|
||
let str_encrypt = cchar_to_str!(str_encrypt);
|
||
let str_encrypt = "Z0eBsOhFz+IzGFywFtIAnmQ5fvEeQeruHyTYvxYADjoazpd8qVx9W8LvTU782PSCUpE5oswHSlFljcjbcAvetiUfKOy3Q+c8cnxmsBDgzBNclKspI2MKW2TuGQcijxB1DB7ggkNyqSvvNPJTt/mBYA1y+Ix1jGSjz+Ile7QtKMw=";
|
||
let str_decrypt = rsa_decrypt(str_to_cchar!(str_encrypt), str_to_cchar!(s_key_str));
|
||
print_cchar!(str_decrypt);
|
||
}
|
||
}
|