tasign 0.2.0

TA ELF signing utilities with CMS/PKCS#7 support
//! Public `key_parse` API tests (backend-agnostic PKCS#8 / SEC1 parsing).

#![cfg(any(feature = "backend-mbedtls", feature = "backend-rustcrypto"))]

use std::path::PathBuf;

use tasign::crypto::key_parse::{
    sm2_pkcs8_clear_der_from_pem_with_pass, sm2_scalar_fixed32_be, sm2_scalar_from_pkcs8_der,
    sm2_secret_from_pkcs8_pem_with_pass,
};

fn fixtures_dir() -> PathBuf {
    PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("../tasign/tests/fixtures/gmssl")
}

fn fixture_pem(name: &str) -> String {
    std::fs::read_to_string(fixtures_dir().join(name)).expect("read fixture")
}

#[test]
fn clear_der_from_gmssl_encrypted_pem() {
    let pem = fixture_pem("leaf.key");
    let der =
        sm2_pkcs8_clear_der_from_pem_with_pass(&pem, "123456").expect("decrypt to clear pkcs8 der");
    assert!(der.first() == Some(&0x30));
}

#[test]
fn scalar_from_clear_pkcs8_der() {
    let pem = fixture_pem("leaf.key");
    let der = sm2_pkcs8_clear_der_from_pem_with_pass(&pem, "123456").expect("clear der");
    let scalar = sm2_scalar_from_pkcs8_der(&der).expect("sec1 scalar");
    assert_eq!(scalar.len(), 32);
    assert_ne!(scalar, [0u8; 32]);
}

#[test]
fn secret_scalar_from_pem_matches_scalar_path() {
    let pem = fixture_pem("leaf.key");
    let der = sm2_pkcs8_clear_der_from_pem_with_pass(&pem, "123456").expect("clear der");
    let via_der = sm2_scalar_from_pkcs8_der(&der).expect("scalar");
    let via_pem = sm2_secret_from_pkcs8_pem_with_pass(&pem, "123456").expect("biguint");
    assert_eq!(via_der, sm2_scalar_fixed32_be(&via_pem).expect("fixed32"));
}