| OLD | NEW |
| 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 * Functions for generating and manipulating a verified boot kernel image. | 5 * Functions for generating and manipulating a verified boot kernel image. |
| 6 * (Userland portion) | 6 * (Userland portion) |
| 7 */ | 7 */ |
| 8 #include "kernel_image.h" | 8 #include "kernel_image.h" |
| 9 | 9 |
| 10 #include <fcntl.h> | 10 #include <fcntl.h> |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 60 GetKernelPreambleLen(image->kernel_sign_algorithm) + | 60 GetKernelPreambleLen(image->kernel_sign_algorithm) + |
| 61 kernel_signature_len; | 61 kernel_signature_len; |
| 62 } | 62 } |
| 63 | 63 |
| 64 | 64 |
| 65 KernelImage* ReadKernelImage(const char* input_file) { | 65 KernelImage* ReadKernelImage(const char* input_file) { |
| 66 uint64_t file_size; | 66 uint64_t file_size; |
| 67 uint64_t on_disk_header_size; | 67 uint64_t on_disk_header_size; |
| 68 uint64_t on_disk_padding; | 68 uint64_t on_disk_padding; |
| 69 int header_len = 0; | 69 int header_len = 0; |
| 70 int firmware_sign_key_len; | |
| 71 int kernel_key_signature_len; | 70 int kernel_key_signature_len; |
| 72 int kernel_sign_key_len; | 71 int kernel_sign_key_len; |
| 73 int kernel_signature_len; | 72 int kernel_signature_len; |
| 74 uint8_t* kernel_buf; | 73 uint8_t* kernel_buf; |
| 75 uint8_t header_checksum[FIELD_LEN(header_checksum)]; | 74 uint8_t header_checksum[FIELD_LEN(header_checksum)]; |
| 76 MemcpyState st; | 75 MemcpyState st; |
| 77 KernelImage* image = KernelImageNew(); | 76 KernelImage* image = KernelImageNew(); |
| 78 | 77 |
| 79 if (!image) | 78 if (!image) |
| 80 return NULL; | 79 return NULL; |
| (...skipping 25 matching lines...) Expand all Loading... |
| 106 return NULL; | 105 return NULL; |
| 107 } | 106 } |
| 108 | 107 |
| 109 /* Valid Kernel Signing Algorithm? */ | 108 /* Valid Kernel Signing Algorithm? */ |
| 110 if (image->kernel_sign_algorithm >= kNumAlgorithms) { | 109 if (image->kernel_sign_algorithm >= kNumAlgorithms) { |
| 111 Free(kernel_buf); | 110 Free(kernel_buf); |
| 112 return NULL; | 111 return NULL; |
| 113 } | 112 } |
| 114 | 113 |
| 115 /* Compute size of pre-processed RSA public keys and signatures. */ | 114 /* Compute size of pre-processed RSA public keys and signatures. */ |
| 116 firmware_sign_key_len = RSAProcessedKeySize(image->firmware_sign_algorithm); | |
| 117 kernel_key_signature_len = siglen_map[image->firmware_sign_algorithm]; | 115 kernel_key_signature_len = siglen_map[image->firmware_sign_algorithm]; |
| 118 kernel_sign_key_len = RSAProcessedKeySize(image->kernel_sign_algorithm); | 116 kernel_sign_key_len = RSAProcessedKeySize(image->kernel_sign_algorithm); |
| 119 kernel_signature_len = siglen_map[image->kernel_sign_algorithm]; | 117 kernel_signature_len = siglen_map[image->kernel_sign_algorithm]; |
| 120 | 118 |
| 121 /* Check whether key header length is correct. */ | 119 /* Check whether key header length is correct. */ |
| 122 header_len = GetKernelHeaderLen(image); | 120 header_len = GetKernelHeaderLen(image); |
| 123 if (header_len != image->header_len) { | 121 if (header_len != image->header_len) { |
| 124 debug("Header length mismatch. Got: %d, Expected: %d\n", | 122 debug("Header length mismatch. Got: %d, Expected: %d\n", |
| 125 image->header_len, header_len); | 123 image->header_len, header_len); |
| 126 Free(kernel_buf); | 124 Free(kernel_buf); |
| (...skipping 624 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 751 // Clean up and return the blob. | 749 // Clean up and return the blob. |
| 752 done3: | 750 done3: |
| 753 Free(bootloader_buf); | 751 Free(bootloader_buf); |
| 754 done2: | 752 done2: |
| 755 Free(config_buf); | 753 Free(config_buf); |
| 756 done1: | 754 done1: |
| 757 Free(kernel_buf); | 755 Free(kernel_buf); |
| 758 done0: | 756 done0: |
| 759 return blob; | 757 return blob; |
| 760 } | 758 } |
| OLD | NEW |