1 unstable release

Uses old Rust 2015

0.0.0 May 10, 2018

MIT/Apache

2KB

bls Crates.io

This is a Rust crate for making BLS (Boneh-Lynn-Shacham) signatures. It currently supports the BLS12-381 (Barreto-Lynn-Scott) (yes, I know) construction.

Documentation

Bring the bls crate into your project just as you normally would.

use bls::Keypair;
use pairing::bls12_381::Bls12;

let keypair = Keypair::<Bls12>::generate(&mut rng);
let message = "Some message";
let sig = keypair.sign(&message.as_bytes());
assert_eq!(keypair.verify(&message.as_bytes(), &sig), true);

Aggregate signatures

use bls::{AggregateSignature, Keypair};
use pairing::bls12_381::Bls12;

let mut inputs = Vec::new();
let mut asig = AggregateSignature::new();

let keypair1 = Keypair::<Bls12>::generate(&mut rng);
let message1 = "Some unique message";
let sig1 = keypair1.sign(&message1.as_bytes());
inputs.push((keypair1.public, message1));
asig.aggregate(&sig1);

let keypair2 = Keypair::<Bls12>::generate(&mut rng);
let message2 = "Some other unique message";
let sig2 = keypair2.sign(&message2.as_bytes());
inputs.push((keypair2.public, message2));
asig.aggregate(&sig2);

assert_eq!(
    asig.verify(&inputs.iter()
        .map(|&(ref pk, ref m)| (pk, m.as_bytes()))
        .collect()),
    true
);

Security Warnings

This library does not make any guarantees about constant-time operations, memory access patterns, or resistance to side-channel attacks.

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

No runtime deps