| 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 |