Skip to main content

No project description provided

Project description

py_arkworks_bls12381

The main usage of this library at this moment is to generate test vectors for EIP4844 in the consensus-specs. The library itself is generic, so feel free to use it for other purposes.

G1/G2Points

from py_arkworks_bls12381 import G1Point, G2Point, Scalar

# G1Point and G2Point have the same methods implemented on them
# For brevity, I will only show one method using G1Point and G2Point 
# The rest of the code will just use G1Point

# Point initialization -- This will be initialized to the g1 generator 
g1_generator = G1Point()
g2_generator = G2Point()

# Identity element 
identity = G1Point.identity()

# Equality -- We override eq and neq operators
assert g1_generator == g1_generator
assert g1_generator != identity


# Printing an element -- We override __str__ so when we print
# an element it prints in hex
print("identity: ",identity)
print("g1 generator: ", g1_generator)
print("g2 generator: ", g2_generator)

# Point Addition/subtraction/Negation -- We override the add/sub/neg operators
gen = G1Point()
double_gen = gen + gen
assert double_gen - gen == gen
neg_gen = -gen
assert neg_gen + gen == identity

# Scalar multiplication
#
scalar = Scalar(4)
four_gen = gen * scalar
assert four_gen == gen + gen + gen + gen

# Serialisation
# 
# serialising to/from a g1 point
# We don't expose the uncompressed form 
# because it seems like its not needed
compressed_bytes = gen.to_compressed_bytes()
deserialised_point = G1Point.from_compressed_bytes(compressed_bytes)
# If the bytes being received are trusted, we can avoid
# doing subgroup checks
deserialised_point_unchecked = G1Point.from_compressed_bytes_unchecked(compressed_bytes)
assert deserialised_point == deserialised_point_unchecked
assert deserialised_point == gen

Pairing

from py_arkworks_bls12381 import G1Point, G2Point, GT, Scalar


# Initilisation -- This is the generator point
gt_gen = GT()

# Zero/One
zero = GT.zero()
one = GT.one()

# Computing a pairing using pairing and multi_pairing
# multi_pairing does multiple pairings with only one final_exp
assert gt_gen == GT.pairing(G1Point(), G2Point()) 
g1s = [G1Point()]
g2s = [G2Point()]
assert gt_gen == GT.multi_pairing(g1s, g2s)

# Bilinearity
a = Scalar(1234)
b = Scalar(4566)
c = a * b


g = G1Point() * a
h = G2Point() * b

p = GT.pairing(g, h)

c_g1 = G1Point() *c
c_g2 = G2Point() *c

assert p == GT.pairing(c_g1, G2Point())
assert p == GT.pairing(G1Point(), c_g2)

Scalar

from py_arkworks_bls12381 import Scalar

# Initialisation - The default initialiser for a scalar is an u128 integer
scalar = Scalar(12345)

# Equality -- We override eq and neq operators
assert scalar == scalar
assert Scalar(1234) != Scalar(4567)

# Scalar Addition/subtraction/Negation -- We override the add/sub/neg operators
a = Scalar(3)
b = Scalar(4)
c = Scalar(5)
assert a.square() + b.square() == c.square()
assert a * a + b * b == c * c

neg_a = -a
assert a + neg_a == Scalar(0)
assert (a + neg_a).is_zero()

# Serialisation
compressed_bytes = scalar.to_le_bytes()
deserialised_scalar = Scalar.from_le_bytes(compressed_bytes)
assert scalar == deserialised_scalar

Development

First, activate the virtual environment:

python3 -m venv .env
source .env/bin/activate

Then, install maturin which is needed to build the project:

pip install maturin

Next, build the rust package and install it in your virtual environment:

maturin develop

Finally, run a file in the examples folder:

python3 examples/point.py

Benchmarks

This is to be executed in the virtual environment above.

First, install py_ecc which is used as a comparison:

pip install py_ecc

Then, run the benchmarks with this command:

python3 -m examples.benches.bench

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

py_arkworks_bls12381-0.3.8.tar.gz (13.4 kB view hashes)

Uploaded Source

Built Distributions

