Source code for qkdsec.proofs._api
from ._types import KeyRateResult
from .channels.base import Channel
from .finite_size import tomamichel_correction
from .protocols.base import Protocol
from .sdp import solve_key_rate_sdp
[docs]
def key_rate(
protocol: Protocol,
channel: Channel,
*,
solver: str = "CLARABEL",
n_signals: int = 0,
eps_security: float = 1e-10,
) -> KeyRateResult:
result = solve_key_rate_sdp(protocol, channel, solver=solver)
if n_signals > 0 and result.r_lower > 0.0:
n_detected = int(channel.total_yield() * n_signals)
penalty = tomamichel_correction(n_detected, eps_security)
result.r_lower = max(
0.0, result.r_lower - channel.total_yield() * penalty
)
return result