2023-10-19 18:57:55 +08:00

169 lines
7.8 KiB
Rust
Raw Permalink 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::{
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);
}
}