Changeset: 327250b4d795 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/327250b4d795
Modified Files:
        gdk/gdk_batop.c
        gdk/gdk_join.c
        monetdb5/modules/mal/clients.c
        sql/server/rel_schema.c
Branch: default
Log Message:

Merge with Jul2021 branch.


diffs (truncated from 1971 to 300 lines):

diff --git a/clients/mapilib/mapi.c b/clients/mapilib/mapi.c
--- a/clients/mapilib/mapi.c
+++ b/clients/mapilib/mapi.c
@@ -2648,9 +2648,7 @@ mapi_reconnect(Mapi mid)
 #ifdef HAVE_RIPEMD160_UPDATE
                "RIPEMD160",
 #endif
-#ifdef HAVE_SHA512_UPDATE
                "SHA512",
-#endif
 #ifdef HAVE_SHA384_UPDATE
                "SHA384",
 #endif
@@ -2709,12 +2707,10 @@ mapi_reconnect(Mapi mid)
                                                        strlen(mid->password));
                } else
 #endif
-#ifdef HAVE_SHA512_UPDATE
                if (strcmp(serverhash, "SHA512") == 0) {
                        pwdhash = mcrypt_SHA512Sum(mid->password,
                                                        strlen(mid->password));
                } else
-#endif
 #ifdef HAVE_SHA384_UPDATE
                if (strcmp(serverhash, "SHA384") == 0) {
                        pwdhash = mcrypt_SHA384Sum(mid->password,
@@ -2747,7 +2743,6 @@ mapi_reconnect(Mapi mid)
                        return mapi_setError(mid, buf, __func__, MERROR);
                }
 
-#if defined(HAVE_RIPEMD160_UPDATE) || defined(HAVE_SHA512_UPDATE) || 
defined(HAVE_SHA384_UPDATE) || defined(HAVE_SHA256_UPDATE) || 
defined(HAVE_SHA224_UPDATE) || defined(HAVE_SHA1_UPDATE)
                if (pwdhash == NULL) {
                        snprintf(buf, sizeof(buf), "allocation failure or 
unknown hash '%.100s'",
                                        serverhash);
@@ -2759,7 +2754,6 @@ mapi_reconnect(Mapi mid)
                mid->password = malloc(1 + strlen(pwdhash) + 1);
                sprintf(mid->password, "\1%s", pwdhash);
                free(pwdhash);
-#endif
        }
 
 
diff --git a/common/utils/mcrypt.c b/common/utils/mcrypt.c
--- a/common/utils/mcrypt.c
+++ b/common/utils/mcrypt.c
@@ -60,9 +60,7 @@ mcrypt_getHashAlgorithms(void)
 #ifdef HAVE_RIPEMD160_UPDATE
                ",RIPEMD160"
 #endif
-#ifdef HAVE_SHA512_UPDATE
                ",SHA512"
-#endif
 #ifdef HAVE_SHA384_UPDATE
                ",SHA384"
 #endif
@@ -306,6 +304,44 @@ mcrypt_SHA512Sum(const char *string, siz
 
        return ret;
 }
+#else
+/* return private copy of SHA512 hash functions */
+#include "sha.h"
+char *
+mcrypt_SHA512Sum(const char *string, size_t len)
+{
+       static_assert(SHA512HashSize == 64, "SHA512HashSize should be 64");
+       char *ret = malloc(SHA512HashSize * 2 + 1);
+       if (ret) {
+               SHA512Context sc;
+               uint8_t md[SHA512HashSize];
+               SHA512Reset(&sc);
+               SHA512Input(&sc, (const uint8_t *) string, (unsigned int) len);
+               SHA512Result(&sc, md);
+               snprintf(ret, SHA512HashSize * 2 + 1,
+                                "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x"
+                                "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x"
+                                "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x"
+                                "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x"
+                                "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x"
+                                "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x"
+                                "%02x%02x%02x%02x",
+                                md[0], md[1], md[2], md[3], md[4],
+                                md[5], md[6], md[7], md[8], md[9],
+                                md[10], md[11], md[12], md[13], md[14],
+                                md[15], md[16], md[17], md[18], md[19],
+                                md[20], md[21], md[22], md[23], md[24],
+                                md[25], md[26], md[27], md[28], md[29],
+                                md[30], md[31], md[32], md[33], md[34],
+                                md[35], md[36], md[37], md[38], md[39],
+                                md[40], md[41], md[42], md[43], md[44],
+                                md[45], md[46], md[47], md[48], md[49],
+                                md[50], md[51], md[52], md[53], md[54],
+                                md[55], md[56], md[57], md[58], md[59],
+                                md[60], md[61], md[62], md[63]);
+       }
+       return ret;
+}
 #endif
 
 #ifdef HAVE_RIPEMD160_UPDATE
@@ -371,7 +407,6 @@ mcrypt_hashPassword(
                const char *password,
                const char *challenge)
 {
-#if (defined(HAVE_OPENSSL) || defined(HAVE_COMMONCRYPTO))
        unsigned char md[64];   /* should be SHA512_DIGEST_LENGTH */
        char ret[sizeof(md) * 2 + 1];
        int len;
@@ -391,18 +426,24 @@ mcrypt_hashPassword(
                len = 40;
        } else
 #endif
+       if (strcmp(algo, "SHA512") == 0) {
 #ifdef HAVE_SHA512_UPDATE
-       if (strcmp(algo, "SHA512") == 0) {
                SHA512_CTX c;
 
                SHA512_Init(&c);
                SHA512_Update(&c, password, strlen(password));
                SHA512_Update(&c, challenge, strlen(challenge));
                SHA512_Final(md, &c);
+#else
+               SHA512Context sc;
+               SHA512Reset(&sc);
+               SHA512Input(&sc, (const uint8_t *) password, (unsigned int) 
strlen(password));
+               SHA512Input(&sc, (const uint8_t *) challenge, 
strlen(challenge));
+               SHA512Result(&sc, md);
+#endif
 
                len = 128;
        } else
-#endif
 #ifdef HAVE_SHA384_UPDATE
        if (strcmp(algo, "SHA384") == 0) {
                SHA512_CTX c;
@@ -463,7 +504,6 @@ mcrypt_hashPassword(
                len = 32;
        } else
 #endif
-#endif
        {
                (void) algo;
                (void) password;
@@ -502,3 +542,7 @@ mcrypt_hashPassword(
        return strdup(ret);
 #endif
 }
+
+#ifndef HAVE_SHA512_UPDATE
+#include "sha384-512.c"
+#endif
diff --git a/common/utils/mcrypt.h b/common/utils/mcrypt.h
--- a/common/utils/mcrypt.h
+++ b/common/utils/mcrypt.h
@@ -36,12 +36,15 @@ mcrypt_export char *mcrypt_SHA256Sum(con
 #ifdef HAVE_SHA384_UPDATE
 mcrypt_export char *mcrypt_SHA384Sum(const char *string, size_t len);
 #endif
-#ifdef HAVE_SHA512_UPDATE
 mcrypt_export char *mcrypt_SHA512Sum(const char *string, size_t len);
-#endif
 #ifdef HAVE_RIPEMD160_UPDATE
 mcrypt_export char *mcrypt_RIPEMD160Sum(const char *string, size_t len);
 #endif
 mcrypt_export char *mcrypt_BackendSum(const char *string, size_t len);
 mcrypt_export char *mcrypt_hashPassword(const char *algo, const char 
*password, const char *challenge);
+
+#ifndef SHA512_DIGEST_LENGTH
+#define SHA512_DIGEST_LENGTH 64
 #endif
+
+#endif
diff --git a/common/utils/sha-private.h b/common/utils/sha-private.h
new file mode 100644
--- /dev/null
+++ b/common/utils/sha-private.h
@@ -0,0 +1,28 @@
+/************************ sha-private.h ************************/
+/***************** See RFC 6234 for details. *******************/
+#ifndef _SHA_PRIVATE__H
+#define _SHA_PRIVATE__H
+/*
+ * These definitions are defined in FIPS 180-3, section 4.1.
+ * Ch() and Maj() are defined identically in sections 4.1.1,
+ * 4.1.2, and 4.1.3.
+ *
+ * The definitions used in FIPS 180-3 are as follows:
+ */
+
+#ifndef USE_MODIFIED_MACROS
+#define SHA_Ch(x,y,z)        (((x) & (y)) ^ ((~(x)) & (z)))
+#define SHA_Maj(x,y,z)       (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z)))
+#else /* USE_MODIFIED_MACROS */
+/*
+ * The following definitions are equivalent and potentially faster.
+ */
+
+#define SHA_Ch(x, y, z)      (((x) & ((y) ^ (z))) ^ (z))
+#define SHA_Maj(x, y, z)     (((x) & ((y) | (z))) | ((y) & (z)))
+
+#endif /* USE_MODIFIED_MACROS */
+
+#define SHA_Parity(x, y, z)  ((x) ^ (y) ^ (z))
+
+#endif /* _SHA_PRIVATE__H */
diff --git a/common/utils/sha.h b/common/utils/sha.h
new file mode 100644
--- /dev/null
+++ b/common/utils/sha.h
@@ -0,0 +1,357 @@
+/**************************** sha.h ****************************/
+/***************** See RFC 6234 for details. *******************/
+/*
+   Copyright (c) 2011 IETF Trust and the persons identified as
+   authors of the code.  All rights reserved.
+
+   Redistribution and use in source and binary forms, with or
+   without modification, are permitted provided that the following
+   conditions are met:
+
+   - Redistributions of source code must retain the above
+     copyright notice, this list of conditions and
+     the following disclaimer.
+
+   - Redistributions in binary form must reproduce the above
+     copyright notice, this list of conditions and the following
+     disclaimer in the documentation and/or other materials provided
+     with the distribution.
+
+   - Neither the name of Internet Society, IETF or IETF Trust, nor
+     the names of specific contributors, may be used to endorse or
+     promote products derived from this software without specific
+     prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+   CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+   INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+   DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+   NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+   HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+   OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+   EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+#ifndef _SHA_H_
+#define _SHA_H_
+
+/*
+ *  Description:
+ *      This file implements the Secure Hash Algorithms
+ *      as defined in the U.S. National Institute of Standards
+ *      and Technology Federal Information Processing Standards
+ *      Publication (FIPS PUB) 180-3 published in October 2008
+ *      and formerly defined in its predecessors, FIPS PUB 180-1
+ *      and FIP PUB 180-2.
+ *
+ *      A combined document showing all algorithms is available at
+ *              http://csrc.nist.gov/publications/fips/
+ *                     fips180-3/fips180-3_final.pdf
+ *
+ *      The five hashes are defined in these sizes:
+ *              SHA-1           20 byte / 160 bit
+ *              SHA-224         28 byte / 224 bit
+ *              SHA-256         32 byte / 256 bit
+ *              SHA-384         48 byte / 384 bit
+ *              SHA-512         64 byte / 512 bit
+ *
+ *  Compilation Note:
+ *    These files may be compiled with two options:
+ *        USE_32BIT_ONLY - use 32-bit arithmetic only, for systems
+ *                         without 64-bit integers
+ *
+ *        USE_MODIFIED_MACROS - use alternate form of the SHA_Ch()
+ *                         and SHA_Maj() macros that are equivalent
+ *                         and potentially faster on many systems
+ *
+ */
+
+#include <stdint.h>
+/*
+ * If you do not have the ISO standard stdint.h header file, then you
+ * must typedef the following:
+ *    name              meaning
+ *  uint64_t         unsigned 64-bit integer
+ *  uint32_t         unsigned 32-bit integer
+ *  uint8_t          unsigned 8-bit integer (i.e., unsigned char)
+ *  int_least16_t    integer of >= 16 bits
+ *
+ * See stdint-example.h
+ */
+
+#ifndef _SHA_enum_
+#define _SHA_enum_
+/*
+ *  All SHA functions return one of these values.
+ */
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to