# HG changeset patch # User Laman # Date 2017-09-17 22:36:32 # Node ID db65075fe7e050c401b75890228e4c8ee793754d # Parent 438dcebc9c63518767709e1e64b6ab43c36c70ff reconstructing the secret diff --git a/src/gf256.py b/src/gf256.py --- a/src/gf256.py +++ b/src/gf256.py @@ -35,3 +35,16 @@ def evaluate(coefs,x): res^=ffmul(a,xK) xK=ffmul(xK,x) return res + + +def getConstantCoef(k,*points): + res=0 + for i in range(k): + (x,y)=points[i] + prod=1 + for j in range(k): + if i==j: continue + (xj,yj)=points[j] + prod=ffmul(prod, (ffmul(xj,inv[xj^x]))) + res^=ffmul(y,prod) + return res diff --git a/src/shamira.py b/src/shamira.py --- a/src/shamira.py +++ b/src/shamira.py @@ -15,4 +15,11 @@ def generate(secret,k,n): return [(i+1, [s[i] for s in shares]) for i in range(n)] -print(generate(b"key",2,3)) +def reconstruct(*shares): + k=len(shares) + secretLen=len(shares[0][1]) + res=[None]*secretLen + for i in range(secretLen): + bs=[(x,s[i]) for (x,s) in shares] + res[i]=(gf256.getConstantCoef(k,*bs)) + return bytes(res)