use openssl::{pkey::PKey, sign::Verifier};
use crate::raw_signature::{
openssl::OpenSslMutex, RawSignatureValidationError, RawSignatureValidator,
};
pub struct Ed25519Validator {}
impl RawSignatureValidator for Ed25519Validator {
fn validate(
&self,
sig: &[u8],
data: &[u8],
public_key: &[u8],
) -> Result<(), RawSignatureValidationError> {
let _openssl = OpenSslMutex::acquire()?;
let public_key = PKey::public_key_from_der(public_key)?;
if Verifier::new_without_digest(&public_key)?.verify_oneshot(sig, data)? {
Ok(())
} else {
Err(RawSignatureValidationError::SignatureMismatch)
}
}
}