update secp256k1 version

This commit is contained in:
zhl 2023-01-10 11:05:57 +08:00
parent 2bf87b9863
commit a960fb2e8f
4 changed files with 60 additions and 1438 deletions

1452
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -7,7 +7,7 @@ edition = "2021"
[lib]
name = "rustwallet"
# this is needed to build for iOS and Android.
crate-type = ["staticlib", "lib"]
crate-type = ["staticlib", "lib", "cdylib"]
# this dependency is only needed for Android.
# [target.'cfg(target_os = "android")'.dependencies]
@ -17,11 +17,11 @@ crate-type = ["staticlib", "lib"]
anyhow = "1.0.65"
bitcoin_hashes = "0.11.0"
hex = "0.4.3"
openssl = { version = "0.10.41", features = ["vendored"] }
secp256k1 = { version = "0.21.3", features = ["rand-std", "bitcoin_hashes", "recovery"] }
secp256k1 = { version = "0.25.0", features = ["rand-std", "bitcoin_hashes", "recovery"] }
serde = { version = "1.0.145", features = ["derive"]}
serde_json = "1.0.85"
shamir_secret_sharing = "0.1.1"
tiny-keccak = "1.5"
web3 = { version = "0.18.0"}
primitive-types = "0.12.1"
getrandom = { version = "0.2.7", features = ["js"]}

View File

@ -6,7 +6,7 @@
use std::ffi::{CStr, CString};
use std::os::raw::c_char;
use rustwallet::{new_wallet, get_address, free_cwallet, sign, sign_for_tran, CWallet, generate_sec_key};
use rustwallet::{new_wallet, get_address, sign, sign_for_tran, CWallet, generate_sec_key};
macro_rules! print_cchar{
($p1:expr) => (
@ -64,12 +64,14 @@ fn main() {
let key0 = "3f26e586111b5c4cab6a5dd5e0d13c3b13184ba74410ba064a3b485be4f9a2cd";
let key1 = "";
let key2 = "cd00eb0126aeed39762579ce94c90a04695ad17fbd5e79aa4e9fc4a34ba32a5";
let tmp_cwallet = CWallet{
msg_key: str_to_cchar!(msg),
master_key: str_to_cchar!(key0),
second_key: str_to_cchar!(key1),
backup_key: str_to_cchar!(key2)
};
let private_key = generate_sec_key(
str_to_cchar!(msg),
str_to_cchar!(key0),
str_to_cchar!(key1),
str_to_cchar!(key2)
);
print_cchar!(private_key);
let address2 = get_address(
str_to_cchar!(msg),
str_to_cchar!(key0),
@ -77,8 +79,6 @@ fn main() {
str_to_cchar!(key2)
);
print_cchar!(address2);
// let s_key2 = generate_sec_key(&tmp_cwallet);
// print_cchar!(s_key2);
// let tmp_cwallet2 = restore_wallet(&tmp_cwallet);
// let address3 = get_address(&tmp_cwallet2);
// print_cchar!(address3);

View File

@ -10,20 +10,20 @@ use shamir_secret_sharing::ShamirSecretSharing as SSS;
use std::str;
use std::str::FromStr;
use tiny_keccak::keccak256;
use web3::types::{Address, H256};
use primitive_types::{H160, H256};
pub fn generate_keypair() -> (SecretKey, PublicKey) {
let secp = Secp256k1::new();
let mut rng = OsRng::new().expect("OsRng");
secp.generate_keypair(&mut rng)
// let mut rng = OsRng::new().expect("OsRng");
secp.generate_keypair(&mut OsRng)
}
pub fn public_key_address(public_key: &PublicKey) -> Address {
pub fn public_key_address(public_key: &PublicKey) -> H160 {
let public_key = public_key.serialize_uncompressed();
debug_assert_eq!(public_key[0], 0x04);
let hash = keccak256(&public_key[1..]);
Address::from_slice(&hash[12..])
H160::from_slice(&hash[12..])
}
pub fn get_public_key(secret_key: &SecretKey) -> PublicKey {
@ -81,7 +81,7 @@ pub struct Wallet {
impl Wallet {
pub fn new(msg: &str) -> Self{
let (secret_key, _pub_key) = generate_keypair();
let s = hex::encode(&secret_key.serialize_secret());
let s = hex::encode(&secret_key.secret_bytes());
let shares_str = generate_sss_keypair(msg, &s);
// println!("secret key: {:?}", secret_key);
// println!("{:?}", s);
@ -97,7 +97,7 @@ impl Wallet {
pub fn reset_wallet(&self) -> Self{
let secret_key = self.get_secret_key();
let s = hex::encode(&secret_key.serialize_secret());
let s = hex::encode(&secret_key.secret_bytes());
let shares_str = generate_sss_keypair(&self.msg_key, &s);
let second_key = shares_str.get(1).map(String::clone);
let backup_key = shares_str.get(2).map(String::clone);
@ -143,7 +143,6 @@ impl Wallet {
if s_key_str.len() < 64 {
s_key_str += "0";
}
println!("{}", &s_key_str);
SecretKey::from_str(&s_key_str).expect("32 bytes, within curve order")
}
@ -152,13 +151,14 @@ impl Wallet {
get_public_key(&s_key)
}
pub fn generate_sec_key(&self) -> String {
let secret_key = self.get_secret_key();
let s = hex::encode(&secret_key.serialize_secret());
let s = hex::encode(&secret_key.secret_bytes());
s
}
pub fn get_address(&self) -> Address {
pub fn get_address(&self) -> H160 {
let public_key = self.get_public_key();
public_key_address(&public_key)
}