Da Modalità di funzionamento EAX :
We explain the notation used in the definition of OMAC. The value of iL (line 40: i an integer in {2, 4} and L ∈ {0, 1}n) is the n-bit string that is obtained by multiplying L by the n-bit string that represents the number i. The multiplication is done in the finite field GF(2n) using a canonical polynomial to represent field points. The canonical polynomial we select is the lexicographically first polynomial among the irreducible polynomials of degree n that have a minimum number of nonzero coefficients. For n = 128 the indicated polynomial is x128 + x7 + x2 + x + 1. In that case, 2L = L << 1 if the first bit of L is 0 and 2L = (L << 1) ⊕ 012010000111 otherwise, where L << 1 means the left shift of L by one position (the first bit vanishing and a zero entering into the last bit). The value of 4L is simply 2(2L). We warn that to avoid side-channel attacks one must implement the doubling operation in a constant-time manner.
Fondamentalmente mi è stato dato solo che il polinomio da usare nella moltiplicazione finita per n = 128 è x 128 + x 7 + x 2 + x + 1. Voglio che la mia implementazione sia astratta in quanto non dipende dalle specifiche del cypher in uso. Per consentire alla dimensione del blocco n di essere qualsiasi numero piuttosto che di codifica 128 o pochi altri, come posso fare in modo che il mio software calcoli il polinomio corretto?