# bls48581 BLS signature implementation using the BLS48-581 pairing-friendly elliptic curve. This crate provides cryptographic primitives for BLS (Boneh-Lynn-Shacham) signatures on the BLS48-581 curve, including: - BLS signature generation and verification - BLS signature aggregation - Key generation and management - KZG (Kate-Zaverucha-Goldberg) polynomial commitments - KZG inclusion proofs (single and multiproofs) ## Features - **BLS Signatures**: Create and verify BLS signatures with support for aggregation - **KZG Commitments**: Polynomial commitment scheme for vector commitments - **Inclusion Proofs**: Generate and verify proofs that elements are included in committed data - **Multiproofs**: Efficient batched proofs for multiple indices ## Usage Add this to your `Cargo.toml`: ```toml [dependencies] bls48581 = "2.1.0" ``` ### Example: BLS Signatures ```rust use bls48581::{bls_keygen, bls_sign, bls_verify}; // Initialize the library bls48581::init(); // Generate a key pair let keypair = bls_keygen(); // Sign a message let message = b"Hello, World!"; let signature = bls_sign(&keypair.secret_key, message).unwrap(); // Verify the signature let is_valid = bls_verify(&keypair.public_key, message, &signature).unwrap(); assert!(is_valid); ``` ### Example: KZG Commitments ```rust use bls48581::{commit, prove, verify_raw}; bls48581::init(); // Create a polynomial (as bytes) let data = vec![1u8; 4096]; // 64 coefficients * 64 bytes each let poly_size = 64; // Generate commitment let commitment = commit(&data, poly_size).unwrap(); // Generate proof for index 5 let index = 5; let proof = prove(&data, index, poly_size).unwrap(); // Verify proof let is_valid = verify_raw(&data, &commitment, index as u64, &proof, poly_size).unwrap(); assert!(is_valid); ``` ## Security Notice This library implements cryptographic primitives and should be used with care. It is based on the MIRACL Core library and implements the BLS48-581 curve which provides approximately 256-bit security. ## License Licensed under the Apache License, Version 2.0. See [LICENSE](LICENSE) for details. This crate is derived from [MIRACL Core](https://github.com/miracl/core), which is also licensed under Apache 2.0. ## Attribution Portions of this software are based on: - MIRACL Core (https://github.com/miracl/core) - Apache Milagro Cryptographic Library (AMCL) ## References - [BLS Signatures](https://en.wikipedia.org/wiki/BLS_digital_signature) - [KZG Polynomial Commitments](https://dankradfeist.de/ethereum/2020/06/16/kate-polynomial-commitments.html) - [MIRACL Core](https://github.com/miracl/core)