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