> On 8 Jul 2025, at 2:01 PM, Gary Lin via Grub-devel <grub-devel@gnu.org> wrote:
> 
> A test is introduced to cap PCR 1 and track the PCR 1 value before and
> after key unsealing.
> 
> Signed-off-by: Gary Lin <g...@suse.com>
> ---

Reviewed-by: Sudhakar Kuppusamy <sudha...@linux.ibm.com>


> tests/tpm2_key_protector_test.in | 65 ++++++++++++++++++++++++++++++++
> 1 file changed, 65 insertions(+)
> 
> diff --git a/tests/tpm2_key_protector_test.in 
> b/tests/tpm2_key_protector_test.in
> index 1d80d5d26..5dd86d6ee 100644
> --- a/tests/tpm2_key_protector_test.in
> +++ b/tests/tpm2_key_protector_test.in
> @@ -304,6 +304,58 @@ EOF
>     fi
> }
> 
> +tpm2_seal_unseal_cap() {
> +    pcr_bank="sha256"
> +
> +    original_pcr1="$(tpm2_pcrread ${pcr_bank}:1) | tail -1 | cut -d' ' -f7"
> +
> +    grub_cfg=${tpm2testdir}/testcase.cfg
> +
> +    # Seal the password with grub-protect
> +    grub-protect \
> +     --tpm2-device="${tpm2dev}" \
> +     --action=add \
> +     --protector=tpm2 \
> +     --tpm2key \
> +     --tpm2-bank="${pcr_bank}" \
> +     --tpm2-pcrs=0,1 \
> +     --tpm2-keyfile="${lukskeyfile}" \
> +     --tpm2-outfile="${sealedkey}" || ret=$?
> +    if [ "${ret}" -ne 0 ]; then
> +     echo "Failed to seal the secret key: ${ret}" >&2
> +     return 99
> +    fi
> +
> +    # Write the TPM unsealing script and cap PCR 1
> +    cat > "${grub_cfg}" <<EOF
> +loopback luks (host)${luksfile}
> +tpm2_key_protector_init -T (host)${sealedkey} -c 1
> +if cryptomount -a --protector tpm2; then
> +    cat (crypto0)+1
> +fi
> +EOF
> +
> +    # Test TPM unsealing with the same PCR
> +    ${grubshell} --timeout=${timeout} --emu-opts="-t ${tpm2dev}" < 
> "${grub_cfg}" > "${testoutput}" || ret=$?
> +
> +    if [ "${ret}" -eq 0 ]; then
> +     if ! grep -q "^${vtext}$" "${testoutput}"; then
> +         echo "error: test not verified [`cat ${testoutput}`]" >&2
> +         return 1
> +     fi
> +    else
> +     echo "grub-emu exited with error: ${ret}" >&2
> +     return 99
> +    fi
> +
> +    capped_pcr1="$(tpm2_pcrread ${pcr_bank}:1) | tail -1 | cut -d' ' -f7"
> +
> +    if [ "${original_pcr1}" = "${capped_pcr1}" ]; then
> +     echo "error: PCR 1 not capped" >&2
> +     return 1
> +    fi
> +}
> +
> # Testcases for SRK mode
> declare -a srktests=()
> srktests+=("default transient no_fallback_srk sha256")
> @@ -357,4 +409,17 @@ for i in "${!nvtests[@]}"; do
>     fi
> done
> 
> +# Testcase for PCR Capping
> +tpm2_seal_unseal_cap || ret=$?
> +if [ "${ret}" -eq 0 ]; then
> +    echo "TPM2 [PCR Capping]: PASS"
> +elif [ "${ret}" -eq 1 ]; then
> +    echo "TPM2 [PCR Capping]: FAIL"
> +    ret=0
> +    exit_status=1
> +else
> +    echo "Unexpected failure [PCR Capping]" >&2
> +    exit ${ret}
> +fi
> +
> exit ${exit_status}
> -- 
> 2.43.0
> 
> 
> _______________________________________________
> Grub-devel mailing list
> Grub-devel@gnu.org
> https://lists.gnu.org/mailman/listinfo/grub-devel

_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to