lib

Core libraries for Radroots
git clone https://radroots.dev/git/lib.git
Log | Files | Refs | README

explicit_memory_provider.rs (1673B)


      1 use futures_executor::block_on;
      2 use radroots_secrets::EncryptedEnvelope;
      3 use radroots_secrets::context::{
      4     EnvelopeContext, EnvelopePurpose, EnvelopeSubject, PayloadSchemaId,
      5 };
      6 use radroots_secrets::envelope::{Nonce, SealMaterial, SealRequest};
      7 use radroots_secrets::id::{BackendKind, KeyVersion};
      8 use radroots_secrets::memory::MemoryProvider;
      9 use radroots_secrets::wrapping::SecretMaterial;
     10 use radroots_secrets::{SecretId, SecretRef};
     11 
     12 fn main() -> Result<(), Box<dyn std::error::Error>> {
     13     let reference = SecretRef::new(
     14         SecretId::parse("example-profile-key")?,
     15         BackendKind::Memory,
     16         KeyVersion::new(1)?,
     17     );
     18     let provider = MemoryProvider::new();
     19     provider.provision(&reference, SecretMaterial::from_slice(&[0x41; 32])?)?;
     20 
     21     let plaintext = SecretMaterial::from_slice(b"private profile value")?;
     22     let data_key = SecretMaterial::from_slice(&[0x41; 32])?;
     23     let context = EnvelopeContext::new(
     24         EnvelopePurpose::parse("radroots.private_profile")?,
     25         EnvelopeSubject::parse("profile", "example-profile")?,
     26         PayloadSchemaId::parse("radroots.private_profile.v1")?,
     27     );
     28     let request = SealRequest::new(
     29         reference,
     30         context.clone(),
     31         &plaintext,
     32         SealMaterial::new(data_key, Nonce::new([0x24; 24])),
     33     );
     34     let encoded = block_on(EncryptedEnvelope::seal(&provider, request))?.encode()?;
     35     let decoded = EncryptedEnvelope::decode(&encoded)?;
     36     let opened = block_on(decoded.open(&provider, &context))?;
     37 
     38     opened.expose_secret(|bytes| assert_eq!(bytes, b"private profile value"));
     39     println!("opened one explicitly provisioned in-memory envelope");
     40     Ok(())
     41 }