Skip to content

Commit cef82e4

Browse files
authored
Merge pull request #683 from tnull/2025-10-use-os-rng
Upgrade `rand` dependency, use `os_rng` for seed generation
2 parents dcde77a + 7063f2c commit cef82e4

File tree

10 files changed

+33
-29
lines changed

10 files changed

+33
-29
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ bip39 = "2.0.0"
5454
bip21 = { version = "0.5", features = ["std"], default-features = false }
5555

5656
base64 = { version = "0.22.1", default-features = false, features = ["std"] }
57-
rand = "0.8.5"
57+
rand = { version = "0.9.2", default-features = false, features = ["std", "thread_rng", "os_rng"] }
5858
chrono = { version = "0.4", default-features = false, features = ["clock"] }
5959
tokio = { version = "1.37", default-features = false, features = [ "rt-multi-thread", "time", "sync", "macros" ] }
6060
esplora-client = { version = "0.12", default-features = false, features = ["tokio", "async-https-rustls"] }

src/event.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ use lightning::util::persist::KVStoreSync;
3030
use lightning::util::ser::{Readable, ReadableArgs, Writeable, Writer};
3131
use lightning_liquidity::lsps2::utils::compute_opening_fee;
3232
use lightning_types::payment::{PaymentHash, PaymentPreimage};
33-
use rand::{thread_rng, Rng};
33+
use rand::{rng, Rng};
3434

3535
use crate::config::{may_announce_channel, Config};
3636
use crate::connection::ConnectionManager;
@@ -1137,7 +1137,7 @@ where
11371137
}
11381138
}
11391139

1140-
let user_channel_id: u128 = thread_rng().gen::<u128>();
1140+
let user_channel_id: u128 = rng().random();
11411141
let allow_0conf = self.config.trusted_peers_0conf.contains(&counterparty_node_id);
11421142
let mut channel_override_config = None;
11431143
if let Some((lsp_node_id, _)) = self

src/io/test_utils.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ use lightning::util::persist::{
1818
};
1919
use lightning::util::test_utils;
2020
use lightning::{check_added_monitors, check_closed_broadcast, check_closed_event};
21-
use rand::distributions::Alphanumeric;
22-
use rand::{thread_rng, Rng};
21+
use rand::distr::Alphanumeric;
22+
use rand::{rng, Rng};
2323

2424
type TestMonitorUpdatePersister<'a, K> = MonitorUpdatingPersister<
2525
&'a K,
@@ -34,7 +34,7 @@ const EXPECTED_UPDATES_PER_PAYMENT: u64 = 5;
3434

