Skip to content

Commit

Permalink
add document of BLS api
Browse files Browse the repository at this point in the history
  • Loading branch information
ChihChengLiang committed Mar 14, 2019
1 parent cfc760b commit a127534
Showing 1 changed file with 49 additions and 0 deletions.
49 changes: 49 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,55 @@ Elliptic curve crypto in python including secp256k1 and alt_bn128
pip install py_ecc
```

## BLS Signatures

```python
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

```python
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

```python
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](https://github.com/ethereum/ethereum-dev-tactical-manual) for information on how we do:
Expand Down

0 comments on commit a127534

Please sign in to comment.