mirror of
https://github.com/stakwork/sphinx-key.git
synced 2025-12-20 16:54:32 +01:00
update all deps to point to sphinx-rs
This commit is contained in:
@@ -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"]
|
||||
|
||||
@@ -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(())
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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()
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -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";
|
||||
@@ -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"
|
||||
@@ -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
4
signer/.gitignore
vendored
@@ -1,4 +0,0 @@
|
||||
/.vscode
|
||||
/.embuild
|
||||
/target
|
||||
/Cargo.lock
|
||||
@@ -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" }
|
||||
@@ -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)
|
||||
}
|
||||
@@ -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")
|
||||
}
|
||||
@@ -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,
|
||||
}
|
||||
}
|
||||
@@ -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
393
sphinx-key/Cargo.lock
generated
@@ -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",
|
||||
|
||||
@@ -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"] }
|
||||
|
||||
@@ -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};
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
@@ -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...");
|
||||
}
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user