3535
pub(crate) fn random_storage_path() -> PathBuf {
3636
let mut temp_path = std::env::temp_dir();
37-
let mut rng = thread_rng();
37+
let mut rng = rng();
3838
let rand_dir: String = (0..7).map(|_| rng.sample(Alphanumeric) as char).collect();
3939
temp_path.push(rand_dir);
4040
temp_path

src/io/utils.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ use lightning::util::persist::{
3535
};
3636
use lightning::util::ser::{Readable, ReadableArgs, Writeable};
3737
use lightning_types::string::PrintableString;
38-
use rand::{thread_rng, RngCore};
38+
use rand::rngs::OsRng;
39+
use rand::TryRngCore;
3940

4041
use super::*;
4142
use crate::chain::ChainSource;
@@ -63,7 +64,7 @@ pub const EXTERNAL_PATHFINDING_SCORES_CACHE_KEY: &str = "external_pathfinding_sc
6364
pub fn generate_entropy_mnemonic() -> Mnemonic {
6465
// bip39::Mnemonic supports 256 bit entropy max
6566
let mut entropy = [0; 32];
66-
thread_rng().fill_bytes(&mut entropy);
67+
OsRng.try_fill_bytes(&mut entropy).expect("Failed to generate entropy");
6768
Mnemonic::from_entropy(&entropy).unwrap()
6869
}
6970

@@ -96,7 +97,10 @@ where
9697
Ok(key)
9798
} else {
9899
let mut key = [0; WALLET_KEYS_SEED_LEN];
99-
thread_rng().fill_bytes(&mut key);
100+
OsRng.try_fill_bytes(&mut key).map_err(|e| {
101+
log_error!(logger, "Failed to generate entropy: {}", e);
102+
std::io::Error::new(std::io::ErrorKind::Other, "Failed to generate seed bytes")
103+
})?;
100104

101105
if let Some(parent_dir) = Path::new(&keys_seed_path).parent() {
102106
fs::create_dir_all(parent_dir).map_err(|e| {

src/io/vss_store.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -592,7 +592,7 @@ pub(crate) struct RandEntropySource;
592592

593593
impl EntropySource for RandEntropySource {
594594
fn fill_bytes(&self, buffer: &mut [u8]) {
595-
rand::thread_rng().fill_bytes(buffer);
595+
rand::rng().fill_bytes(buffer);
596596
}
597597
}
598598

@@ -604,8 +604,8 @@ impl RefUnwindSafe for VssStore {}
604604
mod tests {
605605
use std::collections::HashMap;
606606

607-
use rand::distributions::Alphanumeric;
608-
use rand::{thread_rng, Rng, RngCore};
607+
use rand::distr::Alphanumeric;
608+
use rand::{rng, Rng, RngCore};
609609
use vss_client::headers::FixedHeaders;
610610

611611
use super::*;
@@ -615,7 +615,7 @@ mod tests {
615615
#[test]
616616
fn vss_read_write_remove_list_persist() {
617617
let vss_base_url = std::env::var("TEST_VSS_BASE_URL").unwrap();
618-
let mut rng = thread_rng();
618+
let mut rng = rng();
619619
let rand_store_id: String = (0..7).map(|_| rng.sample(Alphanumeric) as char).collect();
620620
let mut vss_seed = [0u8; 32];
621621
rng.fill_bytes(&mut vss_seed);
@@ -631,7 +631,7 @@ mod tests {
631631
#[tokio::test(flavor = "multi_thread", worker_threads = 1)]
632632
async fn vss_read_write_remove_list_persist_in_runtime_context() {
633633
let vss_base_url = std::env::var("TEST_VSS_BASE_URL").unwrap();
634-
let mut rng = thread_rng();
634+
let mut rng = rng();
635635
let rand_store_id: String = (0..7).map(|_| rng.sample(Alphanumeric) as char).collect();
636636
let mut vss_seed = [0u8; 32];
637637
rng.fill_bytes(&mut vss_seed);

src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1117,7 +1117,7 @@ impl Node {
11171117
}
11181118

11191119
let push_msat = push_to_counterparty_msat.unwrap_or(0);
1120-
let user_channel_id: u128 = rand::thread_rng().gen::<u128>();
1120+
let user_channel_id: u128 = rand::rng().random();
11211121

11221122
match self.channel_manager.create_channel(
11231123
peer_info.node_id,

src/liquidity.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -562,7 +562,7 @@ where
562562
return;
563563
};
564564

565-
let user_channel_id: u128 = rand::thread_rng().gen::<u128>();
565+
let user_channel_id: u128 = rand::rng().random();
566566
let intercept_scid = self.channel_manager.get_intercept_scid();
567567

568568
if let Some(payment_size_msat) = payment_size_msat {

src/payment/bolt12.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ impl Bolt12Payment {
8484
let offer = maybe_deref(offer);
8585

8686
let mut random_bytes = [0u8; 32];
87-
rand::thread_rng().fill_bytes(&mut random_bytes);
87+
rand::rng().fill_bytes(&mut random_bytes);
8888
let payment_id = PaymentId(random_bytes);
8989
let retry_strategy = Retry::Timeout(LDK_PAYMENT_RETRY_TIMEOUT);
9090
let route_params_config = RouteParametersConfig::default();
@@ -191,7 +191,7 @@ impl Bolt12Payment {
191191
let offer = maybe_deref(offer);
192192

193193
let mut random_bytes = [0u8; 32];
194-
rand::thread_rng().fill_bytes(&mut random_bytes);
194+
rand::rng().fill_bytes(&mut random_bytes);
195195
let payment_id = PaymentId(random_bytes);
196196
let retry_strategy = Retry::Timeout(LDK_PAYMENT_RETRY_TIMEOUT);
197197
let route_params_config = RouteParametersConfig::default();
@@ -408,7 +408,7 @@ impl Bolt12Payment {
408408
payer_note: Option<String>,
409409
) -> Result<Refund, Error> {
410410
let mut random_bytes = [0u8; 32];
411-
rand::thread_rng().fill_bytes(&mut random_bytes);
411+
rand::rng().fill_bytes(&mut random_bytes);
412412
let payment_id = PaymentId(random_bytes);
413413

414414
let absolute_expiry = (SystemTime::now() + Duration::from_secs(expiry_secs as u64))

tests/common/mod.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@ use lightning_invoice::{Bolt11InvoiceDescription, Description};
4343
use lightning_persister::fs_store::FilesystemStore;
4444
use lightning_types::payment::{PaymentHash, PaymentPreimage};
4545
use logging::TestLogWriter;
46-
use rand::distributions::Alphanumeric;
47-
use rand::{thread_rng, Rng};
46+
use rand::distr::Alphanumeric;
47+
use rand::{rng, Rng};
4848
use serde_json::{json, Value};
4949

5050
macro_rules! expect_event {
@@ -191,15 +191,15 @@ pub(crate) fn setup_bitcoind_and_electrsd() -> (BitcoinD, ElectrsD) {
191191

192192
pub(crate) fn random_storage_path() -> PathBuf {
193193
let mut temp_path = std::env::temp_dir();
194-
let mut rng = thread_rng();
194+
let mut rng = rng();
195195
let rand_dir: String = (0..7).map(|_| rng.sample(Alphanumeric) as char).collect();
196196
temp_path.push(rand_dir);
197197
temp_path
198198
}
199199

200200
pub(crate) fn random_port() -> u16 {
201-
let mut rng = thread_rng();
202-
rng.gen_range(5000..32768)
201+
let mut rng = rng();
202+
rng.random_range(5000..32768)
203203
}
204204

205205
pub(crate) fn random_listening_addresses() -> Vec<SocketAddress> {
@@ -216,8 +216,8 @@ pub(crate) fn random_listening_addresses() -> Vec<SocketAddress> {
216216
}
217217

218218
pub(crate) fn random_node_alias() -> Option<NodeAlias> {
219-
let mut rng = thread_rng();
220-
let rand_val = rng.gen_range(0..1000);
219+
let mut rng = rng();
220+
let rand_val = rng.random_range(0..1000);
221221
let alias = format!("ldk-node-{}", rand_val);
222222
let mut bytes = [0u8; 32];
223223
bytes[..alias.as_bytes().len()].copy_from_slice(alias.as_bytes());

tests/integration_tests_cln.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ use ldk_node::bitcoin::Amount;
2222
use ldk_node::lightning::ln::msgs::SocketAddress;
2323
use ldk_node::{Builder, Event};
2424
use lightning_invoice::{Bolt11Invoice, Bolt11InvoiceDescription, Description};
25-
use rand::distributions::Alphanumeric;
26-
use rand::{thread_rng, Rng};
25+
use rand::distr::Alphanumeric;
26+
use rand::{rng, Rng};
2727

2828
#[tokio::test(flavor = "multi_thread", worker_threads = 1)]
2929
async fn test_cln() {
@@ -99,7 +99,7 @@ async fn test_cln() {
9999
let user_channel_id = common::expect_channel_ready_event!(node, cln_node_id);
100100

101101
// Send a payment to CLN
102-
let mut rng = thread_rng();
102+
let mut rng = rng();
103103
let rand_label: String = (0..7).map(|_| rng.sample(Alphanumeric) as char).collect();
104104
let cln_invoice =
105105
cln_client.invoice(Some(10_000_000), &rand_label, &rand_label, None, None, None).unwrap();

0 commit comments

Comments
 (0)