From e33064cf286e2905197cee283f5a9a45a9fa647d Mon Sep 17 00:00:00 2001 From: Dankrad Feist Date: Sat, 1 Oct 2022 16:18:09 +0100 Subject: [PATCH] Add python helper code to swig interface --- min-bindings/c_kzg_4844.swg | 31 ++++++++++++++++++++++++++++++ min-bindings/python/tests.py | 37 ++++-------------------------------- 2 files changed, 35 insertions(+), 33 deletions(-) diff --git a/min-bindings/c_kzg_4844.swg b/min-bindings/c_kzg_4844.swg index f435dc2..892a5f4 100644 --- a/min-bindings/c_kzg_4844.swg +++ b/min-bindings/c_kzg_4844.swg @@ -76,3 +76,34 @@ %include "../min-src/c_kzg_4844.h" %include "../inc/blst.h" + +%pythoncode %{ +# Helper functions + +def fr_from_int(x): + r = [] + while x > 0: + r.append(x % 2**64) + x //= 2**64 + assert len(r) <= 4 + while len(r) < 4: + r.append(0) + return BLSFieldElement_from_uint64s(tuple(r)) + +def int_from_fr(fr): + digits = uint64s_from_BLSFieldElement(fr) + res, mult = 0, 1 + for x in digits: + res += mult * x + mult *= 2**64 + return res + +def poly_from_values(values): + ret, pptr = alloc_polynomial(len(values)) + assert ret == 0 + p = PolynomialEvalFormPtr_frompointer(pptr).value() + pvalues = BLSFieldElements_frompointer(p.values) + for i, c in enumerate(values): + pvalues[i] = fr_from_int(c) + return p +%} \ No newline at end of file diff --git a/min-bindings/python/tests.py b/min-bindings/python/tests.py index 0935ddb..bfb4468 100644 --- a/min-bindings/python/tests.py +++ b/min-bindings/python/tests.py @@ -3,35 +3,6 @@ import ckzg import random import ssz -# Helper functions - -def fr_from_int(x): - r = [] - while x > 0: - r.append(x % 2**64) - x //= 2**64 - assert len(r) <= 4 - while len(r) < 4: - r.append(0) - return ckzg.BLSFieldElement_from_uint64s(tuple(r)) - -def int_from_fr(fr): - digits = ckzg.uint64s_from_BLSFieldElement(fr) - res, mult = 0, 1 - for x in digits: - res += mult * x - mult *= 2**64 - return res - -def poly_from_values(values): - ret, pptr = ckzg.alloc_polynomial(len(values)) - assert ret == 0 - p = ckzg.PolynomialEvalFormPtr_frompointer(pptr).value() - pvalues = ckzg.BLSFieldElements_frompointer(p.values) - for i, c in enumerate(values): - pvalues[i] = fr_from_int(c) - return p - # Simple test of compute_powers x = 32930439 @@ -39,10 +10,10 @@ n = 11 p = 1 powers = ckzg.BLSFieldElements(n) -ckzg.compute_powers(powers.cast(), fr_from_int(x), n) +ckzg.compute_powers(powers.cast(), ckzg.fr_from_int(x), n) for i in range(n): - assert p == int_from_fr(powers[i]) + assert p == ckzg.int_from_fr(powers[i]) p *= x p %= 2**256 @@ -62,13 +33,13 @@ num_blobs = 3 blobs = [ckzg.BLSFieldElements(BLOB_SIZE) for _ in range(num_blobs)] for i in range(num_blobs): for j in range(BLOB_SIZE): - blobs[i][j] = fr_from_int(random.randrange(0, 2**256)) + blobs[i][j] = ckzg.fr_from_int(random.randrange(0, 2**256)) kzg_commitments = [ckzg.blob_to_kzg_commitment(blob.cast(), ts) for blob in blobs] # Compute polynomial commitments for these blobs # We don't follow the spec exactly to get the hash, but it shouldn't matter since it's random data -blobs_as_ints = [[int_from_fr(frs[i]) for i in range(BLOB_SIZE)] for frs in blobs] +blobs_as_ints = [[ckzg.int_from_fr(frs[i]) for i in range(BLOB_SIZE)] for frs in blobs] kzg_commitments_as_bytes = [] for c in kzg_commitments: a = ckzg.bytes(48)