1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
extern crate hex; extern crate rand; extern crate secp256k1; use self::rand::{thread_rng, Rng}; use self::secp256k1::Message; mod constants; pub use constants::*; pub fn random_bytes(length: usize) -> Vec<u8> { rand::thread_rng().gen_iter::<u8>().take(length).collect() } pub fn generate_keypair() -> (Vec<u8>, Vec<u8>) { let signer = secp256k1::Secp256k1::new(); let (private_key, public_key) = signer.generate_keypair(&mut thread_rng()); (private_key[..].to_vec(), public_key.serialize().to_vec()) } pub fn secp256k1_sign_recoverable(message_vec: Vec<u8>, private_key_vec: Vec<u8>) -> (u8, Vec<u8>) { let signer = secp256k1::Secp256k1::new(); let message = Message::from_slice(&message_vec).unwrap(); let private_key = secp256k1::SecretKey::from_slice(&private_key_vec).unwrap(); let (recovery_id, signature) = signer .sign_recoverable(&message, &private_key) .serialize_compact(); (recovery_id.to_i32() as u8, signature.to_vec()) }