update secp256k1 version
This commit is contained in:
parent
2bf87b9863
commit
a960fb2e8f
1452
Cargo.lock
generated
1452
Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
@ -7,7 +7,7 @@ edition = "2021"
|
|||||||
[lib]
|
[lib]
|
||||||
name = "rustwallet"
|
name = "rustwallet"
|
||||||
# this is needed to build for iOS and Android.
|
# 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.
|
# this dependency is only needed for Android.
|
||||||
# [target.'cfg(target_os = "android")'.dependencies]
|
# [target.'cfg(target_os = "android")'.dependencies]
|
||||||
@ -17,11 +17,11 @@ crate-type = ["staticlib", "lib"]
|
|||||||
anyhow = "1.0.65"
|
anyhow = "1.0.65"
|
||||||
bitcoin_hashes = "0.11.0"
|
bitcoin_hashes = "0.11.0"
|
||||||
hex = "0.4.3"
|
hex = "0.4.3"
|
||||||
openssl = { version = "0.10.41", features = ["vendored"] }
|
secp256k1 = { version = "0.25.0", features = ["rand-std", "bitcoin_hashes", "recovery"] }
|
||||||
secp256k1 = { version = "0.21.3", features = ["rand-std", "bitcoin_hashes", "recovery"] }
|
|
||||||
serde = { version = "1.0.145", features = ["derive"]}
|
serde = { version = "1.0.145", features = ["derive"]}
|
||||||
serde_json = "1.0.85"
|
serde_json = "1.0.85"
|
||||||
shamir_secret_sharing = "0.1.1"
|
shamir_secret_sharing = "0.1.1"
|
||||||
tiny-keccak = "1.5"
|
tiny-keccak = "1.5"
|
||||||
web3 = { version = "0.18.0"}
|
primitive-types = "0.12.1"
|
||||||
|
getrandom = { version = "0.2.7", features = ["js"]}
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
use std::ffi::{CStr, CString};
|
use std::ffi::{CStr, CString};
|
||||||
use std::os::raw::c_char;
|
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{
|
macro_rules! print_cchar{
|
||||||
($p1:expr) => (
|
($p1:expr) => (
|
||||||
@ -64,12 +64,14 @@ fn main() {
|
|||||||
let key0 = "3f26e586111b5c4cab6a5dd5e0d13c3b13184ba74410ba064a3b485be4f9a2cd";
|
let key0 = "3f26e586111b5c4cab6a5dd5e0d13c3b13184ba74410ba064a3b485be4f9a2cd";
|
||||||
let key1 = "";
|
let key1 = "";
|
||||||
let key2 = "cd00eb0126aeed39762579ce94c90a04695ad17fbd5e79aa4e9fc4a34ba32a5";
|
let key2 = "cd00eb0126aeed39762579ce94c90a04695ad17fbd5e79aa4e9fc4a34ba32a5";
|
||||||
let tmp_cwallet = CWallet{
|
let private_key = generate_sec_key(
|
||||||
msg_key: str_to_cchar!(msg),
|
str_to_cchar!(msg),
|
||||||
master_key: str_to_cchar!(key0),
|
str_to_cchar!(key0),
|
||||||
second_key: str_to_cchar!(key1),
|
str_to_cchar!(key1),
|
||||||
backup_key: str_to_cchar!(key2)
|
str_to_cchar!(key2)
|
||||||
};
|
);
|
||||||
|
print_cchar!(private_key);
|
||||||
|
|
||||||
let address2 = get_address(
|
let address2 = get_address(
|
||||||
str_to_cchar!(msg),
|
str_to_cchar!(msg),
|
||||||
str_to_cchar!(key0),
|
str_to_cchar!(key0),
|
||||||
@ -77,8 +79,6 @@ fn main() {
|
|||||||
str_to_cchar!(key2)
|
str_to_cchar!(key2)
|
||||||
);
|
);
|
||||||
print_cchar!(address2);
|
print_cchar!(address2);
|
||||||
// let s_key2 = generate_sec_key(&tmp_cwallet);
|
|
||||||
// print_cchar!(s_key2);
|
|
||||||
// let tmp_cwallet2 = restore_wallet(&tmp_cwallet);
|
// let tmp_cwallet2 = restore_wallet(&tmp_cwallet);
|
||||||
// let address3 = get_address(&tmp_cwallet2);
|
// let address3 = get_address(&tmp_cwallet2);
|
||||||
// print_cchar!(address3);
|
// print_cchar!(address3);
|
||||||
|
@ -10,20 +10,20 @@ use shamir_secret_sharing::ShamirSecretSharing as SSS;
|
|||||||
use std::str;
|
use std::str;
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
use tiny_keccak::keccak256;
|
use tiny_keccak::keccak256;
|
||||||
use web3::types::{Address, H256};
|
use primitive_types::{H160, H256};
|
||||||
|
|
||||||
pub fn generate_keypair() -> (SecretKey, PublicKey) {
|
pub fn generate_keypair() -> (SecretKey, PublicKey) {
|
||||||
let secp = Secp256k1::new();
|
let secp = Secp256k1::new();
|
||||||
let mut rng = OsRng::new().expect("OsRng");
|
// let mut rng = OsRng::new().expect("OsRng");
|
||||||
secp.generate_keypair(&mut rng)
|
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();
|
let public_key = public_key.serialize_uncompressed();
|
||||||
debug_assert_eq!(public_key[0], 0x04);
|
debug_assert_eq!(public_key[0], 0x04);
|
||||||
let hash = keccak256(&public_key[1..]);
|
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 {
|
pub fn get_public_key(secret_key: &SecretKey) -> PublicKey {
|
||||||
@ -81,7 +81,7 @@ pub struct Wallet {
|
|||||||
impl Wallet {
|
impl Wallet {
|
||||||
pub fn new(msg: &str) -> Self{
|
pub fn new(msg: &str) -> Self{
|
||||||
let (secret_key, _pub_key) = generate_keypair();
|
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);
|
let shares_str = generate_sss_keypair(msg, &s);
|
||||||
// println!("secret key: {:?}", secret_key);
|
// println!("secret key: {:?}", secret_key);
|
||||||
// println!("{:?}", s);
|
// println!("{:?}", s);
|
||||||
@ -97,7 +97,7 @@ impl Wallet {
|
|||||||
|
|
||||||
pub fn reset_wallet(&self) -> Self{
|
pub fn reset_wallet(&self) -> Self{
|
||||||
let secret_key = self.get_secret_key();
|
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 shares_str = generate_sss_keypair(&self.msg_key, &s);
|
||||||
let second_key = shares_str.get(1).map(String::clone);
|
let second_key = shares_str.get(1).map(String::clone);
|
||||||
let backup_key = shares_str.get(2).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 {
|
if s_key_str.len() < 64 {
|
||||||
s_key_str += "0";
|
s_key_str += "0";
|
||||||
}
|
}
|
||||||
println!("{}", &s_key_str);
|
|
||||||
SecretKey::from_str(&s_key_str).expect("32 bytes, within curve order")
|
SecretKey::from_str(&s_key_str).expect("32 bytes, within curve order")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -152,13 +151,14 @@ impl Wallet {
|
|||||||
get_public_key(&s_key)
|
get_public_key(&s_key)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
pub fn generate_sec_key(&self) -> String {
|
pub fn generate_sec_key(&self) -> String {
|
||||||
let secret_key = self.get_secret_key();
|
let secret_key = self.get_secret_key();
|
||||||
let s = hex::encode(&secret_key.serialize_secret());
|
let s = hex::encode(&secret_key.secret_bytes());
|
||||||
s
|
s
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_address(&self) -> Address {
|
pub fn get_address(&self) -> H160 {
|
||||||
let public_key = self.get_public_key();
|
let public_key = self.get_public_key();
|
||||||
public_key_address(&public_key)
|
public_key_address(&public_key)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user