Expose the node secret key in `{Phantom,}KeysManager` 2023-03-get-key
authorMatt Corallo <git@bluematt.me>
Fri, 3 Mar 2023 20:03:57 +0000 (20:03 +0000)
committerMatt Corallo <git@bluematt.me>
Fri, 3 Mar 2023 20:11:41 +0000 (20:11 +0000)
When we removed the private keys from the signing interface we
forgot to re-add them in the public interface of our own
implementations, which users may need.

lightning/src/chain/keysinterface.rs

index a2611e7df87f79fefad954aa3b9133addaeb650e..21331fff435e601a255a6944c04a8fff820db0bc 100644 (file)
@@ -1064,6 +1064,12 @@ impl KeysManager {
                        Err(_) => panic!("Your rng is busted"),
                }
        }
+
+       /// Gets the "node_id" secret key used to sign gossip announcements, decode onion data, etc.
+       pub fn get_node_secret_key(&self) -> SecretKey {
+               self.node_secret
+       }
+
        /// Derive an old [`WriteableEcdsaChannelSigner`] containing per-channel secrets based on a key derivation parameters.
        pub fn derive_channel_keys(&self, channel_value_satoshis: u64, params: &[u8; 32]) -> InMemorySigner {
                let chan_id = u64::from_be_bytes(params[0..8].try_into().unwrap());
@@ -1458,6 +1464,17 @@ impl PhantomKeysManager {
        pub fn derive_channel_keys(&self, channel_value_satoshis: u64, params: &[u8; 32]) -> InMemorySigner {
                self.inner.derive_channel_keys(channel_value_satoshis, params)
        }
+
+       /// Gets the "node_id" secret key used to sign gossip announcements, decode onion data, etc.
+       pub fn get_node_secret_key(&self) -> SecretKey {
+               self.inner.get_node_secret_key()
+       }
+
+       /// Gets the "node_id" secret key of the phantom node used to sign invoices, decode the
+       /// last-hop onion data, etc.
+       pub fn get_phantom_node_secret_key(&self) -> SecretKey {
+               self.phantom_secret
+       }
 }
 
 // Ensure that EcdsaChannelSigner can have a vtable