summaryrefslogtreecommitdiffstats
path: root/Utilities/cmcurl/lib/md4.c
diff options
context:
space:
mode:
Diffstat (limited to 'Utilities/cmcurl/lib/md4.c')
-rw-r--r--Utilities/cmcurl/lib/md4.c42
1 files changed, 30 insertions, 12 deletions
diff --git a/Utilities/cmcurl/lib/md4.c b/Utilities/cmcurl/lib/md4.c
index 9ff093b..30ab62e 100644
--- a/Utilities/cmcurl/lib/md4.c
+++ b/Utilities/cmcurl/lib/md4.c
@@ -42,6 +42,7 @@
#ifdef USE_WOLFSSL
#include <wolfssl/options.h>
+#define VOID_MD4_INIT
#ifdef NO_MD4
#define WOLFSSL_NO_MD4
#endif
@@ -92,9 +93,10 @@
typedef struct md4_ctx MD4_CTX;
-static void MD4_Init(MD4_CTX *ctx)
+static int MD4_Init(MD4_CTX *ctx)
{
md4_init(ctx);
+ return 1;
}
static void MD4_Update(MD4_CTX *ctx, const void *data, unsigned long size)
@@ -114,9 +116,9 @@ static void MD4_Final(unsigned char *result, MD4_CTX *ctx)
#elif defined(AN_APPLE_OS)
typedef CC_MD4_CTX MD4_CTX;
-static void MD4_Init(MD4_CTX *ctx)
+static int MD4_Init(MD4_CTX *ctx)
{
- (void)CC_MD4_Init(ctx);
+ return CC_MD4_Init(ctx);
}
static void MD4_Update(MD4_CTX *ctx, const void *data, unsigned long size)
@@ -137,15 +139,22 @@ struct md4_ctx {
};
typedef struct md4_ctx MD4_CTX;
-static void MD4_Init(MD4_CTX *ctx)
+static int MD4_Init(MD4_CTX *ctx)
{
ctx->hCryptProv = 0;
ctx->hHash = 0;
- if(CryptAcquireContext(&ctx->hCryptProv, NULL, NULL, PROV_RSA_FULL,
- CRYPT_VERIFYCONTEXT | CRYPT_SILENT)) {
- CryptCreateHash(ctx->hCryptProv, CALG_MD4, 0, 0, &ctx->hHash);
+ if(!CryptAcquireContext(&ctx->hCryptProv, NULL, NULL, PROV_RSA_FULL,
+ CRYPT_VERIFYCONTEXT | CRYPT_SILENT))
+ return 0;
+
+ if(!CryptCreateHash(ctx->hCryptProv, CALG_MD4, 0, 0, &ctx->hHash)) {
+ CryptReleaseContext(ctx->hCryptProv, 0);
+ ctx->hCryptProv = 0;
+ return 0;
}
+
+ return 1;
}
static void MD4_Update(MD4_CTX *ctx, const void *data, unsigned long size)
@@ -176,10 +185,11 @@ struct md4_ctx {
};
typedef struct md4_ctx MD4_CTX;
-static void MD4_Init(MD4_CTX *ctx)
+static int MD4_Init(MD4_CTX *ctx)
{
ctx->data = NULL;
ctx->size = 0;
+ return 1;
}
static void MD4_Update(MD4_CTX *ctx, const void *data, unsigned long size)
@@ -258,7 +268,7 @@ struct md4_ctx {
};
typedef struct md4_ctx MD4_CTX;
-static void MD4_Init(MD4_CTX *ctx);
+static int MD4_Init(MD4_CTX *ctx);
static void MD4_Update(MD4_CTX *ctx, const void *data, unsigned long size);
static void MD4_Final(unsigned char *result, MD4_CTX *ctx);
@@ -397,7 +407,7 @@ static const void *body(MD4_CTX *ctx, const void *data, unsigned long size)
return ptr;
}
-static void MD4_Init(MD4_CTX *ctx)
+static int MD4_Init(MD4_CTX *ctx)
{
ctx->a = 0x67452301;
ctx->b = 0xefcdab89;
@@ -406,6 +416,7 @@ static void MD4_Init(MD4_CTX *ctx)
ctx->lo = 0;
ctx->hi = 0;
+ return 1;
}
static void MD4_Update(MD4_CTX *ctx, const void *data, unsigned long size)
@@ -496,14 +507,21 @@ static void MD4_Final(unsigned char *result, MD4_CTX *ctx)
#endif /* CRYPTO LIBS */
-void Curl_md4it(unsigned char *output, const unsigned char *input,
- const size_t len)
+CURLcode Curl_md4it(unsigned char *output, const unsigned char *input,
+ const size_t len)
{
MD4_CTX ctx;
+#ifdef VOID_MD4_INIT
MD4_Init(&ctx);
+#else
+ if(!MD4_Init(&ctx))
+ return CURLE_FAILED_INIT;
+#endif
+
MD4_Update(&ctx, input, curlx_uztoui(len));
MD4_Final(output, &ctx);
+ return CURLE_OK;
}
#endif /* USE_CURL_NTLM_CORE */