mirror of
https://github.com/markqvist/Reticulum.git
synced 2024-11-22 13:40:19 +00:00
Refactored Identity method names
This commit is contained in:
parent
fe773c32e2
commit
d03b7d7a52
@ -133,7 +133,7 @@ def client(destination_hexhash, configpath, timeout=None):
|
|||||||
# We set the destination to the request_destination
|
# We set the destination to the request_destination
|
||||||
# that was just created, and the only data we add
|
# that was just created, and the only data we add
|
||||||
# is a random hash.
|
# is a random hash.
|
||||||
echo_request = RNS.Packet(request_destination, RNS.Identity.getRandomHash())
|
echo_request = RNS.Packet(request_destination, RNS.Identity.get_random_hash())
|
||||||
|
|
||||||
# Send the packet! If the packet is successfully
|
# Send the packet! If the packet is successfully
|
||||||
# sent, it will return a PacketReceipt instance.
|
# sent, it will return a PacketReceipt instance.
|
||||||
|
@ -332,7 +332,7 @@ class Destination:
|
|||||||
:param path_response: Internal flag used by :ref:`RNS.Transport<Transport>`. Ignore.
|
:param path_response: Internal flag used by :ref:`RNS.Transport<Transport>`. Ignore.
|
||||||
"""
|
"""
|
||||||
destination_hash = self.hash
|
destination_hash = self.hash
|
||||||
random_hash = RNS.Identity.getRandomHash()
|
random_hash = RNS.Identity.get_random_hash()
|
||||||
|
|
||||||
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):
|
||||||
@ -342,7 +342,7 @@ class Destination:
|
|||||||
if isinstance(returned_app_data, bytes):
|
if isinstance(returned_app_data, bytes):
|
||||||
app_data = returned_app_data
|
app_data = returned_app_data
|
||||||
|
|
||||||
signed_data = self.hash+self.identity.getPublicKey()+random_hash
|
signed_data = self.hash+self.identity.get_public_key()+random_hash
|
||||||
if app_data != None:
|
if app_data != None:
|
||||||
signed_data += app_data
|
signed_data += app_data
|
||||||
|
|
||||||
@ -351,7 +351,7 @@ class Destination:
|
|||||||
# TODO: Check if this could be optimised by only
|
# TODO: Check if this could be optimised by only
|
||||||
# carrying the hash in the destination field, not
|
# carrying the hash in the destination field, not
|
||||||
# also redundantly inside the signed blob as here
|
# also redundantly inside the signed blob as here
|
||||||
announce_data = self.hash+self.identity.getPublicKey()+random_hash+signature
|
announce_data = self.hash+self.identity.get_public_key()+random_hash+signature
|
||||||
|
|
||||||
if app_data != None:
|
if app_data != None:
|
||||||
announce_data += app_data
|
announce_data += app_data
|
||||||
|
@ -42,7 +42,7 @@ class Identity:
|
|||||||
if destination_hash in Identity.known_destinations:
|
if destination_hash in Identity.known_destinations:
|
||||||
identity_data = Identity.known_destinations[destination_hash]
|
identity_data = Identity.known_destinations[destination_hash]
|
||||||
identity = Identity(public_only=True)
|
identity = Identity(public_only=True)
|
||||||
identity.loadPublicKey(identity_data[2])
|
identity.load_public_key(identity_data[2])
|
||||||
identity.app_data = identity_data[3]
|
identity.app_data = identity_data[3]
|
||||||
RNS.log("Found "+RNS.prettyhexrep(destination_hash)+" in known destinations", RNS.LOG_EXTREME)
|
RNS.log("Found "+RNS.prettyhexrep(destination_hash)+" in known destinations", RNS.LOG_EXTREME)
|
||||||
return identity
|
return identity
|
||||||
@ -62,7 +62,7 @@ class Identity:
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def saveKnownDestinations():
|
def save_known_destinations():
|
||||||
RNS.log("Saving known destinations to storage...", RNS.LOG_VERBOSE)
|
RNS.log("Saving known destinations to storage...", RNS.LOG_VERBOSE)
|
||||||
file = open(RNS.Reticulum.storagepath+"/known_destinations","wb")
|
file = open(RNS.Reticulum.storagepath+"/known_destinations","wb")
|
||||||
umsgpack.dump(Identity.known_destinations, file)
|
umsgpack.dump(Identity.known_destinations, file)
|
||||||
@ -70,7 +70,7 @@ class Identity:
|
|||||||
RNS.log("Done saving known destinations to storage", RNS.LOG_VERBOSE)
|
RNS.log("Done saving known destinations to storage", RNS.LOG_VERBOSE)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def loadKnownDestinations():
|
def load_known_destinations():
|
||||||
if os.path.isfile(RNS.Reticulum.storagepath+"/known_destinations"):
|
if os.path.isfile(RNS.Reticulum.storagepath+"/known_destinations"):
|
||||||
try:
|
try:
|
||||||
file = open(RNS.Reticulum.storagepath+"/known_destinations","rb")
|
file = open(RNS.Reticulum.storagepath+"/known_destinations","rb")
|
||||||
@ -83,22 +83,22 @@ class Identity:
|
|||||||
RNS.log("Destinations file does not exist, so no known destinations loaded", RNS.LOG_VERBOSE)
|
RNS.log("Destinations file does not exist, so no known destinations loaded", RNS.LOG_VERBOSE)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def fullHash(data):
|
def full_hash(data):
|
||||||
digest = hashes.Hash(hashes.SHA256(), backend=default_backend())
|
digest = hashes.Hash(hashes.SHA256(), backend=default_backend())
|
||||||
digest.update(data)
|
digest.update(data)
|
||||||
|
|
||||||
return digest.finalize()
|
return digest.finalize()
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def truncatedHash(data):
|
def truncated_hash(data):
|
||||||
return Identity.fullHash(data)[:(Identity.TRUNCATED_HASHLENGTH//8)]
|
return Identity.full_hash(data)[:(Identity.TRUNCATED_HASHLENGTH//8)]
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def getRandomHash():
|
def get_random_hash():
|
||||||
return Identity.truncatedHash(os.urandom(10))
|
return Identity.truncated_hash(os.urandom(10))
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def validateAnnounce(packet):
|
def validate_announce(packet):
|
||||||
if packet.packet_type == RNS.Packet.ANNOUNCE:
|
if packet.packet_type == RNS.Packet.ANNOUNCE:
|
||||||
RNS.log("Validating announce from "+RNS.prettyhexrep(packet.destination_hash), RNS.LOG_DEBUG)
|
RNS.log("Validating announce from "+RNS.prettyhexrep(packet.destination_hash), RNS.LOG_DEBUG)
|
||||||
destination_hash = packet.destination_hash
|
destination_hash = packet.destination_hash
|
||||||
@ -115,7 +115,7 @@ class Identity:
|
|||||||
app_data = None
|
app_data = None
|
||||||
|
|
||||||
announced_identity = Identity(public_only=True)
|
announced_identity = Identity(public_only=True)
|
||||||
announced_identity.loadPublicKey(public_key)
|
announced_identity.load_public_key(public_key)
|
||||||
|
|
||||||
if announced_identity.pub != None and announced_identity.validate(signature, signed_data):
|
if announced_identity.pub != None and announced_identity.validate(signature, signed_data):
|
||||||
RNS.Identity.remember(packet.getHash(), destination_hash, public_key, app_data)
|
RNS.Identity.remember(packet.getHash(), destination_hash, public_key, app_data)
|
||||||
@ -129,7 +129,7 @@ class Identity:
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def exit_handler():
|
def exit_handler():
|
||||||
Identity.saveKnownDestinations()
|
Identity.save_known_destinations()
|
||||||
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@ -151,9 +151,9 @@ class Identity:
|
|||||||
self.hexhash = None
|
self.hexhash = None
|
||||||
|
|
||||||
if not public_only:
|
if not public_only:
|
||||||
self.createKeys()
|
self.create_keys()
|
||||||
|
|
||||||
def createKeys(self):
|
def create_keys(self):
|
||||||
self.prv = rsa.generate_private_key(
|
self.prv = rsa.generate_private_key(
|
||||||
public_exponent=65537,
|
public_exponent=65537,
|
||||||
key_size=Identity.KEYSIZE,
|
key_size=Identity.KEYSIZE,
|
||||||
@ -170,17 +170,17 @@ class Identity:
|
|||||||
format=serialization.PublicFormat.SubjectPublicKeyInfo
|
format=serialization.PublicFormat.SubjectPublicKeyInfo
|
||||||
)
|
)
|
||||||
|
|
||||||
self.updateHashes()
|
self.update_hashes()
|
||||||
|
|
||||||
RNS.log("Identity keys created for "+RNS.prettyhexrep(self.hash), RNS.LOG_VERBOSE)
|
RNS.log("Identity keys created for "+RNS.prettyhexrep(self.hash), RNS.LOG_VERBOSE)
|
||||||
|
|
||||||
def getPrivateKey(self):
|
def get_private_key(self):
|
||||||
return self.prv_bytes
|
return self.prv_bytes
|
||||||
|
|
||||||
def getPublicKey(self):
|
def get_public_key(self):
|
||||||
return self.pub_bytes
|
return self.pub_bytes
|
||||||
|
|
||||||
def loadPrivateKey(self, prv_bytes):
|
def load_private_key(self, prv_bytes):
|
||||||
try:
|
try:
|
||||||
self.prv_bytes = prv_bytes
|
self.prv_bytes = prv_bytes
|
||||||
self.prv = serialization.load_der_private_key(
|
self.prv = serialization.load_der_private_key(
|
||||||
@ -193,7 +193,7 @@ class Identity:
|
|||||||
encoding=serialization.Encoding.DER,
|
encoding=serialization.Encoding.DER,
|
||||||
format=serialization.PublicFormat.SubjectPublicKeyInfo
|
format=serialization.PublicFormat.SubjectPublicKeyInfo
|
||||||
)
|
)
|
||||||
self.updateHashes()
|
self.update_hashes()
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@ -202,16 +202,16 @@ class Identity:
|
|||||||
RNS.log("The contained exception was: "+str(e), RNS.LOG_ERROR)
|
RNS.log("The contained exception was: "+str(e), RNS.LOG_ERROR)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def loadPublicKey(self, key):
|
def load_public_key(self, key):
|
||||||
try:
|
try:
|
||||||
self.pub_bytes = key
|
self.pub_bytes = key
|
||||||
self.pub = load_der_public_key(self.pub_bytes, backend=default_backend())
|
self.pub = load_der_public_key(self.pub_bytes, backend=default_backend())
|
||||||
self.updateHashes()
|
self.update_hashes()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
RNS.log("Error while loading public key, the contained exception was: "+str(e), RNS.LOG_ERROR)
|
RNS.log("Error while loading public key, the contained exception was: "+str(e), RNS.LOG_ERROR)
|
||||||
|
|
||||||
def updateHashes(self):
|
def update_hashes(self):
|
||||||
self.hash = Identity.truncatedHash(self.pub_bytes)
|
self.hash = Identity.truncated_hash(self.pub_bytes)
|
||||||
self.hexhash = self.hash.hex()
|
self.hexhash = self.hash.hex()
|
||||||
|
|
||||||
def save(self, path):
|
def save(self, path):
|
||||||
@ -228,7 +228,7 @@ class Identity:
|
|||||||
try:
|
try:
|
||||||
with open(path, "rb") as key_file:
|
with open(path, "rb") as key_file:
|
||||||
prv_bytes = key_file.read()
|
prv_bytes = key_file.read()
|
||||||
return self.loadPrivateKey(prv_bytes)
|
return self.load_private_key(prv_bytes)
|
||||||
return False
|
return False
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
RNS.log("Error while loading identity from "+str(path), RNS.LOG_ERROR)
|
RNS.log("Error while loading identity from "+str(path), RNS.LOG_ERROR)
|
||||||
|
@ -12,4 +12,4 @@ class Interface:
|
|||||||
|
|
||||||
def get_hash(self):
|
def get_hash(self):
|
||||||
# TODO: Maybe expand this to something more unique
|
# TODO: Maybe expand this to something more unique
|
||||||
return RNS.Identity.fullHash(str(self).encode("utf-8"))
|
return RNS.Identity.full_hash(str(self).encode("utf-8"))
|
@ -243,10 +243,10 @@ class Packet:
|
|||||||
self.packet_hash = self.getHash()
|
self.packet_hash = self.getHash()
|
||||||
|
|
||||||
def getHash(self):
|
def getHash(self):
|
||||||
return RNS.Identity.fullHash(self.getHashablePart())
|
return RNS.Identity.full_hash(self.getHashablePart())
|
||||||
|
|
||||||
def getTruncatedHash(self):
|
def getTruncatedHash(self):
|
||||||
return RNS.Identity.truncatedHash(self.getHashablePart())
|
return RNS.Identity.truncated_hash(self.getHashablePart())
|
||||||
|
|
||||||
def getHashablePart(self):
|
def getHashablePart(self):
|
||||||
hashable_part = bytes([self.raw[0] & 0b00001111])
|
hashable_part = bytes([self.raw[0] & 0b00001111])
|
||||||
|
@ -195,7 +195,7 @@ class Resource:
|
|||||||
RNS.log("Compression saved "+str(saved_bytes)+" bytes, sending compressed", RNS.LOG_DEBUG)
|
RNS.log("Compression saved "+str(saved_bytes)+" bytes, sending compressed", RNS.LOG_DEBUG)
|
||||||
|
|
||||||
self.data = b""
|
self.data = b""
|
||||||
self.data += RNS.Identity.getRandomHash()[:Resource.RANDOM_HASH_SIZE]
|
self.data += RNS.Identity.get_random_hash()[:Resource.RANDOM_HASH_SIZE]
|
||||||
self.data += self.compressed_data
|
self.data += self.compressed_data
|
||||||
|
|
||||||
self.compressed = True
|
self.compressed = True
|
||||||
@ -203,7 +203,7 @@ class Resource:
|
|||||||
|
|
||||||
else:
|
else:
|
||||||
self.data = b""
|
self.data = b""
|
||||||
self.data += RNS.Identity.getRandomHash()[:Resource.RANDOM_HASH_SIZE]
|
self.data += RNS.Identity.get_random_hash()[:Resource.RANDOM_HASH_SIZE]
|
||||||
self.data += self.uncompressed_data
|
self.data += self.uncompressed_data
|
||||||
self.uncompressed_data = self.data
|
self.uncompressed_data = self.data
|
||||||
|
|
||||||
@ -231,9 +231,9 @@ class Resource:
|
|||||||
hashmap_computation_began = time.time()
|
hashmap_computation_began = time.time()
|
||||||
RNS.log("Starting resource hashmap computation with "+str(hashmap_entries)+" entries...", RNS.LOG_DEBUG)
|
RNS.log("Starting resource hashmap computation with "+str(hashmap_entries)+" entries...", RNS.LOG_DEBUG)
|
||||||
|
|
||||||
self.random_hash = RNS.Identity.getRandomHash()[:Resource.RANDOM_HASH_SIZE]
|
self.random_hash = RNS.Identity.get_random_hash()[:Resource.RANDOM_HASH_SIZE]
|
||||||
self.hash = RNS.Identity.fullHash(data+self.random_hash)
|
self.hash = RNS.Identity.full_hash(data+self.random_hash)
|
||||||
self.expected_proof = RNS.Identity.fullHash(data+self.hash)
|
self.expected_proof = RNS.Identity.full_hash(data+self.hash)
|
||||||
|
|
||||||
if original_hash == None:
|
if original_hash == None:
|
||||||
self.original_hash = self.hash
|
self.original_hash = self.hash
|
||||||
@ -298,7 +298,7 @@ class Resource:
|
|||||||
# uncompressed transfers on streams with long blocks
|
# uncompressed transfers on streams with long blocks
|
||||||
# of identical bytes. Doing so would be very silly
|
# of identical bytes. Doing so would be very silly
|
||||||
# anyways but maybe it should be handled gracefully.
|
# anyways but maybe it should be handled gracefully.
|
||||||
return RNS.Identity.fullHash(data+self.random_hash)[:Resource.MAPHASH_LEN]
|
return RNS.Identity.full_hash(data+self.random_hash)[:Resource.MAPHASH_LEN]
|
||||||
|
|
||||||
def advertise(self):
|
def advertise(self):
|
||||||
thread = threading.Thread(target=self.__advertise_job)
|
thread = threading.Thread(target=self.__advertise_job)
|
||||||
@ -437,7 +437,7 @@ class Resource:
|
|||||||
else:
|
else:
|
||||||
self.data = data
|
self.data = data
|
||||||
|
|
||||||
calculated_hash = RNS.Identity.fullHash(self.data+self.random_hash)
|
calculated_hash = RNS.Identity.full_hash(self.data+self.random_hash)
|
||||||
|
|
||||||
if calculated_hash == self.hash:
|
if calculated_hash == self.hash:
|
||||||
self.file = open(self.storagepath, "ab")
|
self.file = open(self.storagepath, "ab")
|
||||||
@ -474,7 +474,7 @@ class Resource:
|
|||||||
def prove(self):
|
def prove(self):
|
||||||
if not self.status == Resource.FAILED:
|
if not self.status == Resource.FAILED:
|
||||||
try:
|
try:
|
||||||
proof = RNS.Identity.fullHash(self.data+self.hash)
|
proof = RNS.Identity.full_hash(self.data+self.hash)
|
||||||
proof_data = self.hash+proof
|
proof_data = self.hash+proof
|
||||||
proof_packet = RNS.Packet(self.link, proof_data, packet_type=RNS.Packet.PROOF, context=RNS.Packet.RESOURCE_PRF)
|
proof_packet = RNS.Packet(self.link, proof_data, packet_type=RNS.Packet.PROOF, context=RNS.Packet.RESOURCE_PRF)
|
||||||
proof_packet.send()
|
proof_packet.send()
|
||||||
|
@ -120,7 +120,7 @@ class Reticulum:
|
|||||||
exit(1)
|
exit(1)
|
||||||
|
|
||||||
self.__apply_config()
|
self.__apply_config()
|
||||||
RNS.Identity.loadKnownDestinations()
|
RNS.Identity.load_known_destinations()
|
||||||
|
|
||||||
RNS.Transport.start(self)
|
RNS.Transport.start(self)
|
||||||
|
|
||||||
|
@ -619,7 +619,7 @@ class Transport:
|
|||||||
# of queued announce rebroadcasts once handed to the next node.
|
# of queued announce rebroadcasts once handed to the next node.
|
||||||
if packet.packet_type == RNS.Packet.ANNOUNCE:
|
if packet.packet_type == RNS.Packet.ANNOUNCE:
|
||||||
local_destination = next((d for d in Transport.destinations if d.hash == packet.destination_hash), None)
|
local_destination = next((d for d in Transport.destinations if d.hash == packet.destination_hash), None)
|
||||||
if local_destination == None and RNS.Identity.validateAnnounce(packet):
|
if local_destination == None and RNS.Identity.validate_announce(packet):
|
||||||
if packet.transport_id != None:
|
if packet.transport_id != None:
|
||||||
received_from = packet.transport_id
|
received_from = packet.transport_id
|
||||||
|
|
||||||
@ -1016,14 +1016,14 @@ class Transport:
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def requestPath(destination_hash):
|
def requestPath(destination_hash):
|
||||||
path_request_data = destination_hash + RNS.Identity.getRandomHash()
|
path_request_data = destination_hash + RNS.Identity.get_random_hash()
|
||||||
path_request_dst = RNS.Destination(None, RNS.Destination.OUT, RNS.Destination.PLAIN, Transport.APP_NAME, "path", "request")
|
path_request_dst = RNS.Destination(None, RNS.Destination.OUT, RNS.Destination.PLAIN, Transport.APP_NAME, "path", "request")
|
||||||
packet = RNS.Packet(path_request_dst, path_request_data, packet_type = RNS.Packet.DATA, transport_type = RNS.Transport.BROADCAST, header_type = RNS.Packet.HEADER_1)
|
packet = RNS.Packet(path_request_dst, path_request_data, packet_type = RNS.Packet.DATA, transport_type = RNS.Transport.BROADCAST, header_type = RNS.Packet.HEADER_1)
|
||||||
packet.send()
|
packet.send()
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def requestPathOnInterface(destination_hash, interface):
|
def requestPathOnInterface(destination_hash, interface):
|
||||||
path_request_data = destination_hash + RNS.Identity.getRandomHash()
|
path_request_data = destination_hash + RNS.Identity.get_random_hash()
|
||||||
path_request_dst = RNS.Destination(None, RNS.Destination.OUT, RNS.Destination.PLAIN, Transport.APP_NAME, "path", "request")
|
path_request_dst = RNS.Destination(None, RNS.Destination.OUT, RNS.Destination.PLAIN, Transport.APP_NAME, "path", "request")
|
||||||
packet = RNS.Packet(path_request_dst, path_request_data, packet_type = RNS.Packet.DATA, transport_type = RNS.Transport.BROADCAST, header_type = RNS.Packet.HEADER_1, attached_interface = interface)
|
packet = RNS.Packet(path_request_dst, path_request_data, packet_type = RNS.Packet.DATA, transport_type = RNS.Transport.BROADCAST, header_type = RNS.Packet.HEADER_1, attached_interface = interface)
|
||||||
packet.send()
|
packet.send()
|
||||||
|
Loading…
Reference in New Issue
Block a user