Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1058)

Side by Side Diff: src/platform/vboot_reference/utility/gbb_utility.cc

Issue 2553001: Add 'recovery_key' in Google Binary Block (GBB) utility (Closed) Base URL: ssh://gitrw.chromium.org/chromiumos
Patch Set: Created 10 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | src/platform/vboot_reference/utility/include/gbb_utility.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium OS Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 // 4 //
5 // Utility for manipulating Google Binary Block (GBB) 5 // Utility for manipulating Google Binary Block (GBB)
6 // 6 //
7 7
8 #include "gbb_utility.h" 8 #include "gbb_utility.h"
9 9
10 #include <assert.h> 10 #include <assert.h>
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
250 *pname = "root_key"; 250 *pname = "root_key";
251 break; 251 break;
252 252
253 case PROP_BMPFV: 253 case PROP_BMPFV:
254 *poffset = header_.bmpfv_offset; 254 *poffset = header_.bmpfv_offset;
255 *psize = header_.bmpfv_size; 255 *psize = header_.bmpfv_size;
256 if (pname) 256 if (pname)
257 *pname = "bmp_fv"; 257 *pname = "bmp_fv";
258 break; 258 break;
259 259
260 case PROP_RCVKEY:
261 *poffset = header_.recovery_key_offset;;
262 *psize = header_.recovery_key_size;
263 if (pname)
264 *pname = "recovery_key";
265 break;
266
260 default: 267 default:
268 if (verbose) {
269 fprintf(stderr, " internal error: unknown property (%d).\n",
270 static_cast<int>(i));
271 }
261 assert(!"invalid property index."); 272 assert(!"invalid property index.");
262 return false; 273 return false;
263 } 274 }
264 275
265 return true; 276 return true;
266 } 277 }
267 278
268 bool GoogleBinaryBlockUtil::set_property(PROPINDEX i, const string &value) { 279 bool GoogleBinaryBlockUtil::set_property(PROPINDEX i, const string &value) {
269 uint32_t prop_size; 280 uint32_t prop_size;
270 uint32_t prop_offset; 281 uint32_t prop_offset;
271 const char *prop_name; 282 const char *prop_name;
272 283
273 assert(is_valid_gbb); 284 assert(is_valid_gbb);
274 285
275 if (!find_property(i, &prop_offset, &prop_size, &prop_name)) { 286 if (!find_property(i, &prop_offset, &prop_size, &prop_name))
276 if (verbose)
277 fprintf(stderr, " internal error: unknown property (%d).\n",
278 static_cast<int>(i));
279 return false; 287 return false;
280 }
281 288
282 if (prop_size < value.size()) { 289 if (prop_size < value.size()) {
283 if (verbose) 290 if (verbose)
284 fprintf(stderr, " error: value size (%zu) exceed property capacity " 291 fprintf(stderr, " error: value size (%zu) exceed property capacity "
285 "(%u): %s\n", value.size(), prop_size, prop_name); 292 "(%u): %s\n", value.size(), prop_size, prop_name);
286 return false; 293 return false;
287 } 294 }
288 295
289 if (i == PROP_HWID && prop_size == value.size()) { 296 if (i == PROP_HWID && prop_size == value.size()) {
290 // special case: this is NUL-terminated so it's better to keep one more \0 297 // special case: this is NUL-terminated so it's better to keep one more \0
(...skipping 10 matching lines...) Expand all
301 return true; 308 return true;
302 } 309 }
303 310
304 string GoogleBinaryBlockUtil::get_property(PROPINDEX i) const { 311 string GoogleBinaryBlockUtil::get_property(PROPINDEX i) const {
305 uint32_t prop_size; 312 uint32_t prop_size;
306 uint32_t prop_offset; 313 uint32_t prop_offset;
307 const char *prop_name; 314 const char *prop_name;
308 315
309 assert(is_valid_gbb); 316 assert(is_valid_gbb);
310 317
311 if (!find_property(i, &prop_offset, &prop_size, &prop_name)) { 318 if (!find_property(i, &prop_offset, &prop_size, &prop_name))
312 if (verbose)
313 fprintf(stderr, " internal error: unknown property (%d).\n",
314 static_cast<int>(i));
315 return ""; 319 return "";
316 }
317 320
318 // check range again to allow empty value (for compatbility) 321 // check range again to allow empty value (for compatbility)
319 if (prop_offset == 0 && prop_size == 0) { 322 if (prop_offset == 0 && prop_size == 0) {
320 if (verbose) 323 if (verbose)
321 fprintf(stderr, " warning: empty property (%d): %s.\n", 324 fprintf(stderr, " warning: empty property (%d): %s.\n",
322 static_cast<int>(i), prop_name); 325 static_cast<int>(i), prop_name);
323 return ""; 326 return "";
324 } 327 }
325 328
326 string::const_iterator dest = file_content_.begin() + 329 string::const_iterator dest = file_content_.begin() +
327 header_offset_ + prop_offset; 330 header_offset_ + prop_offset;
328 return string(dest, dest + prop_size); 331 return string(dest, dest + prop_size);
329 } 332 }
330 333
331 string GoogleBinaryBlockUtil::get_property_name(PROPINDEX i) const { 334 string GoogleBinaryBlockUtil::get_property_name(PROPINDEX i) const {
332 uint32_t unused_off, unused_size; 335 uint32_t unused_off, unused_size;
333 const char *prop_name; 336 const char *prop_name;
334 337
335 if (!find_property(i, &unused_off, &unused_size, &prop_name)) { 338 if (!find_property(i, &unused_off, &unused_size, &prop_name)) {
336 if (verbose)
337 fprintf(stderr, " internal error: unknown property (%d).\n",
338 static_cast<int>(i));
339 assert(!"invalid property index."); 339 assert(!"invalid property index.");
340 return ""; 340 return "";
341 } 341 }
342 342
343 return prop_name; 343 return prop_name;
344 } 344 }
345 345
346 bool GoogleBinaryBlockUtil::set_hwid(const char *hwid) { 346 bool GoogleBinaryBlockUtil::set_hwid(const char *hwid) {
347 return set_property(PROP_HWID, hwid); 347 return set_property(PROP_HWID, hwid);
348 } 348 }
349 349
350 bool GoogleBinaryBlockUtil::set_rootkey(const std::string &value) { 350 bool GoogleBinaryBlockUtil::set_rootkey(const std::string &value) {
351 return set_property(PROP_ROOTKEY, value); 351 return set_property(PROP_ROOTKEY, value);
352 } 352 }
353 353
354 bool GoogleBinaryBlockUtil::set_bmpfv(const string &value) { 354 bool GoogleBinaryBlockUtil::set_bmpfv(const string &value) {
355 return set_property(PROP_BMPFV, value); 355 return set_property(PROP_BMPFV, value);
356 } 356 }
357 357
358 bool GoogleBinaryBlockUtil::set_recovery_key(const string &value) {
359 return set_property(PROP_RCVKEY, value);
360 }
361
358 } // namespace vboot_reference 362 } // namespace vboot_reference
359 363
360 #ifdef WITH_UTIL_MAIN 364 #ifdef WITH_UTIL_MAIN
361 365
362 /////////////////////////////////////////////////////////////////////// 366 ///////////////////////////////////////////////////////////////////////
363 // command line utilities 367 // command line utilities
364 368
365 #include <map> 369 #include <map>
366 370
367 using vboot_reference::GoogleBinaryBlockUtil; 371 using vboot_reference::GoogleBinaryBlockUtil;
368 372
369 // utility function: provide usage of this utility and exit. 373 // utility function: provide usage of this utility and exit.
370 static void usagehelp_exit(const char *prog_name) { 374 static void usagehelp_exit(const char *prog_name) {
371 printf( 375 printf(
372 "Utility to manage Google Binary Block (GBB)\n" 376 "Utility to manage Google Binary Block (GBB)\n"
373 "Usage: %s [-g|-s] [OPTIONS] bios_file [output_file]\n" 377 "Usage: %s [-g|-s] [OPTIONS] bios_file [output_file]\n"
374 "\n" 378 "\n"
375 "GET MODE:\n" 379 "GET MODE:\n"
376 "-g, --get (default)\tGet (read) from bios_file, " 380 "-g, --get (default)\tGet (read) from bios_file, "
377 "with following options:\n" 381 "with following options:\n"
378 " --hwid \tReport hardware id (default).\n" 382 " --hwid \tReport hardware id (default).\n"
379 " -k, --rootkey=FILE \tFile name to export Root Key.\n" 383 " -k, --rootkey=FILE \tFile name to export Root Key.\n"
380 " -b, --bmpfv=FILE \tFile name to export Bitmap FV.\n" 384 " -b, --bmpfv=FILE \tFile name to export Bitmap FV.\n"
385 " --recoverykey=FILE\tFile name to export Recovery Key.\n"
381 "\n" 386 "\n"
382 "SET MODE:\n" 387 "SET MODE:\n"
383 "-s, --set \tSet (write) to bios_file, " 388 "-s, --set \tSet (write) to bios_file, "
384 "with following options:\n" 389 "with following options:\n"
385 " -o, --output=FILE \tNew file name for ouptput.\n" 390 " -o, --output=FILE \tNew file name for ouptput.\n"
386 " -i, --hwid=HWID \tThe new hardware id to be changed.\n" 391 " -i, --hwid=HWID \tThe new hardware id to be changed.\n"
387 " -k, --rootkey=FILE \tFile name of new Root Key.\n" 392 " -k, --rootkey=FILE \tFile name of new Root Key.\n"
388 " -b, --bmpfv=FILE \tFile name of new Bitmap FV.\n" 393 " -b, --bmpfv=FILE \tFile name of new Bitmap FV.\n"
394 " --recoverykey=FILE\tFile name of new Recovery Key.\n"
389 "\n" 395 "\n"
390 "SAMPLE:\n" 396 "SAMPLE:\n"
391 " %s -g bios.bin\n" 397 " %s -g bios.bin\n"
392 " %s --set --hwid='New Model' -k key.bin bios.bin newbios.bin\n" 398 " %s --set --hwid='New Model' -k key.bin bios.bin newbios.bin\n"
393 , prog_name, prog_name, prog_name); 399 , prog_name, prog_name, prog_name);
394 exit(1); 400 exit(1);
395 } 401 }
396 402
397 // utility function: export a property from GBB to given file. 403 // utility function: export a property from GBB to given file.
398 // if filename was empty, export to console (screen). 404 // if filename was empty, export to console (screen).
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
483 489
484 // snippets for getopt_long 490 // snippets for getopt_long
485 int option_index, opt; 491 int option_index, opt;
486 static struct option long_options[] = { 492 static struct option long_options[] = {
487 {"get", 0, NULL, 'g' }, 493 {"get", 0, NULL, 'g' },
488 {"set", 0, NULL, 's' }, 494 {"set", 0, NULL, 's' },
489 {"output", 1, NULL, 'o' }, 495 {"output", 1, NULL, 'o' },
490 {"hwid", 2, NULL, 'i' }, 496 {"hwid", 2, NULL, 'i' },
491 {"rootkey", 1, NULL, 'k' }, 497 {"rootkey", 1, NULL, 'k' },
492 {"bmpfv", 1, NULL, 'b' }, 498 {"bmpfv", 1, NULL, 'b' },
499 {"recoverykey", 1, NULL, 'R' },
493 { NULL, 0, NULL, 0 }, 500 { NULL, 0, NULL, 0 },
494 }; 501 };
495 502
496 // parse command line options 503 // parse command line options
497 while ((opt = getopt_long(argc, argv, "gso:i:k:b:", 504 while ((opt = getopt_long(argc, argv, "gso:i:k:b:",
498 long_options, &option_index)) >= 0) { 505 long_options, &option_index)) >= 0) {
499 switch (opt) { 506 switch (opt) {
500 case 'g': 507 case 'g':
501 myopts.get_mode = true; 508 myopts.get_mode = true;
502 break; 509 break;
(...skipping 17 matching lines...) Expand all
520 GoogleBinaryBlockUtil::PROP_ROOTKEY, optarg)) 527 GoogleBinaryBlockUtil::PROP_ROOTKEY, optarg))
521 usagehelp_exit(myname); 528 usagehelp_exit(myname);
522 break; 529 break;
523 530
524 case 'b': 531 case 'b':
525 if (!opt_props.set_new_value( 532 if (!opt_props.set_new_value(
526 GoogleBinaryBlockUtil::PROP_BMPFV, optarg)) 533 GoogleBinaryBlockUtil::PROP_BMPFV, optarg))
527 usagehelp_exit(myname); 534 usagehelp_exit(myname);
528 break; 535 break;
529 536
537 case 'R':
538 if (!opt_props.set_new_value(
539 GoogleBinaryBlockUtil::PROP_RCVKEY, optarg))
540 usagehelp_exit(myname);
541 break;
542
530 default: 543 default:
531 case '?': 544 case '?':
532 usagehelp_exit(myname); 545 usagehelp_exit(myname);
533 break; 546 break;
534 } 547 }
535 } 548 }
536 argc -= optind; 549 argc -= optind;
537 argv += optind; 550 argv += optind;
538 551
539 // adjust non-dashed parameters 552 // adjust non-dashed parameters
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
626 } else { 639 } else {
627 printf("successfully saved new image to: %s\n", myopts.output_fn.c_str()); 640 printf("successfully saved new image to: %s\n", myopts.output_fn.c_str());
628 } 641 }
629 } 642 }
630 643
631 return 0; 644 return 0;
632 } 645 }
633 646
634 #endif // WITH_UTIL_MAIN 647 #endif // WITH_UTIL_MAIN
635 648
OLDNEW
« no previous file with comments | « no previous file | src/platform/vboot_reference/utility/include/gbb_utility.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698