tpm2: change tpm2_calculate_policy_pcr(), tpm2_calculate_sealing_policy() to use Tpm2PCRValue array

An array of Tpm2PCRValue objects effectively replaces a TPML_PCR_SELECTION
object combined with an array of (properly ordered) TPM2B_DIGEST objects.

Also update tpm2_calculate_sealing_policy() pin parameter to boolean use_pin,
since the function does not need to know the pin value, only if a pin is being
used.
This commit is contained in:
Dan Streetman
2023-08-04 10:57:07 -04:00
parent 75de375aaf
commit 6e8fb3ad5f
4 changed files with 74 additions and 76 deletions
+6 -9
View File
@@ -831,23 +831,20 @@ static int verb_sign(int argc, char *argv[], void *userdata) {
if (tpmalg < 0)
return log_error_errno(tpmalg, "Unsupported PCR bank");
TPML_PCR_SELECTION pcr_selection;
tpm2_tpml_pcr_selection_from_mask(1 << TPM_PCR_INDEX_KERNEL_IMAGE,
tpmalg,
&pcr_selection);
TPM2B_DIGEST pcr_values = {
TPM2B_DIGEST pcr_digest = {
.size = p->value_size,
};
assert(sizeof(pcr_values.buffer) >= p->value_size);
memcpy_safe(pcr_values.buffer, p->value, p->value_size);
assert(sizeof(pcr_digest.buffer) >= p->value_size);
memcpy_safe(pcr_digest.buffer, p->value, p->value_size);
Tpm2PCRValue pcr_value = TPM2_PCR_VALUE_MAKE(TPM_PCR_INDEX_KERNEL_IMAGE, tpmalg, pcr_digest);
TPM2B_DIGEST pcr_policy_digest;
r = tpm2_digest_init(TPM2_ALG_SHA256, &pcr_policy_digest);
if (r < 0)
return r;
r = tpm2_calculate_policy_pcr(&pcr_selection, &pcr_values, 1, &pcr_policy_digest);
r = tpm2_calculate_policy_pcr(&pcr_value, 1, &pcr_policy_digest);
if (r < 0)
return r;