Skip to content

Commit f335ecb

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 c1cd423 commit f335ecb

File tree

20 files changed

+111
-48
lines changed

20 files changed

+111
-48
lines changed

ext-functional-test-demo/src/main.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ mod tests {
1616

1717
impl TestSignerFactory for BrokenSignerFactory {
1818
fn make_signer(
19-
&self, _seed: &[u8; 32], _now: Duration,
19+
&self, _seed: &[u8; 32], _now: Duration, _v2_remote_key_derivation: bool,
2020
) -> Box<dyn DynKeysInterfaceTrait<EcdsaSigner = DynSigner>> {
2121
panic!()
2222
}

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
@@ -2313,7 +2313,8 @@ mod tests {
23132313
let scorer = Arc::new(LockingWrapper::new(TestScorer::new()));
23142314
let now = Duration::from_secs(genesis_block.header.time as u64);
23152315
let seed = [i as u8; 32];
2316-
let keys_manager = Arc::new(KeysManager::new(&seed, now.as_secs(), now.subsec_nanos()));
2316+
let keys_manager =
2317+
Arc::new(KeysManager::new(&seed, now.as_secs(), now.subsec_nanos(), true));
23172318
let router = Arc::new(DefaultRouter::new(
23182319
Arc::clone(&network_graph),
23192320
Arc::clone(&logger),
@@ -2329,7 +2330,8 @@ mod tests {
23292330
let kv_store =
23302331
Arc::new(Persister::new(format!("{}_persister_{}", &persist_dir, i).into()));
23312332
let now = Duration::from_secs(genesis_block.header.time as u64);
2332-
let keys_manager = Arc::new(KeysManager::new(&seed, now.as_secs(), now.subsec_nanos()));
2333+
let keys_manager =
2334+
Arc::new(KeysManager::new(&seed, now.as_secs(), now.subsec_nanos(), true));
23332335
let chain_monitor = Arc::new(chainmonitor::ChainMonitor::new(
23342336
Some(Arc::clone(&chain_source)),
23352337
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
@@ -6876,6 +6876,7 @@ mod tests {
68766876
SecretKey::from_slice(&[41; 32]).unwrap(),
68776877
SecretKey::from_slice(&[41; 32]).unwrap(),
68786878
SecretKey::from_slice(&[41; 32]).unwrap(),
6879+
true,
68796880
SecretKey::from_slice(&[41; 32]).unwrap(),
68806881
SecretKey::from_slice(&[41; 32]).unwrap(),
68816882
[41; 32],
@@ -7138,6 +7139,7 @@ mod tests {
71387139
SecretKey::from_slice(&[41; 32]).unwrap(),
71397140
SecretKey::from_slice(&[41; 32]).unwrap(),
71407141
SecretKey::from_slice(&[41; 32]).unwrap(),
7142+
true,
71417143
SecretKey::from_slice(&[41; 32]).unwrap(),
71427144
SecretKey::from_slice(&[41; 32]).unwrap(),
71437145
[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
@@ -15987,6 +15987,7 @@ mod tests {
1598715987
SecretKey::from_slice(&<Vec<u8>>::from_hex("0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff").unwrap()[..]).unwrap(),
1598815988
SecretKey::from_slice(&<Vec<u8>>::from_hex("1111111111111111111111111111111111111111111111111111111111111111").unwrap()[..]).unwrap(),
1598915989
SecretKey::from_slice(&<Vec<u8>>::from_hex("1111111111111111111111111111111111111111111111111111111111111111").unwrap()[..]).unwrap(),
15990+
true,
1599015991
SecretKey::from_slice(&<Vec<u8>>::from_hex("3333333333333333333333333333333333333333333333333333333333333333").unwrap()[..]).unwrap(),
1599115992
SecretKey::from_slice(&<Vec<u8>>::from_hex("1111111111111111111111111111111111111111111111111111111111111111").unwrap()[..]).unwrap(),
1599215993

0 commit comments

Comments
 (0)