From 5bb43326e7aec4839290b477eef8e7b3f7ceb839 Mon Sep 17 00:00:00 2001 From: Kevin F Date: Wed, 14 Sep 2022 12:35:20 -0500 Subject: [PATCH] Finished tests for trust payload processing --- .../default-plugins/wot/wot/getbykey.py | 3 +- .../wot/wot/identity/__init__.py | 4 +- .../wot/wot/identity/processtrustsignature.py | 4 +- .../wot/test_proccess_trust_signature.py | 90 ++++++++++++++++--- 4 files changed, 84 insertions(+), 17 deletions(-) diff --git a/static-data/default-plugins/wot/wot/getbykey.py b/static-data/default-plugins/wot/wot/getbykey.py index a86dab98..758fa23e 100644 --- a/static-data/default-plugins/wot/wot/getbykey.py +++ b/static-data/default-plugins/wot/wot/getbykey.py @@ -5,7 +5,7 @@ from nacl.signing import VerifyKey if TYPE_CHECKING: from identity import Identity -from .identityset import identities +from identityset import identities def get_identity_by_key( @@ -14,7 +14,6 @@ def get_identity_by_key( if not isinstance(key, VerifyKey): key = VerifyKey(key) for identity in identities: - print(identity) if bytes(identity.key) == bytes(key): return identity raise KeyError("Identity not found") diff --git a/static-data/default-plugins/wot/wot/identity/__init__.py b/static-data/default-plugins/wot/wot/identity/__init__.py index 48a06675..49656c8a 100644 --- a/static-data/default-plugins/wot/wot/identity/__init__.py +++ b/static-data/default-plugins/wot/wot/identity/__init__.py @@ -10,8 +10,8 @@ from nacl.exceptions import BadSignatureError from .processtrustsignature import process_trust_signature from .name import IdentityName from .name import max_len as max_name_len -from ..exceptions import IdentitySerializationError -from ..timestamp import WotTimestamp +from exceptions import IdentitySerializationError +from timestamp import WotTimestamp short_identity_keys = { diff --git a/static-data/default-plugins/wot/wot/identity/processtrustsignature.py b/static-data/default-plugins/wot/wot/identity/processtrustsignature.py index 630db192..3464fdef 100644 --- a/static-data/default-plugins/wot/wot/identity/processtrustsignature.py +++ b/static-data/default-plugins/wot/wot/identity/processtrustsignature.py @@ -1,8 +1,9 @@ +import traceback import logger from nacl.signing import VerifyKey -from ..getbykey import get_identity_by_key +from getbykey import get_identity_by_key def process_trust_signature(sig_payload: bytes): @@ -27,6 +28,7 @@ def process_trust_signature(sig_payload: bytes): except KeyError: # if signer or signed identity are not in the identity set # this means they have not been announced yet + traceback.print_exc() pass else: # noop if already signed diff --git a/tests/default-plugin-tests/wot/test_proccess_trust_signature.py b/tests/default-plugin-tests/wot/test_proccess_trust_signature.py index 97329a30..449341c0 100644 --- a/tests/default-plugin-tests/wot/test_proccess_trust_signature.py +++ b/tests/default-plugin-tests/wot/test_proccess_trust_signature.py @@ -1,7 +1,8 @@ import os, uuid from random import randint from time import sleep -from nacl.signing import SigningKey +from nacl.signing import SigningKey, VerifyKey +import nacl import secrets import onionrblocks @@ -13,35 +14,100 @@ os.environ["ONIONR_HOME"] = TEST_DIR import unittest import sys sys.path.append(".") -sys.path.append('static-data/default-plugins/wot/') +sys.path.append('static-data/default-plugins/wot/wot') sys.path.append("src/") -from wot import identity -from wot import identityset +import identity +from identityset import identities + class TrustSignatureProcessing(unittest.TestCase): - def test_processing_trust_payloads(self): + + def test_processing_trust_payload_without_announced_identity(self): # reset identity set - identityset.identities = set() + identities.clear() fake_pubkey = secrets.token_bytes(32) signing_key = SigningKey.generate() - identityset.identities.add(identity.Identity(bytes(signing_key.verify_key), "test")) - identityset.identities.add(identity.Identity(fake_pubkey, "test2")) + identities.add(identity.Identity(signing_key.verify_key, "test")) + + trust_signature = signing_key.sign(fake_pubkey) + trust_signature_payload = bytes(signing_key.verify_key) + fake_pubkey + \ + trust_signature.signature + + for iden in identities: + if iden.key == signing_key.verify_key: + for i in iden.trusted: + if i.key == VerifyKey(fake_pubkey): + raise AssertionError("Signed identity found") + break + else: + raise AssertionError("Signing identity not found") + + def test_processing_invalid_trust_payloads(self): + # reset identity set + identities.clear() + + fake_pubkey = secrets.token_bytes(32) + signing_key = SigningKey.generate() + + identities.add(identity.Identity(signing_key.verify_key, "test")) + identities.add(identity.Identity(VerifyKey(fake_pubkey), "test2")) + + trust_signature = signing_key.sign(fake_pubkey) + trust_signature_payload = bytes(signing_key.verify_key) + fake_pubkey + \ + trust_signature.signature + trust_signature_payload = bytearray(trust_signature_payload) + trust_signature_payload[64] = 0 + trust_signature_payload = bytes(trust_signature_payload) + + + self.assertRaises( + nacl.exceptions.BadSignatureError, identity.process_trust_signature, trust_signature_payload) + + for iden in identities: + if iden.key == signing_key.verify_key: + for i in iden.trusted: + if i.key == VerifyKey(fake_pubkey): + raise AssertionError("Signed identity found") + break + else: + raise AssertionError("Signing identity not found") + + def test_processing_trust_payloads(self): + # reset identity set + identities.clear() + + fake_pubkey = secrets.token_bytes(32) + signing_key = SigningKey.generate() + + identities.add(identity.Identity(signing_key.verify_key, "test")) + identities.add(identity.Identity(VerifyKey(fake_pubkey), "test2")) trust_signature = signing_key.sign(fake_pubkey) trust_signature_payload = bytes(signing_key.verify_key) + fake_pubkey + \ trust_signature.signature + identity.process_trust_signature(trust_signature_payload) - - - for iden in identityset.identities: + for iden in identities: if iden.key == signing_key.verify_key: - self.assertIn(fake_pubkey, iden.trusted) + + for i in iden.trusted: + if i.key == VerifyKey(fake_pubkey): + break + else: + raise AssertionError("Signed identity not found") break + else: + raise AssertionError("Signing identity not found") unittest.main() + + +""" + +""" \ No newline at end of file