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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
extern crate hex; extern crate rand; extern crate secp256k1; extern crate lazy_static; use self::rand::{Rng, thread_rng}; use self::secp256k1::Message; pub fn alice() -> Vec<u8> { hex::decode("02abc074b9843c9d41fe5c46df8a4df6f46309aed0b6620c59ec22a4dcc5e19001").unwrap() } pub fn alices_private_key() -> Vec<u8> { hex::decode("b13462163b5185910e9bad08a02f5fdcc81ce58c97e0d1858172e9437fa8f68a").unwrap() } pub fn bob() -> Vec<u8> { hex::decode("03dfde758e12e270c190accfee9f3919f47b22f2b1861132909d066f842bcff002").unwrap() } pub fn bobs_private_key() -> Vec<u8> { hex::decode("1a9d9a652edaf6b808b2305d2b5cac4b152f21a531fcd9143f94c7e7c8189184").unwrap() } pub fn carol() -> Vec<u8> { hex::decode("035f17c105e9457f23b1c96283c34d99439817fe4f0e838b7ce5c4fef972430003").unwrap() } pub fn carols_private_key() -> Vec<u8> { hex::decode("9cb1988f218d38b73ae096445b07103fd2c4cd54c094adc0c3e079ef5398f2b2").unwrap() } pub fn dave() -> Vec<u8> { hex::decode("03115586862a6f4bba22ace69395eeda178404da44f9eda76ca0896b222af8c004").unwrap() } pub fn daves_private_key() -> Vec<u8> { hex::decode("6f200f464a1fb18851adad770a357f34af426f9ac2207bc90c134e742b79643f").unwrap() } pub fn eve() -> Vec<u8> { hex::decode("0332141bea1c04616da707e8b1495ac583cb3e8aa694289019070b3483149e5005").unwrap() } pub fn eves_private_key() -> Vec<u8> { hex::decode("394a836cceb63a88d28440891c42e96664b966d7216e26931fea9e3ec00b8254").unwrap() } pub fn frank() -> Vec<u8> { hex::decode("036f3b38df5dce545f47300573521bc54a9036aa7162c4184ee2aa45031b407006").unwrap() } pub fn frank_private_key() -> Vec<u8> { hex::decode("f963a8763606dfd48a65cacef8c2660f786e6e5a8e785d55b7631ea357e8692f").unwrap() } pub fn mallory() -> Vec<u8> { hex::decode("039ee96da4b405581bbf7c25a2fc3e12017a55c08a07c374dfe09473c875227bad").unwrap() } pub fn mallorys_private_key() -> Vec<u8> { hex::decode("e5a386094cac73c84c6cd0e52e21522446b915b7dfcc752ec6cb3d65ec0e2d01").unwrap() } 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()) }