use purecrypto::der;
use purecrypto::rsa::BoxedRsaPublicKey;
use std::fs;
fn main() {
let args: Vec<String> = std::env::args().collect();
let [_, pub_path, msg_path, sig_path] = args.as_slice() else {
eprintln!("usage: pss_interop <pub.pem (PKCS#1)> <msg-file> <sig-file>");
std::process::exit(2);
};
let pem = fs::read_to_string(pub_path).expect("read pub");
let msg = fs::read(msg_path).expect("read msg");
let sig = fs::read(sig_path).expect("read sig");
let der = der::pem_decode(&pem, "RSA PUBLIC KEY").expect("pem");
let pk = BoxedRsaPublicKey::from_pkcs1_der(&der).expect("parse pubkey");
match pk.verify_pss::<purecrypto::hash::Sha256>(&msg, &sig) {
Ok(()) => println!("OK: OpenSSL PSS signature verified by purecrypto"),
Err(e) => {
println!("FAIL: {e}");
std::process::exit(1);
}
}
}