xref: /aosp_15_r20/external/vboot_reference/host/lib/include/host_common.h (revision 8617a60d3594060b7ecbd21bc622a7c14f3cf2bc)
1 /* Copyright 2013 The ChromiumOS Authors
2  * Use of this source code is governed by a BSD-style license that can be
3  * found in the LICENSE file.
4  *
5  * Host-side functions for verified boot.
6  */
7 
8 #ifndef VBOOT_REFERENCE_HOST_COMMON_H_
9 #define VBOOT_REFERENCE_HOST_COMMON_H_
10 
11 #include "host_key.h"
12 #include "host_key21.h"
13 #include "host_keyblock.h"
14 #include "host_misc.h"
15 #include "host_signature.h"
16 #include "vboot_api.h"
17 #include "vboot_host.h"
18 #include "vboot_struct.h"
19 
20 /**
21  * Create a firmware preamble.
22  *
23  * @param firmware_version	Firmware version
24  * @param kernel_subkey		Kernel subkey to store in preamble
25  * @param body_signature	Signature of firmware body
26  * @param signing_key		Private key to sign header with
27  * @param flags			Firmware preamble flags
28  *
29  * @return The preamble, or NULL if error.  Caller must free() it.
30  */
31 struct vb2_fw_preamble *vb2_create_fw_preamble(
32 	uint32_t firmware_version,
33 	const struct vb2_packed_key *kernel_subkey,
34 	const struct vb2_signature *body_signature,
35 	const struct vb2_private_key *signing_key,
36 	uint32_t flags);
37 
38 
39 /**
40  * Create a kernel preamble.
41  *
42  * @param kernel_version		Firmware version
43  * @param body_load_address		Load address for kernel body
44  * @param bootloader_address		Load address for bootloader
45  * @param bootloader_size		Size of bootloader in bytes
46  * @param body_signature		Signature of kernel body
47  * @param vmlinuz_header_address	Load address for 16-bit vmlinuz header
48  * @param vmlinuz_header_size		Size of 16-bit vmlinuz header in bytes
49  * @param flags				Kernel preamble flags
50  * @param desired_size			Minimum size of preamble in bytes
51  * @param signing_key			Private key to sign header with
52  *
53  * @return The preamble, or NULL if error.  Caller must free() it.
54  */
55 struct vb2_kernel_preamble *vb2_create_kernel_preamble(
56 	uint32_t kernel_version,
57 	uint64_t body_load_address,
58 	uint64_t bootloader_address,
59 	uint32_t bootloader_size,
60 	const struct vb2_signature *body_signature,
61 	uint64_t vmlinuz_header_address,
62 	uint32_t vmlinuz_header_size,
63 	uint32_t flags,
64 	uint32_t desired_size,
65 	const struct vb2_private_key *signing_key);
66 
67 /**
68  * Retrieve the 16-bit vmlinuz header address and size from the preamble.
69  *
70  * Size 0 means there is no 16-bit vmlinuz header present.  Old preamble
71  * versions (<2.1) return 0 for both fields.
72  *
73  * @param preamble	Preamble to check
74  * @param vmlinuz_header_address	Destination for header address
75  * @param vmlinuz_header_size		Destination for header size
76  */
77 void vb2_kernel_get_vmlinuz_header(const struct vb2_kernel_preamble *preamble,
78 				   uint64_t *vmlinuz_header_address,
79 				   uint32_t *vmlinuz_header_size);
80 
81 #endif  /* VBOOT_REFERENCE_HOST_COMMON_H_ */
82