From 21137e2f155845448ff3979f5b05b12b642c40a2 Mon Sep 17 00:00:00 2001 From: Matthew Dillon Date: Sun, 23 Oct 2016 23:38:34 -0700 Subject: [PATCH] libcrypt - Internalize additional symbols * Internalize additional symbols which conflict with libssl or libressl. This works around the apache https issue we had by avoiding a buggy error path that will be fixed upstream. This also fixes a bogus fetch failures we were having while testing https. * Make the *_Init() API for MD5, SHA*, etc in libmd compatible with libssl and libressl. * Note that libmd is inheritently incompatible with lib[re]ssl, so look for an upcoming fix for that (maybe we can remove it entirely). --- lib/libcrypt/Makefile | 7 ++++--- lib/libmd/md2.h | 2 +- lib/libmd/md2c.c | 3 ++- lib/libmd/md4.h | 2 +- lib/libmd/md4c.c | 3 ++- lib/libmd/md5c.c | 3 ++- lib/libmd/ripemd.h | 2 +- lib/libmd/rmd160c.c | 3 ++- lib/libmd/sha.h | 4 ++-- lib/libmd/sha0c.c | 3 ++- lib/libmd/sha1c.c | 3 ++- lib/libmd/sha256.h | 2 +- lib/libmd/sha256c.c | 3 ++- lib/libmd/sha512.h | 4 ++-- lib/libmd/sha512c.c | 10 ++++++---- sys/sys/md5.h | 2 +- 16 files changed, 33 insertions(+), 23 deletions(-) diff --git a/lib/libcrypt/Makefile b/lib/libcrypt/Makefile index ea514e20d9..584c4ade86 100644 --- a/lib/libcrypt/Makefile +++ b/lib/libcrypt/Makefile @@ -31,9 +31,10 @@ CFLAGS+= -I${.CURDIR} -DHAS_DES -DHAS_BLOWFISH SRCS+= auth.c property.c .for sym in MD5Init MD5Final MD5Update MD5Pad auth_getval \ property_find properties_read properties_free \ - SHA256_Init SHA256_Update SHA256_Final \ - SHA512_Init SHA512_Update SHA512_Final -CFLAGS+= -D${sym}=__${sym} + SHA256_Init SHA256_Update SHA256_Final SHA256_Transform \ + SHA384_Init SHA384_Update SHA384_Final SHA384_Transform \ + SHA512_Init SHA512_Update SHA512_Final SHA512_Transform +CFLAGS+= -D${sym}=_libcrypt_${sym} .endfor PRECIOUSLIB= yes diff --git a/lib/libmd/md2.h b/lib/libmd/md2.h index f75edf8c8e..b3a4605028 100644 --- a/lib/libmd/md2.h +++ b/lib/libmd/md2.h @@ -34,7 +34,7 @@ typedef struct MD2Context { #include __BEGIN_DECLS -void MD2Init(MD2_CTX *); +int MD2Init(MD2_CTX *); void MD2Update(MD2_CTX *, const void *, unsigned int); void MD2Pad(MD2_CTX *); void MD2Final(unsigned char [16], MD2_CTX *); diff --git a/lib/libmd/md2c.c b/lib/libmd/md2c.c index 61f94daf91..6a7fd08483 100644 --- a/lib/libmd/md2c.c +++ b/lib/libmd/md2c.c @@ -85,13 +85,14 @@ static unsigned char *PADDING[] = { /* MD2 initialization. Begins an MD2 operation, writing a new context. */ -void +int MD2Init (MD2_CTX *context) { context->count = 0; memset ((POINTER)context->state, 0, sizeof (context->state)); memset ((POINTER)context->checksum, 0, sizeof (context->checksum)); + return 1; } /* MD2 block update operation. Continues an MD2 message-digest diff --git a/lib/libmd/md4.h b/lib/libmd/md4.h index bb8fd716fd..04afb3dbef 100644 --- a/lib/libmd/md4.h +++ b/lib/libmd/md4.h @@ -36,7 +36,7 @@ typedef struct MD4Context { #include __BEGIN_DECLS -void MD4Init(MD4_CTX *); +int MD4Init(MD4_CTX *); void MD4Update(MD4_CTX *, const void *, unsigned int); void MD4Pad(MD4_CTX *); void MD4Final(unsigned char [16], MD4_CTX *); diff --git a/lib/libmd/md4c.c b/lib/libmd/md4c.c index 117e49db09..045675ee7e 100644 --- a/lib/libmd/md4c.c +++ b/lib/libmd/md4c.c @@ -89,7 +89,7 @@ static unsigned char PADDING[64] = { /* MD4 initialization. Begins an MD4 operation, writing a new context. */ -void +int MD4Init (MD4_CTX *context) { context->count[0] = context->count[1] = 0; @@ -100,6 +100,7 @@ MD4Init (MD4_CTX *context) context->state[1] = 0xefcdab89; context->state[2] = 0x98badcfe; context->state[3] = 0x10325476; + return 1; } /* MD4 block update operation. Continues an MD4 message-digest diff --git a/lib/libmd/md5c.c b/lib/libmd/md5c.c index 719388e747..1f47f12c31 100644 --- a/lib/libmd/md5c.c +++ b/lib/libmd/md5c.c @@ -126,7 +126,7 @@ static unsigned char PADDING[64] = { /* MD5 initialization. Begins an MD5 operation, writing a new context. */ -void +int MD5Init (MD5_CTX *context) { @@ -137,6 +137,7 @@ MD5Init (MD5_CTX *context) context->state[1] = 0xefcdab89; context->state[2] = 0x98badcfe; context->state[3] = 0x10325476; + return 1; } /* diff --git a/lib/libmd/ripemd.h b/lib/libmd/ripemd.h index 9d252b5835..623c6f5da1 100644 --- a/lib/libmd/ripemd.h +++ b/lib/libmd/ripemd.h @@ -82,7 +82,7 @@ typedef struct RIPEMD160state_st { } RIPEMD160_CTX; __BEGIN_DECLS -void RIPEMD160_Init(RIPEMD160_CTX *c); +int RIPEMD160_Init(RIPEMD160_CTX *c); void RIPEMD160_Update(RIPEMD160_CTX *c, const void *data, size_t len); void RIPEMD160_Final(unsigned char *md, RIPEMD160_CTX *c); diff --git a/lib/libmd/rmd160c.c b/lib/libmd/rmd160c.c index 98a1d9f78e..7fbe80cad7 100644 --- a/lib/libmd/rmd160c.c +++ b/lib/libmd/rmd160c.c @@ -85,7 +85,7 @@ void ripemd160_block_x86(RIPEMD160_CTX *c, const u_int32_t *p,int num); void ripemd160_block(RIPEMD160_CTX *c, const u_int32_t *p,int num); #endif -void +int RIPEMD160_Init(RIPEMD160_CTX *c) { c->A=RIPEMD160_A; @@ -96,6 +96,7 @@ RIPEMD160_Init(RIPEMD160_CTX *c) c->Nl=0; c->Nh=0; c->num=0; + return 1; } void diff --git a/lib/libmd/sha.h b/lib/libmd/sha.h index 8451b41ce2..490bfa72de 100644 --- a/lib/libmd/sha.h +++ b/lib/libmd/sha.h @@ -80,14 +80,14 @@ typedef struct SHAstate_st { #define SHA1_CTX SHA_CTX __BEGIN_DECLS -void SHA_Init(SHA_CTX *c); +int SHA_Init(SHA_CTX *c); void SHA_Update(SHA_CTX *c, const void *data, size_t len); void SHA_Final(unsigned char *md, SHA_CTX *c); char *SHA_End(SHA_CTX *, char *); char *SHA_File(const char *, char *); char *SHA_FileChunk(const char *, char *, off_t, off_t); char *SHA_Data(const void *, unsigned int, char *); -void SHA1_Init(SHA_CTX *c); +int SHA1_Init(SHA_CTX *c); void SHA1_Update(SHA_CTX *c, const void *data, size_t len); void SHA1_Final(unsigned char *md, SHA_CTX *c); char *SHA1_End(SHA_CTX *, char *); diff --git a/lib/libmd/sha0c.c b/lib/libmd/sha0c.c index 9dc72db32a..333b8c4487 100644 --- a/lib/libmd/sha0c.c +++ b/lib/libmd/sha0c.c @@ -99,7 +99,7 @@ char *SHA_version="SHA part of SSLeay 0.9.0b 11-Oct-1998"; #define M_p_c2nl_p p_c2nl_p #define M_nl2c nl2c -void +int SHA_Init(SHA_CTX *c) { c->h0=INIT_DATA_h0; @@ -110,6 +110,7 @@ SHA_Init(SHA_CTX *c) c->Nl=0; c->Nh=0; c->num=0; + return 1; } void diff --git a/lib/libmd/sha1c.c b/lib/libmd/sha1c.c index 5c93c46cba..f555649152 100644 --- a/lib/libmd/sha1c.c +++ b/lib/libmd/sha1c.c @@ -126,7 +126,7 @@ char *SHA1_version="SHA1 part of SSLeay 0.9.0b 11-Oct-1998"; # define M_nl2c nl2c #endif -void +int SHA1_Init(SHA_CTX *c) { c->h0=INIT_DATA_h0; @@ -137,6 +137,7 @@ SHA1_Init(SHA_CTX *c) c->Nl=0; c->Nh=0; c->num=0; + return 1; } void diff --git a/lib/libmd/sha256.h b/lib/libmd/sha256.h index 770e2b80cf..34d94ada32 100644 --- a/lib/libmd/sha256.h +++ b/lib/libmd/sha256.h @@ -39,7 +39,7 @@ typedef struct SHA256Context { } SHA256_CTX; __BEGIN_DECLS -void SHA256_Init(SHA256_CTX *); +int SHA256_Init(SHA256_CTX *); void SHA256_Update(SHA256_CTX *, const void *, size_t); void SHA256_Final(unsigned char [32], SHA256_CTX *); char *SHA256_End(SHA256_CTX *, char *); diff --git a/lib/libmd/sha256c.c b/lib/libmd/sha256c.c index f9e86dd2e4..f3665b5ec9 100644 --- a/lib/libmd/sha256c.c +++ b/lib/libmd/sha256c.c @@ -219,7 +219,7 @@ SHA256_Pad(SHA256_CTX * ctx) } /* SHA-256 initialization. Begins a SHA-256 operation. */ -void +int SHA256_Init(SHA256_CTX * ctx) { @@ -235,6 +235,7 @@ SHA256_Init(SHA256_CTX * ctx) ctx->state[5] = 0x9B05688C; ctx->state[6] = 0x1F83D9AB; ctx->state[7] = 0x5BE0CD19; + return 1; } /* Add bytes into the hash */ diff --git a/lib/libmd/sha512.h b/lib/libmd/sha512.h index dc8c68c323..1871a20115 100644 --- a/lib/libmd/sha512.h +++ b/lib/libmd/sha512.h @@ -47,10 +47,10 @@ typedef struct _SHA512_CTX { typedef SHA512_CTX SHA384_CTX; __BEGIN_DECLS -void SHA384_Init(SHA384_CTX *); +int SHA384_Init(SHA384_CTX *); void SHA384_Update(SHA384_CTX *, const u_int8_t *, size_t); void SHA384_Final(u_int8_t[SHA384_DIGEST_LENGTH], SHA384_CTX *); -void SHA512_Init(SHA512_CTX*); +int SHA512_Init(SHA512_CTX*); void SHA512_Update(SHA512_CTX*, const void *, size_t); void SHA512_Final(unsigned char [SHA512_DIGEST_LENGTH], SHA512_CTX *); char* SHA512_End(SHA512_CTX *, char *); diff --git a/lib/libmd/sha512c.c b/lib/libmd/sha512c.c index da8d616116..5eb50db9ca 100644 --- a/lib/libmd/sha512c.c +++ b/lib/libmd/sha512c.c @@ -170,13 +170,14 @@ static const sha2_word64 K512[80] = { 0x5fcb6fab3ad6faecULL, 0x6c44198c4a475817ULL }; /*** SHA-512: *********************************************************/ -void SHA512_Init(SHA512_CTX* context) { +int SHA512_Init(SHA512_CTX* context) { if (context == NULL) { - return; + return 0; } bcopy(sha512_initial_hash_value, context->state, SHA512_DIGEST_LENGTH); bzero(context->buffer, SHA512_BLOCK_LENGTH); context->bitcount[0] = context->bitcount[1] = 0; + return 1; } /* Unrolled SHA-512 round macros: */ @@ -422,13 +423,14 @@ char* SHA512_Data(const void *data, size_t len, char *digest) { /*** SHA-384: *********************************************************/ -void SHA384_Init(SHA384_CTX* context) { +int SHA384_Init(SHA384_CTX* context) { if (context == NULL) { - return; + return 0; } bcopy(sha384_initial_hash_value, context->state, SHA512_DIGEST_LENGTH); bzero(context->buffer, SHA384_BLOCK_LENGTH); context->bitcount[0] = context->bitcount[1] = 0; + return 1; } void SHA384_Update(SHA384_CTX* context, const sha2_byte* data, size_t len) { diff --git a/sys/sys/md5.h b/sys/sys/md5.h index ab1f6f9ed1..381c6f98a4 100644 --- a/sys/sys/md5.h +++ b/sys/sys/md5.h @@ -47,7 +47,7 @@ typedef struct MD5Context { #include __BEGIN_DECLS -void MD5Init (MD5_CTX *); +int MD5Init (MD5_CTX *); void MD5Update (MD5_CTX *, const void *, unsigned int); void MD5Pad (MD5_CTX *); void MD5Final (unsigned char [16], MD5_CTX *); -- 2.11.4.GIT