@@ -2881,11 +2881,14 @@ where
28812881 macro_rules! return_malformed_err {
28822882 ($msg: expr, $err_code: expr) => {
28832883 {
2884+ let sha256_of_onion = if msg.blinding_point.is_some() { [0; 32] } else {
2885+ Sha256::hash(&msg.onion_routing_packet.hop_data).into_inner()
2886+ };
28842887 log_info!(self.logger, "Failed to accept/forward incoming HTLC: {}", $msg);
28852888 return Err(HTLCFailureMsg::Malformed(msgs::UpdateFailMalformedHTLC {
28862889 channel_id: msg.channel_id,
28872890 htlc_id: msg.htlc_id,
2888- sha256_of_onion: Sha256::hash(&msg.onion_routing_packet.hop_data).into_inner() ,
2891+ sha256_of_onion,
28892892 failure_code: $err_code,
28902893 }));
28912894 }
@@ -2929,6 +2932,15 @@ where
29292932 }
29302933 }
29312934 }
2935+ macro_rules! return_blinded_htlc_err {
2936+ ($msg: expr) => {
2937+ if msg.blinding_point.is_some() {
2938+ return_malformed_err!($msg, INVALID_ONION_BLINDING);
2939+ } else {
2940+ return_err!($msg, INVALID_ONION_BLINDING, [0; 32]);
2941+ }
2942+ }
2943+ }
29322944
29332945 let next_hop = match onion_utils::decode_next_payment_hop(shared_secret,
29342946 &msg.onion_routing_packet.hop_data[..], msg.onion_routing_packet.hmac, msg.payment_hash,
@@ -2952,13 +2964,22 @@ where
29522964 msg.onion_routing_packet.public_key.unwrap(), &shared_secret);
29532965 (short_channel_id, amt_to_forward, outgoing_cltv_value, Some(next_packet_pk))
29542966 },
2967+ onion_utils::Hop::Forward {
2968+ next_hop_data: msgs::InboundOnionPayload::BlindedForward { .. }, ..
2969+ } => {
2970+ return_blinded_htlc_err!("Forwarding blinded HTLCs is not supported yet");
2971+ },
29552972 // We'll do receive checks in [`Self::construct_pending_htlc_info`] so we have access to the
29562973 // inbound channel's state.
29572974 onion_utils::Hop::Receive { .. } => return Ok((next_hop, shared_secret, None)),
29582975 onion_utils::Hop::Forward { next_hop_data: msgs::InboundOnionPayload::Receive { .. }, .. } => {
29592976 return_err!("Final Node OnionHopData provided for us as an intermediary node", 0x4000 | 22, &[0; 0]);
29602977 },
2961- _ => todo!()
2978+ onion_utils::Hop::Forward {
2979+ next_hop_data: msgs::InboundOnionPayload::BlindedReceive { .. }, ..
2980+ } => {
2981+ return_blinded_htlc_err!("Blinded final node onion provided for us as an intermediary node");
2982+ }
29622983 };
29632984
29642985 // Perform outbound checks here instead of in [`Self::construct_pending_htlc_info`] because we
0 commit comments