#include "sgu_stdafx.h" #include "sgu_mode_hash_file.h" bool md5File(const char* szFileName, MD5Digest& result) { if (!szFileName || szFileName[0]==0) { printf("Error: Input filename is not specified.\n"); return false; } FILE* file = nullptr; fopen_s(&file, szFileName, "rb"); if (!file) { printf("Error: Cannot open input file %s for reading.\n", szFileName); return false; } const size_t kBufferSize = 1024; size_t readSize = 0; uint8_t* buffer = new uint8_t[kBufferSize]; MD5Context ctx; md5Init(&ctx); while ((readSize = fread(buffer, 1, kBufferSize, file)) > 0) { md5Update(&ctx, (uint8_t*)buffer, readSize); } result = md5Finalize(&ctx); fclose(file); delete[] buffer; return true; } bool sha256File(const char* szFileName, Sha256Digest& result) { if (!szFileName || szFileName[0] == 0) { printf("Error: Input filename is not specified.\n"); return false; } FILE* file = nullptr; fopen_s(&file, szFileName, "rb"); if (!file) { printf("Error: Cannot open input file %s for reading.\n", szFileName); return false; } const size_t kBufferSize = 1024; size_t readSize = 0; uint8_t* buffer = new uint8_t[kBufferSize]; Sha256Context ctx; sha256Initialise(&ctx); while ((readSize = fread(buffer, 1, kBufferSize, file)) > 0) { sha256Update(&ctx, (uint8_t*)buffer, readSize); } sha256Finalise(&ctx, result); fclose(file); delete[] buffer; return true; } bool crc32File(const char* szFileName, uint32_t& result) { if (!szFileName || szFileName[0] == 0) { printf("Error: Input filename is not specified.\n"); return false; } FILE* file = nullptr; fopen_s(&file, szFileName, "rb"); if (!file) { printf("Error: Cannot open input file %s for reading.\n", szFileName); return false; } const size_t kBufferSize = 1024; size_t readSize = 0; uint8_t* buffer = new uint8_t[kBufferSize]; result = 0; while ((readSize = fread(buffer, 1, kBufferSize, file)) > 0) { result = crcMemory32(buffer, static_cast(readSize), result); } fclose(file); delete[] buffer; return true; }