8 releases
0.2.0 | Jul 1, 2024 |
---|---|
0.1.6 | Feb 13, 2024 |
0.1.4 | Oct 4, 2023 |
0.1.3 | Sep 29, 2023 |
#993 in Cryptography
Used in 3 crates
(via delano-keys)
27KB
362 lines
Blastkids 🚀🔑🔑🔑
A BLS12-381 child key derivation library written in Rust. Implements EIP-2333 and EIP-2334.
Fork of rust-bls-derivation using bls12_381_plus
instead of curv-kzen
, plus cleanup and documentation.
Rationale
If you want to use Delegatable Anonymous Credentials the verification key (VK
) becomes as long as the credential entries. Since a VK
is simply several BLS12-381 public keys (PK
s) we can use a derivation algorithm such as EIP-2333 in order to derive the long VK
from a single root PK
given any length.
Installation
cargo install blastkids
API & Docs
See documentation on docs.rs.
See tests in lib.rs
for example usage.
use blastkids::{Manager, Zeroizing, derive};
use blastkids::{G1, G2};
// make a new manager for a G2 public key
let seed = Zeroizing::new([42u8; 32]);
let manager: Manager<G2> = Manager::from_seed(seed);
// With a Manager you can create as many account sas you need
let account_number = 1u32;
let account = manager.account(account_number);
let length = 8u8; // Specify how many Child Public Keys you need (in this case, 8). Can be up to 255.
// Anyone can use an Account Public Key and a `length` to derive an expanded account
let expanded_pk: Vec<G2> = derive(&account.pk, length);
// When you want to use the child account secret keys,
// you call `expand_to` on the account
let expanded = account.expand_to(length);
// This expand public keys are the same as the ones derived above
assert_eq!(expanded.pk, expanded_pk);
Tests
cargo test
Dependencies
- BLS12-381: bls12_381_plus
- Elliptic Curve: RustCrypto/elliptic-curves
- Big Integers: RustCrypto/ctypro-bigint
See also
- Generate seeds using
password
+salt
: seed-keeper-core - Generate Credentials using a
seed
: delanocreds
Prior Work
- EIP-2333
- EIP-2334
- rust-bls-derivation (circa 2023, uses
curv-kzen
library which breaks with rust-nightly and appears somewhat unmaintained)
Contributing
Contributions are welcome! Please open an issue if you have any feature ideas or find any bugs. I also accept pull requests with open arms. Please:
- Fork this repo
- Create a new branch for your changes
- Open a draft pull request so we can follow and collaborate on your changes
- Add tests for your changes
- Keep the diff minimal for each pull request
- Write meaningful commit messages
- Change Draft to Open when you're ready for final review
Dependencies
~3.5MB
~69K SLoC