X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=lightning%2Fsrc%2Fchain%2Fkeysinterface.rs;h=05e24d8c1b220556c2d43e57aa566a6670a302ef;hb=d77e40fa76d7f6f9ab5c5ae91d686ac8b8226b3f;hp=4e4d182aa24c2243bf9ef4b89369efb8eefac089;hpb=d0c5e9c81d74c667684bba34166074c89f158485;p=rust-lightning diff --git a/lightning/src/chain/keysinterface.rs b/lightning/src/chain/keysinterface.rs index 4e4d182a..05e24d8c 100644 --- a/lightning/src/chain/keysinterface.rs +++ b/lightning/src/chain/keysinterface.rs @@ -167,28 +167,6 @@ impl Readable for SpendableOutputDescriptor { } } -/// A trait to describe an object which can get user secrets and key material. -pub trait KeysInterface: Send + Sync { - /// A type which implements ChannelKeys which will be returned by get_channel_keys. - type ChanKeySigner : ChannelKeys; - - /// Get node secret key (aka node_id or network_key) - fn get_node_secret(&self) -> SecretKey; - /// Get destination redeemScript to encumber static protocol exit points. - fn get_destination_script(&self) -> Script; - /// Get shutdown_pubkey to use as PublicKey at channel closure - fn get_shutdown_pubkey(&self) -> PublicKey; - /// Get a new set of ChannelKeys for per-channel secrets. These MUST be unique even if you - /// restarted with some stale data! - fn get_channel_keys(&self, inbound: bool, channel_value_satoshis: u64) -> Self::ChanKeySigner; - /// Get a secret and PRNG seed for construting an onion packet - fn get_onion_rand(&self) -> (SecretKey, [u8; 32]); - /// Get a unique temporary channel id. Channels will be referred to by this until the funding - /// transaction is created, at which point they will use the outpoint in the funding - /// transaction. - fn get_channel_id(&self) -> [u8; 32]; -} - /// Set of lightning keys needed to operate a channel as described in BOLT 3. /// /// Signing services could be implemented on a hardware wallet. In this case, @@ -217,16 +195,6 @@ pub trait KeysInterface: Send + Sync { // TODO: We should remove Clone by instead requesting a new ChannelKeys copy when we create // ChannelMonitors instead of expecting to clone the one out of the Channel into the monitors. pub trait ChannelKeys : Send+Clone { - /// Gets the private key for the anchor tx - fn funding_key<'a>(&'a self) -> &'a SecretKey; - /// Gets the local secret key for blinded revocation pubkey - fn revocation_base_key<'a>(&'a self) -> &'a SecretKey; - /// Gets the local secret key used in the to_remote output of remote commitment tx (ie the - /// output to us in transactions our counterparty broadcasts). - /// Also as part of obscured commitment number. - fn payment_key<'a>(&'a self) -> &'a SecretKey; - /// Gets the local secret key used in HTLC-Success/HTLC-Timeout txn and to_local output - fn delayed_payment_base_key<'a>(&'a self) -> &'a SecretKey; /// Gets the local htlc secret key used in commitment tx htlc outputs fn htlc_base_key<'a>(&'a self) -> &'a SecretKey; /// Gets the commitment seed @@ -341,21 +309,43 @@ pub trait ChannelKeys : Send+Clone { fn set_remote_channel_pubkeys(&mut self, channel_points: &ChannelPublicKeys); } +/// A trait to describe an object which can get user secrets and key material. +pub trait KeysInterface: Send + Sync { + /// A type which implements ChannelKeys which will be returned by get_channel_keys. + type ChanKeySigner : ChannelKeys; + + /// Get node secret key (aka node_id or network_key) + fn get_node_secret(&self) -> SecretKey; + /// Get destination redeemScript to encumber static protocol exit points. + fn get_destination_script(&self) -> Script; + /// Get shutdown_pubkey to use as PublicKey at channel closure + fn get_shutdown_pubkey(&self) -> PublicKey; + /// Get a new set of ChannelKeys for per-channel secrets. These MUST be unique even if you + /// restarted with some stale data! + fn get_channel_keys(&self, inbound: bool, channel_value_satoshis: u64) -> Self::ChanKeySigner; + /// Get a secret and PRNG seed for constructing an onion packet + fn get_onion_rand(&self) -> (SecretKey, [u8; 32]); + /// Get a unique temporary channel id. Channels will be referred to by this until the funding + /// transaction is created, at which point they will use the outpoint in the funding + /// transaction. + fn get_channel_id(&self) -> [u8; 32]; +} + #[derive(Clone)] /// A simple implementation of ChannelKeys that just keeps the private keys in memory. pub struct InMemoryChannelKeys { /// Private key of anchor tx - funding_key: SecretKey, + pub funding_key: SecretKey, /// Local secret key for blinded revocation pubkey - revocation_base_key: SecretKey, + pub revocation_base_key: SecretKey, /// Local secret key used for our balance in remote-broadcasted commitment transactions - payment_key: SecretKey, + pub payment_key: SecretKey, /// Local secret key used in HTLC tx - delayed_payment_base_key: SecretKey, + pub delayed_payment_base_key: SecretKey, /// Local htlc secret key used in commitment tx htlc outputs - htlc_base_key: SecretKey, + pub htlc_base_key: SecretKey, /// Commitment seed - commitment_seed: [u8; 32], + pub commitment_seed: [u8; 32], /// Local public keys and basepoints pub(crate) local_channel_pubkeys: ChannelPublicKeys, /// Remote public keys and base points @@ -416,10 +406,6 @@ impl InMemoryChannelKeys { } impl ChannelKeys for InMemoryChannelKeys { - fn funding_key(&self) -> &SecretKey { &self.funding_key } - fn revocation_base_key(&self) -> &SecretKey { &self.revocation_base_key } - fn payment_key(&self) -> &SecretKey { &self.payment_key } - fn delayed_payment_base_key(&self) -> &SecretKey { &self.delayed_payment_base_key } fn htlc_base_key(&self) -> &SecretKey { &self.htlc_base_key } fn commitment_seed(&self) -> &[u8; 32] { &self.commitment_seed } fn pubkeys<'a>(&'a self) -> &'a ChannelPublicKeys { &self.local_channel_pubkeys } @@ -642,7 +628,7 @@ impl KeysManager { /// Note that until the 0.1 release there is no guarantee of backward compatibility between /// versions. Once the library is more fully supported, the docs will be updated to include a /// detailed description of the guarantee. - pub fn new(seed: &[u8; 32], network: Network, starting_time_secs: u64, starting_time_nanos: u32) -> KeysManager { + pub fn new(seed: &[u8; 32], network: Network, starting_time_secs: u64, starting_time_nanos: u32) -> Self { let secp_ctx = Secp256k1::signing_only(); match ExtendedPrivKey::new_master(network.clone(), seed) { Ok(master_key) => {