23 lines
1.1 KiB
Markdown
23 lines
1.1 KiB
Markdown
# LowMC implementation
|
|
This is a C++ implementation of the LowMC block cipher family. The
|
|
parameters (block size, number of S-boxes in the substitution layer, number
|
|
of rounds, key size) are defined in `LowMC.h`. Compilation requires support
|
|
of C++11 features.
|
|
|
|
The files `LowMC.h` and `LowMC.cpp` contain the relevant code. `test.cpp`
|
|
contains a short example usage.
|
|
|
|
The file `determine_rounds.py` contains a Python script that determines
|
|
the number of rounds needed for LowMC to be secure in dependence on
|
|
the other parameters: the block size *n*, the number of S-boxes per layer *m*,
|
|
the log2 of the allowed data complexity *d*, and the key size *k*.
|
|
|
|
Example usage: `python3 determine_rounds.py 256 63 128 128`
|
|
|
|
## Script for generating the matrices and and constants
|
|
|
|
The python script `generate_matrices.py` can be used to generate the matrices
|
|
for the linear layer and the key schedule as well as the round constants.
|
|
They are written to a file named `matrices_and_constants.dat`. This is script
|
|
can provide the matrices for use in cryptanalysis. It is _not_ needed for the
|
|
reference implementation which creates the matrices and constants internally.
|