def normalize(
self,
*,
op: CipherOp,
alg: Optional[Alg] = None,
key: Optional[KeyRef] = None,
params: Optional[ParamMapping] = None,
dialect: Optional[str] = None,
) -> NormalizedDescriptor:
allowed = set(self.supports().get(op, ()))
chosen_alg = alg or self.default_alg(op, for_key=key)
if chosen_alg not in allowed:
raise ValueError(f"{chosen_alg} not supported for operation {op}")
resolved_params: Dict[str, Any] = dict(params or {})
canon = resolved_params.pop("canon", _DEFAULT_CANON)
role = resolved_params.pop("role", resolved_params.pop("tuf_role", "generic"))
threshold = int(resolved_params.pop("threshold", 1))
mapped = {
"provider": {
"suite": "pep458",
"signer": "swarmauri_signing_pep458.Pep458Signer",
"alg": chosen_alg,
"canon": canon,
"role": role,
}
}
params_out = {
"canon": canon,
"role": role,
"threshold": threshold,
}
if resolved_params:
params_out.update(resolved_params)
constraints = {
"threshold": threshold,
"detached": True,
}
return {
"op": op,
"alg": chosen_alg,
"dialect": "provider" if dialect is None else dialect,
"mapped": mapped,
"params": params_out,
"constraints": constraints,
"policy": self.policy(),
}