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
// Copyright 2018 The Exonum Team // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. //! A set of helpers for testing. use bitcoin::blockdata::transaction::Transaction; use bitcoin::network::serialize; use rand::{self, Rng}; use secp256k1::{PublicKey, Secp256k1, SecretKey}; /// Computes a secret key and a corresponding public key using a /// given pseudo-random number generator. pub fn secp_gen_keypair_with_rng<R: Rng>(rng: &mut R) -> (PublicKey, SecretKey) { let context = Secp256k1::new(); let sk = SecretKey::new(&context, rng); let pk = PublicKey::from_secret_key(&context, &sk).unwrap(); (pk, sk) } /// Generates a secret key and a corresponding public key using a cryptographically /// secure pseudo-random number generator. pub fn secp_gen_keypair() -> (PublicKey, SecretKey) { let mut rng = rand::thread_rng(); secp_gen_keypair_with_rng(&mut rng) } /// Decodes a Bitcoin transaction from the given hex string. /// /// # Panics /// /// - If the given hex string can't be decoded as a Bitcoin transaction. pub fn btc_tx_from_hex(s: &str) -> Transaction { let bytes = ::bitcoin::util::misc::hex_bytes(s).unwrap(); serialize::deserialize(&bytes).unwrap() }