Elliptic curve crypto in python including secp256k1 and alt_bn128
Project description
py_ecc
Elliptic curve crypto in python including secp256k1 and alt_bn128
Quickstart
pip install py_ecc
BLS Signatures
from py_ecc import bls
domain = 43
private_key = 5566
public_key = bls.privtopub(private_key)
# Hash your message to 32 bytes
message_hash = b'\xab' * 32
# Signing
signature = bls.sign(message_hash, private_key, domain)
# Verifying
assert bls.verify(message_hash, public_key, signature, domain)
Think of a domain
as a version. Signing and verifying would not work on different domains. Setting a new domain in an upgraded system prevents it from being affected by the old messages and signatures.
Aggregating Signatures and Public Keys
private_keys = [3, 14, 159]
public_keys = [bls.privtopub(key) for key in private_keys]
signatures = [bls.sign(message_hash, key, domain) for key in private_keys]
# Aggregating
agg_sig = bls.aggregate_signatures(signatures)
agg_pub = bls.aggregate_pubkeys(public_keys)
# Verifying
assert bls.verify(message_hash, agg_pub, agg_sig, domain)
Multiple Aggregation
message_hash_1, message_hash_2 = b'\xaa' * 32, b'\xbb' * 32
msg_hashes = [message_hash_1, message_hash_2]
agg_pubs = [agg_pub_1, agg_pub_2]
agg_agg_sig = bls.aggregate_signatures([agg_sig_1, agg_sig_2])
assert bls.verify_multiple(agg_pubs, msg_hashes, agg_agg_sig, domain)
Developer Setup
If you would like to hack on py_ecc, please check out the Ethereum Development Tactical Manual for information on how we do:
- Testing
- Pull Requests
- Code Style
- Documentation
Got bug?
Feel free to create issue under https://github.com/ethereum/py_ecc/issues
Copyright and Licensing
Project is licensed under the MIT license.
Release setup
To release a new version:
make release bump=$$VERSION_PART_TO_BUMP$$
How to bumpversion
The version format for this repo is {major}.{minor}.{patch}
for stable, and
{major}.{minor}.{patch}-{stage}.{devnum}
for unstable (stage
can be alpha or beta).
To issue the next version in line, specify which part to bump,
like make release bump=minor
or make release bump=devnum
.
If you are in a beta version, make release bump=stage
will switch to a stable.
To issue an unstable version when the current version is stable, specify the
new version explicitly, like make release bump="--new-version 4.0.0-alpha.1 devnum"
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
Built Distribution
File details
Details for the file py_ecc-1.7.0.tar.gz
.
File metadata
- Download URL: py_ecc-1.7.0.tar.gz
- Upload date:
- Size: 20.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.21.0 setuptools/40.6.2 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 50c1868b463f72ca4055d0778fee49025798d8dfdd4822bea339d275c43b16c8 |
|
MD5 | b5502ebe73fbe9e10fa00dcf56274b41 |
|
BLAKE2b-256 | 1d4de6383e0062f88a33523dfdee69de14d4cf35f1d44b3537b5e6b9f9226534 |
File details
Details for the file py_ecc-1.7.0-py3-none-any.whl
.
File metadata
- Download URL: py_ecc-1.7.0-py3-none-any.whl
- Upload date:
- Size: 33.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.21.0 setuptools/40.6.2 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 69ccd28de584b168c0a2721ca1d6eb46547b51d5070d0c313dc702f0e5d2f8d0 |
|
MD5 | fbdb350fc1b608676a42009e9ccfa769 |
|
BLAKE2b-256 | da965169a0fc3c5863273953302da4469e2eca50a1d10f95a87aeaf0f99f430d |