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