Merge pull request #2801 from valentinewallace/2023-12-rb-groundwork-followups
[rust-lightning] / lightning / src / util / crypto.rs
index d4d15cfa3045a9fb09b4400b12302b9984d5d49f..98963c7c2bd4fd823c614e25b50dd1785d8dbab2 100644 (file)
@@ -3,7 +3,7 @@ use bitcoin::hashes::hmac::{Hmac, HmacEngine};
 use bitcoin::hashes::sha256::Hash as Sha256;
 use bitcoin::secp256k1::{Message, Secp256k1, SecretKey, ecdsa::Signature, Signing};
 
-use crate::chain::keysinterface::EntropySource;
+use crate::sign::EntropySource;
 
 use core::ops::Deref;
 
@@ -11,26 +11,38 @@ macro_rules! hkdf_extract_expand {
        ($salt: expr, $ikm: expr) => {{
                let mut hmac = HmacEngine::<Sha256>::new($salt);
                hmac.input($ikm);
-               let prk = Hmac::from_engine(hmac).into_inner();
+               let prk = Hmac::from_engine(hmac).to_byte_array();
                let mut hmac = HmacEngine::<Sha256>::new(&prk[..]);
                hmac.input(&[1; 1]);
-               let t1 = Hmac::from_engine(hmac).into_inner();
+               let t1 = Hmac::from_engine(hmac).to_byte_array();
                let mut hmac = HmacEngine::<Sha256>::new(&prk[..]);
                hmac.input(&t1);
                hmac.input(&[2; 1]);
-               (t1, Hmac::from_engine(hmac).into_inner(), prk)
+               (t1, Hmac::from_engine(hmac).to_byte_array(), prk)
        }};
        ($salt: expr, $ikm: expr, 2) => {{
                let (k1, k2, _) = hkdf_extract_expand!($salt, $ikm);
                (k1, k2)
        }};
-       ($salt: expr, $ikm: expr, 3) => {{
+       ($salt: expr, $ikm: expr, 5) => {{
                let (k1, k2, prk) = hkdf_extract_expand!($salt, $ikm);
 
                let mut hmac = HmacEngine::<Sha256>::new(&prk[..]);
                hmac.input(&k2);
                hmac.input(&[3; 1]);
-               (k1, k2, Hmac::from_engine(hmac).into_inner())
+               let k3 = Hmac::from_engine(hmac).to_byte_array();
+
+               let mut hmac = HmacEngine::<Sha256>::new(&prk[..]);
+               hmac.input(&k3);
+               hmac.input(&[4; 1]);
+               let k4 = Hmac::from_engine(hmac).to_byte_array();
+
+               let mut hmac = HmacEngine::<Sha256>::new(&prk[..]);
+               hmac.input(&k4);
+               hmac.input(&[5; 1]);
+               let k5 = Hmac::from_engine(hmac).to_byte_array();
+
+               (k1, k2, k3, k4, k5)
        }}
 }
 
@@ -38,8 +50,8 @@ pub fn hkdf_extract_expand_twice(salt: &[u8], ikm: &[u8]) -> ([u8; 32], [u8; 32]
        hkdf_extract_expand!(salt, ikm, 2)
 }
 
-pub fn hkdf_extract_expand_thrice(salt: &[u8], ikm: &[u8]) -> ([u8; 32], [u8; 32], [u8; 32]) {
-       hkdf_extract_expand!(salt, ikm, 3)
+pub fn hkdf_extract_expand_5x(salt: &[u8], ikm: &[u8]) -> ([u8; 32], [u8; 32], [u8; 32], [u8; 32], [u8; 32]) {
+       hkdf_extract_expand!(salt, ikm, 5)
 }
 
 #[inline]
@@ -52,6 +64,7 @@ pub fn sign<C: Signing>(ctx: &Secp256k1<C>, msg: &Message, sk: &SecretKey) -> Si
 }
 
 #[inline]
+#[allow(unused_variables)]
 pub fn sign_with_aux_rand<C: Signing, ES: Deref>(
        ctx: &Secp256k1<C>, msg: &Message, sk: &SecretKey, entropy_source: &ES
 ) -> Signature where ES::Target: EntropySource {
@@ -62,7 +75,9 @@ pub fn sign_with_aux_rand<C: Signing, ES: Deref>(
                        break sig;
                }
        };
-       #[cfg(not(feature = "grind_signatures"))]
+       #[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
 }