Skip to content

Commit 3a8c01a

Browse files
author
Antoine Riard
committed
Integrate KeysInterface to ChannelManager with Arc
1 parent ea98741 commit 3a8c01a

File tree

3 files changed

+34
-21
lines changed

3 files changed

+34
-21
lines changed

fuzz/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ hex = "0.3"
2323
honggfuzz = { version = "0.5", optional = true }
2424
rust-crypto = "0.2"
2525
secp256k1 = { version = "0.11", features=["fuzztarget"] }
26+
rand = "0.4"
2627

2728
[build-dependencies]
2829
cc = "1.0"

fuzz/fuzz_targets/full_stack_target.rs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ extern crate bitcoin;
22
extern crate crypto;
33
extern crate lightning;
44
extern crate secp256k1;
5+
extern crate rand;
56

67
use bitcoin::blockdata::block::BlockHeader;
78
use bitcoin::blockdata::transaction::{Transaction, TxOut};
@@ -14,6 +15,8 @@ use crypto::digest::Digest;
1415

1516
use lightning::chain::chaininterface::{BroadcasterInterface,ConfirmationTarget,ChainListener,FeeEstimator,ChainWatchInterfaceUtil};
1617
use lightning::chain::transaction::OutPoint;
18+
use lightning::chain::keysinterface::KeysInterface;
19+
use lightning::chain::keysinterface;
1720
use lightning::ln::channelmonitor;
1821
use lightning::ln::channelmanager::ChannelManager;
1922
use lightning::ln::peer_handler::{MessageHandler,PeerManager,SocketDescriptor};
@@ -30,6 +33,8 @@ use utils::test_logger;
3033
use secp256k1::key::{PublicKey,SecretKey};
3134
use secp256k1::Secp256k1;
3235

