tests/test_integration.py
2.8 KB · 84 lines · python Raw
1 """End-to-end integration tests."""
2
3 from __future__ import annotations
4
5 from quantumshield.identity.agent import AgentIdentity
6
7 from pqc_bootloader.audit import BootAttestationLog
8 from pqc_bootloader.firmware import FirmwareImage
9 from pqc_bootloader.key_ring import KeyRing
10 from pqc_bootloader.measured_boot import BootStage, MeasuredBoot
11 from pqc_bootloader.signer import FirmwareSigner, FirmwareVerifier
12
13
14 def test_full_boot_flow_accepted(
15 firmware_signer: FirmwareSigner,
16 sample_firmware: FirmwareImage,
17 trusted_key_ring: KeyRing,
18 ) -> None:
19 # 1. Manufacturer signs firmware at the factory.
20 signed = firmware_signer.sign(sample_firmware)
21
22 # 2. Appliance boot ROM verifies signature + key-ring trust.
23 result = FirmwareVerifier.verify(
24 signed,
25 actual_bytes=sample_firmware.image_bytes,
26 key_ring=trusted_key_ring,
27 )
28 assert result.valid is True
29 assert result.hash_consistent is True
30 assert result.key_trusted is True
31 assert result.signature_valid is True
32
33 # 3. Measured boot extends through rom, bootloader, kernel, initrd.
34 mb = MeasuredBoot()
35 mb.extend(BootStage.ROM, b"rom-v1")
36 mb.extend(BootStage.BOOTLOADER, b"bootloader-v1")
37 mb.extend(BootStage.KERNEL, b"kernel-v1")
38 mb.extend(BootStage.INITRD, b"initrd-v1")
39 assert len(mb.measurements) == 4
40 assert mb.pcr_value != "0" * 64
41
42 # 4. Audit log records the acceptance.
43 log = BootAttestationLog()
44 entry = log.log_accept(
45 firmware_name=signed.firmware.metadata.name,
46 firmware_version=signed.firmware.metadata.version,
47 firmware_hash=signed.firmware.image_hash,
48 device_id="device-0001",
49 pcr_value_after=mb.pcr_value,
50 )
51 assert entry.decision == "accept"
52 assert entry.pcr_value_after == mb.pcr_value
53 assert len(log.entries(decision="accept")) == 1
54
55
56 def test_rejected_firmware_path(
57 sample_firmware: FirmwareImage,
58 trusted_key_ring: KeyRing,
59 ) -> None:
60 # Rogue identity signs firmware; key ring does NOT trust it.
61 rogue = AgentIdentity.create("rogue-attacker")
62 rogue_signer = FirmwareSigner(rogue)
63 signed = rogue_signer.sign(sample_firmware)
64
65 result = FirmwareVerifier.verify(
66 signed,
67 actual_bytes=sample_firmware.image_bytes,
68 key_ring=trusted_key_ring,
69 )
70 assert result.valid is False
71 assert result.key_trusted is False
72
73 log = BootAttestationLog()
74 entry = log.log_reject(
75 firmware_name=signed.firmware.metadata.name,
76 firmware_version=signed.firmware.metadata.version,
77 firmware_hash=signed.firmware.image_hash,
78 reason=result.error or "untrusted key",
79 device_id="device-0001",
80 )
81 assert entry.decision == "reject"
82 assert "not trusted" in entry.reason
83 assert len(log.entries(decision="reject")) == 1
84