use rand::rngs::OsRng;
use secp256k1::{PublicKey, SecretKey, SECP256K1};
pub fn get_random_secret_key() -> (SecretKey, PublicKey) {
SECP256K1.generate_keypair(&mut OsRng)
}
pub fn secret_key_from_str(s: &str) -> Result<SecretKey, String> {
let decoded_hex = &hex::decode(s);
match decoded_hex {
Ok(decoded_hex) => match SecretKey::from_slice(decoded_hex) {
Ok(secret_key) => Ok(secret_key),
Err(_) => Err("Invalid secret key".to_string()),
},
Err(_) => Err("Invalid hex format".to_string()),
}
}
pub fn get_public_key_from_secret(secret_key: &SecretKey) -> PublicKey {
PublicKey::from_secret_key(SECP256K1, secret_key)
}
pub fn get_str_keys_from_secret(secret_key: &SecretKey) -> (String, String) {
(
secret_key.display_secret().to_string(),
normalize_public_key(&get_public_key_from_secret(secret_key).to_string()),
)
}
pub fn normalize_public_key(public_key: &str) -> String {
public_key.to_string()[2..].to_string()
}