use crate::cipher::provider::REGISTRY;
use crate::key::KeyState;
use crate::{key::KeyManager, Algorithm};
#[test]
fn test_sm2_key_generation() {
let key_manager = KeyManager::new().unwrap();
let private_key_id = key_manager.generate_key(Algorithm::SM2).unwrap();
let key = key_manager.get_key(&private_key_id).unwrap();
assert_eq!(key.algorithm(), Algorithm::SM2);
assert_eq!(key.state(), KeyState::Active);
}
#[test]
fn test_sm2_signature_and_verification() {
let key_manager = KeyManager::new().unwrap();
let private_key_id = key_manager.generate_key(Algorithm::SM2).unwrap();
let key = key_manager.get_key(&private_key_id).unwrap();
let message = b"Hello, SM2 signature!";
let signer = REGISTRY.get_signer(Algorithm::SM2).unwrap();
let signature = signer.sign(&key, message).unwrap();
assert_eq!(signature.len(), 64);
let is_valid = signer.verify(&key, message, &signature).unwrap();
assert!(is_valid);
let modified_message = b"Hello, modified message!";
let is_invalid = signer.verify(&key, modified_message, &signature).unwrap();
assert!(!is_invalid);
}
#[test]
fn test_sm2_signature_with_different_messages() {
let key_manager = KeyManager::new().unwrap();
let private_key_id = key_manager.generate_key(Algorithm::SM2).unwrap();
let key = key_manager.get_key(&private_key_id).unwrap();
let signer = REGISTRY.get_signer(Algorithm::SM2).unwrap();
let messages: Vec<&[u8]> = vec![
b"Short message".as_ref(),
b"This is a longer message for SM2 signature testing".as_ref(),
b"A very long message that contains many characters and should test the robustness of the SM2 signature implementation with various input sizes".as_ref(),
];
for message in messages {
let signature = signer.sign(&key, message).unwrap();
assert_eq!(signature.len(), 64);
let is_valid = signer.verify(&key, message, &signature).unwrap();
assert!(
is_valid,
"Signature verification failed for message: {:?}",
message
);
}
}
#[test]
fn test_signature_key_validation() {
let key_manager = KeyManager::new().unwrap();
let private_key_id = key_manager.generate_key(Algorithm::ECDSAP384).unwrap();
assert!(key_manager.get_key(&private_key_id).is_ok());
assert!(key_manager.get_key("nonexistent_key").is_err());
}
#[test]
fn test_signature_key_state_transitions() {
let key_manager = KeyManager::new().unwrap();
let key_id = key_manager.generate_key(Algorithm::ECDSAP384).unwrap();
let key = key_manager.get_key(&key_id).unwrap();
assert_eq!(key.state(), KeyState::Active);
assert_eq!(key.algorithm(), Algorithm::ECDSAP384);
assert!(!key.id().is_empty());
}
#[test]
fn test_algorithm_key_compatibility() {
let key_manager = KeyManager::new().unwrap();
let ecdsa_key = key_manager.generate_key(Algorithm::ECDSAP384).unwrap();
let sm2_key = key_manager.generate_key(Algorithm::SM2).unwrap();
let ecdsa_key_obj = key_manager.get_key(&ecdsa_key).unwrap();
let sm2_key_obj = key_manager.get_key(&sm2_key).unwrap();
assert_eq!(ecdsa_key_obj.algorithm(), Algorithm::ECDSAP384);
assert_eq!(sm2_key_obj.algorithm(), Algorithm::SM2);
}