Skip to content
This repository has been archived by the owner on Nov 18, 2021. It is now read-only.

BLS12-381 curve and aggregation libraries #13

Closed
djrtwo opened this issue Oct 20, 2018 · 9 comments
Closed

BLS12-381 curve and aggregation libraries #13

djrtwo opened this issue Oct 20, 2018 · 9 comments

Comments

@djrtwo
Copy link
Contributor

djrtwo commented Oct 20, 2018

I'm gathering info about the state of BLS12-381 implementations and associated signature/aggregation libraries. Please let me know any corrections or missing data.

BLS12-381 Curve implementations

Repo Language License Audit Notes
ZCash pairing library in Rust Rust MIT or Apache 2.0 (option) Kudelsk Audit to be published "soon"
Chia BLS12-381 in cpp cpp Apache 2.0 "when done"
Chia BLS12-381 in python Python Apache 2.0 "when done"
Chia python bindings python Apache 2.0 "when done" python bindings for cpp implementation
Nim wrapper for Chia cpp Nim MIT None wraps Chia cpp so those components are Apache 2.0
Herumi MCL cpp modified BSD not sure
Milagro Crypto C, cpp, Go, Java, JS, Python, Rust, Swift, WASM Apache 2.0 not sure potential issues or unknowns with licensing
py_ecc Python MIT None

BLS signature libraries

Repo Language License Audit Notes
Herumi BLS cpp, go modified BSD uses Herumi MCL

NOTE: About to take off on a flight. I think the "BLS12-381 Curve implementations" is done to the best of my knowledge, but I haven't had a chance to add all of the "BLS signature libraries". Coming soon.

@ralexstokes
Copy link
Member

https://github.com/dis2/bls12 -- Go impl that wraps the C RELIC lib.

https://github.com/dis2/blsig/blob/master/blsig.go -- example applications for signatures.

There is no license here and there is an open issue waiting for one...

@Mikerah
Copy link

Mikerah commented Nov 16, 2018

Can you elaborate more on what the potential licensing issues for using milagro-crypto are? Most of the other projects are licensed under the Apache 2.0 license as well.

@djrtwo
Copy link
Contributor Author

djrtwo commented Nov 16, 2018

I think someone from nimbus was concerned that a portion of another library had been copied in without porting the license.

Maybe @mratsim or @arnetheduck can speak to that

@mratsim
Copy link

mratsim commented Nov 21, 2018

You can add the Nim wrapper for Milagro which is maintained by us, Relic (only for the curve, not for the aggregation) and Dfinity.

Relic BLS12-381 test vectors were used by Zcash and Relic the backend of Chia Network's and Dfinity's libraries.

Regarding licensing, any library that rely on GMP will be considered derivative work of LGPLv3 or GPLv2 library.

Combining GPLv2 + Apache v2 makes a library unredistributable in binary form.

Chia has optional linking on GMP, Herumi's MCL has required linking on GMP, Relic seems to have optional GMP dependency.

I've also noted the curve creators implementations in the Athenaeum

@Mikerah
Copy link

Mikerah commented Nov 21, 2018

I brought up the licensing issue in the milagro-crypto-js repository and the person who replied said that it doesn't make use of any GMP-licensed code. Here's the issue: https://github.com/milagro-crypto/milagro-crypto-js/issues/46

@mratsim
Copy link

mratsim commented Nov 22, 2018

Libraries using MCL will have this licensing issue. I didn't find any potential issue with Milagro, it's a project sponsored by the Apache Foundation.

@vbuterin
Copy link

Feel free to add https://github.com/ethereum/py_ecc, now with BLS-12-381 support.

@rauljordan
Copy link

MCL can build without GMP btw @mratsim - see more here: herumi/bls#19

@paulmillr
Copy link

I have very simple and auditable JS / typescript implementation here: https://github.com/paulmillr/noble-bls12-381

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants