# HG changeset patch # User Laman # Date 2017-09-17 19:03:50 # Node ID 86a5417085efabb0391c8205f0d1f1fa725e6396 Galois Field 256 arithmetic diff --git a/src/gf256.py b/src/gf256.py new file mode 100644 --- /dev/null +++ b/src/gf256.py @@ -0,0 +1,28 @@ +def _ffmul(a, b): + r=0 + while a!=0: + if (a&1)!=0: r^=b + t=b&0x80 + b=(b<<1)&255 + if t!=0: b^=0x1b + a>>=1 + return r + + +g=3 +E=[None]*256 +L=[None]*256 +acc=1 +for i in range(256): + E[i]=acc + L[acc]=i + acc=_ffmul(acc, g) +L[1]=0 +inv=[E[255-L[i]] if i!=0 else None for i in range(256)] + + +def ffmul(a, b): + if a==0 or b==0: return 0 + t=L[a]+L[b] + if t>255: t-=255 + return E[t]