From: Dan Streetman Date: Mon, 21 Aug 2023 23:18:40 +0000 (-0400) Subject: tpm2: add tpm2_pcr_values_has_(any|all)_values() functions X-Git-Tag: v255-rc1~630^2~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=26d8d71fa5fc9d620899e3940ad246485991e632;p=thirdparty%2Fsystemd.git tpm2: add tpm2_pcr_values_has_(any|all)_values() functions --- diff --git a/src/cryptenroll/cryptenroll-tpm2.c b/src/cryptenroll/cryptenroll-tpm2.c index d7f81ede3f4..38920fb94e5 100644 --- a/src/cryptenroll/cryptenroll-tpm2.c +++ b/src/cryptenroll/cryptenroll-tpm2.c @@ -211,12 +211,7 @@ int enroll_tpm2(struct crypt_device *cd, if (r < 0) return r; - bool pcr_value_specified = false; - for (size_t i = 0; i < n_hash_pcr_values; i++) - if (hash_pcr_values[i].value.size > 0) { - pcr_value_specified = true; - break; - } + bool pcr_value_specified = tpm2_pcr_values_has_any_values(hash_pcr_values, n_hash_pcr_values); r = tpm2_pcr_read_missing_values(tpm2_context, hash_pcr_values, n_hash_pcr_values); if (r < 0) diff --git a/src/shared/tpm2-util.c b/src/shared/tpm2-util.c index 0da85b3ff29..83070ab8243 100644 --- a/src/shared/tpm2-util.c +++ b/src/shared/tpm2-util.c @@ -1590,6 +1590,28 @@ bool tpm2_pcr_values_valid(const Tpm2PCRValue *pcr_values, size_t n_pcr_values) return true; } +/* Returns true if any of the provided PCR values has an actual hash value included, false otherwise. */ +bool tpm2_pcr_values_has_any_values(const Tpm2PCRValue *pcr_values, size_t n_pcr_values) { + assert(pcr_values || n_pcr_values == 0); + + FOREACH_ARRAY(v, pcr_values, n_pcr_values) + if (v->value.size > 0) + return true; + + return false; +} + +/* Returns true if all of the provided PCR values has an actual hash value included, false otherwise. */ +bool tpm2_pcr_values_has_all_values(const Tpm2PCRValue *pcr_values, size_t n_pcr_values) { + assert(pcr_values || n_pcr_values == 0); + + FOREACH_ARRAY(v, pcr_values, n_pcr_values) + if (v->value.size == 0) + return false; + + return true; +} + static int cmp_pcr_values(const Tpm2PCRValue *a, const Tpm2PCRValue *b) { assert(a); assert(b); diff --git a/src/shared/tpm2-util.h b/src/shared/tpm2-util.h index e62a3c30e12..0fd376a2e6d 100644 --- a/src/shared/tpm2-util.h +++ b/src/shared/tpm2-util.h @@ -83,6 +83,8 @@ typedef struct { } bool tpm2_pcr_value_valid(const Tpm2PCRValue *pcr_value); +bool tpm2_pcr_values_has_any_values(const Tpm2PCRValue *pcr_values, size_t n_pcr_values); +bool tpm2_pcr_values_has_all_values(const Tpm2PCRValue *pcr_values, size_t n_pcr_values); int tpm2_pcr_value_from_string(const char *arg, Tpm2PCRValue *ret_pcr_value); char *tpm2_pcr_value_to_string(const Tpm2PCRValue *pcr_value);