X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=lightning%2Fsrc%2Futil%2Fcrypto.rs;h=617f71e42c6854cb5d106e7a20d7543b14332e3b;hb=4fb5708eec5a0683039c7877a0b3d452e21735c9;hp=39dfd39b785b048535163756ddc417ff80009ed4;hpb=b8ed4d2608e32128dd5a1dee92911638a4301138;p=rust-lightning diff --git a/lightning/src/util/crypto.rs b/lightning/src/util/crypto.rs index 39dfd39b..617f71e4 100644 --- a/lightning/src/util/crypto.rs +++ b/lightning/src/util/crypto.rs @@ -3,6 +3,10 @@ use bitcoin::hashes::hmac::{Hmac, HmacEngine}; use bitcoin::hashes::sha256::Hash as Sha256; use bitcoin::secp256k1::{Message, Secp256k1, SecretKey, ecdsa::Signature, Signing}; +use crate::sign::EntropySource; + +use core::ops::Deref; + macro_rules! hkdf_extract_expand { ($salt: expr, $ikm: expr) => {{ let mut hmac = HmacEngine::::new($salt); @@ -51,3 +55,21 @@ pub fn sign(ctx: &Secp256k1, msg: &Message, sk: &SecretKey) -> Si let sig = ctx.sign_ecdsa(msg, sk); sig } + +#[inline] +pub fn sign_with_aux_rand( + ctx: &Secp256k1, msg: &Message, sk: &SecretKey, entropy_source: &ES +) -> Signature where ES::Target: EntropySource { + #[cfg(feature = "grind_signatures")] + let sig = loop { + let sig = ctx.sign_ecdsa_with_noncedata(msg, sk, &entropy_source.get_secure_random_bytes()); + if sig.serialize_compact()[0] < 0x80 { + break sig; + } + }; + #[cfg(all(not(feature = "grind_signatures"), not(feature = "_test_vectors")))] + let sig = ctx.sign_ecdsa_with_noncedata(msg, sk, &entropy_source.get_secure_random_bytes()); + #[cfg(all(not(feature = "grind_signatures"), feature = "_test_vectors"))] + let sig = sign(ctx, msg, sk); + sig +}