#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/sha.h>
char *hash(unsigned char *data, size_t len)
{
unsigned char hash[SHA256_DIGEST_LENGTH];
SHA256_CTX sha256;
SHA256_Init(&sha256);
SHA256_Update(&sha256, data, len);
SHA256_Final(hash, &sha256);
unsigned char hash2[SHA256_DIGEST_LENGTH];
SHA256_Init(&sha256);
SHA256_Update(&sha256, hash, SHA256_DIGEST_LENGTH);
SHA256_Final(hash2, &sha256);
char *output = (char *)malloc((SHA256_DIGEST_LENGTH * 2 + 1) * sizeof(char));
for (int i = 0; i <CodeGroup SHA256_DIGEST_LENGTH; i++)
{
sprintf(&output[i * 2], "%02x", (unsigned int)hash2[i]);
}
return output;
}
int main()
{
char *file_path = "./filetohash.pdf";
FILE *f = fopen(file_path, "rb");
if (!f)
{
printf("Error opening file\n");
return 1;
}
fseek(f, 0, SEEK_END);
long file_size = ftell(f);
fseek(f, 0, SEEK_SET);
unsigned char *file_content = (unsigned char *)malloc(file_size * sizeof(unsigned char));
fread(file_content, sizeof(unsigned char), file_size, f);
fclose(f);
char *hash_value = hash(file_content, file_size);
printf("Hash value: %s\n", hash_value);
free(hash_value);
free(file_content);
return 0;
}