in src/crypto/openssl_pkey.rs [48:67]
fn verify(&self, digest: &[u8], signature: &[u8]) -> Result<bool, CoseError> {
let key = self.ec_key().map_err(|_| {
CoseError::UnsupportedError("Non-EC keys are not yet supported".to_string())
})?;
let curve_name = key.group().curve_name().ok_or_else(|| {
CoseError::UnsupportedError("Anonymous EC keys are not supported".to_string())
})?;
let (_, _, key_length) = ec_curve_to_parameters(curve_name)?;
// Recover the R and S factors from the signature contained in the object
let (bytes_r, bytes_s) = signature.split_at(key_length);
let r = BigNum::from_slice(bytes_r).map_err(CoseError::SignatureError)?;
let s = BigNum::from_slice(bytes_s).map_err(CoseError::SignatureError)?;
let sig = EcdsaSig::from_private_components(r, s).map_err(CoseError::SignatureError)?;
sig.verify(digest, &key).map_err(CoseError::SignatureError)
}