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