diff options
author | berkeviktor@aol.com <berkeviktor@aol.com> | 2010-10-20 18:26:14 +0200 |
---|---|---|
committer | berkeviktor@aol.com <berkeviktor@aol.com> | 2010-10-20 18:26:14 +0200 |
commit | 48045bdf6aa3b2fe9f4da96fafe98b146933d932 (patch) | |
tree | 01367fa6bc0a62ab7e4e4bf47fd85f3199467a65 | |
parent | 6a58b4a5fc567d52425c0eb6b043e94a8f04e7ad (diff) |
add sha256sum support code
-rw-r--r-- | src/common/checksum.c | 74 | ||||
-rw-r--r-- | src/common/checksum.h | 6 | ||||
-rw-r--r-- | xchat-wdk.patch | 2 |
3 files changed, 81 insertions, 1 deletions
diff --git a/src/common/checksum.c b/src/common/checksum.c new file mode 100644 index 00000000..a0f2cdef --- /dev/null +++ b/src/common/checksum.c @@ -0,0 +1,74 @@ +/* this is a cleaned-up version of + * http://adamlamers.com/?p=5 + */ + +#include <stdio.h> +#include <malloc.h> +#include <errno.h> + +#include "checksum.h" + +void +sha256_hash_string (unsigned char hash[SHA256_DIGEST_LENGTH], char outputBuffer[65]) +{ + int i = 0; + for (i = 0; i < SHA256_DIGEST_LENGTH; i++) + { + sprintf(outputBuffer + (i * 2), "%02x", hash[i]); + } + outputBuffer[64] = 0; +} + +void +sha256 (char *string, char outputBuffer[65]) +{ + int i; + unsigned char hash[SHA256_DIGEST_LENGTH]; + SHA256_CTX sha256; + + SHA256_Init (&sha256); + SHA256_Update (&sha256, string, strlen(string)); + SHA256_Final (hash, &sha256); + + for (i = 0; i < SHA256_DIGEST_LENGTH; i++) + { + sprintf (outputBuffer + (i * 2), "%02x", hash[i]); + } + outputBuffer[64] = 0; +} + +int +sha256_file (char *path, char outputBuffer[65]) +{ + int bytesRead; + unsigned char *buffer; + unsigned char hash[SHA256_DIGEST_LENGTH]; + SHA256_CTX sha256; + + FILE *file = fopen (path, "rb"); + if (!file) + { + return -534; + } + + SHA256_Init (&sha256); + buffer = malloc (BUFSIZE); + bytesRead = 0; + + if (!buffer) + { + return ENOMEM; + } + + while ((bytesRead = fread (buffer, 1, BUFSIZE, file))) + { + SHA256_Update (&sha256, buffer, bytesRead); + } + + SHA256_Final (hash, &sha256); + sha256_hash_string (hash, outputBuffer); + + fclose (file); + free (buffer); + return 0; +} diff --git a/src/common/checksum.h b/src/common/checksum.h new file mode 100644 index 00000000..1d5d62e3 --- /dev/null +++ b/src/common/checksum.h @@ -0,0 +1,6 @@ +#include <openssl/sha.h> +#define BUFSIZE 32768 + +void sha256_hash_string (unsigned char hash[SHA256_DIGEST_LENGTH], char outputBuffer[65]); +void sha256 (char *string, char outputBuffer[65]); +int sha256_file (char *path, char outputBuffer[65]); diff --git a/xchat-wdk.patch b/xchat-wdk.patch index 123ae4e9..8d6f1b16 100644 --- a/xchat-wdk.patch +++ b/xchat-wdk.patch @@ -968,7 +968,7 @@ diff -ruN --strip-trailing-cr xchat-wdk.orig/src/fe-gtk/fe-gtk.c xchat-wdk/src/f sess = find_dialog (serv_list->data, "(warnings)"); diff -ruN --strip-trailing-cr xchat-wdk.orig/src/fe-gtk/fe-gtk.h xchat-wdk/src/fe-gtk/fe-gtk.h --- xchat-wdk.orig/src/fe-gtk/fe-gtk.h 2010-05-30 08:31:29 +0200 -+++ xchat-wdk/src/fe-gtk/fe-gtk.h 2010-10-09 12:53:27 +0200 ++++ xchat-wdk/src/fe-gtk/fe-gtk.h 2010-10-17 00:26:18 +0200 @@ -4,7 +4,7 @@ /* If you're compiling this for Windows, your release is un-official * and not condoned. Please don't use the XChat name. Make up your |