This repository contains the code used to obtain some of our results in the paper "Lower Bounds on the Degree of Block Ciphers". The different folder contents are the following : - "search" contains our implementation to detect the input/key/output patterns. Especially this is the implementation used to get the results for GIFT-64 and PRESENT - "simple_verification_code" contains short and easy to read code to verify the number of trails for a given input/key/output pattern for GIFT-64, Skinny64 and AES. - "pattern" contains the different input/key/ouput patterns used to get our results. An installation of the MILP optimizer Gurobi is necessary (https://www.gurobi.com/) The GUROBI_HOME environment variable should be set according to the Gurobi documentation. If needed, edit the makefile to adjust to the correct paths/version of Gurobi, especially the -lgurobi_g++5.2 and -lgurobi81 flags This implementation was tested using : g++ version 9.3.0 (Arch Linux 9.3.0-1) SageMath version 9.0, Release Date: 2020-01-01 Gurobi 9.0.0 and g++ (Ubuntu 9.2.1-17ubuntu1~18.04.1) 9.2.1 20191102 SageMath version 8.1, Release Date: 2017-12-07 Gurobi 8.1.1 No guarantees are given when using different versions, but we do not expect any issue. The only compiler-dependent instruction should be __builtin_popcountll