Supplementary material to the work https://eprint.iacr.org/2025/915.
transition.py:
Calculations of quasidifferential transition matrix.
speedy.py:
Specifications of the SPEEDY cipher.
printing.py:
Different printing functions.
mixcolumn.ipynb
speedy_one_round.py:
Gives the generate function to produce all one-round characteristics between the given input and output difference and calculates all quasidifferential trails.
oneroundcharextendedsearch.py:
Given the previous outputs calculate the probability, and when the probability is zero calculate the next best characteristic.
Outputs/all.txt:
The results from speedy_one_round.py for all possibilities, giving us the 13799 one round differential characteristics.
Outputs/zeroprob.txt:
The results from oneroundcharextendedsearch.py/calculatezeroprob() giving us the 6894 characteristics with probability zero.
Outputs/results_zero_to_newones.txt:
The results from oneroundcharextendedsearch.py/zerochar() giving us the 1569 next-best characteristics with a nonzero probability for the zeror-probability characteristics
Outputs/nodes_list.csv:
List of all 64 possible pairs (x,MC(x))
read_files_to_nodes_and_edges.py:
Generate edges and nodes for graph.
graph_branch_and_bround_header.py:
With the results from the previous step build a graph model containing all good one round characteristics.
graph_branch_and_bound.py:
With the use of the graph model and a branch and bound algorithm find the best multiple round characteristic.
probability_calculations.ipynb:
Calculates the probability of my 5-round characteristic
keyrecover.ipynb:
Details on the key-recovery steps.