update all deps to point to sphinx-rs

This commit is contained in:
Evan Feenstra
2022-10-25 16:38:42 -07:00
parent 8f853af18c
commit 736f4f0e8e
26 changed files with 131 additions and 1278 deletions

View File

@@ -1,18 +0,0 @@
[package]
name = "sphinx-key-parser"
version = "0.1.0"
edition = "2021"
[dependencies]
vls-protocol = { git = "https://gitlab.com/lightning-signer/validating-lightning-signer.git" }
serde = { version = "1.0", default-features = false }
rmp-serde = "1.1.0"
serde_bolt = { version = "0.2", default-features = false }
sphinx-auther = "0.1.12"
sphinx-glyph = "0.1.1"
anyhow = "1"
[features]
default = ["std"]
std = ["vls-protocol/std"]

View File

@@ -1,187 +0,0 @@
use anyhow::Result;
use sphinx_auther::nonce;
use sphinx_auther::secp256k1::{PublicKey, SecretKey};
use sphinx_auther::token::Token;
pub use sphinx_glyph::types::{
Config, ControlMessage, ControlResponse, Interval, OtaParams, Policy,
};
use std::sync::{Arc, Mutex};
// u64 is the nonce. Each signature must have a higher nonce
pub struct Controller(SecretKey, PublicKey, u64, Arc<Mutex<dyn ControlPersist>>);
impl Controller {
pub fn new(sk: SecretKey, pk: PublicKey, nonce: u64) -> Self {
Self(sk, pk, nonce, Arc::new(Mutex::new(DummyPersister)))
}
pub fn new_with_persister(
sk: SecretKey,
pk: PublicKey,
per: Arc<Mutex<dyn ControlPersist>>,
) -> Self {
let store1 = per.clone();
let store = store1.lock().unwrap();
let nonce = store.read_nonce().unwrap_or(0);
Self(sk, pk, nonce, per)
}
pub fn make_auth_token(&self) -> Result<String> {
let t = Token::new();
Ok(t.sign_to_base64(&self.0)?)
}
pub fn pubkey(&self) -> PublicKey {
self.1
}
pub fn nonce(&self) -> u64 {
self.2
}
pub fn build_msg(&mut self, msg: ControlMessage) -> anyhow::Result<Vec<u8>> {
let data = rmp_serde::to_vec(&msg)?;
self.2 = self.2 + 1;
let ret = nonce::build_msg(&data, &self.0, self.2)?;
Ok(ret)
}
pub fn build_response(&self, msg: ControlResponse) -> anyhow::Result<Vec<u8>> {
Ok(rmp_serde::to_vec(&msg)?)
}
pub fn parse_msg(&mut self, input: &[u8]) -> anyhow::Result<ControlMessage> {
let msg = nonce::parse_msg(input, &self.1, self.2)?;
let ret = rmp_serde::from_slice(&msg)?;
self.2 = self.2 + 1;
Ok(ret)
}
pub fn parse_msg_no_nonce(&mut self, input: &[u8]) -> anyhow::Result<(ControlMessage, u64)> {
let (msg, nonce) = nonce::parse_msg_no_nonce(input, &self.1)?;
let ret = rmp_serde::from_slice(&msg)?;
Ok((ret, nonce))
}
pub fn parse_response(&self, input: &[u8]) -> anyhow::Result<ControlResponse> {
Ok(rmp_serde::from_slice(input)?)
}
// return the OG message for further processing
pub fn handle(&mut self, input: &[u8]) -> anyhow::Result<(ControlMessage, ControlResponse)> {
let msg_nonce = self.parse_msg_no_nonce(input)?;
let msg = msg_nonce.0;
// nonce must be higher each time
if msg_nonce.1 <= self.2 {
return Err(anyhow::anyhow!("invalid nonce"));
}
// increment the nonce EXCEPT for Nonce requests
let mut store = self.3.lock().unwrap();
match msg {
ControlMessage::Nonce => (),
_ => {
self.2 = self.2 + 1;
store.set_nonce(self.2)?;
}
}
let res = match msg.clone() {
ControlMessage::Nonce => ControlResponse::Nonce(self.2),
ControlMessage::ResetWifi => {
store.remove_config()?;
ControlResponse::ResetWifi
}
ControlMessage::ResetKeys => {
store.remove_seed()?;
ControlResponse::ResetKeys
}
ControlMessage::ResetAll => {
store.remove_config()?;
store.remove_seed()?;
store.remove_policy()?;
store.set_nonce(0)?;
ControlResponse::ResetAll
}
ControlMessage::QueryPolicy => {
let p = store.read_policy().unwrap_or_default();
ControlResponse::PolicyCurrent(p)
}
ControlMessage::UpdatePolicy(np) => {
store.write_policy(np.clone())?;
ControlResponse::PolicyUpdated(np)
}
ControlMessage::QueryAllowlist => {
// this response is overwritten in the event handler
ControlResponse::AllowlistCurrent(vec![])
}
ControlMessage::UpdateAllowlist(na) => {
// the actual writing happens in the event handler
ControlResponse::AllowlistUpdated(na)
}
ControlMessage::Ota(params) => {
// same as above comments, actually done in core/events.rs
ControlResponse::OtaConfirm(params)
}
};
Ok((msg, res))
}
}
#[derive(Debug)]
pub enum FlashKey {
Config,
Seed,
Nonce,
Policy,
}
impl FlashKey {
pub fn as_str(&self) -> &'static str {
match self {
FlashKey::Config => "config",
FlashKey::Seed => "seed",
FlashKey::Nonce => "nonce",
FlashKey::Policy => "policy",
}
}
}
pub trait ControlPersist: Sync + Send {
fn read_nonce(&self) -> Result<u64>;
fn set_nonce(&mut self, nonce: u64) -> Result<()>;
fn read_config(&self) -> Result<Config>;
fn write_config(&mut self, c: Config) -> Result<()>;
fn remove_config(&mut self) -> Result<()>;
fn read_seed(&self) -> Result<[u8; 32]>;
fn write_seed(&mut self, s: [u8; 32]) -> Result<()>;
fn remove_seed(&mut self) -> Result<()>;
fn read_policy(&self) -> Result<Policy>;
fn write_policy(&mut self, s: Policy) -> Result<()>;
fn remove_policy(&mut self) -> Result<()>;
}
pub struct DummyPersister;
impl ControlPersist for DummyPersister {
fn read_nonce(&self) -> Result<u64> {
Ok(0u64)
}
fn set_nonce(&mut self, _nonce: u64) -> Result<()> {
Ok(())
}
fn read_config(&self) -> Result<Config> {
Ok(Default::default())
}
fn write_config(&mut self, _conf: Config) -> Result<()> {
Ok(())
}
fn remove_config(&mut self) -> Result<()> {
Ok(())
}
fn read_seed(&self) -> Result<[u8; 32]> {
Ok([0; 32])
}
fn write_seed(&mut self, _s: [u8; 32]) -> Result<()> {
Ok(())
}
fn remove_seed(&mut self) -> Result<()> {
Ok(())
}
fn read_policy(&self) -> Result<Policy> {
Ok(Default::default())
}
fn write_policy(&mut self, _s: Policy) -> Result<()> {
Ok(())
}
fn remove_policy(&mut self) -> Result<()> {
Ok(())
}
}

View File

