Modular elliptic curve library implementation in Python for experimentations
Project description
py-keum
This is a work in progress
Keum is a modular implementation of cryptographic components which can be used as a toolbox to bootstrap projects and experimentations. The library aims to be the building block of higher level cryptographic protocols like Plonk, Groth16, folding schemes, recursion layer, etc.
It is not supposed to be used in production! It is inefficient and not audited (and will never be).
For instance, keum includes (or will include):
- Finite field implementation
- Elliptic curve operations in different forms (Edwards, Montgomery, Weierstrass) and different coordinates (affine, jacobian, projective)
- Arithmetisation oriented hash functions (Poseidon, Griffin, Anemoi, Rescue)
- Polynomial operations
- Polynomial commitments
The generic primitives are instantiated with standard parameters. For instance, the following elliptic curves are currently supported:
API
Finite fields
For a more complete documentation, have a look at ff.py.
from keum import PrimeFiniteField
# Instantiate a finite field is easy as creating a subclass of PrimeFiniteField and define the class attribute ORDER to the actual order of the prime finite field
class F13(PrimeFiniteField):
ORDER = 13
# generate random values
a = F13.random()
b = F13.random()
# add two field element
a + b
Elliptic curves
For a more complete documentation, have a look at ec.py.
The following curves are currently supported:
Add a new curve
New elliptic curves can be instantiated easily. See the files given above for
the structure to use. When a new curve is added, it must be exposed in
__init__.py
, and added in the test environment in
test_ec.py
. The CI will take care of running the tests for
the newly added curve.
from keum import pallas
# generate random values
p1 = pallas.AffineWeierstrass.random()
p2 = pallas.AffineWeierstrass.random()
# add two points
p1 + p2
How to contribute
Python 3.11 is required. Use pyenv to install it.
Install the dependencies using
poetry install
Run the tests with
poetry run pytest tests/
Format with
poetry run black keum/*.py tests/*.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.