| """SQKD protocol scaffolding for quantum key distribution flows.""" | |
| from __future__ import annotations | |
| from dataclasses import replace | |
| from surface_code_in_stem.rl_control.envs.base import EnvBuildContext | |
| from surface_code_in_stem.protocols.base import ProtocolContract, QuantumProtocol | |
| class SQKDProtocol: | |
| """Experimental SQKD protocol contract.""" | |
| contract = ProtocolContract( | |
| name="sqkd", | |
| family="qkd", | |
| description="Pluggable contract for satellite QKD-oriented execution flows.", | |
| capabilities=["bb84_mapping", "satellite_channel", "basis_sifting"], | |
| ) | |
| def supports(self, context: EnvBuildContext) -> bool: | |
| return context.distance >= 3 and context.rounds >= 1 | |
| def normalize_context(self, context: EnvBuildContext) -> EnvBuildContext: | |
| metadata = dict(context.protocol_metadata) | |
| metadata.setdefault("qkd_mode", "bb84") | |
| return replace(context, protocol_metadata=metadata) | |
| def validate_context(self, context: EnvBuildContext) -> None: | |
| self.contract.validate_context(context) | |
| if context.distance < 3: | |
| raise ValueError("SQKD protocol currently requires distance >= 3.") | |