aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/curl/lib/md5.c
diff options
context:
space:
mode:
authorNikita Slyusarev <nslus@yandex-team.com>2022-02-10 16:46:52 +0300
committerDaniil Cherednik <dcherednik@yandex-team.ru>2022-02-10 16:46:52 +0300
commitcd77cecfc03a3eaf87816af28a33067c4f0cdb59 (patch)
tree1308e0bae862d52e0020d881fe758080437fe389 /contrib/libs/curl/lib/md5.c
parentcdae02d225fb5b3afbb28990e79a7ac6c9125327 (diff)
downloadydb-cd77cecfc03a3eaf87816af28a33067c4f0cdb59.tar.gz
Restoring authorship annotation for Nikita Slyusarev <nslus@yandex-team.com>. Commit 1 of 2.
Diffstat (limited to 'contrib/libs/curl/lib/md5.c')
-rw-r--r--contrib/libs/curl/lib/md5.c464
1 files changed, 232 insertions, 232 deletions
diff --git a/contrib/libs/curl/lib/md5.c b/contrib/libs/curl/lib/md5.c
index ff0b369f02..7165f04388 100644
--- a/contrib/libs/curl/lib/md5.c
+++ b/contrib/libs/curl/lib/md5.c
@@ -1,35 +1,35 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
* Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
* are also available at https://curl.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifndef CURL_DISABLE_CRYPTO_AUTH
-
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ***************************************************************************/
+
+#include "curl_setup.h"
+
+#ifndef CURL_DISABLE_CRYPTO_AUTH
+
#include <curl/curl.h>
-#include "curl_md5.h"
-#include "curl_hmac.h"
-#include "warnless.h"
-
+#include "curl_md5.h"
+#include "curl_hmac.h"
+#include "warnless.h"
+
#ifdef USE_MBEDTLS
#error #include <mbedtls/version.h>
@@ -38,66 +38,66 @@
#endif
#endif /* USE_MBEDTLS */
-#if defined(USE_GNUTLS_NETTLE)
-
-#include <nettle/md5.h>
+#if defined(USE_GNUTLS_NETTLE)
+
+#include <nettle/md5.h>
#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-typedef struct md5_ctx MD5_CTX;
-
+/* The last #include file should be: */
+#include "memdebug.h"
+
+typedef struct md5_ctx MD5_CTX;
+
static void MD5_Init(MD5_CTX *ctx)
-{
- md5_init(ctx);
-}
-
+{
+ md5_init(ctx);
+}
+
static void MD5_Update(MD5_CTX *ctx,
const unsigned char *input,
- unsigned int inputLen)
-{
- md5_update(ctx, inputLen, input);
-}
-
+ unsigned int inputLen)
+{
+ md5_update(ctx, inputLen, input);
+}
+
static void MD5_Final(unsigned char *digest, MD5_CTX *ctx)
-{
- md5_digest(ctx, 16, digest);
-}
-
-#elif defined(USE_GNUTLS)
-
-#include <gcrypt.h>
+{
+ md5_digest(ctx, 16, digest);
+}
+
+#elif defined(USE_GNUTLS)
+
+#include <gcrypt.h>
#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-typedef gcry_md_hd_t MD5_CTX;
-
+/* The last #include file should be: */
+#include "memdebug.h"
+
+typedef gcry_md_hd_t MD5_CTX;
+
static void MD5_Init(MD5_CTX *ctx)
-{
- gcry_md_open(ctx, GCRY_MD_MD5, 0);
-}
-
+{
+ gcry_md_open(ctx, GCRY_MD_MD5, 0);
+}
+
static void MD5_Update(MD5_CTX *ctx,
const unsigned char *input,
- unsigned int inputLen)
-{
- gcry_md_write(*ctx, input, inputLen);
-}
-
+ unsigned int inputLen)
+{
+ gcry_md_write(*ctx, input, inputLen);
+}
+
static void MD5_Final(unsigned char *digest, MD5_CTX *ctx)
-{
- memcpy(digest, gcry_md_read(*ctx, 0), 16);
- gcry_md_close(*ctx);
-}
-
+{
+ memcpy(digest, gcry_md_read(*ctx, 0), 16);
+ gcry_md_close(*ctx);
+}
+
#elif defined(USE_OPENSSL) && !defined(USE_AMISSL)
-/* When OpenSSL is available we use the MD5-function from OpenSSL */
+/* When OpenSSL is available we use the MD5-function from OpenSSL */
#include <openssl/md5.h>
#include "curl_memory.h"
/* The last #include file should be: */
#include "memdebug.h"
-
+
#elif defined(USE_MBEDTLS)
#error #include <mbedtls/md5.h>
@@ -138,85 +138,85 @@ static void MD5_Final(unsigned char *digest, MD5_CTX *ctx)
#endif
}
-#elif (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && \
+#elif (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && \
(__MAC_OS_X_VERSION_MAX_ALLOWED >= 1040) && \
defined(__MAC_OS_X_VERSION_MIN_ALLOWED) && \
(__MAC_OS_X_VERSION_MIN_ALLOWED < 101500)) || \
- (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && \
- (__IPHONE_OS_VERSION_MAX_ALLOWED >= 20000))
-
-/* For Apple operating systems: CommonCrypto has the functions we need.
- These functions are available on Tiger and later, as well as iOS 2.0
- and later. If you're building for an older cat, well, sorry.
-
- Declaring the functions as static like this seems to be a bit more
- reliable than defining COMMON_DIGEST_FOR_OPENSSL on older cats. */
-# include <CommonCrypto/CommonDigest.h>
-# define MD5_CTX CC_MD5_CTX
+ (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && \
+ (__IPHONE_OS_VERSION_MAX_ALLOWED >= 20000))
+
+/* For Apple operating systems: CommonCrypto has the functions we need.
+ These functions are available on Tiger and later, as well as iOS 2.0
+ and later. If you're building for an older cat, well, sorry.
+
+ Declaring the functions as static like this seems to be a bit more
+ reliable than defining COMMON_DIGEST_FOR_OPENSSL on older cats. */
+# include <CommonCrypto/CommonDigest.h>
+# define MD5_CTX CC_MD5_CTX
#include "curl_memory.h"
/* The last #include file should be: */
#include "memdebug.h"
-
-static void MD5_Init(MD5_CTX *ctx)
-{
- CC_MD5_Init(ctx);
-}
-
-static void MD5_Update(MD5_CTX *ctx,
- const unsigned char *input,
- unsigned int inputLen)
-{
- CC_MD5_Update(ctx, input, inputLen);
-}
-
+
+static void MD5_Init(MD5_CTX *ctx)
+{
+ CC_MD5_Init(ctx);
+}
+
+static void MD5_Update(MD5_CTX *ctx,
+ const unsigned char *input,
+ unsigned int inputLen)
+{
+ CC_MD5_Update(ctx, input, inputLen);
+}
+
static void MD5_Final(unsigned char *digest, MD5_CTX *ctx)
-{
- CC_MD5_Final(digest, ctx);
-}
-
+{
+ CC_MD5_Final(digest, ctx);
+}
+
#elif defined(USE_WIN32_CRYPTO)
-
-#include <wincrypt.h>
+
+#include <wincrypt.h>
#include "curl_memory.h"
/* The last #include file should be: */
#include "memdebug.h"
-
+
struct md5_ctx {
- HCRYPTPROV hCryptProv;
- HCRYPTHASH hHash;
+ HCRYPTPROV hCryptProv;
+ HCRYPTHASH hHash;
};
typedef struct md5_ctx MD5_CTX;
-
-static void MD5_Init(MD5_CTX *ctx)
-{
+
+static void MD5_Init(MD5_CTX *ctx)
+{
if(CryptAcquireContext(&ctx->hCryptProv, NULL, NULL, PROV_RSA_FULL,
CRYPT_VERIFYCONTEXT | CRYPT_SILENT)) {
- CryptCreateHash(ctx->hCryptProv, CALG_MD5, 0, 0, &ctx->hHash);
- }
-}
-
-static void MD5_Update(MD5_CTX *ctx,
- const unsigned char *input,
- unsigned int inputLen)
-{
- CryptHashData(ctx->hHash, (unsigned char *)input, inputLen, 0);
-}
-
+ CryptCreateHash(ctx->hCryptProv, CALG_MD5, 0, 0, &ctx->hHash);
+ }
+}
+
+static void MD5_Update(MD5_CTX *ctx,
+ const unsigned char *input,
+ unsigned int inputLen)
+{
+ CryptHashData(ctx->hHash, (unsigned char *)input, inputLen, 0);
+}
+
static void MD5_Final(unsigned char *digest, MD5_CTX *ctx)
-{
+{
unsigned long length = 0;
- CryptGetHashParam(ctx->hHash, HP_HASHVAL, NULL, &length, 0);
- if(length == 16)
- CryptGetHashParam(ctx->hHash, HP_HASHVAL, digest, &length, 0);
- if(ctx->hHash)
- CryptDestroyHash(ctx->hHash);
- if(ctx->hCryptProv)
- CryptReleaseContext(ctx->hCryptProv, 0);
-}
-
-#else
-
-/* When no other crypto library is available we use this code segment */
+ CryptGetHashParam(ctx->hHash, HP_HASHVAL, NULL, &length, 0);
+ if(length == 16)
+ CryptGetHashParam(ctx->hHash, HP_HASHVAL, digest, &length, 0);
+ if(ctx->hHash)
+ CryptDestroyHash(ctx->hHash);
+ if(ctx->hCryptProv)
+ CryptReleaseContext(ctx->hCryptProv, 0);
+}
+
+#else
+
+/* When no other crypto library is available we use this code segment */
/*
* This is an OpenSSL-compatible implementation of the RSA Data Security, Inc.
@@ -253,17 +253,17 @@ static void MD5_Final(unsigned char *digest, MD5_CTX *ctx)
* It is meant to be fast, but not as fast as possible. Some known
* optimizations are not included to reduce source code size and avoid
* compile-time configuration.
- */
-
+ */
+
#include <string.h>
-
+
/* The last #include files should be: */
#include "curl_memory.h"
#include "memdebug.h"
-
+
/* Any 32-bit or wider unsigned integer data type will do */
typedef unsigned int MD5_u32plus;
-
+
struct md5_ctx {
MD5_u32plus lo, hi;
MD5_u32plus a, b, c, d;
@@ -271,32 +271,32 @@ struct md5_ctx {
MD5_u32plus block[16];
};
typedef struct md5_ctx MD5_CTX;
-
+
static void MD5_Init(MD5_CTX *ctx);
static void MD5_Update(MD5_CTX *ctx, const void *data, unsigned long size);
static void MD5_Final(unsigned char *result, MD5_CTX *ctx);
-
+
/*
* The basic MD5 functions.
*
* F and G are optimized compared to their RFC 1321 definitions for
* architectures that lack an AND-NOT instruction, just like in Colin Plumb's
* implementation.
- */
+ */
#define F(x, y, z) ((z) ^ ((x) & ((y) ^ (z))))
#define G(x, y, z) ((y) ^ ((z) & ((x) ^ (y))))
#define H(x, y, z) (((x) ^ (y)) ^ (z))
#define H2(x, y, z) ((x) ^ ((y) ^ (z)))
#define I(x, y, z) ((y) ^ ((x) | ~(z)))
-
+
/*
* The MD5 transformation for all four rounds.
- */
+ */
#define STEP(f, a, b, c, d, x, t, s) \
(a) += f((b), (c), (d)) + (x) + (t); \
(a) = (((a) << (s)) | (((a) & 0xffffffff) >> (32 - (s)))); \
(a) += (b);
-
+
/*
* SET reads 4 input bytes in little-endian byte order and stores them
* in a properly aligned word in host byte order.
@@ -304,7 +304,7 @@ static void MD5_Final(unsigned char *result, MD5_CTX *ctx);
* The check for little-endian architectures that tolerate unaligned
* memory accesses is just an optimization. Nothing will break if it
* doesn't work.
- */
+ */
#if defined(__i386__) || defined(__x86_64__) || defined(__vax__)
#define SET(n) \
(*(MD5_u32plus *)(void *)&ptr[(n) * 4])
@@ -320,23 +320,23 @@ static void MD5_Final(unsigned char *result, MD5_CTX *ctx);
#define GET(n) \
(ctx->block[(n)])
#endif
-
+
/*
* This processes one or more 64-byte data blocks, but does NOT update
* the bit counters. There are no alignment requirements.
- */
+ */
static const void *body(MD5_CTX *ctx, const void *data, unsigned long size)
-{
+{
const unsigned char *ptr;
MD5_u32plus a, b, c, d;
-
+
ptr = (const unsigned char *)data;
-
+
a = ctx->a;
b = ctx->b;
c = ctx->c;
d = ctx->d;
-
+
do {
MD5_u32plus saved_a, saved_b, saved_c, saved_d;
@@ -344,7 +344,7 @@ static const void *body(MD5_CTX *ctx, const void *data, unsigned long size)
saved_b = b;
saved_c = c;
saved_d = d;
-
+
/* Round 1 */
STEP(F, a, b, c, d, SET(0), 0xd76aa478, 7)
STEP(F, d, a, b, c, SET(1), 0xe8c7b756, 12)
@@ -362,7 +362,7 @@ static const void *body(MD5_CTX *ctx, const void *data, unsigned long size)
STEP(F, d, a, b, c, SET(13), 0xfd987193, 12)
STEP(F, c, d, a, b, SET(14), 0xa679438e, 17)
STEP(F, b, c, d, a, SET(15), 0x49b40821, 22)
-
+
/* Round 2 */
STEP(G, a, b, c, d, GET(1), 0xf61e2562, 5)
STEP(G, d, a, b, c, GET(6), 0xc040b340, 9)
@@ -380,7 +380,7 @@ static const void *body(MD5_CTX *ctx, const void *data, unsigned long size)
STEP(G, d, a, b, c, GET(2), 0xfcefa3f8, 9)
STEP(G, c, d, a, b, GET(7), 0x676f02d9, 14)
STEP(G, b, c, d, a, GET(12), 0x8d2a4c8a, 20)
-
+
/* Round 3 */
STEP(H, a, b, c, d, GET(5), 0xfffa3942, 4)
STEP(H2, d, a, b, c, GET(8), 0x8771f681, 11)
@@ -398,7 +398,7 @@ static const void *body(MD5_CTX *ctx, const void *data, unsigned long size)
STEP(H2, d, a, b, c, GET(12), 0xe6db99e5, 11)
STEP(H, c, d, a, b, GET(15), 0x1fa27cf8, 16)
STEP(H2, b, c, d, a, GET(2), 0xc4ac5665, 23)
-
+
/* Round 4 */
STEP(I, a, b, c, d, GET(0), 0xf4292244, 6)
STEP(I, d, a, b, c, GET(7), 0x432aff97, 10)
@@ -416,73 +416,73 @@ static const void *body(MD5_CTX *ctx, const void *data, unsigned long size)
STEP(I, d, a, b, c, GET(11), 0xbd3af235, 10)
STEP(I, c, d, a, b, GET(2), 0x2ad7d2bb, 15)
STEP(I, b, c, d, a, GET(9), 0xeb86d391, 21)
-
+
a += saved_a;
b += saved_b;
c += saved_c;
d += saved_d;
-
+
ptr += 64;
} while(size -= 64);
-
+
ctx->a = a;
ctx->b = b;
ctx->c = c;
ctx->d = d;
-
+
return ptr;
}
-
+
static void MD5_Init(MD5_CTX *ctx)
{
ctx->a = 0x67452301;
ctx->b = 0xefcdab89;
ctx->c = 0x98badcfe;
ctx->d = 0x10325476;
-
+
ctx->lo = 0;
ctx->hi = 0;
-}
-
+}
+
static void MD5_Update(MD5_CTX *ctx, const void *data, unsigned long size)
-{
+{
MD5_u32plus saved_lo;
unsigned long used;
-
+
saved_lo = ctx->lo;
ctx->lo = (saved_lo + size) & 0x1fffffff;
if(ctx->lo < saved_lo)
ctx->hi++;
ctx->hi += (MD5_u32plus)size >> 29;
-
+
used = saved_lo & 0x3f;
-
+
if(used) {
unsigned long available = 64 - used;
-
+
if(size < available) {
memcpy(&ctx->buffer[used], data, size);
return;
}
-
+
memcpy(&ctx->buffer[used], data, available);
data = (const unsigned char *)data + available;
size -= available;
body(ctx, ctx->buffer, 64);
}
-
+
if(size >= 64) {
data = body(ctx, data, size & ~(unsigned long)0x3f);
size &= 0x3f;
}
-
+
memcpy(ctx->buffer, data, size);
-}
-
+}
+
static void MD5_Final(unsigned char *result, MD5_CTX *ctx)
-{
+{
unsigned long used, available;
-
+
used = ctx->lo & 0x3f;
ctx->buffer[used++] = 0x80;
@@ -494,10 +494,10 @@ static void MD5_Final(unsigned char *result, MD5_CTX *ctx)
body(ctx, ctx->buffer, 64);
used = 0;
available = 64;
- }
-
+ }
+
memset(&ctx->buffer[used], 0, available - 8);
-
+
ctx->lo <<= 3;
ctx->buffer[56] = curlx_ultouc((ctx->lo)&0xff);
ctx->buffer[57] = curlx_ultouc((ctx->lo >> 8)&0xff);
@@ -528,12 +528,12 @@ static void MD5_Final(unsigned char *result, MD5_CTX *ctx)
result[15] = curlx_ultouc(ctx->d >> 24);
memset(ctx, 0, sizeof(*ctx));
-}
-
-#endif /* CRYPTO LIBS */
-
+}
+
+#endif /* CRYPTO LIBS */
+
const struct HMAC_params Curl_HMAC_MD5[] = {
- {
+ {
/* Hash initialization function. */
CURLX_FUNCTION_CAST(HMAC_hinit_func, MD5_Init),
/* Hash update function. */
@@ -546,11 +546,11 @@ const struct HMAC_params Curl_HMAC_MD5[] = {
64,
/* Result size. */
16
- }
-};
-
+ }
+};
+
const struct MD5_params Curl_DIGEST_MD5[] = {
- {
+ {
/* Digest initialization function */
CURLX_FUNCTION_CAST(Curl_MD5_init_func, MD5_Init),
/* Digest update function */
@@ -561,63 +561,63 @@ const struct MD5_params Curl_DIGEST_MD5[] = {
sizeof(MD5_CTX),
/* Result size */
16
- }
-};
-
+ }
+};
+
/*
* @unittest: 1601
*/
void Curl_md5it(unsigned char *outbuffer, const unsigned char *input,
const size_t len)
-{
- MD5_CTX ctx;
+{
+ MD5_CTX ctx;
- MD5_Init(&ctx);
+ MD5_Init(&ctx);
MD5_Update(&ctx, input, curlx_uztoui(len));
- MD5_Final(outbuffer, &ctx);
-}
-
+ MD5_Final(outbuffer, &ctx);
+}
+
struct MD5_context *Curl_MD5_init(const struct MD5_params *md5params)
-{
+{
struct MD5_context *ctxt;
-
- /* Create MD5 context */
+
+ /* Create MD5 context */
ctxt = malloc(sizeof(*ctxt));
-
- if(!ctxt)
- return ctxt;
-
- ctxt->md5_hashctx = malloc(md5params->md5_ctxtsize);
-
- if(!ctxt->md5_hashctx) {
- free(ctxt);
- return NULL;
- }
-
- ctxt->md5_hash = md5params;
-
- (*md5params->md5_init_func)(ctxt->md5_hashctx);
-
- return ctxt;
-}
-
+
+ if(!ctxt)
+ return ctxt;
+
+ ctxt->md5_hashctx = malloc(md5params->md5_ctxtsize);
+
+ if(!ctxt->md5_hashctx) {
+ free(ctxt);
+ return NULL;
+ }
+
+ ctxt->md5_hash = md5params;
+
+ (*md5params->md5_init_func)(ctxt->md5_hashctx);
+
+ return ctxt;
+}
+
CURLcode Curl_MD5_update(struct MD5_context *context,
const unsigned char *data,
unsigned int len)
-{
- (*context->md5_hash->md5_update_func)(context->md5_hashctx, data, len);
-
+{
+ (*context->md5_hash->md5_update_func)(context->md5_hashctx, data, len);
+
return CURLE_OK;
-}
-
+}
+
CURLcode Curl_MD5_final(struct MD5_context *context, unsigned char *result)
-{
- (*context->md5_hash->md5_final_func)(result, context->md5_hashctx);
-
- free(context->md5_hashctx);
- free(context);
-
+{
+ (*context->md5_hash->md5_final_func)(result, context->md5_hashctx);
+
+ free(context->md5_hashctx);
+ free(context);
+
return CURLE_OK;
-}
-
-#endif /* CURL_DISABLE_CRYPTO_AUTH */
+}
+
+#endif /* CURL_DISABLE_CRYPTO_AUTH */