@@ -1,61 +0,0 @@
#[repr(u8)]
#[derive(PartialEq, Debug, Eq, Clone, serde::Serialize, serde::Deserialize)]
pub enum ErrorCode {
Unidentified = 0,
Vls = 1,
Control = 2,
Proxy = 3,
}
impl From<u8> for ErrorCode {
fn from(item: u8) -> Self {
match item {
0 => ErrorCode::Unidentified,
1 => ErrorCode::Vls,
_ => ErrorCode::Unidentified,
}
}
}
#[derive(serde::Serialize, serde::Deserialize)]
pub struct Error {
pub code: ErrorCode,
pub message: String,
}
impl Error {
pub fn new(code: u8, message: &str) -> Self {
Self {
code: code.into(),
message: message.to_string(),
}
}
pub fn from_slice(slice: &[u8]) -> Self {
let mut v = slice.to_vec();
let code = v.pop().unwrap_or_default();
Self {
code: code.into(),
message: String::from_utf8_lossy(&v[..]).to_string(),
}
}
pub fn to_vec(&self) -> Vec<u8> {
let mut v = self.message.as_bytes().to_vec();
v.extend_from_slice(&[self.code.clone() as u8]);
v
}
}
#[cfg(test)]
mod tests {
use crate::error::*;
#[test]
fn test_error() {
let e = Error::new(1, "bad msg");
let v = e.to_vec();
let e2 = Error::from_slice(&v);
assert_eq!(e.code, e2.code);
assert_eq!(e.message, e2.message);
// println!("=> e2.message: {}", e2.message);
}
}

View File

@@ -1,147 +0,0 @@
pub mod control;
pub mod error;
pub mod topics;
use serde::ser;
use std::cmp::min;
use std::io;
use vls_protocol::msgs::{self, DeBolt, Message};
use vls_protocol::serde_bolt::{Error, Read, Result, Write};
pub struct MsgDriver(Vec<u8>);
impl MsgDriver {
pub fn new(raw: Vec<u8>) -> Self {
Self(raw)
}
pub fn new_empty() -> Self {
Self(Vec::new())
}
pub fn as_ref(&self) -> &Vec<u8> {
&self.0
}
pub fn bytes(&self) -> Vec<u8> {
self.0.clone()
}
}
impl Read for MsgDriver {
type Error = Error;
// input: buf to be written. Should already be the right size
fn read(&mut self, mut buf: &mut [u8]) -> Result<usize> {
if buf.is_empty() {
return Ok(0);
}
let (mut content, remaining) = self.0.split_at(min(buf.len(), self.0.len()));
let bytes = &mut content;
match io::copy(bytes, &mut buf) {
Ok(len) => {
self.0 = remaining.to_vec();
Ok(len as usize)
}
Err(_) => Ok(0),
}
}
fn peek(&mut self) -> Result<Option<u8>> {
Ok(if let Some(u) = self.0.get(0) {
Some(u.clone())
} else {
None
})
}
}
impl Write for MsgDriver {
type Error = Error;
fn write_all(&mut self, buf: &[u8]) -> Result<()> {
self.0.extend(buf.iter().cloned());
Ok(())
}
}
pub fn raw_request_from_bytes(
message: Vec<u8>,
sequence: u16,
dbid: u64,
) -> vls_protocol::Result<Vec<u8>> {
let mut md = MsgDriver::new_empty();
msgs::write_serial_request_header(&mut md, sequence, dbid)?;
msgs::write_vec(&mut md, message)?;
Ok(md.bytes())
}
pub fn request_from_msg<T: ser::Serialize + DeBolt>(
msg: T,
sequence: u16,
dbid: u64,
) -> vls_protocol::Result<Vec<u8>> {
let mut md = MsgDriver::new_empty();
msgs::write_serial_request_header(&mut md, sequence, dbid)?;
msgs::write(&mut md, msg)?;
Ok(md.bytes())
}
pub fn raw_response_from_msg<T: ser::Serialize + DeBolt>(
msg: T,
sequence: u16,
) -> vls_protocol::Result<Vec<u8>> {
let mut m = MsgDriver::new_empty();
msgs::write_serial_response_header(&mut m, sequence)?;
msgs::write(&mut m, msg)?;
Ok(m.bytes())
}
pub fn request_from_bytes<T: DeBolt>(msg: Vec<u8>) -> vls_protocol::Result<(T, u16, u64)> {
let mut m = MsgDriver::new(msg);
let (sequence, dbid) = msgs::read_serial_request_header(&mut m)?;
let reply: T = msgs::read_message(&mut m)?;
Ok((reply, sequence, dbid))
}
pub fn raw_response_from_bytes(
res: Vec<u8>,
expected_sequence: u16,
) -> vls_protocol::Result<Vec<u8>> {
let mut m = MsgDriver::new(res);
msgs::read_serial_response_header(&mut m, expected_sequence)?;
Ok(msgs::read_raw(&mut m)?)
}
pub fn response_from_bytes(res: Vec<u8>, expected_sequence: u16) -> vls_protocol::Result<Message> {
let mut m = MsgDriver::new(res);
msgs::read_serial_response_header(&mut m, expected_sequence)?;
Ok(msgs::read(&mut m)?)
}
#[cfg(test)]
mod tests {
use crate::MsgDriver;
use vls_protocol::msgs;
use vls_protocol::serde_bolt::WireString;
#[test]
fn test_parser() {
let msg = "hello";
let ping = msgs::Ping {
id: 0,
message: WireString(msg.as_bytes().to_vec()),
};
let mut md = MsgDriver::new_empty();
msgs::write_serial_request_header(&mut md, 0, 0)
.expect("failed to write_serial_request_header");
msgs::write(&mut md, ping).expect("failed to serial write");
let mut m = MsgDriver::new(md.bytes());
let (_sequence, _dbid) =
msgs::read_serial_request_header(&mut m).expect("read ping header");
let parsed_ping: msgs::Ping =
msgs::read_message(&mut m).expect("failed to read ping message");
assert_eq!(parsed_ping.id, 0);
assert_eq!(
String::from_utf8(parsed_ping.message.0).unwrap(),
msg.to_string()
);
}
}

View File

@@ -1,7 +0,0 @@
pub const VLS: &str = "sphinx";
pub const VLS_RETURN: &str = "sphinx-return";
pub const CONTROL: &str = "sphinx-control";
pub const CONTROL_RETURN: &str = "sphinx-control-return";
pub const PROXY: &str = "sphinx-proxy";
pub const PROXY_RETURN: &str = "sphinx-proxy-return";
pub const ERROR: &str = "sphinx-error";

View File

@@ -1,13 +0,0 @@
[package]
name = "sphinx-key-persister"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
lightning-signer-server = { git = "https://gitlab.com/lightning-signer/validating-lightning-signer.git", default-features = false, features = ["persist", "secp-lowmemory"] }
serde = { version = "1.0.105" }
hex = "0.4.3"
fsdb = "0.1.11"
log = "0.4"

View File

