diff --git a/src/shamira/gf256.py b/src/shamira/gf256.py --- a/src/shamira/gf256.py +++ b/src/shamira/gf256.py @@ -29,7 +29,6 @@ L[1] = 0 INV = [E[255-L[i]] if i!=0 else None for i in range(256)] # multiplicative inverse -@cache def gfmul(a, b): """Fast multiplication. Basic multiplication is expensive. a*b==g**(log(a)+log(b))""" assert 0<=a<=255, 0<=b<=255 @@ -39,6 +38,19 @@ def gfmul(a, b): return E[t] +def gfpow(x, k): + """Compute x**k.""" + i = 1 + res = 1 + while i <= k: + if k&i: + res = gfmul(res, x) + x = gfmul(x, x) + i <<= 1 + + return res + + def evaluate(coefs, x): """Evaluate polynomial's value at x.