diff options
Diffstat (limited to 'host/lib/include/gsc_ro.h')
-rw-r--r-- | host/lib/include/gsc_ro.h | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/host/lib/include/gsc_ro.h b/host/lib/include/gsc_ro.h new file mode 100644 index 00000000..00a40111 --- /dev/null +++ b/host/lib/include/gsc_ro.h @@ -0,0 +1,59 @@ +/* + * Copyright 2021 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef __VBOOT_REFERENCE_HOST_LIB_INCLUDE_GSC_RO_H +#define __VBOOT_REFERENCE_HOST_LIB_INCLUDE_GSC_RO_H + +#include <stddef.h> +#include <stdint.h> + +#include "2sha.h" + +struct gscvd_ro_range { + uint32_t offset; + uint32_t size; /* Use uint32_t as opposed to size_to be portable. */ +}; + +#define GSC_VD_MAGIC 0x65666135 /* Little endian '5 a f e' */ +#define GSC_VD_ROLLBACK_COUNTER 1 + +struct gsc_verification_data { + uint32_t gv_magic; + /* + * Size of this structure in bytes, including the ranges array, + * signature and root key bodies. + */ + uint16_t size; + uint16_t major_version; /* Version of this struct layout. Starts at 0 */ + uint16_t minor_version; + /* + * GSC will cache the counter value and will not accept verification + * data blobs with a lower value. + */ + uint16_t rollback_counter; + uint32_t gsc_board_id; /* Locks blob to certain platform. */ + uint32_t gsc_flags; /* A field for future enhancements. */ + /* + * The location of fmap that points to this blob. This location must + * also be in one of the verified sections, expressed as offset in + * flash + */ + uint32_t fmap_location; + uint32_t hash_alg; /* one of enum vb2_hash_algorithm alg. */ + struct vb2_signature sig_header; + struct vb2_packed_key root_key_header; + /* + * SHAxxx(ranges[0].offset..ranges[0].size || ... || + * ranges[n].offset..ranges[n].size) + * + * Let the digest space allow to accommodate the largest possible one. + */ + uint8_t ranges_digest[VB2_SHA512_DIGEST_SIZE]; + uint32_t range_count; /* Number of gscvd_ro_range entries. */ + struct gscvd_ro_range ranges[0]; +}; + +#endif /* ! __VBOOT_REFERENCE_HOST_LIB_INCLUDE_GSC_RO_H */ |