use std::io::Write;
use std::process::{Command, Stdio};
pub(crate) fn run_openssl(args: &[&str], stdin: &[u8]) -> Option<Vec<u8>> {
let mut child = Command::new("openssl")
.args(args)
.stdin(Stdio::piped())
.stdout(Stdio::piped())
.stderr(Stdio::null())
.spawn()
.ok()?;
child.stdin.as_mut()?.write_all(stdin).ok()?;
let out = child.wait_with_output().ok()?;
if !out.status.success() {
return None;
}
Some(out.stdout)
}
pub(crate) fn run_openssl_enc(
cipher_name: &str,
key_hex: &str,
iv_hex: Option<&str>,
input: &[u8],
) -> Option<Vec<u8>> {
let mut args = vec!["enc", cipher_name, "-nopad", "-nosalt", "-K", key_hex];
if let Some(iv) = iv_hex {
args.extend(["-iv", iv]);
}
args.push("-e");
run_openssl(&args, input)
}