Пример #1
0
def random_polynomial(degree):
    """
    Returns a random polynomial of a prescribed degree which is NOT the zero polynomial.
    """
    leading = FieldElement.random_element(
        exclude_elements=[FieldElement.zero()])
    p = [FieldElement.random_element() for i in range(degree)] + [leading]
    return Polynomial(p)
Пример #2
0
def test_compose():
    for _ in range(10):
        outer_poly = random_polynomial(randint(0, 1024))
        inner_poly = random_polynomial(randint(0, 16))
        # Validate the evaluation of the composition poly outer_poly(inner_poly) on a random point.
        point_to_eval = FieldElement.random_element()
        assert ((outer_poly.compose(inner_poly)
                 ).eval(point_to_eval) == outer_poly.eval(
                     inner_poly.eval(point_to_eval)))
Пример #3
0
def test_poly_interpolation():
    for _ in range(10):
        # Generate a random polynomial.
        degree = randint(0, 100)
        p = random_polynomial(degree)
        # Evaluate it on a number of points that is at least its degree.
        x_vals = set()
        while len(x_vals) < degree + 1:
            x_vals.add(FieldElement.random_element())
        x_vals = list(x_vals)
        y_vals = [p.eval(x) for x in x_vals]
        # Obtain a polynomial from the evaluation.
        interpolated_p = interpolate_poly(x_vals, y_vals)
        # Check equality.
        assert p == interpolated_p
Пример #4
0
def test_merkle_get_authentication_path():
    for _ in range(10):
        data_length = randint(0, 2000)
        data = [FieldElement.random_element() for _ in range(data_length)]
        m = MerkleTree(data)
        leaf_id = randint(0, data_length - 1)
        decommitment = m.get_authentication_path(leaf_id)
        # Check a correct decommitment.
        content = data[leaf_id]
        assert verify_decommitment(leaf_id, content, decommitment, m.root)
        # Check that altering the decommitment causes verification to fail.
        altered = decommitment[:]
        random_index = randint(0, len(altered) - 1)
        altered[random_index] = sha256(
            altered[random_index].encode()).hexdigest()
        assert not verify_decommitment(leaf_id, content, altered, m.root)
        # Check that altering the content causes verification to fail.
        other_content = data[randint(0, data_length - 1)]
        assert not verify_decommitment(leaf_id, other_content, decommitment,
                                       m.root) or other_content == content
Пример #5
0
def test_field_div():
    for _ in range(100):
        t = FieldElement.random_element(exclude_elements=[FieldElement.zero()])
        t_inv = FieldElement.one() / t
        assert t_inv == t.inverse()
        assert t_inv * t == FieldElement.one()