use super::signature::{SignatureAlgorithm, SignatureVerification};
use super::signer::{Signer, Verifier};
pub fn assert_sign_produces_valid_signature(
signer: &dyn Signer,
expected_algorithm: SignatureAlgorithm,
) {
let doc_id = crate::Hasher::hash(crate::HashAlgorithm::Sha256, b"test document");
let signature = signer.sign(&doc_id).unwrap();
assert_eq!(signature.algorithm, expected_algorithm);
assert!(!signature.value.is_empty());
}
pub fn assert_sign_verify_roundtrip(signer: &dyn Signer, verifier: &dyn Verifier) {
let doc_id = crate::Hasher::hash(crate::HashAlgorithm::Sha256, b"test document");
let signature = signer.sign(&doc_id).unwrap();
let result = verifier.verify(&doc_id, &signature).unwrap();
assert!(result.is_valid());
}
pub fn assert_verify_wrong_document_fails(signer: &dyn Signer, verifier: &dyn Verifier) {
let doc_id = crate::Hasher::hash(crate::HashAlgorithm::Sha256, b"original document");
let signature = signer.sign(&doc_id).unwrap();
let different_doc_id = crate::Hasher::hash(crate::HashAlgorithm::Sha256, b"different document");
let result = verifier.verify(&different_doc_id, &signature).unwrap();
assert!(!result.is_valid());
}
pub fn assert_cannot_sign_pending_id(signer: &dyn Signer) {
let pending_id = crate::DocumentId::pending();
let result = signer.sign(&pending_id);
assert!(result.is_err());
}
pub fn assert_algorithm_mismatch_rejected(
signer: &dyn Signer,
verifier: &dyn Verifier,
wrong_algorithm: SignatureAlgorithm,
) {
let doc_id = crate::Hasher::hash(crate::HashAlgorithm::Sha256, b"test document");
let mut signature = signer.sign(&doc_id).unwrap();
signature.algorithm = wrong_algorithm;
let result: SignatureVerification = verifier.verify(&doc_id, &signature).unwrap();
assert!(!result.is_valid());
assert!(
result
.error
.as_ref()
.unwrap()
.contains("Algorithm mismatch"),
"Expected 'Algorithm mismatch' error, got: {:?}",
result.error
);
}