Beispiel #1
0
def test_polynomial_commitment_same_z():
    d = 5
    secret = 5

    ps = [
        Polynomial(Fr(5), Fr(3)),
        Polynomial(Fr(1), Fr(2)),
        Polynomial(Fr(0), Fr(6), Fr(9)),
    ]

    z = Fr(100)
    gamma = Fr(7)

    srs = srs_setup(d, secret)

    commitments = [commit(p, srs) for p in ps]
    evaluations = [p.evaluate(z) for p in ps]

    witness = create_witness_same_z(polynomials=ps, gamma=gamma, z=z, srs=srs)
    assert verify_evaluation_same_z(
        commitments=commitments,
        gamma=gamma,
        evaluations=evaluations,
        z=z,
        witness=witness,
        srs=srs,
    )
Beispiel #2
0
def test_fft():

    p = Polynomial(3, 1, 4, 1, 5, 9, 2, 6)
    domain = EvaluationDomain(domain=[F337(85)**i for i in range(8)])
    assert domain.domain == [1, 85, 148, 111, 336, 252, 189, 226]
    evaluations = p.fft(domain)
    assert evaluations == [31, 70, 109, 74, 334, 181, 232, 4]
    p2 = domain.inverse_fft(evaluations)
    assert p2.coefficients == (3, 1, 4, 1, 5, 9, 2, 6)
Beispiel #3
0
def test_polynomial():

    ps = [
        Polynomial(),
        Polynomial(-1),
        Polynomial(1, 1),
        Polynomial(1, -11, 1, -1, 1)
    ]
    for p in ps:
        repr(p)
Beispiel #4
0
def test_division():
    a = Polynomial(-288, 0, 2, 1)
    b = Polynomial(-6, 1)
    assert a / b == Polynomial(48, 8, 1)

    a = Polynomial(1, 3, 3, 1)
    b = Polynomial(1, 2, 1)
    assert a / b == Polynomial(1, 1)

    # (x^n -1) / (n*(x-1)) == (1/n)(x^(n-1) +... + 1)
    assert Polynomial(F13(-1), F13(0), F13(0), F13(0), F13(1)) / (
        Polynomial(F13(-1), F13(1)) * 4) == Polynomial(10, 10, 10, 10)
Beispiel #5
0
def test_polynomial_works_on_fields():
    p = Polynomial(Fr(1), Fr(2), Fr(100))
    repr(p)
    p.evaluate(Fr(0))
    p.evaluate(Fr(5))
Beispiel #6
0
def test_lagrange():
    assert lagrange([0, 1, 2], [0, 1, 8]) == Polynomial(0, -2, 3)
    assert lagrange([Fr(0), Fr(1), Fr(2)],
                    [Fr(0), Fr(1), Fr(8)]) == Polynomial(Fr(0), Fr(-2), Fr(3))
Beispiel #7
0
def test_polynomial_multiplication():
    assert Polynomial(1, 1) * Polynomial(1, 1) == Polynomial(1, 2, 1)
Beispiel #8
0
def test_polynomial_addition():
    assert Polynomial(1, 1, 1) + (Polynomial(1, 1, 1)) == Polynomial(2, 2, 2)
Beispiel #9
0
def test_polynomial_evaluation():
    assert Polynomial(1, 1, 1).evaluate(2) == 7
    assert Polynomial(-2, 7, -5, 1).evaluate(0) == -2
    assert Polynomial(-2, 7, -5, 1).evaluate(1) == 1
    assert Polynomial(-2, 7, -5, 1).evaluate(2) == 0
    assert Polynomial(-2, 7, -5, 1).evaluate(3) == 1
Beispiel #10
0
def test_coset_fft():
    ed = EvaluationDomain(domain=[F337(85)**i for i in range(8)])
    p = Polynomial(3, 1, 4, 1, 5, 9, 2)
    assert p.fft(ed) == [25, 62, 323, 247, 3, 189, 18, 168]
    assert p.coset_fft(ed) == [62, 323, 247, 3, 189, 18, 168, 25]