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
Example #9
0
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