Skip to content

Commit 0917ebf

Browse files
committed
Allow KeysManager to opt-into the new remote_key derivation
The `remote_key` derived by default in `KeysManager` depends on the chanel's `channel_keys_id`, which generally has sufficient entropy that without it the `remote_key` cannot be re-derived. In disaster case where there is no remaining state except the `KeysManager`'s `seed`, this results in lost funds, even if the counterparty force-closes the channel. Luckily, because of the `static_remote_key` feature, there's no need for this. If the `remote_key` we derive is one of a countable set, we can simply scan the chain for outputs to our `remote_key`s. Here we finally allow users to opt into the new derivation scheme, using the new derivation scheme for `remote_key`s for new and spliced channels if a new `KeysManager::new` argument is set to `true`.
1 parent dc8ae6a commit 0917ebf

File tree

19 files changed

+105
-45
lines changed

19 files changed

+105
-45
lines changed

fuzz/src/chanmon_consistency.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -389,6 +389,7 @@ impl SignerProvider for KeyProvider {
389389
SecretKey::from_slice(&[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, 5, self.node_secret[31]]).unwrap(),
390390
SecretKey::from_slice(&[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, 6, self.node_secret[31]]).unwrap(),
391391
SecretKey::from_slice(&[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, 6, self.node_secret[31]]).unwrap(),
392+
true,
392393
SecretKey::from_slice(&[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, 7, self.node_secret[31]]).unwrap(),
393394
SecretKey::from_slice(&[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, 8, self.node_secret[31]]).unwrap(),
394395
[id, 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, 9, self.node_secret[31]],

fuzz/src/full_stack.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -476,7 +476,7 @@ impl SignerProvider for KeyProvider {
476476
e = SecretKey::from_slice(&key).unwrap();
477477
key[30] = 6 + if inbound { 0 } else { 6 };
478478
f = key;
479-
let signer = InMemorySigner::new(a, b, c, c, d, e, f, keys_id, keys_id);
479+
let signer = InMemorySigner::new(a, b, c, c, true, d, e, f, keys_id, keys_id);
480480

481481
TestChannelSigner::new_with_revoked(DynSigner::new(signer), state, false, false)
482482
}

fuzz/src/lsps_message.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ pub fn do_test(data: &[u8]) {
3939
let scorer = Arc::new(LockingWrapper::new(TestScorer::new()));
4040
let now = Duration::from_secs(genesis_block.header.time as u64);
4141
let seed = sha256::Hash::hash(b"lsps-message-seed").to_byte_array();
42-
let keys_manager = Arc::new(KeysManager::new(&seed, now.as_secs(), now.subsec_nanos()));
42+
let keys_manager = Arc::new(KeysManager::new(&seed, now.as_secs(), now.subsec_nanos(), true));
4343
let router = Arc::new(DefaultRouter::new(
4444
Arc::clone(&network_graph),
4545
Arc::clone(&logger),

lightning-background-processor/src/lib.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2255,7 +2255,8 @@ mod tests {
22552255
let scorer = Arc::new(LockingWrapper::new(TestScorer::new()));
22562256
let now = Duration::from_secs(genesis_block.header.time as u64);
22572257
let seed = [i as u8; 32];
2258-
let keys_manager = Arc::new(KeysManager::new(&seed, now.as_secs(), now.subsec_nanos()));
2258+
let keys_manager =
2259+
Arc::new(KeysManager::new(&seed, now.as_secs(), now.subsec_nanos(), true));
22592260
let router = Arc::new(DefaultRouter::new(
22602261
Arc::clone(&network_graph),
22612262
Arc::clone(&logger),
@@ -2271,7 +2272,8 @@ mod tests {
22712272
let kv_store =
22722273
Arc::new(Persister::new(format!("{}_persister_{}", &persist_dir, i).into()));
22732274
let now = Duration::from_secs(genesis_block.header.time as u64);
2274-
let keys_manager = Arc::new(KeysManager::new(&seed, now.as_secs(), now.subsec_nanos()));
2275+
let keys_manager =
2276+
Arc::new(KeysManager::new(&seed, now.as_secs(), now.subsec_nanos(), true));
22752277
let chain_monitor = Arc::new(chainmonitor::ChainMonitor::new(
22762278
Some(Arc::clone(&chain_source)),
22772279
Arc::clone(&tx_broadcaster),

lightning-dns-resolver/src/lib.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ mod test {
231231
&self, recipient: PublicKey, local_node_receive_key: ReceiveAuthKey,
232232
context: MessageContext, _peers: Vec<MessageForwardNode>, secp_ctx: &Secp256k1<T>,
233233
) -> Result<Vec<BlindedMessagePath>, ()> {
234-
let keys = KeysManager::new(&[0; 32], 42, 43);
234+
let keys = KeysManager::new(&[0; 32], 42, 43, true);
235235
Ok(vec![BlindedMessagePath::one_hop(
236236
recipient,
237237
local_node_receive_key,
@@ -274,7 +274,7 @@ mod test {
274274
}
275275

276276
fn create_resolver() -> (impl AOnionMessenger, PublicKey) {
277-
let resolver_keys = Arc::new(KeysManager::new(&[99; 32], 42, 43));
277+
let resolver_keys = Arc::new(KeysManager::new(&[99; 32], 42, 43, true));
278278
let resolver_logger = TestLogger { node: "resolver" };
279279
let resolver = OMDomainResolver::ignoring_incoming_proofs("8.8.8.8:53".parse().unwrap());
280280
let resolver = Arc::new(resolver);
@@ -313,7 +313,7 @@ mod test {
313313
let payment_id = PaymentId([42; 32]);
314314
let name = HumanReadableName::from_encoded("matt@mattcorallo.com").unwrap();
315315

316-
let payer_keys = Arc::new(KeysManager::new(&[2; 32], 42, 43));
316+
let payer_keys = Arc::new(KeysManager::new(&[2; 32], 42, 43, true));
317317
let payer_logger = TestLogger { node: "payer" };
318318
let payer_id = payer_keys.get_node_id(Recipient::Node).unwrap();
319319
let payer = Arc::new(URIResolver {

lightning/src/chain/channelmonitor.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6865,6 +6865,7 @@ mod tests {
68656865
SecretKey::from_slice(&[41; 32]).unwrap(),
68666866
SecretKey::from_slice(&[41; 32]).unwrap(),
68676867
SecretKey::from_slice(&[41; 32]).unwrap(),
6868+
true,
68686869
SecretKey::from_slice(&[41; 32]).unwrap(),
68696870
SecretKey::from_slice(&[41; 32]).unwrap(),
68706871
[41; 32],
@@ -7127,6 +7128,7 @@ mod tests {
71277128
SecretKey::from_slice(&[41; 32]).unwrap(),
71287129
SecretKey::from_slice(&[41; 32]).unwrap(),
71297130
SecretKey::from_slice(&[41; 32]).unwrap(),
7131+
true,
71307132
SecretKey::from_slice(&[41; 32]).unwrap(),
71317133
SecretKey::from_slice(&[41; 32]).unwrap(),
71327134
[41; 32],

lightning/src/chain/onchaintx.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1305,6 +1305,7 @@ mod tests {
13051305
SecretKey::from_slice(&[41; 32]).unwrap(),
13061306
SecretKey::from_slice(&[41; 32]).unwrap(),
13071307
SecretKey::from_slice(&[41; 32]).unwrap(),
1308+
true,
13081309
SecretKey::from_slice(&[41; 32]).unwrap(),
13091310
SecretKey::from_slice(&[41; 32]).unwrap(),
13101311
[41; 32],

lightning/src/events/bump_transaction/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1147,7 +1147,7 @@ mod tests {
11471147
),
11481148
]),
11491149
};
1150-
let signer = KeysManager::new(&[42; 32], 42, 42);
1150+
let signer = KeysManager::new(&[42; 32], 42, 42, true);
11511151
let logger = TestLogger::new();
11521152
let handler = BumpTransactionEventHandlerSync::new(&broadcaster, &source, &signer, &logger);
11531153

lightning/src/ln/channel.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15984,6 +15984,7 @@ mod tests {
1598415984
SecretKey::from_slice(&<Vec<u8>>::from_hex("0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff").unwrap()[..]).unwrap(),
1598515985
SecretKey::from_slice(&<Vec<u8>>::from_hex("1111111111111111111111111111111111111111111111111111111111111111").unwrap()[..]).unwrap(),
1598615986
SecretKey::from_slice(&<Vec<u8>>::from_hex("1111111111111111111111111111111111111111111111111111111111111111").unwrap()[..]).unwrap(),
15987+
true,
1598715988
SecretKey::from_slice(&<Vec<u8>>::from_hex("3333333333333333333333333333333333333333333333333333333333333333").unwrap()[..]).unwrap(),
1598815989
SecretKey::from_slice(&<Vec<u8>>::from_hex("1111111111111111111111111111111111111111111111111111111111111111").unwrap()[..]).unwrap(),
1598915990

lightning/src/ln/channelmanager.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19083,7 +19083,7 @@ pub mod bench {
1908319083
config.channel_handshake_config.minimum_depth = 1;
1908419084

1908519085
let seed_a = [1u8; 32];
19086-
let keys_manager_a = KeysManager::new(&seed_a, 42, 42);
19086+
let keys_manager_a = KeysManager::new(&seed_a, 42, 42, true);
1908719087
let chain_monitor_a = ChainMonitor::new(None, &tx_broadcaster, &logger_a, &fee_estimator, &persister_a, &keys_manager_a, keys_manager_a.get_peer_storage_key());
1908819088
let node_a = ChannelManager::new(&fee_estimator, &chain_monitor_a, &tx_broadcaster, &router, &message_router, &logger_a, &keys_manager_a, &keys_manager_a, &keys_manager_a, config.clone(), ChainParameters {
1908919089
network,
@@ -19093,7 +19093,7 @@ pub mod bench {
1909319093

1909419094
let logger_b = test_utils::TestLogger::with_id("node a".to_owned());
1909519095
let seed_b = [2u8; 32];
19096-
let keys_manager_b = KeysManager::new(&seed_b, 42, 42);
19096+
let keys_manager_b = KeysManager::new(&seed_b, 42, 42, true);
1909719097
let chain_monitor_b = ChainMonitor::new(None, &tx_broadcaster, &logger_a, &fee_estimator, &persister_b, &keys_manager_b, keys_manager_b.get_peer_storage_key());
1909819098
let node_b = ChannelManager::new(&fee_estimator, &chain_monitor_b, &tx_broadcaster, &router, &message_router, &logger_b, &keys_manager_b, &keys_manager_b, &keys_manager_b, config.clone(), ChainParameters {
1909919099
network,

0 commit comments

Comments
 (0)