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

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

Issue 2372001: Add --subkey_in option to kernel signing utility. (Closed) Base URL: ssh://git@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
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 verified boot kernel images. 5 // Utility for manipulating verified boot kernel images.
6 // 6 //
7 7
8 #include "kernel_utility.h" 8 #include "kernel_utility.h"
9 9
10 #include <errno.h> 10 #include <errno.h>
11 #include <getopt.h> 11 #include <getopt.h>
12 #include <stdio.h> 12 #include <stdio.h>
13 #include <stdint.h> // Needed for UINT16_MAX. 13 #include <stdint.h> // Needed for UINT16_MAX.
14 #include <stdlib.h> 14 #include <stdlib.h>
15 #include <unistd.h> 15 #include <unistd.h>
16 16
17 #include <iostream> 17 #include <iostream>
18 18
19 extern "C" { 19 extern "C" {
20 #include "cryptolib.h" 20 #include "cryptolib.h"
21 #include "file_keys.h" 21 #include "file_keys.h"
22 #include "kernel_image.h" 22 #include "kernel_image.h"
23 #include "utility.h" 23 #include "stateful_util.h"
24 } 24 }
25 25
26 extern int errno; 26 extern int errno;
27 using std::cerr; 27 using std::cerr;
28 28
29 // Macro to determine the size of a field structure in the KernelImage
30 // structure.
31 #define FIELD_LEN(field) (sizeof(((KernelImage*)0)->field))
32
29 namespace vboot_reference { 33 namespace vboot_reference {
30 34
31 KernelUtility::KernelUtility(): image_(NULL), 35 KernelUtility::KernelUtility(): image_(NULL),
32 firmware_key_pub_(NULL), 36 firmware_key_pub_(NULL),
33 header_version_(1), 37 header_version_(1),
34 firmware_sign_algorithm_(-1), 38 firmware_sign_algorithm_(-1),
35 kernel_sign_algorithm_(-1), 39 kernel_sign_algorithm_(-1),
36 kernel_key_version_(-1), 40 kernel_key_version_(-1),
37 kernel_version_(-1), 41 kernel_version_(-1),
38 padding_(0), 42 padding_(0),
39 kernel_len_(0), 43 kernel_len_(0),
40 is_generate_(false), 44 is_generate_(false),
41 is_verify_(false), 45 is_verify_(false),
42 is_describe_(false), 46 is_describe_(false),
43 is_only_vblock_(false) { 47 is_only_vblock_(false) {}
44 }
45 48
46 KernelUtility::~KernelUtility() { 49 KernelUtility::~KernelUtility() {
47 RSAPublicKeyFree(firmware_key_pub_); 50 RSAPublicKeyFree(firmware_key_pub_);
48 KernelImageFree(image_); 51 KernelImageFree(image_);
49 } 52 }
50 53
51 void KernelUtility::PrintUsage(void) { 54 void KernelUtility::PrintUsage(void) {
52 cerr << "\n" 55 cerr << "\n"
53 "Utility to generate/verify/describe a verified boot kernel image\n" 56 "Utility to generate/verify/describe a verified boot kernel image\n"
54 "\n" 57 "\n"
55 "Usage: kernel_utility <--generate|--verify|--describe> [OPTIONS]\n" 58 "Usage: kernel_utility <--generate|--verify|--describe> [OPTIONS]\n"
56 "\n" 59 "\n"
57 "For \"--describe\", the required OPTIONS are:\n" 60 "For \"--describe\", the required OPTIONS are:\n"
58 " --in <infile>\t\t\t\tSigned boot image to describe.\n" 61 " --in <infile>\t\t\t\tSigned boot image to describe.\n"
59 "\n" 62 "\n"
60 "For \"--verify\", required OPTIONS are:\n" 63 "For \"--verify\", required OPTIONS are:\n"
61 " --in <infile>\t\t\t\tSigned boot image to verify.\n" 64 " --in <infile>\t\t\t\tSigned boot image to verify.\n"
62 " --firmware_key_pub <pubkeyfile>\tPre-processed public firmware key\n" 65 " --firmware_key_pub <pubkeyfile>\tPre-processed public firmware key\n"
63 "\n" 66 "\n"
64 "For \"--generate\", required OPTIONS are:\n" 67 "For \"--generate\", required OPTIONS are:\n"
65 " --firmware_key <privkeyfile>\t\tPrivate firmware signing key file\n" 68 " --firmware_key <privkeyfile>\t\tPrivate firmware signing key file\n"
66 " --kernel_key <privkeyfile>\t\tPrivate kernel signing key file\n"
67 " --kernel_key_pub <pubkeyfile>\t\tPre-processed public kernel signing" 69 " --kernel_key_pub <pubkeyfile>\t\tPre-processed public kernel signing"
68 " key\n" 70 " key\n"
69 " --firmware_sign_algorithm <algoid>\tSigning algorithm for firmware\n" 71 " --firmware_sign_algorithm <algoid>\tSigning algorithm for firmware\n"
70 " --kernel_sign_algorithm <algoid>\tSigning algorithm for kernel\n" 72 " --kernel_sign_algorithm <algoid>\tSigning algorithm for kernel\n"
71 " --kernel_key_version <number>\t\tKernel signing key version number\n" 73 " --kernel_key_version <number>\t\tKernel signing key version number\n"
74 "OR\n"
75 " --subkey_in <subkeyfile>\t\tExisting key signature header\n"
76 "\n"
77 " --kernel_key <privkeyfile>\t\tPrivate kernel signing key file\n"
72 " --kernel_version <number>\t\tKernel Version number\n" 78 " --kernel_version <number>\t\tKernel Version number\n"
73 " --config <file>\t\t\tEmbedded kernel command-line parameters\n" 79 " --config <file>\t\t\tEmbedded kernel command-line parameters\n"
74 " --bootloader <file>\t\t\tEmbedded bootloader stub\n" 80 " --bootloader <file>\t\t\tEmbedded bootloader stub\n"
75 " --vmlinuz <file>\t\t\tEmbedded kernel image\n" 81 " --vmlinuz <file>\t\t\tEmbedded kernel image\n"
76 " --out <outfile>\t\t\tOutput file for verified boot image\n" 82 " --out <outfile>\t\t\tOutput file for verified boot image\n"
77 "\n" 83 "\n"
78 "Optional arguments for \"--generate\" are:\n" 84 "Optional arguments for \"--generate\" are:\n"
79 " --padding <size>\t\t\tPad the header to this size\n" 85 " --padding <size>\t\t\tPad the header to this size\n"
80 " --subkey_out\t\t\t\tJust output the subkey (key verification) header\n" 86 " --subkey_out\t\t\t\tJust output the subkey (key verification) header\n"
81 " --vblock\t\t\t\tJust output the verification block\n" 87 " --vblock\t\t\t\tJust output the verification block\n"
82 "\n" 88 "\n"
83 "<algoid> (for --*_sign_algorithm) is one of the following:\n"; 89 "<algoid> (for --*_sign_algorithm) is one of the following:\n";
84 for (int i = 0; i < kNumAlgorithms; i++) { 90 for (int i = 0; i < kNumAlgorithms; i++) {
85 cerr << " " << i << " for " << algo_strings[i] << "\n"; 91 cerr << " " << i << " for " << algo_strings[i] << "\n";
86 } 92 }
87 cerr << "\n\n"; 93 cerr << "\n\n";
88 } 94 }
89 95
90 bool KernelUtility::ParseCmdLineOptions(int argc, char* argv[]) { 96 bool KernelUtility::ParseCmdLineOptions(int argc, char* argv[]) {
91 int option_index, i; 97 int option_index, i;
92 char *e = 0; 98 char *e = 0;
93 enum { 99 enum {
94 OPT_FIRMWARE_KEY = 1000, 100 OPT_FIRMWARE_KEY = 1000,
95 OPT_FIRMWARE_KEY_PUB, 101 OPT_FIRMWARE_KEY_PUB,
96 OPT_KERNEL_KEY, 102 OPT_KERNEL_KEY,
97 OPT_KERNEL_KEY_PUB, 103 OPT_KERNEL_KEY_PUB,
104 OPT_SUBKEY_IN,
98 OPT_FIRMWARE_SIGN_ALGORITHM, 105 OPT_FIRMWARE_SIGN_ALGORITHM,
99 OPT_KERNEL_SIGN_ALGORITHM, 106 OPT_KERNEL_SIGN_ALGORITHM,
100 OPT_KERNEL_KEY_VERSION, 107 OPT_KERNEL_KEY_VERSION,
101 OPT_KERNEL_VERSION, 108 OPT_KERNEL_VERSION,
102 OPT_IN, 109 OPT_IN,
103 OPT_OUT, 110 OPT_OUT,
104 OPT_GENERATE, 111 OPT_GENERATE,
105 OPT_VERIFY, 112 OPT_VERIFY,
106 OPT_DESCRIBE, 113 OPT_DESCRIBE,
107 OPT_VBLOCK, 114 OPT_VBLOCK,
108 OPT_BOOTLOADER, 115 OPT_BOOTLOADER,
109 OPT_VMLINUZ, 116 OPT_VMLINUZ,
110 OPT_CONFIG, 117 OPT_CONFIG,
111 OPT_PADDING, 118 OPT_PADDING,
112 OPT_SUBKEY, 119 OPT_SUBKEY,
113 }; 120 };
114 static struct option long_options[] = { 121 static struct option long_options[] = {
115 {"firmware_key", 1, 0, OPT_FIRMWARE_KEY }, 122 {"firmware_key", 1, 0, OPT_FIRMWARE_KEY },
116 {"firmware_key_pub", 1, 0, OPT_FIRMWARE_KEY_PUB }, 123 {"firmware_key_pub", 1, 0, OPT_FIRMWARE_KEY_PUB },
117 {"kernel_key", 1, 0, OPT_KERNEL_KEY }, 124 {"kernel_key", 1, 0, OPT_KERNEL_KEY },
118 {"kernel_key_pub", 1, 0, OPT_KERNEL_KEY_PUB }, 125 {"kernel_key_pub", 1, 0, OPT_KERNEL_KEY_PUB },
126 {"subkey_in", 1, 0, OPT_SUBKEY_IN },
119 {"firmware_sign_algorithm", 1, 0, OPT_FIRMWARE_SIGN_ALGORITHM }, 127 {"firmware_sign_algorithm", 1, 0, OPT_FIRMWARE_SIGN_ALGORITHM },
120 {"kernel_sign_algorithm", 1, 0, OPT_KERNEL_SIGN_ALGORITHM }, 128 {"kernel_sign_algorithm", 1, 0, OPT_KERNEL_SIGN_ALGORITHM },
121 {"kernel_key_version", 1, 0, OPT_KERNEL_KEY_VERSION }, 129 {"kernel_key_version", 1, 0, OPT_KERNEL_KEY_VERSION },
122 {"kernel_version", 1, 0, OPT_KERNEL_VERSION }, 130 {"kernel_version", 1, 0, OPT_KERNEL_VERSION },
123 {"in", 1, 0, OPT_IN }, 131 {"in", 1, 0, OPT_IN },
124 {"out", 1, 0, OPT_OUT }, 132 {"out", 1, 0, OPT_OUT },
125 {"generate", 0, 0, OPT_GENERATE }, 133 {"generate", 0, 0, OPT_GENERATE },
126 {"verify", 0, 0, OPT_VERIFY }, 134 {"verify", 0, 0, OPT_VERIFY },
127 {"describe", 0, 0, OPT_DESCRIBE }, 135 {"describe", 0, 0, OPT_DESCRIBE },
128 {"vblock", 0, 0, OPT_VBLOCK }, 136 {"vblock", 0, 0, OPT_VBLOCK },
(...skipping 14 matching lines...) Expand all
143 break; 151 break;
144 case OPT_FIRMWARE_KEY_PUB: 152 case OPT_FIRMWARE_KEY_PUB:
145 firmware_key_pub_file_ = optarg; 153 firmware_key_pub_file_ = optarg;
146 break; 154 break;
147 case OPT_KERNEL_KEY: 155 case OPT_KERNEL_KEY:
148 kernel_key_file_ = optarg; 156 kernel_key_file_ = optarg;
149 break; 157 break;
150 case OPT_KERNEL_KEY_PUB: 158 case OPT_KERNEL_KEY_PUB:
151 kernel_key_pub_file_ = optarg; 159 kernel_key_pub_file_ = optarg;
152 break; 160 break;
161 case OPT_SUBKEY_IN:
162 subkey_in_file_ = optarg;
163 break;
153 case OPT_FIRMWARE_SIGN_ALGORITHM: 164 case OPT_FIRMWARE_SIGN_ALGORITHM:
154 firmware_sign_algorithm_ = strtol(optarg, &e, 0); 165 firmware_sign_algorithm_ = strtol(optarg, &e, 0);
155 if (!*optarg || (e && *e)) { 166 if (!*optarg || (e && *e)) {
156 cerr << "Invalid argument to --" 167 cerr << "Invalid argument to --"
157 << long_options[option_index].name 168 << long_options[option_index].name
158 << ": " << optarg << "\n"; 169 << ": " << optarg << "\n";
159 return false; 170 return false;
160 } 171 }
161 break; 172 break;
162 case OPT_KERNEL_SIGN_ALGORITHM: 173 case OPT_KERNEL_SIGN_ALGORITHM:
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
248 image_ = ReadKernelImage(in_file_.c_str()); 259 image_ = ReadKernelImage(in_file_.c_str());
249 if (!image_) { 260 if (!image_) {
250 cerr << "Couldn't read kernel image or malformed image.\n"; 261 cerr << "Couldn't read kernel image or malformed image.\n";
251 return; 262 return;
252 } 263 }
253 PrintKernelImage(image_); 264 PrintKernelImage(image_);
254 } 265 }
255 266
256 bool KernelUtility::GenerateSignedImage(void) { 267 bool KernelUtility::GenerateSignedImage(void) {
257 uint64_t kernel_key_pub_len; 268 uint64_t kernel_key_pub_len;
269
258 image_ = KernelImageNew(); 270 image_ = KernelImageNew();
259
260 Memcpy(image_->magic, KERNEL_MAGIC, KERNEL_MAGIC_SIZE); 271 Memcpy(image_->magic, KERNEL_MAGIC, KERNEL_MAGIC_SIZE);
261 272
262 // TODO(gauravsh): make this a command line option. 273 if (subkey_in_file_.empty()) {
263 image_->header_version = 1; 274 // We must generate the kernel key signature header (subkey header)
275 // ourselves.
276 image_->header_version = 1;
277 image_->firmware_sign_algorithm = (uint16_t) firmware_sign_algorithm_;
278 // Copy pre-processed public signing key.
279 image_->kernel_sign_algorithm = (uint16_t) kernel_sign_algorithm_;
280 image_->kernel_sign_key = BufferFromFile(kernel_key_pub_file_.c_str(),
281 &kernel_key_pub_len);
282 if (!image_->kernel_sign_key)
283 return false;
284 image_->kernel_key_version = kernel_key_version_;
285
286 // Update header length.
287 image_->header_len = GetKernelHeaderLen(image_);
288 // Calculate header checksum.
289 CalculateKernelHeaderChecksum(image_, image_->header_checksum);
290
291 // Generate and add the signatures.
292 if (!AddKernelKeySignature(image_, firmware_key_file_.c_str())) {
293 cerr << "Couldn't write key signature to verified boot kernel image.\n";
294 return false;
295 }
296 } else {
297 // Use existing subkey header.
298 MemcpyState st;
299 uint8_t* subkey_header_buf = NULL;
300 uint64_t subkey_len;
301 int header_len;
302 int kernel_key_signature_len;
303 int kernel_sign_key_len;
304 uint8_t header_checksum[FIELD_LEN(header_checksum)];
305
306 subkey_header_buf = BufferFromFile(subkey_in_file_.c_str(), &subkey_len);
307 if (!subkey_header_buf) {
308 cerr << "Couldn't read subkey header from file %s\n"
309 << subkey_in_file_.c_str();
310 return false;
311 }
312 st.remaining_len = subkey_len;
313 st.remaining_buf = subkey_header_buf;
314 st.overrun = 0;
315
316 // TODO(gauravsh): This is basically the same code as the first half of
317 // of ReadKernelImage(). Refactor to eliminate code duplication.
318
319 StatefulMemcpy(&st, &image_->header_version, FIELD_LEN(header_version));
320 StatefulMemcpy(&st, &image_->header_len, FIELD_LEN(header_len));
321 StatefulMemcpy(&st, &image_->firmware_sign_algorithm,
322 FIELD_LEN(firmware_sign_algorithm));
323 StatefulMemcpy(&st, &image_->kernel_sign_algorithm,
324 FIELD_LEN(kernel_sign_algorithm));
325
326 /* Valid Kernel Key signing algorithm. */
327 if (image_->firmware_sign_algorithm >= kNumAlgorithms) {
328 Free(subkey_header_buf);
329 return NULL;
330 }
331
332 /* Valid Kernel Signing Algorithm? */
333 if (image_->kernel_sign_algorithm >= kNumAlgorithms) {
334 Free(subkey_header_buf);
335 return NULL;
336 }
337
338 /* Compute size of pre-processed RSA public keys and signatures. */
339 kernel_key_signature_len = siglen_map[image_->firmware_sign_algorithm];
340 kernel_sign_key_len = RSAProcessedKeySize(image_->kernel_sign_algorithm);
341
342 /* Check whether key header length is correct. */
343 header_len = GetKernelHeaderLen(image_);
344 if (header_len != image_->header_len) {
345 debug("Header length mismatch. Got: %d, Expected: %d\n",
346 image_->header_len, header_len);
347 Free(subkey_header_buf);
348 return NULL;
349 }
350
351 /* Read pre-processed public half of the kernel signing key. */
352 StatefulMemcpy(&st, &image_->kernel_key_version,
353 FIELD_LEN(kernel_key_version));
354 image_->kernel_sign_key = (uint8_t*) Malloc(kernel_sign_key_len);
355 StatefulMemcpy(&st, image_->kernel_sign_key, kernel_sign_key_len);
356 StatefulMemcpy(&st, image_->header_checksum, FIELD_LEN(header_checksum));
357
358 /* Check whether the header checksum matches. */
359 CalculateKernelHeaderChecksum(image_, header_checksum);
360 if (SafeMemcmp(header_checksum, image_->header_checksum,
361 FIELD_LEN(header_checksum))) {
362 debug("Invalid kernel header checksum!\n");
363 Free(subkey_header_buf);
364 return NULL;
365 }
366
367 /* Read key signature. */
368 image_->kernel_key_signature = (uint8_t*) Malloc(kernel_key_signature_len);
369 StatefulMemcpy(&st, image_->kernel_key_signature,
370 kernel_key_signature_len);
371 Free(subkey_header_buf);
372 if (st.overrun || st.remaining_len != 0) /* Overrun or underrun. */
373 return false;
374 return true;
375 }
376
377 // Fill up kernel preamble and kernel data.
378 image_->kernel_version = kernel_version_;
264 if (padding_) 379 if (padding_)
265 image_->padded_header_size = padding_; 380 image_->padded_header_size = padding_;
266 image_->firmware_sign_algorithm = (uint16_t) firmware_sign_algorithm_;
267 // Copy pre-processed public signing key.
268 image_->kernel_sign_algorithm = (uint16_t) kernel_sign_algorithm_;
269 image_->kernel_sign_key = BufferFromFile(kernel_key_pub_file_.c_str(),
270 &kernel_key_pub_len);
271 if (!image_->kernel_sign_key)
272 return false;
273 image_->kernel_key_version = kernel_key_version_;
274
275 // Update header length.
276 image_->header_len = GetKernelHeaderLen(image_);
277
278 // Calculate header checksum.
279 CalculateKernelHeaderChecksum(image_, image_->header_checksum);
280
281 image_->kernel_version = kernel_version_;
282
283 image_->kernel_data = GenerateKernelBlob(vmlinuz_file_.c_str(), 381 image_->kernel_data = GenerateKernelBlob(vmlinuz_file_.c_str(),
284 config_file_.c_str(), 382 config_file_.c_str(),
285 bootloader_file_.c_str(), 383 bootloader_file_.c_str(),
286 &image_->kernel_len, 384 &image_->kernel_len,
287 &image_->bootloader_offset, 385 &image_->bootloader_offset,
288 &image_->bootloader_size); 386 &image_->bootloader_size);
289 if (!image_->kernel_data) 387 if (!image_->kernel_data)
290 return false; 388 return false;
291 // Generate and add the signatures.
292 if (!AddKernelKeySignature(image_, firmware_key_file_.c_str())) {
293 cerr << "Couldn't write key signature to verified boot kernel image.\n";
294 return false;
295 }
296 389
297 if (!AddKernelSignature(image_, kernel_key_file_.c_str())) { 390 if (!AddKernelSignature(image_, kernel_key_file_.c_str())) {
298 cerr << "Couldn't write firmware signature to verified boot kernel image.\n" ; 391 cerr << "Couldn't write firmware signature to verified boot kernel image.\n" ;
299 return false; 392 return false;
300 } 393 }
301 return true; 394 return true;
302 } 395 }
303 396
304 bool KernelUtility::VerifySignedImage(void) { 397 bool KernelUtility::VerifySignedImage(void) {
305 int error; 398 int error;
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
344 cerr << "No pre-processed public firmware key file specified.\n"; 437 cerr << "No pre-processed public firmware key file specified.\n";
345 return false; 438 return false;
346 } 439 }
347 if (in_file_.empty()) { 440 if (in_file_.empty()) {
348 cerr << "No input file specified.\n"; 441 cerr << "No input file specified.\n";
349 return false; 442 return false;
350 } 443 }
351 } 444 }
352 // Required options for --generate. 445 // Required options for --generate.
353 if (is_generate_) { 446 if (is_generate_) {
354 if (firmware_key_file_.empty()) { 447 if (subkey_in_file_.empty()) {
355 cerr << "No firmware key file specified.\n"; 448 // Firmware private key (root key), kernel signing public
356 return false; 449 // key, and signing algorithms are required to generate the key signature
450 // header.
451 if (firmware_key_file_.empty()) {
452 cerr << "No firmware key file specified.\n";
453 return false;
454 }
455 if (kernel_key_pub_file_.empty()) {
456 cerr << "No pre-processed public kernel key file specified\n";
457 return false;
458 }
459 if (kernel_key_version_ <= 0 || kernel_key_version_ > UINT16_MAX) {
460 cerr << "Invalid or no kernel key version specified.\n";
461 return false;
462 }
463 if (firmware_sign_algorithm_ < 0 ||
464 firmware_sign_algorithm_ >= kNumAlgorithms) {
465 cerr << "Invalid or no firmware signing key algorithm specified.\n";
466 return false;
467 }
468 if (kernel_sign_algorithm_ < 0 ||
469 kernel_sign_algorithm_ >= kNumAlgorithms) {
470 cerr << "Invalid or no kernel signing key algorithm specified.\n";
471 return false;
472 }
357 } 473 }
358 if (kernel_key_file_.empty()) { 474 if (kernel_key_file_.empty()) {
359 cerr << "No kernel key file specified.\n"; 475 cerr << "No kernel key file specified.\n";
360 return false; 476 return false;
361 } 477 }
362 if (kernel_key_pub_file_.empty()) {
363 cerr << "No pre-processed public kernel key file specified\n";
364 return false;
365 }
366 if (kernel_key_version_ <= 0 || kernel_key_version_ > UINT16_MAX) {
367 cerr << "Invalid or no kernel key version specified.\n";
368 return false;
369 }
370 if (firmware_sign_algorithm_ < 0 ||
371 firmware_sign_algorithm_ >= kNumAlgorithms) {
372 cerr << "Invalid or no firmware signing key algorithm specified.\n";
373 return false;
374 }
375 if (kernel_sign_algorithm_ < 0 ||
376 kernel_sign_algorithm_ >= kNumAlgorithms) {
377 cerr << "Invalid or no kernel signing key algorithm specified.\n";
378 return false;
379 }
380 if (kernel_version_ <=0 || kernel_version_ > UINT16_MAX) { 478 if (kernel_version_ <=0 || kernel_version_ > UINT16_MAX) {
381 cerr << "Invalid or no kernel version specified.\n"; 479 cerr << "Invalid or no kernel version specified.\n";
382 return false; 480 return false;
383 } 481 }
384 if (out_file_.empty()) { 482 if (out_file_.empty()) {
385 cerr <<"No output file specified.\n"; 483 cerr <<"No output file specified.\n";
386 return false; 484 return false;
387 } 485 }
388 if (config_file_.empty()) { 486 if (config_file_.empty()) {
389 cerr << "No config file specified.\n"; 487 cerr << "No config file specified.\n";
(...skipping 30 matching lines...) Expand all
420 } 518 }
421 else if (ku.is_verify()) { 519 else if (ku.is_verify()) {
422 cerr << "Verification "; 520 cerr << "Verification ";
423 if (ku.VerifySignedImage()) 521 if (ku.VerifySignedImage())
424 cerr << "SUCCESS.\n"; 522 cerr << "SUCCESS.\n";
425 else 523 else
426 cerr << "FAILURE.\n"; 524 cerr << "FAILURE.\n";
427 } 525 }
428 return 0; 526 return 0;
429 } 527 }
OLDNEW
« no previous file with comments | « src/platform/vboot_reference/utility/include/kernel_utility.h ('k') | src/platform/vboot_reference/vkernel/kernel_image.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698