From 08132d6b7dd1409a283103c5e737977496c468d9 Mon Sep 17 00:00:00 2001 From: ThomasV Date: Thu, 19 Oct 2023 12:56:35 +0200 Subject: [PATCH] lnonion: fix decode_onion_error error_packet was side-effected by the loop. as a result, decoding worked only for routes of length 1 --- electrum/lnonion.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/electrum/lnonion.py b/electrum/lnonion.py index d996ab521..e66ce777b 100644 --- a/electrum/lnonion.py +++ b/electrum/lnonion.py @@ -429,11 +429,11 @@ def _decode_onion_error(error_packet: bytes, payment_path_pubkeys: Sequence[byte ammag_key = get_bolt04_onion_key(b'ammag', hop_shared_secrets[i]) um_key = get_bolt04_onion_key(b'um', hop_shared_secrets[i]) stream_bytes = generate_cipher_stream(ammag_key, len(error_packet)) - error_packet = xor_bytes(error_packet, stream_bytes) - hmac_computed = hmac_oneshot(um_key, msg=error_packet[32:], digest=hashlib.sha256) - hmac_found = error_packet[:32] + error_packet_decoded = xor_bytes(error_packet, stream_bytes) + hmac_computed = hmac_oneshot(um_key, msg=error_packet_decoded[32:], digest=hashlib.sha256) + hmac_found = error_packet_decoded[:32] if hmac_computed == hmac_found: - return error_packet, i + return error_packet_decoded, i raise FailedToDecodeOnionError()