use crate::{Sm2Key, Sm2Signer, Sm2Verifier};
#[test]
fn test_x509_self_signed_cert() {
let key = Sm2Key::generate().unwrap();
let pub_pem = key.to_public_key_pem().unwrap();
let parsed_key = Sm2Key::from_public_key_pem(&pub_pem).unwrap();
assert!(!parsed_key.has_private_key());
}
#[test]
fn test_x509_pubkey_pem_roundtrip() {
let key = Sm2Key::generate().unwrap();
let pem = key.to_public_key_pem().unwrap();
assert!(pem.starts_with(b"-----BEGIN"));
assert!(pem.ends_with(b"-----\n"));
let loaded = Sm2Key::from_public_key_pem(&pem).unwrap();
let pem2 = loaded.to_public_key_pem().unwrap();
assert_eq!(pem, pem2);
}
#[test]
fn test_x509_pubkey_der_roundtrip() {
let key = Sm2Key::generate().unwrap();
let der = key.to_public_key_der().unwrap();
assert!(!der.is_empty());
let loaded = Sm2Key::from_public_key_der(&der).unwrap();
let der2 = loaded.to_public_key_der().unwrap();
assert_eq!(der, der2);
}
#[test]
fn test_x509_privkey_pem() {
let key = Sm2Key::generate().unwrap();
let pem = key.to_private_key_pem().unwrap();
assert!(pem.starts_with(b"-----BEGIN"));
let loaded = Sm2Key::from_private_key_pem(&pem).unwrap();
assert!(loaded.has_private_key());
let sig = Sm2Signer::sign(&loaded, None, b"test").unwrap();
assert!(Sm2Verifier::verify(&key, None, b"test", &sig).unwrap());
}
#[test]
fn test_x509_encrypted_privkey_pem() {
let key = Sm2Key::generate().unwrap();
let password = "secure-password-123";
let pem = key.to_encrypted_private_key_pem(password).unwrap();
assert!(!pem.is_empty());
let loaded = Sm2Key::from_encrypted_private_key_pem(&pem, password).unwrap();
assert!(loaded.has_private_key());
assert!(Sm2Key::from_encrypted_private_key_pem(&pem, "wrong").is_err());
}