1 /*
2 * Copyright (c) 2015, ARM Limited and Contributors. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7 #include <openssl/sha.h>
8 #include <stdio.h>
9
10 #include "debug.h"
11
12 #define BUFFER_SIZE 256
13
sha_file(const char * filename,unsigned char * md)14 int sha_file(const char *filename, unsigned char *md)
15 {
16 FILE *inFile;
17 SHA256_CTX shaContext;
18 int bytes;
19 unsigned char data[BUFFER_SIZE];
20
21 if ((filename == NULL) || (md == NULL)) {
22 ERROR("%s(): NULL argument\n", __FUNCTION__);
23 return 0;
24 }
25
26 inFile = fopen(filename, "rb");
27 if (inFile == NULL) {
28 ERROR("Cannot read %s\n", filename);
29 return 0;
30 }
31
32 SHA256_Init(&shaContext);
33 while ((bytes = fread(data, 1, BUFFER_SIZE, inFile)) != 0) {
34 SHA256_Update(&shaContext, data, bytes);
35 }
36 SHA256_Final(md, &shaContext);
37
38 fclose(inFile);
39 return 1;
40 }
41