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