diff --git a/examples/test.rs b/examples/test.rs index c628ab2..a0ca7e1 100644 --- a/examples/test.rs +++ b/examples/test.rs @@ -6,8 +6,8 @@ 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, sign, sign_for_tran, - wallet_decrypt, wallet_encrypt, + hex_deflate, hex_inflate, keccak256_hash, local_pass_hasher, rdecrypt, rencrypt, sign, + sign_for_tran, wallet_decrypt, wallet_encrypt, }; use std::ffi::{CStr, CString}; use std::os::raw::c_char; @@ -56,8 +56,8 @@ fn main() { // let s_key = generate_sec_key(&wallet); // print_cchar!(s_key); - let key0 = "3f26e586111b5c4cab6a5dd5e0d13c3b13184ba74410ba064a3b485be4f9a2cd"; - let key1 = "cd00eb0126aeed39762579ce94c90a04695ad17fbd5e79aa4e9fc4a34ba32a5"; + let key0 = "3f26e586111b5c4cab6a5dd5e0d13c3b13184ba74410ba064a3b485be4f9a2ed"; + let key1 = "cd00eb0126aeed39762579ce94c90a04695ad17fbd5e79aa4e9fc4a34ba32c5"; let address2 = get_address( str_to_cchar!(msg_key), str_to_cchar!(key0), @@ -131,5 +131,13 @@ fn main() { 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); } } diff --git a/src/lib.rs b/src/lib.rs index 315e2ef..f1c35dd 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -11,6 +11,7 @@ use std::str::FromStr; mod wallet; use secp256k1::PublicKey; +use secp256k1::SecretKey; use wallet_impl::Wallet; use crate::wallet::*; @@ -132,6 +133,21 @@ pub unsafe extern "C" fn rencrypt(pk: *const c_char, msg: *const c_char) -> *mut str_to_cchar!(msg_encrypt) } +#[no_mangle] +pub unsafe extern "C" fn rdecrypt(sk: *const c_char, msg: *const c_char) -> *mut c_char { + let msg_str = cchar_to_str!(msg); + let sk_str = cchar_to_str!(sk); + let private_key = match SecretKey::from_str(sk_str) { + Ok(v) => v, + Err(e) => panic!("error parse publickey: {}", e), + }; + let msg_encrypt = match zdecrypt(private_key, msg_str) { + Ok(v) => v, + Err(err) => panic!("error encrypt: {:?}", err), + }; + str_to_cchar!(msg_encrypt) +} + #[no_mangle] pub unsafe extern "C" fn wallet_encrypt( msg_key: *const c_char,