summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--utility/gbb_utility.cc39
-rw-r--r--utility/include/gbb_utility.h3
-rw-r--r--vboot_firmware/include/gbb_header.h5
3 files changed, 32 insertions, 15 deletions
diff --git a/utility/gbb_utility.cc b/utility/gbb_utility.cc
index 8b10787b..71e6878c 100644
--- a/utility/gbb_utility.cc
+++ b/utility/gbb_utility.cc
@@ -257,7 +257,18 @@ bool GoogleBinaryBlockUtil::find_property(PROPINDEX i,
*pname = "bmp_fv";
break;
+ case PROP_RCVKEY:
+ *poffset = header_.recovery_key_offset;;
+ *psize = header_.recovery_key_size;
+ if (pname)
+ *pname = "recovery_key";
+ break;
+
default:
+ if (verbose) {
+ fprintf(stderr, " internal error: unknown property (%d).\n",
+ static_cast<int>(i));
+ }
assert(!"invalid property index.");
return false;
}
@@ -272,12 +283,8 @@ bool GoogleBinaryBlockUtil::set_property(PROPINDEX i, const string &value) {
assert(is_valid_gbb);
- if (!find_property(i, &prop_offset, &prop_size, &prop_name)) {
- if (verbose)
- fprintf(stderr, " internal error: unknown property (%d).\n",
- static_cast<int>(i));
+ if (!find_property(i, &prop_offset, &prop_size, &prop_name))
return false;
- }
if (prop_size < value.size()) {
if (verbose)
@@ -308,12 +315,8 @@ string GoogleBinaryBlockUtil::get_property(PROPINDEX i) const {
assert(is_valid_gbb);
- if (!find_property(i, &prop_offset, &prop_size, &prop_name)) {
- if (verbose)
- fprintf(stderr, " internal error: unknown property (%d).\n",
- static_cast<int>(i));
+ if (!find_property(i, &prop_offset, &prop_size, &prop_name))
return "";
- }
// check range again to allow empty value (for compatbility)
if (prop_offset == 0 && prop_size == 0) {
@@ -333,9 +336,6 @@ string GoogleBinaryBlockUtil::get_property_name(PROPINDEX i) const {
const char *prop_name;
if (!find_property(i, &unused_off, &unused_size, &prop_name)) {
- if (verbose)
- fprintf(stderr, " internal error: unknown property (%d).\n",
- static_cast<int>(i));
assert(!"invalid property index.");
return "";
}
@@ -355,6 +355,10 @@ bool GoogleBinaryBlockUtil::set_bmpfv(const string &value) {
return set_property(PROP_BMPFV, value);
}
+bool GoogleBinaryBlockUtil::set_recovery_key(const string &value) {
+ return set_property(PROP_RCVKEY, value);
+}
+
} // namespace vboot_reference
#ifdef WITH_UTIL_MAIN
@@ -378,6 +382,7 @@ static void usagehelp_exit(const char *prog_name) {
" --hwid \tReport hardware id (default).\n"
" -k, --rootkey=FILE \tFile name to export Root Key.\n"
" -b, --bmpfv=FILE \tFile name to export Bitmap FV.\n"
+ " --recoverykey=FILE\tFile name to export Recovery Key.\n"
"\n"
"SET MODE:\n"
"-s, --set \tSet (write) to bios_file, "
@@ -386,6 +391,7 @@ static void usagehelp_exit(const char *prog_name) {
" -i, --hwid=HWID \tThe new hardware id to be changed.\n"
" -k, --rootkey=FILE \tFile name of new Root Key.\n"
" -b, --bmpfv=FILE \tFile name of new Bitmap FV.\n"
+ " --recoverykey=FILE\tFile name of new Recovery Key.\n"
"\n"
"SAMPLE:\n"
" %s -g bios.bin\n"
@@ -490,6 +496,7 @@ int main(int argc, char *argv[]) {
{"hwid", 2, NULL, 'i' },
{"rootkey", 1, NULL, 'k' },
{"bmpfv", 1, NULL, 'b' },
+ {"recoverykey", 1, NULL, 'R' },
{ NULL, 0, NULL, 0 },
};
@@ -527,6 +534,12 @@ int main(int argc, char *argv[]) {
usagehelp_exit(myname);
break;
+ case 'R':
+ if (!opt_props.set_new_value(
+ GoogleBinaryBlockUtil::PROP_RCVKEY, optarg))
+ usagehelp_exit(myname);
+ break;
+
default:
case '?':
usagehelp_exit(myname);
diff --git a/utility/include/gbb_utility.h b/utility/include/gbb_utility.h
index 021eb80f..468cddf9 100644
--- a/utility/include/gbb_utility.h
+++ b/utility/include/gbb_utility.h
@@ -18,6 +18,7 @@ class GoogleBinaryBlockUtil {
PROP_HWID, // hardware id
PROP_ROOTKEY, // root key
PROP_BMPFV, // bitmap FV
+ PROP_RCVKEY, // recovery key
PROP_RANGE, // indicator of valid property range
};
@@ -48,9 +49,11 @@ class GoogleBinaryBlockUtil {
bool set_hwid(const char *hwid); // NOTE: hwid is NUL-terminated.
bool set_rootkey(const std::string &value);
bool set_bmpfv(const std::string &value);
+ bool set_recovery_key(const std::string &value);
std::string get_hwid() const { return get_property(PROP_HWID); }
std::string get_rootkey() const { return get_property(PROP_ROOTKEY); }
std::string get_bmpfv() const { return get_property(PROP_BMPFV); }
+ std::string get_recovery_key() const { return get_property(PROP_RCVKEY); }
private:
// clear all cached data and initialize to original state
diff --git a/vboot_firmware/include/gbb_header.h b/vboot_firmware/include/gbb_header.h
index d1f84a83..8f34435a 100644
--- a/vboot_firmware/include/gbb_header.h
+++ b/vboot_firmware/include/gbb_header.h
@@ -35,8 +35,10 @@ typedef struct GoogleBinaryBlockHeader {
uint32_t rootkey_size; // Root Key size in bytes
uint32_t bmpfv_offset; // BMP FV offset from header
uint32_t bmpfv_size; // BMP FV size in bytes
+ uint32_t recovery_key_offset; // Recovery Key offset from header
+ uint32_t recovery_key_size; // Recovery Key size in bytes
- uint8_t pad[88]; // to match GBB_HEADER_SIZE
+ uint8_t pad[80]; // to match GBB_HEADER_SIZE
} GoogleBinaryBlockHeader;
#ifdef __cplusplus
@@ -44,4 +46,3 @@ typedef struct GoogleBinaryBlockHeader {
#endif // __cplusplus
#endif /* VBOOT_REFERENCE_GBB_HEADER_H_ */
-