fn verify()

in src/crypto/tpm.rs [118:143]


    fn verify(&self, data: &[u8], signature: &[u8]) -> Result<bool, CoseError> {
        // Recover the R and S factors from the signature contained in the object
        let (bytes_r, bytes_s) = signature.split_at(self.key_length);

        let signature = Signature {
            scheme: AsymSchemeUnion::ECDSA(self.hash_alg),
            signature: SignatureData::EcdsaSignature {
                r: bytes_r.to_vec(),
                s: bytes_s.to_vec(),
            },
        };

        let data = data.try_into().map_err(|_| {
            CoseError::UnsupportedError("Invalid digest passed to verify".to_string())
        })?;

        let mut context = self.context.borrow_mut();

        match context.verify_signature(self.key_handle, &data, signature) {
            Ok(_) => Ok(true),
            Err(tpm_error::Tss2Error(Tss2ResponseCode::FormatOne(FormatOneResponseCode(
                TSS2_RC_SIGNATURE,
            )))) => Ok(false),
            Err(e) => Err(CoseError::TpmError(e)),
        }
    }