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
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)