py_arkworks_bls12381-0.3.8-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (549.6 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

py_arkworks_bls12381-0.3.8-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl (647.4 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ s390x

py_arkworks_bls12381-0.3.8-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (618.4 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ppc64le

py_arkworks_bls12381-0.3.8-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (691.5 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686

py_arkworks_bls12381-0.3.8-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (794.0 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARMv7l

py_arkworks_bls12381-0.3.8-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl (647.4 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ s390x

py_arkworks_bls12381-0.3.8-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (618.7 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ppc64le

py_arkworks_bls12381-0.3.8-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (794.0 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARMv7l

py_arkworks_bls12381-0.3.8-cp312-none-win_amd64.whl (376.1 kB view hashes)

Uploaded CPython 3.12 Windows x86-64

py_arkworks_bls12381-0.3.8-cp312-none-win32.whl (423.2 kB view hashes)

Uploaded CPython 3.12 Windows x86

py_arkworks_bls12381-0.3.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (549.7 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

py_arkworks_bls12381-0.3.8-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl (641.4 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ s390x

py_arkworks_bls12381-0.3.8-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (619.6 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ppc64le

py_arkworks_bls12381-0.3.8-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl (688.6 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ i686

py_arkworks_bls12381-0.3.8-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (794.5 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARMv7l

py_arkworks_bls12381-0.3.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (555.5 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARM64

py_arkworks_bls12381-0.3.8-cp312-cp312-macosx_11_0_arm64.whl (474.0 kB view hashes)

Uploaded CPython 3.12 macOS 11.0+ ARM64

py_arkworks_bls12381-0.3.8-cp312-cp312-macosx_10_12_x86_64.whl (498.6 kB view hashes)

Uploaded CPython 3.12 macOS 10.12+ x86-64

py_arkworks_bls12381-0.3.8-cp311-none-win_amd64.whl (373.8 kB view hashes)

Uploaded CPython 3.11 Windows x86-64

py_arkworks_bls12381-0.3.8-cp311-none-win32.whl (421.6 kB view hashes)

Uploaded CPython 3.11 Windows x86

py_arkworks_bls12381-0.3.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (547.6 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

py_arkworks_bls12381-0.3.8-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl (648.3 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ s390x

py_arkworks_bls12381-0.3.8-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (619.5 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ppc64le

py_arkworks_bls12381-0.3.8-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (690.6 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ i686

py_arkworks_bls12381-0.3.8-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (793.9 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARMv7l

py_arkworks_bls12381-0.3.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (556.5 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARM64

py_arkworks_bls12381-0.3.8-cp311-cp311-macosx_11_0_arm64.whl (472.5 kB view hashes)

Uploaded CPython 3.11 macOS 11.0+ ARM64

py_arkworks_bls12381-0.3.8-cp311-cp311-macosx_10_12_x86_64.whl (499.7 kB view hashes)

Uploaded CPython 3.11 macOS 10.12+ x86-64

py_arkworks_bls12381-0.3.8-cp310-none-win_amd64.whl (375.4 kB view hashes)

Uploaded CPython 3.10 Windows x86-64

py_arkworks_bls12381-0.3.8-cp310-none-win32.whl (420.6 kB view hashes)

Uploaded CPython 3.10 Windows x86

py_arkworks_bls12381-0.3.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (549.9 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

py_arkworks_bls12381-0.3.8-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl (649.3 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ s390x

py_arkworks_bls12381-0.3.8-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (617.9 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ppc64le

py_arkworks_bls12381-0.3.8-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl (690.4 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ i686

py_arkworks_bls12381-0.3.8-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (794.2 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARMv7l

py_arkworks_bls12381-0.3.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (552.4 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARM64

py_arkworks_bls12381-0.3.8-cp310-cp310-macosx_11_0_arm64.whl (469.5 kB view hashes)

Uploaded CPython 3.10 macOS 11.0+ ARM64

py_arkworks_bls12381-0.3.8-cp310-cp310-macosx_10_12_x86_64.whl (499.0 kB view hashes)

Uploaded CPython 3.10 macOS 10.12+ x86-64

py_arkworks_bls12381-0.3.8-cp39-none-win_amd64.whl (376.1 kB view hashes)

Uploaded CPython 3.9 Windows x86-64

py_arkworks_bls12381-0.3.8-cp39-none-win32.whl (421.3 kB view hashes)

Uploaded CPython 3.9 Windows x86

py_arkworks_bls12381-0.3.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (550.3 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

py_arkworks_bls12381-0.3.8-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl (649.3 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ s390x

py_arkworks_bls12381-0.3.8-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (618.7 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ppc64le

py_arkworks_bls12381-0.3.8-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl (691.1 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ i686

py_arkworks_bls12381-0.3.8-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (795.7 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARMv7l

py_arkworks_bls12381-0.3.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (552.4 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARM64

py_arkworks_bls12381-0.3.8-cp39-cp39-macosx_11_0_arm64.whl (471.1 kB view hashes)

Uploaded CPython 3.9 macOS 11.0+ ARM64

py_arkworks_bls12381-0.3.8-cp39-cp39-macosx_10_12_x86_64.whl (499.1 kB view hashes)

Uploaded CPython 3.9 macOS 10.12+ x86-64

py_arkworks_bls12381-0.3.8-cp38-none-win_amd64.whl (376.2 kB view hashes)

Uploaded CPython 3.8 Windows x86-64

py_arkworks_bls12381-0.3.8-cp38-none-win32.whl (421.4 kB view hashes)

Uploaded CPython 3.8 Windows x86

py_arkworks_bls12381-0.3.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (550.3 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

py_arkworks_bls12381-0.3.8-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl (649.5 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ s390x

py_arkworks_bls12381-0.3.8-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (617.6 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ppc64le

py_arkworks_bls12381-0.3.8-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl (691.6 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ i686

py_arkworks_bls12381-0.3.8-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (795.1 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ARMv7l

py_arkworks_bls12381-0.3.8-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (552.4 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ARM64

py_arkworks_bls12381-0.3.8-cp38-cp38-macosx_11_0_arm64.whl (471.3 kB view hashes)

Uploaded CPython 3.8 macOS 11.0+ ARM64

py_arkworks_bls12381-0.3.8-cp38-cp38-macosx_10_12_x86_64.whl (499.5 kB view hashes)

Uploaded CPython 3.8 macOS 10.12+ x86-64

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page