# HG changeset patch # User Laman # Date 2017-09-17 19:29:37 # Node ID 438dcebc9c63518767709e1e64b6ab43c36c70ff # Parent 86a5417085efabb0391c8205f0d1f1fa725e6396 splitting the secret diff --git a/src/gf256.py b/src/gf256.py --- a/src/gf256.py +++ b/src/gf256.py @@ -26,3 +26,12 @@ def ffmul(a, b): t=L[a]+L[b] if t>255: t-=255 return E[t] + + +def evaluate(coefs,x): + res=0 + xK=1 + for a in coefs: + res^=ffmul(a,xK) + xK=ffmul(xK,x) + return res diff --git a/src/shamira.py b/src/shamira.py new file mode 100644 --- /dev/null +++ b/src/shamira.py @@ -0,0 +1,18 @@ +import os + +import gf256 + + +def shareByte(secretB,k,n): + assert n<255 + coefs=[int(secretB)]+[int(b) for b in os.urandom(k-1)] + points=[gf256.evaluate(coefs,i) for i in range(1,n+1)] + return points + + +def generate(secret,k,n): + shares=[shareByte(b,k,n) for b in secret] + return [(i+1, [s[i] for s in shares]) for i in range(n)] + + +print(generate(b"key",2,3))