Skip to content

Commit 948696e

Browse files
committed
Add a method to get session secret for onion packet to KeysInterface
1 parent 6969fc9 commit 948696e

File tree

3 files changed

+14
-5
lines changed

3 files changed

+14
-5
lines changed

src/chain/keysinterface.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,8 @@ pub trait KeysInterface: Send + Sync {
7979
/// Get a new set of ChannelKeys for per-channel secrets. These MUST be unique even if you
8080
/// restarted with some stale data!
8181
fn get_channel_keys(&self, inbound: bool) -> ChannelKeys;
82+
/// Get a secret for construting an onion packet
83+
fn get_session_key(&self) -> SecretKey;
8284
}
8385

8486
/// Set of lightning keys needed to operate a channel as described in BOLT 3
@@ -158,6 +160,8 @@ pub struct KeysManager {
158160
shutdown_pubkey: PublicKey,
159161
channel_master_key: ExtendedPrivKey,
160162
channel_child_index: AtomicUsize,
163+
session_master_key: ExtendedPrivKey,
164+
session_child_index: AtomicUsize,
161165

162166
logger: Arc<Logger>,
163167
}
@@ -184,13 +188,16 @@ impl KeysManager {
184188
Err(_) => panic!("Your RNG is busted"),
185189
};
186190
let channel_master_key = master_key.ckd_priv(&secp_ctx, ChildNumber::from_hardened_idx(3)).expect("Your RNG is busted");
191+
let session_master_key = master_key.ckd_priv(&secp_ctx, ChildNumber::from_hardened_idx(4)).expect("Your RNG is busted");
187192
KeysManager {
188193
secp_ctx,
189194
node_secret,
190195
destination_script,
191196
shutdown_pubkey,
192197
channel_master_key,
193198
channel_child_index: AtomicUsize::new(0),
199+
session_master_key,
200+
session_child_index: AtomicUsize::new(0),
194201

195202
logger,
196203
}
@@ -235,4 +242,9 @@ impl KeysInterface for KeysManager {
235242
sha.result(&mut seed);
236243
ChannelKeys::new_from_seed(&seed)
237244
}
245+
246+
fn get_session_key(&self) -> SecretKey {
247+
let child_ix = self.session_child_index.fetch_add(1, Ordering::AcqRel);
248+
self.session_master_key.ckd_priv(&self.secp_ctx, ChildNumber::from_hardened_idx(child_ix as u32)).expect("Your RNG is busted").secret_key
249+
}
238250
}

src/ln/channel.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3902,6 +3902,7 @@ mod tests {
39023902
}
39033903

39043904
fn get_channel_keys(&self, _inbound: bool) -> ChannelKeys { self.chan_keys.clone() }
3905+
fn get_session_key(&self) -> SecretKey { panic!(); }
39053906
}
39063907

39073908
#[test]

src/ln/channelmanager.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1199,11 +1199,7 @@ impl ChannelManager {
11991199
}
12001200
}
12011201

1202-
let session_priv = SecretKey::from_slice(&self.secp_ctx, &{
1203-
let mut session_key = [0; 32];
1204-
rng::fill_bytes(&mut session_key);
1205-
session_key
1206-
}).expect("RNG is bad!");
1202+
let session_priv = self.keys_manager.get_session_key();
12071203

12081204
let cur_height = self.latest_block_height.load(Ordering::Acquire) as u32 + 1;
12091205

0 commit comments

Comments
 (0)