summaryrefslogtreecommitdiff
path: root/src/security/tpm/antirollback.h
diff options
context:
space:
mode:
authorPhilipp Deppenwiese <zaolin@das-labor.org>2017-10-18 17:13:07 +0200
committerStefan Reinauer <stefan.reinauer@coreboot.org>2018-01-18 01:35:31 +0000
commit64e2d19082636de9e82674ccfca574269bb34712 (patch)
treedfe44c9b1cebbb611b99474c1ee096e23f930796 /src/security/tpm/antirollback.h
parent4fef7818ecd002e5971ea6287e402fd9276b7266 (diff)
security/tpm: Move tpm TSS and TSPI layer to security section
* Move code from src/lib and src/include into src/security/tpm * Split TPM TSS 1.2 and 2.0 * Fix header includes * Add a new directory structure with kconfig and makefile includes Change-Id: Id15a9aa6bd367560318dfcfd450bf5626ea0ec2b Signed-off-by: Philipp Deppenwiese <zaolin@das-labor.org> Reviewed-on: https://review.coreboot.org/22103 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
Diffstat (limited to 'src/security/tpm/antirollback.h')
-rw-r--r--src/security/tpm/antirollback.h81
1 files changed, 81 insertions, 0 deletions
diff --git a/src/security/tpm/antirollback.h b/src/security/tpm/antirollback.h
new file mode 100644
index 0000000000..d1bc433dcd
--- /dev/null
+++ b/src/security/tpm/antirollback.h
@@ -0,0 +1,81 @@
+/* Copyright (c) 2013 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.
+ *
+ * Functions for querying, manipulating and locking rollback indices
+ * stored in the TPM NVRAM.
+ */
+
+#ifndef ANTIROLLBACK_H_
+#define ANTIROLLBACK_H_
+
+#include "tss_constants.h"
+
+struct vb2_context;
+enum vb2_pcr_digest;
+
+/* TPM NVRAM location indices. */
+#define FIRMWARE_NV_INDEX 0x1007
+#define KERNEL_NV_INDEX 0x1008
+/* 0x1009 used to be used as a backup space. Think of conflicts if you
+ * want to use 0x1009 for something else. */
+#define BACKUP_NV_INDEX 0x1009
+#define FWMP_NV_INDEX 0x100a
+#define REC_HASH_NV_INDEX 0x100b
+#define REC_HASH_NV_SIZE VB2_SHA256_DIGEST_SIZE
+
+/* Structure definitions for TPM spaces */
+
+/* Flags for firmware space */
+
+/*
+ * Last boot was developer mode. TPM ownership is cleared when transitioning
+ * to/from developer mode.
+ */
+#define FLAG_LAST_BOOT_DEVELOPER 0x01
+
+/* All functions return TPM_SUCCESS (zero) if successful, non-zero if error */
+
+uint32_t antirollback_read_space_firmware(struct vb2_context *ctx);
+
+/**
+ * Write may be called if the versions change.
+ */
+uint32_t antirollback_write_space_firmware(struct vb2_context *ctx);
+
+/**
+ * Lock must be called.
+ */
+uint32_t antirollback_lock_space_firmware(void);
+
+/* Read recovery hash data from TPM. */
+uint32_t antirollback_read_space_rec_hash(uint8_t *data, uint32_t size);
+/* Write new hash data to recovery space in TPM. */
+uint32_t antirollback_write_space_rec_hash(const uint8_t *data, uint32_t size);
+/* Lock down recovery hash space in TPM. */
+uint32_t antirollback_lock_space_rec_hash(void);
+
+/****************************************************************************/
+
+/*
+ * The following functions are internal apis, listed here for use by unit tests
+ * only.
+ */
+
+/**
+ * Ask vboot for a digest and extend a TPM PCR with it.
+ */
+uint32_t tpm_extend_pcr(struct vb2_context *ctx, int pcr,
+ enum vb2_pcr_digest which_digest);
+
+/**
+ * Issue a TPM_Clear and reenable/reactivate the TPM.
+ */
+uint32_t tpm_clear_and_reenable(void);
+
+/**
+ * Start the TPM and establish the root of trust for the antirollback mechanism.
+ */
+uint32_t setup_tpm(struct vb2_context *ctx);
+
+#endif /* ANTIROLLBACK_H_ */