@@ -1,228 +0,0 @@
use fsdb::{Bucket, DoubleBucket, Fsdb};
use lightning_signer::bitcoin::secp256k1::PublicKey;
use lightning_signer::chain::tracker::ChainTracker;
use lightning_signer::channel::{Channel, ChannelId, ChannelStub};
use lightning_signer::monitor::ChainMonitor;
use lightning_signer::node::{NodeConfig, NodeState as CoreNodeState};
use lightning_signer::persist::Persist;
use lightning_signer::policy::validator::EnforcementState;
use lightning_signer_server::lightning_signer;
use lightning_signer_server::persist::model::{
AllowlistItemEntry, ChainTrackerEntry, ChannelEntry, NodeEntry, NodeStateEntry,
};
use std::string::String;
use lightning_signer::persist::model::{
ChannelEntry as CoreChannelEntry, NodeEntry as CoreNodeEntry,
};
const FAT32_MAXFILENAMESIZE: usize = 8;
pub struct FsPersister {
nodes: Bucket<NodeEntry>,
states: Bucket<NodeStateEntry>,
channels: DoubleBucket<ChannelEntry>,
allowlist: Bucket<AllowlistItemEntry>,
chaintracker: Bucket<ChainTrackerEntry>,
pubkeys: Bucket<PublicKey>,
}
impl FsPersister {
pub fn new(dir: &str) -> Self {
let db = Fsdb::new(dir).expect("could not create db");
let max = Some(FAT32_MAXFILENAMESIZE);
Self {
nodes: db.bucket("nodes", max).expect("fail nodes"),
states: db.bucket("states", max).expect("fail states"),
channels: db.double_bucket("channel", max).expect("fail channel"),
allowlist: db.bucket("allowlis", max).expect("fail allowlis"),
chaintracker: db.bucket("chaintra", max).expect("fail chaintra"),
pubkeys: db.bucket("pubkey", max).expect("fail pubkey"),
}
}
}
fn get_channel_key(channel_id: &[u8]) -> &[u8] {
let length = channel_id.len();
channel_id.get(length - 11..length - 7).unwrap()
}
impl Persist for FsPersister {
fn new_node(
&self,
node_id: &PublicKey,
config: &NodeConfig,
state: &CoreNodeState,
seed: &[u8],
) {
let pk = hex::encode(node_id.serialize());
let state_entry = state.into();
let _ = self.states.put(&pk, state_entry);
let node_entry = NodeEntry {
seed: seed.to_vec(),
key_derivation_style: config.key_derivation_style as u8,
network: config.network.to_string(),
};
let _ = self.nodes.put(&pk, node_entry);
let _ = self.pubkeys.put(&pk, node_id.clone());
}
fn update_node(&self, node_id: &PublicKey, state: &CoreNodeState) -> Result<(), ()> {
let pk = hex::encode(node_id.serialize());
let state_entry = state.into();
let _ = self.states.put(&pk, state_entry);
Ok(())
}
fn delete_node(&self, node_id: &PublicKey) {
let pk = hex::encode(node_id.serialize());
// clear all channel entries within "pk" sub-bucket
let _ = self.channels.clear(&pk);
let _ = self.nodes.remove(&pk);
let _ = self.pubkeys.remove(&pk);
}
fn new_channel(&self, node_id: &PublicKey, stub: &ChannelStub) -> Result<(), ()> {
let pk = hex::encode(node_id.serialize());
let chan_id = hex::encode(get_channel_key(stub.id0.as_slice()));
// this breaks things...
// if let Ok(_) = self.channels.get(&pk, &chan_id) {
// log::error!("persister: failed to create new_channel: already exists");
// // return Err(()); // already exists
// }
let entry = ChannelEntry {
id: Some(stub.id0.clone()),
channel_value_satoshis: 0,
channel_setup: None,
enforcement_state: EnforcementState::new(0),
};
let _ = self.channels.put(&pk, &chan_id, entry);
Ok(())
}
fn new_chain_tracker(&self, node_id: &PublicKey, tracker: &ChainTracker<ChainMonitor>) {
let pk = hex::encode(node_id.serialize());
let _ = self.chaintracker.put(&pk, tracker.into());
}
fn update_tracker(
&self,
node_id: &PublicKey,
tracker: &ChainTracker<ChainMonitor>,
) -> Result<(), ()> {
log::info!("=> update_tracker");
let pk = hex::encode(node_id.serialize());
let _ = self.chaintracker.put(&pk, tracker.into());
log::info!("=> update_tracker complete");
Ok(())
}
fn get_tracker(&self, node_id: &PublicKey) -> Result<ChainTracker<ChainMonitor>, ()> {
let pk = hex::encode(node_id.serialize());
let ret: ChainTrackerEntry = match self.chaintracker.get(&pk) {
Ok(ct) => ct,
Err(_) => {
log::error!("persister: failed to get_tracker");
return Err(());
}
};
Ok(ret.into())
}
fn update_channel(&self, node_id: &PublicKey, channel: &Channel) -> Result<(), ()> {
log::info!("=> update_channel");
let pk = hex::encode(node_id.serialize());
let chan_id = hex::encode(get_channel_key(channel.id0.as_slice()));
// this breaks things...
// if let Err(_) = self.channels.get(&pk, &chan_id) {
// log::error!("persister: failed to update_channel");
// // return Err(()); // not found
// }
let entry = ChannelEntry {
id: Some(channel.id0.clone()),
channel_value_satoshis: channel.setup.channel_value_sat,
channel_setup: Some(channel.setup.clone()),
enforcement_state: channel.enforcement_state.clone(),
};
let _ = self.channels.put(&pk, &chan_id, entry);
log::info!("=> update_channel complete!");
Ok(())
}
fn get_channel(
&self,
node_id: &PublicKey,
channel_id: &ChannelId,
) -> Result<CoreChannelEntry, ()> {
let pk = hex::encode(node_id.serialize());
let chan_id = hex::encode(get_channel_key(channel_id.as_slice()));
let ret: ChannelEntry = match self.channels.get(&pk, &chan_id) {
Ok(ce) => ce,
Err(_) => {
log::error!("persister: failed to get_channel");
return Err(());
}
};
Ok(ret.into())
}
fn get_node_channels(&self, node_id: &PublicKey) -> Vec<(ChannelId, CoreChannelEntry)> {
let mut res = Vec::new();
let pk = hex::encode(node_id.serialize());
let list = match self.channels.list(&pk) {
Ok(l) => l,
Err(_) => return res,
};
for channel in list {
if let Ok(entry) = self.channels.get(&pk, &channel) {
let id = entry.id.clone().unwrap();
res.push((id, entry.into()));
};
}
res
}
fn update_node_allowlist(&self, node_id: &PublicKey, allowlist: Vec<String>) -> Result<(), ()> {
let pk = hex::encode(node_id.serialize());
let entry = AllowlistItemEntry { allowlist };
let _ = self.allowlist.put(&pk, entry);
Ok(())
}
fn get_node_allowlist(&self, node_id: &PublicKey) -> Vec<String> {
let pk = hex::encode(node_id.serialize());
let entry: AllowlistItemEntry = match self.allowlist.get(&pk) {
Ok(e) => e,
Err(_) => return Vec::new(),
};
entry.allowlist
}
fn get_nodes(&self) -> Vec<(PublicKey, CoreNodeEntry)> {
let mut res = Vec::new();
let list = match self.nodes.list() {
Ok(ns) => ns,
Err(_) => return res,
};
log::info!("NODE LIST LEN {}", list.len());
for pk in list {
if let Ok(pubkey) = self.pubkeys.get(&pk) {
if let Ok(node) = self.nodes.get(&pk) {
if let Ok(state_entry) = self.states.get(&pk) {
let state = CoreNodeState {
invoices: Default::default(),
issued_invoices: Default::default(),
payments: Default::default(),
excess_amount: 0,
log_prefix: "".to_string(),
velocity_control: state_entry.velocity_control.into(),
};
let entry = CoreNodeEntry {
seed: node.seed,
key_derivation_style: node.key_derivation_style,
network: node.network,
state,
};
res.push((pubkey, entry));
}
}
}
}
res
}
fn clear_database(&self) {
let _ = self.nodes.clear();
let _ = self.channels.clear_all();
let _ = self.allowlist.clear();
let _ = self.chaintracker.clear();
let _ = self.pubkeys.clear();
}
}

4
signer/.gitignore vendored
View File

@@ -1,4 +0,0 @@
/.vscode
/.embuild
/target
/Cargo.lock

View File

