use std::io::{self, Read, Write};
fn main() -> anyhow::Result<()> {
let args: Vec<String> = std::env::args().collect();
if args.len() != 3 {
eprintln!("usage: contract-encrypt <input-file> <output-file>");
eprintln!(" (passphrase is read from stdin)");
std::process::exit(2);
}
let input_path = &args[1];
let output_path = &args[2];
let mut passphrase = String::new();
io::stdin().read_to_string(&mut passphrase)?;
let passphrase = passphrase.trim_end_matches(['\n', '\r']).to_string();
if passphrase.is_empty() {
anyhow::bail!("passphrase is empty");
}
let plaintext = std::fs::read(input_path)?;
let encryptor = age::Encryptor::with_user_passphrase(
secrecy::SecretString::new(passphrase),
);
let output_file = std::fs::File::create(output_path)?;
let mut output = encryptor.wrap_output(output_file)?;
output.write_all(&plaintext)?;
output.finish()?;
eprintln!("Encrypted {} -> {}", input_path, output_path);
Ok(())
}