crypto: move includes to kern/include
authorRonald G. Minnich <rminnich@gmail.com>
Thu, 13 Oct 2016 20:39:03 +0000 (13:39 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Fri, 14 Oct 2016 14:52:45 +0000 (10:52 -0400)
Change-Id: Id9e62496bb6595a7f282dfa26bd1fa1cbdac8bb4
Signed-off-by: Ronald G. Minnich <rminnich@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
36 files changed:
kern/include/crypto/2api.h [new file with mode: 0644]
kern/include/crypto/2common.h [new file with mode: 0644]
kern/include/crypto/2crc8.h [new file with mode: 0644]
kern/include/crypto/2crypto.h [new file with mode: 0644]
kern/include/crypto/2fw_hash_tags.h [new file with mode: 0644]
kern/include/crypto/2hmac.h [new file with mode: 0644]
kern/include/crypto/2id.h [new file with mode: 0644]
kern/include/crypto/2misc.h [new file with mode: 0644]
kern/include/crypto/2nvstorage.h [new file with mode: 0644]
kern/include/crypto/2nvstorage_fields.h [new file with mode: 0644]
kern/include/crypto/2recovery_reasons.h [new file with mode: 0644]
kern/include/crypto/2return_codes.h [new file with mode: 0644]
kern/include/crypto/2rsa.h [new file with mode: 0644]
kern/include/crypto/2secdata.h [new file with mode: 0644]
kern/include/crypto/2sha.h [new file with mode: 0644]
kern/include/crypto/2struct.h [new file with mode: 0644]
kern/include/crypto/2sysincludes.h [new file with mode: 0644]
kern/include/crypto/2tpm_bootmode.h [new file with mode: 0644]
kern/lib/crypto/include/2api.h [deleted file]
kern/lib/crypto/include/2common.h [deleted file]
kern/lib/crypto/include/2crc8.h [deleted file]
kern/lib/crypto/include/2crypto.h [deleted file]
kern/lib/crypto/include/2fw_hash_tags.h [deleted file]
kern/lib/crypto/include/2hmac.h [deleted file]
kern/lib/crypto/include/2id.h [deleted file]
kern/lib/crypto/include/2misc.h [deleted file]
kern/lib/crypto/include/2nvstorage.h [deleted file]
kern/lib/crypto/include/2nvstorage_fields.h [deleted file]
kern/lib/crypto/include/2recovery_reasons.h [deleted file]
kern/lib/crypto/include/2return_codes.h [deleted file]
kern/lib/crypto/include/2rsa.h [deleted file]
kern/lib/crypto/include/2secdata.h [deleted file]
kern/lib/crypto/include/2sha.h [deleted file]
kern/lib/crypto/include/2struct.h [deleted file]
kern/lib/crypto/include/2sysincludes.h [deleted file]
kern/lib/crypto/include/2tpm_bootmode.h [deleted file]

diff --git a/kern/include/crypto/2api.h b/kern/include/crypto/2api.h
new file mode 100644 (file)
index 0000000..e4c6ad0
--- /dev/null
@@ -0,0 +1,661 @@
+/* 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.
+ */
+
+/* APIs between calling firmware and vboot_reference
+ *
+ * General notes:
+ *
+ * TODO: split this file into a vboot_entry_points.h file which contains the
+ * entry points for the firmware to call vboot_reference, and a
+ * vboot_firmware_exports.h which contains the APIs to be implemented by the
+ * calling firmware and exported to vboot_reference.
+ *
+ * Notes:
+ *    * Assumes this code is never called in the S3 resume path.  TPM resume
+ *      must be done elsewhere, and VB2_NV_DEBUG_RESET_MODE is ignored.
+ */
+
+#ifndef VBOOT_2_API_H_
+#define VBOOT_2_API_H_
+#include <stdint.h>
+
+#include "2common.h"
+#include "2crypto.h"
+#include "2fw_hash_tags.h"
+#include "2id.h"
+#include "2recovery_reasons.h"
+#include "2return_codes.h"
+
+/* Size of non-volatile data used by vboot */
+#define VB2_NVDATA_SIZE 16
+
+/* Size of secure data spaces used by vboot */
+#define VB2_SECDATA_SIZE 10
+#define VB2_SECDATAK_SIZE 14
+
+/*
+ * Recommended size of work buffer for firmware verification stage
+ *
+ * TODO: The recommended size really depends on which key algorithms are
+ * used.  Should have a better / more accurate recommendation than this.
+ */
+#define VB2_WORKBUF_RECOMMENDED_SIZE (12 * 1024)
+
+/*
+ * Recommended size of work buffer for kernel verification stage
+ *
+ * This is bigger because vboot 2.0 kernel preambles are usually padded to
+ * 64 KB.
+ *
+ * TODO: The recommended size really depends on which key algorithms are
+ * used.  Should have a better / more accurate recommendation than this.
+ */
+#define VB2_KERNEL_WORKBUF_RECOMMENDED_SIZE (80 * 1024)
+
+/* Recommended buffer size for vb2api_get_pcr_digest */
+#define VB2_PCR_DIGEST_RECOMMENDED_SIZE 32
+
+/* Flags for vb2_context.
+ *
+ * Unless otherwise noted, flags are set by verified boot and may be read (but
+ * not set or cleared) by the caller.
+ */
+enum vb2_context_flags {
+
+       /*
+        * Verified boot has changed nvdata[].  Caller must save nvdata[] back
+        * to its underlying storage, then may clear this flag.
+        */
+       VB2_CONTEXT_NVDATA_CHANGED = (1 << 0),
+
+       /*
+        * Verified boot has changed secdata[].  Caller must save secdata[]
+        * back to its underlying storage, then may clear this flag.
+        */
+       VB2_CONTEXT_SECDATA_CHANGED = (1 << 1),
+
+       /* Recovery mode is requested this boot */
+       VB2_CONTEXT_RECOVERY_MODE = (1 << 2),
+
+       /* Developer mode is requested this boot */
+       VB2_CONTEXT_DEVELOPER_MODE = (1 << 3),
+
+       /*
+        * Force recovery mode due to physical user request.  Caller may set
+        * this flag when initializing the context.
+        */
+       VB2_CONTEXT_FORCE_RECOVERY_MODE = (1 << 4),
+
+       /*
+        * Force developer mode enabled.  Caller may set this flag when
+        * initializing the context.
+        */
+       VB2_CONTEXT_FORCE_DEVELOPER_MODE = (1 << 5),
+
+       /* Using firmware slot B.  If this flag is clear, using slot A. */
+       VB2_CONTEXT_FW_SLOT_B = (1 << 6),
+
+       /* RAM should be cleared by caller this boot */
+       VB2_CONTEXT_CLEAR_RAM = (1 << 7),
+
+       /* Wipeout by the app should be requested. */
+       VB2_CONTEXT_FORCE_WIPEOUT_MODE = (1 << 8),
+
+       /* Erase TPM developer mode state if it is enabled. */
+       VB2_DISABLE_DEVELOPER_MODE = (1 << 9),
+
+       /*
+        * Verified boot has changed secdatak[].  Caller must save secdatak[]
+        * back to its underlying storage, then may clear this flag.
+        */
+       VB2_CONTEXT_SECDATAK_CHANGED = (1 << 10),
+
+       /*
+        * Allow kernel verification to roll forward the version in secdatak[].
+        * Caller may set this flag before calling vb2api_kernel_phase3().
+        */
+       VB2_CONTEXT_ALLOW_KERNEL_ROLL_FORWARD = (1 << 11),
+
+       /* Boot optimistically: don't touch failure counters */
+       VB2_CONTEXT_NOFAIL_BOOT = (1 << 12),
+
+       /*
+        * Secdata is not ready this boot, but should be ready next boot.  It
+        * would like to reboot.  The decision whether to reboot or not must be
+        * deferred until vboot, because rebooting all the time before then
+        * could cause a device with malfunctioning secdata to get stuck in an
+        * unrecoverable crash loop.
+        */
+       VB2_CONTEXT_SECDATA_WANTS_REBOOT = (1 << 13),
+
+       /* Boot is S3->S0 resume, not S5->S0 normal boot */
+       VB2_CONTEXT_S3_RESUME = (1 << 14),
+};
+
+/*
+ * Context for firmware verification.  Pass this to all vboot APIs.
+ *
+ * Caller may relocate this between calls to vboot APIs.
+ */
+struct vb2_context {
+       /**********************************************************************
+        * Fields which must be initialized by caller.
+        */
+
+       /*
+        * Flags; see vb2_context_flags.  Some flags may only be set by caller
+        * prior to calling vboot functions.
+        */
+       uint32_t flags;
+
+       /*
+        * Work buffer, and length in bytes.  Caller may relocate this between
+        * calls to vboot APIs; it contains no internal pointers.  Caller must
+        * not examine the contents of this work buffer directly.
+        */
+       uint8_t *workbuf;
+       uint32_t workbuf_size;
+
+       /*
+        * Non-volatile data.  Caller must fill this from some non-volatile
+        * location.  If the VB2_CONTEXT_NVDATA_CHANGED flag is set when a
+        * vb2api function returns, caller must save the data back to the
+        * non-volatile location and then clear the flag.
+        */
+       uint8_t nvdata[VB2_NVDATA_SIZE];
+
+       /*
+        * Secure data for firmware verification stage.  Caller must fill this
+        * from some secure non-volatile location.  If the
+        * VB2_CONTEXT_SECDATA_CHANGED flag is set when a function returns,
+        * caller must save the data back to the secure non-volatile location
+        * and then clear the flag.
+        */
+       uint8_t secdata[VB2_SECDATA_SIZE];
+
+       /*
+        * Context pointer for use by caller.  Verified boot never looks at
+        * this.  Put context here if you need it for APIs that verified boot
+        * may call (vb2ex_...() functions).
+        */
+       void *non_vboot_context;
+
+       /**********************************************************************
+        * Fields caller may examine after calling vb2api_fw_phase1().  Caller
+         * must set these fields to 0 before calling any vboot functions.
+        */
+
+       /*
+        * Amount of work buffer used so far.  Verified boot sub-calls use
+        * this to know where the unused work area starts.  Caller may use
+        * this between calls to vboot APIs to know how much data must be
+        * copied when relocating the work buffer.
+        */
+       uint32_t workbuf_used;
+
+       /**********************************************************************
+        * Fields caller must initialize before calling vb2api_kernel_phase1().
+        */
+
+       /*
+        * Secure data for kernel verification stage.  Caller must fill this
+        * from some secure non-volatile location.  If the
+        * VB2_CONTEXT_SECDATAK_CHANGED flag is set when a function returns,
+        * caller must save the data back to the secure non-volatile location
+        * and then clear the flag.
+        */
+       uint8_t secdatak[VB2_SECDATAK_SIZE];
+};
+
+/* Resource index for vb2ex_read_resource() */
+enum vb2_resource_index {
+
+       /* Google binary block */
+       VB2_RES_GBB,
+
+       /*
+        * Firmware verified boot block (keyblock+preamble).  Use
+        * VB2_CONTEXT_FW_SLOT_B to determine whether this refers to slot A or
+        * slot B; vboot will set that flag to the proper state before reading
+        * the vblock.
+        */
+       VB2_RES_FW_VBLOCK,
+
+       /*
+        * Kernel verified boot block (keyblock+preamble) for the current
+        * kernel partition.  Used only by vb2api_kernel_load_vblock().
+        * Contents are allowed to change between calls to that function (to
+        * allow multiple kernels to be examined).
+        */
+       VB2_RES_KERNEL_VBLOCK,
+};
+
+/* Digest ID for vbapi_get_pcr_digest() */
+enum vb2_pcr_digest {
+       /* Digest based on current developer and recovery mode flags */
+       BOOT_MODE_PCR,
+
+       /* SHA-256 hash digest of HWID, from GBB */
+       HWID_DIGEST_PCR,
+};
+
+/******************************************************************************
+ * APIs provided by verified boot.
+ *
+ * At a high level, call functions in the order described below.  After each
+ * call, examine vb2_context.flags to determine whether nvdata or secdata
+ * needs to be written.
+ *
+ * If you need to cause the boot process to fail at any point, call
+ * vb2api_fail().  Then check vb2_context.flags to see what data needs to be
+ * written.  Then reboot.
+ *
+ *     Load nvdata from wherever you keep it.
+ *
+ *     Load secdata from wherever you keep it.
+ *
+ *             If it wasn't there at all (for example, this is the first boot
+ *             of a new system in the factory), call vb2api_secdata_create()
+ *             to initialize the data.
+ *
+ *             If access to your storage is unreliable (reads/writes may
+ *             contain corrupt data), you may call vb2api_secdata_check() to
+ *             determine if the data was valid, and retry reading if it
+ *             wasn't.  (In that case, you should also read back and check the
+ *             data after any time you write it, to make sure it was written
+ *             correctly.)
+ *
+ *     Call vb2api_fw_phase1().  At present, this nominally decides whether
+ *     recovery mode is needed this boot.
+ *
+ *     Call vb2api_fw_phase2().  At present, this nominally decides which
+ *     firmware slot will be attempted (A or B).
+ *
+ *     Call vb2api_fw_phase3().  At present, this nominally verifies the
+ *     firmware keyblock and preamble.
+ *
+ *     Lock down wherever you keep secdata.  It should no longer be writable
+ *     this boot.
+ *
+ *     Verify the hash of each section of code/data you need to boot the RW
+ *     firmware.  For each section:
+ *
+ *             Call vb2_init_hash() to see if the hash exists.
+ *
+ *             Load the data for the section.  Call vb2_extend_hash() on the
+ *             data as you load it.  You can load it all at once and make one
+ *             call, or load and hash-extend a block at a time.
+ *
+ *             Call vb2_check_hash() to see if the hash is valid.
+ *
+ *                     If it is valid, you may use the data and/or execute
+ *                     code from that section.
+ *
+ *                     If the hash was invalid, you must reboot.
+ *
+ * At this point, firmware verification is done, and vb2_context contains the
+ * kernel key needed to verify the kernel.  That context should be preserved
+ * and passed on to kernel selection.  The kernel selection process may be
+ * done by the same firmware image, or may be done by the RW firmware.  The
+ * recommended order is:
+ *
+ *     Load secdatak from wherever you keep it.
+ *
+ *             If it wasn't there at all (for example, this is the first boot
+ *             of a new system in the factory), call vb2api_secdatak_create()
+ *             to initialize the data.
+ *
+ *             If access to your storage is unreliable (reads/writes may
+ *             contain corrupt data), you may call vb2api_secdatak_check() to
+ *             determine if the data was valid, and retry reading if it
+ *             wasn't.  (In that case, you should also read back and check the
+ *             data after any time you write it, to make sure it was written
+ *             correctly.)
+ *
+ *     Call vb2api_kernel_phase1().  At present, this decides which key to
+ *     use to verify kernel data - the recovery key from the GBB, or the
+ *     kernel subkey from the firmware verification stage.
+ *
+ *     Kernel phase 2 is finding loading, and verifying the kernel partition.
+ *
+ *     Find a boot device (you're on your own here).
+ *
+ *     Call vb2api_load_kernel_vblock() for each kernel partition on the
+ *     boot device, until one succeeds.
+ *
+ *     When that succeeds, call vb2api_get_kernel_size() to determine where
+ *     the kernel is located in the stream and how big it is.  Load or map
+ *     the kernel.  (Again, you're on your own.  This is the responsibility of
+ *     the caller so that the caller can choose whether to allocate a buffer,
+ *     load the kernel data into a predefined area of RAM, or directly map a
+ *     kernel file into the address space.  Note that technically it doesn't
+ *     matter whether the kernel data is even in the same file or stream as
+ *     the vblock, as long as the caller loads the right data.
+ *
+ *     Call vb2api_verify_kernel_data() on the kernel data.
+ *
+ *     If you ran out of kernels before finding a good one, call vb2api_fail()
+ *     with an appropriate recovery reason.
+ *
+ *     Set the VB2_CONTEXT_ALLOW_KERNEL_ROLL_FORWARD flag if the current
+ *     kernel partition has the successful flag (that is, it's already known
+ *     or assumed to be a functional kernel partition).
+ *
+ *     Call vb2api_kernel_phase3().  This cleans up from kernel verification
+ *     and updates the secure data if needed.
+ *
+ *     Lock down wherever you keep secdatak.  It should no longer be writable
+ *     this boot.
+ */
+
+/**
+ * Sanity-check the contents of the secure storage context.
+ *
+ * Use this if reading from secure storage may be flaky, and you want to retry
+ * reading it several times.
+ *
+ * This may be called before vb2api_phase1().
+ *
+ * @param ctx          Context pointer
+ * @return VB2_SUCCESS, or non-zero error code if error.
+ */
+int vb2api_secdata_check(const struct vb2_context *ctx);
+
+/**
+ * Create fresh data in the secure storage context.
+ *
+ * Use this only when initializing the secure storage context on a new machine
+ * the first time it boots.  Do NOT simply use this if vb2api_secdata_check()
+ * (or any other API in this library) fails; that could allow the secure data
+ * to be rolled back to an insecure state.
+ *
+ * This may be called before vb2api_phase1().
+ *
+ * @param ctx          Context pointer
+ * @return VB2_SUCCESS, or non-zero error code if error.
+ */
+int vb2api_secdata_create(struct vb2_context *ctx);
+
+/**
+ * Sanity-check the contents of the kernel version secure storage context.
+ *
+ * Use this if reading from secure storage may be flaky, and you want to retry
+ * reading it several times.
+ *
+ * This may be called before vb2api_phase1().
+ *
+ * @param ctx          Context pointer
+ * @return VB2_SUCCESS, or non-zero error code if error.
+ */
+int vb2api_secdatak_check(const struct vb2_context *ctx);
+
+/**
+ * Create fresh data in the kernel version secure storage context.
+ *
+ * Use this only when initializing the secure storage context on a new machine
+ * the first time it boots.  Do NOT simply use this if vb2api_secdatak_check()
+ * (or any other API in this library) fails; that could allow the secure data
+ * to be rolled back to an insecure state.
+ *
+ * This may be called before vb2api_phase1().
+ *
+ * @param ctx          Context pointer
+ * @return VB2_SUCCESS, or non-zero error code if error.
+ */
+int vb2api_secdatak_create(struct vb2_context *ctx);
+
+/**
+ * Report firmware failure to vboot.
+ *
+ * This may be called before vb2api_phase1() to indicate errors in the boot
+ * process prior to the start of vboot.
+ *
+ * If this is called after vb2api_phase1(), on return, the calling firmware
+ * should check for updates to secdata and/or nvdata, then reboot.
+ *
+ * @param reason       Recovery reason
+ * @param subcode      Recovery subcode
+ */
+void vb2api_fail(struct vb2_context *ctx, uint8_t reason, uint8_t subcode);
+
+/**
+ * Firmware selection, phase 1.
+ *
+ * If the returned error is VB2_ERROR_API_PHASE1_RECOVERY, the calling firmware
+ * should jump directly to recovery-mode firmware without rebooting.
+ *
+ * For other errors, the calling firmware should check for updates to secdata
+ * and/or nvdata, then reboot.
+ *
+ * @param ctx          Vboot context
+ * @return VB2_SUCCESS, or error code on error.
+ */
+int vb2api_fw_phase1(struct vb2_context *ctx);
+
+/**
+ * Firmware selection, phase 2.
+ *
+ * On error, the calling firmware should check for updates to secdata and/or
+ * nvdata, then reboot.
+ *
+ * @param ctx          Vboot context
+ * @return VB2_SUCCESS, or error code on error.
+ */
+int vb2api_fw_phase2(struct vb2_context *ctx);
+
+/**
+ * Firmware selection, phase 3.
+ *
+ * On error, the calling firmware should check for updates to secdata and/or
+ * nvdata, then reboot.
+ *
+ * On success, the calling firmware should lock down secdata before continuing
+ * with the boot process.
+ *
+ * @param ctx          Vboot context
+ * @return VB2_SUCCESS, or error code on error.
+ */
+int vb2api_fw_phase3(struct vb2_context *ctx);
+
+/**
+ * Same, but for new-style structs.
+ */
+int vb21api_fw_phase3(struct vb2_context *ctx);
+
+/**
+ * Initialize hashing data for the specified tag.
+ *
+ * @param ctx          Vboot context
+ * @param tag          Tag to start hashing (enum vb2_hash_tag)
+ * @param size         If non-null, expected size of data for tag will be
+ *                     stored here on output.
+ * @return VB2_SUCCESS, or error code on error.
+ */
+int vb2api_init_hash(struct vb2_context *ctx, uint32_t tag, uint32_t *size);
+
+/**
+ * Same, but for new-style structs.
+ */
+int vb21api_init_hash(struct vb2_context *ctx,
+                     const struct vb2_id *id,
+                     uint32_t *size);
+
+/**
+ * Extend the hash started by vb2api_init_hash() with additional data.
+ *
+ * (This is the same for both old and new style structs.)
+ *
+ * @param ctx          Vboot context
+ * @param buf          Data to hash
+ * @param size         Size of data in bytes
+ * @return VB2_SUCCESS, or error code on error.
+ */
+int vb2api_extend_hash(struct vb2_context *ctx,
+                      const void *buf,
+                      uint32_t size);
+
+/**
+ * Check the hash value started by vb2api_init_hash().
+ *
+ * @param ctx          Vboot context
+ * @return VB2_SUCCESS, or error code on error.
+ */
+int vb2api_check_hash(struct vb2_context *ctx);
+
+/**
+ * Same, but for new-style structs.
+ */
+int vb21api_check_hash(struct vb2_context *ctx);
+
+/**
+ * Check the hash value started by vb2api_init_hash() while retrieving
+ * calculated digest.
+ *
+ * @param ctx                  Vboot context
+ * @param digest_out           optional pointer to buffer to store digest
+ * @param digest_out_size      optional size of buffer to store digest
+ * @return VB2_SUCCESS, or error code on error.
+ */
+int vb2api_check_hash_get_digest(struct vb2_context *ctx, void *digest_out,
+                                uint32_t digest_out_size);
+
+/**
+ * Get a PCR digest
+ *
+ * @param ctx          Vboot context
+ * @param which_digest PCR index of the digest
+ * @param dest         Destination where the digest is copied.
+ *                     Recommended size is VB2_PCR_DIGEST_RECOMMENDED_SIZE.
+ * @param dest_size    IN: size of the buffer pointed by dest
+ *                     OUT: size of the copied digest
+ * @return VB2_SUCCESS, or error code on error
+ */
+int vb2api_get_pcr_digest(struct vb2_context *ctx,
+                         enum vb2_pcr_digest which_digest,
+                         uint8_t *dest,
+                         uint32_t *dest_size);
+
+/**
+ * Prepare for kernel verification stage.
+ *
+ * Must be called before other vb2api kernel functions.
+ *
+ * @param ctx          Vboot context
+ * @return VB2_SUCCESS, or error code on error.
+ */
+int vb2api_kernel_phase1(struct vb2_context *ctx);
+
+/**
+ * Load the verified boot block (vblock) for a kernel.
+ *
+ * This function may be called multiple times, to load and verify the
+ * vblocks from multiple kernel partitions.
+ *
+ * @param ctx          Vboot context
+ * @param stream       Kernel stream
+ * @return VB2_SUCCESS, or error code on error.
+ */
+int vb2api_load_kernel_vblock(struct vb2_context *ctx);
+
+/**
+ * Get the size and offset of the kernel data for the most recent vblock.
+ *
+ * Valid after a successful call to vb2api_load_kernel_vblock().
+ *
+ * @param ctx          Vboot context
+ * @param offset_ptr   Destination for offset in bytes of kernel data as
+ *                     reported by vblock.
+ * @param size_ptr      Destination for size of kernel data in bytes.
+ * @return VB2_SUCCESS, or error code on error.
+ */
+int vb2api_get_kernel_size(struct vb2_context *ctx,
+                          uint32_t *offset_ptr,
+                          uint32_t *size_ptr);
+
+/**
+ * Verify kernel data using the previously loaded kernel vblock.
+ *
+ * Valid after a successful call to vb2api_load_kernel_vblock().  This allows
+ * the caller to load or map the kernel data, as appropriate, and pass the
+ * pointer to the kernel data into vboot.
+ *
+ * @param ctx          Vboot context
+ * @param buf          Pointer to kernel data
+ * @param size         Size of kernel data in bytes
+ * @return VB2_SUCCESS, or error code on error.
+ */
+int vb2api_verify_kernel_data(struct vb2_context *ctx,
+                             const void *buf,
+                             uint32_t size);
+
+/**
+ * Clean up after kernel verification.
+ *
+ * Call this after successfully loading a vblock and verifying kernel data,
+ * or if you've run out of boot devices and/or kernel partitions.
+ *
+ * This cleans up intermediate data structures in the vboot context, and
+ * updates the version in the secure data if necessary.
+ */
+int vb2api_kernel_phase3(struct vb2_context *ctx);
+
+/*****************************************************************************/
+/* APIs provided by the caller to verified boot */
+
+/**
+ * Clear the TPM owner.
+ *
+ * @param ctx          Vboot context
+ * @return VB2_SUCCESS, or error code on error.
+ */
+int vb2ex_tpm_clear_owner(struct vb2_context *ctx);
+
+/**
+ * Read a verified boot resource.
+ *
+ * @param ctx          Vboot context
+ * @param index                Resource index to read
+ * @param offset       Byte offset within resource to start at
+ * @param buf          Destination for data
+ * @param size         Amount of data to read
+ * @return VB2_SUCCESS, or error code on error.
+ */
+int vb2ex_read_resource(struct vb2_context *ctx,
+                       enum vb2_resource_index index,
+                       uint32_t offset,
+                       void *buf,
+                       uint32_t size);
+
+void vb2ex_printf(const char *func, const char *fmt, ...);
+
+/**
+ * Initialize the hardware crypto engine to calculate a block-style digest.
+ *
+ * @param hash_alg     Hash algorithm to use
+ * @param data_size    Expected total size of data to hash
+ * @return VB2_SUCCESS, or non-zero error code (HWCRYPTO_UNSUPPORTED not fatal).
+ */
+int vb2ex_hwcrypto_digest_init(enum vb2_hash_algorithm hash_alg,
+                              uint32_t data_size);
+
+/**
+ * Extend the hash in the hardware crypto engine with another block of data.
+ *
+ * @param buf          Next data block to hash
+ * @param size         Length of data block in bytes
+ * @return VB2_SUCCESS, or non-zero error code.
+ */
+int vb2ex_hwcrypto_digest_extend(const uint8_t *buf, uint32_t size);
+
+/**
+ * Finalize the digest in the hardware crypto engine and extract the result.
+ *
+ * @param digest       Destination buffer for resulting digest
+ * @param digest_size  Length of digest buffer in bytes
+ * @return VB2_SUCCESS, or non-zero error code.
+ */
+int vb2ex_hwcrypto_digest_finalize(uint8_t *digest, uint32_t digest_size);
+
+#endif  /* VBOOT_2_API_H_ */
diff --git a/kern/include/crypto/2common.h b/kern/include/crypto/2common.h
new file mode 100644 (file)
index 0000000..4622ab1
--- /dev/null
@@ -0,0 +1,197 @@
+/* Copyright (c) 2014 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.
+ *
+ * Common functions between firmware and kernel verified boot.
+ */
+
+#ifndef VBOOT_REFERENCE_VBOOT_2COMMON_H_
+#define VBOOT_REFERENCE_VBOOT_2COMMON_H_
+
+#include "2api.h"
+#include "2return_codes.h"
+#include "2sha.h"
+#include "2struct.h"
+
+struct vb2_public_key;
+
+/*
+ * Return the greater of A and B.  This is used in macros which calculate the
+ * required buffer size, so can't be turned into a static inline function.
+ */
+#ifndef VB2_MAX
+#define VB2_MAX(A, B) ((A) > (B) ? (A) : (B))
+#endif
+
+/* Return the number of elements in an array */
+#ifndef ARRAY_SIZE
+#define ARRAY_SIZE(array) (sizeof(array)/sizeof(array[0]))
+#endif
+
+/* Debug output printf() for tests.  Otherwise, it's platform-dependent. */
+#if defined(VBOOT_DEBUG)
+#  if defined(FOR_TEST)
+#    define VB2_DEBUG(format, args...) printf(format, ## args)
+#  else
+#    define VB2_DEBUG(format, args...) vb2ex_printf(__func__, format, ## args)
+#  endif
+#else
+#  define VB2_DEBUG(format, args...)
+#endif
+
+/*
+ * Alignment for work buffer pointers/allocations should be useful for any
+ * data type. When declaring workbuf buffers on the stack, the caller should
+ * use explicit alignment to avoid run-time errors. For example:
+ *
+ *    int foo(void)
+ *    {
+ *        struct vb2_workbuf wb;
+ *        uint8_t buf[NUM] __attribute__ ((aligned (VB2_WORKBUF_ALIGN)));
+ *        wb.buf = buf;
+ *        wb.size = sizeof(buf);
+ */
+
+/* We might get away with using __alignof__(void *), but since GCC defines a
+ * macro for us we'll be safe and use that. */
+#define VB2_WORKBUF_ALIGN __BIGGEST_ALIGNMENT__
+
+/* Work buffer */
+struct vb2_workbuf {
+       uint8_t *buf;
+       uint32_t size;
+};
+
+/**
+ * Initialize a work buffer.
+ *
+ * @param wb           Work buffer to init
+ * @param buf          Pointer to work buffer data
+ * @param size         Size of work buffer data in bytes
+ */
+void vb2_workbuf_init(struct vb2_workbuf *wb, uint8_t *buf, uint32_t size);
+
+/**
+ * Allocate space in a work buffer.
+ *
+ * Note that the returned buffer will always be aligned to VB2_WORKBUF_ALIGN.
+ *
+ * The work buffer acts like a stack, and detailed tracking of allocs and frees
+ * is not done.  The caller must track the size of each allocation and free via
+ * vb2_workbuf_free() in the reverse order they were allocated.
+ *
+ * An acceptable alternate workflow inside a function is to pass in a const
+ * work buffer, then make a local copy.  Allocations done to the local copy
+ * then don't change the passed-in work buffer, and will effectively be freed
+ * when the local copy goes out of scope.
+ *
+ * @param wb           Work buffer
+ * @param size         Requested size in bytes
+ * @return A pointer to the allocated space, or NULL if error.
+ */
+void *vb2_workbuf_alloc(struct vb2_workbuf *wb, uint32_t size);
+
+/**
+ * Reallocate space in a work buffer.
+ *
+ * Note that the returned buffer will always be aligned to VB2_WORKBUF_ALIGN.
+ * The work buffer acts like a stack, so this must only be done to the most
+ * recently allocated buffer.
+ *
+ * @param wb           Work buffer
+ * @param oldsize      Old allocation size in bytes
+ * @param newsize      Requested size in bytes
+ * @return A pointer to the allocated space, or NULL if error.
+ */
+void *vb2_workbuf_realloc(struct vb2_workbuf *wb,
+                         uint32_t oldsize,
+                         uint32_t newsize);
+
+/**
+ * Free the preceding allocation.
+ *
+ * Note that the work buffer acts like a stack, and detailed tracking of
+ * allocs and frees is not done.  The caller must track the size of each
+ * allocation and free them in reverse order.
+ *
+ * @param wb           Work buffer
+ * @param size         Size of data to free
+ */
+void vb2_workbuf_free(struct vb2_workbuf *wb, uint32_t size);
+
+/* Check if a pointer is aligned on an align-byte boundary */
+#define vb2_aligned(ptr, align) (!(((uintptr_t)(ptr)) & ((align) - 1)))
+
+/**
+ * Safer memcmp() for use in crypto.
+ *
+ * Compares the buffers to see if they are equal.  Time taken to perform
+ * the comparison is dependent only on the size, not the relationship of
+ * the match between the buffers.  Note that unlike memcmp(), this only
+ * indicates inequality, not which buffer is lesser.
+ *
+ * @param s1           First buffer
+ * @param s2           Second buffer
+ * @param size         Number of bytes to compare
+ * @return 0 if match or size=0, non-zero if at least one byte mismatched.
+ */
+int vb2_safe_memcmp(const void *s1, const void *s2, size_t size);
+
+/**
+ * Align a buffer and check its size.
+ *
+ * @param **ptr                Pointer to pointer to align
+ * @param *size                Points to size of buffer pointed to by *ptr
+ * @param align                Required alignment (must be power of 2)
+ * @param want_size    Required size
+ * @return VB2_SUCCESS, or non-zero if error.
+ */
+int vb2_align(uint8_t **ptr,
+             uint32_t *size,
+             uint32_t align,
+             uint32_t want_size);
+
+/**
+ * Return offset of ptr from base.
+ *
+ * @param base         Base pointer
+ * @param ptr          Pointer at some offset from base
+ * @return The offset of ptr from base.
+ */
+ptrdiff_t vb2_offset_of(const void *base, const void *ptr);
+
+/**
+ * Return expected signature size for a signature/hash algorithm pair
+ *
+ * @param sig_alg      Signature algorithm
+ * @param hash_alg     Hash algorithm
+ * @return The signature size, or zero if error / unsupported algorithm.
+ */
+uint32_t vb2_sig_size(enum vb2_signature_algorithm sig_alg,
+                     enum vb2_hash_algorithm hash_alg);
+
+/**
+ * Return a key ID for an unsigned hash algorithm.
+ *
+ * @param hash_alg     Hash algorithm to return key for
+ * @return A pointer to the key ID for that hash algorithm with
+ *        sig_alg=VB2_SIG_NONE, or NULL if error.
+ */
+const struct vb2_id *vb2_hash_id(enum vb2_hash_algorithm hash_alg);
+
+/* Size of work buffer sufficient for vb2_verify_digest() worst case. */
+#define VB2_VERIFY_DIGEST_WORKBUF_BYTES VB2_VERIFY_RSA_DIGEST_WORKBUF_BYTES
+
+/* Size of work buffer sufficient for vb2_verify_data() worst case. */
+#define VB2_VERIFY_DATA_WORKBUF_BYTES                                  \
+       (VB2_SHA512_DIGEST_SIZE +                                       \
+        VB2_MAX(VB2_VERIFY_DIGEST_WORKBUF_BYTES,                       \
+                sizeof(struct vb2_digest_context)))
+
+/* Size of work buffer sufficient for vb2_verify_keyblock() worst case. */
+#define VB2_KEY_BLOCK_VERIFY_WORKBUF_BYTES VB2_VERIFY_DATA_WORKBUF_BYTES
+
+/* Size of work buffer sufficient for vb2_verify_fw_preamble() worst case. */
+#define VB2_VERIFY_FIRMWARE_PREAMBLE_WORKBUF_BYTES VB2_VERIFY_DATA_WORKBUF_BYTES
+
+#endif  /* VBOOT_REFERENCE_VBOOT_2COMMON_H_ */
diff --git a/kern/include/crypto/2crc8.h b/kern/include/crypto/2crc8.h
new file mode 100644 (file)
index 0000000..f01eabd
--- /dev/null
@@ -0,0 +1,20 @@
+/* Copyright (c) 2014 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.
+ *
+ * Very simple 8-bit CRC function.
+ */
+
+#ifndef VBOOT_REFERENCE_2_CRC8_H_
+#define VBOOT_REFERENCE_2_CRC8_H_
+
+/**
+ * Calculate CRC-8 of the data, using x^8 + x^2 + x + 1 polynomial.
+ *
+ * @param data         Data to CRC
+ * @param size         Size of data in bytes
+ * @return CRC-8 of the data.
+ */
+uint8_t vb2_crc8(const void *data, uint32_t size);
+
+#endif /* VBOOT_REFERENCE_2_CRC8_H_ */
diff --git a/kern/include/crypto/2crypto.h b/kern/include/crypto/2crypto.h
new file mode 100644 (file)
index 0000000..c1f225d
--- /dev/null
@@ -0,0 +1,65 @@
+/* Copyright (c) 2014 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.
+ *
+ * Crypto constants for verified boot
+ */
+
+#ifndef VBOOT_REFERENCE_VBOOT_2CRYPTO_H_
+#define VBOOT_REFERENCE_VBOOT_2CRYPTO_H_
+#include <stdint.h>
+
+/* Verified boot crypto algorithms */
+enum vb2_crypto_algorithm {
+       VB2_ALG_RSA1024_SHA1   = 0,
+       VB2_ALG_RSA1024_SHA256 = 1,
+       VB2_ALG_RSA1024_SHA512 = 2,
+       VB2_ALG_RSA2048_SHA1   = 3,
+       VB2_ALG_RSA2048_SHA256 = 4,
+       VB2_ALG_RSA2048_SHA512 = 5,
+       VB2_ALG_RSA4096_SHA1   = 6,
+       VB2_ALG_RSA4096_SHA256 = 7,
+       VB2_ALG_RSA4096_SHA512 = 8,
+       VB2_ALG_RSA8192_SHA1   = 9,
+       VB2_ALG_RSA8192_SHA256 = 10,
+       VB2_ALG_RSA8192_SHA512 = 11,
+
+       /* Number of algorithms */
+       VB2_ALG_COUNT
+};
+
+/* Algorithm types for signatures */
+enum vb2_signature_algorithm {
+       /* Invalid or unsupported signature type */
+       VB2_SIG_INVALID = 0,
+
+       /*
+        * No signature algorithm.  The digest is unsigned.  See
+        * VB2_ID_NONE_* for key IDs to use with this algorithm.
+        */
+       VB2_SIG_NONE = 1,
+
+       /* RSA algorithms of the given length in bits (1024-8192) */
+       VB2_SIG_RSA1024 = 2,  /* Warning!  This is likely to be deprecated! */
+       VB2_SIG_RSA2048 = 3,
+       VB2_SIG_RSA4096 = 4,
+       VB2_SIG_RSA8192 = 5,
+};
+
+/* Algorithm types for hash digests */
+enum vb2_hash_algorithm {
+       /* Invalid or unsupported digest type */
+       VB2_HASH_INVALID = 0,
+
+       /* SHA-1.  Warning: This is likely to be deprecated soon! */
+       VB2_HASH_SHA1 = 1,
+
+       /* SHA-256 and SHA-512 */
+       VB2_HASH_SHA256 = 2,
+       VB2_HASH_SHA512 = 3,
+
+       /* Last index. Don't add anything below. */
+       VB2_HASH_ALG_COUNT,
+};
+
+#endif /* VBOOT_REFERENCE_VBOOT_2CRYPTO_H_ */
diff --git a/kern/include/crypto/2fw_hash_tags.h b/kern/include/crypto/2fw_hash_tags.h
new file mode 100644 (file)
index 0000000..0c061f5
--- /dev/null
@@ -0,0 +1,40 @@
+/* Copyright (c) 2014 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.
+ *
+ * Firmware hash tags for verified boot
+ */
+
+#ifndef VBOOT_REFERENCE_VBOOT_2FW_HASH_TAGS_H_
+#define VBOOT_REFERENCE_VBOOT_2FW_HASH_TAGS_H_
+#include <stdint.h>
+
+/*
+ * Tags for types of hashable data.
+ *
+ * Note that not every firmware image will contain every tag.
+ *
+ * TODO: These are the ones that vboot specifically knows about given the
+ * current data structures.  In the future, I'd really like the vboot preamble
+ * to contain an arbitrary list of tags and their hashes, so that we can hash
+ * ram init, main RW body, EC-RW for software sync, etc. all separately.
+ */
+enum vb2_hash_tag {
+       /* Invalid hash tag; never present in table */
+       VB2_HASH_TAG_INVALID = 0,
+
+       /* Firmware body */
+       VB2_HASH_TAG_FW_BODY = 1,
+
+       /* Kernel data key */
+       VB2_HASH_TAG_KERNEL_DATA_KEY = 2,
+
+       /*
+        * Tags over 0x40000000 are reserved for use by the calling firmware,
+        * which may associate them with arbitrary types of RW firmware data
+        * that it wants to track.
+        */
+       VB2_HASH_TAG_CALLER_BASE = 0x40000000
+};
+
+#endif /* VBOOT_REFERENCE_VBOOT_2FW_HASH_TAGS_H_ */
diff --git a/kern/include/crypto/2hmac.h b/kern/include/crypto/2hmac.h
new file mode 100644 (file)
index 0000000..1df1939
--- /dev/null
@@ -0,0 +1,29 @@
+/* Copyright 2016 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.
+ */
+
+#ifndef VBOOT_REFERENCE_VBOOT_2HMAC_H_
+#define VBOOT_REFERENCE_VBOOT_2HMAC_H_
+
+#include <stdint.h>
+#include "2crypto.h"
+
+/**
+ * Compute HMAC
+ *
+ * @param alg          Hash algorithm ID
+ * @param key          HMAC key
+ * @param key_size     HMAC key size
+ * @param msg          Message to compute HMAC for
+ * @param msg_size     Message size
+ * @param mac          Computed message authentication code
+ * @param mac_size     Size of the buffer pointed by <mac>
+ * @return
+ */
+int hmac(enum vb2_hash_algorithm alg,
+        const void *key, uint32_t key_size,
+        const void *msg, uint32_t msg_size,
+        uint8_t *mac, uint32_t mac_size);
+
+#endif
diff --git a/kern/include/crypto/2id.h b/kern/include/crypto/2id.h
new file mode 100644 (file)
index 0000000..03f6d96
--- /dev/null
@@ -0,0 +1,28 @@
+/* Copyright 2015 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.
+ *
+ * Key ID, used to quickly match keys with signatures. There's not a standard
+ * fingerprint for private keys, so we're using the sha1sum of the public key
+ * in our keyb format. Pretty much anything would work as long as it's
+ * resistant to collisions and easy to compare.
+ */
+
+#ifndef VBOOT_REFERENCE_VBOOT_2ID_H_
+#define VBOOT_REFERENCE_VBOOT_2ID_H_
+#include <stdint.h>
+
+#define VB2_ID_NUM_BYTES 20
+
+struct vb2_id {
+       uint8_t raw[VB2_ID_NUM_BYTES];
+} __attribute__((packed));
+
+#define EXPECTED_ID_SIZE VB2_ID_NUM_BYTES
+
+/* IDs to use for "keys" with sig_alg==VB2_SIG_NONE */
+#define VB2_ID_NONE_SHA1   {{0x00, 0x01,}}
+#define VB2_ID_NONE_SHA256 {{0x02, 0x56,}}
+#define VB2_ID_NONE_SHA512 {{0x05, 0x12,}}
+
+#endif  /* VBOOT_REFERENCE_VBOOT_2ID_H_ */
diff --git a/kern/include/crypto/2misc.h b/kern/include/crypto/2misc.h
new file mode 100644 (file)
index 0000000..f562fad
--- /dev/null
@@ -0,0 +1,166 @@
+/* Copyright (c) 2014 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.
+ *
+ * Misc functions which need access to vb2_context but are not public APIs
+ */
+
+#ifndef VBOOT_REFERENCE_VBOOT_2MISC_H_
+#define VBOOT_REFERENCE_VBOOT_2MISC_H_
+
+#include "2api.h"
+
+struct vb2_gbb_header;
+struct vb2_workbuf;
+
+/**
+ * Get the shared data pointer from the vboot context
+ *
+ * @param ctx          Vboot context
+ * @return The shared data pointer.
+ */
+static __inline struct vb2_shared_data *vb2_get_sd(struct vb2_context *ctx) {
+       return (struct vb2_shared_data *)ctx->workbuf;
+}
+
+/**
+ * Validate gbb signature (the magic number)
+ *
+ * @param sig          Pointer to the signature bytes to validate
+ * @return VB2_SUCCESS if valid or non-zero if error.
+ */
+int vb2_validate_gbb_signature(uint8_t *sig);
+
+/**
+ * Initialize a work buffer from the vboot context.
+ *
+ * This sets the work buffer to the unused portion of the context work buffer.
+ *
+ * @param ctx          Vboot context
+ * @param wb           Work buffer to initialize
+ */
+void vb2_workbuf_from_ctx(struct vb2_context *ctx, struct vb2_workbuf *wb);
+
+/**
+ * Read the GBB header.
+ *
+ * @param ctx          Vboot context
+ * @param gbb          Destination for header
+ * @return VB2_SUCCESS, or non-zero if error.
+ */
+int vb2_read_gbb_header(struct vb2_context *ctx, struct vb2_gbb_header *gbb);
+
+/**
+ * Handle vboot failure.
+ *
+ * If the failure occurred after choosing a firmware slot, and the other
+ * firmware slot is not known-bad, try the other firmware slot after reboot.
+ *
+ * If the failure occurred before choosing a firmware slot, or both slots have
+ * failed in successive boots, request recovery.
+ *
+ * @param reason       Recovery reason
+ * @param subcode      Recovery subcode
+ */
+void vb2_fail(struct vb2_context *ctx, uint8_t reason, uint8_t subcode);
+
+/**
+ * Set up the verified boot context data, if not already set up.
+ *
+ * This uses ctx->workbuf_used=0 as a flag to indicate that the data has not
+ * yet been set up.  Caller must set that before calling any voot functions;
+ * see 2api.h.
+ *
+ * @param ctx          Vboot context to initialize
+ * @return VB2_SUCCESS, or error code on error.
+ */
+int vb2_init_context(struct vb2_context *ctx);
+
+/**
+ * Check for recovery reasons we can determine early in the boot process.
+ *
+ * On exit, check ctx->flags for VB2_CONTEXT_RECOVERY_MODE; if present, jump to
+ * the recovery path instead of continuing with normal boot.  This is the only
+ * direct path to recovery mode.  All other errors later in the boot process
+ * should induce a reboot instead of jumping to recovery, so that recovery mode
+ * starts from a consistent firmware state.
+ *
+ * @param ctx          Vboot context
+ */
+void vb2_check_recovery(struct vb2_context *ctx);
+
+/**
+ * Parse the GBB header.
+ *
+ * @param ctx          Vboot context
+ * @return VB2_SUCCESS, or error code on error.
+ */
+int vb2_fw_parse_gbb(struct vb2_context *ctx);
+
+/**
+ * Check developer switch position.
+ *
+ * @param ctx          Vboot context
+ * @return VB2_SUCCESS, or error code on error.
+ */
+int vb2_check_dev_switch(struct vb2_context *ctx);
+
+/**
+ * Check if we need to clear the TPM owner.
+ *
+ * @param ctx          Vboot context
+ * @return VB2_SUCCESS, or error code on error.
+ */
+int vb2_check_tpm_clear(struct vb2_context *ctx);
+
+/**
+ * Decide which firmware slot to try this boot.
+ *
+ * @param ctx          Vboot context
+ * @return VB2_SUCCESS, or error code on error.
+ */
+int vb2_select_fw_slot(struct vb2_context *ctx);
+
+/**
+ * Verify the firmware keyblock using the root key.
+ *
+ * After this call, the data key is stored in the work buffer.
+ *
+ * @param ctx          Vboot context
+ * @return VB2_SUCCESS, or error code on error.
+ */
+int vb2_load_fw_keyblock(struct vb2_context *ctx);
+int vb21_load_fw_keyblock(struct vb2_context *ctx);
+
+/**
+ * Verify the firmware preamble using the data subkey from the keyblock.
+ *
+ * After this call, the preamble is stored in the work buffer.
+ *
+ * @param ctx          Vboot context
+ * @return VB2_SUCCESS, or error code on error.
+ */
+int vb2_load_fw_preamble(struct vb2_context *ctx);
+int vb21_load_fw_preamble(struct vb2_context *ctx);
+
+/**
+ * Verify the kernel keyblock using the previously-loaded kernel key.
+ *
+ * After this call, the data key is stored in the work buffer.
+ *
+ * @param ctx          Vboot context
+ * @return VB2_SUCCESS, or error code on error.
+ */
+int vb2_load_kernel_keyblock(struct vb2_context *ctx);
+
+/**
+ * Verify the kernel preamble using the data subkey from the keyblock.
+ *
+ * After this call, the preamble is stored in the work buffer.
+ *
+ * @param ctx          Vboot context
+ * @return VB2_SUCCESS, or error code on error.
+ */
+int vb2_load_kernel_preamble(struct vb2_context *ctx);
+
+#endif  /* VBOOT_REFERENCE_VBOOT_2MISC_H_ */
diff --git a/kern/include/crypto/2nvstorage.h b/kern/include/crypto/2nvstorage.h
new file mode 100644 (file)
index 0000000..66a5fdf
--- /dev/null
@@ -0,0 +1,174 @@
+/* Copyright (c) 2014 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.
+ *
+ * Non-volatile storage routines
+ */
+
+#ifndef VBOOT_REFERENCE_VBOOT_2NVSTORAGE_H_
+#define VBOOT_REFERENCE_VBOOT_2NVSTORAGE_H_
+
+enum vb2_nv_param {
+       /*
+        * Parameter values have been reset to defaults (flag for firmware).
+        * 0=clear; 1=set.
+        */
+       VB2_NV_FIRMWARE_SETTINGS_RESET = 0,
+       /*
+        * Parameter values have been reset to defaults (flag for kernel).
+        * 0=clear; 1=set.
+        */
+       VB2_NV_KERNEL_SETTINGS_RESET,
+       /* Request debug reset on next S3->S0 transition.  0=clear; 1=set. */
+       VB2_NV_DEBUG_RESET_MODE,
+       /* Firmware slot to try next.  0=A, 1=B */
+       VB2_NV_TRY_NEXT,
+       /*
+        * Number of times to try booting RW firmware slot B before slot A.
+        * Valid range: 0-15.
+        *
+        * For VB2, number of times to try booting the slot indicated by
+        * VB2_NV_TRY_NEXT.  On a 1->0 transition of try count, VB2_NV_TRY_NEXT
+        * will be set to the other slot.
+        */
+       VB2_NV_TRY_COUNT,
+       /*
+        * Request recovery mode on next boot; see 2recovery_reason.h for
+        * currently defined reason codes.  8-bit value.
+        */
+       VB2_NV_RECOVERY_REQUEST,
+       /*
+        * Localization index for screen bitmaps displayed by firmware.
+        * 8-bit value.
+        */
+       VB2_NV_LOCALIZATION_INDEX,
+       /* Field reserved for kernel/user-mode use; 32-bit value. */
+       VB2_NV_KERNEL_FIELD,
+       /* Allow booting from USB in developer mode.  0=no, 1=yes. */
+       VB2_NV_DEV_BOOT_USB,
+       /* Allow booting of legacy OSes in developer mode.  0=no, 1=yes. */
+       VB2_NV_DEV_BOOT_LEGACY,
+       /* Only boot Google-signed images in developer mode.  0=no, 1=yes. */
+       VB2_NV_DEV_BOOT_SIGNED_ONLY,
+       /*
+        * Allow full fastboot capability in firmware in developer mode.
+        * 0=no, 1=yes.
+        */
+       VB2_NV_DEV_BOOT_FASTBOOT_FULL_CAP,
+       /* Set default boot mode (see vb2_dev_default_boot) */
+       VB2_NV_DEV_DEFAULT_BOOT,
+       /*
+        * Set by userspace to request that RO firmware disable dev-mode on the
+        * next boot. This is likely only possible if the dev-switch is
+        * virtual.
+        */
+       VB2_NV_DISABLE_DEV_REQUEST,
+       /*
+        * Set and cleared by vboot to request that the video Option ROM be
+        * loaded at boot time, so that BIOS screens can be displayed. 0=no,
+        * 1=yes.
+        */
+       VB2_NV_OPROM_NEEDED,
+       /* Request that the firmware clear the TPM owner on the next boot. */
+       VB2_NV_CLEAR_TPM_OWNER_REQUEST,
+       /* Flag that TPM owner was cleared on request. */
+       VB2_NV_CLEAR_TPM_OWNER_DONE,
+       /* TPM requested a reboot already. */
+       VB2_NV_TPM_REQUESTED_REBOOT,
+       /* More details on recovery reason */
+       VB2_NV_RECOVERY_SUBCODE,
+       /* Request that NVRAM be backed up at next boot if possible. */
+       VB2_NV_BACKUP_NVRAM_REQUEST,
+       /* Firmware slot tried this boot (0=A, 1=B) */
+       VB2_NV_FW_TRIED,
+       /* Result of trying that firmware (see vb2_fw_result) */
+       VB2_NV_FW_RESULT,
+       /* Firmware slot tried previous boot (0=A, 1=B) */
+       VB2_NV_FW_PREV_TRIED,
+       /* Result of trying that firmware (see vb2_fw_result) */
+       VB2_NV_FW_PREV_RESULT,
+       /* Request wipeout of the device by the app. */
+       VB2_NV_REQ_WIPEOUT,
+
+       /* Fastboot: Unlock in firmware, 0=disabled, 1=enabled. */
+       VB2_NV_FASTBOOT_UNLOCK_IN_FW,
+       /* Boot system when AC detected (0=no, 1=yes). */
+       VB2_NV_BOOT_ON_AC_DETECT,
+       /* Try to update the EC-RO image after updating the EC-RW image(0=no, 1=yes). */
+       VB2_NV_TRY_RO_SYNC,
+        /* Cut off battery and shutdown on next boot. */
+        VB2_NV_BATTERY_CUTOFF_REQUEST,
+};
+
+/* Set default boot in developer mode */
+enum vb2_dev_default_boot {
+       /* Default to boot from disk*/
+       VB2_DEV_DEFAULT_BOOT_DISK = 0,
+
+       /* Default to boot from USB */
+       VB2_DEV_DEFAULT_BOOT_USB= 1,
+
+       /* Default to boot legacy OS */
+       VB2_DEV_DEFAULT_BOOT_LEGACY = 2,
+
+};
+
+/* Firmware result codes for VB2_NV_FW_RESULT and VB2_NV_FW_PREV_RESULT */
+enum vb2_fw_result {
+       /* Unknown */
+       VB2_FW_RESULT_UNKNOWN = 0,
+
+       /* Trying a new slot, but haven't reached success/failure */
+       VB2_FW_RESULT_TRYING = 1,
+
+       /* Successfully booted to the OS */
+       VB2_FW_RESULT_SUCCESS = 2,
+
+       /* Known failure */
+       VB2_FW_RESULT_FAILURE = 3,
+};
+
+/**
+ * Check the CRC of the non-volatile storage context.
+ *
+ * Use this if reading from non-volatile storage may be flaky, and you want to
+ * retry reading it several times.
+ *
+ * This may be called before vb2_context_init().
+ *
+ * @param ctx          Context pointer
+ * @return VB2_SUCCESS, or non-zero error code if error.
+ */
+int vb2_nv_check_crc(const struct vb2_context *ctx);
+
+/**
+ * Initialize the non-volatile storage context and verify its CRC.
+ *
+ * @param ctx          Context pointer
+ */
+void vb2_nv_init(struct vb2_context *ctx);
+
+/**
+ * Read a non-volatile value.
+ *
+ * @param ctx          Context pointer
+ * @param param                Parameter to read
+ * @return The value of the parameter.  If you somehow force an invalid
+ *         parameter number, returns 0.
+ */
+uint32_t vb2_nv_get(struct vb2_context *ctx, enum vb2_nv_param param);
+
+/**
+ * Write a non-volatile value.
+ *
+ * Ignores writes to unknown params.
+ *
+ * @param ctx          Context pointer
+ * @param param                Parameter to write
+ * @param value                New value
+ */
+void vb2_nv_set(struct vb2_context *ctx,
+               enum vb2_nv_param param,
+               uint32_t value);
+
+#endif  /* VBOOT_REFERENCE_VBOOT_2NVSTORAGE_H_ */
diff --git a/kern/include/crypto/2nvstorage_fields.h b/kern/include/crypto/2nvstorage_fields.h
new file mode 100644 (file)
index 0000000..018bdeb
--- /dev/null
@@ -0,0 +1,79 @@
+/* Copyright 2015 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.
+ *
+ * Non-volatile storage bitfields
+ */
+
+#ifndef VBOOT_REFERENCE_VBOOT_2NVSTORAGE_FIELDS_H_
+#define VBOOT_REFERENCE_VBOOT_2NVSTORAGE_FIELDS_H_
+
+/*
+ * Constants for NV storage.  We use this rather than structs and bitfields so
+ * the data format is consistent across platforms and compilers.  Total NV
+ * storage size is VB2_NVDATA_SIZE = 16 bytes.
+ *
+ * These constants must match the equivalent constants in
+ * lib/vboot_nvstorage.c.  (We currently don't share a common header file
+ * because we're tring to keep the two libs independent, and we hope to
+ * deprecate that one.)
+ */
+
+enum vb2_nv_offset {
+       VB2_NV_OFFS_HEADER = 0,
+       VB2_NV_OFFS_BOOT = 1,
+       VB2_NV_OFFS_RECOVERY = 2,
+       VB2_NV_OFFS_LOCALIZATION = 3,
+       VB2_NV_OFFS_DEV = 4,
+       VB2_NV_OFFS_TPM = 5,
+       VB2_NV_OFFS_RECOVERY_SUBCODE = 6,
+       VB2_NV_OFFS_BOOT2 = 7,
+       VB2_NV_OFFS_MISC = 8,
+       /* Offsets 9-10 are currently unused */
+       VB2_NV_OFFS_KERNEL = 11, /* 11-14; field is 32 bits */
+       /* CRC must be last field */
+       VB2_NV_OFFS_CRC = 15
+ };
+
+/* Fields in VB2_NV_OFFS_HEADER (unused = 0x07) */
+#define VB2_NV_HEADER_WIPEOUT                 0x08
+#define VB2_NV_HEADER_KERNEL_SETTINGS_RESET    0x10
+#define VB2_NV_HEADER_FW_SETTINGS_RESET        0x20
+#define VB2_NV_HEADER_SIGNATURE                0x40
+#define VB2_NV_HEADER_MASK                     0xc0
+
+/* Fields in VB2_NV_OFFS_BOOT */
+#define VB2_NV_BOOT_TRY_COUNT_MASK             0x0f
+#define VB2_NV_BOOT_BACKUP_NVRAM               0x10
+#define VB2_NV_BOOT_OPROM_NEEDED               0x20
+#define VB2_NV_BOOT_DISABLE_DEV                0x40
+#define VB2_NV_BOOT_DEBUG_RESET                0x80
+
+/* Fields in VB2_NV_OFFS_BOOT2 (unused = 0x80) */
+#define VB2_NV_BOOT2_RESULT_MASK               0x03
+#define VB2_NV_BOOT2_TRIED                     0x04
+#define VB2_NV_BOOT2_TRY_NEXT                  0x08
+#define VB2_NV_BOOT2_PREV_RESULT_MASK          0x30
+#define VB2_NV_BOOT2_PREV_RESULT_SHIFT 4  /* Number of bits to shift result */
+#define VB2_NV_BOOT2_PREV_TRIED                0x40
+
+/* Fields in VB2_NV_OFFS_DEV (unused = 0xc0) */
+#define VB2_NV_DEV_FLAG_USB                    0x01
+#define VB2_NV_DEV_FLAG_SIGNED_ONLY            0x02
+#define VB2_NV_DEV_FLAG_LEGACY                 0x04
+#define VB2_NV_DEV_FLAG_FASTBOOT_FULL_CAP      0x08
+#define VB2_NV_DEV_FLAG_DEFAULT_BOOT           0x30
+#define VB2_NV_DEV_DEFAULT_BOOT_SHIFT 4  /* Number of bits to shift */
+
+/* Fields in VB2_NV_OFFS_TPM (unused = 0xf8) */
+#define VB2_NV_TPM_CLEAR_OWNER_REQUEST         0x01
+#define VB2_NV_TPM_CLEAR_OWNER_DONE            0x02
+#define VB2_NV_TPM_REBOOTED                    0x04
+
+/* Fields in VB2_NV_OFFS_MISC (unused = 0xf0) */
+#define VB2_NV_MISC_UNLOCK_FASTBOOT            0x01
+#define VB2_NV_MISC_BOOT_ON_AC_DETECT          0x02
+#define VB2_NV_MISC_TRY_RO_SYNC                       0x04
+#define VB2_NV_MISC_BATTERY_CUTOFF             0x08
+
+#endif  /* VBOOT_REFERENCE_VBOOT_2NVSTORAGE_FIELDS_H_ */
diff --git a/kern/include/crypto/2recovery_reasons.h b/kern/include/crypto/2recovery_reasons.h
new file mode 100644 (file)
index 0000000..13685e6
--- /dev/null
@@ -0,0 +1,227 @@
+/* Copyright (c) 2014 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.
+ *
+ * Recovery reasons
+ */
+
+#ifndef VBOOT_REFERENCE_VBOOT_2RECOVERY_REASONS_H_
+#define VBOOT_REFERENCE_VBOOT_2RECOVERY_REASONS_H_
+
+/* Recovery reason codes */
+enum vb2_nv_recovery {
+       /* Recovery not requested. */
+       VB2_RECOVERY_NOT_REQUESTED = 0x00,
+
+       /*
+        * Recovery requested from legacy utility.  (Prior to the NV storage
+        * spec, recovery mode was a single bitfield; this value is reserved so
+        * that scripts which wrote 1 to the recovery field are distinguishable
+        * from scripts whch use the recovery reasons listed here.
+        */
+       VB2_RECOVERY_LEGACY = 0x01,
+
+       /* User manually requested recovery via recovery button */
+       VB2_RECOVERY_RO_MANUAL = 0x02,
+
+       /*
+        * RW firmware failed signature check (neither RW firmware slot was
+        * valid)
+        */
+       VB2_RECOVERY_RO_INVALID_RW = 0x03,
+
+       /* S3 resume failed */
+       VB2_RECOVERY_RO_S3_RESUME = 0x04,
+
+       /* TPM error in read-only firmware (deprecated) */
+       VB2_RECOVERY_DEP_RO_TPM_ERROR = 0x05,
+
+       /* Shared data error in read-only firmware */
+       VB2_RECOVERY_RO_SHARED_DATA = 0x06,
+
+       /* Test error from S3Resume() */
+       VB2_RECOVERY_RO_TEST_S3 = 0x07,
+
+       /* Test error from LoadFirmwareSetup() (deprecated) */
+       VB2_RECOVERY_RO_TEST_LFS = 0x08,
+
+       /* Test error from LoadFirmware() (deprecated) */
+       VB2_RECOVERY_RO_TEST_LF = 0x09,
+
+       /* Latest tried RW firmware keyblock verification failed */
+       VB2_RECOVERY_FW_KEYBLOCK = 0x13,
+
+       /* Latest tried RW firmware key version too old */
+       VB2_RECOVERY_FW_KEY_ROLLBACK = 0x14,
+
+       /* Latest tried RW firmware preamble verification failed */
+       VB2_RECOVERY_FW_PREAMBLE = 0x16,
+
+       /* Latest tried RW firmware version too old */
+       VB2_RECOVERY_FW_ROLLBACK = 0x17,
+
+       /* Latest tried RW firmware body verification failed */
+       VB2_RECOVERY_FW_BODY = 0x1b,
+
+       /*
+        * Firmware boot failure outside of verified boot (RAM init, missing
+        * SSD, etc.).
+        */
+       VB2_RECOVERY_RO_FIRMWARE = 0x20,
+
+       /*
+        * Recovery mode TPM initialization requires a system reboot.  The
+        * system was already in recovery mode for some other reason when this
+        * happened.
+        */
+       VB2_RECOVERY_RO_TPM_REBOOT = 0x21,
+
+       /* EC software sync - other error */
+       VB2_RECOVERY_EC_SOFTWARE_SYNC = 0x22,
+
+       /* EC software sync - unable to determine active EC image */
+       VB2_RECOVERY_EC_UNKNOWN_IMAGE = 0x23,
+
+       /* EC software sync - error obtaining EC image hash (deprecated) */
+       VB2_RECOVERY_DEP_EC_HASH = 0x24,
+
+       /* EC software sync - error obtaining expected EC image */
+       VB2_RECOVERY_EC_EXPECTED_IMAGE = 0x25,
+
+       /* EC software sync - error updating EC */
+       VB2_RECOVERY_EC_UPDATE = 0x26,
+
+       /* EC software sync - unable to jump to EC-RW */
+       VB2_RECOVERY_EC_JUMP_RW = 0x27,
+
+       /* EC software sync - unable to protect / unprotect EC-RW */
+       VB2_RECOVERY_EC_PROTECT = 0x28,
+
+       /* EC software sync - error obtaining expected EC hash */
+       VB2_RECOVERY_EC_EXPECTED_HASH = 0x29,
+
+       /* EC software sync - expected EC image doesn't match hash */
+       VB2_RECOVERY_EC_HASH_MISMATCH = 0x2a,
+
+       /* New error codes from VB2 */
+       /* TODO: may need to add strings for these in the original fwlib */
+
+       /* Secure data inititalization error */
+       VB2_RECOVERY_SECDATA_INIT = 0x2b,
+
+       /* GBB header is bad */
+       VB2_RECOVERY_GBB_HEADER = 0x2c,
+
+       /* Unable to clear TPM owner */
+       VB2_RECOVERY_TPM_CLEAR_OWNER = 0x2d,
+
+       /* Error determining/updating virtual dev switch */
+       VB2_RECOVERY_DEV_SWITCH = 0x2e,
+
+       /* Error determining firmware slot */
+       VB2_RECOVERY_FW_SLOT = 0x2f,
+
+       /* Unspecified/unknown error in read-only firmware */
+       VB2_RECOVERY_RO_UNSPECIFIED = 0x3f,
+
+       /*
+        * User manually requested recovery by pressing a key at developer
+        * warning screen
+        */
+       VB2_RECOVERY_RW_DEV_SCREEN = 0x41,
+
+       /* No OS kernel detected */
+       VB2_RECOVERY_RW_NO_OS = 0x42,
+
+       /* OS kernel failed signature check */
+       VB2_RECOVERY_RW_INVALID_OS = 0x43,
+
+       /* TPM error in rewritable firmware (deprecated) */
+       VB2_RECOVERY_DEP_RW_TPM_ERROR = 0x44,
+
+       /* RW firmware in dev mode, but dev switch is off */
+       VB2_RECOVERY_RW_DEV_MISMATCH = 0x45,
+
+       /* Shared data error in rewritable firmware */
+       VB2_RECOVERY_RW_SHARED_DATA = 0x46,
+
+       /* Test error from LoadKernel() */
+       VB2_RECOVERY_RW_TEST_LK = 0x47,
+
+       /* No bootable disk found (deprecated)*/
+       VB2_RECOVERY_DEP_RW_NO_DISK = 0x48,
+
+       /* Rebooting did not correct TPM_E_FAIL or TPM_E_FAILEDSELFTEST  */
+       VB2_RECOVERY_TPM_E_FAIL = 0x49,
+
+       /* TPM setup error in read-only firmware */
+       VB2_RECOVERY_RO_TPM_S_ERROR = 0x50,
+
+       /* TPM write error in read-only firmware */
+       VB2_RECOVERY_RO_TPM_W_ERROR = 0x51,
+
+       /* TPM lock error in read-only firmware */
+       VB2_RECOVERY_RO_TPM_L_ERROR = 0x52,
+
+       /* TPM update error in read-only firmware */
+       VB2_RECOVERY_RO_TPM_U_ERROR = 0x53,
+
+       /* TPM read error in rewritable firmware */
+       VB2_RECOVERY_RW_TPM_R_ERROR = 0x54,
+
+       /* TPM write error in rewritable firmware */
+       VB2_RECOVERY_RW_TPM_W_ERROR = 0x55,
+
+       /* TPM lock error in rewritable firmware */
+       VB2_RECOVERY_RW_TPM_L_ERROR = 0x56,
+
+       /* EC software sync unable to get EC image hash */
+       VB2_RECOVERY_EC_HASH_FAILED = 0x57,
+
+       /* EC software sync invalid image hash size */
+       VB2_RECOVERY_EC_HASH_SIZE    = 0x58,
+
+       /* Unspecified error while trying to load kernel */
+       VB2_RECOVERY_LK_UNSPECIFIED  = 0x59,
+
+       /* No bootable storage device in system */
+       VB2_RECOVERY_RW_NO_DISK      = 0x5a,
+
+       /* No bootable kernel found on disk */
+       VB2_RECOVERY_RW_NO_KERNEL    = 0x5b,
+
+       /* BCB related error in RW firmware */
+       VB2_RECOVERY_RW_BCB_ERROR    = 0x5c,
+
+       /* New error codes from VB2 */
+       /* TODO: may need to add strings for these in the original fwlib */
+
+       /* Secure data inititalization error */
+       VB2_RECOVERY_SECDATAK_INIT = 0x5d,
+
+       /* Fastboot mode requested in firmware */
+       VB2_RECOVERY_FW_FASTBOOT     = 0x5e,
+
+       /* Unspecified/unknown error in rewritable firmware */
+       VB2_RECOVERY_RW_UNSPECIFIED  = 0x7f,
+
+       /* DM-verity error */
+       VB2_RECOVERY_KE_DM_VERITY    = 0x81,
+
+       /* Unspecified/unknown error in kernel */
+       VB2_RECOVERY_KE_UNSPECIFIED  = 0xbf,
+
+       /* Recovery mode test from user-mode */
+       VB2_RECOVERY_US_TEST         = 0xc1,
+
+       /* Recovery requested by user-mode via BCB */
+       VB2_RECOVERY_BCB_USER_MODE   = 0xc2,
+
+       /* Fastboot mode requested by user-mode */
+       VB2_RECOVERY_US_FASTBOOT     = 0xc3,
+
+       /* Unspecified/unknown error in user-mode */
+       VB2_RECOVERY_US_UNSPECIFIED  = 0xff,
+};
+
+#endif  /* VBOOT_REFERENCE_VBOOT_2RECOVERY_REASONS_H_ */
diff --git a/kern/include/crypto/2return_codes.h b/kern/include/crypto/2return_codes.h
new file mode 100644 (file)
index 0000000..27b80d1
--- /dev/null
@@ -0,0 +1,773 @@
+/* Copyright (c) 2014 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.
+ */
+
+#ifndef VBOOT_2_RETURN_CODES_H_
+#define VBOOT_2_RETURN_CODES_H_
+
+/*
+ * Return codes from verified boot functions.
+ *
+ * Note that other values may be passed through from vb2ex_*() calls; see
+ * the comment for VB2_ERROR_EX below.
+ */
+enum vb2_return_code {
+       /* Success - no error */
+       VB2_SUCCESS = 0,
+
+       /*
+        * All vboot2 error codes start at a large offset from zero, to reduce
+        * the risk of overlap with other error codes (TPM, etc.).
+        */
+       VB2_ERROR_BASE = 0x10000000,
+
+       /* Unknown / unspecified error */
+       VB2_ERROR_UNKNOWN = VB2_ERROR_BASE + 1,
+
+       /* Mock error for testing */
+       VB2_ERROR_MOCK,
+
+        /**********************************************************************
+        * SHA errors
+        */
+       VB2_ERROR_SHA = VB2_ERROR_BASE + 0x010000,
+
+       /* Bad algorithm in vb2_digest_init() */
+       VB2_ERROR_SHA_INIT_ALGORITHM,
+
+       /* Bad algorithm in vb2_digest_extend() */
+       VB2_ERROR_SHA_EXTEND_ALGORITHM,
+
+       /* Bad algorithm in vb2_digest_finalize() */
+       VB2_ERROR_SHA_FINALIZE_ALGORITHM,
+
+       /* Digest size buffer too small in vb2_digest_finalize() */
+       VB2_ERROR_SHA_FINALIZE_DIGEST_SIZE,
+
+        /**********************************************************************
+        * RSA errors
+        */
+       VB2_ERROR_RSA = VB2_ERROR_BASE + 0x020000,
+
+       /* Padding mismatch in vb2_check_padding() */
+       VB2_ERROR_RSA_PADDING,
+
+       /* Bad algorithm in vb2_check_padding() */
+       VB2_ERROR_RSA_PADDING_ALGORITHM,
+
+       /* Null param passed to vb2_verify_digest() */
+       VB2_ERROR_RSA_VERIFY_PARAM,
+
+       /* Bad algorithm in vb2_verify_digest() */
+       VB2_ERROR_RSA_VERIFY_ALGORITHM,
+
+       /* Bad signature length in vb2_verify_digest() */
+       VB2_ERROR_RSA_VERIFY_SIG_LEN,
+
+       /* Work buffer too small in vb2_verify_digest() */
+       VB2_ERROR_RSA_VERIFY_WORKBUF,
+
+       /* Digest mismatch in vb2_verify_digest() */
+       VB2_ERROR_RSA_VERIFY_DIGEST,
+
+       /* Bad size calculation in vb2_check_padding() */
+       VB2_ERROR_RSA_PADDING_SIZE,
+
+        /**********************************************************************
+        * NV storage errors
+        */
+       VB2_ERROR_NV = VB2_ERROR_BASE + 0x030000,
+
+       /* Bad header in vb2_nv_check_crc() */
+       VB2_ERROR_NV_HEADER,
+
+       /* Bad CRC in vb2_nv_check_crc() */
+       VB2_ERROR_NV_CRC,
+
+        /**********************************************************************
+        * Secure data storage errors
+        */
+       VB2_ERROR_SECDATA = VB2_ERROR_BASE + 0x040000,
+
+       /* Bad CRC in vb2_secdata_check_crc() */
+       VB2_ERROR_SECDATA_CRC,
+
+       /* Secdata is all zeroes (uninitialized) in vb2_secdata_check_crc() */
+       VB2_ERROR_SECDATA_ZERO,
+
+       /* Invalid param in vb2_secdata_get() */
+       VB2_ERROR_SECDATA_GET_PARAM,
+
+       /* Invalid param in vb2_secdata_set() */
+       VB2_ERROR_SECDATA_SET_PARAM,
+
+       /* Invalid flags passed to vb2_secdata_set() */
+       VB2_ERROR_SECDATA_SET_FLAGS,
+
+       /* Called vb2_secdata_get() with uninitialized secdata */
+       VB2_ERROR_SECDATA_GET_UNINITIALIZED,
+
+       /* Called vb2_secdata_set() with uninitialized secdata */
+       VB2_ERROR_SECDATA_SET_UNINITIALIZED,
+
+       /* Bad CRC in vb2_secdatak_check_crc() */
+       VB2_ERROR_SECDATAK_CRC,
+
+       /* Bad struct version in vb2_secdatak_init() */
+       VB2_ERROR_SECDATAK_VERSION,
+
+       /* Bad uid in vb2_secdatak_init() */
+       VB2_ERROR_SECDATAK_UID,
+
+       /* Invalid param in vb2_secdatak_get() */
+       VB2_ERROR_SECDATAK_GET_PARAM,
+
+       /* Invalid param in vb2_secdatak_set() */
+       VB2_ERROR_SECDATAK_SET_PARAM,
+
+       /* Invalid flags passed to vb2_secdatak_set() */
+       VB2_ERROR_SECDATAK_SET_FLAGS,
+
+       /* Called vb2_secdatak_get() with uninitialized secdatak */
+       VB2_ERROR_SECDATAK_GET_UNINITIALIZED,
+
+       /* Called vb2_secdatak_set() with uninitialized secdatak */
+       VB2_ERROR_SECDATAK_SET_UNINITIALIZED,
+
+        /**********************************************************************
+        * Common code errors
+        */
+       VB2_ERROR_COMMON = VB2_ERROR_BASE + 0x050000,
+
+       /* Buffer is smaller than alignment offset in vb2_align() */
+       VB2_ERROR_ALIGN_BIGGER_THAN_SIZE,
+
+       /* Buffer is smaller than request in vb2_align() */
+       VB2_ERROR_ALIGN_SIZE,
+
+       /* Parent wraps around in vb2_verify_member_inside() */
+       VB2_ERROR_INSIDE_PARENT_WRAPS,
+
+       /* Member wraps around in vb2_verify_member_inside() */
+       VB2_ERROR_INSIDE_MEMBER_WRAPS,
+
+       /* Member outside parent in vb2_verify_member_inside() */
+       VB2_ERROR_INSIDE_MEMBER_OUTSIDE,
+
+       /* Member data wraps around in vb2_verify_member_inside() */
+       VB2_ERROR_INSIDE_DATA_WRAPS,
+
+       /* Member data outside parent in vb2_verify_member_inside() */
+       VB2_ERROR_INSIDE_DATA_OUTSIDE,
+
+       /* Unsupported signature algorithm in vb2_unpack_key() */
+       VB2_ERROR_UNPACK_KEY_SIG_ALGORITHM,                      /* 0x150008 */
+
+       /* Bad key size in vb2_unpack_key() */
+       VB2_ERROR_UNPACK_KEY_SIZE,
+
+       /* Bad key alignment in vb2_unpack_key() */
+       VB2_ERROR_UNPACK_KEY_ALIGN,
+
+       /* Bad key array size in vb2_unpack_key() */
+       VB2_ERROR_UNPACK_KEY_ARRAY_SIZE,
+
+       /* Bad algorithm in vb2_verify_data() */
+       VB2_ERROR_VDATA_ALGORITHM,
+
+       /* Incorrect signature size for algorithm in vb2_verify_data() */
+       VB2_ERROR_VDATA_SIG_SIZE,
+
+       /* Data smaller than length of signed data in vb2_verify_data() */
+       VB2_ERROR_VDATA_NOT_ENOUGH_DATA,
+
+       /* Not enough work buffer for digest in vb2_verify_data() */
+       VB2_ERROR_VDATA_WORKBUF_DIGEST,
+
+       /* Not enough work buffer for hash temp data in vb2_verify_data() */
+       VB2_ERROR_VDATA_WORKBUF_HASHING,                         /* 0x150010 */
+
+       /*
+        * Bad digest size in vb2_verify_data() - probably because algorithm
+        * is bad.
+        */
+       VB2_ERROR_VDATA_DIGEST_SIZE,
+
+       /* Unsupported hash algorithm in vb2_unpack_key() */
+       VB2_ERROR_UNPACK_KEY_HASH_ALGORITHM,
+
+       /* Member data overlaps member header */
+       VB2_ERROR_INSIDE_DATA_OVERLAP,
+
+       /* Unsupported packed key struct version */
+       VB2_ERROR_UNPACK_KEY_STRUCT_VERSION,
+
+       /*
+        * Buffer too small for total, fixed size, or description reported in
+        * common header, or member data checked via
+        * vb21_verify_common_member().
+        */
+       VB2_ERROR_COMMON_TOTAL_SIZE,
+       VB2_ERROR_COMMON_FIXED_SIZE,
+       VB2_ERROR_COMMON_DESC_SIZE,
+       VB2_ERROR_COMMON_MEMBER_SIZE,                            /* 0x150018 */
+
+       /*
+        * Total, fixed, description, or member offset/size not a multiple of
+        * 32 bits.
+        */
+       VB2_ERROR_COMMON_TOTAL_UNALIGNED,
+       VB2_ERROR_COMMON_FIXED_UNALIGNED,
+       VB2_ERROR_COMMON_DESC_UNALIGNED,
+       VB2_ERROR_COMMON_MEMBER_UNALIGNED,
+
+       /* Common struct description or member data wraps address space */
+       VB2_ERROR_COMMON_DESC_WRAPS,
+       VB2_ERROR_COMMON_MEMBER_WRAPS,
+
+       /* Common struct description is not null-terminated */
+       VB2_ERROR_COMMON_DESC_TERMINATOR,
+
+       /* Member data overlaps previous data */
+       VB2_ERROR_COMMON_MEMBER_OVERLAP,                         /* 0x150020 */
+
+       /* Signature bad magic number */
+       VB2_ERROR_SIG_MAGIC,
+
+       /* Signature incompatible version */
+       VB2_ERROR_SIG_VERSION,
+
+       /* Signature header doesn't fit */
+       VB2_ERROR_SIG_HEADER_SIZE,
+
+       /* Signature unsupported algorithm */
+       VB2_ERROR_SIG_ALGORITHM,
+
+       /* Signature bad size for algorithm */
+       VB2_ERROR_SIG_SIZE,
+
+       /* Wrong amount of data signed */
+       VB2_ERROR_VDATA_SIZE,
+
+       /* Digest mismatch */
+       VB2_ERROR_VDATA_VERIFY_DIGEST,
+
+       /* Key algorithm doesn't match signature algorithm */
+       VB2_ERROR_VDATA_ALGORITHM_MISMATCH,
+
+       /* Bad magic number in vb2_unpack_key() */
+       VB2_ERROR_UNPACK_KEY_MAGIC,
+
+        /**********************************************************************
+        * Keyblock verification errors (all in vb2_verify_keyblock())
+        */
+       VB2_ERROR_KEYBLOCK = VB2_ERROR_BASE + 0x060000,
+
+       /* Data buffer too small for header */
+       VB2_ERROR_KEYBLOCK_TOO_SMALL_FOR_HEADER,
+
+       /* Magic number not present */
+       VB2_ERROR_KEYBLOCK_MAGIC,
+
+       /* Header version incompatible */
+       VB2_ERROR_KEYBLOCK_HEADER_VERSION,
+
+       /* Data buffer too small for keyblock */
+       VB2_ERROR_KEYBLOCK_SIZE,
+
+       /* Signature data offset outside keyblock */
+       VB2_ERROR_KEYBLOCK_SIG_OUTSIDE,
+
+       /* Signature signed more data than size of keyblock */
+       VB2_ERROR_KEYBLOCK_SIGNED_TOO_MUCH,
+
+       /* Signature signed less data than size of keyblock header */
+       VB2_ERROR_KEYBLOCK_SIGNED_TOO_LITTLE,
+
+       /* Signature invalid */
+       VB2_ERROR_KEYBLOCK_SIG_INVALID,
+
+       /* Data key outside keyblock */
+       VB2_ERROR_KEYBLOCK_DATA_KEY_OUTSIDE,
+
+       /* Data key outside signed part of keyblock */
+       VB2_ERROR_KEYBLOCK_DATA_KEY_UNSIGNED,
+
+       /* Signature signed wrong amount of data */
+       VB2_ERROR_KEYBLOCK_SIGNED_SIZE,
+
+       /* No signature matching key ID */
+       VB2_ERROR_KEYBLOCK_SIG_ID,
+
+        /**********************************************************************
+        * Preamble verification errors (all in vb2_verify_preamble())
+        */
+       VB2_ERROR_PREAMBLE = VB2_ERROR_BASE + 0x070000,
+
+       /* Preamble data too small to contain header */
+       VB2_ERROR_PREAMBLE_TOO_SMALL_FOR_HEADER,
+
+       /* Header version incompatible */
+       VB2_ERROR_PREAMBLE_HEADER_VERSION,
+
+       /* Header version too old */
+       VB2_ERROR_PREAMBLE_HEADER_OLD,
+
+       /* Data buffer too small for preamble */
+       VB2_ERROR_PREAMBLE_SIZE,
+
+       /* Signature data offset outside preamble */
+       VB2_ERROR_PREAMBLE_SIG_OUTSIDE,
+
+       /* Signature signed more data than size of preamble */
+       VB2_ERROR_PREAMBLE_SIGNED_TOO_MUCH,
+
+       /* Signature signed less data than size of preamble header */
+       VB2_ERROR_PREAMBLE_SIGNED_TOO_LITTLE,
+
+       /* Signature invalid */
+       VB2_ERROR_PREAMBLE_SIG_INVALID,
+
+       /* Body signature outside preamble */
+       VB2_ERROR_PREAMBLE_BODY_SIG_OUTSIDE,
+
+       /* Kernel subkey outside preamble */
+       VB2_ERROR_PREAMBLE_KERNEL_SUBKEY_OUTSIDE,
+
+       /* Bad magic number */
+       VB2_ERROR_PREAMBLE_MAGIC,
+
+       /* Hash is signed */
+       VB2_ERROR_PREAMBLE_HASH_SIGNED,
+
+       /* Bootloader outside signed portion of body */
+       VB2_ERROR_PREAMBLE_BOOTLOADER_OUTSIDE,
+
+       /* Vmlinuz header outside signed portion of body */
+       VB2_ERROR_PREAMBLE_VMLINUZ_HEADER_OUTSIDE,
+
+        /**********************************************************************
+        * Misc higher-level code errors
+        */
+       VB2_ERROR_MISC = VB2_ERROR_BASE + 0x080000,
+
+       /* Work buffer too small in vb2_init_context() */
+       VB2_ERROR_INITCTX_WORKBUF_SMALL,
+
+       /* Work buffer unaligned in vb2_init_context() */
+       VB2_ERROR_INITCTX_WORKBUF_ALIGN,
+
+       /* Work buffer too small in vb2_fw_parse_gbb() */
+       VB2_ERROR_GBB_WORKBUF,
+
+       /* Bad magic number in vb2_read_gbb_header() */
+       VB2_ERROR_GBB_MAGIC,
+
+       /* Incompatible version in vb2_read_gbb_header() */
+       VB2_ERROR_GBB_VERSION,
+
+       /* Old version in vb2_read_gbb_header() */
+       VB2_ERROR_GBB_TOO_OLD,
+
+       /* Header size too small in vb2_read_gbb_header() */
+       VB2_ERROR_GBB_HEADER_SIZE,
+
+       /* Work buffer too small for root key in vb2_load_fw_keyblock() */
+       VB2_ERROR_FW_KEYBLOCK_WORKBUF_ROOT_KEY,
+
+       /* Work buffer too small for header in vb2_load_fw_keyblock() */
+       VB2_ERROR_FW_KEYBLOCK_WORKBUF_HEADER,
+
+       /* Work buffer too small for keyblock in vb2_load_fw_keyblock() */
+       VB2_ERROR_FW_KEYBLOCK_WORKBUF,
+
+       /* Keyblock version out of range in vb2_load_fw_keyblock() */
+       VB2_ERROR_FW_KEYBLOCK_VERSION_RANGE,
+
+       /* Keyblock version rollback in vb2_load_fw_keyblock() */
+       VB2_ERROR_FW_KEYBLOCK_VERSION_ROLLBACK,
+
+       /* Missing firmware data key in vb2_load_fw_preamble() */
+       VB2_ERROR_FW_PREAMBLE2_DATA_KEY,
+
+       /* Work buffer too small for header in vb2_load_fw_preamble() */
+       VB2_ERROR_FW_PREAMBLE2_WORKBUF_HEADER,
+
+       /* Work buffer too small for preamble in vb2_load_fw_preamble() */
+       VB2_ERROR_FW_PREAMBLE2_WORKBUF,
+
+       /* Firmware version out of range in vb2_load_fw_preamble() */
+       VB2_ERROR_FW_PREAMBLE_VERSION_RANGE,
+
+       /* Firmware version rollback in vb2_load_fw_preamble() */
+       VB2_ERROR_FW_PREAMBLE_VERSION_ROLLBACK,
+
+       /* Not enough space in work buffer for resource object */
+       VB2_ERROR_READ_RESOURCE_OBJECT_BUF,
+
+       /* Work buffer too small for header in vb2_load_kernel_keyblock() */
+       VB2_ERROR_KERNEL_KEYBLOCK_WORKBUF_HEADER,
+
+       /* Work buffer too small for keyblock in vb2_load_kernel_keyblock() */
+       VB2_ERROR_KERNEL_KEYBLOCK_WORKBUF,
+
+       /* Keyblock version out of range in vb2_load_kernel_keyblock() */
+       VB2_ERROR_KERNEL_KEYBLOCK_VERSION_RANGE,
+
+       /* Keyblock version rollback in vb2_load_kernel_keyblock() */
+       VB2_ERROR_KERNEL_KEYBLOCK_VERSION_ROLLBACK,
+
+       /*
+        * Keyblock flags don't match current mode in
+        * vb2_load_kernel_keyblock().
+        */
+       VB2_ERROR_KERNEL_KEYBLOCK_DEV_FLAG,
+       VB2_ERROR_KERNEL_KEYBLOCK_REC_FLAG,
+
+       /* Missing firmware data key in vb2_load_kernel_preamble() */
+       VB2_ERROR_KERNEL_PREAMBLE2_DATA_KEY,
+
+       /* Work buffer too small for header in vb2_load_kernel_preamble() */
+       VB2_ERROR_KERNEL_PREAMBLE2_WORKBUF_HEADER,
+
+       /* Work buffer too small for preamble in vb2_load_kernel_preamble() */
+       VB2_ERROR_KERNEL_PREAMBLE2_WORKBUF,
+
+       /* Kernel version out of range in vb2_load_kernel_preamble() */
+       VB2_ERROR_KERNEL_PREAMBLE_VERSION_RANGE,
+
+       /* Kernel version rollback in vb2_load_kernel_preamble() */
+       VB2_ERROR_KERNEL_PREAMBLE_VERSION_ROLLBACK,
+
+       /* Kernel preamble not loaded before calling vb2api_get_kernel_size() */
+       VB2_ERROR_API_GET_KERNEL_SIZE_PREAMBLE,
+
+        /**********************************************************************
+        * API-level errors
+        */
+       VB2_ERROR_API = VB2_ERROR_BASE + 0x090000,
+
+       /* Bad tag in vb2api_init_hash() */
+       VB2_ERROR_API_INIT_HASH_TAG,
+
+       /* Preamble not present in vb2api_init_hash() */
+       VB2_ERROR_API_INIT_HASH_PREAMBLE,
+
+       /* Work buffer too small in vb2api_init_hash() */
+       VB2_ERROR_API_INIT_HASH_WORKBUF,
+
+       /* Missing firmware data key in vb2api_init_hash() */
+       VB2_ERROR_API_INIT_HASH_DATA_KEY,
+
+       /* Uninitialized work area in vb2api_extend_hash() */
+       VB2_ERROR_API_EXTEND_HASH_WORKBUF,
+
+       /* Too much data hashed in vb2api_extend_hash() */
+       VB2_ERROR_API_EXTEND_HASH_SIZE,
+
+       /* Preamble not present in vb2api_check_hash() */
+       VB2_ERROR_API_CHECK_HASH_PREAMBLE,
+
+       /* Uninitialized work area in vb2api_check_hash() */
+       VB2_ERROR_API_CHECK_HASH_WORKBUF,
+
+       /* Wrong amount of data hashed in vb2api_check_hash() */
+       VB2_ERROR_API_CHECK_HASH_SIZE,
+
+       /* Work buffer too small in vb2api_check_hash() */
+       VB2_ERROR_API_CHECK_HASH_WORKBUF_DIGEST,
+
+       /* Bad tag in vb2api_check_hash() */
+       VB2_ERROR_API_CHECK_HASH_TAG,
+
+       /* Missing firmware data key in vb2api_check_hash() */
+       VB2_ERROR_API_CHECK_HASH_DATA_KEY,
+
+       /* Signature size mismatch in vb2api_check_hash() */
+       VB2_ERROR_API_CHECK_HASH_SIG_SIZE,
+
+       /* Phase one needs recovery mode */
+       VB2_ERROR_API_PHASE1_RECOVERY,
+
+       /* Bad tag in vb2api_check_hash() */
+       VB2_ERROR_API_INIT_HASH_ID,
+
+       /* Signature mismatch in vb2api_check_hash() */
+       VB2_ERROR_API_CHECK_HASH_SIG,
+
+       /* Invalid enum vb2_pcr_digest requested to vb2api_get_pcr_digest */
+       VB2_ERROR_API_PCR_DIGEST,
+
+       /* Buffer size for the digest is too small for vb2api_get_pcr_digest */
+       VB2_ERROR_API_PCR_DIGEST_BUF,
+
+       /* Work buffer too small for recovery key in vb2api_kernel_phase1() */
+       VB2_ERROR_API_KPHASE1_WORKBUF_REC_KEY,
+
+       /* Firmware preamble not present for vb2api_kernel_phase1() */
+       VB2_ERROR_API_KPHASE1_PREAMBLE,
+
+       /* Wrong amount of kernel data in vb2api_verify_kernel_data() */
+       VB2_ERROR_API_VERIFY_KDATA_SIZE,
+
+       /* Kernel preamble not present for vb2api_verify_kernel_data() */
+       VB2_ERROR_API_VERIFY_KDATA_PREAMBLE,
+
+       /* Insufficient workbuf for hashing in vb2api_verify_kernel_data() */
+       VB2_ERROR_API_VERIFY_KDATA_WORKBUF,
+
+       /* Bad data key in vb2api_verify_kernel_data() */
+       VB2_ERROR_API_VERIFY_KDATA_KEY,
+
+       /* Phase one passing through secdata's request to reboot */
+       VB2_ERROR_API_PHASE1_SECDATA_REBOOT,
+
+       /* Digest buffer passed into vb2api_check_hash incorrect. */
+       VB2_ERROR_API_CHECK_DIGEST_SIZE,
+
+        /**********************************************************************
+        * Errors which may be generated by implementations of vb2ex functions.
+        * Implementation may also return its own specific errors, which should
+        * NOT be in the range VB2_ERROR_BASE...VB2_ERROR_MAX to avoid
+        * conflicting with future vboot2 error codes.
+        */
+       VB2_ERROR_EX = VB2_ERROR_BASE + 0x0a0000,
+
+       /* Read resource not implemented */
+       VB2_ERROR_EX_READ_RESOURCE_UNIMPLEMENTED,
+
+       /* Resource index not found */
+       VB2_ERROR_EX_READ_RESOURCE_INDEX,
+
+       /* Size of resource not big enough for requested offset and/or size */
+       VB2_ERROR_EX_READ_RESOURCE_SIZE,
+
+       /* TPM clear owner failed */
+       VB2_ERROR_EX_TPM_CLEAR_OWNER,
+
+       /* TPM clear owner not implemented */
+       VB2_ERROR_EX_TPM_CLEAR_OWNER_UNIMPLEMENTED,
+
+       /* Hardware crypto engine doesn't support this algorithm (non-fatal) */
+       VB2_ERROR_EX_HWCRYPTO_UNSUPPORTED,
+
+
+        /**********************************************************************
+        * Errors generated by host library (non-firmware) start here.
+        */
+       VB2_ERROR_HOST_BASE = 0x20000000,
+
+        /**********************************************************************
+        * Errors generated by host library misc functions
+        */
+       VB2_ERROR_HOST_MISC = VB2_ERROR_HOST_BASE + 0x010000,
+
+       /* Unable to open file in read_file() */
+       VB2_ERROR_READ_FILE_OPEN,
+
+       /* Bad size in read_file() */
+       VB2_ERROR_READ_FILE_SIZE,
+
+       /* Unable to allocate buffer in read_file() */
+       VB2_ERROR_READ_FILE_ALLOC,
+
+       /* Unable to read data in read_file() */
+       VB2_ERROR_READ_FILE_DATA,
+
+       /* Unable to open file in write_file() */
+       VB2_ERROR_WRITE_FILE_OPEN,
+
+       /* Unable to write data in write_file() */
+       VB2_ERROR_WRITE_FILE_DATA,
+
+       /* Unable to convert string to struct vb_id */
+       VB2_ERROR_STR_TO_ID,
+
+        /**********************************************************************
+        * Errors generated by host library key functions
+        */
+       VB2_ERROR_HOST_KEY = VB2_ERROR_HOST_BASE + 0x020000,
+
+       /* Unable to allocate key  in vb2_private_key_read_pem() */
+       VB2_ERROR_READ_PEM_ALLOC,
+
+       /* Unable to open .pem file in vb2_private_key_read_pem() */
+       VB2_ERROR_READ_PEM_FILE_OPEN,
+
+       /* Bad RSA data from .pem file in vb2_private_key_read_pem() */
+       VB2_ERROR_READ_PEM_RSA,
+
+       /* Unable to set private key description */
+       VB2_ERROR_PRIVATE_KEY_SET_DESC,
+
+       /* Bad magic number in vb2_private_key_unpack() */
+       VB2_ERROR_UNPACK_PRIVATE_KEY_MAGIC,
+
+       /* Bad common header in vb2_private_key_unpack() */
+       VB2_ERROR_UNPACK_PRIVATE_KEY_HEADER,
+
+       /* Bad key data in vb2_private_key_unpack() */
+       VB2_ERROR_UNPACK_PRIVATE_KEY_DATA,
+
+       /* Bad struct version in vb2_private_key_unpack() */
+       VB2_ERROR_UNPACK_PRIVATE_KEY_STRUCT_VERSION,
+
+       /* Unable to allocate buffer in vb2_private_key_unpack() */
+       VB2_ERROR_UNPACK_PRIVATE_KEY_ALLOC,
+
+       /* Unable to unpack RSA key in vb2_private_key_unpack() */
+       VB2_ERROR_UNPACK_PRIVATE_KEY_RSA,
+
+       /* Unable to set description in vb2_private_key_unpack() */
+       VB2_ERROR_UNPACK_PRIVATE_KEY_DESC,
+
+       /* Bad bare hash key in vb2_private_key_unpack() */
+       VB2_ERROR_UNPACK_PRIVATE_KEY_HASH,
+
+       /* Unable to create RSA data in vb2_private_key_write() */
+       VB2_ERROR_PRIVATE_KEY_WRITE_RSA,
+
+       /* Unable to allocate packed key buffer in vb2_private_key_write() */
+       VB2_ERROR_PRIVATE_KEY_WRITE_ALLOC,
+
+       /* Unable to write file in vb2_private_key_write() */
+       VB2_ERROR_PRIVATE_KEY_WRITE_FILE,
+
+       /* Bad algorithm in vb2_private_key_hash() */
+       VB2_ERROR_PRIVATE_KEY_HASH,
+
+       /* Unable to determine key size in vb2_public_key_alloc() */
+       VB2_ERROR_PUBLIC_KEY_ALLOC_SIZE,
+
+       /* Unable to allocate buffer in vb2_public_key_alloc() */
+       VB2_ERROR_PUBLIC_KEY_ALLOC,
+
+       /* Unable to set public key description */
+       VB2_ERROR_PUBLIC_KEY_SET_DESC,
+
+       /* Unable to read key data in vb2_public_key_read_keyb() */
+       VB2_ERROR_READ_KEYB_DATA,
+
+       /* Wrong amount of data read in vb2_public_key_read_keyb() */
+       VB2_ERROR_READ_KEYB_SIZE,
+
+       /* Unable to allocate key buffer in vb2_public_key_read_keyb() */
+       VB2_ERROR_READ_KEYB_ALLOC,
+
+       /* Error unpacking RSA arrays in vb2_public_key_read_keyb() */
+       VB2_ERROR_READ_KEYB_UNPACK,
+
+       /* Unable to read key data in vb2_packed_key_read() */
+       VB2_ERROR_READ_PACKED_KEY_DATA,
+
+       /* Bad key data in vb2_packed_key_read() */
+       VB2_ERROR_READ_PACKED_KEY,
+
+       /* Unable to determine key size in vb2_public_key_pack() */
+       VB2_ERROR_PUBLIC_KEY_PACK_SIZE,
+
+       /* Bad hash algorithm in vb2_public_key_hash() */
+       VB2_ERROR_PUBLIC_KEY_HASH,
+
+       /* Bad key size in vb2_copy_packed_key() */
+       VB2_ERROR_COPY_KEY_SIZE,
+
+       /* Unable to convert back to vb1 crypto algorithm */
+       VB2_ERROR_VB1_CRYPTO_ALGORITHM,
+
+       /* Unable to allocate packed key */
+       VB2_ERROR_PACKED_KEY_ALLOC,
+
+       /* Unable to copy packed key */
+       VB2_ERROR_PACKED_KEY_COPY,
+
+        /**********************************************************************
+        * Errors generated by host library signature functions
+        */
+       VB2_ERROR_HOST_SIG = VB2_ERROR_HOST_BASE + 0x030000,
+
+       /* Bad hash algorithm in vb2_digest_info() */
+       VB2_ERROR_DIGEST_INFO,
+
+       /*
+        * Unable to determine signature size for key algorithm in
+        * vb2_sig_size_for_key().
+        */
+       VB2_ERROR_SIG_SIZE_FOR_KEY,
+
+       /* Bad signature size in vb2_sign_data() */
+       VB2_SIGN_DATA_SIG_SIZE,
+
+       /* Unable to get digest info in vb2_sign_data() */
+       VB2_SIGN_DATA_DIGEST_INFO,
+
+       /* Unable to get digest size in vb2_sign_data() */
+       VB2_SIGN_DATA_DIGEST_SIZE,
+
+       /* Unable to allocate digest buffer in vb2_sign_data() */
+       VB2_SIGN_DATA_DIGEST_ALLOC,
+
+       /* Unable to initialize digest in vb2_sign_data() */
+       VB2_SIGN_DATA_DIGEST_INIT,
+
+       /* Unable to extend digest in vb2_sign_data() */
+       VB2_SIGN_DATA_DIGEST_EXTEND,
+
+       /* Unable to finalize digest in vb2_sign_data() */
+       VB2_SIGN_DATA_DIGEST_FINALIZE,
+
+       /* RSA encrypt failed in vb2_sign_data() */
+       VB2_SIGN_DATA_RSA_ENCRYPT,
+
+       /* Not enough buffer space to hold signature in vb2_sign_object() */
+       VB2_SIGN_OBJECT_OVERFLOW,
+
+        /**********************************************************************
+        * Errors generated by host library keyblock functions
+        */
+       VB2_ERROR_HOST_KEYBLOCK = VB2_ERROR_HOST_BASE + 0x040000,
+
+       /* Unable to determine signature sizes for vb2_create_keyblock() */
+       VB2_KEYBLOCK_CREATE_SIG_SIZE,
+
+       /* Unable to pack data key for vb2_create_keyblock() */
+       VB2_KEYBLOCK_CREATE_DATA_KEY,
+
+       /* Unable to allocate buffer in vb2_create_keyblock() */
+       VB2_KEYBLOCK_CREATE_ALLOC,
+
+       /* Unable to sign keyblock in vb2_create_keyblock() */
+       VB2_KEYBLOCK_CREATE_SIGN,
+
+        /**********************************************************************
+        * Errors generated by host library firmware preamble functions
+        */
+       VB2_ERROR_HOST_FW_PREAMBLE = VB2_ERROR_HOST_BASE + 0x050000,
+
+       /* Unable to determine signature sizes for vb2_create_fw_preamble() */
+       VB2_FW_PREAMBLE_CREATE_SIG_SIZE,
+
+       /* Unable to allocate buffer in vb2_create_fw_preamble() */
+       VB2_FW_PREAMBLE_CREATE_ALLOC,
+
+       /* Unable to sign preamble in vb2_create_fw_preamble() */
+       VB2_FW_PREAMBLE_CREATE_SIGN,
+
+        /**********************************************************************
+        * Errors generated by unit test functions
+        */
+       VB2_ERROR_UNIT_TEST = VB2_ERROR_HOST_BASE + 0x060000,
+
+       /* Unable to open an input file needed for a unit test */
+       VB2_ERROR_TEST_INPUT_FILE,
+
+        /**********************************************************************
+        * Highest non-zero error generated inside vboot library.  Note that
+        * error codes passed through vboot when it calls external APIs may
+        * still be outside this range.
+        */
+       VB2_ERROR_MAX = VB2_ERROR_BASE + 0x1fffffff,
+};
+
+#endif  /* VBOOT_2_RETURN_CODES_H_ */
diff --git a/kern/include/crypto/2rsa.h b/kern/include/crypto/2rsa.h
new file mode 100644 (file)
index 0000000..7e63a6a
--- /dev/null
@@ -0,0 +1,80 @@
+/* Copyright (c) 2014 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.
+ */
+
+#ifndef VBOOT_REFERENCE_2RSA_H_
+#define VBOOT_REFERENCE_2RSA_H_
+
+#include "2crypto.h"
+#include "2struct.h"
+
+struct vb2_workbuf;
+
+/* Public key structure in RAM */
+struct vb2_public_key {
+       uint32_t arrsize;    /* Length of n[] and rr[] in number of uint32_t */
+       uint32_t n0inv;      /* -1 / n[0] mod 2^32 */
+       const uint32_t *n;   /* Modulus as little endian array */
+       const uint32_t *rr;  /* R^2 as little endian array */
+       enum vb2_signature_algorithm sig_alg;   /* Signature algorithm */
+       enum vb2_hash_algorithm hash_alg;       /* Hash algorithm */
+       const char *desc;                       /* Description */
+       uint32_t version;                       /* Key version */
+       const struct vb2_id *id;                /* Key ID */
+};
+
+/**
+ * Convert vb2_crypto_algorithm to vb2_signature_algorithm.
+ *
+ * @param algorithm    Crypto algorithm (vb2_crypto_algorithm)
+ *
+ * @return The signature algorithm for that crypto algorithm, or
+ * VB2_SIG_INVALID if the crypto algorithm or its corresponding signature
+ * algorithm is invalid or not supported.
+ */
+enum vb2_signature_algorithm vb2_crypto_to_signature(uint32_t algorithm);
+
+/**
+ * Return the size of a RSA signature
+ *
+ * @param sig_alg      Signature algorithm
+ * @return The size of the signature in bytes, or 0 if error.
+ */
+uint32_t vb2_rsa_sig_size(enum vb2_signature_algorithm sig_alg);
+
+/**
+ * Return the size of a pre-processed RSA public key.
+ *
+ * @param sig_alg      Signature algorithm
+ * @return The size of the preprocessed key in bytes, or 0 if error.
+ */
+uint32_t vb2_packed_key_size(enum vb2_signature_algorithm sig_alg);
+
+/**
+ * Check pkcs 1.5 padding bytes
+ *
+ * @param sig          Signature to verify
+ * @param key          Key to take signature and hash algorithms from
+ * @return VB2_SUCCESS, or non-zero if error.
+ */
+int vb2_check_padding(const uint8_t *sig, const struct vb2_public_key *key);
+
+/* Size of work buffer sufficient for vb2_rsa_verify_digest() worst case */
+#define VB2_VERIFY_RSA_DIGEST_WORKBUF_BYTES (3 * 1024)
+
+/**
+ * Verify a RSA PKCS1.5 signature against an expected hash digest.
+ *
+ * @param key          Key to use in signature verification
+ * @param sig          Signature to verify (destroyed in process)
+ * @param digest       Digest of signed data
+ * @param wb           Work buffer
+ * @return VB2_SUCCESS, or non-zero if error.
+ */
+int vb2_rsa_verify_digest(const struct vb2_public_key *key,
+                         uint8_t *sig,
+                         const uint8_t *digest,
+                         const struct vb2_workbuf *wb);
+
+#endif  /* VBOOT_REFERENCE_2RSA_H_ */
diff --git a/kern/include/crypto/2secdata.h b/kern/include/crypto/2secdata.h
new file mode 100644 (file)
index 0000000..d27432e
--- /dev/null
@@ -0,0 +1,219 @@
+/* Copyright (c) 2014 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.
+ *
+ * Secure non-volatile storage routines
+ */
+
+#ifndef VBOOT_REFERENCE_VBOOT_SECDATA_H_
+#define VBOOT_REFERENCE_VBOOT_SECDATA_H_
+
+/*****************************************************************************/
+/* Firmware version space */
+
+/* Expected value of vb2_secdata.version */
+#define VB2_SECDATA_VERSION 2
+
+/* Flags for firmware space */
+enum vb2_secdata_flags {
+       /*
+        * Last boot was developer mode.  TPM ownership is cleared when
+        * transitioning to/from developer mode.  Set/cleared by
+        * vb2_check_dev_switch().
+        */
+       VB2_SECDATA_FLAG_LAST_BOOT_DEVELOPER = (1 << 0),
+
+       /*
+        * Virtual developer mode switch is on.  Set/cleared by the
+        * keyboard-controlled dev screens in recovery mode.  Cleared by
+        * vb2_check_dev_switch().
+        */
+       VB2_SECDATA_FLAG_DEV_MODE = (1 << 1),
+};
+
+/* Secure data area (firmware space) */
+struct vb2_secdata {
+       /* Struct version, for backwards compatibility */
+       uint8_t struct_version;
+
+       /* Flags; see vb2_secdata_flags */
+       uint8_t flags;
+
+       /* Firmware versions */
+       uint32_t fw_versions;
+
+       /* Reserved for future expansion */
+       uint8_t reserved[3];
+
+       /* CRC; must be last field in struct */
+       uint8_t crc8;
+} __attribute__((packed));
+
+/* Which param to get/set for vb2_secdata_get() / vb2_secdata_set() */
+enum vb2_secdata_param {
+       /* Flags; see vb2_secdata_flags */
+       VB2_SECDATA_FLAGS = 0,
+
+       /* Firmware versions */
+       VB2_SECDATA_VERSIONS,
+};
+
+/*****************************************************************************/
+/* Kernel version space */
+
+/* Kernel space - KERNEL_NV_INDEX, locked with physical presence. */
+#define VB2_SECDATAK_VERSION 2
+#define VB2_SECDATAK_UID 0x4752574c  /* 'GRWL' */
+
+struct vb2_secdatak {
+       /* Struct version, for backwards compatibility */
+       uint8_t struct_version;
+
+       /* Unique ID to detect space redefinition */
+       uint32_t uid;
+
+       /* Kernel versions */
+       uint32_t kernel_versions;
+
+       /* Reserved for future expansion */
+       uint8_t reserved[3];
+
+       /* CRC; must be last field in struct */
+       uint8_t crc8;
+} __attribute__((packed));
+
+/* Which param to get/set for vb2_secdatak_get() / vb2_secdatak_set() */
+enum vb2_secdatak_param {
+       /* Kernel versions */
+       VB2_SECDATAK_VERSIONS = 0,
+};
+
+/*****************************************************************************/
+/* Firmware version space functions */
+
+/**
+ * Check the CRC of the secure storage context.
+ *
+ * Use this if reading from secure storage may be flaky, and you want to retry
+ * reading it several times.
+ *
+ * This may be called before vb2_context_init().
+ *
+ * @param ctx          Context pointer
+ * @return VB2_SUCCESS, or non-zero error code if error.
+ */
+int vb2_secdata_check_crc(const struct vb2_context *ctx);
+
+/**
+ * Create fresh data in the secure storage context.
+ *
+ * Use this only when initializing the secure storage context on a new machine
+ * the first time it boots.  Do NOT simply use this if vb2_secdata_check_crc()
+ * (or any other API in this library) fails; that could allow the secure data
+ * to be rolled back to an insecure state.
+ *
+ * This may be called before vb2_context_init().
+ */
+int vb2_secdata_create(struct vb2_context *ctx);
+
+/**
+ * Initialize the secure storage context and verify its CRC.
+ *
+ * This must be called before vb2_secdata_get() or vb2_secdata_set().
+ *
+ * @param ctx          Context pointer
+ * @return VB2_SUCCESS, or non-zero error code if error.
+ */
+int vb2_secdata_init(struct vb2_context *ctx);
+
+/**
+ * Read a secure storage value.
+ *
+ * @param ctx          Context pointer
+ * @param param                Parameter to read
+ * @param dest         Destination for value
+ * @return VB2_SUCCESS, or non-zero error code if error.
+ */
+int vb2_secdata_get(struct vb2_context *ctx,
+                   enum vb2_secdata_param param,
+                   uint32_t *dest);
+
+/**
+ * Write a secure storage value.
+ *
+ * @param ctx          Context pointer
+ * @param param                Parameter to write
+ * @param value                New value
+ * @return VB2_SUCCESS, or non-zero error code if error.
+ */
+int vb2_secdata_set(struct vb2_context *ctx,
+                   enum vb2_secdata_param param,
+                   uint32_t value);
+
+/*****************************************************************************/
+/* Kernel version space functions.
+ *
+ * These are separate functions so that they don't bloat the size of the early
+ * boot code which uses the firmware version space functions.
+ */
+
+/**
+ * Check the CRC of the kernel version secure storage context.
+ *
+ * Use this if reading from secure storage may be flaky, and you want to retry
+ * reading it several times.
+ *
+ * This may be called before vb2_context_init().
+ *
+ * @param ctx          Context pointer
+ * @return VB2_SUCCESS, or non-zero error code if error.
+ */
+int vb2_secdatak_check_crc(const struct vb2_context *ctx);
+
+/**
+ * Create fresh data in the secure storage context.
+ *
+ * Use this only when initializing the secure storage context on a new machine
+ * the first time it boots.  Do NOT simply use this if vb2_secdatak_check_crc()
+ * (or any other API in this library) fails; that could allow the secure data
+ * to be rolled back to an insecure state.
+ *
+ * This may be called before vb2_context_init().
+ */
+int vb2_secdatak_create(struct vb2_context *ctx);
+
+/**
+ * Initialize the secure storage context and verify its CRC.
+ *
+ * This must be called before vb2_secdatak_get() or vb2_secdatak_set().
+ *
+ * @param ctx          Context pointer
+ * @return VB2_SUCCESS, or non-zero error code if error.
+ */
+int vb2_secdatak_init(struct vb2_context *ctx);
+
+/**
+ * Read a secure storage value.
+ *
+ * @param ctx          Context pointer
+ * @param param                Parameter to read
+ * @param dest         Destination for value
+ * @return VB2_SUCCESS, or non-zero error code if error.
+ */
+int vb2_secdatak_get(struct vb2_context *ctx,
+                    enum vb2_secdatak_param param,
+                    uint32_t *dest);
+
+/**
+ * Write a secure storage value.
+ *
+ * @param ctx          Context pointer
+ * @param param                Parameter to write
+ * @param value                New value
+ * @return VB2_SUCCESS, or non-zero error code if error.
+ */
+int vb2_secdatak_set(struct vb2_context *ctx,
+                    enum vb2_secdatak_param param,
+                    uint32_t value);
+
+#endif  /* VBOOT_REFERENCE_VBOOT_2SECDATA_H_ */
diff --git a/kern/include/crypto/2sha.h b/kern/include/crypto/2sha.h
new file mode 100644 (file)
index 0000000..38b8a81
--- /dev/null
@@ -0,0 +1,232 @@
+/* Copyright (c) 2014 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.
+ *
+ * These APIs may be called by external firmware as well as vboot.  External
+ * firmware must NOT include this header file directly; instead, define
+ * NEED_VB2_SHA_LIBRARY and include vb2api.h.  This is permissible because the
+ * SHA library routines below don't interact with the rest of vboot.
+ */
+
+#ifndef VBOOT_REFERENCE_2SHA_H_
+#define VBOOT_REFERENCE_2SHA_H_
+
+#include "2crypto.h"
+
+/* Hash algorithms may be disabled individually to save code space */
+
+#ifndef VB2_SUPPORT_SHA1
+#define VB2_SUPPORT_SHA1 1
+#endif
+
+#ifndef VB2_SUPPORT_SHA256
+#define VB2_SUPPORT_SHA256 1
+#endif
+
+#ifndef VB2_SUPPORT_SHA512
+#define VB2_SUPPORT_SHA512 1
+#endif
+
+/* These are set to the biggest values among the supported hash algorithms.
+ * They have to be updated as we add new hash algorithms */
+#define VB2_MAX_DIGEST_SIZE    VB2_SHA512_DIGEST_SIZE
+#define VB2_MAX_BLOCK_SIZE     VB2_SHA512_BLOCK_SIZE
+#define VB2_INVALID_ALG_NAME   "INVALID"
+
+#define VB2_SHA1_DIGEST_SIZE 20
+#define VB2_SHA1_BLOCK_SIZE 64
+#define VB2_SHA1_ALG_NAME      "SHA1"
+
+/* Context structs for hash algorithms */
+
+struct vb2_sha1_context {
+       uint32_t count;
+       uint32_t state[5];
+#if defined(HAVE_ENDIAN_H) && defined(HAVE_LITTLE_ENDIAN)
+       union {
+               uint8_t b[VB2_SHA1_BLOCK_SIZE];
+               uint32_t w[VB2_SHA1_BLOCK_SIZE / sizeof(uint32_t)];
+       } buf;
+#else
+       uint8_t buf[VB2_SHA1_BLOCK_SIZE];
+#endif
+};
+
+#define VB2_SHA256_DIGEST_SIZE 32
+#define VB2_SHA256_BLOCK_SIZE 64
+#define VB2_SHA256_ALG_NAME    "SHA256"
+
+struct vb2_sha256_context {
+       uint32_t h[8];
+       uint32_t total_size;
+       uint32_t size;
+       uint8_t block[2 * VB2_SHA256_BLOCK_SIZE];
+};
+
+#define VB2_SHA512_DIGEST_SIZE 64
+#define VB2_SHA512_BLOCK_SIZE 128
+#define VB2_SHA512_ALG_NAME    "SHA512"
+
+struct vb2_sha512_context {
+       uint64_t h[8];
+       uint32_t total_size;
+       uint32_t size;
+       uint8_t block[2 * VB2_SHA512_BLOCK_SIZE];
+};
+
+/* Hash algorithm independent digest context; includes all of the above. */
+struct vb2_digest_context {
+       /* Context union for all algorithms */
+       union {
+#if VB2_SUPPORT_SHA1
+               struct vb2_sha1_context sha1;
+#endif
+#if VB2_SUPPORT_SHA256
+               struct vb2_sha256_context sha256;
+#endif
+#if VB2_SUPPORT_SHA512
+               struct vb2_sha512_context sha512;
+#endif
+       };
+
+       /* Current hash algorithm */
+       enum vb2_hash_algorithm hash_alg;
+
+       /* 1 if digest is computed with vb2ex_hwcrypto routines, else 0 */
+       int using_hwcrypto;
+};
+
+/**
+ * Initialize a hash context.
+ *
+ * @param ctx          Hash context
+ */
+void vb2_sha1_init(struct vb2_sha1_context *ctx);
+void vb2_sha256_init(struct vb2_sha256_context *ctx);
+void vb2_sha512_init(struct vb2_sha512_context *ctx);
+
+/**
+ * Update (extend) a hash.
+ *
+ * @param ctx          Hash context
+ * @param data         Data to hash
+ * @param size         Length of data in bytes
+ */
+void vb2_sha1_update(struct vb2_sha1_context *ctx,
+                    const uint8_t *data,
+                    uint32_t size);
+void vb2_sha256_update(struct vb2_sha256_context *ctx,
+                      const uint8_t *data,
+                      uint32_t size);
+void vb2_sha512_update(struct vb2_sha512_context *ctx,
+                      const uint8_t *data,
+                      uint32_t size);
+
+/**
+ * Finalize a hash digest.
+ *
+ * @param ctx          Hash context
+ * @param digest       Destination for hash; must be VB_SHA*_DIGEST_SIZE bytes
+ */
+void vb2_sha1_finalize(struct vb2_sha1_context *ctx, uint8_t *digest);
+void vb2_sha256_finalize(struct vb2_sha256_context *ctx, uint8_t *digest);
+void vb2_sha512_finalize(struct vb2_sha512_context *ctx, uint8_t *digest);
+
+/**
+ * Hash-extend data
+ *
+ * @param from Hash to be extended. It has to be the hash size.
+ * @param by   Block to be extended by. It has to be the hash block size.
+ * @param to   Destination for extended data
+ */
+void vb2_sha256_extend(const uint8_t *from, const uint8_t *by, uint8_t *to);
+
+/**
+ * Convert vb2_crypto_algorithm to vb2_hash_algorithm.
+ *
+ * @param algorithm    Crypto algorithm (vb2_crypto_algorithm)
+ *
+ * @return The hash algorithm for that crypto algorithm, or VB2_HASH_INVALID if
+ * the crypto algorithm or its corresponding hash algorithm is invalid or not
+ * supported.
+ */
+enum vb2_hash_algorithm vb2_crypto_to_hash(uint32_t algorithm);
+
+/**
+ * Return the size of the digest for a hash algorithm.
+ *
+ * @param hash_alg     Hash algorithm
+ * @return The size of the digest, or 0 if error.
+ */
+int vb2_digest_size(enum vb2_hash_algorithm hash_alg);
+
+/**
+ * Return the block size of a hash algorithm.
+ *
+ * @param hash_alg     Hash algorithm
+ * @return The block size of the algorithm, or 0 if error.
+ */
+int vb2_hash_block_size(enum vb2_hash_algorithm alg);
+
+/**
+ * Return the name of a hash algorithm
+ *
+ * @param alg  Hash algorithm ID
+ * @return     String containing a hash name or VB2_INVALID_ALG_NAME
+ *             if <alg> is invalid.
+ */
+const char *vb2_get_hash_algorithm_name(enum vb2_hash_algorithm alg);
+
+/**
+ * Initialize a digest context for doing block-style digesting.
+ *
+ * @param dc           Digest context
+ * @param hash_alg     Hash algorithm
+ * @return VB2_SUCCESS, or non-zero on error.
+ */
+int vb2_digest_init(struct vb2_digest_context *dc,
+                   enum vb2_hash_algorithm hash_alg);
+
+/**
+ * Extend a digest's hash with another block of data.
+ *
+ * @param dc           Digest context
+ * @param buf          Data to hash
+ * @param size         Length of data in bytes
+ * @return VB2_SUCCESS, or non-zero on error.
+ */
+int vb2_digest_extend(struct vb2_digest_context *dc,
+                     const uint8_t *buf,
+                     uint32_t size);
+
+/**
+ * Finalize a digest and store the result.
+ *
+ * The destination digest should be at least vb2_digest_size(algorithm).
+ *
+ * @param dc           Digest context
+ * @param digest       Destination for digest
+ * @param digest_size  Length of digest buffer in bytes.
+ * @return VB2_SUCCESS, or non-zero on error.
+ */
+int vb2_digest_finalize(struct vb2_digest_context *dc,
+                       uint8_t *digest,
+                       uint32_t digest_size);
+
+/**
+ * Calculate the digest of a buffer and store the result.
+ *
+ * @param buf          Data to hash
+ * @param size         Length of data in bytes
+ * @param hash_alg     Hash algorithm
+ * @param digest       Destination for digest
+ * @param digest_size  Length of digest buffer in bytes.
+ * @return VB2_SUCCESS, or non-zero on error.
+ */
+int vb2_digest_buffer(const uint8_t *buf,
+                     uint32_t size,
+                     enum vb2_hash_algorithm hash_alg,
+                     uint8_t *digest,
+                     uint32_t digest_size);
+
+#endif  /* VBOOT_REFERENCE_2SHA_H_ */
diff --git a/kern/include/crypto/2struct.h b/kern/include/crypto/2struct.h
new file mode 100644 (file)
index 0000000..da687b0
--- /dev/null
@@ -0,0 +1,347 @@
+/* Copyright (c) 2014 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.
+ *
+ * Data structure definitions for verified boot, for on-disk / in-eeprom
+ * data.
+ */
+
+#ifndef VBOOT_REFERENCE_VBOOT_2STRUCT_H_
+#define VBOOT_REFERENCE_VBOOT_2STRUCT_H_
+#include <stdint.h>
+#include "2crypto.h"
+
+/*
+ * Key block flags.
+ *
+ *The following flags set where the key is valid.  Not used by firmware
+ * verification; only kernel verification.
+ */
+#define VB2_KEY_BLOCK_FLAG_DEVELOPER_0  0x01 /* Developer switch off */
+#define VB2_KEY_BLOCK_FLAG_DEVELOPER_1  0x02 /* Developer switch on */
+#define VB2_KEY_BLOCK_FLAG_RECOVERY_0   0x04 /* Not recovery mode */
+#define VB2_KEY_BLOCK_FLAG_RECOVERY_1   0x08 /* Recovery mode */
+#define VB2_GBB_HWID_DIGEST_SIZE       32
+
+/****************************************************************************/
+
+/* Flags for vb2_shared_data.flags */
+enum vb2_shared_data_flags {
+       /* User has explicitly and physically requested recovery */
+       VB2_SD_FLAG_MANUAL_RECOVERY = (1 << 0),
+
+       /* Developer mode is enabled */
+       /* TODO: should have been VB2_SD_FLAG_DEV_MODE_ENABLED */
+       VB2_SD_DEV_MODE_ENABLED = (1 << 1),
+
+       /*
+        * TODO: might be nice to add flags for why dev mode is enabled - via
+        * gbb, virtual dev switch, or forced on for testing.
+        */
+
+       /* Kernel keyblock was verified by signature (not just hash) */
+       VB2_SD_FLAG_KERNEL_SIGNED = (1 << 2),
+};
+
+/* Flags for vb2_shared_data.status */
+enum vb2_shared_data_status {
+       /* Reinitialized NV data due to invalid checksum */
+       VB2_SD_STATUS_NV_REINIT = (1 << 0),
+
+       /* NV data has been initialized */
+       VB2_SD_STATUS_NV_INIT = (1 << 1),
+
+       /* Secure data initialized */
+       VB2_SD_STATUS_SECDATA_INIT = (1 << 2),
+
+       /* Chose a firmware slot */
+       VB2_SD_STATUS_CHOSE_SLOT = (1 << 3),
+
+       /* Secure data kernel version space initialized */
+       VB2_SD_STATUS_SECDATAK_INIT = (1 << 4),
+};
+
+/*
+ * Data shared between vboot API calls.  Stored at the start of the work
+ * buffer.
+ */
+struct vb2_shared_data {
+       /* Flags; see enum vb2_shared_data_flags */
+       uint32_t flags;
+
+       /* Flags from GBB header */
+       uint32_t gbb_flags;
+
+       /*
+        * Reason we are in recovery mode this boot (enum vb2_nv_recovery), or
+        * 0 if we aren't.
+        */
+       uint32_t recovery_reason;
+
+       /* Firmware slot used last boot (0=A, 1=B) */
+       uint32_t last_fw_slot;
+
+       /* Result of last boot (enum vb2_fw_result) */
+       uint32_t last_fw_result;
+
+       /* Firmware slot used this boot */
+       uint32_t fw_slot;
+
+       /*
+        * Version for this slot (top 16 bits = key, lower 16 bits = firmware).
+        *
+        * TODO: Make this a union to allow getting/setting those versions
+        * separately?
+        */
+       uint32_t fw_version;
+
+       /* Version stored in secdata (must be <= fw_version to boot). */
+       uint32_t fw_version_secdata;
+
+       /*
+        * Status flags for this boot; see enum vb2_shared_data_status.  Status
+        * is "what we've done"; flags above are "decisions we've made".
+        */
+       uint32_t status;
+
+       /**********************************************************************
+        * Data from kernel verification stage.
+        *
+        * TODO: shouldn't be part of the main struct, since that needlessly
+        * uses more memory during firmware verification.
+        */
+
+       /*
+        * Version for the current kernel (top 16 bits = key, lower 16 bits =
+        * kernel preamble).
+        *
+        * TODO: Make this a union to allow getting/setting those versions
+        * separately?
+        */
+       uint32_t kernel_version;
+
+       /* Kernel version from secdatak (must be <= kernel_version to boot) */
+       uint32_t kernel_version_secdatak;
+
+       /**********************************************************************
+        * Temporary variables used during firmware verification.  These don't
+        * really need to persist through to the OS, but there's nowhere else
+        * we can put them.
+        */
+
+       /* Root key offset and size from GBB header */
+       uint32_t gbb_rootkey_offset;
+       uint32_t gbb_rootkey_size;
+
+       /* HWID digest from GBB header */
+       uint8_t gbb_hwid_digest[VB2_GBB_HWID_DIGEST_SIZE];
+
+       /* Offset of preamble from start of vblock */
+       uint32_t vblock_preamble_offset;
+
+       /*
+        * Offset and size of packed data key in work buffer.  Size is 0 if
+        * data key is not stored in the work buffer.
+        */
+       uint32_t workbuf_data_key_offset;
+       uint32_t workbuf_data_key_size;
+
+       /*
+        * Offset and size of firmware preamble in work buffer.  Size is 0 if
+        * preamble is not stored in the work buffer.
+        */
+       uint32_t workbuf_preamble_offset;
+       uint32_t workbuf_preamble_size;
+
+       /*
+        * Offset and size of hash context in work buffer.  Size is 0 if
+        * hash context is not stored in the work buffer.
+        */
+       uint32_t workbuf_hash_offset;
+       uint32_t workbuf_hash_size;
+
+       /*
+        * Current tag we're hashing
+        *
+        * For new structs, this is the offset of the vb2_signature struct
+        * in the work buffer.
+        *
+        * TODO: rename to workbuf_hash_sig_offset when vboot1 structs are
+        * deprecated.
+        */
+       uint32_t hash_tag;
+
+       /* Amount of data we still expect to hash */
+       uint32_t hash_remaining_size;
+
+       /**********************************************************************
+        * Temporary variables used during kernel verification.  These don't
+        * really need to persist through to the OS, but there's nowhere else
+        * we can put them.
+        *
+        * TODO: make a union with the firmware verification temp variables,
+        * or make both of them workbuf-allocated sub-structs, so that we can
+        * overlap them so kernel variables don't bloat firmware verification
+        * stage memory requirements.
+        */
+
+       /*
+        * Offset and size of packed kernel key in work buffer.  Size is 0 if
+        * subkey is not stored in the work buffer.  Note that kernel key may
+        * be inside the firmware preamble.
+        */
+       uint32_t workbuf_kernel_key_offset;
+       uint32_t workbuf_kernel_key_size;
+
+} __attribute__((packed));
+
+/****************************************************************************/
+
+/* Signature at start of the GBB
+ * Note that if you compile in the signature as is, you are likely to break any
+ * tools that search for the signature. */
+#define VB2_GBB_SIGNATURE "$GBB"
+#define VB2_GBB_SIGNATURE_SIZE 4
+#define VB2_GBB_XOR_CHARS "****"
+/* TODO: can we write a macro to produce this at compile time? */
+#define VB2_GBB_XOR_SIGNATURE { 0x0e, 0x6d, 0x68, 0x68 }
+
+/* VB2 GBB struct version */
+#define VB2_GBB_MAJOR_VER      1
+#define VB2_GBB_MINOR_VER      2
+/* v1.2 - added fields for sha256 digest of the HWID */
+
+/* Flags for vb2_gbb_header.flags */
+enum vb2_gbb_flag {
+       /*
+        * Reduce the dev screen delay to 2 sec from 30 sec to speed up
+        * factory.
+        */
+       VB2_GBB_FLAG_DEV_SCREEN_SHORT_DELAY = (1 << 0),
+
+       /*
+        * BIOS should load option ROMs from arbitrary PCI devices. We'll never
+        * enable this ourselves because it executes non-verified code, but if
+        * a customer wants to void their warranty and set this flag in the
+        * read-only flash, they should be able to do so.
+        *
+        * (TODO: Currently not supported. Mark as deprecated/unused?)
+        */
+       VB2_GBB_FLAG_LOAD_OPTION_ROMS = (1 << 1),
+
+       /*
+        * The factory flow may need the BIOS to boot a non-ChromeOS kernel if
+        * the dev-switch is on. This flag allows that.
+        *
+        * (TODO: Currently not supported. Mark as deprecated/unused?)
+        */
+       VB2_GBB_FLAG_ENABLE_ALTERNATE_OS = (1 << 2),
+
+       /*
+        * Force dev switch on, regardless of physical/keyboard dev switch
+        * position.
+        */
+       VB2_GBB_FLAG_FORCE_DEV_SWITCH_ON = (1 << 3),
+
+       /* Allow booting from USB in dev mode even if dev_boot_usb=0. */
+       VB2_GBB_FLAG_FORCE_DEV_BOOT_USB = (1 << 4),
+
+       /* Disable firmware rollback protection. */
+       VB2_GBB_FLAG_DISABLE_FW_ROLLBACK_CHECK = (1 << 5),
+
+       /* Allow Enter key to trigger dev->tonorm screen transition */
+       VB2_GBB_FLAG_ENTER_TRIGGERS_TONORM = (1 << 6),
+
+       /* Allow booting Legacy OSes in dev mode even if dev_boot_legacy=0. */
+       VB2_GBB_FLAG_FORCE_DEV_BOOT_LEGACY = (1 << 7),
+
+       /* Allow booting using alternate keys for FAFT servo testing */
+       VB2_GBB_FLAG_FAFT_KEY_OVERIDE = (1 << 8),
+
+       /* Disable EC software sync */
+       VB2_GBB_FLAG_DISABLE_EC_SOFTWARE_SYNC = (1 << 9),
+
+       /* Default to booting legacy OS when dev screen times out */
+       VB2_GBB_FLAG_DEFAULT_DEV_BOOT_LEGACY = (1 << 10),
+
+       /* Disable PD software sync */
+       VB2_GBB_FLAG_DISABLE_PD_SOFTWARE_SYNC = (1 << 11),
+
+       /* Disable shutdown on lid closed */
+       VB2_GBB_FLAG_DISABLE_LID_SHUTDOWN = (1 << 12),
+
+       /*
+        * Allow full fastboot capability in firmware even if
+        * dev_boot_fastboot_full_cap=0.
+        */
+       VB2_GBB_FLAG_FORCE_DEV_BOOT_FASTBOOT_FULL_CAP = (1 << 13),
+
+       /* Enable serial */
+       VB2_GBB_FLAG_ENABLE_SERIAL = (1 << 14),
+};
+
+struct vb2_gbb_header {
+       /* Fields present in version 1.1 */
+       uint8_t  signature[VB2_GBB_SIGNATURE_SIZE]; /* VB2_GBB_SIGNATURE */
+       uint16_t major_version;   /* See VB2_GBB_MAJOR_VER */
+       uint16_t minor_version;   /* See VB2_GBB_MINOR_VER */
+       uint32_t header_size;     /* Size of GBB header in bytes */
+       uint32_t flags;           /* Flags (see enum vb2_gbb_flag) */
+
+       /* Offsets (from start of header) and sizes (in bytes) of components */
+       uint32_t hwid_offset;           /* HWID */
+       uint32_t hwid_size;
+       uint32_t rootkey_offset;        /* Root key */
+       uint32_t rootkey_size;
+       uint32_t bmpfv_offset;          /* BMP FV */
+       uint32_t bmpfv_size;
+       uint32_t recovery_key_offset;   /* Recovery key */
+       uint32_t recovery_key_size;
+
+       /* Added in version 1.2 */
+       uint8_t  hwid_digest[VB2_GBB_HWID_DIGEST_SIZE]; /* SHA-256 of HWID */
+
+       /* Pad to match EXPECETED_VB2_GBB_HEADER_SIZE.  Initialize to 0. */
+       uint8_t  pad[48];
+} __attribute__((packed));
+
+/* The GBB is used outside of vboot_reference, so this size is important. */
+#define EXPECTED_VB2_GBB_HEADER_SIZE 128
+
+/*
+ * Root key hash for Ryu devices only.  Contains the hash of the root key.
+ * This will be embedded somewhere inside the RO part of the firmware, so that
+ * it can verify the GBB contains only the official root key.
+ */
+
+#define RYU_ROOT_KEY_HASH_MAGIC "RtKyHash"
+#define RYU_ROOT_KEY_HASH_MAGIC_INVCASE "rTkYhASH"
+#define RYU_ROOT_KEY_HASH_MAGIC_SIZE 8
+
+#define RYU_ROOT_KEY_HASH_VERSION_MAJOR 1
+#define RYU_ROOT_KEY_HASH_VERSION_MINOR 0
+
+struct vb2_ryu_root_key_hash {
+       /* Magic number (RYU_ROOT_KEY_HASH_MAGIC) */
+       uint8_t magic[RYU_ROOT_KEY_HASH_MAGIC_SIZE];
+
+       /* Version of this struct */
+       uint16_t header_version_major;
+       uint16_t header_version_minor;
+
+       /*
+        * Length of this struct, in bytes, including any variable length data
+        * which follows (there is none, yet).
+        */
+       uint32_t struct_size;
+
+       /*
+        * SHA-256 hash digest of the entire root key section from the GBB.  If
+        * all 0 bytes, all root keys will be treated as if matching.
+        */
+       uint8_t root_key_hash_digest[32];
+};
+
+#define EXPECTED_VB2_RYU_ROOT_KEY_HASH_SIZE 48
+
+#endif  /* VBOOT_REFERENCE_VBOOT_2STRUCT_H_ */
diff --git a/kern/include/crypto/2sysincludes.h b/kern/include/crypto/2sysincludes.h
new file mode 100644 (file)
index 0000000..4c9e66c
--- /dev/null
@@ -0,0 +1,27 @@
+/* Copyright (c) 2014 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.
+ */
+
+/*
+ * System includes for vboot reference library.  With few exceptions, this is
+ * the ONLY place in firmware/ where system headers may be included via
+ * #include <...>, so that there's only one place that needs to be fixed up for
+ * platforms which don't have all the system includes.
+ */
+
+#ifndef VBOOT_REFERENCE_2_SYSINCLUDES_H_
+#define VBOOT_REFERENCE_2_SYSINCLUDES_H_
+
+#include <inttypes.h>  /* For PRIu64 */
+#include <stddef.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+
+#if defined(HAVE_ENDIAN_H) && defined(HAVE_LITTLE_ENDIAN)
+#include <byteswap.h>
+#include <memory.h>
+#endif
+
+#endif  /* VBOOT_REFERENCE_2_SYSINCLUDES_H_ */
diff --git a/kern/include/crypto/2tpm_bootmode.h b/kern/include/crypto/2tpm_bootmode.h
new file mode 100644 (file)
index 0000000..63f247d
--- /dev/null
@@ -0,0 +1,21 @@
+/* Copyright 2015 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 updating the TPM state with the status of boot path.
+ */
+
+#ifndef VBOOT_REFERENCE_2TPM_BOOTMODE_H_
+#define VBOOT_REFERENCE_2TPM_BOOTMODE_H_
+
+#include "2api.h"
+
+/**
+ * Return digest indicating the boot state
+ *
+ * @param ctx          Vboot context
+ * @return             Pointer to sha1 digest of size VB2_SHA1_DIGEST_SIZE
+ */
+const uint8_t *vb2_get_boot_state_digest(struct vb2_context *ctx);
+
+#endif  /* VBOOT_REFERENCE_2TPM_BOOTMODE_H_ */
diff --git a/kern/lib/crypto/include/2api.h b/kern/lib/crypto/include/2api.h
deleted file mode 100644 (file)
index e4c6ad0..0000000
+++ /dev/null
@@ -1,661 +0,0 @@
-/* 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.
- */
-
-/* APIs between calling firmware and vboot_reference
- *
- * General notes:
- *
- * TODO: split this file into a vboot_entry_points.h file which contains the
- * entry points for the firmware to call vboot_reference, and a
- * vboot_firmware_exports.h which contains the APIs to be implemented by the
- * calling firmware and exported to vboot_reference.
- *
- * Notes:
- *    * Assumes this code is never called in the S3 resume path.  TPM resume
- *      must be done elsewhere, and VB2_NV_DEBUG_RESET_MODE is ignored.
- */
-
-#ifndef VBOOT_2_API_H_
-#define VBOOT_2_API_H_
-#include <stdint.h>
-
-#include "2common.h"
-#include "2crypto.h"
-#include "2fw_hash_tags.h"
-#include "2id.h"
-#include "2recovery_reasons.h"
-#include "2return_codes.h"
-
-/* Size of non-volatile data used by vboot */
-#define VB2_NVDATA_SIZE 16
-
-/* Size of secure data spaces used by vboot */
-#define VB2_SECDATA_SIZE 10
-#define VB2_SECDATAK_SIZE 14
-
-/*
- * Recommended size of work buffer for firmware verification stage
- *
- * TODO: The recommended size really depends on which key algorithms are
- * used.  Should have a better / more accurate recommendation than this.
- */
-#define VB2_WORKBUF_RECOMMENDED_SIZE (12 * 1024)
-
-/*
- * Recommended size of work buffer for kernel verification stage
- *
- * This is bigger because vboot 2.0 kernel preambles are usually padded to
- * 64 KB.
- *
- * TODO: The recommended size really depends on which key algorithms are
- * used.  Should have a better / more accurate recommendation than this.
- */
-#define VB2_KERNEL_WORKBUF_RECOMMENDED_SIZE (80 * 1024)
-
-/* Recommended buffer size for vb2api_get_pcr_digest */
-#define VB2_PCR_DIGEST_RECOMMENDED_SIZE 32
-
-/* Flags for vb2_context.
- *
- * Unless otherwise noted, flags are set by verified boot and may be read (but
- * not set or cleared) by the caller.
- */
-enum vb2_context_flags {
-
-       /*
-        * Verified boot has changed nvdata[].  Caller must save nvdata[] back
-        * to its underlying storage, then may clear this flag.
-        */
-       VB2_CONTEXT_NVDATA_CHANGED = (1 << 0),
-
-       /*
-        * Verified boot has changed secdata[].  Caller must save secdata[]
-        * back to its underlying storage, then may clear this flag.
-        */
-       VB2_CONTEXT_SECDATA_CHANGED = (1 << 1),
-
-       /* Recovery mode is requested this boot */
-       VB2_CONTEXT_RECOVERY_MODE = (1 << 2),
-
-       /* Developer mode is requested this boot */
-       VB2_CONTEXT_DEVELOPER_MODE = (1 << 3),
-
-       /*
-        * Force recovery mode due to physical user request.  Caller may set
-        * this flag when initializing the context.
-        */
-       VB2_CONTEXT_FORCE_RECOVERY_MODE = (1 << 4),
-
-       /*
-        * Force developer mode enabled.  Caller may set this flag when
-        * initializing the context.
-        */
-       VB2_CONTEXT_FORCE_DEVELOPER_MODE = (1 << 5),
-
-       /* Using firmware slot B.  If this flag is clear, using slot A. */
-       VB2_CONTEXT_FW_SLOT_B = (1 << 6),
-
-       /* RAM should be cleared by caller this boot */
-       VB2_CONTEXT_CLEAR_RAM = (1 << 7),
-
-       /* Wipeout by the app should be requested. */
-       VB2_CONTEXT_FORCE_WIPEOUT_MODE = (1 << 8),
-
-       /* Erase TPM developer mode state if it is enabled. */
-       VB2_DISABLE_DEVELOPER_MODE = (1 << 9),
-
-       /*
-        * Verified boot has changed secdatak[].  Caller must save secdatak[]
-        * back to its underlying storage, then may clear this flag.
-        */
-       VB2_CONTEXT_SECDATAK_CHANGED = (1 << 10),
-
-       /*
-        * Allow kernel verification to roll forward the version in secdatak[].
-        * Caller may set this flag before calling vb2api_kernel_phase3().
-        */
-       VB2_CONTEXT_ALLOW_KERNEL_ROLL_FORWARD = (1 << 11),
-
-       /* Boot optimistically: don't touch failure counters */
-       VB2_CONTEXT_NOFAIL_BOOT = (1 << 12),
-
-       /*
-        * Secdata is not ready this boot, but should be ready next boot.  It
-        * would like to reboot.  The decision whether to reboot or not must be
-        * deferred until vboot, because rebooting all the time before then
-        * could cause a device with malfunctioning secdata to get stuck in an
-        * unrecoverable crash loop.
-        */
-       VB2_CONTEXT_SECDATA_WANTS_REBOOT = (1 << 13),
-
-       /* Boot is S3->S0 resume, not S5->S0 normal boot */
-       VB2_CONTEXT_S3_RESUME = (1 << 14),
-};
-
-/*
- * Context for firmware verification.  Pass this to all vboot APIs.
- *
- * Caller may relocate this between calls to vboot APIs.
- */
-struct vb2_context {
-       /**********************************************************************
-        * Fields which must be initialized by caller.
-        */
-
-       /*
-        * Flags; see vb2_context_flags.  Some flags may only be set by caller
-        * prior to calling vboot functions.
-        */
-       uint32_t flags;
-
-       /*
-        * Work buffer, and length in bytes.  Caller may relocate this between
-        * calls to vboot APIs; it contains no internal pointers.  Caller must
-        * not examine the contents of this work buffer directly.
-        */
-       uint8_t *workbuf;
-       uint32_t workbuf_size;
-
-       /*
-        * Non-volatile data.  Caller must fill this from some non-volatile
-        * location.  If the VB2_CONTEXT_NVDATA_CHANGED flag is set when a
-        * vb2api function returns, caller must save the data back to the
-        * non-volatile location and then clear the flag.
-        */
-       uint8_t nvdata[VB2_NVDATA_SIZE];
-
-       /*
-        * Secure data for firmware verification stage.  Caller must fill this
-        * from some secure non-volatile location.  If the
-        * VB2_CONTEXT_SECDATA_CHANGED flag is set when a function returns,
-        * caller must save the data back to the secure non-volatile location
-        * and then clear the flag.
-        */
-       uint8_t secdata[VB2_SECDATA_SIZE];
-
-       /*
-        * Context pointer for use by caller.  Verified boot never looks at
-        * this.  Put context here if you need it for APIs that verified boot
-        * may call (vb2ex_...() functions).
-        */
-       void *non_vboot_context;
-
-       /**********************************************************************
-        * Fields caller may examine after calling vb2api_fw_phase1().  Caller
-         * must set these fields to 0 before calling any vboot functions.
-        */
-
-       /*
-        * Amount of work buffer used so far.  Verified boot sub-calls use
-        * this to know where the unused work area starts.  Caller may use
-        * this between calls to vboot APIs to know how much data must be
-        * copied when relocating the work buffer.
-        */
-       uint32_t workbuf_used;
-
-       /**********************************************************************
-        * Fields caller must initialize before calling vb2api_kernel_phase1().
-        */
-
-       /*
-        * Secure data for kernel verification stage.  Caller must fill this
-        * from some secure non-volatile location.  If the
-        * VB2_CONTEXT_SECDATAK_CHANGED flag is set when a function returns,
-        * caller must save the data back to the secure non-volatile location
-        * and then clear the flag.
-        */
-       uint8_t secdatak[VB2_SECDATAK_SIZE];
-};
-
-/* Resource index for vb2ex_read_resource() */
-enum vb2_resource_index {
-
-       /* Google binary block */
-       VB2_RES_GBB,
-
-       /*
-        * Firmware verified boot block (keyblock+preamble).  Use
-        * VB2_CONTEXT_FW_SLOT_B to determine whether this refers to slot A or
-        * slot B; vboot will set that flag to the proper state before reading
-        * the vblock.
-        */
-       VB2_RES_FW_VBLOCK,
-
-       /*
-        * Kernel verified boot block (keyblock+preamble) for the current
-        * kernel partition.  Used only by vb2api_kernel_load_vblock().
-        * Contents are allowed to change between calls to that function (to
-        * allow multiple kernels to be examined).
-        */
-       VB2_RES_KERNEL_VBLOCK,
-};
-
-/* Digest ID for vbapi_get_pcr_digest() */
-enum vb2_pcr_digest {
-       /* Digest based on current developer and recovery mode flags */
-       BOOT_MODE_PCR,
-
-       /* SHA-256 hash digest of HWID, from GBB */
-       HWID_DIGEST_PCR,
-};
-
-/******************************************************************************
- * APIs provided by verified boot.
- *
- * At a high level, call functions in the order described below.  After each
- * call, examine vb2_context.flags to determine whether nvdata or secdata
- * needs to be written.
- *
- * If you need to cause the boot process to fail at any point, call
- * vb2api_fail().  Then check vb2_context.flags to see what data needs to be
- * written.  Then reboot.
- *
- *     Load nvdata from wherever you keep it.
- *
- *     Load secdata from wherever you keep it.
- *
- *             If it wasn't there at all (for example, this is the first boot
- *             of a new system in the factory), call vb2api_secdata_create()
- *             to initialize the data.
- *
- *             If access to your storage is unreliable (reads/writes may
- *             contain corrupt data), you may call vb2api_secdata_check() to
- *             determine if the data was valid, and retry reading if it
- *             wasn't.  (In that case, you should also read back and check the
- *             data after any time you write it, to make sure it was written
- *             correctly.)
- *
- *     Call vb2api_fw_phase1().  At present, this nominally decides whether
- *     recovery mode is needed this boot.
- *
- *     Call vb2api_fw_phase2().  At present, this nominally decides which
- *     firmware slot will be attempted (A or B).
- *
- *     Call vb2api_fw_phase3().  At present, this nominally verifies the
- *     firmware keyblock and preamble.
- *
- *     Lock down wherever you keep secdata.  It should no longer be writable
- *     this boot.
- *
- *     Verify the hash of each section of code/data you need to boot the RW
- *     firmware.  For each section:
- *
- *             Call vb2_init_hash() to see if the hash exists.
- *
- *             Load the data for the section.  Call vb2_extend_hash() on the
- *             data as you load it.  You can load it all at once and make one
- *             call, or load and hash-extend a block at a time.
- *
- *             Call vb2_check_hash() to see if the hash is valid.
- *
- *                     If it is valid, you may use the data and/or execute
- *                     code from that section.
- *
- *                     If the hash was invalid, you must reboot.
- *
- * At this point, firmware verification is done, and vb2_context contains the
- * kernel key needed to verify the kernel.  That context should be preserved
- * and passed on to kernel selection.  The kernel selection process may be
- * done by the same firmware image, or may be done by the RW firmware.  The
- * recommended order is:
- *
- *     Load secdatak from wherever you keep it.
- *
- *             If it wasn't there at all (for example, this is the first boot
- *             of a new system in the factory), call vb2api_secdatak_create()
- *             to initialize the data.
- *
- *             If access to your storage is unreliable (reads/writes may
- *             contain corrupt data), you may call vb2api_secdatak_check() to
- *             determine if the data was valid, and retry reading if it
- *             wasn't.  (In that case, you should also read back and check the
- *             data after any time you write it, to make sure it was written
- *             correctly.)
- *
- *     Call vb2api_kernel_phase1().  At present, this decides which key to
- *     use to verify kernel data - the recovery key from the GBB, or the
- *     kernel subkey from the firmware verification stage.
- *
- *     Kernel phase 2 is finding loading, and verifying the kernel partition.
- *
- *     Find a boot device (you're on your own here).
- *
- *     Call vb2api_load_kernel_vblock() for each kernel partition on the
- *     boot device, until one succeeds.
- *
- *     When that succeeds, call vb2api_get_kernel_size() to determine where
- *     the kernel is located in the stream and how big it is.  Load or map
- *     the kernel.  (Again, you're on your own.  This is the responsibility of
- *     the caller so that the caller can choose whether to allocate a buffer,
- *     load the kernel data into a predefined area of RAM, or directly map a
- *     kernel file into the address space.  Note that technically it doesn't
- *     matter whether the kernel data is even in the same file or stream as
- *     the vblock, as long as the caller loads the right data.
- *
- *     Call vb2api_verify_kernel_data() on the kernel data.
- *
- *     If you ran out of kernels before finding a good one, call vb2api_fail()
- *     with an appropriate recovery reason.
- *
- *     Set the VB2_CONTEXT_ALLOW_KERNEL_ROLL_FORWARD flag if the current
- *     kernel partition has the successful flag (that is, it's already known
- *     or assumed to be a functional kernel partition).
- *
- *     Call vb2api_kernel_phase3().  This cleans up from kernel verification
- *     and updates the secure data if needed.
- *
- *     Lock down wherever you keep secdatak.  It should no longer be writable
- *     this boot.
- */
-
-/**
- * Sanity-check the contents of the secure storage context.
- *
- * Use this if reading from secure storage may be flaky, and you want to retry
- * reading it several times.
- *
- * This may be called before vb2api_phase1().
- *
- * @param ctx          Context pointer
- * @return VB2_SUCCESS, or non-zero error code if error.
- */
-int vb2api_secdata_check(const struct vb2_context *ctx);
-
-/**
- * Create fresh data in the secure storage context.
- *
- * Use this only when initializing the secure storage context on a new machine
- * the first time it boots.  Do NOT simply use this if vb2api_secdata_check()
- * (or any other API in this library) fails; that could allow the secure data
- * to be rolled back to an insecure state.
- *
- * This may be called before vb2api_phase1().
- *
- * @param ctx          Context pointer
- * @return VB2_SUCCESS, or non-zero error code if error.
- */
-int vb2api_secdata_create(struct vb2_context *ctx);
-
-/**
- * Sanity-check the contents of the kernel version secure storage context.
- *
- * Use this if reading from secure storage may be flaky, and you want to retry
- * reading it several times.
- *
- * This may be called before vb2api_phase1().
- *
- * @param ctx          Context pointer
- * @return VB2_SUCCESS, or non-zero error code if error.
- */
-int vb2api_secdatak_check(const struct vb2_context *ctx);
-
-/**
- * Create fresh data in the kernel version secure storage context.
- *
- * Use this only when initializing the secure storage context on a new machine
- * the first time it boots.  Do NOT simply use this if vb2api_secdatak_check()
- * (or any other API in this library) fails; that could allow the secure data
- * to be rolled back to an insecure state.
- *
- * This may be called before vb2api_phase1().
- *
- * @param ctx          Context pointer
- * @return VB2_SUCCESS, or non-zero error code if error.
- */
-int vb2api_secdatak_create(struct vb2_context *ctx);
-
-/**
- * Report firmware failure to vboot.
- *
- * This may be called before vb2api_phase1() to indicate errors in the boot
- * process prior to the start of vboot.
- *
- * If this is called after vb2api_phase1(), on return, the calling firmware
- * should check for updates to secdata and/or nvdata, then reboot.
- *
- * @param reason       Recovery reason
- * @param subcode      Recovery subcode
- */
-void vb2api_fail(struct vb2_context *ctx, uint8_t reason, uint8_t subcode);
-
-/**
- * Firmware selection, phase 1.
- *
- * If the returned error is VB2_ERROR_API_PHASE1_RECOVERY, the calling firmware
- * should jump directly to recovery-mode firmware without rebooting.
- *
- * For other errors, the calling firmware should check for updates to secdata
- * and/or nvdata, then reboot.
- *
- * @param ctx          Vboot context
- * @return VB2_SUCCESS, or error code on error.
- */
-int vb2api_fw_phase1(struct vb2_context *ctx);
-
-/**
- * Firmware selection, phase 2.
- *
- * On error, the calling firmware should check for updates to secdata and/or
- * nvdata, then reboot.
- *
- * @param ctx          Vboot context
- * @return VB2_SUCCESS, or error code on error.
- */
-int vb2api_fw_phase2(struct vb2_context *ctx);
-
-/**
- * Firmware selection, phase 3.
- *
- * On error, the calling firmware should check for updates to secdata and/or
- * nvdata, then reboot.
- *
- * On success, the calling firmware should lock down secdata before continuing
- * with the boot process.
- *
- * @param ctx          Vboot context
- * @return VB2_SUCCESS, or error code on error.
- */
-int vb2api_fw_phase3(struct vb2_context *ctx);
-
-/**
- * Same, but for new-style structs.
- */
-int vb21api_fw_phase3(struct vb2_context *ctx);
-
-/**
- * Initialize hashing data for the specified tag.
- *
- * @param ctx          Vboot context
- * @param tag          Tag to start hashing (enum vb2_hash_tag)
- * @param size         If non-null, expected size of data for tag will be
- *                     stored here on output.
- * @return VB2_SUCCESS, or error code on error.
- */
-int vb2api_init_hash(struct vb2_context *ctx, uint32_t tag, uint32_t *size);
-
-/**
- * Same, but for new-style structs.
- */
-int vb21api_init_hash(struct vb2_context *ctx,
-                     const struct vb2_id *id,
-                     uint32_t *size);
-
-/**
- * Extend the hash started by vb2api_init_hash() with additional data.
- *
- * (This is the same for both old and new style structs.)
- *
- * @param ctx          Vboot context
- * @param buf          Data to hash
- * @param size         Size of data in bytes
- * @return VB2_SUCCESS, or error code on error.
- */
-int vb2api_extend_hash(struct vb2_context *ctx,
-                      const void *buf,
-                      uint32_t size);
-
-/**
- * Check the hash value started by vb2api_init_hash().
- *
- * @param ctx          Vboot context
- * @return VB2_SUCCESS, or error code on error.
- */
-int vb2api_check_hash(struct vb2_context *ctx);
-
-/**
- * Same, but for new-style structs.
- */
-int vb21api_check_hash(struct vb2_context *ctx);
-
-/**
- * Check the hash value started by vb2api_init_hash() while retrieving
- * calculated digest.
- *
- * @param ctx                  Vboot context
- * @param digest_out           optional pointer to buffer to store digest
- * @param digest_out_size      optional size of buffer to store digest
- * @return VB2_SUCCESS, or error code on error.
- */
-int vb2api_check_hash_get_digest(struct vb2_context *ctx, void *digest_out,
-                                uint32_t digest_out_size);
-
-/**
- * Get a PCR digest
- *
- * @param ctx          Vboot context
- * @param which_digest PCR index of the digest
- * @param dest         Destination where the digest is copied.
- *                     Recommended size is VB2_PCR_DIGEST_RECOMMENDED_SIZE.
- * @param dest_size    IN: size of the buffer pointed by dest
- *                     OUT: size of the copied digest
- * @return VB2_SUCCESS, or error code on error
- */
-int vb2api_get_pcr_digest(struct vb2_context *ctx,
-                         enum vb2_pcr_digest which_digest,
-                         uint8_t *dest,
-                         uint32_t *dest_size);
-
-/**
- * Prepare for kernel verification stage.
- *
- * Must be called before other vb2api kernel functions.
- *
- * @param ctx          Vboot context
- * @return VB2_SUCCESS, or error code on error.
- */
-int vb2api_kernel_phase1(struct vb2_context *ctx);
-
-/**
- * Load the verified boot block (vblock) for a kernel.
- *
- * This function may be called multiple times, to load and verify the
- * vblocks from multiple kernel partitions.
- *
- * @param ctx          Vboot context
- * @param stream       Kernel stream
- * @return VB2_SUCCESS, or error code on error.
- */
-int vb2api_load_kernel_vblock(struct vb2_context *ctx);
-
-/**
- * Get the size and offset of the kernel data for the most recent vblock.
- *
- * Valid after a successful call to vb2api_load_kernel_vblock().
- *
- * @param ctx          Vboot context
- * @param offset_ptr   Destination for offset in bytes of kernel data as
- *                     reported by vblock.
- * @param size_ptr      Destination for size of kernel data in bytes.
- * @return VB2_SUCCESS, or error code on error.
- */
-int vb2api_get_kernel_size(struct vb2_context *ctx,
-                          uint32_t *offset_ptr,
-                          uint32_t *size_ptr);
-
-/**
- * Verify kernel data using the previously loaded kernel vblock.
- *
- * Valid after a successful call to vb2api_load_kernel_vblock().  This allows
- * the caller to load or map the kernel data, as appropriate, and pass the
- * pointer to the kernel data into vboot.
- *
- * @param ctx          Vboot context
- * @param buf          Pointer to kernel data
- * @param size         Size of kernel data in bytes
- * @return VB2_SUCCESS, or error code on error.
- */
-int vb2api_verify_kernel_data(struct vb2_context *ctx,
-                             const void *buf,
-                             uint32_t size);
-
-/**
- * Clean up after kernel verification.
- *
- * Call this after successfully loading a vblock and verifying kernel data,
- * or if you've run out of boot devices and/or kernel partitions.
- *
- * This cleans up intermediate data structures in the vboot context, and
- * updates the version in the secure data if necessary.
- */
-int vb2api_kernel_phase3(struct vb2_context *ctx);
-
-/*****************************************************************************/
-/* APIs provided by the caller to verified boot */
-
-/**
- * Clear the TPM owner.
- *
- * @param ctx          Vboot context
- * @return VB2_SUCCESS, or error code on error.
- */
-int vb2ex_tpm_clear_owner(struct vb2_context *ctx);
-
-/**
- * Read a verified boot resource.
- *
- * @param ctx          Vboot context
- * @param index                Resource index to read
- * @param offset       Byte offset within resource to start at
- * @param buf          Destination for data
- * @param size         Amount of data to read
- * @return VB2_SUCCESS, or error code on error.
- */
-int vb2ex_read_resource(struct vb2_context *ctx,
-                       enum vb2_resource_index index,
-                       uint32_t offset,
-                       void *buf,
-                       uint32_t size);
-
-void vb2ex_printf(const char *func, const char *fmt, ...);
-
-/**
- * Initialize the hardware crypto engine to calculate a block-style digest.
- *
- * @param hash_alg     Hash algorithm to use
- * @param data_size    Expected total size of data to hash
- * @return VB2_SUCCESS, or non-zero error code (HWCRYPTO_UNSUPPORTED not fatal).
- */
-int vb2ex_hwcrypto_digest_init(enum vb2_hash_algorithm hash_alg,
-                              uint32_t data_size);
-
-/**
- * Extend the hash in the hardware crypto engine with another block of data.
- *
- * @param buf          Next data block to hash
- * @param size         Length of data block in bytes
- * @return VB2_SUCCESS, or non-zero error code.
- */
-int vb2ex_hwcrypto_digest_extend(const uint8_t *buf, uint32_t size);
-
-/**
- * Finalize the digest in the hardware crypto engine and extract the result.
- *
- * @param digest       Destination buffer for resulting digest
- * @param digest_size  Length of digest buffer in bytes
- * @return VB2_SUCCESS, or non-zero error code.
- */
-int vb2ex_hwcrypto_digest_finalize(uint8_t *digest, uint32_t digest_size);
-
-#endif  /* VBOOT_2_API_H_ */
diff --git a/kern/lib/crypto/include/2common.h b/kern/lib/crypto/include/2common.h
deleted file mode 100644 (file)
index 4622ab1..0000000
+++ /dev/null
@@ -1,197 +0,0 @@
-/* Copyright (c) 2014 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.
- *
- * Common functions between firmware and kernel verified boot.
- */
-
-#ifndef VBOOT_REFERENCE_VBOOT_2COMMON_H_
-#define VBOOT_REFERENCE_VBOOT_2COMMON_H_
-
-#include "2api.h"
-#include "2return_codes.h"
-#include "2sha.h"
-#include "2struct.h"
-
-struct vb2_public_key;
-
-/*
- * Return the greater of A and B.  This is used in macros which calculate the
- * required buffer size, so can't be turned into a static inline function.
- */
-#ifndef VB2_MAX
-#define VB2_MAX(A, B) ((A) > (B) ? (A) : (B))
-#endif
-
-/* Return the number of elements in an array */
-#ifndef ARRAY_SIZE
-#define ARRAY_SIZE(array) (sizeof(array)/sizeof(array[0]))
-#endif
-
-/* Debug output printf() for tests.  Otherwise, it's platform-dependent. */
-#if defined(VBOOT_DEBUG)
-#  if defined(FOR_TEST)
-#    define VB2_DEBUG(format, args...) printf(format, ## args)
-#  else
-#    define VB2_DEBUG(format, args...) vb2ex_printf(__func__, format, ## args)
-#  endif
-#else
-#  define VB2_DEBUG(format, args...)
-#endif
-
-/*
- * Alignment for work buffer pointers/allocations should be useful for any
- * data type. When declaring workbuf buffers on the stack, the caller should
- * use explicit alignment to avoid run-time errors. For example:
- *
- *    int foo(void)
- *    {
- *        struct vb2_workbuf wb;
- *        uint8_t buf[NUM] __attribute__ ((aligned (VB2_WORKBUF_ALIGN)));
- *        wb.buf = buf;
- *        wb.size = sizeof(buf);
- */
-
-/* We might get away with using __alignof__(void *), but since GCC defines a
- * macro for us we'll be safe and use that. */
-#define VB2_WORKBUF_ALIGN __BIGGEST_ALIGNMENT__
-
-/* Work buffer */
-struct vb2_workbuf {
-       uint8_t *buf;
-       uint32_t size;
-};
-
-/**
- * Initialize a work buffer.
- *
- * @param wb           Work buffer to init
- * @param buf          Pointer to work buffer data
- * @param size         Size of work buffer data in bytes
- */
-void vb2_workbuf_init(struct vb2_workbuf *wb, uint8_t *buf, uint32_t size);
-
-/**
- * Allocate space in a work buffer.
- *
- * Note that the returned buffer will always be aligned to VB2_WORKBUF_ALIGN.
- *
- * The work buffer acts like a stack, and detailed tracking of allocs and frees
- * is not done.  The caller must track the size of each allocation and free via
- * vb2_workbuf_free() in the reverse order they were allocated.
- *
- * An acceptable alternate workflow inside a function is to pass in a const
- * work buffer, then make a local copy.  Allocations done to the local copy
- * then don't change the passed-in work buffer, and will effectively be freed
- * when the local copy goes out of scope.
- *
- * @param wb           Work buffer
- * @param size         Requested size in bytes
- * @return A pointer to the allocated space, or NULL if error.
- */
-void *vb2_workbuf_alloc(struct vb2_workbuf *wb, uint32_t size);
-
-/**
- * Reallocate space in a work buffer.
- *
- * Note that the returned buffer will always be aligned to VB2_WORKBUF_ALIGN.
- * The work buffer acts like a stack, so this must only be done to the most
- * recently allocated buffer.
- *
- * @param wb           Work buffer
- * @param oldsize      Old allocation size in bytes
- * @param newsize      Requested size in bytes
- * @return A pointer to the allocated space, or NULL if error.
- */
-void *vb2_workbuf_realloc(struct vb2_workbuf *wb,
-                         uint32_t oldsize,
-                         uint32_t newsize);
-
-/**
- * Free the preceding allocation.
- *
- * Note that the work buffer acts like a stack, and detailed tracking of
- * allocs and frees is not done.  The caller must track the size of each
- * allocation and free them in reverse order.
- *
- * @param wb           Work buffer
- * @param size         Size of data to free
- */
-void vb2_workbuf_free(struct vb2_workbuf *wb, uint32_t size);
-
-/* Check if a pointer is aligned on an align-byte boundary */
-#define vb2_aligned(ptr, align) (!(((uintptr_t)(ptr)) & ((align) - 1)))
-
-/**
- * Safer memcmp() for use in crypto.
- *
- * Compares the buffers to see if they are equal.  Time taken to perform
- * the comparison is dependent only on the size, not the relationship of
- * the match between the buffers.  Note that unlike memcmp(), this only
- * indicates inequality, not which buffer is lesser.
- *
- * @param s1           First buffer
- * @param s2           Second buffer
- * @param size         Number of bytes to compare
- * @return 0 if match or size=0, non-zero if at least one byte mismatched.
- */
-int vb2_safe_memcmp(const void *s1, const void *s2, size_t size);
-
-/**
- * Align a buffer and check its size.
- *
- * @param **ptr                Pointer to pointer to align
- * @param *size                Points to size of buffer pointed to by *ptr
- * @param align                Required alignment (must be power of 2)
- * @param want_size    Required size
- * @return VB2_SUCCESS, or non-zero if error.
- */
-int vb2_align(uint8_t **ptr,
-             uint32_t *size,
-             uint32_t align,
-             uint32_t want_size);
-
-/**
- * Return offset of ptr from base.
- *
- * @param base         Base pointer
- * @param ptr          Pointer at some offset from base
- * @return The offset of ptr from base.
- */
-ptrdiff_t vb2_offset_of(const void *base, const void *ptr);
-
-/**
- * Return expected signature size for a signature/hash algorithm pair
- *
- * @param sig_alg      Signature algorithm
- * @param hash_alg     Hash algorithm
- * @return The signature size, or zero if error / unsupported algorithm.
- */
-uint32_t vb2_sig_size(enum vb2_signature_algorithm sig_alg,
-                     enum vb2_hash_algorithm hash_alg);
-
-/**
- * Return a key ID for an unsigned hash algorithm.
- *
- * @param hash_alg     Hash algorithm to return key for
- * @return A pointer to the key ID for that hash algorithm with
- *        sig_alg=VB2_SIG_NONE, or NULL if error.
- */
-const struct vb2_id *vb2_hash_id(enum vb2_hash_algorithm hash_alg);
-
-/* Size of work buffer sufficient for vb2_verify_digest() worst case. */
-#define VB2_VERIFY_DIGEST_WORKBUF_BYTES VB2_VERIFY_RSA_DIGEST_WORKBUF_BYTES
-
-/* Size of work buffer sufficient for vb2_verify_data() worst case. */
-#define VB2_VERIFY_DATA_WORKBUF_BYTES                                  \
-       (VB2_SHA512_DIGEST_SIZE +                                       \
-        VB2_MAX(VB2_VERIFY_DIGEST_WORKBUF_BYTES,                       \
-                sizeof(struct vb2_digest_context)))
-
-/* Size of work buffer sufficient for vb2_verify_keyblock() worst case. */
-#define VB2_KEY_BLOCK_VERIFY_WORKBUF_BYTES VB2_VERIFY_DATA_WORKBUF_BYTES
-
-/* Size of work buffer sufficient for vb2_verify_fw_preamble() worst case. */
-#define VB2_VERIFY_FIRMWARE_PREAMBLE_WORKBUF_BYTES VB2_VERIFY_DATA_WORKBUF_BYTES
-
-#endif  /* VBOOT_REFERENCE_VBOOT_2COMMON_H_ */
diff --git a/kern/lib/crypto/include/2crc8.h b/kern/lib/crypto/include/2crc8.h
deleted file mode 100644 (file)
index f01eabd..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-/* Copyright (c) 2014 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.
- *
- * Very simple 8-bit CRC function.
- */
-
-#ifndef VBOOT_REFERENCE_2_CRC8_H_
-#define VBOOT_REFERENCE_2_CRC8_H_
-
-/**
- * Calculate CRC-8 of the data, using x^8 + x^2 + x + 1 polynomial.
- *
- * @param data         Data to CRC
- * @param size         Size of data in bytes
- * @return CRC-8 of the data.
- */
-uint8_t vb2_crc8(const void *data, uint32_t size);
-
-#endif /* VBOOT_REFERENCE_2_CRC8_H_ */
diff --git a/kern/lib/crypto/include/2crypto.h b/kern/lib/crypto/include/2crypto.h
deleted file mode 100644 (file)
index c1f225d..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/* Copyright (c) 2014 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.
- *
- * Crypto constants for verified boot
- */
-
-#ifndef VBOOT_REFERENCE_VBOOT_2CRYPTO_H_
-#define VBOOT_REFERENCE_VBOOT_2CRYPTO_H_
-#include <stdint.h>
-
-/* Verified boot crypto algorithms */
-enum vb2_crypto_algorithm {
-       VB2_ALG_RSA1024_SHA1   = 0,
-       VB2_ALG_RSA1024_SHA256 = 1,
-       VB2_ALG_RSA1024_SHA512 = 2,
-       VB2_ALG_RSA2048_SHA1   = 3,
-       VB2_ALG_RSA2048_SHA256 = 4,
-       VB2_ALG_RSA2048_SHA512 = 5,
-       VB2_ALG_RSA4096_SHA1   = 6,
-       VB2_ALG_RSA4096_SHA256 = 7,
-       VB2_ALG_RSA4096_SHA512 = 8,
-       VB2_ALG_RSA8192_SHA1   = 9,
-       VB2_ALG_RSA8192_SHA256 = 10,
-       VB2_ALG_RSA8192_SHA512 = 11,
-
-       /* Number of algorithms */
-       VB2_ALG_COUNT
-};
-
-/* Algorithm types for signatures */
-enum vb2_signature_algorithm {
-       /* Invalid or unsupported signature type */
-       VB2_SIG_INVALID = 0,
-
-       /*
-        * No signature algorithm.  The digest is unsigned.  See
-        * VB2_ID_NONE_* for key IDs to use with this algorithm.
-        */
-       VB2_SIG_NONE = 1,
-
-       /* RSA algorithms of the given length in bits (1024-8192) */
-       VB2_SIG_RSA1024 = 2,  /* Warning!  This is likely to be deprecated! */
-       VB2_SIG_RSA2048 = 3,
-       VB2_SIG_RSA4096 = 4,
-       VB2_SIG_RSA8192 = 5,
-};
-
-/* Algorithm types for hash digests */
-enum vb2_hash_algorithm {
-       /* Invalid or unsupported digest type */
-       VB2_HASH_INVALID = 0,
-
-       /* SHA-1.  Warning: This is likely to be deprecated soon! */
-       VB2_HASH_SHA1 = 1,
-
-       /* SHA-256 and SHA-512 */
-       VB2_HASH_SHA256 = 2,
-       VB2_HASH_SHA512 = 3,
-
-       /* Last index. Don't add anything below. */
-       VB2_HASH_ALG_COUNT,
-};
-
-#endif /* VBOOT_REFERENCE_VBOOT_2CRYPTO_H_ */
diff --git a/kern/lib/crypto/include/2fw_hash_tags.h b/kern/lib/crypto/include/2fw_hash_tags.h
deleted file mode 100644 (file)
index 0c061f5..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/* Copyright (c) 2014 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.
- *
- * Firmware hash tags for verified boot
- */
-
-#ifndef VBOOT_REFERENCE_VBOOT_2FW_HASH_TAGS_H_
-#define VBOOT_REFERENCE_VBOOT_2FW_HASH_TAGS_H_
-#include <stdint.h>
-
-/*
- * Tags for types of hashable data.
- *
- * Note that not every firmware image will contain every tag.
- *
- * TODO: These are the ones that vboot specifically knows about given the
- * current data structures.  In the future, I'd really like the vboot preamble
- * to contain an arbitrary list of tags and their hashes, so that we can hash
- * ram init, main RW body, EC-RW for software sync, etc. all separately.
- */
-enum vb2_hash_tag {
-       /* Invalid hash tag; never present in table */
-       VB2_HASH_TAG_INVALID = 0,
-
-       /* Firmware body */
-       VB2_HASH_TAG_FW_BODY = 1,
-
-       /* Kernel data key */
-       VB2_HASH_TAG_KERNEL_DATA_KEY = 2,
-
-       /*
-        * Tags over 0x40000000 are reserved for use by the calling firmware,
-        * which may associate them with arbitrary types of RW firmware data
-        * that it wants to track.
-        */
-       VB2_HASH_TAG_CALLER_BASE = 0x40000000
-};
-
-#endif /* VBOOT_REFERENCE_VBOOT_2FW_HASH_TAGS_H_ */
diff --git a/kern/lib/crypto/include/2hmac.h b/kern/lib/crypto/include/2hmac.h
deleted file mode 100644 (file)
index 1df1939..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-/* Copyright 2016 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.
- */
-
-#ifndef VBOOT_REFERENCE_VBOOT_2HMAC_H_
-#define VBOOT_REFERENCE_VBOOT_2HMAC_H_
-
-#include <stdint.h>
-#include "2crypto.h"
-
-/**
- * Compute HMAC
- *
- * @param alg          Hash algorithm ID
- * @param key          HMAC key
- * @param key_size     HMAC key size
- * @param msg          Message to compute HMAC for
- * @param msg_size     Message size
- * @param mac          Computed message authentication code
- * @param mac_size     Size of the buffer pointed by <mac>
- * @return
- */
-int hmac(enum vb2_hash_algorithm alg,
-        const void *key, uint32_t key_size,
-        const void *msg, uint32_t msg_size,
-        uint8_t *mac, uint32_t mac_size);
-
-#endif
diff --git a/kern/lib/crypto/include/2id.h b/kern/lib/crypto/include/2id.h
deleted file mode 100644 (file)
index 03f6d96..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/* Copyright 2015 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.
- *
- * Key ID, used to quickly match keys with signatures. There's not a standard
- * fingerprint for private keys, so we're using the sha1sum of the public key
- * in our keyb format. Pretty much anything would work as long as it's
- * resistant to collisions and easy to compare.
- */
-
-#ifndef VBOOT_REFERENCE_VBOOT_2ID_H_
-#define VBOOT_REFERENCE_VBOOT_2ID_H_
-#include <stdint.h>
-
-#define VB2_ID_NUM_BYTES 20
-
-struct vb2_id {
-       uint8_t raw[VB2_ID_NUM_BYTES];
-} __attribute__((packed));
-
-#define EXPECTED_ID_SIZE VB2_ID_NUM_BYTES
-
-/* IDs to use for "keys" with sig_alg==VB2_SIG_NONE */
-#define VB2_ID_NONE_SHA1   {{0x00, 0x01,}}
-#define VB2_ID_NONE_SHA256 {{0x02, 0x56,}}
-#define VB2_ID_NONE_SHA512 {{0x05, 0x12,}}
-
-#endif  /* VBOOT_REFERENCE_VBOOT_2ID_H_ */
diff --git a/kern/lib/crypto/include/2misc.h b/kern/lib/crypto/include/2misc.h
deleted file mode 100644 (file)
index f562fad..0000000
+++ /dev/null
@@ -1,166 +0,0 @@
-/* Copyright (c) 2014 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.
- *
- * Misc functions which need access to vb2_context but are not public APIs
- */
-
-#ifndef VBOOT_REFERENCE_VBOOT_2MISC_H_
-#define VBOOT_REFERENCE_VBOOT_2MISC_H_
-
-#include "2api.h"
-
-struct vb2_gbb_header;
-struct vb2_workbuf;
-
-/**
- * Get the shared data pointer from the vboot context
- *
- * @param ctx          Vboot context
- * @return The shared data pointer.
- */
-static __inline struct vb2_shared_data *vb2_get_sd(struct vb2_context *ctx) {
-       return (struct vb2_shared_data *)ctx->workbuf;
-}
-
-/**
- * Validate gbb signature (the magic number)
- *
- * @param sig          Pointer to the signature bytes to validate
- * @return VB2_SUCCESS if valid or non-zero if error.
- */
-int vb2_validate_gbb_signature(uint8_t *sig);
-
-/**
- * Initialize a work buffer from the vboot context.
- *
- * This sets the work buffer to the unused portion of the context work buffer.
- *
- * @param ctx          Vboot context
- * @param wb           Work buffer to initialize
- */
-void vb2_workbuf_from_ctx(struct vb2_context *ctx, struct vb2_workbuf *wb);
-
-/**
- * Read the GBB header.
- *
- * @param ctx          Vboot context
- * @param gbb          Destination for header
- * @return VB2_SUCCESS, or non-zero if error.
- */
-int vb2_read_gbb_header(struct vb2_context *ctx, struct vb2_gbb_header *gbb);
-
-/**
- * Handle vboot failure.
- *
- * If the failure occurred after choosing a firmware slot, and the other
- * firmware slot is not known-bad, try the other firmware slot after reboot.
- *
- * If the failure occurred before choosing a firmware slot, or both slots have
- * failed in successive boots, request recovery.
- *
- * @param reason       Recovery reason
- * @param subcode      Recovery subcode
- */
-void vb2_fail(struct vb2_context *ctx, uint8_t reason, uint8_t subcode);
-
-/**
- * Set up the verified boot context data, if not already set up.
- *
- * This uses ctx->workbuf_used=0 as a flag to indicate that the data has not
- * yet been set up.  Caller must set that before calling any voot functions;
- * see 2api.h.
- *
- * @param ctx          Vboot context to initialize
- * @return VB2_SUCCESS, or error code on error.
- */
-int vb2_init_context(struct vb2_context *ctx);
-
-/**
- * Check for recovery reasons we can determine early in the boot process.
- *
- * On exit, check ctx->flags for VB2_CONTEXT_RECOVERY_MODE; if present, jump to
- * the recovery path instead of continuing with normal boot.  This is the only
- * direct path to recovery mode.  All other errors later in the boot process
- * should induce a reboot instead of jumping to recovery, so that recovery mode
- * starts from a consistent firmware state.
- *
- * @param ctx          Vboot context
- */
-void vb2_check_recovery(struct vb2_context *ctx);
-
-/**
- * Parse the GBB header.
- *
- * @param ctx          Vboot context
- * @return VB2_SUCCESS, or error code on error.
- */
-int vb2_fw_parse_gbb(struct vb2_context *ctx);
-
-/**
- * Check developer switch position.
- *
- * @param ctx          Vboot context
- * @return VB2_SUCCESS, or error code on error.
- */
-int vb2_check_dev_switch(struct vb2_context *ctx);
-
-/**
- * Check if we need to clear the TPM owner.
- *
- * @param ctx          Vboot context
- * @return VB2_SUCCESS, or error code on error.
- */
-int vb2_check_tpm_clear(struct vb2_context *ctx);
-
-/**
- * Decide which firmware slot to try this boot.
- *
- * @param ctx          Vboot context
- * @return VB2_SUCCESS, or error code on error.
- */
-int vb2_select_fw_slot(struct vb2_context *ctx);
-
-/**
- * Verify the firmware keyblock using the root key.
- *
- * After this call, the data key is stored in the work buffer.
- *
- * @param ctx          Vboot context
- * @return VB2_SUCCESS, or error code on error.
- */
-int vb2_load_fw_keyblock(struct vb2_context *ctx);
-int vb21_load_fw_keyblock(struct vb2_context *ctx);
-
-/**
- * Verify the firmware preamble using the data subkey from the keyblock.
- *
- * After this call, the preamble is stored in the work buffer.
- *
- * @param ctx          Vboot context
- * @return VB2_SUCCESS, or error code on error.
- */
-int vb2_load_fw_preamble(struct vb2_context *ctx);
-int vb21_load_fw_preamble(struct vb2_context *ctx);
-
-/**
- * Verify the kernel keyblock using the previously-loaded kernel key.
- *
- * After this call, the data key is stored in the work buffer.
- *
- * @param ctx          Vboot context
- * @return VB2_SUCCESS, or error code on error.
- */
-int vb2_load_kernel_keyblock(struct vb2_context *ctx);
-
-/**
- * Verify the kernel preamble using the data subkey from the keyblock.
- *
- * After this call, the preamble is stored in the work buffer.
- *
- * @param ctx          Vboot context
- * @return VB2_SUCCESS, or error code on error.
- */
-int vb2_load_kernel_preamble(struct vb2_context *ctx);
-
-#endif  /* VBOOT_REFERENCE_VBOOT_2MISC_H_ */
diff --git a/kern/lib/crypto/include/2nvstorage.h b/kern/lib/crypto/include/2nvstorage.h
deleted file mode 100644 (file)
index 66a5fdf..0000000
+++ /dev/null
@@ -1,174 +0,0 @@
-/* Copyright (c) 2014 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.
- *
- * Non-volatile storage routines
- */
-
-#ifndef VBOOT_REFERENCE_VBOOT_2NVSTORAGE_H_
-#define VBOOT_REFERENCE_VBOOT_2NVSTORAGE_H_
-
-enum vb2_nv_param {
-       /*
-        * Parameter values have been reset to defaults (flag for firmware).
-        * 0=clear; 1=set.
-        */
-       VB2_NV_FIRMWARE_SETTINGS_RESET = 0,
-       /*
-        * Parameter values have been reset to defaults (flag for kernel).
-        * 0=clear; 1=set.
-        */
-       VB2_NV_KERNEL_SETTINGS_RESET,
-       /* Request debug reset on next S3->S0 transition.  0=clear; 1=set. */
-       VB2_NV_DEBUG_RESET_MODE,
-       /* Firmware slot to try next.  0=A, 1=B */
-       VB2_NV_TRY_NEXT,
-       /*
-        * Number of times to try booting RW firmware slot B before slot A.
-        * Valid range: 0-15.
-        *
-        * For VB2, number of times to try booting the slot indicated by
-        * VB2_NV_TRY_NEXT.  On a 1->0 transition of try count, VB2_NV_TRY_NEXT
-        * will be set to the other slot.
-        */
-       VB2_NV_TRY_COUNT,
-       /*
-        * Request recovery mode on next boot; see 2recovery_reason.h for
-        * currently defined reason codes.  8-bit value.
-        */
-       VB2_NV_RECOVERY_REQUEST,
-       /*
-        * Localization index for screen bitmaps displayed by firmware.
-        * 8-bit value.
-        */
-       VB2_NV_LOCALIZATION_INDEX,
-       /* Field reserved for kernel/user-mode use; 32-bit value. */
-       VB2_NV_KERNEL_FIELD,
-       /* Allow booting from USB in developer mode.  0=no, 1=yes. */
-       VB2_NV_DEV_BOOT_USB,
-       /* Allow booting of legacy OSes in developer mode.  0=no, 1=yes. */
-       VB2_NV_DEV_BOOT_LEGACY,
-       /* Only boot Google-signed images in developer mode.  0=no, 1=yes. */
-       VB2_NV_DEV_BOOT_SIGNED_ONLY,
-       /*
-        * Allow full fastboot capability in firmware in developer mode.
-        * 0=no, 1=yes.
-        */
-       VB2_NV_DEV_BOOT_FASTBOOT_FULL_CAP,
-       /* Set default boot mode (see vb2_dev_default_boot) */
-       VB2_NV_DEV_DEFAULT_BOOT,
-       /*
-        * Set by userspace to request that RO firmware disable dev-mode on the
-        * next boot. This is likely only possible if the dev-switch is
-        * virtual.
-        */
-       VB2_NV_DISABLE_DEV_REQUEST,
-       /*
-        * Set and cleared by vboot to request that the video Option ROM be
-        * loaded at boot time, so that BIOS screens can be displayed. 0=no,
-        * 1=yes.
-        */
-       VB2_NV_OPROM_NEEDED,
-       /* Request that the firmware clear the TPM owner on the next boot. */
-       VB2_NV_CLEAR_TPM_OWNER_REQUEST,
-       /* Flag that TPM owner was cleared on request. */
-       VB2_NV_CLEAR_TPM_OWNER_DONE,
-       /* TPM requested a reboot already. */
-       VB2_NV_TPM_REQUESTED_REBOOT,
-       /* More details on recovery reason */
-       VB2_NV_RECOVERY_SUBCODE,
-       /* Request that NVRAM be backed up at next boot if possible. */
-       VB2_NV_BACKUP_NVRAM_REQUEST,
-       /* Firmware slot tried this boot (0=A, 1=B) */
-       VB2_NV_FW_TRIED,
-       /* Result of trying that firmware (see vb2_fw_result) */
-       VB2_NV_FW_RESULT,
-       /* Firmware slot tried previous boot (0=A, 1=B) */
-       VB2_NV_FW_PREV_TRIED,
-       /* Result of trying that firmware (see vb2_fw_result) */
-       VB2_NV_FW_PREV_RESULT,
-       /* Request wipeout of the device by the app. */
-       VB2_NV_REQ_WIPEOUT,
-
-       /* Fastboot: Unlock in firmware, 0=disabled, 1=enabled. */
-       VB2_NV_FASTBOOT_UNLOCK_IN_FW,
-       /* Boot system when AC detected (0=no, 1=yes). */
-       VB2_NV_BOOT_ON_AC_DETECT,
-       /* Try to update the EC-RO image after updating the EC-RW image(0=no, 1=yes). */
-       VB2_NV_TRY_RO_SYNC,
-        /* Cut off battery and shutdown on next boot. */
-        VB2_NV_BATTERY_CUTOFF_REQUEST,
-};
-
-/* Set default boot in developer mode */
-enum vb2_dev_default_boot {
-       /* Default to boot from disk*/
-       VB2_DEV_DEFAULT_BOOT_DISK = 0,
-
-       /* Default to boot from USB */
-       VB2_DEV_DEFAULT_BOOT_USB= 1,
-
-       /* Default to boot legacy OS */
-       VB2_DEV_DEFAULT_BOOT_LEGACY = 2,
-
-};
-
-/* Firmware result codes for VB2_NV_FW_RESULT and VB2_NV_FW_PREV_RESULT */
-enum vb2_fw_result {
-       /* Unknown */
-       VB2_FW_RESULT_UNKNOWN = 0,
-
-       /* Trying a new slot, but haven't reached success/failure */
-       VB2_FW_RESULT_TRYING = 1,
-
-       /* Successfully booted to the OS */
-       VB2_FW_RESULT_SUCCESS = 2,
-
-       /* Known failure */
-       VB2_FW_RESULT_FAILURE = 3,
-};
-
-/**
- * Check the CRC of the non-volatile storage context.
- *
- * Use this if reading from non-volatile storage may be flaky, and you want to
- * retry reading it several times.
- *
- * This may be called before vb2_context_init().
- *
- * @param ctx          Context pointer
- * @return VB2_SUCCESS, or non-zero error code if error.
- */
-int vb2_nv_check_crc(const struct vb2_context *ctx);
-
-/**
- * Initialize the non-volatile storage context and verify its CRC.
- *
- * @param ctx          Context pointer
- */
-void vb2_nv_init(struct vb2_context *ctx);
-
-/**
- * Read a non-volatile value.
- *
- * @param ctx          Context pointer
- * @param param                Parameter to read
- * @return The value of the parameter.  If you somehow force an invalid
- *         parameter number, returns 0.
- */
-uint32_t vb2_nv_get(struct vb2_context *ctx, enum vb2_nv_param param);
-
-/**
- * Write a non-volatile value.
- *
- * Ignores writes to unknown params.
- *
- * @param ctx          Context pointer
- * @param param                Parameter to write
- * @param value                New value
- */
-void vb2_nv_set(struct vb2_context *ctx,
-               enum vb2_nv_param param,
-               uint32_t value);
-
-#endif  /* VBOOT_REFERENCE_VBOOT_2NVSTORAGE_H_ */
diff --git a/kern/lib/crypto/include/2nvstorage_fields.h b/kern/lib/crypto/include/2nvstorage_fields.h
deleted file mode 100644 (file)
index 018bdeb..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-/* Copyright 2015 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.
- *
- * Non-volatile storage bitfields
- */
-
-#ifndef VBOOT_REFERENCE_VBOOT_2NVSTORAGE_FIELDS_H_
-#define VBOOT_REFERENCE_VBOOT_2NVSTORAGE_FIELDS_H_
-
-/*
- * Constants for NV storage.  We use this rather than structs and bitfields so
- * the data format is consistent across platforms and compilers.  Total NV
- * storage size is VB2_NVDATA_SIZE = 16 bytes.
- *
- * These constants must match the equivalent constants in
- * lib/vboot_nvstorage.c.  (We currently don't share a common header file
- * because we're tring to keep the two libs independent, and we hope to
- * deprecate that one.)
- */
-
-enum vb2_nv_offset {
-       VB2_NV_OFFS_HEADER = 0,
-       VB2_NV_OFFS_BOOT = 1,
-       VB2_NV_OFFS_RECOVERY = 2,
-       VB2_NV_OFFS_LOCALIZATION = 3,
-       VB2_NV_OFFS_DEV = 4,
-       VB2_NV_OFFS_TPM = 5,
-       VB2_NV_OFFS_RECOVERY_SUBCODE = 6,
-       VB2_NV_OFFS_BOOT2 = 7,
-       VB2_NV_OFFS_MISC = 8,
-       /* Offsets 9-10 are currently unused */
-       VB2_NV_OFFS_KERNEL = 11, /* 11-14; field is 32 bits */
-       /* CRC must be last field */
-       VB2_NV_OFFS_CRC = 15
- };
-
-/* Fields in VB2_NV_OFFS_HEADER (unused = 0x07) */
-#define VB2_NV_HEADER_WIPEOUT                 0x08
-#define VB2_NV_HEADER_KERNEL_SETTINGS_RESET    0x10
-#define VB2_NV_HEADER_FW_SETTINGS_RESET        0x20
-#define VB2_NV_HEADER_SIGNATURE                0x40
-#define VB2_NV_HEADER_MASK                     0xc0
-
-/* Fields in VB2_NV_OFFS_BOOT */
-#define VB2_NV_BOOT_TRY_COUNT_MASK             0x0f
-#define VB2_NV_BOOT_BACKUP_NVRAM               0x10
-#define VB2_NV_BOOT_OPROM_NEEDED               0x20
-#define VB2_NV_BOOT_DISABLE_DEV                0x40
-#define VB2_NV_BOOT_DEBUG_RESET                0x80
-
-/* Fields in VB2_NV_OFFS_BOOT2 (unused = 0x80) */
-#define VB2_NV_BOOT2_RESULT_MASK               0x03
-#define VB2_NV_BOOT2_TRIED                     0x04
-#define VB2_NV_BOOT2_TRY_NEXT                  0x08
-#define VB2_NV_BOOT2_PREV_RESULT_MASK          0x30
-#define VB2_NV_BOOT2_PREV_RESULT_SHIFT 4  /* Number of bits to shift result */
-#define VB2_NV_BOOT2_PREV_TRIED                0x40
-
-/* Fields in VB2_NV_OFFS_DEV (unused = 0xc0) */
-#define VB2_NV_DEV_FLAG_USB                    0x01
-#define VB2_NV_DEV_FLAG_SIGNED_ONLY            0x02
-#define VB2_NV_DEV_FLAG_LEGACY                 0x04
-#define VB2_NV_DEV_FLAG_FASTBOOT_FULL_CAP      0x08
-#define VB2_NV_DEV_FLAG_DEFAULT_BOOT           0x30
-#define VB2_NV_DEV_DEFAULT_BOOT_SHIFT 4  /* Number of bits to shift */
-
-/* Fields in VB2_NV_OFFS_TPM (unused = 0xf8) */
-#define VB2_NV_TPM_CLEAR_OWNER_REQUEST         0x01
-#define VB2_NV_TPM_CLEAR_OWNER_DONE            0x02
-#define VB2_NV_TPM_REBOOTED                    0x04
-
-/* Fields in VB2_NV_OFFS_MISC (unused = 0xf0) */
-#define VB2_NV_MISC_UNLOCK_FASTBOOT            0x01
-#define VB2_NV_MISC_BOOT_ON_AC_DETECT          0x02
-#define VB2_NV_MISC_TRY_RO_SYNC                       0x04
-#define VB2_NV_MISC_BATTERY_CUTOFF             0x08
-
-#endif  /* VBOOT_REFERENCE_VBOOT_2NVSTORAGE_FIELDS_H_ */
diff --git a/kern/lib/crypto/include/2recovery_reasons.h b/kern/lib/crypto/include/2recovery_reasons.h
deleted file mode 100644 (file)
index 13685e6..0000000
+++ /dev/null
@@ -1,227 +0,0 @@
-/* Copyright (c) 2014 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.
- *
- * Recovery reasons
- */
-
-#ifndef VBOOT_REFERENCE_VBOOT_2RECOVERY_REASONS_H_
-#define VBOOT_REFERENCE_VBOOT_2RECOVERY_REASONS_H_
-
-/* Recovery reason codes */
-enum vb2_nv_recovery {
-       /* Recovery not requested. */
-       VB2_RECOVERY_NOT_REQUESTED = 0x00,
-
-       /*
-        * Recovery requested from legacy utility.  (Prior to the NV storage
-        * spec, recovery mode was a single bitfield; this value is reserved so
-        * that scripts which wrote 1 to the recovery field are distinguishable
-        * from scripts whch use the recovery reasons listed here.
-        */
-       VB2_RECOVERY_LEGACY = 0x01,
-
-       /* User manually requested recovery via recovery button */
-       VB2_RECOVERY_RO_MANUAL = 0x02,
-
-       /*
-        * RW firmware failed signature check (neither RW firmware slot was
-        * valid)
-        */
-       VB2_RECOVERY_RO_INVALID_RW = 0x03,
-
-       /* S3 resume failed */
-       VB2_RECOVERY_RO_S3_RESUME = 0x04,
-
-       /* TPM error in read-only firmware (deprecated) */
-       VB2_RECOVERY_DEP_RO_TPM_ERROR = 0x05,
-
-       /* Shared data error in read-only firmware */
-       VB2_RECOVERY_RO_SHARED_DATA = 0x06,
-
-       /* Test error from S3Resume() */
-       VB2_RECOVERY_RO_TEST_S3 = 0x07,
-
-       /* Test error from LoadFirmwareSetup() (deprecated) */
-       VB2_RECOVERY_RO_TEST_LFS = 0x08,
-
-       /* Test error from LoadFirmware() (deprecated) */
-       VB2_RECOVERY_RO_TEST_LF = 0x09,
-
-       /* Latest tried RW firmware keyblock verification failed */
-       VB2_RECOVERY_FW_KEYBLOCK = 0x13,
-
-       /* Latest tried RW firmware key version too old */
-       VB2_RECOVERY_FW_KEY_ROLLBACK = 0x14,
-
-       /* Latest tried RW firmware preamble verification failed */
-       VB2_RECOVERY_FW_PREAMBLE = 0x16,
-
-       /* Latest tried RW firmware version too old */
-       VB2_RECOVERY_FW_ROLLBACK = 0x17,
-
-       /* Latest tried RW firmware body verification failed */
-       VB2_RECOVERY_FW_BODY = 0x1b,
-
-       /*
-        * Firmware boot failure outside of verified boot (RAM init, missing
-        * SSD, etc.).
-        */
-       VB2_RECOVERY_RO_FIRMWARE = 0x20,
-
-       /*
-        * Recovery mode TPM initialization requires a system reboot.  The
-        * system was already in recovery mode for some other reason when this
-        * happened.
-        */
-       VB2_RECOVERY_RO_TPM_REBOOT = 0x21,
-
-       /* EC software sync - other error */
-       VB2_RECOVERY_EC_SOFTWARE_SYNC = 0x22,
-
-       /* EC software sync - unable to determine active EC image */
-       VB2_RECOVERY_EC_UNKNOWN_IMAGE = 0x23,
-
-       /* EC software sync - error obtaining EC image hash (deprecated) */
-       VB2_RECOVERY_DEP_EC_HASH = 0x24,
-
-       /* EC software sync - error obtaining expected EC image */
-       VB2_RECOVERY_EC_EXPECTED_IMAGE = 0x25,
-
-       /* EC software sync - error updating EC */
-       VB2_RECOVERY_EC_UPDATE = 0x26,
-
-       /* EC software sync - unable to jump to EC-RW */
-       VB2_RECOVERY_EC_JUMP_RW = 0x27,
-
-       /* EC software sync - unable to protect / unprotect EC-RW */
-       VB2_RECOVERY_EC_PROTECT = 0x28,
-
-       /* EC software sync - error obtaining expected EC hash */
-       VB2_RECOVERY_EC_EXPECTED_HASH = 0x29,
-
-       /* EC software sync - expected EC image doesn't match hash */
-       VB2_RECOVERY_EC_HASH_MISMATCH = 0x2a,
-
-       /* New error codes from VB2 */
-       /* TODO: may need to add strings for these in the original fwlib */
-
-       /* Secure data inititalization error */
-       VB2_RECOVERY_SECDATA_INIT = 0x2b,
-
-       /* GBB header is bad */
-       VB2_RECOVERY_GBB_HEADER = 0x2c,
-
-       /* Unable to clear TPM owner */
-       VB2_RECOVERY_TPM_CLEAR_OWNER = 0x2d,
-
-       /* Error determining/updating virtual dev switch */
-       VB2_RECOVERY_DEV_SWITCH = 0x2e,
-
-       /* Error determining firmware slot */
-       VB2_RECOVERY_FW_SLOT = 0x2f,
-
-       /* Unspecified/unknown error in read-only firmware */
-       VB2_RECOVERY_RO_UNSPECIFIED = 0x3f,
-
-       /*
-        * User manually requested recovery by pressing a key at developer
-        * warning screen
-        */
-       VB2_RECOVERY_RW_DEV_SCREEN = 0x41,
-
-       /* No OS kernel detected */
-       VB2_RECOVERY_RW_NO_OS = 0x42,
-
-       /* OS kernel failed signature check */
-       VB2_RECOVERY_RW_INVALID_OS = 0x43,
-
-       /* TPM error in rewritable firmware (deprecated) */
-       VB2_RECOVERY_DEP_RW_TPM_ERROR = 0x44,
-
-       /* RW firmware in dev mode, but dev switch is off */
-       VB2_RECOVERY_RW_DEV_MISMATCH = 0x45,
-
-       /* Shared data error in rewritable firmware */
-       VB2_RECOVERY_RW_SHARED_DATA = 0x46,
-
-       /* Test error from LoadKernel() */
-       VB2_RECOVERY_RW_TEST_LK = 0x47,
-
-       /* No bootable disk found (deprecated)*/
-       VB2_RECOVERY_DEP_RW_NO_DISK = 0x48,
-
-       /* Rebooting did not correct TPM_E_FAIL or TPM_E_FAILEDSELFTEST  */
-       VB2_RECOVERY_TPM_E_FAIL = 0x49,
-
-       /* TPM setup error in read-only firmware */
-       VB2_RECOVERY_RO_TPM_S_ERROR = 0x50,
-
-       /* TPM write error in read-only firmware */
-       VB2_RECOVERY_RO_TPM_W_ERROR = 0x51,
-
-       /* TPM lock error in read-only firmware */
-       VB2_RECOVERY_RO_TPM_L_ERROR = 0x52,
-
-       /* TPM update error in read-only firmware */
-       VB2_RECOVERY_RO_TPM_U_ERROR = 0x53,
-
-       /* TPM read error in rewritable firmware */
-       VB2_RECOVERY_RW_TPM_R_ERROR = 0x54,
-
-       /* TPM write error in rewritable firmware */
-       VB2_RECOVERY_RW_TPM_W_ERROR = 0x55,
-
-       /* TPM lock error in rewritable firmware */
-       VB2_RECOVERY_RW_TPM_L_ERROR = 0x56,
-
-       /* EC software sync unable to get EC image hash */
-       VB2_RECOVERY_EC_HASH_FAILED = 0x57,
-
-       /* EC software sync invalid image hash size */
-       VB2_RECOVERY_EC_HASH_SIZE    = 0x58,
-
-       /* Unspecified error while trying to load kernel */
-       VB2_RECOVERY_LK_UNSPECIFIED  = 0x59,
-
-       /* No bootable storage device in system */
-       VB2_RECOVERY_RW_NO_DISK      = 0x5a,
-
-       /* No bootable kernel found on disk */
-       VB2_RECOVERY_RW_NO_KERNEL    = 0x5b,
-
-       /* BCB related error in RW firmware */
-       VB2_RECOVERY_RW_BCB_ERROR    = 0x5c,
-
-       /* New error codes from VB2 */
-       /* TODO: may need to add strings for these in the original fwlib */
-
-       /* Secure data inititalization error */
-       VB2_RECOVERY_SECDATAK_INIT = 0x5d,
-
-       /* Fastboot mode requested in firmware */
-       VB2_RECOVERY_FW_FASTBOOT     = 0x5e,
-
-       /* Unspecified/unknown error in rewritable firmware */
-       VB2_RECOVERY_RW_UNSPECIFIED  = 0x7f,
-
-       /* DM-verity error */
-       VB2_RECOVERY_KE_DM_VERITY    = 0x81,
-
-       /* Unspecified/unknown error in kernel */
-       VB2_RECOVERY_KE_UNSPECIFIED  = 0xbf,
-
-       /* Recovery mode test from user-mode */
-       VB2_RECOVERY_US_TEST         = 0xc1,
-
-       /* Recovery requested by user-mode via BCB */
-       VB2_RECOVERY_BCB_USER_MODE   = 0xc2,
-
-       /* Fastboot mode requested by user-mode */
-       VB2_RECOVERY_US_FASTBOOT     = 0xc3,
-
-       /* Unspecified/unknown error in user-mode */
-       VB2_RECOVERY_US_UNSPECIFIED  = 0xff,
-};
-
-#endif  /* VBOOT_REFERENCE_VBOOT_2RECOVERY_REASONS_H_ */
diff --git a/kern/lib/crypto/include/2return_codes.h b/kern/lib/crypto/include/2return_codes.h
deleted file mode 100644 (file)
index 27b80d1..0000000
+++ /dev/null
@@ -1,773 +0,0 @@
-/* Copyright (c) 2014 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.
- */
-
-#ifndef VBOOT_2_RETURN_CODES_H_
-#define VBOOT_2_RETURN_CODES_H_
-
-/*
- * Return codes from verified boot functions.
- *
- * Note that other values may be passed through from vb2ex_*() calls; see
- * the comment for VB2_ERROR_EX below.
- */
-enum vb2_return_code {
-       /* Success - no error */
-       VB2_SUCCESS = 0,
-
-       /*
-        * All vboot2 error codes start at a large offset from zero, to reduce
-        * the risk of overlap with other error codes (TPM, etc.).
-        */
-       VB2_ERROR_BASE = 0x10000000,
-
-       /* Unknown / unspecified error */
-       VB2_ERROR_UNKNOWN = VB2_ERROR_BASE + 1,
-
-       /* Mock error for testing */
-       VB2_ERROR_MOCK,
-
-        /**********************************************************************
-        * SHA errors
-        */
-       VB2_ERROR_SHA = VB2_ERROR_BASE + 0x010000,
-
-       /* Bad algorithm in vb2_digest_init() */
-       VB2_ERROR_SHA_INIT_ALGORITHM,
-
-       /* Bad algorithm in vb2_digest_extend() */
-       VB2_ERROR_SHA_EXTEND_ALGORITHM,
-
-       /* Bad algorithm in vb2_digest_finalize() */
-       VB2_ERROR_SHA_FINALIZE_ALGORITHM,
-
-       /* Digest size buffer too small in vb2_digest_finalize() */
-       VB2_ERROR_SHA_FINALIZE_DIGEST_SIZE,
-
-        /**********************************************************************
-        * RSA errors
-        */
-       VB2_ERROR_RSA = VB2_ERROR_BASE + 0x020000,
-
-       /* Padding mismatch in vb2_check_padding() */
-       VB2_ERROR_RSA_PADDING,
-
-       /* Bad algorithm in vb2_check_padding() */
-       VB2_ERROR_RSA_PADDING_ALGORITHM,
-
-       /* Null param passed to vb2_verify_digest() */
-       VB2_ERROR_RSA_VERIFY_PARAM,
-
-       /* Bad algorithm in vb2_verify_digest() */
-       VB2_ERROR_RSA_VERIFY_ALGORITHM,
-
-       /* Bad signature length in vb2_verify_digest() */
-       VB2_ERROR_RSA_VERIFY_SIG_LEN,
-
-       /* Work buffer too small in vb2_verify_digest() */
-       VB2_ERROR_RSA_VERIFY_WORKBUF,
-
-       /* Digest mismatch in vb2_verify_digest() */
-       VB2_ERROR_RSA_VERIFY_DIGEST,
-
-       /* Bad size calculation in vb2_check_padding() */
-       VB2_ERROR_RSA_PADDING_SIZE,
-
-        /**********************************************************************
-        * NV storage errors
-        */
-       VB2_ERROR_NV = VB2_ERROR_BASE + 0x030000,
-
-       /* Bad header in vb2_nv_check_crc() */
-       VB2_ERROR_NV_HEADER,
-
-       /* Bad CRC in vb2_nv_check_crc() */
-       VB2_ERROR_NV_CRC,
-
-        /**********************************************************************
-        * Secure data storage errors
-        */
-       VB2_ERROR_SECDATA = VB2_ERROR_BASE + 0x040000,
-
-       /* Bad CRC in vb2_secdata_check_crc() */
-       VB2_ERROR_SECDATA_CRC,
-
-       /* Secdata is all zeroes (uninitialized) in vb2_secdata_check_crc() */
-       VB2_ERROR_SECDATA_ZERO,
-
-       /* Invalid param in vb2_secdata_get() */
-       VB2_ERROR_SECDATA_GET_PARAM,
-
-       /* Invalid param in vb2_secdata_set() */
-       VB2_ERROR_SECDATA_SET_PARAM,
-
-       /* Invalid flags passed to vb2_secdata_set() */
-       VB2_ERROR_SECDATA_SET_FLAGS,
-
-       /* Called vb2_secdata_get() with uninitialized secdata */
-       VB2_ERROR_SECDATA_GET_UNINITIALIZED,
-
-       /* Called vb2_secdata_set() with uninitialized secdata */
-       VB2_ERROR_SECDATA_SET_UNINITIALIZED,
-
-       /* Bad CRC in vb2_secdatak_check_crc() */
-       VB2_ERROR_SECDATAK_CRC,
-
-       /* Bad struct version in vb2_secdatak_init() */
-       VB2_ERROR_SECDATAK_VERSION,
-
-       /* Bad uid in vb2_secdatak_init() */
-       VB2_ERROR_SECDATAK_UID,
-
-       /* Invalid param in vb2_secdatak_get() */
-       VB2_ERROR_SECDATAK_GET_PARAM,
-
-       /* Invalid param in vb2_secdatak_set() */
-       VB2_ERROR_SECDATAK_SET_PARAM,
-
-       /* Invalid flags passed to vb2_secdatak_set() */
-       VB2_ERROR_SECDATAK_SET_FLAGS,
-
-       /* Called vb2_secdatak_get() with uninitialized secdatak */
-       VB2_ERROR_SECDATAK_GET_UNINITIALIZED,
-
-       /* Called vb2_secdatak_set() with uninitialized secdatak */
-       VB2_ERROR_SECDATAK_SET_UNINITIALIZED,
-
-        /**********************************************************************
-        * Common code errors
-        */
-       VB2_ERROR_COMMON = VB2_ERROR_BASE + 0x050000,
-
-       /* Buffer is smaller than alignment offset in vb2_align() */
-       VB2_ERROR_ALIGN_BIGGER_THAN_SIZE,
-
-       /* Buffer is smaller than request in vb2_align() */
-       VB2_ERROR_ALIGN_SIZE,
-
-       /* Parent wraps around in vb2_verify_member_inside() */
-       VB2_ERROR_INSIDE_PARENT_WRAPS,
-
-       /* Member wraps around in vb2_verify_member_inside() */
-       VB2_ERROR_INSIDE_MEMBER_WRAPS,
-
-       /* Member outside parent in vb2_verify_member_inside() */
-       VB2_ERROR_INSIDE_MEMBER_OUTSIDE,
-
-       /* Member data wraps around in vb2_verify_member_inside() */
-       VB2_ERROR_INSIDE_DATA_WRAPS,
-
-       /* Member data outside parent in vb2_verify_member_inside() */
-       VB2_ERROR_INSIDE_DATA_OUTSIDE,
-
-       /* Unsupported signature algorithm in vb2_unpack_key() */
-       VB2_ERROR_UNPACK_KEY_SIG_ALGORITHM,                      /* 0x150008 */
-
-       /* Bad key size in vb2_unpack_key() */
-       VB2_ERROR_UNPACK_KEY_SIZE,
-
-       /* Bad key alignment in vb2_unpack_key() */
-       VB2_ERROR_UNPACK_KEY_ALIGN,
-
-       /* Bad key array size in vb2_unpack_key() */
-       VB2_ERROR_UNPACK_KEY_ARRAY_SIZE,
-
-       /* Bad algorithm in vb2_verify_data() */
-       VB2_ERROR_VDATA_ALGORITHM,
-
-       /* Incorrect signature size for algorithm in vb2_verify_data() */
-       VB2_ERROR_VDATA_SIG_SIZE,
-
-       /* Data smaller than length of signed data in vb2_verify_data() */
-       VB2_ERROR_VDATA_NOT_ENOUGH_DATA,
-
-       /* Not enough work buffer for digest in vb2_verify_data() */
-       VB2_ERROR_VDATA_WORKBUF_DIGEST,
-
-       /* Not enough work buffer for hash temp data in vb2_verify_data() */
-       VB2_ERROR_VDATA_WORKBUF_HASHING,                         /* 0x150010 */
-
-       /*
-        * Bad digest size in vb2_verify_data() - probably because algorithm
-        * is bad.
-        */
-       VB2_ERROR_VDATA_DIGEST_SIZE,
-
-       /* Unsupported hash algorithm in vb2_unpack_key() */
-       VB2_ERROR_UNPACK_KEY_HASH_ALGORITHM,
-
-       /* Member data overlaps member header */
-       VB2_ERROR_INSIDE_DATA_OVERLAP,
-
-       /* Unsupported packed key struct version */
-       VB2_ERROR_UNPACK_KEY_STRUCT_VERSION,
-
-       /*
-        * Buffer too small for total, fixed size, or description reported in
-        * common header, or member data checked via
-        * vb21_verify_common_member().
-        */
-       VB2_ERROR_COMMON_TOTAL_SIZE,
-       VB2_ERROR_COMMON_FIXED_SIZE,
-       VB2_ERROR_COMMON_DESC_SIZE,
-       VB2_ERROR_COMMON_MEMBER_SIZE,                            /* 0x150018 */
-
-       /*
-        * Total, fixed, description, or member offset/size not a multiple of
-        * 32 bits.
-        */
-       VB2_ERROR_COMMON_TOTAL_UNALIGNED,
-       VB2_ERROR_COMMON_FIXED_UNALIGNED,
-       VB2_ERROR_COMMON_DESC_UNALIGNED,
-       VB2_ERROR_COMMON_MEMBER_UNALIGNED,
-
-       /* Common struct description or member data wraps address space */
-       VB2_ERROR_COMMON_DESC_WRAPS,
-       VB2_ERROR_COMMON_MEMBER_WRAPS,
-
-       /* Common struct description is not null-terminated */
-       VB2_ERROR_COMMON_DESC_TERMINATOR,
-
-       /* Member data overlaps previous data */
-       VB2_ERROR_COMMON_MEMBER_OVERLAP,                         /* 0x150020 */
-
-       /* Signature bad magic number */
-       VB2_ERROR_SIG_MAGIC,
-
-       /* Signature incompatible version */
-       VB2_ERROR_SIG_VERSION,
-
-       /* Signature header doesn't fit */
-       VB2_ERROR_SIG_HEADER_SIZE,
-
-       /* Signature unsupported algorithm */
-       VB2_ERROR_SIG_ALGORITHM,
-
-       /* Signature bad size for algorithm */
-       VB2_ERROR_SIG_SIZE,
-
-       /* Wrong amount of data signed */
-       VB2_ERROR_VDATA_SIZE,
-
-       /* Digest mismatch */
-       VB2_ERROR_VDATA_VERIFY_DIGEST,
-
-       /* Key algorithm doesn't match signature algorithm */
-       VB2_ERROR_VDATA_ALGORITHM_MISMATCH,
-
-       /* Bad magic number in vb2_unpack_key() */
-       VB2_ERROR_UNPACK_KEY_MAGIC,
-
-        /**********************************************************************
-        * Keyblock verification errors (all in vb2_verify_keyblock())
-        */
-       VB2_ERROR_KEYBLOCK = VB2_ERROR_BASE + 0x060000,
-
-       /* Data buffer too small for header */
-       VB2_ERROR_KEYBLOCK_TOO_SMALL_FOR_HEADER,
-
-       /* Magic number not present */
-       VB2_ERROR_KEYBLOCK_MAGIC,
-
-       /* Header version incompatible */
-       VB2_ERROR_KEYBLOCK_HEADER_VERSION,
-
-       /* Data buffer too small for keyblock */
-       VB2_ERROR_KEYBLOCK_SIZE,
-
-       /* Signature data offset outside keyblock */
-       VB2_ERROR_KEYBLOCK_SIG_OUTSIDE,
-
-       /* Signature signed more data than size of keyblock */
-       VB2_ERROR_KEYBLOCK_SIGNED_TOO_MUCH,
-
-       /* Signature signed less data than size of keyblock header */
-       VB2_ERROR_KEYBLOCK_SIGNED_TOO_LITTLE,
-
-       /* Signature invalid */
-       VB2_ERROR_KEYBLOCK_SIG_INVALID,
-
-       /* Data key outside keyblock */
-       VB2_ERROR_KEYBLOCK_DATA_KEY_OUTSIDE,
-
-       /* Data key outside signed part of keyblock */
-       VB2_ERROR_KEYBLOCK_DATA_KEY_UNSIGNED,
-
-       /* Signature signed wrong amount of data */
-       VB2_ERROR_KEYBLOCK_SIGNED_SIZE,
-
-       /* No signature matching key ID */
-       VB2_ERROR_KEYBLOCK_SIG_ID,
-
-        /**********************************************************************
-        * Preamble verification errors (all in vb2_verify_preamble())
-        */
-       VB2_ERROR_PREAMBLE = VB2_ERROR_BASE + 0x070000,
-
-       /* Preamble data too small to contain header */
-       VB2_ERROR_PREAMBLE_TOO_SMALL_FOR_HEADER,
-
-       /* Header version incompatible */
-       VB2_ERROR_PREAMBLE_HEADER_VERSION,
-
-       /* Header version too old */
-       VB2_ERROR_PREAMBLE_HEADER_OLD,
-
-       /* Data buffer too small for preamble */
-       VB2_ERROR_PREAMBLE_SIZE,
-
-       /* Signature data offset outside preamble */
-       VB2_ERROR_PREAMBLE_SIG_OUTSIDE,
-
-       /* Signature signed more data than size of preamble */
-       VB2_ERROR_PREAMBLE_SIGNED_TOO_MUCH,
-
-       /* Signature signed less data than size of preamble header */
-       VB2_ERROR_PREAMBLE_SIGNED_TOO_LITTLE,
-
-       /* Signature invalid */
-       VB2_ERROR_PREAMBLE_SIG_INVALID,
-
-       /* Body signature outside preamble */
-       VB2_ERROR_PREAMBLE_BODY_SIG_OUTSIDE,
-
-       /* Kernel subkey outside preamble */
-       VB2_ERROR_PREAMBLE_KERNEL_SUBKEY_OUTSIDE,
-
-       /* Bad magic number */
-       VB2_ERROR_PREAMBLE_MAGIC,
-
-       /* Hash is signed */
-       VB2_ERROR_PREAMBLE_HASH_SIGNED,
-
-       /* Bootloader outside signed portion of body */
-       VB2_ERROR_PREAMBLE_BOOTLOADER_OUTSIDE,
-
-       /* Vmlinuz header outside signed portion of body */
-       VB2_ERROR_PREAMBLE_VMLINUZ_HEADER_OUTSIDE,
-
-        /**********************************************************************
-        * Misc higher-level code errors
-        */
-       VB2_ERROR_MISC = VB2_ERROR_BASE + 0x080000,
-
-       /* Work buffer too small in vb2_init_context() */
-       VB2_ERROR_INITCTX_WORKBUF_SMALL,
-
-       /* Work buffer unaligned in vb2_init_context() */
-       VB2_ERROR_INITCTX_WORKBUF_ALIGN,
-
-       /* Work buffer too small in vb2_fw_parse_gbb() */
-       VB2_ERROR_GBB_WORKBUF,
-
-       /* Bad magic number in vb2_read_gbb_header() */
-       VB2_ERROR_GBB_MAGIC,
-
-       /* Incompatible version in vb2_read_gbb_header() */
-       VB2_ERROR_GBB_VERSION,
-
-       /* Old version in vb2_read_gbb_header() */
-       VB2_ERROR_GBB_TOO_OLD,
-
-       /* Header size too small in vb2_read_gbb_header() */
-       VB2_ERROR_GBB_HEADER_SIZE,
-
-       /* Work buffer too small for root key in vb2_load_fw_keyblock() */
-       VB2_ERROR_FW_KEYBLOCK_WORKBUF_ROOT_KEY,
-
-       /* Work buffer too small for header in vb2_load_fw_keyblock() */
-       VB2_ERROR_FW_KEYBLOCK_WORKBUF_HEADER,
-
-       /* Work buffer too small for keyblock in vb2_load_fw_keyblock() */
-       VB2_ERROR_FW_KEYBLOCK_WORKBUF,
-
-       /* Keyblock version out of range in vb2_load_fw_keyblock() */
-       VB2_ERROR_FW_KEYBLOCK_VERSION_RANGE,
-
-       /* Keyblock version rollback in vb2_load_fw_keyblock() */
-       VB2_ERROR_FW_KEYBLOCK_VERSION_ROLLBACK,
-
-       /* Missing firmware data key in vb2_load_fw_preamble() */
-       VB2_ERROR_FW_PREAMBLE2_DATA_KEY,
-
-       /* Work buffer too small for header in vb2_load_fw_preamble() */
-       VB2_ERROR_FW_PREAMBLE2_WORKBUF_HEADER,
-
-       /* Work buffer too small for preamble in vb2_load_fw_preamble() */
-       VB2_ERROR_FW_PREAMBLE2_WORKBUF,
-
-       /* Firmware version out of range in vb2_load_fw_preamble() */
-       VB2_ERROR_FW_PREAMBLE_VERSION_RANGE,
-
-       /* Firmware version rollback in vb2_load_fw_preamble() */
-       VB2_ERROR_FW_PREAMBLE_VERSION_ROLLBACK,
-
-       /* Not enough space in work buffer for resource object */
-       VB2_ERROR_READ_RESOURCE_OBJECT_BUF,
-
-       /* Work buffer too small for header in vb2_load_kernel_keyblock() */
-       VB2_ERROR_KERNEL_KEYBLOCK_WORKBUF_HEADER,
-
-       /* Work buffer too small for keyblock in vb2_load_kernel_keyblock() */
-       VB2_ERROR_KERNEL_KEYBLOCK_WORKBUF,
-
-       /* Keyblock version out of range in vb2_load_kernel_keyblock() */
-       VB2_ERROR_KERNEL_KEYBLOCK_VERSION_RANGE,
-
-       /* Keyblock version rollback in vb2_load_kernel_keyblock() */
-       VB2_ERROR_KERNEL_KEYBLOCK_VERSION_ROLLBACK,
-
-       /*
-        * Keyblock flags don't match current mode in
-        * vb2_load_kernel_keyblock().
-        */
-       VB2_ERROR_KERNEL_KEYBLOCK_DEV_FLAG,
-       VB2_ERROR_KERNEL_KEYBLOCK_REC_FLAG,
-
-       /* Missing firmware data key in vb2_load_kernel_preamble() */
-       VB2_ERROR_KERNEL_PREAMBLE2_DATA_KEY,
-
-       /* Work buffer too small for header in vb2_load_kernel_preamble() */
-       VB2_ERROR_KERNEL_PREAMBLE2_WORKBUF_HEADER,
-
-       /* Work buffer too small for preamble in vb2_load_kernel_preamble() */
-       VB2_ERROR_KERNEL_PREAMBLE2_WORKBUF,
-
-       /* Kernel version out of range in vb2_load_kernel_preamble() */
-       VB2_ERROR_KERNEL_PREAMBLE_VERSION_RANGE,
-
-       /* Kernel version rollback in vb2_load_kernel_preamble() */
-       VB2_ERROR_KERNEL_PREAMBLE_VERSION_ROLLBACK,
-
-       /* Kernel preamble not loaded before calling vb2api_get_kernel_size() */
-       VB2_ERROR_API_GET_KERNEL_SIZE_PREAMBLE,
-
-        /**********************************************************************
-        * API-level errors
-        */
-       VB2_ERROR_API = VB2_ERROR_BASE + 0x090000,
-
-       /* Bad tag in vb2api_init_hash() */
-       VB2_ERROR_API_INIT_HASH_TAG,
-
-       /* Preamble not present in vb2api_init_hash() */
-       VB2_ERROR_API_INIT_HASH_PREAMBLE,
-
-       /* Work buffer too small in vb2api_init_hash() */
-       VB2_ERROR_API_INIT_HASH_WORKBUF,
-
-       /* Missing firmware data key in vb2api_init_hash() */
-       VB2_ERROR_API_INIT_HASH_DATA_KEY,
-
-       /* Uninitialized work area in vb2api_extend_hash() */
-       VB2_ERROR_API_EXTEND_HASH_WORKBUF,
-
-       /* Too much data hashed in vb2api_extend_hash() */
-       VB2_ERROR_API_EXTEND_HASH_SIZE,
-
-       /* Preamble not present in vb2api_check_hash() */
-       VB2_ERROR_API_CHECK_HASH_PREAMBLE,
-
-       /* Uninitialized work area in vb2api_check_hash() */
-       VB2_ERROR_API_CHECK_HASH_WORKBUF,
-
-       /* Wrong amount of data hashed in vb2api_check_hash() */
-       VB2_ERROR_API_CHECK_HASH_SIZE,
-
-       /* Work buffer too small in vb2api_check_hash() */
-       VB2_ERROR_API_CHECK_HASH_WORKBUF_DIGEST,
-
-       /* Bad tag in vb2api_check_hash() */
-       VB2_ERROR_API_CHECK_HASH_TAG,
-
-       /* Missing firmware data key in vb2api_check_hash() */
-       VB2_ERROR_API_CHECK_HASH_DATA_KEY,
-
-       /* Signature size mismatch in vb2api_check_hash() */
-       VB2_ERROR_API_CHECK_HASH_SIG_SIZE,
-
-       /* Phase one needs recovery mode */
-       VB2_ERROR_API_PHASE1_RECOVERY,
-
-       /* Bad tag in vb2api_check_hash() */
-       VB2_ERROR_API_INIT_HASH_ID,
-
-       /* Signature mismatch in vb2api_check_hash() */
-       VB2_ERROR_API_CHECK_HASH_SIG,
-
-       /* Invalid enum vb2_pcr_digest requested to vb2api_get_pcr_digest */
-       VB2_ERROR_API_PCR_DIGEST,
-
-       /* Buffer size for the digest is too small for vb2api_get_pcr_digest */
-       VB2_ERROR_API_PCR_DIGEST_BUF,
-
-       /* Work buffer too small for recovery key in vb2api_kernel_phase1() */
-       VB2_ERROR_API_KPHASE1_WORKBUF_REC_KEY,
-
-       /* Firmware preamble not present for vb2api_kernel_phase1() */
-       VB2_ERROR_API_KPHASE1_PREAMBLE,
-
-       /* Wrong amount of kernel data in vb2api_verify_kernel_data() */
-       VB2_ERROR_API_VERIFY_KDATA_SIZE,
-
-       /* Kernel preamble not present for vb2api_verify_kernel_data() */
-       VB2_ERROR_API_VERIFY_KDATA_PREAMBLE,
-
-       /* Insufficient workbuf for hashing in vb2api_verify_kernel_data() */
-       VB2_ERROR_API_VERIFY_KDATA_WORKBUF,
-
-       /* Bad data key in vb2api_verify_kernel_data() */
-       VB2_ERROR_API_VERIFY_KDATA_KEY,
-
-       /* Phase one passing through secdata's request to reboot */
-       VB2_ERROR_API_PHASE1_SECDATA_REBOOT,
-
-       /* Digest buffer passed into vb2api_check_hash incorrect. */
-       VB2_ERROR_API_CHECK_DIGEST_SIZE,
-
-        /**********************************************************************
-        * Errors which may be generated by implementations of vb2ex functions.
-        * Implementation may also return its own specific errors, which should
-        * NOT be in the range VB2_ERROR_BASE...VB2_ERROR_MAX to avoid
-        * conflicting with future vboot2 error codes.
-        */
-       VB2_ERROR_EX = VB2_ERROR_BASE + 0x0a0000,
-
-       /* Read resource not implemented */
-       VB2_ERROR_EX_READ_RESOURCE_UNIMPLEMENTED,
-
-       /* Resource index not found */
-       VB2_ERROR_EX_READ_RESOURCE_INDEX,
-
-       /* Size of resource not big enough for requested offset and/or size */
-       VB2_ERROR_EX_READ_RESOURCE_SIZE,
-
-       /* TPM clear owner failed */
-       VB2_ERROR_EX_TPM_CLEAR_OWNER,
-
-       /* TPM clear owner not implemented */
-       VB2_ERROR_EX_TPM_CLEAR_OWNER_UNIMPLEMENTED,
-
-       /* Hardware crypto engine doesn't support this algorithm (non-fatal) */
-       VB2_ERROR_EX_HWCRYPTO_UNSUPPORTED,
-
-
-        /**********************************************************************
-        * Errors generated by host library (non-firmware) start here.
-        */
-       VB2_ERROR_HOST_BASE = 0x20000000,
-
-        /**********************************************************************
-        * Errors generated by host library misc functions
-        */
-       VB2_ERROR_HOST_MISC = VB2_ERROR_HOST_BASE + 0x010000,
-
-       /* Unable to open file in read_file() */
-       VB2_ERROR_READ_FILE_OPEN,
-
-       /* Bad size in read_file() */
-       VB2_ERROR_READ_FILE_SIZE,
-
-       /* Unable to allocate buffer in read_file() */
-       VB2_ERROR_READ_FILE_ALLOC,
-
-       /* Unable to read data in read_file() */
-       VB2_ERROR_READ_FILE_DATA,
-
-       /* Unable to open file in write_file() */
-       VB2_ERROR_WRITE_FILE_OPEN,
-
-       /* Unable to write data in write_file() */
-       VB2_ERROR_WRITE_FILE_DATA,
-
-       /* Unable to convert string to struct vb_id */
-       VB2_ERROR_STR_TO_ID,
-
-        /**********************************************************************
-        * Errors generated by host library key functions
-        */
-       VB2_ERROR_HOST_KEY = VB2_ERROR_HOST_BASE + 0x020000,
-
-       /* Unable to allocate key  in vb2_private_key_read_pem() */
-       VB2_ERROR_READ_PEM_ALLOC,
-
-       /* Unable to open .pem file in vb2_private_key_read_pem() */
-       VB2_ERROR_READ_PEM_FILE_OPEN,
-
-       /* Bad RSA data from .pem file in vb2_private_key_read_pem() */
-       VB2_ERROR_READ_PEM_RSA,
-
-       /* Unable to set private key description */
-       VB2_ERROR_PRIVATE_KEY_SET_DESC,
-
-       /* Bad magic number in vb2_private_key_unpack() */
-       VB2_ERROR_UNPACK_PRIVATE_KEY_MAGIC,
-
-       /* Bad common header in vb2_private_key_unpack() */
-       VB2_ERROR_UNPACK_PRIVATE_KEY_HEADER,
-
-       /* Bad key data in vb2_private_key_unpack() */
-       VB2_ERROR_UNPACK_PRIVATE_KEY_DATA,
-
-       /* Bad struct version in vb2_private_key_unpack() */
-       VB2_ERROR_UNPACK_PRIVATE_KEY_STRUCT_VERSION,
-
-       /* Unable to allocate buffer in vb2_private_key_unpack() */
-       VB2_ERROR_UNPACK_PRIVATE_KEY_ALLOC,
-
-       /* Unable to unpack RSA key in vb2_private_key_unpack() */
-       VB2_ERROR_UNPACK_PRIVATE_KEY_RSA,
-
-       /* Unable to set description in vb2_private_key_unpack() */
-       VB2_ERROR_UNPACK_PRIVATE_KEY_DESC,
-
-       /* Bad bare hash key in vb2_private_key_unpack() */
-       VB2_ERROR_UNPACK_PRIVATE_KEY_HASH,
-
-       /* Unable to create RSA data in vb2_private_key_write() */
-       VB2_ERROR_PRIVATE_KEY_WRITE_RSA,
-
-       /* Unable to allocate packed key buffer in vb2_private_key_write() */
-       VB2_ERROR_PRIVATE_KEY_WRITE_ALLOC,
-
-       /* Unable to write file in vb2_private_key_write() */
-       VB2_ERROR_PRIVATE_KEY_WRITE_FILE,
-
-       /* Bad algorithm in vb2_private_key_hash() */
-       VB2_ERROR_PRIVATE_KEY_HASH,
-
-       /* Unable to determine key size in vb2_public_key_alloc() */
-       VB2_ERROR_PUBLIC_KEY_ALLOC_SIZE,
-
-       /* Unable to allocate buffer in vb2_public_key_alloc() */
-       VB2_ERROR_PUBLIC_KEY_ALLOC,
-
-       /* Unable to set public key description */
-       VB2_ERROR_PUBLIC_KEY_SET_DESC,
-
-       /* Unable to read key data in vb2_public_key_read_keyb() */
-       VB2_ERROR_READ_KEYB_DATA,
-
-       /* Wrong amount of data read in vb2_public_key_read_keyb() */
-       VB2_ERROR_READ_KEYB_SIZE,
-
-       /* Unable to allocate key buffer in vb2_public_key_read_keyb() */
-       VB2_ERROR_READ_KEYB_ALLOC,
-
-       /* Error unpacking RSA arrays in vb2_public_key_read_keyb() */
-       VB2_ERROR_READ_KEYB_UNPACK,
-
-       /* Unable to read key data in vb2_packed_key_read() */
-       VB2_ERROR_READ_PACKED_KEY_DATA,
-
-       /* Bad key data in vb2_packed_key_read() */
-       VB2_ERROR_READ_PACKED_KEY,
-
-       /* Unable to determine key size in vb2_public_key_pack() */
-       VB2_ERROR_PUBLIC_KEY_PACK_SIZE,
-
-       /* Bad hash algorithm in vb2_public_key_hash() */
-       VB2_ERROR_PUBLIC_KEY_HASH,
-
-       /* Bad key size in vb2_copy_packed_key() */
-       VB2_ERROR_COPY_KEY_SIZE,
-
-       /* Unable to convert back to vb1 crypto algorithm */
-       VB2_ERROR_VB1_CRYPTO_ALGORITHM,
-
-       /* Unable to allocate packed key */
-       VB2_ERROR_PACKED_KEY_ALLOC,
-
-       /* Unable to copy packed key */
-       VB2_ERROR_PACKED_KEY_COPY,
-
-        /**********************************************************************
-        * Errors generated by host library signature functions
-        */
-       VB2_ERROR_HOST_SIG = VB2_ERROR_HOST_BASE + 0x030000,
-
-       /* Bad hash algorithm in vb2_digest_info() */
-       VB2_ERROR_DIGEST_INFO,
-
-       /*
-        * Unable to determine signature size for key algorithm in
-        * vb2_sig_size_for_key().
-        */
-       VB2_ERROR_SIG_SIZE_FOR_KEY,
-
-       /* Bad signature size in vb2_sign_data() */
-       VB2_SIGN_DATA_SIG_SIZE,
-
-       /* Unable to get digest info in vb2_sign_data() */
-       VB2_SIGN_DATA_DIGEST_INFO,
-
-       /* Unable to get digest size in vb2_sign_data() */
-       VB2_SIGN_DATA_DIGEST_SIZE,
-
-       /* Unable to allocate digest buffer in vb2_sign_data() */
-       VB2_SIGN_DATA_DIGEST_ALLOC,
-
-       /* Unable to initialize digest in vb2_sign_data() */
-       VB2_SIGN_DATA_DIGEST_INIT,
-
-       /* Unable to extend digest in vb2_sign_data() */
-       VB2_SIGN_DATA_DIGEST_EXTEND,
-
-       /* Unable to finalize digest in vb2_sign_data() */
-       VB2_SIGN_DATA_DIGEST_FINALIZE,
-
-       /* RSA encrypt failed in vb2_sign_data() */
-       VB2_SIGN_DATA_RSA_ENCRYPT,
-
-       /* Not enough buffer space to hold signature in vb2_sign_object() */
-       VB2_SIGN_OBJECT_OVERFLOW,
-
-        /**********************************************************************
-        * Errors generated by host library keyblock functions
-        */
-       VB2_ERROR_HOST_KEYBLOCK = VB2_ERROR_HOST_BASE + 0x040000,
-
-       /* Unable to determine signature sizes for vb2_create_keyblock() */
-       VB2_KEYBLOCK_CREATE_SIG_SIZE,
-
-       /* Unable to pack data key for vb2_create_keyblock() */
-       VB2_KEYBLOCK_CREATE_DATA_KEY,
-
-       /* Unable to allocate buffer in vb2_create_keyblock() */
-       VB2_KEYBLOCK_CREATE_ALLOC,
-
-       /* Unable to sign keyblock in vb2_create_keyblock() */
-       VB2_KEYBLOCK_CREATE_SIGN,
-
-        /**********************************************************************
-        * Errors generated by host library firmware preamble functions
-        */
-       VB2_ERROR_HOST_FW_PREAMBLE = VB2_ERROR_HOST_BASE + 0x050000,
-
-       /* Unable to determine signature sizes for vb2_create_fw_preamble() */
-       VB2_FW_PREAMBLE_CREATE_SIG_SIZE,
-
-       /* Unable to allocate buffer in vb2_create_fw_preamble() */
-       VB2_FW_PREAMBLE_CREATE_ALLOC,
-
-       /* Unable to sign preamble in vb2_create_fw_preamble() */
-       VB2_FW_PREAMBLE_CREATE_SIGN,
-
-        /**********************************************************************
-        * Errors generated by unit test functions
-        */
-       VB2_ERROR_UNIT_TEST = VB2_ERROR_HOST_BASE + 0x060000,
-
-       /* Unable to open an input file needed for a unit test */
-       VB2_ERROR_TEST_INPUT_FILE,
-
-        /**********************************************************************
-        * Highest non-zero error generated inside vboot library.  Note that
-        * error codes passed through vboot when it calls external APIs may
-        * still be outside this range.
-        */
-       VB2_ERROR_MAX = VB2_ERROR_BASE + 0x1fffffff,
-};
-
-#endif  /* VBOOT_2_RETURN_CODES_H_ */
diff --git a/kern/lib/crypto/include/2rsa.h b/kern/lib/crypto/include/2rsa.h
deleted file mode 100644 (file)
index 7e63a6a..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-/* Copyright (c) 2014 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.
- */
-
-#ifndef VBOOT_REFERENCE_2RSA_H_
-#define VBOOT_REFERENCE_2RSA_H_
-
-#include "2crypto.h"
-#include "2struct.h"
-
-struct vb2_workbuf;
-
-/* Public key structure in RAM */
-struct vb2_public_key {
-       uint32_t arrsize;    /* Length of n[] and rr[] in number of uint32_t */
-       uint32_t n0inv;      /* -1 / n[0] mod 2^32 */
-       const uint32_t *n;   /* Modulus as little endian array */
-       const uint32_t *rr;  /* R^2 as little endian array */
-       enum vb2_signature_algorithm sig_alg;   /* Signature algorithm */
-       enum vb2_hash_algorithm hash_alg;       /* Hash algorithm */
-       const char *desc;                       /* Description */
-       uint32_t version;                       /* Key version */
-       const struct vb2_id *id;                /* Key ID */
-};
-
-/**
- * Convert vb2_crypto_algorithm to vb2_signature_algorithm.
- *
- * @param algorithm    Crypto algorithm (vb2_crypto_algorithm)
- *
- * @return The signature algorithm for that crypto algorithm, or
- * VB2_SIG_INVALID if the crypto algorithm or its corresponding signature
- * algorithm is invalid or not supported.
- */
-enum vb2_signature_algorithm vb2_crypto_to_signature(uint32_t algorithm);
-
-/**
- * Return the size of a RSA signature
- *
- * @param sig_alg      Signature algorithm
- * @return The size of the signature in bytes, or 0 if error.
- */
-uint32_t vb2_rsa_sig_size(enum vb2_signature_algorithm sig_alg);
-
-/**
- * Return the size of a pre-processed RSA public key.
- *
- * @param sig_alg      Signature algorithm
- * @return The size of the preprocessed key in bytes, or 0 if error.
- */
-uint32_t vb2_packed_key_size(enum vb2_signature_algorithm sig_alg);
-
-/**
- * Check pkcs 1.5 padding bytes
- *
- * @param sig          Signature to verify
- * @param key          Key to take signature and hash algorithms from
- * @return VB2_SUCCESS, or non-zero if error.
- */
-int vb2_check_padding(const uint8_t *sig, const struct vb2_public_key *key);
-
-/* Size of work buffer sufficient for vb2_rsa_verify_digest() worst case */
-#define VB2_VERIFY_RSA_DIGEST_WORKBUF_BYTES (3 * 1024)
-
-/**
- * Verify a RSA PKCS1.5 signature against an expected hash digest.
- *
- * @param key          Key to use in signature verification
- * @param sig          Signature to verify (destroyed in process)
- * @param digest       Digest of signed data
- * @param wb           Work buffer
- * @return VB2_SUCCESS, or non-zero if error.
- */
-int vb2_rsa_verify_digest(const struct vb2_public_key *key,
-                         uint8_t *sig,
-                         const uint8_t *digest,
-                         const struct vb2_workbuf *wb);
-
-#endif  /* VBOOT_REFERENCE_2RSA_H_ */
diff --git a/kern/lib/crypto/include/2secdata.h b/kern/lib/crypto/include/2secdata.h
deleted file mode 100644 (file)
index d27432e..0000000
+++ /dev/null
@@ -1,219 +0,0 @@
-/* Copyright (c) 2014 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.
- *
- * Secure non-volatile storage routines
- */
-
-#ifndef VBOOT_REFERENCE_VBOOT_SECDATA_H_
-#define VBOOT_REFERENCE_VBOOT_SECDATA_H_
-
-/*****************************************************************************/
-/* Firmware version space */
-
-/* Expected value of vb2_secdata.version */
-#define VB2_SECDATA_VERSION 2
-
-/* Flags for firmware space */
-enum vb2_secdata_flags {
-       /*
-        * Last boot was developer mode.  TPM ownership is cleared when
-        * transitioning to/from developer mode.  Set/cleared by
-        * vb2_check_dev_switch().
-        */
-       VB2_SECDATA_FLAG_LAST_BOOT_DEVELOPER = (1 << 0),
-
-       /*
-        * Virtual developer mode switch is on.  Set/cleared by the
-        * keyboard-controlled dev screens in recovery mode.  Cleared by
-        * vb2_check_dev_switch().
-        */
-       VB2_SECDATA_FLAG_DEV_MODE = (1 << 1),
-};
-
-/* Secure data area (firmware space) */
-struct vb2_secdata {
-       /* Struct version, for backwards compatibility */
-       uint8_t struct_version;
-
-       /* Flags; see vb2_secdata_flags */
-       uint8_t flags;
-
-       /* Firmware versions */
-       uint32_t fw_versions;
-
-       /* Reserved for future expansion */
-       uint8_t reserved[3];
-
-       /* CRC; must be last field in struct */
-       uint8_t crc8;
-} __attribute__((packed));
-
-/* Which param to get/set for vb2_secdata_get() / vb2_secdata_set() */
-enum vb2_secdata_param {
-       /* Flags; see vb2_secdata_flags */
-       VB2_SECDATA_FLAGS = 0,
-
-       /* Firmware versions */
-       VB2_SECDATA_VERSIONS,
-};
-
-/*****************************************************************************/
-/* Kernel version space */
-
-/* Kernel space - KERNEL_NV_INDEX, locked with physical presence. */
-#define VB2_SECDATAK_VERSION 2
-#define VB2_SECDATAK_UID 0x4752574c  /* 'GRWL' */
-
-struct vb2_secdatak {
-       /* Struct version, for backwards compatibility */
-       uint8_t struct_version;
-
-       /* Unique ID to detect space redefinition */
-       uint32_t uid;
-
-       /* Kernel versions */
-       uint32_t kernel_versions;
-
-       /* Reserved for future expansion */
-       uint8_t reserved[3];
-
-       /* CRC; must be last field in struct */
-       uint8_t crc8;
-} __attribute__((packed));
-
-/* Which param to get/set for vb2_secdatak_get() / vb2_secdatak_set() */
-enum vb2_secdatak_param {
-       /* Kernel versions */
-       VB2_SECDATAK_VERSIONS = 0,
-};
-
-/*****************************************************************************/
-/* Firmware version space functions */
-
-/**
- * Check the CRC of the secure storage context.
- *
- * Use this if reading from secure storage may be flaky, and you want to retry
- * reading it several times.
- *
- * This may be called before vb2_context_init().
- *
- * @param ctx          Context pointer
- * @return VB2_SUCCESS, or non-zero error code if error.
- */
-int vb2_secdata_check_crc(const struct vb2_context *ctx);
-
-/**
- * Create fresh data in the secure storage context.
- *
- * Use this only when initializing the secure storage context on a new machine
- * the first time it boots.  Do NOT simply use this if vb2_secdata_check_crc()
- * (or any other API in this library) fails; that could allow the secure data
- * to be rolled back to an insecure state.
- *
- * This may be called before vb2_context_init().
- */
-int vb2_secdata_create(struct vb2_context *ctx);
-
-/**
- * Initialize the secure storage context and verify its CRC.
- *
- * This must be called before vb2_secdata_get() or vb2_secdata_set().
- *
- * @param ctx          Context pointer
- * @return VB2_SUCCESS, or non-zero error code if error.
- */
-int vb2_secdata_init(struct vb2_context *ctx);
-
-/**
- * Read a secure storage value.
- *
- * @param ctx          Context pointer
- * @param param                Parameter to read
- * @param dest         Destination for value
- * @return VB2_SUCCESS, or non-zero error code if error.
- */
-int vb2_secdata_get(struct vb2_context *ctx,
-                   enum vb2_secdata_param param,
-                   uint32_t *dest);
-
-/**
- * Write a secure storage value.
- *
- * @param ctx          Context pointer
- * @param param                Parameter to write
- * @param value                New value
- * @return VB2_SUCCESS, or non-zero error code if error.
- */
-int vb2_secdata_set(struct vb2_context *ctx,
-                   enum vb2_secdata_param param,
-                   uint32_t value);
-
-/*****************************************************************************/
-/* Kernel version space functions.
- *
- * These are separate functions so that they don't bloat the size of the early
- * boot code which uses the firmware version space functions.
- */
-
-/**
- * Check the CRC of the kernel version secure storage context.
- *
- * Use this if reading from secure storage may be flaky, and you want to retry
- * reading it several times.
- *
- * This may be called before vb2_context_init().
- *
- * @param ctx          Context pointer
- * @return VB2_SUCCESS, or non-zero error code if error.
- */
-int vb2_secdatak_check_crc(const struct vb2_context *ctx);
-
-/**
- * Create fresh data in the secure storage context.
- *
- * Use this only when initializing the secure storage context on a new machine
- * the first time it boots.  Do NOT simply use this if vb2_secdatak_check_crc()
- * (or any other API in this library) fails; that could allow the secure data
- * to be rolled back to an insecure state.
- *
- * This may be called before vb2_context_init().
- */
-int vb2_secdatak_create(struct vb2_context *ctx);
-
-/**
- * Initialize the secure storage context and verify its CRC.
- *
- * This must be called before vb2_secdatak_get() or vb2_secdatak_set().
- *
- * @param ctx          Context pointer
- * @return VB2_SUCCESS, or non-zero error code if error.
- */
-int vb2_secdatak_init(struct vb2_context *ctx);
-
-/**
- * Read a secure storage value.
- *
- * @param ctx          Context pointer
- * @param param                Parameter to read
- * @param dest         Destination for value
- * @return VB2_SUCCESS, or non-zero error code if error.
- */
-int vb2_secdatak_get(struct vb2_context *ctx,
-                    enum vb2_secdatak_param param,
-                    uint32_t *dest);
-
-/**
- * Write a secure storage value.
- *
- * @param ctx          Context pointer
- * @param param                Parameter to write
- * @param value                New value
- * @return VB2_SUCCESS, or non-zero error code if error.
- */
-int vb2_secdatak_set(struct vb2_context *ctx,
-                    enum vb2_secdatak_param param,
-                    uint32_t value);
-
-#endif  /* VBOOT_REFERENCE_VBOOT_2SECDATA_H_ */
diff --git a/kern/lib/crypto/include/2sha.h b/kern/lib/crypto/include/2sha.h
deleted file mode 100644 (file)
index 38b8a81..0000000
+++ /dev/null
@@ -1,232 +0,0 @@
-/* Copyright (c) 2014 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.
- *
- * These APIs may be called by external firmware as well as vboot.  External
- * firmware must NOT include this header file directly; instead, define
- * NEED_VB2_SHA_LIBRARY and include vb2api.h.  This is permissible because the
- * SHA library routines below don't interact with the rest of vboot.
- */
-
-#ifndef VBOOT_REFERENCE_2SHA_H_
-#define VBOOT_REFERENCE_2SHA_H_
-
-#include "2crypto.h"
-
-/* Hash algorithms may be disabled individually to save code space */
-
-#ifndef VB2_SUPPORT_SHA1
-#define VB2_SUPPORT_SHA1 1
-#endif
-
-#ifndef VB2_SUPPORT_SHA256
-#define VB2_SUPPORT_SHA256 1
-#endif
-
-#ifndef VB2_SUPPORT_SHA512
-#define VB2_SUPPORT_SHA512 1
-#endif
-
-/* These are set to the biggest values among the supported hash algorithms.
- * They have to be updated as we add new hash algorithms */
-#define VB2_MAX_DIGEST_SIZE    VB2_SHA512_DIGEST_SIZE
-#define VB2_MAX_BLOCK_SIZE     VB2_SHA512_BLOCK_SIZE
-#define VB2_INVALID_ALG_NAME   "INVALID"
-
-#define VB2_SHA1_DIGEST_SIZE 20
-#define VB2_SHA1_BLOCK_SIZE 64
-#define VB2_SHA1_ALG_NAME      "SHA1"
-
-/* Context structs for hash algorithms */
-
-struct vb2_sha1_context {
-       uint32_t count;
-       uint32_t state[5];
-#if defined(HAVE_ENDIAN_H) && defined(HAVE_LITTLE_ENDIAN)
-       union {
-               uint8_t b[VB2_SHA1_BLOCK_SIZE];
-               uint32_t w[VB2_SHA1_BLOCK_SIZE / sizeof(uint32_t)];
-       } buf;
-#else
-       uint8_t buf[VB2_SHA1_BLOCK_SIZE];
-#endif
-};
-
-#define VB2_SHA256_DIGEST_SIZE 32
-#define VB2_SHA256_BLOCK_SIZE 64
-#define VB2_SHA256_ALG_NAME    "SHA256"
-
-struct vb2_sha256_context {
-       uint32_t h[8];
-       uint32_t total_size;
-       uint32_t size;
-       uint8_t block[2 * VB2_SHA256_BLOCK_SIZE];
-};
-
-#define VB2_SHA512_DIGEST_SIZE 64
-#define VB2_SHA512_BLOCK_SIZE 128
-#define VB2_SHA512_ALG_NAME    "SHA512"
-
-struct vb2_sha512_context {
-       uint64_t h[8];
-       uint32_t total_size;
-       uint32_t size;
-       uint8_t block[2 * VB2_SHA512_BLOCK_SIZE];
-};
-
-/* Hash algorithm independent digest context; includes all of the above. */
-struct vb2_digest_context {
-       /* Context union for all algorithms */
-       union {
-#if VB2_SUPPORT_SHA1
-               struct vb2_sha1_context sha1;
-#endif
-#if VB2_SUPPORT_SHA256
-               struct vb2_sha256_context sha256;
-#endif
-#if VB2_SUPPORT_SHA512
-               struct vb2_sha512_context sha512;
-#endif
-       };
-
-       /* Current hash algorithm */
-       enum vb2_hash_algorithm hash_alg;
-
-       /* 1 if digest is computed with vb2ex_hwcrypto routines, else 0 */
-       int using_hwcrypto;
-};
-
-/**
- * Initialize a hash context.
- *
- * @param ctx          Hash context
- */
-void vb2_sha1_init(struct vb2_sha1_context *ctx);
-void vb2_sha256_init(struct vb2_sha256_context *ctx);
-void vb2_sha512_init(struct vb2_sha512_context *ctx);
-
-/**
- * Update (extend) a hash.
- *
- * @param ctx          Hash context
- * @param data         Data to hash
- * @param size         Length of data in bytes
- */
-void vb2_sha1_update(struct vb2_sha1_context *ctx,
-                    const uint8_t *data,
-                    uint32_t size);
-void vb2_sha256_update(struct vb2_sha256_context *ctx,
-                      const uint8_t *data,
-                      uint32_t size);
-void vb2_sha512_update(struct vb2_sha512_context *ctx,
-                      const uint8_t *data,
-                      uint32_t size);
-
-/**
- * Finalize a hash digest.
- *
- * @param ctx          Hash context
- * @param digest       Destination for hash; must be VB_SHA*_DIGEST_SIZE bytes
- */
-void vb2_sha1_finalize(struct vb2_sha1_context *ctx, uint8_t *digest);
-void vb2_sha256_finalize(struct vb2_sha256_context *ctx, uint8_t *digest);
-void vb2_sha512_finalize(struct vb2_sha512_context *ctx, uint8_t *digest);
-
-/**
- * Hash-extend data
- *
- * @param from Hash to be extended. It has to be the hash size.
- * @param by   Block to be extended by. It has to be the hash block size.
- * @param to   Destination for extended data
- */
-void vb2_sha256_extend(const uint8_t *from, const uint8_t *by, uint8_t *to);
-
-/**
- * Convert vb2_crypto_algorithm to vb2_hash_algorithm.
- *
- * @param algorithm    Crypto algorithm (vb2_crypto_algorithm)
- *
- * @return The hash algorithm for that crypto algorithm, or VB2_HASH_INVALID if
- * the crypto algorithm or its corresponding hash algorithm is invalid or not
- * supported.
- */
-enum vb2_hash_algorithm vb2_crypto_to_hash(uint32_t algorithm);
-
-/**
- * Return the size of the digest for a hash algorithm.
- *
- * @param hash_alg     Hash algorithm
- * @return The size of the digest, or 0 if error.
- */
-int vb2_digest_size(enum vb2_hash_algorithm hash_alg);
-
-/**
- * Return the block size of a hash algorithm.
- *
- * @param hash_alg     Hash algorithm
- * @return The block size of the algorithm, or 0 if error.
- */
-int vb2_hash_block_size(enum vb2_hash_algorithm alg);
-
-/**
- * Return the name of a hash algorithm
- *
- * @param alg  Hash algorithm ID
- * @return     String containing a hash name or VB2_INVALID_ALG_NAME
- *             if <alg> is invalid.
- */
-const char *vb2_get_hash_algorithm_name(enum vb2_hash_algorithm alg);
-
-/**
- * Initialize a digest context for doing block-style digesting.
- *
- * @param dc           Digest context
- * @param hash_alg     Hash algorithm
- * @return VB2_SUCCESS, or non-zero on error.
- */
-int vb2_digest_init(struct vb2_digest_context *dc,
-                   enum vb2_hash_algorithm hash_alg);
-
-/**
- * Extend a digest's hash with another block of data.
- *
- * @param dc           Digest context
- * @param buf          Data to hash
- * @param size         Length of data in bytes
- * @return VB2_SUCCESS, or non-zero on error.
- */
-int vb2_digest_extend(struct vb2_digest_context *dc,
-                     const uint8_t *buf,
-                     uint32_t size);
-
-/**
- * Finalize a digest and store the result.
- *
- * The destination digest should be at least vb2_digest_size(algorithm).
- *
- * @param dc           Digest context
- * @param digest       Destination for digest
- * @param digest_size  Length of digest buffer in bytes.
- * @return VB2_SUCCESS, or non-zero on error.
- */
-int vb2_digest_finalize(struct vb2_digest_context *dc,
-                       uint8_t *digest,
-                       uint32_t digest_size);
-
-/**
- * Calculate the digest of a buffer and store the result.
- *
- * @param buf          Data to hash
- * @param size         Length of data in bytes
- * @param hash_alg     Hash algorithm
- * @param digest       Destination for digest
- * @param digest_size  Length of digest buffer in bytes.
- * @return VB2_SUCCESS, or non-zero on error.
- */
-int vb2_digest_buffer(const uint8_t *buf,
-                     uint32_t size,
-                     enum vb2_hash_algorithm hash_alg,
-                     uint8_t *digest,
-                     uint32_t digest_size);
-
-#endif  /* VBOOT_REFERENCE_2SHA_H_ */
diff --git a/kern/lib/crypto/include/2struct.h b/kern/lib/crypto/include/2struct.h
deleted file mode 100644 (file)
index da687b0..0000000
+++ /dev/null
@@ -1,347 +0,0 @@
-/* Copyright (c) 2014 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.
- *
- * Data structure definitions for verified boot, for on-disk / in-eeprom
- * data.
- */
-
-#ifndef VBOOT_REFERENCE_VBOOT_2STRUCT_H_
-#define VBOOT_REFERENCE_VBOOT_2STRUCT_H_
-#include <stdint.h>
-#include "2crypto.h"
-
-/*
- * Key block flags.
- *
- *The following flags set where the key is valid.  Not used by firmware
- * verification; only kernel verification.
- */
-#define VB2_KEY_BLOCK_FLAG_DEVELOPER_0  0x01 /* Developer switch off */
-#define VB2_KEY_BLOCK_FLAG_DEVELOPER_1  0x02 /* Developer switch on */
-#define VB2_KEY_BLOCK_FLAG_RECOVERY_0   0x04 /* Not recovery mode */
-#define VB2_KEY_BLOCK_FLAG_RECOVERY_1   0x08 /* Recovery mode */
-#define VB2_GBB_HWID_DIGEST_SIZE       32
-
-/****************************************************************************/
-
-/* Flags for vb2_shared_data.flags */
-enum vb2_shared_data_flags {
-       /* User has explicitly and physically requested recovery */
-       VB2_SD_FLAG_MANUAL_RECOVERY = (1 << 0),
-
-       /* Developer mode is enabled */
-       /* TODO: should have been VB2_SD_FLAG_DEV_MODE_ENABLED */
-       VB2_SD_DEV_MODE_ENABLED = (1 << 1),
-
-       /*
-        * TODO: might be nice to add flags for why dev mode is enabled - via
-        * gbb, virtual dev switch, or forced on for testing.
-        */
-
-       /* Kernel keyblock was verified by signature (not just hash) */
-       VB2_SD_FLAG_KERNEL_SIGNED = (1 << 2),
-};
-
-/* Flags for vb2_shared_data.status */
-enum vb2_shared_data_status {
-       /* Reinitialized NV data due to invalid checksum */
-       VB2_SD_STATUS_NV_REINIT = (1 << 0),
-
-       /* NV data has been initialized */
-       VB2_SD_STATUS_NV_INIT = (1 << 1),
-
-       /* Secure data initialized */
-       VB2_SD_STATUS_SECDATA_INIT = (1 << 2),
-
-       /* Chose a firmware slot */
-       VB2_SD_STATUS_CHOSE_SLOT = (1 << 3),
-
-       /* Secure data kernel version space initialized */
-       VB2_SD_STATUS_SECDATAK_INIT = (1 << 4),
-};
-
-/*
- * Data shared between vboot API calls.  Stored at the start of the work
- * buffer.
- */
-struct vb2_shared_data {
-       /* Flags; see enum vb2_shared_data_flags */
-       uint32_t flags;
-
-       /* Flags from GBB header */
-       uint32_t gbb_flags;
-
-       /*
-        * Reason we are in recovery mode this boot (enum vb2_nv_recovery), or
-        * 0 if we aren't.
-        */
-       uint32_t recovery_reason;
-
-       /* Firmware slot used last boot (0=A, 1=B) */
-       uint32_t last_fw_slot;
-
-       /* Result of last boot (enum vb2_fw_result) */
-       uint32_t last_fw_result;
-
-       /* Firmware slot used this boot */
-       uint32_t fw_slot;
-
-       /*
-        * Version for this slot (top 16 bits = key, lower 16 bits = firmware).
-        *
-        * TODO: Make this a union to allow getting/setting those versions
-        * separately?
-        */
-       uint32_t fw_version;
-
-       /* Version stored in secdata (must be <= fw_version to boot). */
-       uint32_t fw_version_secdata;
-
-       /*
-        * Status flags for this boot; see enum vb2_shared_data_status.  Status
-        * is "what we've done"; flags above are "decisions we've made".
-        */
-       uint32_t status;
-
-       /**********************************************************************
-        * Data from kernel verification stage.
-        *
-        * TODO: shouldn't be part of the main struct, since that needlessly
-        * uses more memory during firmware verification.
-        */
-
-       /*
-        * Version for the current kernel (top 16 bits = key, lower 16 bits =
-        * kernel preamble).
-        *
-        * TODO: Make this a union to allow getting/setting those versions
-        * separately?
-        */
-       uint32_t kernel_version;
-
-       /* Kernel version from secdatak (must be <= kernel_version to boot) */
-       uint32_t kernel_version_secdatak;
-
-       /**********************************************************************
-        * Temporary variables used during firmware verification.  These don't
-        * really need to persist through to the OS, but there's nowhere else
-        * we can put them.
-        */
-
-       /* Root key offset and size from GBB header */
-       uint32_t gbb_rootkey_offset;
-       uint32_t gbb_rootkey_size;
-
-       /* HWID digest from GBB header */
-       uint8_t gbb_hwid_digest[VB2_GBB_HWID_DIGEST_SIZE];
-
-       /* Offset of preamble from start of vblock */
-       uint32_t vblock_preamble_offset;
-
-       /*
-        * Offset and size of packed data key in work buffer.  Size is 0 if
-        * data key is not stored in the work buffer.
-        */
-       uint32_t workbuf_data_key_offset;
-       uint32_t workbuf_data_key_size;
-
-       /*
-        * Offset and size of firmware preamble in work buffer.  Size is 0 if
-        * preamble is not stored in the work buffer.
-        */
-       uint32_t workbuf_preamble_offset;
-       uint32_t workbuf_preamble_size;
-
-       /*
-        * Offset and size of hash context in work buffer.  Size is 0 if
-        * hash context is not stored in the work buffer.
-        */
-       uint32_t workbuf_hash_offset;
-       uint32_t workbuf_hash_size;
-
-       /*
-        * Current tag we're hashing
-        *
-        * For new structs, this is the offset of the vb2_signature struct
-        * in the work buffer.
-        *
-        * TODO: rename to workbuf_hash_sig_offset when vboot1 structs are
-        * deprecated.
-        */
-       uint32_t hash_tag;
-
-       /* Amount of data we still expect to hash */
-       uint32_t hash_remaining_size;
-
-       /**********************************************************************
-        * Temporary variables used during kernel verification.  These don't
-        * really need to persist through to the OS, but there's nowhere else
-        * we can put them.
-        *
-        * TODO: make a union with the firmware verification temp variables,
-        * or make both of them workbuf-allocated sub-structs, so that we can
-        * overlap them so kernel variables don't bloat firmware verification
-        * stage memory requirements.
-        */
-
-       /*
-        * Offset and size of packed kernel key in work buffer.  Size is 0 if
-        * subkey is not stored in the work buffer.  Note that kernel key may
-        * be inside the firmware preamble.
-        */
-       uint32_t workbuf_kernel_key_offset;
-       uint32_t workbuf_kernel_key_size;
-
-} __attribute__((packed));
-
-/****************************************************************************/
-
-/* Signature at start of the GBB
- * Note that if you compile in the signature as is, you are likely to break any
- * tools that search for the signature. */
-#define VB2_GBB_SIGNATURE "$GBB"
-#define VB2_GBB_SIGNATURE_SIZE 4
-#define VB2_GBB_XOR_CHARS "****"
-/* TODO: can we write a macro to produce this at compile time? */
-#define VB2_GBB_XOR_SIGNATURE { 0x0e, 0x6d, 0x68, 0x68 }
-
-/* VB2 GBB struct version */
-#define VB2_GBB_MAJOR_VER      1
-#define VB2_GBB_MINOR_VER      2
-/* v1.2 - added fields for sha256 digest of the HWID */
-
-/* Flags for vb2_gbb_header.flags */
-enum vb2_gbb_flag {
-       /*
-        * Reduce the dev screen delay to 2 sec from 30 sec to speed up
-        * factory.
-        */
-       VB2_GBB_FLAG_DEV_SCREEN_SHORT_DELAY = (1 << 0),
-
-       /*
-        * BIOS should load option ROMs from arbitrary PCI devices. We'll never
-        * enable this ourselves because it executes non-verified code, but if
-        * a customer wants to void their warranty and set this flag in the
-        * read-only flash, they should be able to do so.
-        *
-        * (TODO: Currently not supported. Mark as deprecated/unused?)
-        */
-       VB2_GBB_FLAG_LOAD_OPTION_ROMS = (1 << 1),
-
-       /*
-        * The factory flow may need the BIOS to boot a non-ChromeOS kernel if
-        * the dev-switch is on. This flag allows that.
-        *
-        * (TODO: Currently not supported. Mark as deprecated/unused?)
-        */
-       VB2_GBB_FLAG_ENABLE_ALTERNATE_OS = (1 << 2),
-
-       /*
-        * Force dev switch on, regardless of physical/keyboard dev switch
-        * position.
-        */
-       VB2_GBB_FLAG_FORCE_DEV_SWITCH_ON = (1 << 3),
-
-       /* Allow booting from USB in dev mode even if dev_boot_usb=0. */
-       VB2_GBB_FLAG_FORCE_DEV_BOOT_USB = (1 << 4),
-
-       /* Disable firmware rollback protection. */
-       VB2_GBB_FLAG_DISABLE_FW_ROLLBACK_CHECK = (1 << 5),
-
-       /* Allow Enter key to trigger dev->tonorm screen transition */
-       VB2_GBB_FLAG_ENTER_TRIGGERS_TONORM = (1 << 6),
-
-       /* Allow booting Legacy OSes in dev mode even if dev_boot_legacy=0. */
-       VB2_GBB_FLAG_FORCE_DEV_BOOT_LEGACY = (1 << 7),
-
-       /* Allow booting using alternate keys for FAFT servo testing */
-       VB2_GBB_FLAG_FAFT_KEY_OVERIDE = (1 << 8),
-
-       /* Disable EC software sync */
-       VB2_GBB_FLAG_DISABLE_EC_SOFTWARE_SYNC = (1 << 9),
-
-       /* Default to booting legacy OS when dev screen times out */
-       VB2_GBB_FLAG_DEFAULT_DEV_BOOT_LEGACY = (1 << 10),
-
-       /* Disable PD software sync */
-       VB2_GBB_FLAG_DISABLE_PD_SOFTWARE_SYNC = (1 << 11),
-
-       /* Disable shutdown on lid closed */
-       VB2_GBB_FLAG_DISABLE_LID_SHUTDOWN = (1 << 12),
-
-       /*
-        * Allow full fastboot capability in firmware even if
-        * dev_boot_fastboot_full_cap=0.
-        */
-       VB2_GBB_FLAG_FORCE_DEV_BOOT_FASTBOOT_FULL_CAP = (1 << 13),
-
-       /* Enable serial */
-       VB2_GBB_FLAG_ENABLE_SERIAL = (1 << 14),
-};
-
-struct vb2_gbb_header {
-       /* Fields present in version 1.1 */
-       uint8_t  signature[VB2_GBB_SIGNATURE_SIZE]; /* VB2_GBB_SIGNATURE */
-       uint16_t major_version;   /* See VB2_GBB_MAJOR_VER */
-       uint16_t minor_version;   /* See VB2_GBB_MINOR_VER */
-       uint32_t header_size;     /* Size of GBB header in bytes */
-       uint32_t flags;           /* Flags (see enum vb2_gbb_flag) */
-
-       /* Offsets (from start of header) and sizes (in bytes) of components */
-       uint32_t hwid_offset;           /* HWID */
-       uint32_t hwid_size;
-       uint32_t rootkey_offset;        /* Root key */
-       uint32_t rootkey_size;
-       uint32_t bmpfv_offset;          /* BMP FV */
-       uint32_t bmpfv_size;
-       uint32_t recovery_key_offset;   /* Recovery key */
-       uint32_t recovery_key_size;
-
-       /* Added in version 1.2 */
-       uint8_t  hwid_digest[VB2_GBB_HWID_DIGEST_SIZE]; /* SHA-256 of HWID */
-
-       /* Pad to match EXPECETED_VB2_GBB_HEADER_SIZE.  Initialize to 0. */
-       uint8_t  pad[48];
-} __attribute__((packed));
-
-/* The GBB is used outside of vboot_reference, so this size is important. */
-#define EXPECTED_VB2_GBB_HEADER_SIZE 128
-
-/*
- * Root key hash for Ryu devices only.  Contains the hash of the root key.
- * This will be embedded somewhere inside the RO part of the firmware, so that
- * it can verify the GBB contains only the official root key.
- */
-
-#define RYU_ROOT_KEY_HASH_MAGIC "RtKyHash"
-#define RYU_ROOT_KEY_HASH_MAGIC_INVCASE "rTkYhASH"
-#define RYU_ROOT_KEY_HASH_MAGIC_SIZE 8
-
-#define RYU_ROOT_KEY_HASH_VERSION_MAJOR 1
-#define RYU_ROOT_KEY_HASH_VERSION_MINOR 0
-
-struct vb2_ryu_root_key_hash {
-       /* Magic number (RYU_ROOT_KEY_HASH_MAGIC) */
-       uint8_t magic[RYU_ROOT_KEY_HASH_MAGIC_SIZE];
-
-       /* Version of this struct */
-       uint16_t header_version_major;
-       uint16_t header_version_minor;
-
-       /*
-        * Length of this struct, in bytes, including any variable length data
-        * which follows (there is none, yet).
-        */
-       uint32_t struct_size;
-
-       /*
-        * SHA-256 hash digest of the entire root key section from the GBB.  If
-        * all 0 bytes, all root keys will be treated as if matching.
-        */
-       uint8_t root_key_hash_digest[32];
-};
-
-#define EXPECTED_VB2_RYU_ROOT_KEY_HASH_SIZE 48
-
-#endif  /* VBOOT_REFERENCE_VBOOT_2STRUCT_H_ */
diff --git a/kern/lib/crypto/include/2sysincludes.h b/kern/lib/crypto/include/2sysincludes.h
deleted file mode 100644 (file)
index 4c9e66c..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-/* Copyright (c) 2014 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.
- */
-
-/*
- * System includes for vboot reference library.  With few exceptions, this is
- * the ONLY place in firmware/ where system headers may be included via
- * #include <...>, so that there's only one place that needs to be fixed up for
- * platforms which don't have all the system includes.
- */
-
-#ifndef VBOOT_REFERENCE_2_SYSINCLUDES_H_
-#define VBOOT_REFERENCE_2_SYSINCLUDES_H_
-
-#include <inttypes.h>  /* For PRIu64 */
-#include <stddef.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <string.h>
-
-#if defined(HAVE_ENDIAN_H) && defined(HAVE_LITTLE_ENDIAN)
-#include <byteswap.h>
-#include <memory.h>
-#endif
-
-#endif  /* VBOOT_REFERENCE_2_SYSINCLUDES_H_ */
diff --git a/kern/lib/crypto/include/2tpm_bootmode.h b/kern/lib/crypto/include/2tpm_bootmode.h
deleted file mode 100644 (file)
index 63f247d..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-/* Copyright 2015 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 updating the TPM state with the status of boot path.
- */
-
-#ifndef VBOOT_REFERENCE_2TPM_BOOTMODE_H_
-#define VBOOT_REFERENCE_2TPM_BOOTMODE_H_
-
-#include "2api.h"
-
-/**
- * Return digest indicating the boot state
- *
- * @param ctx          Vboot context
- * @return             Pointer to sha1 digest of size VB2_SHA1_DIGEST_SIZE
- */
-const uint8_t *vb2_get_boot_state_digest(struct vb2_context *ctx);
-
-#endif  /* VBOOT_REFERENCE_2TPM_BOOTMODE_H_ */