31 lines
1.9 KiB
Python
31 lines
1.9 KiB
Python
|
|
import base64
|
||
|
|
import os
|
||
|
|
import sqlite3
|
||
|
|
import tempfile
|
||
|
|
import unittest
|
||
|
|
from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PrivateKey
|
||
|
|
from cryptography.hazmat.primitives import serialization
|
||
|
|
|
||
|
|
import service
|
||
|
|
|
||
|
|
|
||
|
|
class GateTests(unittest.TestCase):
|
||
|
|
def test_binding_requires_responsible_domain_and_primary_persona(self):
|
||
|
|
registry = {"humans": [{"human_number": "TCS-GL-0016∞", "responsibility_domain": "MAIN_DOMAIN", "repository": "awen/guanghu-main-work", "personas": [{"role": "PERSONA_SUBJECT", "current_persona_identity": "PER-AW-ARCH-001"}, {"role": "RELATIONSHIP_CONTINUITY_SUPPORT", "current_persona_identity": "PER-ZQ001"}]}]}
|
||
|
|
self.assertIsNotNone(service.find_binding(registry, "TCS-GL-0016∞", "PER-AW-ARCH-001", "DOMAIN-MAIN"))
|
||
|
|
self.assertIsNone(service.find_binding(registry, "TCS-GL-0016∞", "PER-AW-ARCH-001", "DOMAIN-SUB"))
|
||
|
|
self.assertIsNone(service.find_binding(registry, "TCS-GL-0016∞", "PER-ZQ001", "DOMAIN-MAIN"))
|
||
|
|
|
||
|
|
def test_signature_binds_request_domain_human_persona_challenge_and_expiry(self):
|
||
|
|
private = Ed25519PrivateKey.generate()
|
||
|
|
public = private.public_key().public_bytes(serialization.Encoding.Raw, serialization.PublicFormat.Raw)
|
||
|
|
device = {"public_key": base64.b64encode(public).decode(), "request_id": "REQ-1", "domain_id": "DOMAIN-MAIN", "human_number": "TCS-GL-0016∞", "persona_id": "PER-AW-ARCH-001"}
|
||
|
|
challenge = {"request_id": "REQ-1", "challenge_id": "CH-1", "nonce": "NONCE-1", "expires_at": 2000000000}
|
||
|
|
signature = private.sign(service.challenge_message(device, challenge))
|
||
|
|
self.assertTrue(service.verify_challenge_signature(device, challenge, base64.b64encode(signature).decode()))
|
||
|
|
altered = dict(challenge, nonce="NONCE-2")
|
||
|
|
self.assertFalse(service.verify_challenge_signature(device, altered, base64.b64encode(signature).decode()))
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
unittest.main()
|