@@ -1,13 +0,0 @@
[package]
name = "sphinx-key-signer"
version = "0.1.0"
authors = ["Evan Feenstra <evanfeenstra@gmail.com>"]
edition = "2018"
[dependencies]
sphinx-key-parser = { path = "../parser" }
sphinx-key-persister = { path = "../persister" }
vls-protocol-signer = { git = "https://gitlab.com/lightning-signer/validating-lightning-signer.git", default-features = false, features = ["std", "secp-lowmemory"] }
anyhow = {version = "1", features = ["backtrace"]}
log = "0.4"
rand = { version = "0.8" }

View File

@@ -1,13 +0,0 @@
use vls_core::{
bitcoin::secp256k1::{PublicKey, Secp256k1, SecretKey},
bitcoin::Network,
signer::derive::{key_derive, KeyDerivationStyle},
};
use vls_protocol_signer::lightning_signer as vls_core;
pub fn node_keys(network: &Network, seed: &[u8]) -> (PublicKey, SecretKey) {
let style = KeyDerivationStyle::Native;
let deriver = key_derive(style, network.clone());
let ctx = Secp256k1::new();
deriver.node_keys(seed, &ctx)
}

View File

@@ -1,165 +0,0 @@
mod derive;
mod policy;
mod randomstartingtime;
use anyhow::anyhow;
use lightning_signer::bitcoin::blockdata::constants::ChainHash;
use lightning_signer::node::NodeServices;
use lightning_signer::persist::Persist;
use lightning_signer::policy::simple_validator::SimpleValidatorFactory;
use lightning_signer::util::clock::StandardClock;
use randomstartingtime::RandomStartingTimeFactory;
use std::sync::Arc;
use vls_protocol::model::{PubKey, Secret};
use vls_protocol::msgs::{self, read_serial_request_header, write_serial_response_header, Message};
use vls_protocol::serde_bolt::WireString;
pub use vls_protocol_signer::handler::{Handler, RootHandler};
pub use vls_protocol_signer::lightning_signer;
use vls_protocol_signer::lightning_signer::bitcoin::Network;
use vls_protocol_signer::lightning_signer::wallet::Wallet;
pub use vls_protocol_signer::vls_protocol;
pub use derive::node_keys as derive_node_keys;
pub use policy::{get_allowlist, make_policy, set_allowlist, set_policy};
pub use sphinx_key_parser::{control, error::Error as ParserError, topics, MsgDriver};
pub use sphinx_key_persister::FsPersister;
pub struct InitResponse {
pub root_handler: RootHandler,
pub init_reply: Vec<u8>,
}
// pub const ROOT_STORE: &str = "/sdcard/store";
pub fn init(
bytes: Vec<u8>,
network: Network,
po: &control::Policy,
root_store_path: &str,
) -> anyhow::Result<InitResponse> {
// let persister: Arc<dyn Persist> = Arc::new(DummyPersister);
let mut md = MsgDriver::new(bytes);
let (sequence, dbid) = read_serial_request_header(&mut md).expect("read init header");
assert_eq!(dbid, 0);
assert_eq!(sequence, 0);
let init: msgs::HsmdInit2 = msgs::read_message(&mut md).expect("failed to read init message");
log::info!("init {:?}", init);
let seed = init.dev_seed.as_ref().map(|s| s.0).expect("no seed");
let allowlist = init
.dev_allowlist
.iter()
.map(|s| from_wire_string(s))
.collect::<Vec<_>>();
log::info!("allowlist {:?}", allowlist);
let policy = make_policy(network, po);
let validator_factory = Arc::new(SimpleValidatorFactory::new_with_policy(policy));
let random_time_factory = RandomStartingTimeFactory::new();
let persister: Arc<dyn Persist> = Arc::new(FsPersister::new(root_store_path));
let clock = Arc::new(StandardClock());
let services = NodeServices {
validator_factory,
starting_time_factory: random_time_factory,
persister,
clock,
};
log::info!("create root handler now");
let root_handler = RootHandler::new(network, 0, Some(seed), allowlist, services);
log::info!("root_handler created");
let init_reply = root_handler
.handle(Message::HsmdInit2(init))
.expect("handle init");
let mut reply = MsgDriver::new_empty();
write_serial_response_header(&mut reply, sequence).expect("write init header");
msgs::write_vec(&mut reply, init_reply.as_vec()).expect("write init reply");
Ok(InitResponse {
root_handler,
init_reply: reply.bytes(),
})
}
pub fn handle(
root_handler: &RootHandler,
bytes: Vec<u8>,
dummy_peer: PubKey,
do_log: bool,
) -> anyhow::Result<Vec<u8>> {
let mut md = MsgDriver::new(bytes);
let (sequence, dbid) = read_serial_request_header(&mut md).expect("read request header");
let mut message = msgs::read(&mut md).expect("message read failed");
// Override the peerid when it is passed in certain messages
match message {
Message::NewChannel(ref mut m) => m.node_id = dummy_peer.clone(),
Message::ClientHsmFd(ref mut m) => m.peer_id = dummy_peer.clone(),
Message::GetChannelBasepoints(ref mut m) => m.node_id = dummy_peer.clone(),
Message::SignCommitmentTx(ref mut m) => m.peer_id = dummy_peer.clone(),
_ => {}
};
if let Message::HsmdInit(ref m) = message {
if ChainHash::using_genesis_block(root_handler.node.network()).as_bytes()
!= &m.chain_params.0
{
log::error!("The network setting of CLN and VLS don't match!");
panic!("The network setting of CLN and VLS don't match!");
}
}
if do_log {
log::info!("VLS msg: {:?}", message);
}
let reply = if dbid > 0 {
let handler = root_handler.for_new_client(dbid, dummy_peer.clone(), dbid);
match handler.handle(message) {
Ok(r) => r,
Err(e) => return Err(anyhow!("client {} handler error: {:?}", dbid, e)),
}
} else {
match root_handler.handle(message) {
Ok(r) => r,
Err(e) => return Err(anyhow!("root handler error: {:?}", e)),
}
};
if do_log {
log::info!("VLS msg handled");
}
let mut out_md = MsgDriver::new_empty();
write_serial_response_header(&mut out_md, sequence).expect("write reply header");
msgs::write_vec(&mut out_md, reply.as_vec()).expect("write reply");
Ok(out_md.bytes())
}
pub fn make_init_msg(network: Network, seed: [u8; 32]) -> anyhow::Result<Vec<u8>> {
let allowlist = Vec::new();
log::info!("allowlist {:?} seed {:?}", allowlist, seed);
let init = msgs::HsmdInit2 {
derivation_style: 0,
network_name: WireString(network.to_string().as_bytes().to_vec()),
dev_seed: Some(Secret(seed)),
dev_allowlist: allowlist,
};
let sequence = 0;
let mut md = MsgDriver::new_empty();
msgs::write_serial_request_header(&mut md, sequence, 0)?;
msgs::write(&mut md, init)?;
Ok(md.bytes())
}
pub fn parse_ping_and_form_response(msg_bytes: Vec<u8>) -> Vec<u8> {
let mut m = MsgDriver::new(msg_bytes);
let (sequence, _dbid) = msgs::read_serial_request_header(&mut m).expect("read ping header");
let ping: msgs::Ping = msgs::read_message(&mut m).expect("failed to read ping message");
let mut md = MsgDriver::new_empty();
msgs::write_serial_response_header(&mut md, sequence)
.expect("failed to write_serial_request_header");
let pong = msgs::Pong {
id: ping.id,
message: ping.message,
};
msgs::write(&mut md, pong).expect("failed to serial write");
md.bytes()
}
fn from_wire_string(s: &WireString) -> String {
String::from_utf8(s.0.to_vec()).expect("malformed string")
}

View File

