1
0

lnonion: fix decode_onion_error

error_packet was side-effected by the loop. as a result, decoding
worked only for routes of length 1
This commit is contained in:
ThomasV
2023-10-19 12:56:35 +02:00
parent eca10eb04d
commit 08132d6b7d

View File

@@ -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()