Skip to content

Commit ab577b4

Browse files
committed
Make PCR Selection optional for create_{primary_,}key
Fixes: 163 Signed-off-by: Patrick Uiterwijk <[email protected]>
1 parent 5c9e5b4 commit ab577b4

File tree

5 files changed

+52
-74
lines changed

5 files changed

+52
-74
lines changed

src/abstraction/ek.rs

+1-11
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ use crate::{
66
constants::{algorithm::AsymmetricAlgorithm, tss::*},
77
handles::{AuthHandle, KeyHandle, NvIndexTpmHandle, TpmHandle},
88
interface_types::resource_handles::Hierarchy,
9-
structures::PcrSelectionListBuilder,
109
tss2_esys::{
1110
TPM2B_ECC_PARAMETER, TPM2B_PUBLIC, TPM2B_PUBLIC_KEY_RSA, TPMS_ECC_PARMS, TPMS_ECC_POINT,
1211
TPMS_RSA_PARMS, TPMS_SCHEME_HASH, TPMT_ECC_SCHEME, TPMT_KDF_SCHEME, TPMT_RSA_SCHEME,
@@ -114,18 +113,9 @@ fn create_ek_public_from_default_template(alg: AsymmetricAlgorithm) -> Result<TP
114113
pub fn create_ek_object(context: &mut Context, alg: AsymmetricAlgorithm) -> Result<KeyHandle> {
115114
let ek_public = create_ek_public_from_default_template(alg)?;
116115

117-
let creation_pcrs = PcrSelectionListBuilder::new().build();
118-
119116
Ok(context
120117
.execute_with_nullauth_session(|ctx| {
121-
ctx.create_primary_key(
122-
Hierarchy::Endorsement,
123-
&ek_public,
124-
None,
125-
None,
126-
None,
127-
creation_pcrs,
128-
)
118+
ctx.create_primary_key(Hierarchy::Endorsement, &ek_public, None, None, None, None)
129119
})?
130120
.key_handle)
131121
}

src/abstraction/transient.rs

+3-9
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,7 @@ use crate::constants::tss::*;
1818
use crate::constants::types::session::SessionType;
1919
use crate::handles::KeyHandle;
2020
use crate::interface_types::resource_handles::Hierarchy;
21-
use crate::structures::{
22-
Auth, CreateKeyResult, Data, Digest, PcrSelectionListBuilder, PublicKeyRSA, VerifiedTicket,
23-
};
21+
use crate::structures::{Auth, CreateKeyResult, Data, Digest, PublicKeyRSA, VerifiedTicket};
2422
use crate::tcti::Tcti;
2523
use crate::tss2_esys::*;
2624
use crate::utils::{
@@ -111,8 +109,6 @@ impl TransientKeyContext {
111109
None
112110
};
113111

114-
let creation_pcrs = PcrSelectionListBuilder::new().build();
115-
116112
self.set_session_attrs()?;
117113
let CreateKeyResult {
118114
out_private,
@@ -124,7 +120,7 @@ impl TransientKeyContext {
124120
key_auth.as_ref(),
125121
None,
126122
None,
127-
creation_pcrs,
123+
None,
128124
)?;
129125
self.set_session_attrs()?;
130126
let key_handle = self
@@ -676,8 +672,6 @@ impl TransientKeyContextBuilder {
676672
context.tr_set_auth(self.hierarchy.into(), &auth_hierarchy)?;
677673
}
678674

679-
let creation_pcrs = PcrSelectionListBuilder::new().build();
680-
681675
let session = context
682676
.start_auth_session(
683677
None,
@@ -711,7 +705,7 @@ impl TransientKeyContextBuilder {
711705
root_key_auth.as_ref(),
712706
None,
713707
None,
714-
creation_pcrs,
708+
None,
715709
)?
716710
.key_handle;
717711

src/context.rs

+4-2
Original file line numberDiff line numberDiff line change
@@ -370,7 +370,7 @@ impl Context {
370370
auth_value: Option<&Auth>,
371371
initial_data: Option<&SensitiveData>,
372372
outside_info: Option<&Data>,
373-
creation_pcrs: PcrSelectionList,
373+
creation_pcrs: Option<PcrSelectionList>,
374374
) -> Result<CreatePrimaryKeyResult> {
375375
let sensitive_create = TPM2B_SENSITIVE_CREATE {
376376
size: std::mem::size_of::<TPMS_SENSITIVE_CREATE>()
@@ -381,6 +381,7 @@ impl Context {
381381
data: TPM2B_SENSITIVE_DATA::try_from(initial_data.cloned().unwrap_or_default())?,
382382
},
383383
};
384+
let creation_pcrs = PcrSelectionList::list_from_option(creation_pcrs);
384385

385386
let mut outpublic = null_mut();
386387
let mut creation_data = null_mut();
@@ -457,7 +458,7 @@ impl Context {
457458
auth_value: Option<&Auth>,
458459
initial_data: Option<&SensitiveData>,
459460
outside_info: Option<&Data>,
460-
creation_pcrs: PcrSelectionList,
461+
creation_pcrs: Option<PcrSelectionList>,
461462
) -> Result<CreateKeyResult> {
462463
let sensitive_create = TPM2B_SENSITIVE_CREATE {
463464
size: std::mem::size_of::<TPMS_SENSITIVE_CREATE>()
@@ -468,6 +469,7 @@ impl Context {
468469
data: TPM2B_SENSITIVE_DATA::try_from(initial_data.cloned().unwrap_or_default())?,
469470
},
470471
};
472+
let creation_pcrs = PcrSelectionList::list_from_option(creation_pcrs);
471473

472474
let mut outpublic = null_mut();
473475
let mut outprivate = null_mut();

src/structures/lists/pcr_selection.rs

+7
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,13 @@ impl PcrSelectionList {
2626
self.items.is_empty()
2727
}
2828

29+
/// Function for retrieving the PcrSelectionList from Option<PcrSelectionList>
30+
///
31+
/// This returns an empty list if None is passed
32+
pub fn list_from_option(pcr_list: Option<PcrSelectionList>) -> PcrSelectionList {
33+
pcr_list.unwrap_or_else(|| PcrSelectionListBuilder::new().build())
34+
}
35+
2936
/// Removes items in `other` from `self.
3037
///
3138
/// # Arguments

0 commit comments

Comments
 (0)