use super::*;
#[test]
#[ignore = "GmSSL v3.1.1 SM9 bug: crashes when multiple tests share a process"]
fn test_sm9_sign_key_generation() {
let master = Sm9SignMasterKey::generate().unwrap();
let id = "alice@example.com";
let user_key = master.extract_key(id).unwrap();
assert_eq!(user_key.id(), id);
}
#[test]
#[ignore = "GmSSL v3.1.1 SM9 bug: crashes when multiple tests share a process"]
fn test_sm9_enc_key_generation() {
let master = Sm9EncMasterKey::generate().unwrap();
let id = "bob@example.com";
let user_key = master.extract_key(id).unwrap();
assert_eq!(user_key.id(), id);
}
#[test]
#[ignore = "GmSSL v3.1.1 SM9 bug: crashes when multiple tests share a process"]
fn test_sm9_sign_produces_signature() {
let master = Sm9SignMasterKey::generate().unwrap();
let user_key = master.extract_key("alice@example.com").unwrap();
let sig = sm9_sign(&user_key, b"test message").unwrap();
assert!(!sig.is_empty());
assert_eq!(sig[0], 0x30, "Signature should be DER-encoded SEQUENCE");
assert!(
sig[1] < 0x80,
"Content length should use short form DER encoding"
);
let content_len = sig[1] as usize;
assert_eq!(
sig.len(),
2 + content_len,
"Signature length should match DER SEQUENCE header"
);
}
#[test]
#[ignore = "GmSSL v3.1.1 SM9 bug: crashes when multiple tests share a process"]
fn test_sm9_encrypt_produces_ciphertext() {
let master = Sm9EncMasterKey::generate().unwrap();
let ct = sm9_encrypt(&master, "bob@example.com", b"secret").unwrap();
assert!(!ct.is_empty());
assert_eq!(ct[0], 0x30, "Ciphertext should be DER-encoded SEQUENCE");
assert!(ct[1] < 0x80, "Content length should use short form DER encoding");
let content_len = ct[1] as usize;
assert_eq!(
ct.len(),
2 + content_len,
"Ciphertext length should match DER SEQUENCE header"
);
}
#[test]
#[ignore = "GmSSL v3.1.1 SM9 bug: crashes when multiple tests share a process"]
fn test_sm9_sign_wrong_id() {
let master = Sm9SignMasterKey::generate().unwrap();
let user_key = master.extract_key("alice@example.com").unwrap();
let sig = sm9_sign(&user_key, b"test data").unwrap();
let result = sm9_verify(&master, "bob@example.com", b"test data", &sig);
match result {
Ok(valid) => assert!(!valid, "Verification with wrong ID should fail"),
Err(_) => {} }
}
#[test]
#[ignore = "GmSSL v3.1.1 SM9 bug: crashes when multiple tests share a process"]
fn test_sm9_sign_wrong_master() {
let master1 = Sm9SignMasterKey::generate().unwrap();
let master2 = Sm9SignMasterKey::generate().unwrap();
let user_key = master1.extract_key("user@test.com").unwrap();
let sig = sm9_sign(&user_key, b"test").unwrap();
let result = sm9_verify(&master2, "user@test.com", b"test", &sig);
match result {
Ok(valid) => assert!(!valid),
Err(_) => {} }
}
#[test]
#[ignore = "GmSSL v3.1.1 SM9 bug: crashes when multiple tests share a process"]
fn test_sm9_sign_tampered_data() {
let master = Sm9SignMasterKey::generate().unwrap();
let user_key = master.extract_key("alice@example.com").unwrap();
let sig = sm9_sign(&user_key, b"original message").unwrap();
let result = sm9_verify(&master, "alice@example.com", b"tampered message", &sig);
match result {
Ok(valid) => assert!(!valid),
Err(_) => {} }
}
#[test]
#[ignore = "GmSSL v3.1.1 SM9 bug: crashes when multiple tests share a process"]
fn test_sm9_enc_wrong_recipient() {
let master = Sm9EncMasterKey::generate().unwrap();
let _alice = master.extract_key("alice@test.com").unwrap();
let bob = master.extract_key("bob@test.com").unwrap();
let ciphertext = sm9_encrypt(&master, "alice@test.com", b"for alice").unwrap();
let result = sm9_decrypt(&bob, "bob@test.com", &ciphertext);
assert!(result.is_err());
}
#[test]
#[ignore = "GmSSL v3.1.1 SM9 bug: crashes when multiple tests share a process"]
fn test_sm9_sign_master_pem_export() {
let master = Sm9SignMasterKey::generate().unwrap();
let pem = master.to_encrypted_pem("test-password").unwrap();
assert!(!pem.is_empty());
assert!(String::from_utf8_lossy(&pem).starts_with("-----BEGIN"));
}
#[test]
#[ignore = "GmSSL v3.1.1 SM9 bug: crashes when multiple tests share a process"]
fn test_sm9_enc_master_pem_export() {
let master = Sm9EncMasterKey::generate().unwrap();
let pem = master.to_encrypted_pem("enc-password").unwrap();
assert!(!pem.is_empty());
assert!(String::from_utf8_lossy(&pem).starts_with("-----BEGIN"));
}
#[test]
#[ignore = "GmSSL v3.1.1 SM9 bug: crashes when multiple tests share a process"]
fn test_sm9_sign_key_pem_export() {
let master = Sm9SignMasterKey::generate().unwrap();
let user_key = master.extract_key("user@test.com").unwrap();
let pem = user_key.to_encrypted_pem("key-pass").unwrap();
assert!(!pem.is_empty());
assert!(String::from_utf8_lossy(&pem).starts_with("-----BEGIN"));
}
#[test]
#[ignore = "GmSSL v3.1.1 SM9 bug: crashes when multiple tests share a process"]
fn test_sm9_enc_key_pem_export() {
let master = Sm9EncMasterKey::generate().unwrap();
let user_key = master.extract_key("user@test.com").unwrap();
let pem = user_key.to_encrypted_pem("key-pass").unwrap();
assert!(!pem.is_empty());
assert!(String::from_utf8_lossy(&pem).starts_with("-----BEGIN"));
}
#[test]
#[ignore = "GmSSL v3.1.1 SM9 bug: crashes when multiple tests share a process"]
fn test_sm9_sign_verify_callable() {
let master = Sm9SignMasterKey::generate().unwrap();
let user_key = master.extract_key("alice@example.com").unwrap();
let sig = sm9_sign(&user_key, b"hello").unwrap();
let _ = sm9_verify(&master, "alice@example.com", b"hello", &sig);
}