src/server/util/hashing.c

changeset 589
70ad04769cbf
parent 587
c94800af0490
child 594
36a46311e0f6
--- a/src/server/util/hashing.c	Wed May 28 21:15:49 2025 +0200
+++ b/src/server/util/hashing.c	Thu May 29 15:17:01 2025 +0200
@@ -30,7 +30,7 @@
 
 #include <stdlib.h>
 
-WS_SHA1_CTX* ws_sha256_create(void) {
+WS_SHA1_CTX* ws_sha1_create(void) {
     WS_SHA1_CTX *ctx = malloc(sizeof(WS_SHA1_CTX));
     if(!ctx) {
         return NULL;
@@ -42,7 +42,7 @@
     return ctx;
 }
 
-WS_SHA256_CTX* ws_sha1_create(void) {
+WS_SHA256_CTX* ws_sha256_create(void) {
     WS_SHA256_CTX *ctx = malloc(sizeof(WS_SHA256_CTX));
     if(!ctx) {
         return NULL;
@@ -54,6 +54,18 @@
     return ctx;
 }
 
+WS_SHA1_CTX* ws_sha512_create(void) {
+    WS_SHA512_CTX *ctx = malloc(sizeof(WS_SHA512_CTX));
+    if(!ctx) {
+        return NULL;
+    }
+    if(ws_sha512_init(ctx)) {
+        free(ctx);
+        return NULL;
+    }
+    return ctx;
+}
+
 #if OPENSSL_VERSION_NUMBER < 0x30000000L
 
 void ws_sha1_init(WS_SHA1_CTX *ctx) {
@@ -69,19 +81,32 @@
     SHA_Final(md, ctx);
 }
 
-void ws_sha256_init(WS_SHA1_CTX *ctx) {
+void ws_sha256_init(WS_SHA256_CTX *ctx) {
     SHA_Init(ctx);
     return 0;
 }
 
-void ws_sha256_update(WS_SHA1_CTX *ctx, const void *data, size_t length) {
+void ws_sha256_update(WS_SHA256_CTX *ctx, const void *data, size_t length) {
     SHA_Update(ctx, data, length);
 }
 
-void ws_sha256_final(char *md, WS_SHA1_CTX *ctx) {
+void ws_sha256_final(char *md, WS_SHA256_CTX *ctx) {
     SHA_Final(md, ctx);
 }
 
+void ws_sha512_init(WS_SHA512_CTX *ctx) {
+    SHA512_Init(ctx);
+    return 0;
+}
+
+void ws_sha256_update(WS_SHA512_CTX *ctx, const void *data, size_t length) {
+    SHA512_Update(ctx, data, length);
+}
+
+void ws_sha256_final(char *md, WS_SHA512_CTX *ctx) {
+    SHA512_Final(md, ctx);
+}
+
 #else
 
 int ws_sha1_init(WS_SHA256_CTX *ctx) {
@@ -120,4 +145,22 @@
     EVP_DigestFinal(*ctx, md, NULL);
 }
 
+int ws_sha512_init(WS_SHA512_CTX *ctx) {
+    EVP_MD_CTX *mdctx = EVP_MD_CTX_new();
+    if(!mdctx) {
+        return 1;
+    }
+    EVP_DigestInit_ex(mdctx, EVP_sha512(), NULL);
+    *ctx = mdctx;
+    return 0;
+}
+
+void ws_sha512_update(WS_SHA256_CTX *ctx, const char *data, size_t length) {
+    EVP_DigestUpdate(*ctx, data, length);
+}
+
+void ws_sha512_final(WS_SHA256_CTX *ctx, unsigned char *md) {
+    EVP_DigestFinal(*ctx, md, NULL);
+}
+
 #endif

mercurial