src/pqc_enclave_sdk/backends/memory.py
1.4 KB · 43 lines · python Raw
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