le_estimator

class cryptographic_estimators.LEEstimator.le_estimator.LEEstimator(n: int, k: int, q: int, memory_bound=inf, **kwargs)

Bases: BaseEstimator

Construct an instance of the Linear Code Equivalence Estimator.

Parameters:
  • n (int) – Code length

  • k (int) – Code dimension

  • q (int) – Field size

  • excluded_algorithms – A list/tuple of excluded algorithms (default: None)

  • nsolutions – No. of solutions

algorithm_names()

Return a list of the name of considered algorithms.

algorithms()

Return a list of considered algorithms.

property bit_complexities

Returns a list of bit_complexities attributes of included algorithms.

property complexity_type

Returns a list of complexity_type attributes of included algorithms.

estimate(**kwargs)

Returns dictionary describing the complexity of each algorithm and its optimal parameters.

property estimator_type

Returns the type of the estimator.

Either problem or scheme

excluded_algorithms_by_default = []
fastest_algorithm(use_tilde_o_time=False)

Return the algorithm with the smallest time complexity.

Parameters:

use_tilde_o_time (bool) – Use Ō time complexity, i.e., ignore polynomial factors. Default is False.

property memory_access

Returns a list of memory_access attributes of included algorithms.

nalgorithms()

Return the number of considered algorithms.

reset()

Resets the internal states of the estimator and all included algorithms.

table(show_quantum_complexity=0, show_tilde_o_time=0, show_all_parameters=0, precision=1, truncate=0)

Print table describing the complexity of each algorithm and its optimal parameters.

Parameters:
  • show_quantum_complexity (int) – Show quantum time complexity (default: 0)

  • show_tilde_o_time (int) – Show Ō time complexity (default: 0)

  • show_all_parameters (int) – Show all optimization parameters (default: 0)

  • precision (int) – Number of decimal digits output (default: 1)

  • truncate (int) – Truncate rather than round the output (default: 0)

Examples

>>> from cryptographic_estimators.LEEstimator import LEEstimator
>>> A = LEEstimator(n=30, k=20, q=251)
>>> A.table(show_all_parameters=1)
+-----------+------------------------------------------+
|           |                 estimate                 |
+-----------+------+--------+--------------------------+
| algorithm | time | memory |        parameters        |
+-----------+------+--------+--------------------------+
| Leon      | 35.1 |   12.2 |         {'w': 9}         |
| Beullens  | 29.7 |   14.4 |        {'w': 11}         |
| BBPS      | 25.3 |   12.2 | {'w': 12, 'w_prime': 10} |
+-----------+------+--------+--------------------------+
Tests:
>>> if skip_long_doctests:
...     pytest.skip()
>>> from cryptographic_estimators.LEEstimator import LEEstimator
>>> A = LEEstimator(n=200, k=110, q=31)
>>> A.table(precision=3, show_all_parameters=1) # long time
+-----------+----------------------------------------------+
|           |                   estimate                   |
+-----------+---------+--------+---------------------------+
| algorithm |    time | memory |         parameters        |
+-----------+---------+--------+---------------------------+
| Leon      | 103.038 | 33.624 |         {'w': 58}         |
| Beullens  | 123.109 | 42.252 |         {'w': 79}         |
| BBPS      |  95.960 | 33.624 | {'w': 101, 'w_prime': 59} |
+-----------+---------+--------+---------------------------+