Skip to content

Commit f6793ab

Browse files
committed
Use sha256 instead of ChaCha20 for randomness.
1 parent ee5f208 commit f6793ab

File tree

2 files changed

+9
-10
lines changed

2 files changed

+9
-10
lines changed

lightning-invoice/src/utils.rs

+8-9
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use {CreationError, Currency, DEFAULT_EXPIRY_TIME, Invoice, InvoiceBuilder, Sign
44
use payment::{Payer, Router};
55

66
use bech32::ToBase32;
7-
use bitcoin_hashes::Hash;
7+
use bitcoin_hashes::{Hash, sha256};
88
use crate::prelude::*;
99
use lightning::chain;
1010
use lightning::chain::chaininterface::{BroadcasterInterface, FeeEstimator};
@@ -16,7 +16,6 @@ use lightning::routing::scoring::Score;
1616
use lightning::routing::network_graph::{NetworkGraph, RoutingFees};
1717
use lightning::routing::router::{Route, RouteHint, RouteHintHop, RouteParameters, find_route};
1818
use lightning::util::logger::Logger;
19-
use lightning::util::chacha20::ChaCha20;
2019
use secp256k1::key::PublicKey;
2120
use core::convert::TryInto;
2221
use core::ops::Deref;
@@ -131,14 +130,14 @@ where
131130
pub struct DefaultRouter<G: Deref<Target = NetworkGraph>, L: Deref> where L::Target: Logger {
132131
network_graph: G,
133132
logger: L,
134-
prng: Mutex<ChaCha20>,
133+
random_seed_bytes: Mutex<[u8; 32]>,
135134
}
136135

137136
impl<G: Deref<Target = NetworkGraph>, L: Deref> DefaultRouter<G, L> where L::Target: Logger {
138137
/// Creates a new router using the given [`NetworkGraph`], a [`Logger`], and a randomness source `random_seed_bytes`.
139138
pub fn new(network_graph: G, logger: L, random_seed_bytes: [u8; 32]) -> Self {
140-
let prng = Mutex::new(ChaCha20::new(&random_seed_bytes, &[0; 8]));
141-
Self { network_graph, logger, prng }
139+
let random_seed_bytes = Mutex::new(random_seed_bytes);
140+
Self { network_graph, logger, random_seed_bytes }
142141
}
143142
}
144143

@@ -147,10 +146,10 @@ where L::Target: Logger {
147146
fn find_route(
148147
&self, payer: &PublicKey, params: &RouteParameters, _payment_hash: &PaymentHash,
149148
first_hops: Option<&[&ChannelDetails]>, scorer: &S
150-
) -> Result<Route, LightningError> {
151-
let mut random_seed_bytes = [0u8; 32];
152-
self.prng.lock().unwrap().process_in_place(&mut random_seed_bytes);
153-
find_route(payer, params, &*self.network_graph, first_hops, &*self.logger, scorer, &random_seed_bytes)
149+
) -> Result<Route, LightningError> {
150+
let mut locked_random_seed_bytes = self.random_seed_bytes.lock().unwrap();
151+
*locked_random_seed_bytes = sha256::Hash::hash(&*locked_random_seed_bytes).into_inner();
152+
find_route(payer, params, &*self.network_graph, first_hops, &*self.logger, scorer, &locked_random_seed_bytes.clone())
154153
}
155154
}
156155

lightning/src/util/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@ pub mod errors;
2020
pub mod ser;
2121
pub mod message_signing;
2222
pub mod invoice;
23-
pub mod chacha20;
2423

2524
pub(crate) mod atomic_counter;
2625
pub(crate) mod byte_utils;
26+
pub(crate) mod chacha20;
2727
#[cfg(feature = "fuzztarget")]
2828
pub mod zbase32;
2929
#[cfg(not(feature = "fuzztarget"))]

0 commit comments

Comments
 (0)