Source code for quantumthreattracker.algorithms.rsa.chevignard

"""Resource estimator for controlled multi product RSA algorithm."""
from dataclasses import dataclass
from typing import Optional

from qualtran.surface_code import AlgorithmSummary

from quantumthreattracker.algorithms.quantum_algorithm import (
    AlgParams,
    CryptParams,
    QuantumAlgorithm,
)

from .chevignard_utils.estimations import full_circuit_costs


[docs] @dataclass class ChevignardParams(AlgParams): """(No tunable parameters for Chevignard; placeholder.).""" pass
[docs] class Chevignard(QuantumAlgorithm): """Qualtran wrapper for Chevignard et. al's ctrl multi product RSA algorithm.""" def __init__( self, crypt_params: CryptParams, alg_params: Optional[ChevignardParams] = None ): super().__init__(crypt_params, alg_params)
[docs] def get_algorithm_summary( self, alg_params: Optional[AlgParams] = None ) -> AlgorithmSummary: """Estimate the resource requirements for controlled multi product. Raises ------ NameError: Chevignard only supports protocol "RSA". Args ---- alg_params (AlgParams): Algorithm parameters. Not used in this case. Returns ------- AlgorithmSummary: Resource requirements for the algorithm. Raises ------ NameError If the protocol is not "RSA". """ if self._crypt_params.protocol != "RSA": raise NameError( 'Chevignard only supports protocol "RSA", got ' f'"{self._crypt_params.protocol}"' ) # 1) compute all RNS parameters for this key size n = self._crypt_params.key_size return full_circuit_costs(n)
[docs] @staticmethod def generate_search_space() -> list[ChevignardParams]: """ Generate the search space for the Chevignard algorithm. Returns ------- list[ChevignardParams]: A list of ChevignardParams instances defining the parameter configurations to explore. """ return [ChevignardParams()]