src/server/util/hashing.c

changeset 587
c94800af0490
parent 586
9861e8ceaf96
child 589
70ad04769cbf
--- a/src/server/util/hashing.c	Wed May 28 20:54:43 2025 +0200
+++ b/src/server/util/hashing.c	Wed May 28 21:09:45 2025 +0200
@@ -30,39 +30,93 @@
 
 #include <stdlib.h>
 
-WS_SHA_CTX* ws_sha256_create(void) {
-    WS_SHA_CTX *ctx = malloc(sizeof(WS_SHA_CTX));
-    ws_sha256_init(ctx);
+WS_SHA1_CTX* ws_sha256_create(void) {
+    WS_SHA1_CTX *ctx = malloc(sizeof(WS_SHA1_CTX));
+    if(!ctx) {
+        return NULL;
+    }
+    if(ws_sha1_init(ctx)) {
+        free(ctx);
+        return NULL;
+    }
+    return ctx;
+}
+
+WS_SHA256_CTX* ws_sha1_create(void) {
+    WS_SHA256_CTX *ctx = malloc(sizeof(WS_SHA256_CTX));
+    if(!ctx) {
+        return NULL;
+    }
+    if(ws_sha256_init(ctx)) {
+        free(ctx);
+        return NULL;
+    }
     return ctx;
 }
 
 #if OPENSSL_VERSION_NUMBER < 0x30000000L
 
-void ws_sha256_init(WS_SHA_CTX *ctx) {
+void ws_sha1_init(WS_SHA1_CTX *ctx) {
     SHA256_Init(ctx);
+    return 0;
 }
 
-void ws_sha256_update(WS_SHA_CTX *ctx, const void *data, size_t length) {
+void ws_sha1_update(WS_SHA1_CTX *ctx, const void *data, size_t length) {
     SHA256_Update(ctx, data, length);
 }
 
-void ws_sha256_final(char *md, WS_SHA_CTX *ctx) {
-    SHA256_Final(md, ctx);
+void ws_sha1_final(char *md, WS_SHA1_CTX *ctx) {
+    SHA_Final(md, ctx);
+}
+
+void ws_sha256_init(WS_SHA1_CTX *ctx) {
+    SHA_Init(ctx);
+    return 0;
+}
+
+void ws_sha256_update(WS_SHA1_CTX *ctx, const void *data, size_t length) {
+    SHA_Update(ctx, data, length);
+}
+
+void ws_sha256_final(char *md, WS_SHA1_CTX *ctx) {
+    SHA_Final(md, ctx);
 }
 
 #else
 
-void ws_sha256_init(WS_SHA_CTX *ctx) {
+int ws_sha1_init(WS_SHA256_CTX *ctx) {
     EVP_MD_CTX *mdctx = EVP_MD_CTX_new();
-    EVP_DigestInit_ex(mdctx, EVP_sha256(), NULL);
+    if(!mdctx) {
+        return 1;
+    }
+    EVP_DigestInit_ex(mdctx, EVP_sha1(), NULL);
     *ctx = mdctx;
+    return 0;
 }
 
-void ws_sha256_update(WS_SHA_CTX *ctx, const char *data, size_t length) {
+void ws_sha1_update(WS_SHA256_CTX *ctx, const char *data, size_t length) {
     EVP_DigestUpdate(*ctx, data, length);
 }
 
-void ws_sha256_final(WS_SHA_CTX *ctx, unsigned char *md) {
+void ws_sha1_final(WS_SHA256_CTX *ctx, unsigned char *md) {
+    EVP_DigestFinal(*ctx, md, NULL);
+}
+
+int ws_sha256_init(WS_SHA256_CTX *ctx) {
+    EVP_MD_CTX *mdctx = EVP_MD_CTX_new();
+    if(!mdctx) {
+        return 1;
+    }
+    EVP_DigestInit_ex(mdctx, EVP_sha256(), NULL);
+    *ctx = mdctx;
+    return 0;
+}
+
+void ws_sha256_update(WS_SHA256_CTX *ctx, const char *data, size_t length) {
+    EVP_DigestUpdate(*ctx, data, length);
+}
+
+void ws_sha256_final(WS_SHA256_CTX *ctx, unsigned char *md) {
     EVP_DigestFinal(*ctx, md, NULL);
 }
 

mercurial