src/pqc_enclave_sdk/backends/memory.py
| 1 | """In-memory reference backend. NOT FOR PRODUCTION - tests and demos only.""" |
| 2 | |
| 3 | from __future__ import annotations |
| 4 | |
| 5 | from pqc_enclave_sdk.artifact import EncryptedArtifact |
| 6 | from pqc_enclave_sdk.backends.base import EnclaveBackend |
| 7 | |
| 8 | |
| 9 | class InMemoryEnclaveBackend(EnclaveBackend): |
| 10 | """Deterministic in-memory backend. |
| 11 | |
| 12 | Suitable for tests, tutorials, and CI - no dependency on any platform |
| 13 | secure element. All data lives in the Python process and is lost on exit. |
| 14 | """ |
| 15 | |
| 16 | name = "in-memory" |
| 17 | platform = "in-memory" |
| 18 | enclave_vendor = "in-memory" |
| 19 | |
| 20 | def __init__( |
| 21 | self, |
| 22 | device_id: str = "test-device-0", |
| 23 | device_model: str = "in-memory", |
| 24 | ) -> None: |
| 25 | self.device_id = device_id |
| 26 | self.device_model = device_model |
| 27 | self._session_keys: dict[str, tuple[bytes, str]] = {} |
| 28 | self._artifacts: dict[str, EncryptedArtifact] = {} |
| 29 | |
| 30 | def store_session_key(self, key_id: str, key: bytes, expires_at: str) -> None: |
| 31 | self._session_keys[key_id] = (key, expires_at) |
| 32 | |
| 33 | def load_session_key(self, key_id: str) -> bytes | None: |
| 34 | if key_id in self._session_keys: |
| 35 | return self._session_keys[key_id][0] |
| 36 | return None |
| 37 | |
| 38 | def save_artifacts(self, artifacts: dict[str, EncryptedArtifact]) -> None: |
| 39 | self._artifacts = dict(artifacts) |
| 40 | |
| 41 | def load_artifacts(self) -> dict[str, EncryptedArtifact]: |
| 42 | return dict(self._artifacts) |
| 43 | |