xref: /aosp_15_r20/external/vboot_reference/host/include/vboot_host.h (revision 8617a60d3594060b7ecbd21bc622a7c14f3cf2bc)
1*8617a60dSAndroid Build Coastguard Worker /* Copyright 2013 The ChromiumOS Authors
2*8617a60dSAndroid Build Coastguard Worker  * Use of this source code is governed by a BSD-style license that can be
3*8617a60dSAndroid Build Coastguard Worker  * found in the LICENSE file.
4*8617a60dSAndroid Build Coastguard Worker  *
5*8617a60dSAndroid Build Coastguard Worker  * vboot-related functions exported for use by userspace programs
6*8617a60dSAndroid Build Coastguard Worker  */
7*8617a60dSAndroid Build Coastguard Worker 
8*8617a60dSAndroid Build Coastguard Worker #ifndef VBOOT_REFERENCE_VBOOT_HOST_H_
9*8617a60dSAndroid Build Coastguard Worker #define VBOOT_REFERENCE_VBOOT_HOST_H_
10*8617a60dSAndroid Build Coastguard Worker 
11*8617a60dSAndroid Build Coastguard Worker #include <inttypes.h>
12*8617a60dSAndroid Build Coastguard Worker #include <stdbool.h>
13*8617a60dSAndroid Build Coastguard Worker #include <stdint.h>
14*8617a60dSAndroid Build Coastguard Worker #include <stdlib.h>
15*8617a60dSAndroid Build Coastguard Worker 
16*8617a60dSAndroid Build Coastguard Worker #include "2crypto.h"
17*8617a60dSAndroid Build Coastguard Worker #include "cgpt_params.h"
18*8617a60dSAndroid Build Coastguard Worker 
19*8617a60dSAndroid Build Coastguard Worker /****************************************************************************/
20*8617a60dSAndroid Build Coastguard Worker /* EFI GPT manipulation */
21*8617a60dSAndroid Build Coastguard Worker 
22*8617a60dSAndroid Build Coastguard Worker #ifdef __cplusplus
23*8617a60dSAndroid Build Coastguard Worker extern "C" {
24*8617a60dSAndroid Build Coastguard Worker #endif  /* __cplusplus */
25*8617a60dSAndroid Build Coastguard Worker 
26*8617a60dSAndroid Build Coastguard Worker /* partition table manipulation */
27*8617a60dSAndroid Build Coastguard Worker int CgptCreate(CgptCreateParams *params);
28*8617a60dSAndroid Build Coastguard Worker int CgptAdd(CgptAddParams *params);
29*8617a60dSAndroid Build Coastguard Worker int CgptEdit(CgptEditParams *params);
30*8617a60dSAndroid Build Coastguard Worker int CgptSetAttributes(CgptAddParams *params);
31*8617a60dSAndroid Build Coastguard Worker int CgptGetPartitionDetails(CgptAddParams *params);
32*8617a60dSAndroid Build Coastguard Worker int CgptBoot(CgptBootParams *params);
33*8617a60dSAndroid Build Coastguard Worker int CgptGetBootPartitionNumber(CgptBootParams *params);
34*8617a60dSAndroid Build Coastguard Worker int CgptShow(CgptShowParams *params);
35*8617a60dSAndroid Build Coastguard Worker int CgptGetNumNonEmptyPartitions(CgptShowParams *params);
36*8617a60dSAndroid Build Coastguard Worker int CgptRepair(CgptRepairParams *params);
37*8617a60dSAndroid Build Coastguard Worker int CgptPrioritize(CgptPrioritizeParams *params);
38*8617a60dSAndroid Build Coastguard Worker void CgptFind(CgptFindParams *params);
39*8617a60dSAndroid Build Coastguard Worker int CgptLegacy(CgptLegacyParams *params);
40*8617a60dSAndroid Build Coastguard Worker 
41*8617a60dSAndroid Build Coastguard Worker /* GUID conversion functions. Accepted format:
42*8617a60dSAndroid Build Coastguard Worker  *
43*8617a60dSAndroid Build Coastguard Worker  *   "C12A7328-F81F-11D2-BA4B-00A0C93EC93B"
44*8617a60dSAndroid Build Coastguard Worker  *
45*8617a60dSAndroid Build Coastguard Worker  * At least GUID_STRLEN bytes should be reserved in 'str' (included the tailing
46*8617a60dSAndroid Build Coastguard Worker  * '\0').
47*8617a60dSAndroid Build Coastguard Worker  */
48*8617a60dSAndroid Build Coastguard Worker #define GUID_STRLEN 37
49*8617a60dSAndroid Build Coastguard Worker int StrToGuid(const char *str, Guid *guid);
50*8617a60dSAndroid Build Coastguard Worker void GuidToStr(const Guid *guid, char *str, unsigned int buflen);
51*8617a60dSAndroid Build Coastguard Worker int GuidEqual(const Guid *guid1, const Guid *guid2);
52*8617a60dSAndroid Build Coastguard Worker int GuidIsZero(const Guid *guid);
53*8617a60dSAndroid Build Coastguard Worker 
54*8617a60dSAndroid Build Coastguard Worker 
55*8617a60dSAndroid Build Coastguard Worker /****************************************************************************/
56*8617a60dSAndroid Build Coastguard Worker /* Kernel command line */
57*8617a60dSAndroid Build Coastguard Worker 
58*8617a60dSAndroid Build Coastguard Worker /* TODO(wfrichar): This needs a better location */
59*8617a60dSAndroid Build Coastguard Worker #define MAX_KERNEL_CONFIG_SIZE     4096
60*8617a60dSAndroid Build Coastguard Worker 
61*8617a60dSAndroid Build Coastguard Worker /* Use this to obtain the body load address from the kernel preamble */
62*8617a60dSAndroid Build Coastguard Worker #define USE_PREAMBLE_LOAD_ADDR     (~0)
63*8617a60dSAndroid Build Coastguard Worker 
64*8617a60dSAndroid Build Coastguard Worker /* Returns a new copy of the kernel cmdline. The caller must free it. */
65*8617a60dSAndroid Build Coastguard Worker char *FindKernelConfig(const char *filename,
66*8617a60dSAndroid Build Coastguard Worker 		       uint64_t kernel_body_load_address);
67*8617a60dSAndroid Build Coastguard Worker 
68*8617a60dSAndroid Build Coastguard Worker /****************************************************************************/
69*8617a60dSAndroid Build Coastguard Worker /* Kernel partition */
70*8617a60dSAndroid Build Coastguard Worker 
71*8617a60dSAndroid Build Coastguard Worker /* Used to get a bootable vmlinuz from the kernel partition. vmlinuz_out must
72*8617a60dSAndroid Build Coastguard Worker  * be free'd after this function returns success. Success is indicated by a
73*8617a60dSAndroid Build Coastguard Worker  * zero return value.
74*8617a60dSAndroid Build Coastguard Worker  */
75*8617a60dSAndroid Build Coastguard Worker int ExtractVmlinuz(void *kpart_data, size_t kpart_size,
76*8617a60dSAndroid Build Coastguard Worker 		   void **vmlinuz_out, size_t *vmlinuz_size);
77*8617a60dSAndroid Build Coastguard Worker 
78*8617a60dSAndroid Build Coastguard Worker /**
79*8617a60dSAndroid Build Coastguard Worker  * Look up a signature algorithm by its string representation.
80*8617a60dSAndroid Build Coastguard Worker  *
81*8617a60dSAndroid Build Coastguard Worker  * @param str		String representation of algo (e.g. "rsa2048" or "1")
82*8617a60dSAndroid Build Coastguard Worker  * @param alg		Output parameter that will be filled with found enum
83*8617a60dSAndroid Build Coastguard Worker  * @return		True if algorithm was found, false otherwise.
84*8617a60dSAndroid Build Coastguard Worker  */
85*8617a60dSAndroid Build Coastguard Worker bool vb2_lookup_sig_alg(const char *str, enum vb2_signature_algorithm *sig_alg);
86*8617a60dSAndroid Build Coastguard Worker 
87*8617a60dSAndroid Build Coastguard Worker /**
88*8617a60dSAndroid Build Coastguard Worker  * Look up a hash algorithm by its string representation.
89*8617a60dSAndroid Build Coastguard Worker  *
90*8617a60dSAndroid Build Coastguard Worker  * @param str		String representation of algorithm (e.g. "sha1" or "1")
91*8617a60dSAndroid Build Coastguard Worker  * @param alg		Output parameter that will be filled with found enum
92*8617a60dSAndroid Build Coastguard Worker  * @return		True if algorithm was found, false otherwise.
93*8617a60dSAndroid Build Coastguard Worker  */
94*8617a60dSAndroid Build Coastguard Worker bool vb2_lookup_hash_alg(const char *str, enum vb2_hash_algorithm *hash_alg);
95*8617a60dSAndroid Build Coastguard Worker 
96*8617a60dSAndroid Build Coastguard Worker #ifdef __cplusplus
97*8617a60dSAndroid Build Coastguard Worker }
98*8617a60dSAndroid Build Coastguard Worker #endif  /* __cplusplus */
99*8617a60dSAndroid Build Coastguard Worker 
100*8617a60dSAndroid Build Coastguard Worker #endif  /* VBOOT_REFERENCE_VBOOT_HOST_H_ */
101