I have been reading the paper on SNEIKEN and SNEIKHA authenticated encryption and cryptographic hashing when I came upon some interesting optimization that was used to perform field multiplcation in order to create 32-bit permutations.
As part of the encryption phase, the author uses two field multiplications to implement two separate 32-bit permutations.
For the decryption phase, the permutations are reversed by two field multiplications using inverse polynomials.
The field is defined over $F(x) = 2^{32} + 1$.
For encryption :
$permutation (word) = word * (x^{25} + x^{24} + 1)$
$permutation (word) = word * (x^{17} + x^{9} + 1)$
For decryption :
$permutation (word) = word * (x^{28} + x^{21} + x^{20} + x^{14} + x^{12} + x^{7} + x^{6} + x^{5} + x^{4})$
$permutation (word) = word * (x^{27} + x^{19} + x^{18} + x^{17} + x^{11} + x^{9} + x^{3} + x^{2} + 1)$
All seems pretty straight forward and until I reach the part of implementation.
The field multiplies are implemented as a series of rotations and xors :
Encryption :
$permutation (word) = rotl (word , 25) \oplus rotl (word , 24) \oplus rotl (word , 0)$
. . .
Each of the four multiplications are implemented as above where the terms of each field polynomial represent the number of bits to rotate the word from right to left.
I am unable to see how one goes from field multiplication of polynomials to rotation and xor.
Is there something specific about the field chracteristic $F(x) = 2^{32} + 1$ that enables this or is this a more general thing related to field multiplcation?
What is the reasoning/math behind this implementation?
Note : The section in the specification link where this is discussed is on 11.