1 unstable release
0.1.0 | Nov 29, 2023 |
---|
#1755 in Cryptography
48KB
735 lines
hohibe — Hierarchical Identity Based Encryption
This crate provides an implementation of hierarchical identity based encryption
for Rust. For more information, please see the crate documentation (run cargo doc
to generate it).
⚠️ Warning: Cryptographic Hazmat ☣️
This crate is made for playing around with HIBE and for prototyping of applications and protocols using HIBE. It has not been audited, it is not battle tested, and nobody claims it to be secure.
Use it at your own risk and if you know what you are doing!
Example Code
use hohibe::kem::HybridKem;
const MAX_DEPTH: usize = 3;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut rng = rand::thread_rng();
let kem = HybridKem::new(MAX_DEPTH);
let (public_key, master_secret) = kem.setup(&mut rng)?;
// Encrypt for hibe.example.com
let ciphertext = kem.encrypt(&mut rng, &public_key, &["com", "example", "hibe"], b"GET /")?;
// Assume that the owner of example.com is given the secret key for their domain ...
let example_com = kem.generate_key(
&mut rng,
&public_key,
&master_secret,
&["com", "example"],
)?;
// ... and they can use that to derive the key for the subdomain
let secret_key = kem.derive_key(
&mut rng,
&public_key,
&example_com,
&["com", "example", "hibe"],
)?;
// Now we can decrypt
let plaintext = kem.decrypt(&public_key, &secret_key, &ciphertext)?;
assert_eq!(plaintext, b"GET /");
Ok(())
}
License
hohibe is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
hohibe is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License along with Foobar. If not, see https://www.gnu.org/licenses/.
Dependencies
~5MB
~88K SLoC