use core::sync::atomic::{AtomicBool, AtomicUsize, Ordering};
use core::{cmp, mem};
use bitcoin::bech32::u5;
-use chain::keysinterface::{InMemorySigner, KeyMaterial};
+use chain::keysinterface::{InMemorySigner, Recipient, KeyMaterial};
pub struct TestVecWriter(pub Vec<u8>);
impl Writer for TestVecWriter {
impl keysinterface::KeysInterface for OnlyReadsKeysInterface {
type Signer = EnforcingSigner;
- fn get_node_secret(&self) -> SecretKey { unreachable!(); }
+ fn get_node_secret(&self, _recipient: Recipient) -> Result<SecretKey, ()> { unreachable!(); }
fn get_inbound_payment_key_material(&self) -> KeyMaterial { unreachable!(); }
fn get_destination_script(&self) -> Script { unreachable!(); }
fn get_shutdown_scriptpubkey(&self) -> ShutdownScript { unreachable!(); }
false
))
}
- fn sign_invoice(&self, _hrp_bytes: &[u8], _invoice_data: &[u5]) -> Result<RecoverableSignature, ()> { unreachable!(); }
+ fn sign_invoice(&self, _hrp_bytes: &[u8], _invoice_data: &[u5], _recipient: Recipient) -> Result<RecoverableSignature, ()> { unreachable!(); }
}
pub struct TestChainMonitor<'a> {
Vec::new()
}
- fn sync_routing_table(&self, _their_node_id: &PublicKey, _init_msg: &msgs::Init) {}
+ fn peer_connected(&self, _their_node_id: &PublicKey, _init_msg: &msgs::Init) {}
fn handle_reply_channel_range(&self, _their_node_id: &PublicKey, _msg: msgs::ReplyChannelRange) -> Result<(), msgs::LightningError> {
Ok(())
pub struct TestLogger {
level: Level,
+ #[cfg(feature = "std")]
id: String,
+ #[cfg(not(feature = "std"))]
+ _id: String,
pub lines: Mutex<HashMap<(String, String), usize>>,
}
pub fn with_id(id: String) -> TestLogger {
TestLogger {
level: Level::Trace,
+ #[cfg(feature = "std")]
id,
+ #[cfg(not(feature = "std"))]
+ _id: id,
lines: Mutex::new(HashMap::new())
}
}
}
pub struct TestKeysInterface {
- pub backing: keysinterface::KeysManager,
- pub override_session_priv: Mutex<Option<[u8; 32]>>,
- pub override_channel_id_priv: Mutex<Option<[u8; 32]>>,
+ pub backing: keysinterface::PhantomKeysManager,
+ pub override_random_bytes: Mutex<Option<[u8; 32]>>,
pub disable_revocation_policy_check: bool,
enforcement_states: Mutex<HashMap<[u8;32], Arc<Mutex<EnforcementState>>>>,
expectations: Mutex<Option<VecDeque<OnGetShutdownScriptpubkey>>>,
impl keysinterface::KeysInterface for TestKeysInterface {
type Signer = EnforcingSigner;
- fn get_node_secret(&self) -> SecretKey { self.backing.get_node_secret() }
- fn get_inbound_payment_key_material(&self) -> keysinterface::KeyMaterial { self.backing.get_inbound_payment_key_material() }
+ fn get_node_secret(&self, recipient: Recipient) -> Result<SecretKey, ()> {
+ self.backing.get_node_secret(recipient)
+ }
+ fn get_inbound_payment_key_material(&self) -> keysinterface::KeyMaterial {
+ self.backing.get_inbound_payment_key_material()
+ }
fn get_destination_script(&self) -> Script { self.backing.get_destination_script() }
fn get_shutdown_scriptpubkey(&self) -> ShutdownScript {
}
fn get_secure_random_bytes(&self) -> [u8; 32] {
- let override_channel_id = self.override_channel_id_priv.lock().unwrap();
- let override_session_key = self.override_session_priv.lock().unwrap();
- if override_channel_id.is_some() && override_session_key.is_some() {
- panic!("We don't know which override key to use!");
- }
- if let Some(key) = &*override_channel_id {
- return *key;
- }
- if let Some(key) = &*override_session_key {
- return *key;
+ let override_random_bytes = self.override_random_bytes.lock().unwrap();
+ if let Some(bytes) = &*override_random_bytes {
+ return *bytes;
}
self.backing.get_secure_random_bytes()
}
fn read_chan_signer(&self, buffer: &[u8]) -> Result<Self::Signer, msgs::DecodeError> {
let mut reader = io::Cursor::new(buffer);
- let inner: InMemorySigner = ReadableArgs::read(&mut reader, self.get_node_secret())?;
+ let inner: InMemorySigner = ReadableArgs::read(&mut reader, self.get_node_secret(Recipient::Node).unwrap())?;
let state = self.make_enforcement_state_cell(inner.commitment_seed);
Ok(EnforcingSigner::new_with_revoked(
))
}
- fn sign_invoice(&self, hrp_bytes: &[u8], invoice_data: &[u5]) -> Result<RecoverableSignature, ()> {
- self.backing.sign_invoice(hrp_bytes, invoice_data)
+ fn sign_invoice(&self, hrp_bytes: &[u8], invoice_data: &[u5], recipient: Recipient) -> Result<RecoverableSignature, ()> {
+ self.backing.sign_invoice(hrp_bytes, invoice_data, recipient)
}
}
pub fn new(seed: &[u8; 32], network: Network) -> Self {
let now = Duration::from_secs(genesis_block(network).header.time as u64);
Self {
- backing: keysinterface::KeysManager::new(seed, now.as_secs(), now.subsec_nanos()),
- override_session_priv: Mutex::new(None),
- override_channel_id_priv: Mutex::new(None),
+ backing: keysinterface::PhantomKeysManager::new(seed, now.as_secs(), now.subsec_nanos(), seed),
+ override_random_bytes: Mutex::new(None),
disable_revocation_policy_check: false,
enforcement_states: Mutex::new(HashMap::new()),
expectations: Mutex::new(None),