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 * Tests for kernel image library. | 5 * Tests for kernel image library. |
6 */ | 6 */ |
7 | 7 |
8 #include <stdio.h> | 8 #include <stdio.h> |
9 #include <stdlib.h> | 9 #include <stdlib.h> |
10 | 10 |
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
167 success = 0; | 167 success = 0; |
168 | 168 |
169 return success; | 169 return success; |
170 } | 170 } |
171 | 171 |
172 int main(int argc, char* argv[]) { | 172 int main(int argc, char* argv[]) { |
173 uint32_t len; | 173 uint32_t len; |
174 uint8_t* kernel_sign_key_buf = NULL; | 174 uint8_t* kernel_sign_key_buf = NULL; |
175 uint8_t* firmware_key_blob = NULL; | 175 uint8_t* firmware_key_blob = NULL; |
176 uint8_t* kernel_blob = NULL; | 176 uint8_t* kernel_blob = NULL; |
| 177 int kernel_blob_len = 0; |
177 KernelImage* image = NULL; | 178 KernelImage* image = NULL; |
178 RSAPublicKey* firmware_key = NULL; | 179 RSAPublicKey* firmware_key = NULL; |
179 int error_code = 1; | 180 int error_code = 1; |
180 char* tmp_kernelblob_file = ".tmpKernelBlob"; | |
181 | 181 |
182 if(argc != 7) { | 182 if(argc != 7) { |
183 fprintf(stderr, "Usage: %s <firmware signing algorithm> " /* argv[1] */ | 183 fprintf(stderr, "Usage: %s <firmware signing algorithm> " /* argv[1] */ |
184 "<kernel signing algorithm> " /* argv[2] */ | 184 "<kernel signing algorithm> " /* argv[2] */ |
185 "<firmware key> " /* argv[3] */ | 185 "<firmware key> " /* argv[3] */ |
186 "<processed firmware pubkey> " /* argv[4] */ | 186 "<processed firmware pubkey> " /* argv[4] */ |
187 "<kernel signing key> " /* argv[5] */ | 187 "<kernel signing key> " /* argv[5] */ |
188 "<processed kernel signing key>\n", /* argv[6] */ | 188 "<processed kernel signing key>\n", /* argv[6] */ |
189 argv[0]); | 189 argv[0]); |
190 return -1; | 190 return -1; |
(...skipping 19 matching lines...) Expand all Loading... |
210 goto failure; | 210 goto failure; |
211 } | 211 } |
212 | 212 |
213 /* Generate and populate signatures. */ | 213 /* Generate and populate signatures. */ |
214 if (!AddKernelKeySignature(image, argv[3])) { | 214 if (!AddKernelKeySignature(image, argv[3])) { |
215 fprintf(stderr, "Couldn't create key signature.\n"); | 215 fprintf(stderr, "Couldn't create key signature.\n"); |
216 error_code = 1; | 216 error_code = 1; |
217 goto failure; | 217 goto failure; |
218 } | 218 } |
219 | 219 |
220 if (!AddKernelSignature(image, argv[5], image->kernel_sign_algorithm)) { | 220 if (!AddKernelSignature(image, argv[5])) { |
221 fprintf(stderr, "Couldn't create firmware and preamble signature.\n"); | 221 fprintf(stderr, "Couldn't create firmware and preamble signature.\n"); |
222 error_code = 1; | 222 error_code = 1; |
223 goto failure; | 223 goto failure; |
224 } | 224 } |
225 | 225 |
226 /* Generate a firmware binary blob from image. | 226 kernel_blob = GetKernelBlob(image, &kernel_blob_len); |
227 * | |
228 * TODO(gauravsh): Add a function to directly generate a binary | |
229 * blob buffer from a KernelImage instead of indirectly writing to a file | |
230 * and reading it into a buffer. | |
231 */ | |
232 if (!WriteKernelImage(tmp_kernelblob_file, image)) { | |
233 fprintf(stderr, "Couldn't create a temporary kernel blob file.\n"); | |
234 error_code = 1; | |
235 goto failure; | |
236 } | |
237 kernel_blob = BufferFromFile(tmp_kernelblob_file, &len); | |
238 | 227 |
239 /* Test Kernel blob verify operations. */ | 228 /* Test Kernel blob verify operations. */ |
240 if (!VerifyKernelTest(kernel_blob, firmware_key_blob)) | 229 if (!VerifyKernelTest(kernel_blob, firmware_key_blob)) |
241 error_code = 255; | 230 error_code = 255; |
242 | 231 |
243 /* Test KernelImage verify operations. */ | 232 /* Test KernelImage verify operations. */ |
244 if (!VerifyKernelImageTest(image, firmware_key)) | 233 if (!VerifyKernelImageTest(image, firmware_key)) |
245 error_code = 255; | 234 error_code = 255; |
246 if (!VerifyKernelImageTamperTest(image, firmware_key)) | 235 if (!VerifyKernelImageTamperTest(image, firmware_key)) |
247 error_code = 255; | 236 error_code = 255; |
248 | 237 |
249 failure: | 238 failure: |
250 Free(kernel_blob); | 239 Free(kernel_blob); |
251 KernelImageFree(image); | 240 KernelImageFree(image); |
252 Free(kernel_sign_key_buf); | 241 Free(kernel_sign_key_buf); |
253 Free(firmware_key_blob); | 242 Free(firmware_key_blob); |
254 Free(firmware_key); | 243 Free(firmware_key); |
255 | 244 |
256 return error_code; | 245 return error_code; |
257 } | 246 } |
OLD | NEW |