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

Side by Side Diff: src/platform/vboot_reference/tests/test_common.c

Issue 1430001: VBoot Reference: Fix splicing bugs in Firmware and Kernel verification. (Closed)
Patch Set: . Created 10 years, 8 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 * Common functions used by tests. 5 * Common functions used by tests.
6 */ 6 */
7 7
8 #include "test_common.h" 8 #include "test_common.h"
9 9
10 #include <stdio.h> 10 #include <stdio.h>
(...skipping 21 matching lines...) Expand all
32 return 0; 32 return 0;
33 } 33 }
34 } 34 }
35 35
36 FirmwareImage* GenerateTestFirmwareImage(int algorithm, 36 FirmwareImage* GenerateTestFirmwareImage(int algorithm,
37 const uint8_t* firmware_sign_key, 37 const uint8_t* firmware_sign_key,
38 int firmware_key_version, 38 int firmware_key_version,
39 int firmware_version, 39 int firmware_version,
40 int firmware_len, 40 int firmware_len,
41 const char* root_key_file, 41 const char* root_key_file,
42 const char* firmware_key_file) { 42 const char* firmware_key_file,
43 uint8_t firmware_data_fill_char) {
43 FirmwareImage* image = FirmwareImageNew(); 44 FirmwareImage* image = FirmwareImageNew();
44 45
45 Memcpy(image->magic, FIRMWARE_MAGIC, FIRMWARE_MAGIC_SIZE); 46 Memcpy(image->magic, FIRMWARE_MAGIC, FIRMWARE_MAGIC_SIZE);
46 image->firmware_sign_algorithm = algorithm; 47 image->firmware_sign_algorithm = algorithm;
47 image->firmware_sign_key = (uint8_t*) Malloc( 48 image->firmware_sign_key = (uint8_t*) Malloc(
48 RSAProcessedKeySize(image->firmware_sign_algorithm)); 49 RSAProcessedKeySize(image->firmware_sign_algorithm));
49 Memcpy(image->firmware_sign_key, firmware_sign_key, 50 Memcpy(image->firmware_sign_key, firmware_sign_key,
50 RSAProcessedKeySize(image->firmware_sign_algorithm)); 51 RSAProcessedKeySize(image->firmware_sign_algorithm));
51 image->firmware_key_version = firmware_key_version; 52 image->firmware_key_version = firmware_key_version;
52 53
53 /* Update correct header length. */ 54 /* Update correct header length. */
54 image->header_len = GetFirmwareHeaderLen(image); 55 image->header_len = GetFirmwareHeaderLen(image);
55 56
56 /* Calculate SHA-512 digest on header and populate header_checksum. */ 57 /* Calculate SHA-512 digest on header and populate header_checksum. */
57 CalculateFirmwareHeaderChecksum(image, image->header_checksum); 58 CalculateFirmwareHeaderChecksum(image, image->header_checksum);
58 59
59 /* Populate firmware and preamble with dummy data. */ 60 /* Populate firmware and preamble with dummy data. */
60 image->firmware_version = firmware_version; 61 image->firmware_version = firmware_version;
61 image->firmware_len = firmware_len; 62 image->firmware_len = firmware_len;
62 image->preamble_signature = image->firmware_signature = NULL; 63 image->preamble_signature = image->firmware_signature = NULL;
63 Memset(image->preamble, 'P', FIRMWARE_PREAMBLE_SIZE); 64 Memset(image->preamble, 'P', FIRMWARE_PREAMBLE_SIZE);
64 image->firmware_data = Malloc(image->firmware_len); 65 image->firmware_data = Malloc(image->firmware_len);
65 Memset(image->firmware_data, 'F', image->firmware_len); 66 Memset(image->firmware_data, firmware_data_fill_char, image->firmware_len);
66 67
67 /* Generate and populate signatures. */ 68 /* Generate and populate signatures. */
68 if (!AddFirmwareKeySignature(image, root_key_file)) { 69 if (!AddFirmwareKeySignature(image, root_key_file)) {
69 fprintf(stderr, "Couldn't create key signature.\n"); 70 fprintf(stderr, "Couldn't create key signature.\n");
70 FirmwareImageFree(image); 71 FirmwareImageFree(image);
71 return NULL; 72 return NULL;
72 } 73 }
73 74
74 if (!AddFirmwareSignature(image, firmware_key_file)) { 75 if (!AddFirmwareSignature(image, firmware_key_file)) {
75 fprintf(stderr, "Couldn't create firmware and preamble signature.\n"); 76 fprintf(stderr, "Couldn't create firmware and preamble signature.\n");
(...skipping 13 matching lines...) Expand all
89 FirmwareImage* image = NULL; 90 FirmwareImage* image = NULL;
90 uint8_t* firmware_blob = NULL; 91 uint8_t* firmware_blob = NULL;
91 uint64_t firmware_blob_len = 0; 92 uint64_t firmware_blob_len = 0;
92 93
93 image = GenerateTestFirmwareImage(algorithm, 94 image = GenerateTestFirmwareImage(algorithm,
94 firmware_sign_key, 95 firmware_sign_key,
95 firmware_key_version, 96 firmware_key_version,
96 firmware_version, 97 firmware_version,
97 firmware_len, 98 firmware_len,
98 root_key_file, 99 root_key_file,
99 firmware_key_file); 100 firmware_key_file,
101 'F');
100 firmware_blob = GetFirmwareBlob(image, &firmware_blob_len); 102 firmware_blob = GetFirmwareBlob(image, &firmware_blob_len);
101 FirmwareImageFree(image); 103 FirmwareImageFree(image);
102 return firmware_blob; 104 return firmware_blob;
103 } 105 }
104 106
105 uint8_t* GenerateRollbackTestFirmwareBlob(int firmware_key_version, 107 uint8_t* GenerateRollbackTestFirmwareBlob(int firmware_key_version,
106 int firmware_version, 108 int firmware_version,
107 int is_corrupt) { 109 int is_corrupt) {
108 FirmwareImage* image = NULL; 110 FirmwareImage* image = NULL;
109 uint64_t len; 111 uint64_t len;
110 uint8_t* firmware_blob = NULL; 112 uint8_t* firmware_blob = NULL;
111 uint8_t* firmware_sign_key = NULL; 113 uint8_t* firmware_sign_key = NULL;
112 114
113 firmware_sign_key = BufferFromFile("testkeys/key_rsa1024.keyb", 115 firmware_sign_key = BufferFromFile("testkeys/key_rsa1024.keyb",
114 &len); 116 &len);
115 if (!firmware_sign_key) 117 if (!firmware_sign_key)
116 return NULL; 118 return NULL;
117 image = GenerateTestFirmwareImage(0, /* RSA1024/SHA1 */ 119 image = GenerateTestFirmwareImage(0, /* RSA1024/SHA1 */
118 firmware_sign_key, 120 firmware_sign_key,
119 firmware_key_version, 121 firmware_key_version,
120 firmware_version, 122 firmware_version,
121 1, /* Firmware length. */ 123 1, /* Firmware length. */
122 "testkeys/key_rsa8192.pem", 124 "testkeys/key_rsa8192.pem",
123 "testkeys/key_rsa1024.pem"); 125 "testkeys/key_rsa1024.pem",
126 'F');
124 if (!image) 127 if (!image)
125 return NULL; 128 return NULL;
126 if (is_corrupt) { 129 if (is_corrupt) {
127 /* Invalidate image. */ 130 /* Invalidate image. */
128 Memset(image->firmware_data, 'X', image->firmware_len); 131 Memset(image->firmware_data, 'X', image->firmware_len);
129 } 132 }
130 133
131 firmware_blob = GetFirmwareBlob(image, &len); 134 firmware_blob = GetFirmwareBlob(image, &len);
132 FirmwareImageFree(image); 135 FirmwareImageFree(image);
133 return firmware_blob; 136 return firmware_blob;
134 } 137 }
135 138
136 139
137 KernelImage* GenerateTestKernelImage(int firmware_sign_algorithm, 140 KernelImage* GenerateTestKernelImage(int firmware_sign_algorithm,
138 int kernel_sign_algorithm, 141 int kernel_sign_algorithm,
139 const uint8_t* kernel_sign_key, 142 const uint8_t* kernel_sign_key,
140 int kernel_key_version, 143 int kernel_key_version,
141 int kernel_version, 144 int kernel_version,
142 int kernel_len, 145 int kernel_len,
143 const char* firmware_key_file, 146 const char* firmware_key_file,
144 const char* kernel_key_file) { 147 const char* kernel_key_file,
148 uint8_t kernel_data_fill_char) {
145 KernelImage* image = KernelImageNew(); 149 KernelImage* image = KernelImageNew();
146 150
147 Memcpy(image->magic, KERNEL_MAGIC, KERNEL_MAGIC_SIZE); 151 Memcpy(image->magic, KERNEL_MAGIC, KERNEL_MAGIC_SIZE);
148 image->header_version = 1; 152 image->header_version = 1;
149 image->firmware_sign_algorithm = firmware_sign_algorithm; 153 image->firmware_sign_algorithm = firmware_sign_algorithm;
150 image->kernel_sign_algorithm = kernel_sign_algorithm; 154 image->kernel_sign_algorithm = kernel_sign_algorithm;
151 image->kernel_key_version = kernel_key_version; 155 image->kernel_key_version = kernel_key_version;
152 image->kernel_sign_key = (uint8_t*) Malloc( 156 image->kernel_sign_key = (uint8_t*) Malloc(
153 RSAProcessedKeySize(image->kernel_sign_algorithm)); 157 RSAProcessedKeySize(image->kernel_sign_algorithm));
154 Memcpy(image->kernel_sign_key, kernel_sign_key, 158 Memcpy(image->kernel_sign_key, kernel_sign_key,
155 RSAProcessedKeySize(image->kernel_sign_algorithm)); 159 RSAProcessedKeySize(image->kernel_sign_algorithm));
156 160
157 /* Update correct header length. */ 161 /* Update correct header length. */
158 image->header_len = GetKernelHeaderLen(image); 162 image->header_len = GetKernelHeaderLen(image);
159 163
160 /* Calculate SHA-512 digest on header and populate header_checksum. */ 164 /* Calculate SHA-512 digest on header and populate header_checksum. */
161 CalculateKernelHeaderChecksum(image, image->header_checksum); 165 CalculateKernelHeaderChecksum(image, image->header_checksum);
162 166
163 /* Populate kernel options and data with dummy data. */ 167 /* Populate kernel options and data with dummy data. */
164 image->kernel_version = kernel_version; 168 image->kernel_version = kernel_version;
165 image->options.version[0] = 1; 169 image->options.version[0] = 1;
166 image->options.version[1] = 0; 170 image->options.version[1] = 0;
167 Memset(image->options.cmd_line, 0, sizeof(image->options.cmd_line)); 171 Memset(image->options.cmd_line, 0, sizeof(image->options.cmd_line));
168 image->options.kernel_len = kernel_len; 172 image->options.kernel_len = kernel_len;
169 image->options.kernel_load_addr = 0; 173 image->options.kernel_load_addr = 0;
170 image->options.kernel_entry_addr = 0; 174 image->options.kernel_entry_addr = 0;
171 image->kernel_key_signature = image->kernel_signature = NULL; 175 image->kernel_key_signature = image->kernel_signature = NULL;
172 image->kernel_data = Malloc(kernel_len); 176 image->kernel_data = Malloc(kernel_len);
173 Memset(image->kernel_data, 'F', kernel_len); 177 Memset(image->kernel_data, kernel_data_fill_char, kernel_len);
174 178
175 /* Generate and populate signatures. */ 179 /* Generate and populate signatures. */
176 if (!AddKernelKeySignature(image, firmware_key_file)) { 180 if (!AddKernelKeySignature(image, firmware_key_file)) {
177 fprintf(stderr, "Couldn't create key signature.\n"); 181 fprintf(stderr, "Couldn't create key signature.\n");
178 KernelImageFree(image); 182 KernelImageFree(image);
179 return NULL; 183 return NULL;
180 } 184 }
181 185
182 if (!AddKernelSignature(image, kernel_key_file)) { 186 if (!AddKernelSignature(image, kernel_key_file)) {
183 fprintf(stderr, "Couldn't create kernel option and kernel signature.\n"); 187 fprintf(stderr, "Couldn't create kernel option and kernel signature.\n");
(...skipping 16 matching lines...) Expand all
200 uint8_t* kernel_blob = NULL; 204 uint8_t* kernel_blob = NULL;
201 uint64_t kernel_blob_len = 0; 205 uint64_t kernel_blob_len = 0;
202 206
203 image = GenerateTestKernelImage(firmware_sign_algorithm, 207 image = GenerateTestKernelImage(firmware_sign_algorithm,
204 kernel_sign_algorithm, 208 kernel_sign_algorithm,
205 kernel_sign_key, 209 kernel_sign_key,
206 kernel_key_version, 210 kernel_key_version,
207 kernel_version, 211 kernel_version,
208 kernel_len, 212 kernel_len,
209 firmware_key_file, 213 firmware_key_file,
210 kernel_key_file); 214 kernel_key_file,
215 'K');
211 216
212 kernel_blob = GetKernelBlob(image, &kernel_blob_len); 217 kernel_blob = GetKernelBlob(image, &kernel_blob_len);
213 KernelImageFree(image); 218 KernelImageFree(image);
214 return kernel_blob; 219 return kernel_blob;
215 } 220 }
216 221
217 uint8_t* GenerateRollbackTestKernelBlob(int kernel_key_version, 222 uint8_t* GenerateRollbackTestKernelBlob(int kernel_key_version,
218 int kernel_version, 223 int kernel_version,
219 int is_corrupt) { 224 int is_corrupt) {
220 KernelImage* image = NULL; 225 KernelImage* image = NULL;
221 uint64_t len; 226 uint64_t len;
222 uint8_t* kernel_blob = NULL; 227 uint8_t* kernel_blob = NULL;
223 uint8_t* kernel_sign_key = NULL; 228 uint8_t* kernel_sign_key = NULL;
224 kernel_sign_key = BufferFromFile("testkeys/key_rsa1024.keyb", 229 kernel_sign_key = BufferFromFile("testkeys/key_rsa1024.keyb",
225 &len); 230 &len);
226 if (!kernel_sign_key) 231 if (!kernel_sign_key)
227 return NULL; 232 return NULL;
228 image = GenerateTestKernelImage(0, /* Firmware algo: RSA1024/SHA1 */ 233 image = GenerateTestKernelImage(0, /* Firmware algo: RSA1024/SHA1 */
229 0, /* Kernel algo: RSA1024/SHA1 */ 234 0, /* Kernel algo: RSA1024/SHA1 */
230 kernel_sign_key, 235 kernel_sign_key,
231 kernel_key_version, 236 kernel_key_version,
232 kernel_version, 237 kernel_version,
233 1, /* kernel length. */ 238 1, /* kernel length. */
234 "testkeys/key_rsa1024.pem", 239 "testkeys/key_rsa1024.pem",
235 "testkeys/key_rsa1024.pem"); 240 "testkeys/key_rsa1024.pem",
241 'K');
236 if (!image) 242 if (!image)
237 return NULL; 243 return NULL;
238 if (is_corrupt) { 244 if (is_corrupt) {
239 /* Invalidate image. */ 245 /* Invalidate image. */
240 Memset(image->kernel_data, 'X', image->options.kernel_len); 246 Memset(image->kernel_data, 'X', image->options.kernel_len);
241 } 247 }
242 kernel_blob = GetKernelBlob(image, &len); 248 kernel_blob = GetKernelBlob(image, &len);
243 KernelImageFree(image); 249 KernelImageFree(image);
244 return kernel_blob; 250 return kernel_blob;
245 } 251 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698