diff --git a/tss-esapi-sys/README.md b/tss-esapi-sys/README.md index 6f87584f..90f217ac 100644 --- a/tss-esapi-sys/README.md +++ b/tss-esapi-sys/README.md @@ -62,4 +62,25 @@ wrapper script around `pkg-config` can be seen Be advised that in some cases the linker used might need to be set manually in `.cargo/config`. +## Locally built tpm2-tss +It is now possible to specify an installation path when building the crate. This will +make the build process trying to find all the libraries and header files it needs from +installation path instead of using `pkg-config`. + +The `TPM2_TSS_PATH` environment variable name is used to specify the path to the installation. +The installation is required to have a specific layout. + +```md +Installation folder +| ├── bin (optional) +| | ├── tss2-*.dll (Windows) +│ ├── include +│ │ ├── tss2 +│ │ ├── tss2_*.h +│ ├── lib +│ │ ├── tss2-*.lib (Windows) +| | ├── tss2-*.so (Nix) +│ │ ├── tss2-*.pdb (Windows) +│ └── VERSION +``` *Copyright 2021 Contributors to the Parsec project.* diff --git a/tss-esapi/src/tcti_ldr.rs b/tss-esapi/src/tcti_ldr.rs index f564baf8..a59f6ea4 100644 --- a/tss-esapi/src/tcti_ldr.rs +++ b/tss-esapi/src/tcti_ldr.rs @@ -21,6 +21,7 @@ const DEVICE: &str = "device"; const MSSIM: &str = "mssim"; const SWTPM: &str = "swtpm"; const TABRMD: &str = "tabrmd"; +const TBS: &str = "tbs"; /// TCTI Context created via a TCTI Loader Library. /// Wrapper around the TSS2_TCTI_CONTEXT structure. @@ -143,6 +144,10 @@ pub enum TctiNameConf { /// /// For more information about configuration, see [this page](https://www.mankier.com/3/Tss2_Tcti_Tabrmd_Init) Tabrmd(TabrmdConfig), + /// Connect to the tpm using the Trusted Platform Module (TPM) Base Services (TBS) on Windows. + /// + /// For more information about TBS, see [this page](https://learn.microsoft.com/en-us/windows/win32/tbs/about-tbs) + Tbs, } impl TctiNameConf { @@ -174,6 +179,7 @@ impl TryFrom for CString { TctiNameConf::Mssim(..) => MSSIM, TctiNameConf::Swtpm(..) => SWTPM, TctiNameConf::Tabrmd(..) => TABRMD, + TctiNameConf::Tbs => TBS, }; let tcti_conf = match tcti { @@ -204,6 +210,7 @@ impl TryFrom for CString { TctiNameConf::Tabrmd(config) => { format!("bus_name={},bus_type={}", config.bus_name, config.bus_type) } + TctiNameConf::Tbs => String::new(), }; if tcti_conf.is_empty() { @@ -247,6 +254,10 @@ impl FromStr for TctiNameConf { )?)); } + if config_str.trim() == TBS { + return Ok(TctiNameConf::Tbs); + } + Err(Error::WrapperError(WrapperErrorKind::InvalidParam)) } } @@ -327,6 +338,10 @@ fn validate_from_str_tcti() { let tcti = TctiNameConf::from_str("tabrmd").unwrap(); assert_eq!(tcti, TctiNameConf::Tabrmd(Default::default())); + + let tcti_tbs = TctiNameConf::from_str("tbs") + .expect("It should be possible to convert the string 'tbs' into a TctiNameConf object."); + assert!(tcti_tbs, TctiNameConf::Tbs); } /// Configuration for a Device TCTI context