v1.1 ==== ref --- ### Fixes These modifications change the algorithm's output. - Change alpha coefficients in tweakey schedule to ensure lane 0 is updated between each round: - lane 0: Id => M - lane 1: M => M^2 - lane 2: M^2 => M^3 - lane 3: M^3 => M^4 - lane 4: M_R (unchanged) - lane 5: M_R^2 (unchanged) - lane 6: M_R^3 (unchanged) (multiplications.h, tweakey.c) ### Cleanups These modifications are structural and/or stylistic and do not change the algorithm's ouptut. - Introduce helper function copy_block_index() to make tweak-building functions more legible. (lilliput-ae-utils.h, lilliput-i.c, lilliput-ii.c) - Initialize ΘCB3 tweak with nonce instead of copying the latter into the latter repeatedly. (lilliput-i.c) - Re-write _nonlinear_layer() and _linear_layer() functions to better resemble the specification. (cipher.c) - Extract tweakey multiplications into their own header file, so that other implementations can make more targeted changes. (constants.h, multiplications.h, tweakey.c) add_threshold ------------- ### Fixes See reference implementation. ### Cleanups See reference implementation. Further cleanups: - Use size_t to iterate on arrays in lilliput_tbc_encrypt() and lilliput_tbc_decrypt(). (cipher.c) - Add constant macros KEY_LANES_NB and TWEAK_LANES_NB to make tweakey schedule code more legible. (tweakey.c) add_tweakeyloop --------------- See reference implementation. add_python ---------- ### Fixes See reference implementation. ### Cleanups - Re-write tweakey multiplications to better resemble the specification. (multiplications.py) add_vhdl -------- ### Reorganization - A more synthetical organisation was chosen. Indeed, Lilliput-II only need encryption and Lilliput-I need encryption and decryption, so LilliputTBCencrypt is always used for lilliput-I and LilliputTBCencryptdecrypt for Lilliput-II. And LilliputTBCdecrypt is no longer described because no version uses it. ### Fixes - For all vhdl versions we change coefficients in tweakey schedule to ensure lane 0 is updated between each encryption round: - lane 0: Id => M - lane 1: M => M^2 - lane 2: M^2 => M^3 - lane 3: M^3 => M^4 - lane 4: M_R (unchanged) - lane 5: M_R^2 (unchanged) - lane 6: M_R^3 (unchanged) (multiplication.vhd) - For Lilliput-I we change coefficients in tweakey schedule to ensure lane 0 is updated between each decryption round: - lane 0: Id => inv(M) - lane 1: inv(M) => inv(M)^2 - lane 2: inv(M)^2 => inv(M)^3 - lane 3: inv(M)^3 => inv(M)^4 - lane 4: M_R (unchanged) - lane 5: M_R^2 (unchanged) - lane 6: M_R^3 (unchanged) (inv_multiplication.vhd) ### Cleanups - Merge Sbox in one file. (sbox.vhd, inner_sbox_a.vhd, inner_sbox_b, vhd,inner_sbox_c.vhd) - Create registers in file roundexe_lilliput.vhd. (state_key_register.vhd, state_register.vhd, roundexe_lilliput) - Reduction of the number of signals. (chiffrement.vhd) ### Optimizations - Pipeline RoundTweakey extraction and round function. (roundexe_lilliput.vhd, machine_etat_chiffrement.vhd) - Isolate input and output from critical path. (roundexe_lilliput.vhd, machine_etat_chiffrement.vhd) v1.0 ==== Initial release to round 1 of the LWC standardization process.