mirror of
https://github.com/albertobsd/keyhunt.git
synced 2025-03-17 21:31:49 +01:00
148 lines
3.9 KiB
C
148 lines
3.9 KiB
C
#include <openssl/evp.h>
|
|
#include <string.h>
|
|
#include <stdio.h>
|
|
#include "hashing.h"
|
|
|
|
int sha256(const unsigned char *data, size_t length, unsigned char *digest) {
|
|
EVP_MD_CTX *mdctx;
|
|
const EVP_MD *md;
|
|
md = EVP_sha256();
|
|
if(!md) {
|
|
printf("Unknown message digest sha256\n");
|
|
return 1;
|
|
}
|
|
mdctx = EVP_MD_CTX_new();
|
|
if(!mdctx) {
|
|
printf("Failed to create new EVP_MD_CTX\n");
|
|
return 1;
|
|
}
|
|
if(EVP_DigestInit_ex(mdctx, md, NULL) != 1) {
|
|
printf("Failed to initialize EVP_Digest with sha256\n");
|
|
EVP_MD_CTX_free(mdctx);
|
|
return 1;
|
|
}
|
|
if(EVP_DigestUpdate(mdctx, data, length) != 1) {
|
|
printf("Failed to update digest\n");
|
|
EVP_MD_CTX_free(mdctx);
|
|
return 1;
|
|
}
|
|
unsigned int digest_len;
|
|
if(EVP_DigestFinal_ex(mdctx, digest, &digest_len) != 1) {
|
|
printf("Failed to finalize digest\n");
|
|
EVP_MD_CTX_free(mdctx);
|
|
return 1;
|
|
}
|
|
EVP_MD_CTX_free(mdctx);
|
|
return 0; // Success
|
|
}
|
|
|
|
// Function for hashing
|
|
int keccak(const unsigned char *data, size_t length, unsigned char *digest) {
|
|
EVP_MD_CTX *mdctx;
|
|
const EVP_MD *md;
|
|
md = EVP_get_digestbyname("keccak256");
|
|
if(!md) {
|
|
printf("Unknown message digest keccak256\n");
|
|
return 1;
|
|
}
|
|
mdctx = EVP_MD_CTX_new();
|
|
if(!mdctx) {
|
|
printf("Failed to create new EVP_MD_CTX\n");
|
|
return 1;
|
|
}
|
|
if(EVP_DigestInit_ex(mdctx, md, NULL) != 1) {
|
|
printf("Failed to initialize EVP_Digest with keccak256\n");
|
|
EVP_MD_CTX_free(mdctx);
|
|
return 1;
|
|
}
|
|
if(EVP_DigestUpdate(mdctx, data, length) != 1) {
|
|
printf("Failed to update digest\n");
|
|
EVP_MD_CTX_free(mdctx);
|
|
return 1;
|
|
}
|
|
unsigned int digest_len;
|
|
if(EVP_DigestFinal_ex(mdctx, digest, &digest_len) != 1) {
|
|
printf("Failed to finalize digest\n");
|
|
EVP_MD_CTX_free(mdctx);
|
|
return 1;
|
|
}
|
|
EVP_MD_CTX_free(mdctx);
|
|
return 0; // Success
|
|
}
|
|
|
|
int rmd160(const unsigned char *data, size_t length, unsigned char *digest) {
|
|
EVP_MD_CTX *mdctx;
|
|
const EVP_MD *md;
|
|
md = EVP_get_digestbyname("rmd160");
|
|
if(!md) {
|
|
printf("Unknown message digest rmd160\n");
|
|
return 1;
|
|
}
|
|
mdctx = EVP_MD_CTX_new();
|
|
if(!mdctx) {
|
|
printf("Failed to create new EVP_MD_CTX\n");
|
|
return 1;
|
|
}
|
|
if(EVP_DigestInit_ex(mdctx, md, NULL) != 1) {
|
|
printf("Failed to initialize EVP_Digest with rmd160\n");
|
|
EVP_MD_CTX_free(mdctx);
|
|
return 1;
|
|
}
|
|
if(EVP_DigestUpdate(mdctx, data, length) != 1) {
|
|
printf("Failed to update digest\n");
|
|
EVP_MD_CTX_free(mdctx);
|
|
return 1;
|
|
}
|
|
unsigned int digest_len;
|
|
if(EVP_DigestFinal_ex(mdctx, digest, &digest_len) != 1) {
|
|
printf("Failed to finalize digest\n");
|
|
EVP_MD_CTX_free(mdctx);
|
|
return 1;
|
|
}
|
|
EVP_MD_CTX_free(mdctx);
|
|
return 0; // Success
|
|
}
|
|
|
|
bool sha256_file(const char* file_name, uint8_t* digest) {
|
|
FILE* file = fopen(file_name, "rb");
|
|
if (file == NULL) {
|
|
printf("Failed to open file: %s\n", file_name);
|
|
return false;
|
|
}
|
|
uint8_t buffer[8192]; // Buffer to read file contents
|
|
size_t bytes_read;
|
|
EVP_MD_CTX *mdctx;
|
|
const EVP_MD *md;
|
|
md = EVP_sha256();
|
|
if(!md) {
|
|
printf("Unknown message digest sha256\n");
|
|
return false;
|
|
}
|
|
mdctx = EVP_MD_CTX_new();
|
|
if(!mdctx) {
|
|
printf("Failed to create new EVP_MD_CTX\n");
|
|
return false;
|
|
}
|
|
if(EVP_DigestInit_ex(mdctx, md, NULL) != 1) {
|
|
printf("Failed to initialize EVP_Digest with sha256\n");
|
|
EVP_MD_CTX_free(mdctx);
|
|
return false;
|
|
}
|
|
// Read file contents and update SHA256 context
|
|
while ((bytes_read = fread(buffer, 1, sizeof(buffer), file)) > 0) {
|
|
if(EVP_DigestUpdate(mdctx, buffer, bytes_read) != 1) {
|
|
printf("Failed to update digest\n");
|
|
EVP_MD_CTX_free(mdctx);
|
|
return false;
|
|
}
|
|
}
|
|
unsigned int digest_len;
|
|
if(EVP_DigestFinal_ex(mdctx, digest, &digest_len) != 1) {
|
|
printf("Failed to finalize digest\n");
|
|
EVP_MD_CTX_free(mdctx);
|
|
return 1;
|
|
}
|
|
EVP_MD_CTX_free(mdctx);
|
|
fclose(file);
|
|
return true;
|
|
} |