diff --git a/tss-esapi/build.rs b/tss-esapi/build.rs index ebe1c284..4f5ff480 100644 --- a/tss-esapi/build.rs +++ b/tss-esapi/build.rs @@ -38,6 +38,11 @@ fn main() { println!("cargo:rustc-cfg=has_tss_base_rc_values_52_to_53") } + let has_tpmu_sensitive_create_req = VersionReq::parse(">=4.0.0").unwrap(); + if has_tpmu_sensitive_create_req.matches(&tss_version) { + println!("cargo:rustc-cfg=has_tpmu_sensitive_create") + } + #[cfg(feature = "generate-bindings")] { let has_esys_tr_get_tpm_handle_req = VersionReq::parse(">=2.4.0").unwrap(); diff --git a/tss-esapi/src/structures/buffers.rs b/tss-esapi/src/structures/buffers.rs index 92eb604c..aa2601f5 100644 --- a/tss-esapi/src/structures/buffers.rs +++ b/tss-esapi/src/structures/buffers.rs @@ -354,11 +354,23 @@ pub mod public_key_rsa { } pub mod sensitive_data { - buffer_type!( - SensitiveData, - ::std::mem::size_of::(), - TPM2B_SENSITIVE_DATA - ); + cfg_if::cfg_if! { + if #[cfg(has_tpmu_sensitive_create)] { + use crate::tss2_esys::TPMU_SENSITIVE_CREATE; + buffer_type!( + SensitiveData, + ::std::mem::size_of::(), + TPM2B_SENSITIVE_DATA + ); + } else { + use crate::tss2_esys::UINT16; + buffer_type!( + SensitiveData, + std::mem::size_of::() - std::mem::size_of::(), + TPM2B_SENSITIVE_DATA + ); + } + } } pub mod symmetric_key { diff --git a/tss-esapi/src/utils/mod.rs b/tss-esapi/src/utils/mod.rs index 151a8258..95639204 100644 --- a/tss-esapi/src/utils/mod.rs +++ b/tss-esapi/src/utils/mod.rs @@ -57,13 +57,9 @@ impl TryFrom for TpmsContext { hierarchy: tss2_context.hierarchy, context_blob: tss2_context.contextBlob.buffer.to_vec(), }; - context.context_blob.truncate( - tss2_context - .contextBlob - .size - .try_into() - .map_err(|_| Error::local_error(WrapperErrorKind::WrongParamSize))?, - ); + context + .context_blob + .truncate(tss2_context.contextBlob.size.into()); Ok(context) } } diff --git a/tss-esapi/tests/integration_tests/structures_tests/buffers_tests/sensitive_create_buffer_tests.rs b/tss-esapi/tests/integration_tests/structures_tests/buffers_tests/sensitive_create_buffer_tests.rs index 243981bf..f9702a14 100644 --- a/tss-esapi/tests/integration_tests/structures_tests/buffers_tests/sensitive_create_buffer_tests.rs +++ b/tss-esapi/tests/integration_tests/structures_tests/buffers_tests/sensitive_create_buffer_tests.rs @@ -6,6 +6,7 @@ use tss_esapi::{ tss2_esys::TPM2B_SENSITIVE_CREATE, Error, WrapperErrorKind, }; +use tss_esapi_sys::TPM2B_SENSITIVE_DATA; // TPM2B_AUTH = TPM2B_DIGEST = u16 + [u8;64] = 2 + 64 = 66 // TPM2B_SENSITIVE_DATA = u16 + [u8; 256] = 2 + 256 = 258 @@ -124,3 +125,12 @@ fn test_marshall_unmarshall() { "SensitiveCreate converted from SenstiveCreateBuffer did not contain the expected values" ); } + +#[test] +fn test_conversion_from_max_size_buffer() { + let data = vec![1u8; SensitiveData::MAX_SIZE]; + let sensitive_data = SensitiveData::try_from(data) + .expect("It should be possible to convert maximum amount of data into SensitiveData."); + TPM2B_SENSITIVE_DATA::try_from(sensitive_data) + .expect("It should be possible to valid convert SensitiveData into TPM2B_SENSITIVE_DATA."); +}