blob: 80ec4e1781c4b20a94009c495acbad3cd2c4ff9c [file] [log] [blame]
#!/bin/sh
# Copyright 2021 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
if [ -z "${LOCKBOX_CACHE_DIR}" ]; then
echo "LOCKBOX_CACHE_DIR is unset";
exit 1
fi
if [ -z "${LOCKBOX_NVRAM_FILE}" ]; then
echo "LOCKBOX_NVRAM_FILE is unset";
exit 1
fi
if [ -z "${INSTALL_ATTRS_CACHE}" ]; then
echo "INSTALL_ATTRS_CACHE is unset";
exit 1
fi
if [ -z "${INSTALL_ATTRS_FILE}" ]; then
echo "INSTALL_ATTRS_FILE is unset";
exit 1
fi
umask 022
mkdir -p -m 0711 "${LOCKBOX_CACHE_DIR}"
if [ "$(tpm_version_client)" -eq 2 ]; then
LOCKBOX_INDEX=0x9da5b0
else
LOCKBOX_INDEX=0x20000004
fi
# Use tpm_manager to read the NV space.
/usr/bin/gdbus wait --system -t 15 org.chromium.TpmManager
tpm_manager_client read_space --index="${LOCKBOX_INDEX}" \
--file="${LOCKBOX_NVRAM_FILE}"
# If the nvram file is not empty.
if [ -s "${LOCKBOX_NVRAM_FILE}" ]; then
lockbox-cache --cache="${INSTALL_ATTRS_CACHE}" \
--nvram="${LOCKBOX_NVRAM_FILE}" \
--lockbox="${INSTALL_ATTRS_FILE}"
else
# For TPM-less devices and legacy CR1 devices,
# pretend like lockbox is supported.
cp "${INSTALL_ATTRS_FILE}" "${INSTALL_ATTRS_CACHE}"
fi
# There are no other consumers; remove the nvram data.
rm "${LOCKBOX_NVRAM_FILE}"