diff --git a/src/shamira/core.py b/src/shamira/core.py --- a/src/shamira/core.py +++ b/src/shamira/core.py @@ -43,11 +43,13 @@ def reconstruct_raw(*shares): if len({x for (x, _) in shares}) < len(shares): raise MalformedShare("Found a non-unique share. Please check your inputs.") - secret_len = len(shares[0][1]) + (xs, payloads) = zip(*shares) + secret_len = len(payloads[0]) res = [None]*secret_len + weights = gf256.compute_weights(xs) for i in range(secret_len): - points = [(x, s[i]) for (x, s) in shares] - res[i] = (gf256.get_constant_coef(*points)) + ys = [s[i] for s in payloads] + res[i] = (gf256.get_constant_coef(weights, ys)) return bytes(res)