@@ -1,50 +0,0 @@
use lightning_signer::policy::filter::PolicyFilter;
use lightning_signer::policy::simple_validator::{
make_simple_policy, SimplePolicy, SimpleValidatorFactory,
};
use lightning_signer::util::velocity::{VelocityControlIntervalType, VelocityControlSpec};
use sphinx_key_parser::control::{Interval, Policy};
use std::sync::Arc;
use vls_protocol_signer::handler::RootHandler;
use vls_protocol_signer::lightning_signer;
use vls_protocol_signer::lightning_signer::bitcoin::Network;
pub fn set_allowlist(root_handler: &RootHandler, allowlist: &Vec<String>) -> anyhow::Result<()> {
if let Err(e) = root_handler.node.set_allowlist(allowlist) {
return Err(anyhow::anyhow!("error setting allowlist {:?}", e));
}
Ok(())
}
pub fn get_allowlist(root_handler: &RootHandler) -> anyhow::Result<Vec<String>> {
match root_handler.node.allowlist() {
Ok(al) => Ok(al),
Err(e) => Err(anyhow::anyhow!("error setting allowlist {:?}", e)),
}
}
pub fn set_policy(root_handler: &RootHandler, network: Network, po: Policy) -> anyhow::Result<()> {
let policy = make_policy(network, &po);
let validator_factory = Arc::new(SimpleValidatorFactory::new_with_policy(policy));
root_handler.node.set_validator_factory(validator_factory);
Ok(())
}
pub fn make_policy(network: Network, po: &Policy) -> SimplePolicy {
let mut p = make_simple_policy(network);
p.max_htlc_value_sat = po.htlc_limit;
p.filter = PolicyFilter::new_permissive();
let velocity_spec = VelocityControlSpec {
limit: po.sat_limit,
interval_type: policy_interval(po.interval),
};
p.global_velocity_control = velocity_spec;
p
}
fn policy_interval(int: Interval) -> VelocityControlIntervalType {
match int {
Interval::Hourly => VelocityControlIntervalType::Hourly,
Interval::Daily => VelocityControlIntervalType::Daily,
}
}

View File

@@ -1,19 +0,0 @@
use lightning_signer::signer::StartingTimeFactory;
use rand::{rngs::OsRng, RngCore};
use std::sync::Arc;
use vls_protocol_signer::lightning_signer;
/// A starting time factory which uses entropy from the RNG
pub(crate) struct RandomStartingTimeFactory {}
impl StartingTimeFactory for RandomStartingTimeFactory {
fn starting_time(&self) -> (u64, u32) {
(OsRng.next_u64(), OsRng.next_u32())
}
}
impl RandomStartingTimeFactory {
pub(crate) fn new() -> Arc<dyn StartingTimeFactory> {
Arc::new(RandomStartingTimeFactory {})
}
}

393
sphinx-key/Cargo.lock generated
View File

