增加根据私钥获取公钥的方法

This commit is contained in:
cebgcontract 2022-10-22 20:43:46 +08:00
parent 81712b16d1
commit 8cea569438

View File

@ -28,6 +28,12 @@ pub fn public_key_address(public_key: &PublicKey) -> Address {
Address::from_slice(&hash[12..])
}
pub fn get_public_key(secret_key: &str) -> PublicKey {
let secp = Secp256k1::new();
let secret = SecretKey::from_str(secret_key).unwrap();
PublicKey::from_secret_key(&secp, &secret)
}
pub fn hash_message<S>(message: S) -> H256
where
S: AsRef<[u8]>,
@ -75,8 +81,9 @@ impl Wallet {
pub fn retrieve_keys(file_path: &str) -> Result<Wallet> {
let file = OpenOptions::new().read(true).open(file_path)?;
let buf_reader = BufReader::new(file);
let wallet: Wallet = serde_json::from_reader(buf_reader)?;
let wallet: Wallet = serde_json::from_reader(buf_reader)?;;
let public_key = get_public_key(&wallet.secret_key);
println!("public key from secret: {:?}", public_key.to_string());
Ok(wallet)
}
@ -92,9 +99,9 @@ impl Wallet {
share_amount: 3,
prime: pb,
};
let skey = "64a6f7baa58d7381f4068fc729568009ef8f36e9c7d9c33d2cf06afc25c01e87";
let secret = BigInt::parse_bytes(
b"64a6f7baa58d7381f4068fc729568009ef8f36e9c7d9c33d2cf06afc25c01e87",
&skey.as_bytes(),
16,
)
.unwrap();
@ -104,6 +111,18 @@ impl Wallet {
let key1 = shares[2].clone().1;
println!("key0: {:?}", key0.to_str_radix(16));
println!("key1: {:?}", key1.to_str_radix(16));
let key_str_0 = "539e52f2ffc060329010ae551e8684124bad26d93b0c9333154a5a5e116f5e0";
let key_str_1 = "44c523387a58ee8628e81d5e36014e78a05838f51205d765b7e729da33727ae2";
let key0 = BigInt::parse_bytes(
&key_str_0.as_bytes(),
16,
)
.unwrap();
let key1 = BigInt::parse_bytes(
&key_str_1.as_bytes(),
16,
)
.unwrap();
let kp0: (usize, BigInt) = (2, key0);
let kp1 = (3, key1);
let tmp = vec![kp0, kp1];