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