Within the BridgeHub parachain runtime, our ethereum-beacon-client pallet depends on our fork of the milagro_bls crate for verifying BLS signatures created by the Sync Committee of the Ethereum Beacon Chain.
Specifically:
Our fork (diff) includes the following changes:
Encode and Decode traits on the PublicKey type, so that we can persist them in our runtime storageBridgeHub parachain runtime
Our Fork: https://github.com/Snowfork/milagro_bls (diff)
Upstream: https://github.com/sigp/milagro_bls
Actual low-level BLS primitives: https://github.com/sigp/incubator-milagro-crypto-rust/tree/057d238936c0cbbe3a59dfae6f2405db1090f474
This crate does not appear to be audited. According to the documentation:
WARNING: This library is a work in progress and has not been audited. Do NOT consider the cryptography safe!
Such a disclaimer is relatively common for bleeding-edge cryptographic libraries. Nevertheless, as it stands, there is no audit.
Lighthouse, the reference Ethereum client (In Ethereum terminology a client is actually responsible for on-chain consensus) has an optional dependency on milagro.
Its BLS module seems to be a thin wrapper that supports either Milagro or Supranational as the crypto backend. For example in
https://github.com/sigp/lighthouse/blob/441fc1691b69f9edc4bbdc6665f3efab16265c9b/crypto/bls/src/lib.rs#L142
However since only Milagro is marked as optional, we assume that Supranational is the default. Looking at the documentation for the latter, we see that it requires C and assembly, so it is not WASM-compatible.