rgp 0.5.2

Enabling E2EE for a range of applications.
Documentation
/*
Copyright (c) 2026 Ordinary Labs, LLC

SPDX-License-Identifier: AGPL-3.0-only
*/

use rgp::{
    Components, Decrypt, Encrypt, decrypt, encrypt, extract_components_mut, generate_fingerprint,
};

pub fn main() -> Result<(), &'static str> {
    let (fingerprint, verifier) = generate_fingerprint();

    // use an actually secret key
    let session_key = [0u8; 32];

    // 5mb
    let content = vec![0u8; 5_000_000];

    // encrypt message with a session key
    let (mut encrypted_content, _) = encrypt(
        fingerprint,
        content.clone(),
        Encrypt::Session(session_key, false),
    )?;

    if let Components::Session(_) = extract_components_mut(0, &mut encrypted_content) {
        // decrypt message with session key
        let (decrypted_content, _) = decrypt(
            Some(&verifier),
            &encrypted_content,
            Decrypt::Session(session_key, None),
        )?;

        assert_eq!(decrypted_content, content);
    };

    Ok(())
}