xref: /rk3399_ARM-atf/tools/cert_create/src/sha.c (revision 2972247cb4ae84ed660532cac426259a4f17c816)
16f971622SJuan Castillo /*
2*2972247cSQixiang Xu  * Copyright (c) 2015-2017, ARM Limited and Contributors. All rights reserved.
36f971622SJuan Castillo  *
482cb2c1aSdp-arm  * SPDX-License-Identifier: BSD-3-Clause
56f971622SJuan Castillo  */
66f971622SJuan Castillo 
76f971622SJuan Castillo #include <openssl/sha.h>
82a4b4b71SIsla Mitchell #include <stdio.h>
96f971622SJuan Castillo #include "debug.h"
10*2972247cSQixiang Xu #include "key.h"
116f971622SJuan Castillo 
126f971622SJuan Castillo #define BUFFER_SIZE	256
136f971622SJuan Castillo 
14*2972247cSQixiang Xu int sha_file(int md_alg, const char *filename, unsigned char *md)
156f971622SJuan Castillo {
166f971622SJuan Castillo 	FILE *inFile;
176f971622SJuan Castillo 	SHA256_CTX shaContext;
18*2972247cSQixiang Xu 	SHA512_CTX sha512Context;
196f971622SJuan Castillo 	int bytes;
206f971622SJuan Castillo 	unsigned char data[BUFFER_SIZE];
216f971622SJuan Castillo 
226f971622SJuan Castillo 	if ((filename == NULL) || (md == NULL)) {
236f971622SJuan Castillo 		ERROR("%s(): NULL argument\n", __FUNCTION__);
246f971622SJuan Castillo 		return 0;
256f971622SJuan Castillo 	}
266f971622SJuan Castillo 
276f971622SJuan Castillo 	inFile = fopen(filename, "rb");
286f971622SJuan Castillo 	if (inFile == NULL) {
296f971622SJuan Castillo 		ERROR("Cannot read %s\n", filename);
306f971622SJuan Castillo 		return 0;
316f971622SJuan Castillo 	}
326f971622SJuan Castillo 
33*2972247cSQixiang Xu 	if (md_alg == HASH_ALG_SHA384) {
34*2972247cSQixiang Xu 		SHA384_Init(&sha512Context);
35*2972247cSQixiang Xu 		while ((bytes = fread(data, 1, BUFFER_SIZE, inFile)) != 0) {
36*2972247cSQixiang Xu 			SHA384_Update(&sha512Context, data, bytes);
37*2972247cSQixiang Xu 		}
38*2972247cSQixiang Xu 		SHA384_Final(md, &sha512Context);
39*2972247cSQixiang Xu 	} else if (md_alg == HASH_ALG_SHA512) {
40*2972247cSQixiang Xu 		SHA512_Init(&sha512Context);
41*2972247cSQixiang Xu 		while ((bytes = fread(data, 1, BUFFER_SIZE, inFile)) != 0) {
42*2972247cSQixiang Xu 			SHA512_Update(&sha512Context, data, bytes);
43*2972247cSQixiang Xu 		}
44*2972247cSQixiang Xu 		SHA512_Final(md, &sha512Context);
45*2972247cSQixiang Xu 	} else {
466f971622SJuan Castillo 		SHA256_Init(&shaContext);
476f971622SJuan Castillo 		while ((bytes = fread(data, 1, BUFFER_SIZE, inFile)) != 0) {
486f971622SJuan Castillo 			SHA256_Update(&shaContext, data, bytes);
496f971622SJuan Castillo 		}
506f971622SJuan Castillo 		SHA256_Final(md, &shaContext);
51*2972247cSQixiang Xu 	}
526f971622SJuan Castillo 
536f971622SJuan Castillo 	fclose(inFile);
546f971622SJuan Castillo 	return 1;
556f971622SJuan Castillo }
56