Encryption & Signing

Exports can be encrypted with age (X25519 asymmetric or scrypt symmetric) and signed with Ed25519 for integrity verification.

Encryption

ModeAlgorithmUse Case
NonePlaintext export
Passphrasescrypt + ageShared password encryption
RecipientX25519 + agePublic-key encryption for specific recipient

Digital Signing

ReportSigner uses ed25519-dalek for EdDSA signatures.

FieldDescription
algorithmAlways "Ed25519"
signature_hexHex-encoded Ed25519 signature
signer_idIdentifier of the signing key
signed_atUTC timestamp of signing

Usage

Rust
// Encrypt for a specific recipient
let encrypted = encrypt(
    &report_bytes,
    &EncryptionConfig::Recipient {
        public_key: "age1qy...".into(),
    },
)?;

// Sign the encrypted payload
let signer = ReportSigner::from_secret_key(secret_key)?;
let signature = signer.sign(&encrypted);
assert!(signer.verify(&encrypted, &signature));

Questions?

Reach out for help with integration, deployment, or custom domain codecs.