From d81421dad3badb7672ac2171e253af6643c5ecdd Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Mon, 24 Aug 2026 17:58:29 +0200 Subject: [PATCH] Avoid additional packet hashing under lock in inbound --- RNS/Packet.py | 10 +++++++--- RNS/Transport.py | 2 +- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/RNS/Packet.py b/RNS/Packet.py index 8c6676f9..6ff842f4 100755 --- a/RNS/Packet.py +++ b/RNS/Packet.py @@ -350,6 +350,10 @@ class Packet: def getTruncatedHash(self): return RNS.Identity.truncated_hash(self.get_hashable_part()) + @property + def truncated_packet_hash(self): + return self.packet_hash[:RNS.Reticulum.TRUNCATED_HASHLENGTH//8] + def get_hashable_part(self): hashable_part = bytes([self.raw[0] & 0b00001111]) if self.header_type == Packet.HEADER_2: hashable_part += self.raw[(RNS.Identity.TRUNCATED_HASHLENGTH//8)+2:] @@ -380,7 +384,7 @@ class Packet: class ProofDestination: def __init__(self, packet): - self.hash = packet.get_hash()[:RNS.Reticulum.TRUNCATED_HASHLENGTH//8]; + self.hash = packet.truncated_packet_hash; self.type = RNS.Destination.SINGLE def encrypt(self, plaintext): return plaintext @@ -405,8 +409,8 @@ class PacketReceipt: # Creates a new packet receipt from a sent packet def __init__(self, packet): - self.hash = packet.get_hash() - self.truncated_hash = packet.getTruncatedHash() + self.hash = packet.packet_hash + self.truncated_hash = packet.truncated_packet_hash self.sent = True self.sent_at = time.time() self.proved = False diff --git a/RNS/Transport.py b/RNS/Transport.py index 7fe6a70a..749291fc 100755 --- a/RNS/Transport.py +++ b/RNS/Transport.py @@ -2103,7 +2103,7 @@ class Transport: outbound_interface, # 1: Outbound interface time.time() ] # 2: Timestamp - with Transport.reverse_table_lock: Transport.reverse_table[packet.getTruncatedHash()] = reverse_entry + with Transport.reverse_table_lock: Transport.reverse_table[packet.truncated_packet_hash] = reverse_entry if Transport.local_hops_delta != 0 and from_local_client and not to_local_client: new_raw = Transport.mangle_hops(new_raw, Transport.local_hops_delta) Transport.transmit(outbound_interface, new_raw)