def test_interpolate_result_prime_above(): coefficients = [43, 10, 5] prime = 71 xlist = [-2, 4, 5] points = polynomials.evaluate(coefficients, xlist, prime) f = polynomials.interpolate(points, prime) assert f(10) == 643 % prime
def test_interpolate_eval_neg(): coefficients = [-22, 7, -5] prime = 71 xlist = [-2, 4, 5] points = polynomials.evaluate(coefficients, xlist, prime) f = polynomials.interpolate(points, prime) assert f(2) == -28 % prime and f(-2) == -56 % prime
def test_interpolate_result_prime_below(): coefficients = [1, 2, 2] prime = 71 xlist = [-2, 4, 5] points = polynomials.evaluate(coefficients, xlist, prime) f = polynomials.interpolate(points, prime) assert f(5) == 61
def test_interpolate_eval_pos_below_p(): coefficients = [22, -7, 5] prime = 71 xlist = [-2, 4, 5] points = polynomials.evaluate(coefficients, xlist, prime) f = polynomials.interpolate(points, prime) assert f(2) == 28 % prime and f(-2) == 56 % prime
def test_interpolate_neg_point_neg_coef_neg_eval(): # polynomial: -9 * x^3 + -4 * x^2 + -3 * x + -11 coefficients = [-11, -3, -4, -9] prime = 71 xlist = [-2, -4, -5, -9, -11] points = polynomials.evaluate(coefficients, xlist, prime) f = polynomials.interpolate(points, prime) assert f(-3) == 205 % prime and f(-8) == 4365 % prime
def test_interpolate_neg_point_pos_coef_neg_eval(): # polynomial: 9 * x^3 + 4 * x^2 + 3 * x + 11 coefficients = [11, 3, 4, 9] prime = 71 xlist = [-2, -4, -5, -9, -11] points = polynomials.evaluate(coefficients, xlist, prime) f = polynomials.interpolate(points, prime) assert f(-3) == -205 % prime and f(-8) == -4365 % prime
def test_interpolate_pos_point_neg_coef_pos_eval(): # polynomial: -9 * x^3 + -4 * x^2 + -3 * x + -11 coefficients = [-11, -3, -4, -9] prime = 71 xlist = [2, 4, 5, 9, 11] points = polynomials.evaluate(coefficients, xlist, prime) f = polynomials.interpolate(points, prime) assert f(3) == -299 % prime and f(8) == -4899 % prime
def test_interpolate_pos_point_pos_coef_pos_eval(): # polynomial: 9 * x^3 + 4 * x^2 + 3 * x + 11 coefficients = [11, 3, 4, 9] prime = 71 xlist = [2, 4, 5, 9, 11] points = polynomials.evaluate(coefficients, xlist, prime) f = polynomials.interpolate(points, prime) assert f(3) == 299 % prime and f(8) == 4899 % prime
def _reconstruct_secret_int(num_players, max_secret_length, shares): ''' Args: num_players, the total number of players (can be greater than or equal to the number of shares) max_secret_length, the maximum length of the secret represented as a bytestring (ie, len(secret)) shares, a list of tuples representing (x, f(x)) values Returns: the integer that was shared by _share_secret_int if all shares are valid otherwise, no guarantees are made about the value of the integer returned ''' bitlength = max(num_players.bit_length(), max_secret_length * 8) prime = primes.get_prime_by_bitlength(bitlength) return polynomials.interpolate(shares, prime)(0)
def test_interpolate_empty_points(): points = [] p = 71 with pytest.raises(ValueError): polynomials.interpolate(points, p)
def test_interpolate_simple(): points = [(5, 39), (11, 37)] p = 71 poly = polynomials.interpolate(points, p) assert poly(5) == 39 and poly(11) == 37