Skip to main content

wrapped_audience/
wrapped_audience.rs

1use this_me::kernel::{
2    generate_p256_key_pair, unwrap_secret_v1, wrap_secret_v1, WrappedSecretCleartext,
3    WrappedSecretOutput,
4};
5
6fn run() -> Result<(), Box<dyn std::error::Error>> {
7    let recipient = generate_p256_key_pair()?;
8    let outsider = generate_p256_key_pair()?;
9
10    let envelope = wrap_secret_v1(
11        "shared-audience-secret",
12        &recipient.public_key,
13        "apps.demo.keys.audience",
14        "identity-key",
15        Some(&recipient.public_key),
16        None,
17    )?;
18
19    let opened = unwrap_secret_v1(&envelope, &recipient.private_key, WrappedSecretOutput::Utf8)?;
20    assert_eq!(
21        opened,
22        WrappedSecretCleartext::Utf8("shared-audience-secret".to_string())
23    );
24
25    assert!(unwrap_secret_v1(&envelope, &outsider.private_key, WrappedSecretOutput::Utf8).is_err());
26
27    println!("wrapped audience key opens only for the recipient");
28    Ok(())
29}
30
31fn main() -> Result<(), Box<dyn std::error::Error>> {
32    run()
33}
34
35#[test]
36fn example_runs() {
37    run().unwrap();
38}