cipherstash-client 0.12.5

The official CipherStash SDK
Documentation
use anyhow::Result;
use cipherstash_client::{
    config::{
        console_config::ConsoleConfig, cts_config::CtsConfig, zero_kms_config::ZeroKMSConfig,
    },
    zerokms::EncryptPayload,
};
use clap::Parser;

#[derive(Parser, Debug)]
#[command(version)]
struct Args {
    #[arg(long)]
    descriptor: String,

    #[arg(long)]
    message: String,
}

#[tokio::main]
async fn main() -> Result<()> {
    let args = Args::parse();

    let console_config = ConsoleConfig::builder().with_env().build()?;

    let cts_config = CtsConfig::builder().with_env().build()?;

    let zero_kms_config = ZeroKMSConfig::builder()
        .console_config(&console_config)
        .cts_config(&cts_config)
        .with_env()
        .build_with_client_key()?;

    let zero_kms = zero_kms_config.create_client();

    let record = zero_kms
        .encrypt_single(
            EncryptPayload {
                msg: args.message.as_bytes(),
                descriptor: &args.descriptor,
            },
            None,
        )
        .await?;

    println!("ZeroKMS: {}", zero_kms_config.base_url());
    println!("Workspace: {}", zero_kms_config.base_url());
    println!("Message: {}", args.message);
    println!("Descriptor: {}", args.descriptor);
    println!("---");
    println!("Encrypted: {}", hex::encode(record.to_vec()?));

    Ok(())
}