From 1737847637522132c1c35e4970d3f5e0f6338b4e Mon Sep 17 00:00:00 2001 From: Daniel Schadt Date: Tue, 28 Nov 2023 17:37:12 +0100 Subject: add an example to the documentation --- README.md | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) (limited to 'README.md') diff --git a/README.md b/README.md index d0a482a..6d0d492 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,45 @@ it to be secure. Use it at **your own risk** and if you know what you are doing! +## Example Code + +```rust +use hohibe::kem::HybridKem; + +const MAX_DEPTH: usize = 3; + +fn main() -> Result<(), Box> { + 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. -- cgit v1.2.3