tss-keyfile 0.1.5

Decoding of TPM 2.0 TSS Keyfiles from PEM/DER/(ASN.1)
Documentation
use tss_keyfile::{Error, TPMKey};

#[test]
fn test_invalid_der_data() {
    let invalid_data = vec![0xFF, 0xFF, 0xFF, 0xFF];
    let result = TPMKey::try_from_der(&invalid_data);
    assert!(matches!(result, Err(Error::DerDecodeError(_))));
}

#[cfg(feature = "pem")]
#[test]
fn test_invalid_pem_tag() {
    let invalid_pem = "-----BEGIN PRIVATE KEY-----\nSGVsbG8gV29ybGQ=\n-----END PRIVATE KEY-----";
    let result = TPMKey::try_from_pem(invalid_pem.as_bytes());
    assert!(matches!(result, Err(Error::PemNoTss2PrivateKey)));
}

#[test]
fn test_validation_errors() {
    let pubkey = vec![0x01, 0x02, 0x03];
    let privkey = vec![0x04, 0x05, 0x06];

    // Test invalid parent handle
    let key = TPMKey::new_loadable(0x12345678, &pubkey, &privkey);
    assert!(matches!(key.validate(), Err(Error::InvalidParentHandle(_))));

    // Test missing secret for importable
    let key = TPMKey::new_importable(0x81000001, &pubkey, &privkey);
    assert!(matches!(key.validate(), Err(Error::MissingSecret)));

    // Test unexpected secret for loadable
    let mut key = TPMKey::new_loadable(0x81000001, &pubkey, &privkey);
    key.secret = Some(vec![0x07, 0x08].into());
    assert!(matches!(key.validate(), Err(Error::UnexpectedSecret)));
}