Skip to main content

Elliptic curve crypto in python including secp256k1 and alt_bn128

Project description

Elliptic curve crypto in python including secp256k1 and alt_bn128

[![GitHub](]( [![Build Status](]( [![PyPI version](](

## 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

## 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

Download files

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

Source Distribution

py_ecc-1.6.0.tar.gz (21.9 kB view hashes)

Uploaded source

Built Distribution

py_ecc-1.6.0-py3-none-any.whl (35.2 kB view hashes)

Uploaded py3

Supported by

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