tss-keyfile 0.1.3

TPM2 TSS Keyfile Types and PEM/DER codec
Documentation
use tss_keyfile::TPMKey;

#[test]
fn test_der_round_trip() {
    let pubkey = vec![0x01, 0x02, 0x03, 0x04];
    let privkey = vec![0x05, 0x06, 0x07, 0x08];
    let parent = 0x40000001;

    let original = TPMKey::new_loadable(parent, &pubkey, &privkey);

    let der_encoded = original.try_to_der().unwrap();
    let decoded = TPMKey::try_from_der(&der_encoded).unwrap();

    assert_eq!(original, decoded);
}

#[cfg(feature = "pem")]
#[test]
fn test_pem_round_trip() {
    let pubkey = vec![0x01, 0x02, 0x03, 0x04];
    let privkey = vec![0x05, 0x06, 0x07, 0x08];
    let parent = 0x40000001;

    let original = TPMKey::new_loadable(parent, &pubkey, &privkey);

    let pem_encoded = original.try_to_pem().unwrap();
    let decoded = TPMKey::try_from_pem(pem_encoded.as_bytes()).unwrap();

    assert_eq!(original, decoded);
}

#[test]
fn test_complex_key_serialization() {
    let pubkey = vec![0x01; 256];
    let privkey = vec![0x02; 128];
    let parent = 0x81000001;

    let mut key = TPMKey::new_importable(parent, &pubkey, &privkey);
    key.secret = Some(vec![0x03; 32].into());
    key.description = Some("Test Key".into());
    key.empty_auth = Some(false);
    key.rsa_parent = Some(true);

    let der_encoded = key.try_to_der().unwrap();
    let decoded = TPMKey::try_from_der(&der_encoded).unwrap();

    assert_eq!(key, decoded);
}