Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/celo-org/celo-bls-snark-rs
Implements SNARK-friendly BLS signatures
https://github.com/celo-org/celo-bls-snark-rs
Last synced: 1 day ago
JSON representation
Implements SNARK-friendly BLS signatures
- Host: GitHub
- URL: https://github.com/celo-org/celo-bls-snark-rs
- Owner: celo-org
- License: apache-2.0
- Created: 2019-05-28T10:32:05.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2024-02-02T14:32:47.000Z (9 months ago)
- Last Synced: 2024-08-01T22:53:43.248Z (3 months ago)
- Language: Rust
- Homepage: https://celo.org
- Size: 3.63 MB
- Stars: 83
- Watchers: 39
- Forks: 24
- Open Issues: 23
-
Metadata Files:
- Readme: README.md
- License: LICENSE-APACHE
- Authors: AUTHORS
Awesome Lists containing this project
README
# celo-bls-snark-rs
Implements SNARK-friendly BLS signatures over BLS12-377 and BW6-761.
## Using the code
### Rust Crates
All Rust crates live under the `crates/` directory. You can import them in your code via git paths, until they get published on `crates.io`.
## Quick start
The following commands assume your current directory is the root of this repository.
The `simple_signature` program shows how to generate keys, sign and aggregate signatures.
To run it with debug logging enabled, execute:
`RUST_LOG=debug cargo run --example simple_signature -- -m hello`
### Building
To build the project, you should use a recent stable Rust version. We test with 1.36.
```bash
# Build
cargo build (--release)
# Test.
# Consider running tests in release mode, as some of
# the cryptographic operations are slow in debug mode.
cargo test (--release)
```## Construction
We work over the BLS12-377 curve from [BCGMMW18].
Secret keys are elements of the scalar field *Fr*.
We would like to minimize the computation required for signing, since we would also like to achieve hardware wallet compatibility. Therefore, public keys are in *G2* and signatures are in *G1*.
For most signatures - to hash a message to *G1*, we use the try-and-increment method coupled with Blake2Xs.
For signatures that we would like to verify in SNARKs - to hash a message to *G1*, we use the try-and-increment method coupled with a composite hash. The composite hash is composed of a Bowe-Hopwood hash over $E_{Ed/CP}$ from [BCGMMW18] and Blake2s.
We perform cofactor muliplication in *G1* directly.
## License
celo-bls-snark-rs is licensed under either of the following licenses, at your discretion.
Apache License Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
Unless you explicitly state otherwise, any contribution submitted for inclusion in celo-bls-snark-rs by you shall be dual licensed as above (as defined in the Apache v2 License), without any additional terms or conditions.## References
[BDN18] Boneh, D., Drijvers, M., & Neven, G. (2018, December). [Compact multi-signatures for smaller blockchains](https://eprint.iacr.org/2018/483.pdf). In International Conference on the Theory and Application of Cryptology and Information Security (pp. 435-464). Springer, Cham.
[BLS01] Boneh, D., Lynn, B., & Shacham, H. (2001, December). [Short signatures from the Weil pairing](https://link.springer.com/content/pdf/10.1007/3-540-45682-1_30.pdf). In International Conference on the Theory and Application of Cryptology and Information Security (pp. 514-532). Springer, Berlin, Heidelberg.
[BCGMMW18] Bowe, S., Chiesa, A., Green, M., Miers, I., Mishra, P., & Wu, H. (2018). [Zexe: Enabling decentralized private computation](https://eprint.iacr.org/2018/962.pdf). IACR ePrint, 962.
[pairings] Costello, C. . [Pairings for beginners](http://www.craigcostello.com.au/pairings/PairingsForBeginners.pdf).
[BP17] Budroni, A., & Pintore, F. (2017). [Efficient hash maps to G2 on BLS curves](https://eprint.iacr.org/2017/419.pdf). Cryptology ePrint Archive, Report 2017/419.
[RY07] Ristenpart, T., & Yilek, S. (2007, May). The power of proofs-of-possession: Securing multiparty signatures against rogue-key attacks. In Annual International Conference on the Theory and Applications of Cryptographic Techniques (pp. 228-245). Springer, Berlin, Heidelberg.