| /* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| * |
| * Utility for aiding fuzz testing of kernel image verification code. |
| */ |
| |
| #include <stdint.h> |
| #include <stdio.h> |
| |
| #include "file_keys.h" |
| #include "kernel_image.h" |
| #include "utility.h" |
| |
| int VerifySignedKernel(const char* image_file, |
| const char* firmware_key_file) { |
| int error, error_code = 0; |
| uint64_t len; |
| uint8_t* kernel_blob = BufferFromFile(image_file, &len); |
| uint8_t* firmware_key_blob = BufferFromFile(firmware_key_file, &len); |
| |
| if (!firmware_key_blob) { |
| fprintf(stderr, "Couldn't read pre-processed public firmware key.\n"); |
| error_code = 1; |
| } |
| |
| if (!error_code && !kernel_blob) { |
| fprintf(stderr, "Couldn't read kernel image or malformed image.\n"); |
| error_code = 1; |
| } |
| |
| if (!error_code && (error = VerifyKernel(firmware_key_blob, kernel_blob, |
| 0))) { /* Trusted Mode. */ |
| fprintf(stderr, "%s\n", VerifyKernelErrorString(error)); |
| error_code = 1; |
| } |
| Free(firmware_key_blob); |
| Free(kernel_blob); |
| if (error_code) |
| return 0; |
| return 1; |
| } |
| |
| int main(int argc, char* argv[]) { |
| if (argc != 3) { |
| fprintf(stderr, "Usage: %s <image_to_verify> <firmware_keyb>\n", argv[0]); |
| return -1; |
| } |
| if (VerifySignedKernel(argv[1], argv[2])) { |
| fprintf(stderr, "Verification SUCCESS!\n"); |
| return 0; |
| } |
| else { |
| fprintf(stderr, "Verification FAILURE!\n"); |
| return -1; |
| } |
| } |