| /* Copyright (c) 2011 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 functions for file and key handling. |
| */ |
| |
| #include <fcntl.h> |
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <string.h> |
| #include <sys/stat.h> |
| #include <sys/types.h> |
| #include <unistd.h> |
| |
| #include "2common.h" |
| #include "2sha.h" |
| #include "2sysincludes.h" |
| #include "file_keys.h" |
| #include "host_common.h" |
| #include "signature_digest.h" |
| |
| vb2_error_t DigestFile(char *input_file, enum vb2_hash_algorithm alg, |
| uint8_t *digest, uint32_t digest_size) |
| { |
| int input_fd, len; |
| uint8_t data[VB2_SHA1_BLOCK_SIZE]; |
| struct vb2_digest_context ctx; |
| |
| if( (input_fd = open(input_file, O_RDONLY)) == -1 ) { |
| fprintf(stderr, "Couldn't open %s\n", input_file); |
| return VB2_ERROR_UNKNOWN; |
| } |
| vb2_digest_init(&ctx, alg); |
| while ((len = read(input_fd, data, sizeof(data))) == sizeof(data)) |
| vb2_digest_extend(&ctx, data, len); |
| if (len != -1) |
| vb2_digest_extend(&ctx, data, len); |
| close(input_fd); |
| |
| return vb2_digest_finalize(&ctx, digest, digest_size); |
| } |