lib/sharing/polynomial/shamir/v1.rb in sharing-0.1.0 vs lib/sharing/polynomial/shamir/v1.rb in sharing-0.1.1
- old
+ new
@@ -44,27 +44,32 @@
generate_prime
end
def create_shares(secret)
random_coefficients = generate_random_coefficients
- (1..total_shares).map.with_index { |x, i| [i + 1, f(x, secret, random_coefficients) % p] }
+ (1..total_shares).map { |x| [x, f(x, secret, random_coefficients) % p] }
end
def reconstruct_secret(points)
xs = points.map(&:first)
ys = points.map(&:last)
l0s = lagrange_basis_polynomial(xs)
- l0s.zip(ys).map { |l, y| l * y }.sum % p
+ reconstructed_secret = l0s.zip(ys).map { |l, y| l * y }.sum % p
+ encode_to_integer(reconstructed_secret)
end
private
def generate_prime
@p = random_prime(lambda_)
end
def generate_random_coefficients
- random_distinct_numbers("integer", total_shares - 1, lambda_ - 1)
+ random_distinct_numbers("integer", threshold - 1, lambda_ - 1)
+ end
+
+ def encode_to_integer(reconstructed_secret)
+ (reconstructed_secret.numerator * mod_inverse(reconstructed_secret.denominator, p)) % p
end
end
end
end
end