You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
3.0 KiB
97 lines
3.0 KiB
/* |
|
* Copyright (c) 2013 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_FUTILITY_TRAVERSAL_H_ |
|
#define VBOOT_REFERENCE_FUTILITY_TRAVERSAL_H_ |
|
#include <stdint.h> |
|
|
|
|
|
/* What are we trying to accomplish? */ |
|
enum futil_op_type { |
|
FUTIL_OP_SHOW, |
|
FUTIL_OP_SIGN, |
|
|
|
NUM_FUTIL_OPS |
|
}; |
|
|
|
/* What component are we currently handling in the callback routine? */ |
|
enum futil_cb_component { |
|
/* entire input buffer */ |
|
CB_BEGIN_TRAVERSAL, |
|
CB_END_TRAVERSAL, |
|
/* fmap areas within a bios image */ |
|
CB_FMAP_GBB, |
|
CB_FMAP_VBLOCK_A, |
|
CB_FMAP_VBLOCK_B, |
|
CB_FMAP_FW_MAIN_A, |
|
CB_FMAP_FW_MAIN_B, |
|
/* individual files (extracted from a bios, for example) */ |
|
CB_PUBKEY, |
|
CB_KEYBLOCK, |
|
CB_GBB, |
|
CB_FW_PREAMBLE, |
|
CB_KERN_PREAMBLE, |
|
CB_RAW_FIRMWARE, |
|
CB_RAW_KERNEL, |
|
CB_PRIVKEY, |
|
|
|
NUM_CB_COMPONENTS |
|
}; |
|
|
|
/* Where is the component we're poking at? */ |
|
struct cb_area_s { |
|
uint32_t offset; /* to avoid pointer math */ |
|
uint8_t *buf; |
|
uint32_t len; |
|
uint32_t _flags; /* for callback use */ |
|
}; |
|
|
|
/* What do we know at this point in time? */ |
|
struct futil_traverse_state_s { |
|
/* These two should be initialized by the caller as needed */ |
|
const char *in_filename; |
|
enum futil_op_type op; |
|
/* Current activity during traversal */ |
|
enum futil_cb_component component; |
|
struct cb_area_s *my_area; |
|
const char *name; |
|
/* Other activites, possibly before or after the current one */ |
|
struct cb_area_s cb_area[NUM_CB_COMPONENTS]; |
|
struct cb_area_s recovery_key; |
|
struct cb_area_s rootkey; |
|
enum futil_file_type in_type; |
|
int errors; |
|
}; |
|
|
|
|
|
/* |
|
* Traverse the buffer using the provided state, which should be initialized |
|
* before calling. Returns nonzero (but no details) if there were any errors. |
|
*/ |
|
int futil_traverse(uint8_t *buf, uint32_t len, |
|
struct futil_traverse_state_s *state, |
|
enum futil_file_type type_hint); |
|
|
|
/* These are invoked by the traversal. They also return nonzero on error. */ |
|
int futil_cb_show_begin(struct futil_traverse_state_s *state); |
|
int futil_cb_show_pubkey(struct futil_traverse_state_s *state); |
|
int futil_cb_show_gbb(struct futil_traverse_state_s *state); |
|
int futil_cb_show_keyblock(struct futil_traverse_state_s *state); |
|
int futil_cb_show_fw_main(struct futil_traverse_state_s *state); |
|
int futil_cb_show_fw_preamble(struct futil_traverse_state_s *state); |
|
int futil_cb_show_kernel_preamble(struct futil_traverse_state_s *state); |
|
int futil_cb_show_privkey(struct futil_traverse_state_s *state); |
|
|
|
int futil_cb_sign_pubkey(struct futil_traverse_state_s *state); |
|
int futil_cb_sign_fw_main(struct futil_traverse_state_s *state); |
|
int futil_cb_sign_fw_vblock(struct futil_traverse_state_s *state); |
|
int futil_cb_sign_raw_firmware(struct futil_traverse_state_s *state); |
|
int futil_cb_resign_kernel_part(struct futil_traverse_state_s *state); |
|
int futil_cb_create_kernel_part(struct futil_traverse_state_s *state); |
|
int futil_cb_sign_begin(struct futil_traverse_state_s *state); |
|
int futil_cb_sign_end(struct futil_traverse_state_s *state); |
|
|
|
|
|
#endif /* VBOOT_REFERENCE_FUTILITY_TRAVERSAL_H_ */
|
|
|