Compare commits

...

4 Commits

Author SHA1 Message Date
Tristan B. Velloza Kildaire
e0d00c278f
Merge 5c6ee07d66 into 50b1eae380 2024-09-08 22:24:06 -04:00
Mark Qvist
50b1eae380 File move fix for windows 2024-09-09 02:11:46 +02:00
Mark Qvist
c119ef4273 Standardised ratchet id getter 2024-09-08 20:33:35 +02:00
Tristan Brice Velloza Kildaire
5c6ee07d66 TCPInterface
- When connect(s, Bool)` is called construct a socket that supports both address families
2024-09-05 00:07:35 +02:00
3 changed files with 11 additions and 6 deletions

View File

@ -269,6 +269,7 @@ class Destination:
if self.ratchets != None: if self.ratchets != None:
self.rotate_ratchets() self.rotate_ratchets()
ratchet = RNS.Identity._ratchet_public_bytes(self.ratchets[0]) ratchet = RNS.Identity._ratchet_public_bytes(self.ratchets[0])
RNS.Identity._remember_ratchet(self.hash, ratchet)
if app_data == None and self.default_app_data != None: if app_data == None and self.default_app_data != None:
if isinstance(self.default_app_data, bytes): if isinstance(self.default_app_data, bytes):
@ -573,7 +574,7 @@ class Destination:
if self.type == Destination.SINGLE and self.identity != None: if self.type == Destination.SINGLE and self.identity != None:
selected_ratchet = RNS.Identity.get_ratchet(self.hash) selected_ratchet = RNS.Identity.get_ratchet(self.hash)
if selected_ratchet: if selected_ratchet:
self.latest_ratchet_id = RNS.Identity.truncated_hash(selected_ratchet) self.latest_ratchet_id = RNS.Identity._get_ratchet_id(selected_ratchet)
return self.identity.encrypt(plaintext, ratchet=selected_ratchet) return self.identity.encrypt(plaintext, ratchet=selected_ratchet)
if self.type == Destination.GROUP: if self.type == Destination.GROUP:

View File

@ -249,7 +249,11 @@ class Identity:
if ratchet == None: if ratchet == None:
return None return None
else: else:
return Identity.truncated_hash(ratchet) return Identity._get_ratchet_id(ratchet)
@staticmethod
def _get_ratchet_id(ratchet_pub_bytes):
return Identity.full_hash(ratchet_pub_bytes)[:Identity.NAME_HASH_LENGTH//8]
@staticmethod @staticmethod
def _ratchet_public_bytes(ratchet): def _ratchet_public_bytes(ratchet):
@ -264,7 +268,7 @@ class Identity:
@staticmethod @staticmethod
def _remember_ratchet(destination_hash, ratchet): def _remember_ratchet(destination_hash, ratchet):
# TODO: Remove at some point, and only log new ratchets # TODO: Remove at some point, and only log new ratchets
RNS.log(f"Remembering ratchet {RNS.prettyhexrep(Identity.truncated_hash(ratchet))} for {RNS.prettyhexrep(destination_hash)}", RNS.LOG_EXTREME) RNS.log(f"Remembering ratchet {RNS.prettyhexrep(Identity._get_ratchet_id(ratchet))} for {RNS.prettyhexrep(destination_hash)}", RNS.LOG_EXTREME)
try: try:
Identity.known_ratchets[destination_hash] = ratchet Identity.known_ratchets[destination_hash] = ratchet
@ -284,7 +288,7 @@ class Identity:
ratchet_file = open(outpath, "wb") ratchet_file = open(outpath, "wb")
ratchet_file.write(umsgpack.packb(ratchet_data)) ratchet_file.write(umsgpack.packb(ratchet_data))
ratchet_file.close() ratchet_file.close()
os.rename(outpath, finalpath) os.replace(outpath, finalpath)
threading.Thread(target=persist_job, daemon=True).start() threading.Thread(target=persist_job, daemon=True).start()
@ -673,7 +677,7 @@ class Identity:
for ratchet in ratchets: for ratchet in ratchets:
try: try:
ratchet_prv = X25519PrivateKey.from_private_bytes(ratchet) ratchet_prv = X25519PrivateKey.from_private_bytes(ratchet)
ratchet_id = Identity.truncated_hash(ratchet_prv.public_key().public_bytes()) ratchet_id = Identity._get_ratchet_id(ratchet_prv.public_key().public_bytes())
shared_key = ratchet_prv.exchange(peer_pub) shared_key = ratchet_prv.exchange(peer_pub)
derived_key = RNS.Cryptography.hkdf( derived_key = RNS.Cryptography.hkdf(
length=32, length=32,

View File

@ -200,7 +200,7 @@ class TCPClientInterface(Interface):
if initial: if initial:
RNS.log("Establishing TCP connection for "+str(self)+"...", RNS.LOG_DEBUG) RNS.log("Establishing TCP connection for "+str(self)+"...", RNS.LOG_DEBUG)
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.socket = socket.socket(socket.AF_INET|socket.AF_INET6, socket.SOCK_STREAM)
self.socket.settimeout(TCPClientInterface.INITIAL_CONNECT_TIMEOUT) self.socket.settimeout(TCPClientInterface.INITIAL_CONNECT_TIMEOUT)
self.socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) self.socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
self.socket.connect((self.target_ip, self.target_port)) self.socket.connect((self.target_ip, self.target_port))