Skip to main content

ellipticoin_test_framework/
lib.rs

1#[macro_use]
2extern crate hex_literal;
3#[macro_use]
4extern crate lazy_static;
5extern crate ed25519_dalek;
6extern crate hex;
7extern crate rand;
8extern crate secp256k1;
9extern crate sha2;
10
11use sha2::{Sha256, Digest};
12use self::secp256k1::Message;
13use rand::{rngs::OsRng, Rng};
14pub mod constants;
15
16pub fn sha256(value: Vec<u8>) -> Vec<u8> {
17    let mut hasher = Sha256::new();
18    hasher.input(value);
19    hasher.result().to_vec()
20}
21
22pub fn random_bytes(length: usize) -> Vec<u8> {
23    rand::thread_rng()
24        .sample_iter(&rand::distributions::Standard)
25        .take(length)
26        .collect()
27}
28
29pub fn generate_hash_onion(layers: usize, center: Vec<u8>) -> Vec<Vec<u8>> {
30    let mut onion = vec![center];
31    for _ in 1..(layers) {
32        onion.push(sha256(onion.last().unwrap().to_vec()));
33    }
34    onion
35}
36
37pub fn generate_keypair() -> (Vec<u8>, Vec<u8>) {
38    let signer = secp256k1::Secp256k1::new();
39    let mut rng = OsRng::new().unwrap();
40    let (private_key, public_key) = signer.generate_keypair(&mut rng);
41
42    (private_key[..].to_vec(), public_key.serialize().to_vec())
43}
44
45pub fn secp256k1_sign_recoverable(message_vec: Vec<u8>, private_key_vec: Vec<u8>) -> Vec<u8> {
46    let signer = secp256k1::Secp256k1::new();
47    let message = Message::from_slice(&message_vec).unwrap();
48    let private_key = secp256k1::SecretKey::from_slice(&private_key_vec).unwrap();
49    let signature = signer.sign(&message, &private_key).serialize_compact();
50    signature.to_vec()
51}