将lib中导出方法的unsafe移除

This commit is contained in:
CounterFire2023 2024-01-25 19:02:13 +08:00
parent f13a543cf3
commit 2c9f94358d
2 changed files with 45 additions and 30 deletions

View File

@ -57,3 +57,5 @@ char *rsa_key_pair(void);
char *rsa_encrypt(const char *content, const char *p_key); char *rsa_encrypt(const char *content, const char *p_key);
char *rsa_decrypt(const char *content, const char *s_key); char *rsa_decrypt(const char *content, const char *s_key);
void free_cstr(char *s);

View File

@ -25,16 +25,22 @@ use utils::str_utils::{base64_to_hex, hex_to_base64};
// mod android; // mod android;
macro_rules! cchar_to_str { macro_rules! cchar_to_str {
($p1:expr) => {{ ($p1:expr) => {{
let s = CStr::from_ptr($p1); let s = unsafe {CStr::from_ptr($p1)};
let ps = s.to_str().unwrap(); let ps = match s.to_str(){
Err(err) => panic!("Problem convert c_char to string: {:?}", err),
Ok(string) => string,
};
ps ps
}}; }};
} }
macro_rules! cchar_to_string { macro_rules! cchar_to_string {
($p1:expr) => {{ ($p1:expr) => {{
let s = CStr::from_ptr($p1); let s = unsafe {CStr::from_ptr($p1)};
let ps = s.to_str().unwrap(); let ps = match s.to_str() {
Err(err) => panic!("Problem convert c_char to string: {:?}", err),
Ok(string) => string,
};
ps.to_string() ps.to_string()
}}; }};
} }
@ -42,13 +48,12 @@ macro_rules! cchar_to_string {
macro_rules! str_to_cchar { macro_rules! str_to_cchar {
($p1:expr) => {{ ($p1:expr) => {{
let msgkey = CString::new($p1).unwrap(); let msgkey = CString::new($p1).unwrap();
let c_msgkey: *mut c_char = msgkey.into_raw(); msgkey.into_raw()
c_msgkey
}}; }};
} }
#[no_mangle] #[no_mangle]
pub unsafe extern "C" fn get_address( pub extern "C" fn get_address(
msg_key: *const c_char, msg_key: *const c_char,
master_key: *const c_char, master_key: *const c_char,
second_key: *const c_char, second_key: *const c_char,
@ -61,7 +66,7 @@ pub unsafe extern "C" fn get_address(
} }
#[no_mangle] #[no_mangle]
pub unsafe extern "C" fn get_public_key( pub extern "C" fn get_public_key(
msg_key: *const c_char, msg_key: *const c_char,
master_key: *const c_char, master_key: *const c_char,
second_key: *const c_char, second_key: *const c_char,
@ -73,7 +78,7 @@ pub unsafe extern "C" fn get_public_key(
} }
#[no_mangle] #[no_mangle]
pub unsafe extern "C" fn generate_sec_key( pub extern "C" fn generate_sec_key(
msg_key: *const c_char, msg_key: *const c_char,
master_key: *const c_char, master_key: *const c_char,
second_key: *const c_char, second_key: *const c_char,
@ -85,7 +90,7 @@ pub unsafe extern "C" fn generate_sec_key(
} }
#[no_mangle] #[no_mangle]
pub unsafe extern "C" fn sign( pub extern "C" fn sign(
msg_key: *const c_char, msg_key: *const c_char,
master_key: *const c_char, master_key: *const c_char,
second_key: *const c_char, second_key: *const c_char,
@ -102,7 +107,7 @@ pub unsafe extern "C" fn sign(
} }
#[no_mangle] #[no_mangle]
pub unsafe extern "C" fn sign_for_tran( pub extern "C" fn sign_for_tran(
msg_key: *const c_char, msg_key: *const c_char,
master_key: *const c_char, master_key: *const c_char,
second_key: *const c_char, second_key: *const c_char,
@ -121,7 +126,7 @@ pub unsafe extern "C" fn sign_for_tran(
} }
#[no_mangle] #[no_mangle]
pub unsafe extern "C" fn rencrypt(pk: *const c_char, msg: *const c_char) -> *mut c_char { pub extern "C" fn rencrypt(pk: *const c_char, msg: *const c_char) -> *mut c_char {
let msg_str = cchar_to_str!(msg); let msg_str = cchar_to_str!(msg);
let pk_str = cchar_to_str!(pk); let pk_str = cchar_to_str!(pk);
let public_key = match PublicKey::from_str(pk_str) { let public_key = match PublicKey::from_str(pk_str) {
@ -136,7 +141,7 @@ pub unsafe extern "C" fn rencrypt(pk: *const c_char, msg: *const c_char) -> *mut
} }
#[no_mangle] #[no_mangle]
pub unsafe extern "C" fn rdecrypt(sk: *const c_char, msg: *const c_char) -> *mut c_char { pub extern "C" fn rdecrypt(sk: *const c_char, msg: *const c_char) -> *mut c_char {
let msg_str = cchar_to_str!(msg); let msg_str = cchar_to_str!(msg);
let sk_str = cchar_to_str!(sk); let sk_str = cchar_to_str!(sk);
let private_key = match SecretKey::from_str(sk_str) { let private_key = match SecretKey::from_str(sk_str) {
@ -151,7 +156,7 @@ pub unsafe extern "C" fn rdecrypt(sk: *const c_char, msg: *const c_char) -> *mut
} }
#[no_mangle] #[no_mangle]
pub unsafe extern "C" fn wallet_encrypt( pub extern "C" fn wallet_encrypt(
msg_key: *const c_char, msg_key: *const c_char,
master_key: *const c_char, master_key: *const c_char,
second_key: *const c_char, second_key: *const c_char,
@ -168,7 +173,7 @@ pub unsafe extern "C" fn wallet_encrypt(
} }
#[no_mangle] #[no_mangle]
pub unsafe extern "C" fn wallet_decrypt( pub extern "C" fn wallet_decrypt(
msg_key: *const c_char, msg_key: *const c_char,
master_key: *const c_char, master_key: *const c_char,
second_key: *const c_char, second_key: *const c_char,
@ -185,34 +190,34 @@ pub unsafe extern "C" fn wallet_decrypt(
} }
#[no_mangle] #[no_mangle]
pub unsafe extern "C" fn hex_deflate(content: *const c_char) -> *mut c_char { pub extern "C" fn hex_deflate(content: *const c_char) -> *mut c_char {
let content_str = cchar_to_str!(content); let content_str = cchar_to_str!(content);
let msg_base64 = hex_to_base64(&content_str); let msg_base64 = hex_to_base64(&content_str);
str_to_cchar!(msg_base64) str_to_cchar!(msg_base64)
} }
#[no_mangle] #[no_mangle]
pub unsafe extern "C" fn hex_inflate(content: *const c_char) -> *mut c_char { pub extern "C" fn hex_inflate(content: *const c_char) -> *mut c_char {
let content_str = cchar_to_str!(content); let content_str = cchar_to_str!(content);
let msg_hex = base64_to_hex(&content_str); let msg_hex = base64_to_hex(&content_str);
str_to_cchar!(msg_hex) str_to_cchar!(msg_hex)
} }
// hash pasword of email register // hash pasword of email register
#[no_mangle] #[no_mangle]
pub unsafe extern "C" fn hash_pass_svr(content: *const c_char) -> *mut c_char { pub extern "C" fn hash_pass_svr(content: *const c_char) -> *mut c_char {
let content_str = cchar_to_str!(content); let content_str = cchar_to_str!(content);
let msg_hex = utils::crypto_utils::hash_pass_svr(&content_str); let msg_hex = utils::crypto_utils::hash_pass_svr(&content_str);
str_to_cchar!(msg_hex) str_to_cchar!(msg_hex)
} }
#[no_mangle] #[no_mangle]
pub unsafe extern "C" fn keccak256_hash(content: *const c_char) -> *mut c_char { pub extern "C" fn keccak256_hash(content: *const c_char) -> *mut c_char {
let content_str = cchar_to_str!(content); let content_str = cchar_to_str!(content);
let msg_hex = utils::crypto_utils::keccak256_hash(&content_str); let msg_hex = utils::crypto_utils::keccak256_hash(&content_str);
str_to_cchar!(msg_hex) str_to_cchar!(msg_hex)
} }
#[no_mangle] #[no_mangle]
pub unsafe extern "C" fn aes_encrypt(content: *const c_char, key: *const c_char) -> *mut c_char { pub extern "C" fn aes_encrypt(content: *const c_char, key: *const c_char) -> *mut c_char {
let content_str = cchar_to_str!(content); let content_str = cchar_to_str!(content);
let pass = cchar_to_str!(key); let pass = cchar_to_str!(key);
let pass = utils::crypto_utils::keccak256_hash(pass); let pass = utils::crypto_utils::keccak256_hash(pass);
@ -221,7 +226,7 @@ pub unsafe extern "C" fn aes_encrypt(content: *const c_char, key: *const c_char)
} }
#[no_mangle] #[no_mangle]
pub unsafe extern "C" fn aes_decrypt(content: *const c_char, key: *const c_char) -> *mut c_char { pub extern "C" fn aes_decrypt(content: *const c_char, key: *const c_char) -> *mut c_char {
let content_str = cchar_to_str!(content); let content_str = cchar_to_str!(content);
let pass = cchar_to_str!(key); let pass = cchar_to_str!(key);
let pass = utils::crypto_utils::keccak256_hash(pass); let pass = utils::crypto_utils::keccak256_hash(pass);
@ -230,13 +235,13 @@ pub unsafe extern "C" fn aes_decrypt(content: *const c_char, key: *const c_char)
} }
#[no_mangle] #[no_mangle]
pub unsafe extern "C" fn local_pass_hasher(password: *const c_char) -> *mut c_char { pub extern "C" fn local_pass_hasher(password: *const c_char) -> *mut c_char {
let result = wallet_impl::local_pass_hasher(cchar_to_str!(password)); let result = wallet_impl::local_pass_hasher(cchar_to_str!(password));
str_to_cchar!(result) str_to_cchar!(result)
} }
#[no_mangle] #[no_mangle]
pub unsafe extern "C" fn verify_local_pass( pub extern "C" fn verify_local_pass(
password: *const c_char, password: *const c_char,
pass_hash: *const c_char, pass_hash: *const c_char,
) -> bool { ) -> bool {
@ -244,7 +249,7 @@ pub unsafe extern "C" fn verify_local_pass(
} }
#[no_mangle] #[no_mangle]
pub unsafe extern "C" fn generate_client_key( pub extern "C" fn generate_client_key(
password: *const c_char, password: *const c_char,
openid: *const c_char, openid: *const c_char,
salt: *const c_char, salt: *const c_char,
@ -258,7 +263,7 @@ pub unsafe extern "C" fn generate_client_key(
} }
#[no_mangle] #[no_mangle]
pub unsafe extern "C" fn simple_sign(content: *const c_char, key: *const c_char) -> *mut c_char { pub extern "C" fn simple_sign(content: *const c_char, key: *const c_char) -> *mut c_char {
let result = wallet_impl::simple_sign(cchar_to_str!(content), cchar_to_str!(key)); let result = wallet_impl::simple_sign(cchar_to_str!(content), cchar_to_str!(key));
let r = match result { let r = match result {
Ok(v) => v, Ok(v) => v,
@ -268,7 +273,7 @@ pub unsafe extern "C" fn simple_sign(content: *const c_char, key: *const c_char)
} }
#[no_mangle] #[no_mangle]
pub unsafe extern "C" fn ramdonKey() -> *mut c_char { pub extern "C" fn ramdonKey() -> *mut c_char {
let (s_key, _p_key) = wallet_impl::generate_keypair(); let (s_key, _p_key) = wallet_impl::generate_keypair();
let s_key = hex::encode(&s_key.secret_bytes()); let s_key = hex::encode(&s_key.secret_bytes());
let cs_key = CString::new(s_key).unwrap(); let cs_key = CString::new(s_key).unwrap();
@ -276,13 +281,13 @@ pub unsafe extern "C" fn ramdonKey() -> *mut c_char {
} }
#[no_mangle] #[no_mangle]
pub unsafe extern "C" fn rsa_key_pair() -> *mut c_char { pub extern "C" fn rsa_key_pair() -> *mut c_char {
let key_str = general_rsa_keystr(); let key_str = general_rsa_keystr();
return str_to_cchar!(key_str); return str_to_cchar!(key_str);
} }
#[no_mangle] #[no_mangle]
pub unsafe extern "C" fn rsa_encrypt(content: *const c_char, p_key: *const c_char) -> *mut c_char { pub extern "C" fn rsa_encrypt(content: *const c_char, p_key: *const c_char) -> *mut c_char {
let content_str = cchar_to_str!(content); let content_str = cchar_to_str!(content);
let p_key_str = cchar_to_str!(p_key); let p_key_str = cchar_to_str!(p_key);
let msg_encrypt = utils::crypto_utils::rsa_encrypt(content_str, p_key_str); let msg_encrypt = utils::crypto_utils::rsa_encrypt(content_str, p_key_str);
@ -290,14 +295,22 @@ pub unsafe extern "C" fn rsa_encrypt(content: *const c_char, p_key: *const c_cha
} }
#[no_mangle] #[no_mangle]
pub unsafe extern "C" fn rsa_decrypt(content: *const c_char, s_key: *const c_char) -> *mut c_char { pub extern "C" fn rsa_decrypt(content: *const c_char, s_key: *const c_char) -> *mut c_char {
let content_str = cchar_to_str!(content); let content_str = cchar_to_str!(content);
let s_key_str = cchar_to_str!(s_key); let s_key_str = cchar_to_str!(s_key);
let msg_decrypt = utils::crypto_utils::rsa_decrypt(content_str, s_key_str); let msg_decrypt = utils::crypto_utils::rsa_decrypt(content_str, s_key_str);
str_to_cchar!(msg_decrypt) str_to_cchar!(msg_decrypt)
} }
unsafe fn generate_rwallet( #[no_mangle]
pub extern fn free_cstr(s: *mut c_char) {
unsafe {
if s.is_null() { return }
CString::from_raw(s)
};
}
fn generate_rwallet(
msg_key: *const c_char, msg_key: *const c_char,
master_key: *const c_char, master_key: *const c_char,
second_key: *const c_char, second_key: *const c_char,