@@ -58,15 +58,10 @@ dependencies = [
]
[[package]]
name = "async-trait"
version = "0.1.57"
name = "as-any"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "76464446b8bc32758d7e88ee1a804d9914cd9b1cb264c029899680b0be29826f"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
checksum = "8c3419eecc9f5967e6f0f29a0c3fefe22bda6ea34b15798f3c452cb81f2c3fa7"
[[package]]
name = "atomic-polyfill"
@@ -124,12 +119,6 @@ version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f8fe8f5a8a398345e52358e18ff07cc17a568fbca5c6f73873d3a62056309603"
[[package]]
name = "base-x"
version = "0.2.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270"
[[package]]
name = "base64"
version = "0.13.0"
@@ -165,6 +154,18 @@ dependencies = [
"which",
]
[[package]]
name = "bip39"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b9e89470017230c38e52b82b3ee3f530db1856ba1d434e3a67a3456a8a8dec5f"
dependencies = [
"bitcoin_hashes 0.9.7",
"rand_core 0.4.2",
"serde",
"unicode-normalization",
]
[[package]]
name = "bit-vec"
version = "0.6.3"
@@ -184,11 +185,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9cb36de3b18ad25f396f9168302e36fb7e1e8923298ab3127da252d288d5af9d"
dependencies = [
"bech32",
"bitcoin_hashes",
"bitcoin_hashes 0.11.0",
"secp256k1",
"serde",
]
[[package]]
name = "bitcoin_hashes"
version = "0.9.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7ce18265ec2324ad075345d5814fbeed4f41f0a660055dc78840b74d19b874b1"
[[package]]
name = "bitcoin_hashes"
version = "0.11.0"
@@ -213,7 +220,7 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "bolt-derive"
version = "0.1.0"
source = "git+https://gitlab.com/lightning-signer/validating-lightning-signer.git#0d894bcc8e140c62755ba65be14de4ba4b15fbf3"
source = "git+https://gitlab.com/lightning-signer/validating-lightning-signer.git#4a68e2d8a752439116019d746b09db6708808dd5"
dependencies = [
"proc-macro2",
"quote",
@@ -241,12 +248,6 @@ version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
[[package]]
name = "bytes"
version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ec8a7b6a70fde80372154c65702f00a0f56f3e1c36abbc6c440484be248856db"
[[package]]
name = "camino"
version = "1.1.1"
@@ -405,12 +406,6 @@ dependencies = [
"cc",
]
[[package]]
name = "const_fn"
version = "0.4.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fbdcdcb6d86f71c5e97409ad45898af11cbc995b4ee8112d59095a28d376c935"
[[package]]
name = "cortex-m"
version = "0.7.6"
@@ -613,12 +608,6 @@ dependencies = [
"winapi",
]
[[package]]
name = "discard"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0"
[[package]]
name = "either"
version = "1.8.0"
@@ -835,12 +824,6 @@ dependencies = [
"windows-sys",
]
[[package]]
name = "fixedbitset"
version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
[[package]]
name = "flate2"
version = "1.0.24"
@@ -1081,10 +1064,11 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
[[package]]
name = "idna"
version = "0.3.0"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
checksum = "de910d521f7cc3135c4de8db1cb910e0b5ed1dc6f57c381cd07e8e661ce10094"
dependencies = [
"matches",
"unicode-bidi",
"unicode-normalization",
]
@@ -1201,7 +1185,7 @@ version = "0.18.0"
source = "git+https://github.com/lightningdevkit/rust-lightning.git?rev=ea5b62fff69847941434fb51562e302eb4e7ff4b#ea5b62fff69847941434fb51562e302eb4e7ff4b"
dependencies = [
"bech32",
"bitcoin_hashes",
"bitcoin_hashes 0.11.0",
"lightning",
"num-traits",
"secp256k1",
@@ -1210,11 +1194,10 @@ dependencies = [
[[package]]
name = "lightning-signer-core"
version = "0.1.0-5"
source = "git+https://gitlab.com/lightning-signer/validating-lightning-signer.git#0d894bcc8e140c62755ba65be14de4ba4b15fbf3"
source = "git+https://gitlab.com/lightning-signer/validating-lightning-signer.git#4a68e2d8a752439116019d746b09db6708808dd5"
dependencies = [
"anyhow",
"bitcoin",
"env_logger",
"hashbrown 0.11.2",
"itertools",
"lightning",
@@ -1223,21 +1206,6 @@ dependencies = [
"scopeguard",
]
[[package]]
name = "lightning-signer-server"
version = "0.1.0-5"
source = "git+https://gitlab.com/lightning-signer/validating-lightning-signer.git#0d894bcc8e140c62755ba65be14de4ba4b15fbf3"
dependencies = [
"anyhow",
"async-trait",
"hex",
"lightning-signer-core",
"log",
"time 0.2.27",
"tonic-build",
"vls-persist",
]
[[package]]
name = "lock_api"
version = "0.4.9"
@@ -1257,6 +1225,18 @@ dependencies = [
"cfg-if",
]
[[package]]
name = "matches"
version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f"
[[package]]
name = "maybe-uninit"
version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00"
[[package]]
name = "memchr"
version = "2.5.0"
@@ -1287,12 +1267,6 @@ dependencies = [
"adler",
]
[[package]]
name = "multimap"
version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a"
[[package]]
name = "nb"
version = "0.1.3"
@@ -1431,16 +1405,6 @@ version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
[[package]]
name = "petgraph"
version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6d5014253a1331579ce62aa67443b4a658c5e7dd03d4bc6d302b94474888143"
dependencies = [
"fixedbitset",
"indexmap",
]
[[package]]
name = "pin-project-lite"
version = "0.2.9"
@@ -1481,12 +1445,6 @@ dependencies = [
"toml",
]
[[package]]
name = "proc-macro-hack"
version = "0.5.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5"
[[package]]
name = "proc-macro2"
version = "1.0.44"
@@ -1496,59 +1454,6 @@ dependencies = [
"unicode-ident",
]
[[package]]
name = "prost"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "444879275cb4fd84958b1a1d5420d15e6fcf7c235fe47f053c9c2a80aceb6001"
dependencies = [
"bytes",
"prost-derive",
]
[[package]]
name = "prost-build"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "62941722fb675d463659e49c4f3fe1fe792ff24fe5bbaa9c08cd3b98a1c354f5"
dependencies = [
"bytes",
"heck 0.3.3",
"itertools",
"lazy_static",
"log",
"multimap",
"petgraph",
"prost",
"prost-types",
"regex",
"tempfile",
"which",
]
[[package]]
name = "prost-derive"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f9cc1a3263e07e0bf68e96268f37665207b49560d98739662cdfaae215c720fe"
dependencies = [
"anyhow",
"itertools",
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "prost-types"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "534b7a0e836e3c482d2693070f982e39e7611da9695d4d1f5a4b186b51faef0a"
dependencies = [
"bytes",
"prost",
]
[[package]]
name = "quote"
version = "1.0.21"
@@ -1566,7 +1471,7 @@ checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
dependencies = [
"libc",
"rand_chacha",
"rand_core",
"rand_core 0.6.4",
]
[[package]]
@@ -1576,9 +1481,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
dependencies = [
"ppv-lite86",
"rand_core",
"rand_core 0.6.4",
]
[[package]]
name = "rand_core"
version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc"
[[package]]
name = "rand_core"
version = "0.6.4"
@@ -1814,7 +1725,7 @@ version = "0.24.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b7649a0b3ffb32636e60c7ce0d70511eda9c52c658cd0634e194d5a19943aeff"
dependencies = [
"bitcoin_hashes",
"bitcoin_hashes 0.11.0",
"rand",
"secp256k1-sys",
"serde",
@@ -1918,7 +1829,7 @@ dependencies = [
"serde",
"serde_json",
"serde_with_macros",
"time 0.3.14",
"time",
]
[[package]]
@@ -1933,21 +1844,6 @@ dependencies = [
"syn",
]
[[package]]
name = "sha1"
version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c1da05c97445caa12d05e848c4a4fcbbea29e748ac28f7e80e9b010392063770"
dependencies = [
"sha1_smol",
]
[[package]]
name = "sha1_smol"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012"
[[package]]
name = "shlex"
version = "1.1.0"
@@ -1963,6 +1859,15 @@ dependencies = [
"autocfg",
]
[[package]]
name = "smallvec"
version = "0.6.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b97fcaeba89edba30f044a10c6a3cc39df9c3f17d7cd829dd1446cab35f890e0"
dependencies = [
"maybe-uninit",
]
[[package]]
name = "sphinx-auther"
version = "0.1.12"
@@ -1979,7 +1884,7 @@ dependencies = [
[[package]]
name = "sphinx-crypter"
version = "0.1.0"
source = "git+https://github.com/stakwork/sphinx-rs.git#0c79f337a2abc76f10b2026be4260030a1a53db6"
source = "git+https://github.com/stakwork/sphinx-rs.git#30d5c7d8f5df79257e98a4d88a5484e78e3eb9e0"
dependencies = [
"anyhow",
"chacha20poly1305",
@@ -1989,9 +1894,9 @@ dependencies = [
[[package]]
name = "sphinx-glyph"
version = "0.1.1"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dbab7d4a5119f6040006784cee5117aabf8654588620e58a01b66732bb307671"
checksum = "62fadd6d488d0e5d824acfc3e8a74599429836c9422503c2dfc84418a19bae24"
dependencies = [
"anyhow",
"rmp-serde",
@@ -2019,43 +1924,25 @@ dependencies = [
"serde_json",
"serde_urlencoded",
"sphinx-crypter",
"sphinx-key-signer",
"sphinx-signer",
"url",
]
[[package]]
name = "sphinx-key-parser"
name = "sphinx-signer"
version = "0.1.0"
source = "git+https://github.com/stakwork/sphinx-rs.git#30d5c7d8f5df79257e98a4d88a5484e78e3eb9e0"
dependencies = [
"anyhow",
"rmp-serde",
"serde",
"serde_bolt",
"sphinx-auther",
"sphinx-glyph",
"vls-protocol",
]
[[package]]
name = "sphinx-key-persister"
version = "0.1.0"
dependencies = [
"bip39",
"fsdb",
"hex",
"lightning-signer-server",
"log",
"serde",
]
[[package]]
name = "sphinx-key-signer"
version = "0.1.0"
dependencies = [
"anyhow",
"log",
"rand",
"sphinx-key-parser",
"sphinx-key-persister",
"serde",
"sphinx-glyph",
"vls-persist",
"vls-protocol",
"vls-protocol-signer",
]
@@ -2080,64 +1967,6 @@ version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
[[package]]
name = "standback"
version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e113fb6f3de07a243d434a56ec6f186dfd51cb08448239fe7bcae73f87ff28ff"
dependencies = [
"version_check",
]
[[package]]
name = "stdweb"
version = "0.4.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d022496b16281348b52d0e30ae99e01a73d737b2f45d38fed4edf79f9325a1d5"
dependencies = [
"discard",
"rustc_version 0.2.3",
"stdweb-derive",
"stdweb-internal-macros",
"stdweb-internal-runtime",
"wasm-bindgen",
]
[[package]]
name = "stdweb-derive"
version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef"
dependencies = [
"proc-macro2",
"quote",
"serde",
"serde_derive",
"syn",
]
[[package]]
name = "stdweb-internal-macros"
version = "0.2.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "58fa5ff6ad0d98d1ffa8cb115892b6e69d67799f6763e162a1c9db421dc22e11"
dependencies = [
"base-x",
"proc-macro2",
"quote",
"serde",
"serde_derive",
"serde_json",
"sha1",
"syn",
]
[[package]]
name = "stdweb-internal-runtime"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0"
[[package]]
name = "strsim"
version = "0.10.0"
@@ -2263,21 +2092,6 @@ dependencies = [
"once_cell",
]
[[package]]
name = "time"
version = "0.2.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4752a97f8eebd6854ff91f1c1824cd6160626ac4bd44287f7f4ea2035a02a242"
dependencies = [
"const_fn",
"libc",
"standback",
"stdweb",
"time-macros",
"version_check",
"winapi",
]
[[package]]
name = "time"
version = "0.3.14"
@@ -2288,44 +2102,6 @@ dependencies = [
"num_threads",
]
[[package]]
name = "time-macros"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "957e9c6e26f12cb6d0dd7fc776bb67a706312e7299aed74c8dd5b17ebb27e2f1"
dependencies = [
"proc-macro-hack",
"time-macros-impl",
]
[[package]]
name = "time-macros-impl"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fd3c141a1b43194f3f56a1411225df8646c55781d5f26db825b3d98507eb482f"
dependencies = [
"proc-macro-hack",
"proc-macro2",
"quote",
"standback",
"syn",
]
[[package]]
name = "tinyvec"
version = "1.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
dependencies = [
"tinyvec_macros",
]
[[package]]
name = "tinyvec_macros"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
[[package]]
name = "toml"
version = "0.5.9"
@@ -2335,18 +2111,6 @@ dependencies = [
"serde",
]
[[package]]
name = "tonic-build"
version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9403f1bafde247186684b230dc6f38b5cd514584e8bec1dd32514be4745fa757"
dependencies = [
"proc-macro2",
"prost-build",
"quote",
"syn",
]
[[package]]
name = "typenum"
version = "1.15.0"
@@ -2376,11 +2140,11 @@ checksum = "dcc811dc4066ac62f84f11307873c4850cb653bfa9b1719cee2bd2204a4bc5dd"
[[package]]
name = "unicode-normalization"
version = "0.1.22"
version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
checksum = "09c8070a9942f5e7cfccd93f490fdebd230ee3c3c9f107cb25bad5351ef671cf"
dependencies = [
"tinyvec",
"smallvec",
]
[[package]]
@@ -2424,9 +2188,9 @@ dependencies = [
[[package]]
name = "url"
version = "2.3.1"
version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
checksum = "22fe195a4f217c25b25cb5058ced57059824a678474874038dc88d211bf508d3"
dependencies = [
"form_urlencoded",
"idna",
@@ -2448,7 +2212,7 @@ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
[[package]]
name = "vls-persist"
version = "0.1.0"
source = "git+https://gitlab.com/lightning-signer/validating-lightning-signer.git#0d894bcc8e140c62755ba65be14de4ba4b15fbf3"
source = "git+https://gitlab.com/lightning-signer/validating-lightning-signer.git#4a68e2d8a752439116019d746b09db6708808dd5"
dependencies = [
"hex",
"lightning-signer-core",
@@ -2461,8 +2225,9 @@ dependencies = [
[[package]]
name = "vls-protocol"
version = "0.1.0"
source = "git+https://gitlab.com/lightning-signer/validating-lightning-signer.git#0d894bcc8e140c62755ba65be14de4ba4b15fbf3"
source = "git+https://gitlab.com/lightning-signer/validating-lightning-signer.git#4a68e2d8a752439116019d746b09db6708808dd5"
dependencies = [
"as-any",
"bolt-derive",
"log",
"serde",
@@ -2473,7 +2238,7 @@ dependencies = [
[[package]]
name = "vls-protocol-signer"
version = "0.1.0"
source = "git+https://gitlab.com/lightning-signer/validating-lightning-signer.git#0d894bcc8e140c62755ba65be14de4ba4b15fbf3"
source = "git+https://gitlab.com/lightning-signer/validating-lightning-signer.git#4a68e2d8a752439116019d746b09db6708808dd5"
dependencies = [
"bit-vec",
"lightning-signer-core",

View File

@@ -14,7 +14,7 @@ opt-level = "z"
[features]
default = ["std"]
std = ["sphinx-key-signer"]
std = ["sphinx-signer"]
pio = ["esp-idf-sys/pio"]
pingpong = []
no_persist = []
@@ -22,7 +22,7 @@ no_persist = []
[dependencies]
bitflags = "1.3.2"
esp-idf-sys = { version = "0.31.6", features = ["binstart"] }
sphinx-key-signer = { path = "../signer", optional = true }
sphinx-signer = { git = "https://github.com/stakwork/sphinx-rs.git", optional = true }
sphinx-crypter = { git = "https://github.com/stakwork/sphinx-rs.git" }
embedded-svc = "0.22.1"
esp-idf-svc = { version = "0.42.1", features = ["experimental", "alloc"] }

View File

@@ -1,5 +1,5 @@
use crate::core::config::{decrypt_seed, ecdh_keypair, ConfigDTO};
use sphinx_key_signer::control::Config;
use sphinx_signer::sphinx_glyph::control::Config;
use serde::Deserialize;
use std::sync::{Arc, Condvar, Mutex};

View File

@@ -1,5 +1,5 @@
use crate::core::events::Event as CoreEvent;
use sphinx_key_signer::topics;
use sphinx_signer::sphinx_glyph::topics;
use anyhow::Result;
use embedded_svc::mqtt::client::utils::ConnState;

View File

@@ -1,4 +1,4 @@
use sphinx_key_signer::control::Config;
use sphinx_signer::sphinx_glyph::control::Config;
use esp_idf_svc::netif::*;
use esp_idf_svc::nvs::EspDefaultNvs;

View File

@@ -15,7 +15,7 @@ use sphinx_crypter::ecdh::{derive_shared_secret_from_slice, PUBLIC_KEY_LEN};
use sphinx_crypter::secp256k1::rand::thread_rng;
use sphinx_crypter::secp256k1::{PublicKey, Secp256k1, SecretKey};
use sphinx_key_signer::control::Config;
use sphinx_signer::sphinx_glyph::control::Config;
// #[derive(Clone, Debug, Deserialize, Serialize)]
// pub struct Config {
// pub broker: String,

View File

@@ -3,8 +3,8 @@ use embedded_svc::storage::RawStorage;
use embedded_svc::storage::StorageBase;
use esp_idf_svc::nvs::EspDefaultNvs;
use esp_idf_svc::nvs_storage::EspNvsStorage;
use sphinx_key_signer::control::{Config, ControlPersist, Controller, FlashKey, Policy};
use sphinx_key_signer::lightning_signer::bitcoin::Network;
use sphinx_signer::sphinx_glyph::control::{Config, ControlPersist, Controller, FlashKey, Policy};
use sphinx_signer::lightning_signer::bitcoin::Network;
use std::convert::TryInto;
use std::sync::{Arc, Mutex};
@@ -14,7 +14,7 @@ pub fn controller_from_seed(
seed: &[u8],
flash: Arc<Mutex<FlashPersister>>,
) -> Controller {
let (pk, sk) = sphinx_key_signer::derive_node_keys(network, seed);
let (pk, sk) = sphinx_signer::derive_node_keys(network, seed);
Controller::new_with_persister(sk, pk, flash)
}

View File

@@ -1,11 +1,18 @@
use crate::conn::mqtt::QOS;
use crate::ota::{update_sphinx_key, validate_ota_message};
use sphinx_key_signer::control::{Config, ControlMessage, ControlResponse, Controller, Policy};
use sphinx_key_signer::lightning_signer::bitcoin::Network;
use sphinx_key_signer::vls_protocol::model::PubKey;
use sphinx_key_signer::{self, make_init_msg, topics, InitResponse, ParserError, RootHandler};
use sphinx_signer::lightning_signer::bitcoin::Network;
use sphinx_signer::lightning_signer::persist::Persist;
use sphinx_signer::persist::FsPersister;
use sphinx_signer::sphinx_glyph::control::{
Config, ControlMessage, ControlResponse, Controller, Policy,
};
use sphinx_signer::sphinx_glyph::error::Error as GlyphError;
use sphinx_signer::sphinx_glyph::topics;
use sphinx_signer::vls_protocol::model::PubKey;
use sphinx_signer::{self, make_init_msg, InitResponse, RootHandler};
use std::sync::mpsc;
use std::sync::Arc;
use std::thread;
use embedded_svc::httpd::Result;
@@ -69,13 +76,16 @@ pub fn make_event_loop(
}
}
// create the fs persister
// 8 character max file names
let persister: Arc<dyn Persist> = Arc::new(FsPersister::new(&ROOT_STORE, Some(8)));
// initialize the RootHandler
let init_msg = make_init_msg(network, seed).expect("failed to make init msg");
let InitResponse {
root_handler,
init_reply: _,
} = sphinx_key_signer::init(init_msg, network, policy, ROOT_STORE)
.expect("failed to init signer");
} = sphinx_signer::init(init_msg, network, policy, persister).expect("failed to init signer");
// signing loop
let dummy_peer = PubKey([0; 33]);
@@ -95,7 +105,7 @@ pub fn make_event_loop(
}
Event::VlsMessage(ref msg_bytes) => {
led_tx.send(Status::Signing).unwrap();
let _ret = match sphinx_key_signer::handle(
let _ret = match sphinx_signer::handle(
&root_handler,
msg_bytes.clone(),
dummy_peer.clone(),
@@ -106,7 +116,7 @@ pub fn make_event_loop(
.expect("could not publish VLS response");
}
Err(e) => {
let err_msg = ParserError::new(1, &e.to_string());
let err_msg = GlyphError::new(1, &e.to_string());
log::error!("HANDLE FAILED {:?}", e);
mqtt.publish(topics::ERROR, QOS, false, &err_msg.to_vec()[..])
.expect("could not publish VLS error");
@@ -144,14 +154,14 @@ fn handle_control_response(
match control_msg {
ControlMessage::UpdatePolicy(new_policy) => {
if let Err(e) =
sphinx_key_signer::set_policy(&root_handler, network, new_policy)
sphinx_signer::policy::set_policy(&root_handler, network, new_policy)
{
log::error!("set policy failed {:?}", e);
control_res = ControlResponse::Error(format!("set policy failed {:?}", e))
}
}
ControlMessage::UpdateAllowlist(al) => {
if let Err(e) = sphinx_key_signer::set_allowlist(&root_handler, &al) {
if let Err(e) = sphinx_signer::policy::set_allowlist(&root_handler, &al) {
log::error!("set allowlist failed {:?}", e);
control_res =
ControlResponse::Error(format!("set allowlist failed {:?}", e))
@@ -159,7 +169,7 @@ fn handle_control_response(
}
// overwrite the real Allowlist response, loaded from Node
ControlMessage::QueryAllowlist => {
match sphinx_key_signer::get_allowlist(&root_handler) {
match sphinx_signer::policy::get_allowlist(&root_handler) {
Ok(al) => control_res = ControlResponse::AllowlistCurrent(al),
Err(e) => {
log::error!("read allowlist failed {:?}", e);
@@ -221,7 +231,7 @@ pub fn make_event_loop(
}
Event::VlsMessage(msg_bytes) => {
led_tx.send(Status::Signing).unwrap();
let b = sphinx_key_signer::parse_ping_and_form_response(msg_bytes);
let b = sphinx_signer::parse_ping_and_form_response(msg_bytes);
if do_log {
log::info!("GOT A PING MESSAGE! returning pong now...");
}

View File

@@ -20,8 +20,8 @@ use std::time::SystemTime;
use esp_idf_hal::peripherals::Peripherals;
use esp_idf_svc::nvs::*;
use sphinx_key_signer::control::{Config, ControlPersist, Policy};
use sphinx_key_signer::lightning_signer::bitcoin::Network;
use sphinx_signer::sphinx_glyph::control::{Config, ControlPersist, Policy};
use sphinx_signer::lightning_signer::bitcoin::Network;
#[cfg(not(feature = "pingpong"))]
const CLIENT_ID: &str = "sphinx-1";

View File

@@ -11,7 +11,7 @@ use esp_idf_svc::http::client::EspHttpClientConfiguration;
use esp_idf_svc::http::client::FollowRedirectsPolicy::FollowNone;
use esp_idf_svc::ota::EspOta;
use log::{error, info};
use sphinx_key_signer::control::OtaParams;
use sphinx_signer::sphinx_glyph::control::OtaParams;
use std::fs::{remove_file, File};
use std::io::BufWriter;
use std::io::Write;

View File

@@ -5,8 +5,7 @@ authors = ["Evan Feenstra <evanfeenstra@gmail.com>"]
edition = "2018"
[dependencies]
sphinx-key-signer = { path = "../signer" }
sphinx-key-parser = { path = "../parser" }
sphinx-signer = { git = "https://github.com/stakwork/sphinx-rs.git" }
sphinx-crypter = { git = "https://github.com/stakwork/sphinx-rs.git" }
anyhow = {version = "1", features = ["backtrace"]}
log = "0.4"

View File

@@ -1,7 +1,7 @@
use dotenv::dotenv;
use serde::{Deserialize, Serialize};
use sphinx_key_parser::control::{ControlMessage, Controller};
use sphinx_key_signer::lightning_signer::bitcoin::Network;
use sphinx_signer::sphinx_glyph::control::{ControlMessage, Controller};
use sphinx_signer::lightning_signer::bitcoin::Network;
use std::env;
use std::time::Duration;
@@ -58,6 +58,6 @@ async fn main() -> anyhow::Result<()> {
}
pub fn controller_from_seed(network: &Network, seed: &[u8], nonce: u64) -> Controller {
let (pk, sk) = sphinx_key_signer::derive_node_keys(network, seed);
let (pk, sk) = sphinx_signer::derive_node_keys(network, seed);
Controller::new(sk, pk, nonce)
}

View File

@@ -1,18 +1,21 @@
use parser::topics;
use sphinx_key_parser as parser;
use sphinx_key_signer::lightning_signer::bitcoin::Network;
use sphinx_signer::sphinx_glyph::topics;
use sphinx_signer::parser;
use sphinx_signer::lightning_signer::bitcoin::Network;
use sphinx_signer::lightning_signer::persist::Persist;
use sphinx_signer::persist::FsPersister;
use clap::{App, AppSettings, Arg};
use dotenv::dotenv;
use rumqttc::{self, AsyncClient, Event, EventLoop, MqttOptions, Packet, QoS};
use sphinx_key_signer::control::Controller;
use sphinx_key_signer::vls_protocol::{model::PubKey, msgs};
use sphinx_key_signer::{self, InitResponse};
use sphinx_signer::sphinx_glyph::control::Controller;
use sphinx_signer::vls_protocol::{model::PubKey, msgs};
use sphinx_signer::{self, InitResponse};
use std::convert::TryInto;
use std::env;
use std::error::Error;
use std::str::FromStr;
use std::time::Duration;
use std::sync::Arc;
pub const ROOT_STORE: &str = "teststore";
@@ -98,11 +101,12 @@ async fn run_main(
let seed32: [u8; 32] = seed.try_into().expect("wrong seed");
let init_msg =
sphinx_key_signer::make_init_msg(network, seed32).expect("failed to make init msg");
sphinx_signer::make_init_msg(network, seed32).expect("failed to make init msg");
let persister: Arc<dyn Persist> = Arc::new(FsPersister::new(&store_path, None));
let InitResponse {
root_handler,
init_reply: _,
} = sphinx_key_signer::init(init_msg, network, &Default::default(), &store_path)
} = sphinx_signer::init(init_msg, network, &Default::default(), persister)
.expect("failed to init signer");
// the actual handler loop
loop {
@@ -112,7 +116,7 @@ async fn run_main(
if let Some((topic, msg_bytes)) = incoming_bytes(event) {
match topic.as_str() {
topics::VLS => {
match sphinx_key_signer::handle(
match sphinx_signer::handle(
&root_handler,
msg_bytes,
dummy_peer.clone(),
@@ -278,6 +282,6 @@ pub fn setup_logging(who: &str, level_arg: &str) {
}
pub fn controller_from_seed(network: &Network, seed: &[u8]) -> Controller {
let (pk, sk) = sphinx_key_signer::derive_node_keys(network, seed);
let (pk, sk) = sphinx_signer::derive_node_keys(network, seed);
Controller::new(sk, pk, 0)
}