增加替换ehereumjs-util.signature.ecsign签名的方法
This commit is contained in:
parent
1b1228fa28
commit
e2de3e296c
@ -6,7 +6,7 @@
|
||||
|
||||
use std::ffi::{CStr, CString};
|
||||
use std::os::raw::c_char;
|
||||
use rustwallet::{new_wallet, get_address, restore_wallet, reset_wallet, free_cwallet, sign, CWallet};
|
||||
use rustwallet::{new_wallet, get_address, restore_wallet, reset_wallet, free_cwallet, sign, sign_for_tran, CWallet};
|
||||
|
||||
macro_rules! print_cchar{
|
||||
($p1:expr) => (
|
||||
@ -47,22 +47,26 @@ macro_rules! str_to_cchar {
|
||||
|
||||
fn main() {
|
||||
unsafe {
|
||||
let msg = "111";
|
||||
let msg = "099c9c3da391df6e7e82141888db5cca";
|
||||
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 key0 = "3da2dfc54de71230f639f37de61d8f8c4699f75e783dc54353146a4b73250366";
|
||||
let key1 = "a1a3ed90e41a37096f07957b9888ffa7a74406f3a3e8c77686d92f2ba7c22d58";
|
||||
let key2 = "27216cbe70021d5d1d018da5ab548b8b45dee4fd9ec0b33ab1dd264cf2ff249f";
|
||||
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 key0 = "aadcabedb89a41db4c815bd149d3e7a1ff04247947efd5768666ba5f5e2df2e2";
|
||||
let key1 = "5b5d60194aa6588db9c52182a50d4657d918af3a9ff681207243957bac94791a";
|
||||
let key2 = "";
|
||||
let tmp_cwallet = CWallet{
|
||||
msg_key: str_to_cchar!(msg),
|
||||
master_key: str_to_cchar!(key0),
|
||||
second_key: str_to_cchar!(""),
|
||||
backup_key: str_to_cchar!(key2)
|
||||
second_key: str_to_cchar!(key1),
|
||||
backup_key: str_to_cchar!("")
|
||||
};
|
||||
let address2 = get_address(&tmp_cwallet);
|
||||
print_cchar!(address2);
|
||||
|
13
src/lib.rs
13
src/lib.rs
@ -140,6 +140,19 @@ pub unsafe extern "C" fn sign(cw: &CWallet, msg: *const c_char) -> *mut c_char{
|
||||
str_to_cchar!(r)
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn sign_for_tran(cw: &CWallet, msg: *const c_char) -> *mut c_char{
|
||||
let rwallet = convert_to_rwallet(cw);
|
||||
println!("rwallet: {:?}", rwallet);
|
||||
let msg_str = cchar_to_str!(msg);
|
||||
let signature = rwallet.sign_for_tran(msg_str);
|
||||
let r = match signature {
|
||||
Ok(v) => v,
|
||||
Err(err) => panic!("Problem sign: {:?}", err),
|
||||
};
|
||||
str_to_cchar!(r)
|
||||
}
|
||||
|
||||
|
||||
unsafe fn convert_to_cwallet(rwallet: Wallet) -> CWallet {
|
||||
// 转换Rust字符串数据为C的字符串并移交ownership
|
||||
|
@ -228,7 +228,6 @@ impl Wallet {
|
||||
let message = msg.as_ref();
|
||||
let message_hash = hash_message(message.as_ref());
|
||||
println!("secret key: {:?}", &secret_key);
|
||||
|
||||
let message_to_hash = Message::from_slice(message_hash.as_ref()).unwrap();
|
||||
let (recovery_id, signature) = secp
|
||||
.sign_ecdsa_recoverable(&message_to_hash, &secret_key)
|
||||
@ -244,4 +243,18 @@ impl Wallet {
|
||||
|
||||
Ok(s)
|
||||
}
|
||||
pub fn sign_for_tran<S>(&self, msg: S) -> Result<String>
|
||||
where
|
||||
S: AsRef<[u8]>,
|
||||
{
|
||||
let secp = Secp256k1::new();
|
||||
let secret_key = self.get_secret_key();
|
||||
let hex_str = hex::decode(msg).unwrap();
|
||||
let message_to_hash = Message::from_slice(&hex_str).unwrap();
|
||||
let (_recovery_id, signature) = secp
|
||||
.sign_ecdsa_recoverable(&message_to_hash, &secret_key)
|
||||
.serialize_compact();
|
||||
let s = hex::encode(signature);
|
||||
Ok(s)
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user