36+
use rand::{thread_rng,Rng};
37+
3338
use std::cell::RefCell;
3439
use std::collections::HashMap;
3540
use std::cmp;
@@ -236,8 +241,12 @@ pub fn do_test(data: &[u8], logger: &Arc<Logger>) {
236241
let broadcast = Arc::new(TestBroadcaster{});
237242
let monitor = channelmonitor::SimpleManyChannelMonitor::new(watch.clone(), broadcast.clone());
238243

239-
let channelmanager = ChannelManager::new(our_network_key, slice_to_be32(get_slice!(4)), get_slice!(1)[0] != 0, Network::Bitcoin, fee_est.clone(), monitor.clone(), watch.clone(), broadcast.clone(), Arc::clone(&logger)).unwrap();
240-
let router = Arc::new(Router::new(PublicKey::from_secret_key(&secp_ctx, &our_network_key), watch.clone(), Arc::clone(&logger)));
244+
let mut seed = [0; 32];
245+
let mut rng = thread_rng();
246+
rng.fill_bytes(&mut seed);
247+
let keys_manager = Arc::new(keysinterface::KeysManager::new(&seed, Network::Testnet, Arc::clone(&logger)).unwrap());
248+
let channelmanager = ChannelManager::new(slice_to_be32(get_slice!(4)), get_slice!(1)[0] != 0, Network::Bitcoin, fee_est.clone(), monitor.clone(), watch.clone(), broadcast.clone(), Arc::clone(&logger), keys_manager.clone()).unwrap();
249+
let router = Arc::new(Router::new(PublicKey::from_secret_key(&secp_ctx, &keys_manager.get_node_secret()), watch.clone(), Arc::clone(&logger)));
241250

242251
let peers = RefCell::new([false; 256]);
243252
let mut loss_detector = MoneyLossDetector::new(&peers, channelmanager.clone(), monitor.clone(), PeerManager::new(MessageHandler {

src/ln/channelmanager.rs

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ use ln::router::{Route,RouteHop};
2828
use ln::msgs;
2929
use ln::msgs::{ChannelMessageHandler, HandleError, RAACommitmentOrder};
3030
use chain::keysinterface::ChannelKeys;
31+
use chain::keysinterface::KeysInterface;
3132
use util::{byte_utils, events, internal_traits, rng};
3233
use util::sha2::Sha256;
3334
use util::ser::{Readable, Writeable};
@@ -292,6 +293,8 @@ pub struct ChannelManager {
292293

293294
pending_events: Mutex<Vec<events::Event>>,
294295

296+
keys_manager: Arc<KeysInterface>,
297+
295298
logger: Arc<Logger>,
296299
}
297300

@@ -364,7 +367,7 @@ impl ChannelManager {
364367
/// Non-proportional fees are fixed according to our risk using the provided fee estimator.
365368
///
366369
/// panics if channel_value_satoshis is >= `MAX_FUNDING_SATOSHIS`!
367-
pub fn new(our_network_key: SecretKey, fee_proportional_millionths: u32, announce_channels_publicly: bool, network: Network, feeest: Arc<FeeEstimator>, monitor: Arc<ManyChannelMonitor>, chain_monitor: Arc<ChainWatchInterface>, tx_broadcaster: Arc<BroadcasterInterface>, logger: Arc<Logger>) -> Result<Arc<ChannelManager>, secp256k1::Error> {
370+
pub fn new(fee_proportional_millionths: u32, announce_channels_publicly: bool, network: Network, feeest: Arc<FeeEstimator>, monitor: Arc<ManyChannelMonitor>, chain_monitor: Arc<ChainWatchInterface>, tx_broadcaster: Arc<BroadcasterInterface>, logger: Arc<Logger>, keys_manager: Arc<KeysInterface>) -> Result<Arc<ChannelManager>, secp256k1::Error> {
368371
let secp_ctx = Secp256k1::new();
369372

370373
let res = Arc::new(ChannelManager {
@@ -386,10 +389,12 @@ impl ChannelManager {
386389
forward_htlcs: HashMap::new(),
387390
claimable_htlcs: HashMap::new(),
388391
}),
389-
our_network_key,
392+
our_network_key: keys_manager.get_node_secret(),
390393

391394
pending_events: Mutex::new(Vec::new()),
392395

396+
keys_manager,
397+
393398
logger,
394399
});
395400
let weak_res = Arc::downgrade(&res);
@@ -421,11 +426,10 @@ impl ChannelManager {
421426
commitment_seed: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
422427
}
423428
} else {
424-
let mut key_seed = [0u8; 32];
425-
rng::fill_bytes(&mut key_seed);
426-
match ChannelKeys::new_from_seed(&key_seed) {
427-
Ok(key) => key,
428-
Err(_) => panic!("RNG is busted!")
429+
if let Some(keys) = self.keys_manager.get_channel_keys() {
430+
keys
431+
} else {
432+
panic!("KeysManager is busted!");
429433
}
430434
};
431435

@@ -1680,11 +1684,10 @@ impl ChannelManager {
16801684
commitment_seed: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
16811685
}
16821686
} else {
1683-
let mut key_seed = [0u8; 32];
1684-
rng::fill_bytes(&mut key_seed);
1685-
match ChannelKeys::new_from_seed(&key_seed) {
1686-
Ok(key) => key,
1687-
Err(_) => panic!("RNG is busted!")
1687+
if let Some(keys) = self.keys_manager.get_channel_keys() {
1688+
keys
1689+
} else {
1690+
panic!("KeysManager is busted!");
16881691
}
16891692
};
16901693

@@ -2678,6 +2681,8 @@ mod tests {
26782681
use chain::chaininterface;
26792682
use chain::transaction::OutPoint;
26802683
use chain::chaininterface::ChainListener;
2684+
use chain::keysinterface::KeysInterface;
2685+
use chain::keysinterface;
26812686
use ln::channelmanager::{ChannelManager,OnionKeys};
26822687
use ln::channelmonitor::{ChannelMonitorUpdateErr, CLTV_CLAIM_BUFFER, HTLC_FAIL_TIMEOUT_BLOCKS};
26832688
use ln::router::{Route, RouteHop, Router};
@@ -3450,14 +3455,12 @@ mod tests {
34503455
let feeest = Arc::new(test_utils::TestFeeEstimator { sat_per_kw: 253 });
34513456
let chain_monitor = Arc::new(chaininterface::ChainWatchInterfaceUtil::new(Network::Testnet, Arc::clone(&logger)));
34523457
let tx_broadcaster = Arc::new(test_utils::TestBroadcaster{txn_broadcasted: Mutex::new(Vec::new())});
3458+
let mut seed = [0; 32];
3459+
rng.fill_bytes(&mut seed);
3460+
let keys_manager = Arc::new(keysinterface::KeysManager::new(&seed, Network::Testnet, Arc::clone(&logger)).unwrap());
34533461
let chan_monitor = Arc::new(test_utils::TestChannelMonitor::new(chain_monitor.clone(), tx_broadcaster.clone()));
3454-
let node_id = {
3455-
let mut key_slice = [0; 32];
3456-
rng.fill_bytes(&mut key_slice);
3457-
SecretKey::from_slice(&secp_ctx, &key_slice).unwrap()
3458-
};
3459-
let node = ChannelManager::new(node_id.clone(), 0, true, Network::Testnet, feeest.clone(), chan_monitor.clone(), chain_monitor.clone(), tx_broadcaster.clone(), Arc::clone(&logger)).unwrap();
3460-
let router = Router::new(PublicKey::from_secret_key(&secp_ctx, &node_id), chain_monitor.clone(), Arc::clone(&logger));
3462+
let node = ChannelManager::new(0, true, Network::Testnet, feeest.clone(), chan_monitor.clone(), chain_monitor.clone(), tx_broadcaster.clone(), Arc::clone(&logger), keys_manager.clone()).unwrap();
3463+
let router = Router::new(PublicKey::from_secret_key(&secp_ctx, &keys_manager.get_node_secret()), chain_monitor.clone(), Arc::clone(&logger));
34613464
nodes.push(Node { chain_monitor, tx_broadcaster, chan_monitor, node, router,
34623465
network_payment_count: payment_count.clone(),
34633466
network_chan_count: chan_count.clone(),

0 commit comments

Comments
 (0)