use ln::channelmanager::HTLCSource;
use ln::msgs;
use ln::wire::Encode;
-use routing::network_graph::NetworkUpdate;
+use routing::gossip::NetworkUpdate;
use routing::router::RouteHop;
use util::chacha20::{ChaCha20, ChaChaReader};
use util::errors::{self, APIError};
Hmac::from_engine(hmac).into_inner()
}
+pub(super) fn next_hop_packet_pubkey<T: secp256k1::Signing + secp256k1::Verification>(secp_ctx: &Secp256k1<T>, mut packet_pubkey: PublicKey, packet_shared_secret: &[u8; 32]) -> Result<PublicKey, secp256k1::Error> {
+ let blinding_factor = {
+ let mut sha = Sha256::engine();
+ sha.input(&packet_pubkey.serialize()[..]);
+ sha.input(packet_shared_secret);
+ Sha256::from_engine(sha).into_inner()
+ };
+
+ packet_pubkey.mul_assign(secp_ctx, &blinding_factor[..]).map(|_| packet_pubkey)
+}
+
// can only fail if an intermediary hop has an invalid public key or session_priv is invalid
#[inline]
pub(super) fn construct_onion_keys_callback<T: secp256k1::Signing, FType: FnMut(SharedSecret, [u8; 32], PublicKey, &RouteHop, usize)> (secp_ctx: &Secp256k1<T>, path: &Vec<RouteHop>, session_priv: &SecretKey, mut callback: FType) -> Result<(), secp256k1::Error> {
}
else if error_code & PERM == PERM {
if !payment_failed {
- network_update = Some(NetworkUpdate::ChannelClosed {
+ network_update = Some(NetworkUpdate::ChannelFailure {
short_channel_id: failing_route_hop.short_channel_id,
is_permanent: true,
});
if is_chan_update_invalid {
// This probably indicates the node which forwarded
// to the node in question corrupted something.
- network_update = Some(NetworkUpdate::ChannelClosed {
+ network_update = Some(NetworkUpdate::ChannelFailure {
short_channel_id: route_hop.short_channel_id,
is_permanent: true,
});