No project description provided
Project description
py_arkworks_bls12381
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()
# Identity
id = GT.identity()
# 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_bytes()
deserialised_scalar = Scalar.from_bytes(compressed_bytes)
assert scalar == deserialised_scalar
Development
You will need maturin to build the project.
pip install maturin
- First activate the virtual environment
source .env/bin/activate
- Next build the rust package and install it in your virtual environment
maturin develop
- Now run a file in the examples folder
python3 examples/point.py
Project details
Release history Release notifications | RSS feed
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.1.4.tar.gz
(11.2 kB
view hashes)
Built Distribution
Close
Hashes for py_arkworks_bls12381-0.1.4.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7d7ca84abad401e4781705d5dfb09f37882c7b45895fe294a539bdd0f3da7d98 |
|
MD5 | b5f1c78b92a1fcec3b298856e9dd8d54 |
|
BLAKE2b-256 | 0d18362b556024b4d3ffe975a4d23251a0e1b05b3c658f2b66d2364d27b23a36 |
Close
Hashes for py_arkworks_bls12381-0.1.4-cp311-cp311-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ffa50fad99e691dc39933eaec9c0f4b430b39740a0347512f79542c9aafc79f0 |
|
MD5 | 8459032ec8f00f864fccee4b1854791f |
|
BLAKE2b-256 | ed0682c56430c400203d680b48473bf28edca7aee56dc24102a9452d5246e6a7 |