示例#1
0
def part1():
    t = [FieldElement(1), FieldElement(3141592)]
    while len(t) < 1023:
        t.append(t[-2] * t[-2] + t[-1] * t[-1])
    g = FieldElement.generator()**(3 * 2**20)
    points = [g**i for i in range(1024)]
    h_gen = FieldElement.generator()**((2**30 * 3) // 8192)
    h = [h_gen**i for i in range(8192)]
    domain = [FieldElement.generator() * x for x in h]
    p = interpolate_poly(points[:-1], t)
    ev = [p.eval(d) for d in domain]
    mt = MerkleTree(ev)
    ch = Channel()
    ch.send(mt.root)
    return t, g, points, h_gen, h, domain, p, ev, mt, ch
示例#2
0
def test_prod():
    g = FieldElement.generator()**((FieldElement.k_modulus - 1) // 1024)
    assert X**1024 - 1 == prod([(X - g**i) for i in range(1024)])
a = [FieldElement(1), FieldElement(3141592)]
while len(a) < 1023:
    a.append(a[-2] * a[-2] + a[-1] * a[-1])

# quick unit test to verify a[] constructed properly
assert len(a) == 1023, 'The trace must consist of exactly 1023 elements.'
assert a[0] == FieldElement(1), 'The first element in the trace must be the unit element.'
for i in range(2, 1023):
    assert a[i] == a[i - 1] * a[i - 1] + a[i - 2] * a[i - 2], f'The FibonacciSq recursion rule does not apply for index {i}'
assert a[1022] == FieldElement(2338775057), 'Wrong last element!'
print('Success!')

# need a generator from field element class
# need to generator a group of size 1024

g = FieldElement.generator() ** (3 * 2 ** 20)
G = [g ** i for i in range(1024)]

# need to construct a polynomial
# using X from polynomial package
# quick test: p = x^2 + 1

p = 2 * X ** 2 + 1

#can evaluate p at 2 by the following:
print(p(2))
p


#create v such that v will contain a value of the field 
# f at FieldElement(2)