fn verify()

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)
    }