Patent ID: 7499542

Claim:
A method to encrypt or decrypt blocks of input data X to output data Y, based on a main key R, this method using at least two serially connected main modules (MOD), each main module (MOD) using a sub-key (RA) derived from the main key (R), comprising the steps of: splitting X into at least two initial values X 0 L and X 0 R, inputting at a device, the at least two initial values X 0 L and X 0 R, mixing the at least two values X 0 L and X 0 R to form a mixed value X 1 , obtaining a value X 2 by mixing a first part RAH of the sub-key RA with the value X 1 , obtaining a value X 3 by applying the value X 2 to a substitution layer, the substitution layer comprising at least one substitution box (sbox), each substitution box containing a table of constants for which an input serves as a pointer and a pointed constant serves as an output, obtaining a value X 4 by using a diffusion box of multi-permutation type based on the value X 3 , obtaining a value X 5 by mixing a second part RAL of the sub-key RA with the value X 4 , obtaining a value X 6 by applying to the value X 5 another substitution layer, the substitution layer also comprising at least one substitution box (sbox), obtaining a value X 7 by mixing a first part RAH of the sub-key RA with the value X 6 , mixing the value X 7 with the initial at least two values X 0 L and X 0 R to obtain at least two values X 8 L and X 8 R, the at least two values X 8 L and X 8 R representing an output value X 8 , where for each main module (MOD) a new sub-key (RA) is generated from the main key (R), the at least two initial values X 0 L and X 0 R of a first module being a subset of the input data X, the at least two output values X 8 L and X 8 R of a last module forming the output data Y producing an encryption or decryption result, and this method further comprising the step of applying to at least one of the values X 8 L or X 8 R an orthomorphism function before applying these values to the input X 0 R and X 0 L of a next main module.