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