Skip to content

Commit

Permalink
Fixes max size issue with SensitiveData.
Browse files Browse the repository at this point in the history
This fixes parallaxsecond#481

Signed-off-by: Jesper Brynolf <[email protected]>
  • Loading branch information
Superhepper committed Dec 31, 2023
1 parent 2dfc315 commit c67deb1
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 12 deletions.
5 changes: 5 additions & 0 deletions tss-esapi/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
22 changes: 17 additions & 5 deletions tss-esapi/src/structures/buffers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -354,11 +354,23 @@ pub mod public_key_rsa {
}

pub mod sensitive_data {
buffer_type!(
SensitiveData,
::std::mem::size_of::<TPM2B_SENSITIVE_DATA>(),
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::<TPMU_SENSITIVE_CREATE>(),
TPM2B_SENSITIVE_DATA
);
} else {
use crate::tss2_esys::UINT16;
buffer_type!(
SensitiveData,
std::mem::size_of::<TPM2B_SENSITIVE_DATA>() - std::mem::size_of::<UINT16>(),
TPM2B_SENSITIVE_DATA
);
}
}
}

pub mod symmetric_key {
Expand Down
10 changes: 3 additions & 7 deletions tss-esapi/src/utils/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -57,13 +57,9 @@ impl TryFrom<TPMS_CONTEXT> 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)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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.");
}

0 comments on commit c67deb1

Please sign in to comment.