]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
Merge pull request #521 in SNORT/snort3 from ~MIALTIZE/snort3:openssl to master
authorRuss Combs (rucombs) <rucombs@cisco.com>
Thu, 16 Jun 2016 23:05:08 +0000 (19:05 -0400)
committerRuss Combs (rucombs) <rucombs@cisco.com>
Thu, 16 Jun 2016 23:05:08 +0000 (19:05 -0400)
Squashed commit of the following:

commit 96939a313fc3cdd3a8722e6c9815fc2eabedc0e7
Author: Michael Altizer <mialtize@cisco.com>
Date:   Thu Jun 16 16:27:37 2016 -0400

    autotools: Make sure hardening prepoc flags checks fail

commit e166520e51dc2fc566cfb31fc67bc6171bfa6e95
Author: Michael Altizer <mialtize@cisco.com>
Date:   Thu Jun 16 16:27:14 2016 -0400

    cmake: Clean up DAQ/SFBPF detection

commit a906cc3d87ea80498cb54263895f1a36dea6a7cf
Author: Michael Altizer <mialtize@cisco.com>
Date:   Wed Jun 15 19:29:16 2016 -0400

    build: Make OpenSSL a hard dependency

18 files changed:
README.md
cmake/FindDAQ.cmake
cmake/FindSFBPF.cmake
cmake/include_libraries.cmake
cmake/sanity_checks.cmake
config.cmake.h.in
configure.ac
configure_cmake.sh
doc/start.txt
src/CMakeLists.txt
src/hash/CMakeLists.txt
src/hash/Makefile.am
src/hash/hashes.h
src/hash/md5.c [deleted file]
src/hash/md5.h [deleted file]
src/hash/sha2.c [deleted file]
src/hash/sha2.h [deleted file]
src/utils/util.cc

index 9ad1d8781d23f9b1db7cdaf9f3b8b36a7e6fe333..a3a39a2fdda0b44a481657fa6d4dc4aef003a345 100644 (file)
--- a/README.md
+++ b/README.md
@@ -70,6 +70,8 @@ the latest:
 * g++ >= 4.8 or other C++11 compiler
 * hwloc from https://www.open-mpi.org/projects/hwloc/ for CPU affinity management
 * LuaJIT from http://luajit.org for configuration and scripting
+* OpenSSL from https://www.openssl.org/source/ for SHA and MD5 file signatures,
+  the protected_content rule option, and SSL service detection
 * pcap from http://www.tcpdump.org for tcpdump style logging
 * pcre from http://www.pcre.org for regular expression pattern matching
 * pkgconfig from https://www.freedesktop.org/wiki/Software/pkg-config/ to locate build dependencies
index 275dd0b172eefbc6770f9735584187c7bcdfd323..7ff9df97dcaf514e7dde5cc6d5fb40e5cda4b0c4 100644 (file)
@@ -1,32 +1,26 @@
 #
-#
 #  Locate DAQ library
 #  This module defines
 #  DAQ_FOUND, if false, do not try to link to Lua
 # 
-#  DAQ_FOUND - system has the daq
-#  DAQ_INCLUDE_DIR - the daqs include directory
-#  DAQ_LIBRARIES - the libraries needed to use the daq
+#  DAQ_FOUND - system has libdaq
+#  DAQ_INCLUDE_DIR - the libdaq include directory
+#  DAQ_LIBRARIES - the libraries needed to use libdaq
 #
-## Copied from default CMake FindLua51.cmake
-
-
 
 set (ERROR_MESSAGE 
     "
-    ERROR!  cannot find the DAQ.  Go get it from 
+    ERROR! Cannot find LibDAQ.  Go get it from 
     http://snort.org/snort-downloads or use the --with-daq-*
-    options if you have it installed inn an unusual place.  You can
-    also set the DAQ_DIR environment variablet to the daqs root installation directory\n\n"
+    options if you have it installed in an unusual place.\n\n"
 )
 
 find_path(DAQ_INCLUDE_DIR
     NAMES daq.h
-    HINTS ENV DAQ_DIR
-    PATH_SUFFIXES daq
+    HINTS ${DAQ_INCLUDE_DIR_HINT}
+    NO_SYSTEM_ENVIRONMENT_PATH
 )
 
-
 # find any static libraries
 if (ENABLE_STATIC_DAQ)
     execute_process(
@@ -38,13 +32,10 @@ if (ENABLE_STATIC_DAQ)
 
     # This will be false if the exit status was 0 and true if the binary was not found
     if (result)
-        message(SEND_ERROR "
-
-        ERROR!  cannot find the DAQs static libraries!  make sure the binary
-        file `daq-modules-config` is in your path, or specific the daqs path 
-        with the --with-daq-root=<dir>
-
-        ")
+        message(SEND_ERROR 
+        "
+        ERROR! Cannot find LibDAQ's static libraries!  Make sure the binary
+        file `daq-modules-config` is in your path.\n\n")
     endif()
 
     set(DAQ_LIB daq_static)
@@ -53,19 +44,9 @@ else()
     set(DAQ_STATIC_LIBRARIES)
 endif()
 
-
-find_library(DAQ_LIBRARY
-    NAMES  ${DAQ_LIB}
-    HINTS ${DAQ_LIBRARIES_DIR} # user specified path in ./configure_cmake.sh
-    DOC "DAQ library directory"
-    NO_DEFAULT_PATH
-    NO_CMAKE_ENVIRONMENT_PATH
-)
-
 find_library(DAQ_LIBRARY
-    NAMES  ${DAQ_LIB}
-    HINTS  ENV DAQ_DIR
-    PATH_SUFFIXES daq
+    NAMES ${DAQ_LIB}
+    HINTS ${DAQ_LIBRARIES_DIR_HINT}     # user-specified path in ./configure_cmake.sh
     DOC "DAQ library directory"
 )
 
index 4c91faf1950aeb2ea52469d66019ac0f8ba77b22..eb0fbc1bda3465e483a9c5c589be360ddf9d7864 100644 (file)
@@ -1,23 +1,18 @@
 
-
 set(ERROR_MESSAGE
     "Unable to find sfbpf!!"
 )
 
-
 find_path (SFBPF_INCLUDE_DIR
     NAMES sfbpf.h
+    HINTS ${DAQ_INCLUDE_DIR_HINT}
+    NO_SYSTEM_ENVIRONMENT_PATH
 )
 
 find_library(SFBPF_LIBRARIES
     NAMES sfbpf
-    HINTS ${SFBPF_LIBRARIES_DIR} # user specified option in ./configure_cmake.sh
+    HINTS ${DAQ_LIBRARIES_DIR_HINT}      # user-specified option in ./configure_cmake.sh
     NO_DEFAULT_PATH
-    NO_CMAKE_ENVIRONMENT_PATH
-)
-
-find_library(SFBPF_LIBRARIES
-    NAMES sfbpf
 )
 
 include(FindPackageHandleStandardArgs)
@@ -26,3 +21,7 @@ find_package_handle_standard_args(SFBPF
     FAIL_MESSAGE "${ERROR_MESSAGE}"
 )
 
+mark_as_advanced(
+    SFBPF_INCLUDE_DIR
+    SFBPF_LIBRARIES 
+)
index 4a593c288fb5bb1daf10ec273f5ee3587040af0b..3fa28a0012e5f3b5306667f32921db972d8a1c08 100644 (file)
@@ -1,18 +1,18 @@
 
 # required libraries
 find_package(Threads REQUIRED)
-find_package(LuaJIT REQUIRED)
 find_package(DAQ REQUIRED)
 find_package(DNET REQUIRED)
+find_package(HWLOC REQUIRED)
+find_package(LuaJIT REQUIRED)
+find_package(OpenSSL REQUIRED)
 find_package(PCAP REQUIRED)
 find_package(PCRE REQUIRED)
 find_package(SFBPF REQUIRED)
 find_package(ZLIB REQUIRED)
-find_package(HWLOC REQUIRED)
 
 # optional libraries
 find_package(LibLZMA QUIET)
-find_package(OpenSSL QUIET)
 find_package(Asciidoc QUIET)
 find_package(DBLATEX QUIET)
 find_package(Ruby QUIET 1.8.7)
index ae5a594c861c2d25114ee33f178f8c1122e07c95..8da44ba96c8ea265f6b740d970aa62a1dd4a0ae4 100644 (file)
@@ -176,11 +176,6 @@ endif()
 
 
 # set library variables
-if (OPENSSL_FOUND AND DEFINED OPENSSL_CRYPTO_LIBRARIES)
-    check_library_exists (${OPENSSL_CRYPTO_LIBRARIES} SHA256_Init "" HAVE_OPENSSL_SHA)
-    check_library_exists (${OPENSSL_CRYPTO_LIBRARIES} MD5_Init "" HAVE_OPENSSL_MD5)
-endif()
-
 if (HS_FOUND)
     check_library_exists (${HS_LIBRARIES} hs_scan "" HAVE_HYPERSCAN)
 endif()
index 52b52df8eacc4a3884cfa43376b7933612965561..7e0512a86964735c683947affd33dfb032495f90 100644 (file)
 
 /*  Available libraries */
 
-/* openssl SHA available */
-#cmakedefine HAVE_OPENSSL_SHA 1
-
-#cmakedefine HAVE_OPENSSL_MD5 1
-
 /* hyperscan available */
 #cmakedefine HAVE_HYPERSCAN 1
 
index 5909034afb607e022bb1c635c134db9277ac2b25..1375502fe3ca6b165b202997941c5cd7fc342bdb 100644 (file)
@@ -11,8 +11,8 @@
 # vars
 # enables
 # unit tests
-# required libs (pcap, luajit, pcre, dnet, daq, zlib, hwloc)
-# optional libs (hyperscan, pthreads, lzma, ssl / crypto, intel soft cpm)
+# required libs (pcap, luajit, pcre, dnet, daq, zlib, hwloc, openssl / crypto)
+# optional libs (hyperscan, lzma, intel soft cpm)
 # outputs
 #
 # if you add an AC_DEFINE() for a symbol that appears in an exported
@@ -238,6 +238,9 @@ AC_ARG_ENABLE(hardened_build,
 
 if test "x$enable_hardened_build" = "xyes"; then
 
+    save_CPPFLAGS="$CPPFLAGS"
+    CPPFLAGS="$CPPFLAGS -Werror"
+
     AX_CHECK_PREPROC_FLAG([-Wdate-time], [HARD_CPPFLAGS="$HARD_CPPFLAGS -Wdate-time"])
 
     AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2], [HARD_CPPFLAGS="$HARD_CPPFLAGS -D_FORTIFY_SOURCE=2"])
@@ -252,6 +255,8 @@ if test "x$enable_hardened_build" = "xyes"; then
 
     AX_CHECK_LINK_FLAG([-Wl,-z,now], [HARD_LDFLAGS="$HARD_LDFLAGS -Wl,-z,now"])
 
+    CPPFLAGS="$save_CPPFLAGS"
+
 fi
 
 # PIE support gets its own switch since it requires any static libraries Snort wants to link in to
@@ -939,7 +944,7 @@ if test "x$LZMA_LIB" != "xno"; then
 fi
 
 #--------------------------------------------------------------------------
-# ssl / crypto (optional)
+# openssl / crypto
 #--------------------------------------------------------------------------
 
 AC_ARG_WITH(openssl_includes,
@@ -958,23 +963,8 @@ if test "x$with_openssl_libraries" != "xno"; then
     LDFLAGS="${LDFLAGS} -L${with_openssl_libraries}"
 fi
 
-AC_CHECK_HEADERS([openssl/md5.h], 
-    AC_CHECK_LIB([crypto],[MD5_Init],
-                 AC_DEFINE([HAVE_OPENSSL_MD5],[1],openssl MD5 available)
-                 BUILD_SSL_MD5="yes",
-                 ))
-AM_CONDITIONAL([BUILD_SSL_MD5], test "x$BUILD_SSL_MD5" != "xyes" )
-
-AC_CHECK_HEADERS([openssl/sha.h],
-    AC_CHECK_LIB([crypto],[SHA256_Init],
-                 AC_DEFINE([HAVE_OPENSSL_SHA],[1],openssl SHA available)
-                 BUILD_SSL_SHA="yes",
-                 ))
-AM_CONDITIONAL([BUILD_SSL_SHA], test "x$BUILD_SSL_SHA" != "xyes" )
-
-if test "x$BUILD_SSL_MD5" = "xyes" || test "x$BUILD_SSL_SHA" = "xyes" ; then
-    LIBS="${LIBS} -lcrypto"
-fi
+AC_CHECK_HEADERS([openssl/md5.h openssl/sha.h openssl/x509.h], , [AC_MSG_ERROR("OpenSSL headers not found.")])
+AC_CHECK_LIB([crypto], [MD5_Init], , [AC_MSG_ERROR("OpenSSL crypto library not found.")])
 
 #--------------------------------------------------------------------------
 # intel soft cpm (optional)
index 6f7bc60ff594f6499b745d9a4fb0d0366f7947c3..249f0a6d3cdaf21689c47e6031f3211c394ad866 100755 (executable)
@@ -304,10 +304,10 @@ while [ $# -ne 0 ]; do
             append_cache_entry DNET_LIBRARIES_DIR_HINT PATH $optarg
             ;;
         --with-daq-includes=*)
-            append_cache_entry DAQ_INCLUDE_DIR PATH $optarg
+            append_cache_entry DAQ_INCLUDE_DIR_HINT PATH $optarg
             ;;
         --with-daq-libraries=*)
-            append_cache_entry DAQ_LIBRARIES_DIR PATH $optarg
+            append_cache_entry DAQ_LIBRARIES_DIR_HINT PATH $optarg
             ;;
         --with-openssl=*)
             append_cache_entry OPENSSL_ROOT_DIR PATH $optarg
index 800e367ff3382ea7b1bea5ee2bda8d4f9c6d04e7..2380500a3579fb304123d2f4d469f26a1ced8f12 100644 (file)
@@ -18,6 +18,9 @@ Required:
 
 * LuaJIT from http://luajit.org for configuration and scripting
 
+* OpenSSL from https://www.openssl.org/source/ for SHA and MD5 file signatures,
+  the protected_content rule option, and SSL service detection
+
 * pcap from http://www.tcpdump.org for tcpdump style logging
 
 * pcre from http://www.pcre.org for regular expression pattern matching
@@ -31,9 +34,6 @@ Optional:
 * lzma >= 5.1.2 from http://tukaani.org/xz/ for decompression of SWF and
   PDF files
 
-* openssl from https://www.openssl.org for SHA and MD5 file signatures and
-  the protected_content rule option
-
 * hyperscan from https://github.com/01org/hyperscan to build new and improved
   regex and (coming soon) fast pattern support
 
index f46d8289dce3c5a68429d04b09b6ab1a19fcdcc1..a7c6b843e8442de5a80eeb10c9430a999314a49b 100644 (file)
@@ -9,6 +9,7 @@ set(EXTERNAL_LIBRARIES
     ${HWLOC_LIBRARIES}
     ${LIBLZMA_LIBRARIES}
     ${LUAJIT_LIBRARIES}
+    ${OPENSSL_CRYPTO_LIBRARY}
     ${PCAP_LIBRARIES}
     ${PCRE_LIBRARIES}
     ${SFBPF_LIBRARIES}
@@ -19,17 +20,13 @@ set(EXTERNAL_INCLUDES
     ${DAQ_INCLUDE_DIR}
     ${DNET_INCLUDE_DIR}
     ${HWLOC_INCLUDE_DIRS}
+    ${OPENSSL_INCLUDE_DIR}
     ${PCAP_INCLUDE_DIR}
     ${PCRE_INCLUDE_DIR}
     ${SFBPF_INCLUDE_DIR}
     ${ZLIB_INCLUDE_DIRS}
 )
 
-if ( HAVE_OPENSSL_SHA OR HAVE_OPENSSL_MD5 )
-    LIST(APPEND EXTERNAL_LIBRARIES ${OPENSSL_CRYPTO_LIBRARY})
-    LIST(APPEND EXTERNAL_INCLUDES ${OPENSSL_INCLUDE_DIR})
-endif()
-
 if ( HS_FOUND )
     LIST(APPEND EXTERNAL_LIBRARIES ${HS_LIBRARIES})
     LIST(APPEND EXTERNAL_INCLUDES ${HS_INCLUDE_DIRS})
index 43ef444d99db97425a1d59e92a33400343c086a9..961a0d3da7ff36a478278370b58090fbb1bcd5d0 100644 (file)
@@ -9,14 +9,6 @@ set (HASH_INCLUDES
 
 set (HASH_SOURCES )
 
-if ( NOT HAVE_OPENSSL_MD5 )
-    list(APPEND HASH_SOURCES md5.c md5.h)
-endif ()
-
-if ( NOT HAVE_OPENSSL_SHA )
-    list(APPEND HASH_SOURCES sha2.c sha2.h)
-endif ()
-
 add_library( hash STATIC
     ${HASH_INCLUDES}
     ${HASH_SOURCES}
index 41058226b819928698a78061c060702d9f1f31dc..653dd6ec304d93a7c5e23095f61ab7453098220e 100644 (file)
@@ -19,14 +19,6 @@ sfprimetable.cc sfprimetable.h \
 sfxhash.cc \
 zhash.cc zhash.h
 
-if BUILD_SSL_MD5
-libhash_a_SOURCES += md5.c md5.h
-endif
-
-if BUILD_SSL_SHA
-libhash_a_SOURCES += sha2.c sha2.h
-endif
-
 if BUILD_CPPUTESTS
 SUBDIRS = test
 endif
index c5c4f0e16f29c0bc5fb48c651dd9a2ad4c0b5186..d2c1a17187cf64f1f4ecc6a54bb2995a91e8be9a 100644 (file)
 #include "config.h"
 #endif
 
-#include <stdlib.h>
-
-#ifdef HAVE_OPENSSL_SHA
-#include <openssl/sha.h>
-#else
-#include "hash/sha2.h"
-#endif
-
-#ifdef HAVE_OPENSSL_MD5
 #include <openssl/md5.h>
-#else
-extern "C"
-{
-#include "hash/md5.h"
-}
-
-typedef MD5Context MD5_CTX;
-
-inline int MD5_Init(MD5_CTX* c)
-{ MD5Init(c); return 0; }
-
-inline int MD5_Update(MD5_CTX* c, const unsigned char* data, unsigned long len)
-{ MD5Update(c, data, len); return 0; }
-
-inline int MD5_Final(unsigned char* md, MD5_CTX* c)
-{ MD5Final(md, c); return 0; }
-#endif
+#include <openssl/sha.h>
+#include <stdlib.h>
 
 #include "main/snort_types.h"
 
diff --git a/src/hash/md5.c b/src/hash/md5.c
deleted file mode 100644 (file)
index 46c25a7..0000000
+++ /dev/null
@@ -1,367 +0,0 @@
-/*
- * This code implements the MD5 message-digest algorithm.
- * The algorithm is due to Ron Rivest.  This code was
- * written by Colin Plumb in 1993, no copyright is claimed.
- * This code is in the public domain; do with it what you wish.
- *
- * Equivalent code is available from RSA Data Security, Inc.
- * This code has been tested against that, and is equivalent,
- * except that you don't need to include two pages of legalese
- * with every copy.
- *
- * To compute the message digest of a chunk of bytes, declare an
- * MD5Context structure, pass it to MD5Init, call MD5Update as
- * needed on buffers full of bytes, and then call MD5Final, which
- * will fill a supplied 16-byte array with the digest.
- */
-
-/* This code slightly modified to fit into Samba by 
-   abartlet@samba.org Jun 2001 
-   and to fit the cifs vfs by 
-   Steve French sfrench@us.ibm.com */
-
-#include <string.h>
-#include "md5.h"
-
-static void MD5Transform(__u32 buf[4], __u32 const in[16]);
-
-/*
- * Note: this code is harmless on little-endian machines.
- */
-static void
-byteReverse(unsigned char *buf, unsigned longs)
-{
-    __u32 t;
-    do {
-        t = (__u32) ((unsigned) buf[3] << 8 | buf[2]) << 16 |
-            ((unsigned) buf[1] << 8 | buf[0]);
-        *(__u32 *) buf = t;
-        buf += 4;
-    } while (--longs);
-}
-
-/*
- * Start MD5 accumulation.  Set bit count to 0 and buffer to mysterious
- * initialization constants.
- */
-void
-MD5Init(struct MD5Context *ctx)
-{
-    ctx->buf[0] = 0x67452301;
-    ctx->buf[1] = 0xefcdab89;
-    ctx->buf[2] = 0x98badcfe;
-    ctx->buf[3] = 0x10325476;
-
-    ctx->bits[0] = 0;
-    ctx->bits[1] = 0;
-}
-
-/*
- * Update context to reflect the concatenation of another buffer full
- * of bytes.
- */
-void
-MD5Update(struct MD5Context *ctx, unsigned char const *buf, unsigned len)
-{
-    register __u32 t;
-
-    /* Update bitcount */
-
-    t = ctx->bits[0];
-    if ((ctx->bits[0] = t + ((__u32) len << 3)) < t)
-        ctx->bits[1]++;    /* Carry from low to high */
-    ctx->bits[1] += len >> 29;
-
-    t = (t >> 3) & 0x3f;    /* Bytes already in shsInfo->data */
-
-    /* Handle any leading odd-sized chunks */
-
-    if (t) {
-        unsigned char *p = (unsigned char *) ctx->in + t;
-
-        t = 64 - t;
-        if (len < t) {
-            memmove(p, buf, len);
-            return;
-        }
-        memmove(p, buf, t);
-        byteReverse(ctx->in, 16);
-        MD5Transform(ctx->buf, (__u32 *) ctx->in);
-        buf += t;
-        len -= t;
-    }
-    /* Process data in 64-byte chunks */
-
-    while (len >= 64) {
-        memmove(ctx->in, buf, 64);
-        byteReverse(ctx->in, 16);
-        MD5Transform(ctx->buf, (__u32 *) ctx->in);
-        buf += 64;
-        len -= 64;
-    }
-
-    /* Handle any remaining bytes of data. */
-
-    memmove(ctx->in, buf, len);
-}
-
-/*
- * Final wrapup - pad to 64-byte boundary with the bit pattern 
- * 1 0* (64-bit count of bits processed, MSB-first)
- */
-void
-MD5Final(unsigned char digest[16], struct MD5Context *ctx)
-{
-    unsigned int count;
-    unsigned char *p;
-
-    /* Compute number of bytes mod 64 */
-    count = (ctx->bits[0] >> 3) & 0x3F;
-
-    /* Set the first char of padding to 0x80.  This is safe since there is
-       always at least one byte free */
-    p = ctx->in + count;
-    *p++ = 0x80;
-
-    /* Bytes of padding needed to make 64 bytes */
-    count = 64 - 1 - count;
-
-    /* Pad out to 56 mod 64 */
-    if (count < 8) {
-        /* Two lots of padding:  Pad the first block to 64 bytes */
-        memset(p, 0, count);
-        byteReverse(ctx->in, 16);
-        MD5Transform(ctx->buf, (__u32 *) ctx->in);
-
-        /* Now fill the next block with 56 bytes */
-        memset(ctx->in, 0, 56);
-    } else {
-        /* Pad block to 56 bytes */
-        memset(p, 0, count - 8);
-    }
-    byteReverse(ctx->in, 14);
-
-    /* Append length in bits and transform */
-    ((__u32 *) ctx->in)[14] = ctx->bits[0];
-    ((__u32 *) ctx->in)[15] = ctx->bits[1];
-
-    MD5Transform(ctx->buf, (__u32 *) ctx->in);
-    byteReverse((unsigned char *) ctx->buf, 4);
-    memmove(digest, ctx->buf, 16);
-    memset(ctx, 0, sizeof(*ctx));    /* In case it's sensitive */
-}
-
-/* The four core functions - F1 is optimized somewhat */
-
-/* #define F1(x, y, z) (x & y | ~x & z) */
-#define F1(x, y, z) (z ^ (x & (y ^ z)))
-#define F2(x, y, z) F1(z, x, y)
-#define F3(x, y, z) (x ^ y ^ z)
-#define F4(x, y, z) (y ^ (x | ~z))
-
-/* This is the central step in the MD5 algorithm. */
-#define MD5STEP(f, w, x, y, z, data, s) \
-    ( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
-
-/*
- * The core of the MD5 algorithm, this alters an existing MD5 hash to
- * reflect the addition of 16 longwords of new data.  MD5Update blocks
- * the data and converts bytes into longwords for this routine.
- */
-static void
-MD5Transform(__u32 buf[4], __u32 const in[16])
-{
-    register __u32 a, b, c, d;
-
-    a = buf[0];
-    b = buf[1];
-    c = buf[2];
-    d = buf[3];
-
-    MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7);
-    MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12);
-    MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17);
-    MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22);
-    MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7);
-    MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12);
-    MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17);
-    MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22);
-    MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7);
-    MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12);
-    MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17);
-    MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22);
-    MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7);
-    MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12);
-    MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17);
-    MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22);
-
-    MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5);
-    MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9);
-    MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14);
-    MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20);
-    MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5);
-    MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9);
-    MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14);
-    MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20);
-    MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5);
-    MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9);
-    MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14);
-    MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20);
-    MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5);
-    MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9);
-    MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14);
-    MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20);
-
-    MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4);
-    MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11);
-    MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16);
-    MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23);
-    MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4);
-    MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11);
-    MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16);
-    MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23);
-    MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4);
-    MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11);
-    MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16);
-    MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23);
-    MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4);
-    MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11);
-    MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16);
-    MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23);
-
-    MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6);
-    MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10);
-    MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15);
-    MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21);
-    MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6);
-    MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10);
-    MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15);
-    MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21);
-    MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6);
-    MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10);
-    MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15);
-    MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21);
-    MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6);
-    MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10);
-    MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15);
-    MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21);
-
-    buf[0] += a;
-    buf[1] += b;
-    buf[2] += c;
-    buf[3] += d;
-}
-
-#if 0   /* currently unused */
-/***********************************************************************
- the rfc 2104 version of hmac_md5 initialisation.
-***********************************************************************/
-static void
-hmac_md5_init_rfc2104(unsigned char *key, int key_len,
-              struct HMACMD5Context *ctx)
-{
-    int i;
-
-    /* if key is longer than 64 bytes reset it to key=MD5(key) */
-    if (key_len > 64) {
-        unsigned char tk[16];
-        struct MD5Context tctx;
-
-        MD5Init(&tctx);
-        MD5Update(&tctx, key, key_len);
-        MD5Final(tk, &tctx);
-
-        key = tk;
-        key_len = 16;
-    }
-
-    /* start out by storing key in pads */
-    memset(ctx->k_ipad, 0, sizeof (ctx->k_ipad));
-    memset(ctx->k_opad, 0, sizeof (ctx->k_opad));
-    memcpy(ctx->k_ipad, key, key_len);
-    memcpy(ctx->k_opad, key, key_len);
-
-    /* XOR key with ipad and opad values */
-    for (i = 0; i < 64; i++) {
-        ctx->k_ipad[i] ^= 0x36;
-        ctx->k_opad[i] ^= 0x5c;
-    }
-
-    MD5Init(&ctx->ctx);
-    MD5Update(&ctx->ctx, ctx->k_ipad, 64);
-}
-#endif
-
-/***********************************************************************
- the microsoft version of hmac_md5 initialisation.
-***********************************************************************/
-void
-hmac_md5_init_limK_to_64(const unsigned char *key, int key_len,
-             struct HMACMD5Context *ctx)
-{
-    int i;
-
-    /* if key is longer than 64 bytes truncate it */
-    if (key_len > 64) {
-        key_len = 64;
-    }
-
-    /* start out by storing key in pads */
-    memset(ctx->k_ipad, 0, sizeof (ctx->k_ipad));
-    memset(ctx->k_opad, 0, sizeof (ctx->k_opad));
-    memcpy(ctx->k_ipad, key, key_len);
-    memcpy(ctx->k_opad, key, key_len);
-
-    /* XOR key with ipad and opad values */
-    for (i = 0; i < 64; i++) {
-        ctx->k_ipad[i] ^= 0x36;
-        ctx->k_opad[i] ^= 0x5c;
-    }
-
-    MD5Init(&ctx->ctx);
-    MD5Update(&ctx->ctx, ctx->k_ipad, 64);
-}
-
-/***********************************************************************
- update hmac_md5 "inner" buffer
-***********************************************************************/
-void
-hmac_md5_update(const unsigned char *text, int text_len,
-        struct HMACMD5Context *ctx)
-{
-    MD5Update(&ctx->ctx, text, text_len);    /* then text of datagram */
-}
-
-/***********************************************************************
- finish off hmac_md5 "inner" buffer and generate outer one.
-***********************************************************************/
-void
-hmac_md5_final(unsigned char *digest, struct HMACMD5Context *ctx)
-{
-    struct MD5Context ctx_o;
-
-    MD5Final(digest, &ctx->ctx);
-
-    MD5Init(&ctx_o);
-    MD5Update(&ctx_o, ctx->k_opad, 64);
-    MD5Update(&ctx_o, digest, 16);
-    MD5Final(digest, &ctx_o);
-}
-
-/***********************************************************
- single function to calculate an HMAC MD5 digest from data.
- use the microsoft hmacmd5 init method because the key is 16 bytes.
-************************************************************/
-#if 0 /* currently unused */
-static void
-hmac_md5(unsigned char key[16], unsigned char *data, int data_len,
-     unsigned char *digest)
-{
-    struct HMACMD5Context ctx;
-    hmac_md5_init_limK_to_64(key, 16, &ctx);
-    if (data_len != 0) {
-        hmac_md5_update(data, data_len, &ctx);
-    }
-    hmac_md5_final(digest, &ctx);
-}
-#endif
diff --git a/src/hash/md5.h b/src/hash/md5.h
deleted file mode 100644 (file)
index b0ad2db..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * DO NOT EDIT md5.h or md5.c
- * the only changes made are listed here:
- * -- moved #endif for !MD5_H to end of file
- * -- added include stdint.h
- * -- added typedef for __u32
- * -- added config.h foo
- */
-
-#ifndef MD5_H
-#define MD5_H
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#ifndef HEADER_MD5_H
-/* Try to avoid clashes with OpenSSL */
-#define HEADER_MD5_H
-#endif
-
-#include <stdint.h>
-
-typedef uint32_t __u32;
-
-struct MD5Context
-{
-    __u32 buf[4];
-    __u32 bits[2];
-    unsigned char in[64];
-};
-
-#ifndef _HMAC_MD5_H
-struct HMACMD5Context
-{
-    struct MD5Context ctx;
-    unsigned char k_ipad[65];
-    unsigned char k_opad[65];
-};
-#endif              /* _HMAC_MD5_H */
-
-void MD5Init(struct MD5Context* context);
-void MD5Update(struct MD5Context* context, unsigned char const* buf,
-    unsigned len);
-void MD5Final(unsigned char digest[16], struct MD5Context* context);
-
-/* The following definitions come from lib/hmacmd5.c  */
-
-/* void hmac_md5_init_rfc2104(unsigned char *key, int key_len,
-            struct HMACMD5Context *ctx);*/
-void hmac_md5_init_limK_to_64(const unsigned char* key, int key_len,
-    struct HMACMD5Context* ctx);
-void hmac_md5_update(const unsigned char* text, int text_len,
-    struct HMACMD5Context* ctx);
-void hmac_md5_final(unsigned char* digest, struct HMACMD5Context* ctx);
-/* void hmac_md5(unsigned char key[16], unsigned char *data, int data_len,
-            unsigned char *digest);*/
-
-#endif
-
diff --git a/src/hash/sha2.c b/src/hash/sha2.c
deleted file mode 100644 (file)
index 658136b..0000000
+++ /dev/null
@@ -1,1069 +0,0 @@
-/*
- * FILE:    sha2.c
- * AUTHOR:    Aaron D. Gifford - http://www.aarongifford.com/
- *
- * Copyright (c) 2000-2001, Aaron D. Gifford
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. 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.
- * 3. Neither the name of the copyright holder nor the names of contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTOR(S) ``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 AUTHOR OR CONTRIBUTOR(S) 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.
- *
- */
-
-#include "sha2.h"
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>    /* memcpy()/memset() or bcopy()/bzero() */
-#include <assert.h>    /* assert() */
-
-/*
- * ASSERT NOTE:
- * Some sanity checking code is included using assert().  On my FreeBSD
- * system, this additional code can be removed by compiling with NDEBUG
- * defined.  Check your own systems manpage on assert() to see how to
- * compile WITHOUT the sanity checking code on your system.
- *
- * UNROLLED TRANSFORM LOOP NOTE:
- * You can define SHA2_UNROLL_TRANSFORM to use the unrolled transform
- * loop version for the hash transform rounds (defined using macros
- * later in this file).  Either define on the command line, for example:
- *
- *   cc -DSHA2_UNROLL_TRANSFORM -o sha2 sha2.c sha2prog.c
- *
- * or define below:
- *
- *   #define SHA2_UNROLL_TRANSFORM
- *
- */
-
-
-/*** SHA-256/384/512 Machine Architecture Definitions *****************/
-/*
- * BYTE_ORDER NOTE:
- *
- * Please make sure that your system defines BYTE_ORDER.  If your
- * architecture is little-endian, make sure it also defines
- * LITTLE_ENDIAN and that the two (BYTE_ORDER and LITTLE_ENDIAN) are
- * equivilent.
- *
- * If your system does not define the above, then you can do so by
- * hand like this:
- *
- *   #define LITTLE_ENDIAN 1234
- *   #define BIG_ENDIAN    4321
- *
- * And for little-endian machines, add:
- *
- *   #define BYTE_ORDER LITTLE_ENDIAN
- *
- * Or for big-endian machines:
- *
- *   #define BYTE_ORDER BIG_ENDIAN
- *
- * The FreeBSD machine this was written on defines BYTE_ORDER
- * appropriately by including <sys/types.h> (which in turn includes
- * <machine/endian.h> where the appropriate definitions are actually
- * made).
- */
-#if !defined(BYTE_ORDER) || (BYTE_ORDER != LITTLE_ENDIAN && BYTE_ORDER != BIG_ENDIAN)
-#error Define BYTE_ORDER to be equal to either LITTLE_ENDIAN or BIG_ENDIAN
-#endif
-
-/*
- * Define the followingsha2_* types to types of the correct length on
- * the native archtecture.   Most BSD systems and Linux define u_intXX_t
- * types.  Machines with very recent ANSI C headers, can use the
- * uintXX_t definintions from inttypes.h by defining SHA2_USE_INTTYPES_H
- * during compile or in the sha.h header file.
- *
- * Machines that support neither u_intXX_t nor inttypes.h's uintXX_t
- * will need to define these three typedefs below (and the appropriate
- * ones in sha.h too) by hand according to their system architecture.
- *
- * Thank you, Jun-ichiro itojun Hagino, for suggesting using u_intXX_t
- * types and pointing out recent ANSI C support for uintXX_t in inttypes.h.
- */
-#ifdef SHA2_USE_INTTYPES_H
-
-typedef uint8_t  sha2_byte;    /* Exactly 1 byte */
-typedef uint32_t sha2_word32;    /* Exactly 4 bytes */
-typedef uint64_t sha2_word64;    /* Exactly 8 bytes */
-
-#else /* SHA2_USE_INTTYPES_H */
-
-typedef u_int8_t  sha2_byte;    /* Exactly 1 byte */
-typedef u_int32_t sha2_word32;    /* Exactly 4 bytes */
-typedef u_int64_t sha2_word64;    /* Exactly 8 bytes */
-
-#endif /* SHA2_USE_INTTYPES_H */
-
-
-/*** SHA-256/384/512 Various Length Definitions ***********************/
-/* NOTE: Most of these are in sha2.h */
-#define SHA256_SHORT_BLOCK_LENGTH    (SHA256_BLOCK_LENGTH - 8)
-#define SHA384_SHORT_BLOCK_LENGTH    (SHA384_BLOCK_LENGTH - 16)
-#define SHA512_SHORT_BLOCK_LENGTH    (SHA512_BLOCK_LENGTH - 16)
-
-
-/*** ENDIAN REVERSAL MACROS *******************************************/
-#if BYTE_ORDER == LITTLE_ENDIAN
-#define REVERSE32(w,x)    { \
-    sha2_word32 tmp = (w); \
-    tmp = (tmp >> 16) | (tmp << 16); \
-    (x) = ((tmp & 0xff00ff00UL) >> 8) | ((tmp & 0x00ff00ffUL) << 8); \
-}
-#define REVERSE64(w,x)    { \
-    sha2_word64 tmp = (w); \
-    tmp = (tmp >> 32) | (tmp << 32); \
-    tmp = ((tmp & 0xff00ff00ff00ff00ULL) >> 8) | \
-          ((tmp & 0x00ff00ff00ff00ffULL) << 8); \
-    (x) = ((tmp & 0xffff0000ffff0000ULL) >> 16) | \
-          ((tmp & 0x0000ffff0000ffffULL) << 16); \
-}
-#endif /* BYTE_ORDER == LITTLE_ENDIAN */
-
-/*
- * Macro for incrementally adding the unsigned 64-bit integer n to the
- * unsigned 128-bit integer (represented using a two-element array of
- * 64-bit words):
- */
-#define ADDINC128(w,n)    { \
-    (w)[0] += (sha2_word64)(n); \
-    if ((w)[0] < (n)) { \
-        (w)[1]++; \
-    } \
-}
-
-/*
- * Macros for copying blocks of memory and for zeroing out ranges
- * of memory.  Using these macros makes it easy to switch from
- * using memset()/memcpy() and using bzero()/bcopy().
- *
- * Please define either SHA2_USE_MEMSET_MEMCPY or define
- * SHA2_USE_BZERO_BCOPY depending on which function set you
- * choose to use:
- */
-#if !defined(SHA2_USE_MEMSET_MEMCPY) && !defined(SHA2_USE_BZERO_BCOPY)
-/* Default to memset()/memcpy() if no option is specified */
-#define    SHA2_USE_MEMSET_MEMCPY    1
-#endif
-#if defined(SHA2_USE_MEMSET_MEMCPY) && defined(SHA2_USE_BZERO_BCOPY)
-/* Abort with an error if BOTH options are defined */
-#error Define either SHA2_USE_MEMSET_MEMCPY or SHA2_USE_BZERO_BCOPY, not both!
-#endif
-
-#ifdef SHA2_USE_MEMSET_MEMCPY
-#define MEMSET_BZERO(p,l)    memset((p), 0, (l))
-#define MEMCPY_BCOPY(d,s,l)    memcpy((d), (s), (l))
-#endif
-#ifdef SHA2_USE_BZERO_BCOPY
-#define MEMSET_BZERO(p,l)    bzero((p), (l))
-#define MEMCPY_BCOPY(d,s,l)    bcopy((s), (d), (l))
-#endif
-
-
-/*** THE SIX LOGICAL FUNCTIONS ****************************************/
-/*
- * Bit shifting and rotation (used by the six SHA-XYZ logical functions:
- *
- *   NOTE:  The naming of R and S appears backwards here (R is a SHIFT and
- *   S is a ROTATION) because the SHA-256/384/512 description document
- *   (see http://csrc.nist.gov/cryptval/shs/sha256-384-512.pdf) uses this
- *   same "backwards" definition.
- */
-/* Shift-right (used in SHA-256, SHA-384, and SHA-512): */
-#define R(b,x)         ((x) >> (b))
-/* 32-bit Rotate-right (used in SHA-256): */
-#define S32(b,x)    (((x) >> (b)) | ((x) << (32 - (b))))
-/* 64-bit Rotate-right (used in SHA-384 and SHA-512): */
-#define S64(b,x)    (((x) >> (b)) | ((x) << (64 - (b))))
-
-/* Two of six logical functions used in SHA-256, SHA-384, and SHA-512: */
-#define Ch(x,y,z)    (((x) & (y)) ^ ((~(x)) & (z)))
-#define Maj(x,y,z)    (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z)))
-
-/* Four of six logical functions used in SHA-256: */
-#define Sigma0_256(x)    (S32(2,  (x)) ^ S32(13, (x)) ^ S32(22, (x)))
-#define Sigma1_256(x)    (S32(6,  (x)) ^ S32(11, (x)) ^ S32(25, (x)))
-#define sigma0_256(x)    (S32(7,  (x)) ^ S32(18, (x)) ^ R(3 ,   (x)))
-#define sigma1_256(x)    (S32(17, (x)) ^ S32(19, (x)) ^ R(10,   (x)))
-
-/* Four of six logical functions used in SHA-384 and SHA-512: */
-#define Sigma0_512(x)    (S64(28, (x)) ^ S64(34, (x)) ^ S64(39, (x)))
-#define Sigma1_512(x)    (S64(14, (x)) ^ S64(18, (x)) ^ S64(41, (x)))
-#define sigma0_512(x)    (S64( 1, (x)) ^ S64( 8, (x)) ^ R( 7,   (x)))
-#define sigma1_512(x)    (S64(19, (x)) ^ S64(61, (x)) ^ R( 6,   (x)))
-
-/*** INTERNAL FUNCTION PROTOTYPES *************************************/
-/* NOTE: These should not be accessed directly from outside this
- * library -- they are intended for private internal visibility/use
- * only.
- */
-void SHA512_Last(SHA512_CTX*);
-void SHA256_Transform(SHA256_CTX*, const sha2_word32*);
-void SHA512_Transform(SHA512_CTX*, const sha2_word64*);
-
-
-/*** SHA-XYZ INITIAL HASH VALUES AND CONSTANTS ************************/
-/* Hash constant words K for SHA-256: */
-static const sha2_word32 K256[64] = {
-    0x428a2f98UL, 0x71374491UL, 0xb5c0fbcfUL, 0xe9b5dba5UL,
-    0x3956c25bUL, 0x59f111f1UL, 0x923f82a4UL, 0xab1c5ed5UL,
-    0xd807aa98UL, 0x12835b01UL, 0x243185beUL, 0x550c7dc3UL,
-    0x72be5d74UL, 0x80deb1feUL, 0x9bdc06a7UL, 0xc19bf174UL,
-    0xe49b69c1UL, 0xefbe4786UL, 0x0fc19dc6UL, 0x240ca1ccUL,
-    0x2de92c6fUL, 0x4a7484aaUL, 0x5cb0a9dcUL, 0x76f988daUL,
-    0x983e5152UL, 0xa831c66dUL, 0xb00327c8UL, 0xbf597fc7UL,
-    0xc6e00bf3UL, 0xd5a79147UL, 0x06ca6351UL, 0x14292967UL,
-    0x27b70a85UL, 0x2e1b2138UL, 0x4d2c6dfcUL, 0x53380d13UL,
-    0x650a7354UL, 0x766a0abbUL, 0x81c2c92eUL, 0x92722c85UL,
-    0xa2bfe8a1UL, 0xa81a664bUL, 0xc24b8b70UL, 0xc76c51a3UL,
-    0xd192e819UL, 0xd6990624UL, 0xf40e3585UL, 0x106aa070UL,
-    0x19a4c116UL, 0x1e376c08UL, 0x2748774cUL, 0x34b0bcb5UL,
-    0x391c0cb3UL, 0x4ed8aa4aUL, 0x5b9cca4fUL, 0x682e6ff3UL,
-    0x748f82eeUL, 0x78a5636fUL, 0x84c87814UL, 0x8cc70208UL,
-    0x90befffaUL, 0xa4506cebUL, 0xbef9a3f7UL, 0xc67178f2UL
-};
-
-/* Initial hash value H for SHA-256: */
-static const sha2_word32 sha256_initial_hash_value[8] = {
-    0x6a09e667UL,
-    0xbb67ae85UL,
-    0x3c6ef372UL,
-    0xa54ff53aUL,
-    0x510e527fUL,
-    0x9b05688cUL,
-    0x1f83d9abUL,
-    0x5be0cd19UL
-};
-
-/* Hash constant words K for SHA-384 and SHA-512: */
-static const sha2_word64 K512[80] = {
-    0x428a2f98d728ae22ULL, 0x7137449123ef65cdULL,
-    0xb5c0fbcfec4d3b2fULL, 0xe9b5dba58189dbbcULL,
-    0x3956c25bf348b538ULL, 0x59f111f1b605d019ULL,
-    0x923f82a4af194f9bULL, 0xab1c5ed5da6d8118ULL,
-    0xd807aa98a3030242ULL, 0x12835b0145706fbeULL,
-    0x243185be4ee4b28cULL, 0x550c7dc3d5ffb4e2ULL,
-    0x72be5d74f27b896fULL, 0x80deb1fe3b1696b1ULL,
-    0x9bdc06a725c71235ULL, 0xc19bf174cf692694ULL,
-    0xe49b69c19ef14ad2ULL, 0xefbe4786384f25e3ULL,
-    0x0fc19dc68b8cd5b5ULL, 0x240ca1cc77ac9c65ULL,
-    0x2de92c6f592b0275ULL, 0x4a7484aa6ea6e483ULL,
-    0x5cb0a9dcbd41fbd4ULL, 0x76f988da831153b5ULL,
-    0x983e5152ee66dfabULL, 0xa831c66d2db43210ULL,
-    0xb00327c898fb213fULL, 0xbf597fc7beef0ee4ULL,
-    0xc6e00bf33da88fc2ULL, 0xd5a79147930aa725ULL,
-    0x06ca6351e003826fULL, 0x142929670a0e6e70ULL,
-    0x27b70a8546d22ffcULL, 0x2e1b21385c26c926ULL,
-    0x4d2c6dfc5ac42aedULL, 0x53380d139d95b3dfULL,
-    0x650a73548baf63deULL, 0x766a0abb3c77b2a8ULL,
-    0x81c2c92e47edaee6ULL, 0x92722c851482353bULL,
-    0xa2bfe8a14cf10364ULL, 0xa81a664bbc423001ULL,
-    0xc24b8b70d0f89791ULL, 0xc76c51a30654be30ULL,
-    0xd192e819d6ef5218ULL, 0xd69906245565a910ULL,
-    0xf40e35855771202aULL, 0x106aa07032bbd1b8ULL,
-    0x19a4c116b8d2d0c8ULL, 0x1e376c085141ab53ULL,
-    0x2748774cdf8eeb99ULL, 0x34b0bcb5e19b48a8ULL,
-    0x391c0cb3c5c95a63ULL, 0x4ed8aa4ae3418acbULL,
-    0x5b9cca4f7763e373ULL, 0x682e6ff3d6b2b8a3ULL,
-    0x748f82ee5defb2fcULL, 0x78a5636f43172f60ULL,
-    0x84c87814a1f0ab72ULL, 0x8cc702081a6439ecULL,
-    0x90befffa23631e28ULL, 0xa4506cebde82bde9ULL,
-    0xbef9a3f7b2c67915ULL, 0xc67178f2e372532bULL,
-    0xca273eceea26619cULL, 0xd186b8c721c0c207ULL,
-    0xeada7dd6cde0eb1eULL, 0xf57d4f7fee6ed178ULL,
-    0x06f067aa72176fbaULL, 0x0a637dc5a2c898a6ULL,
-    0x113f9804bef90daeULL, 0x1b710b35131c471bULL,
-    0x28db77f523047d84ULL, 0x32caab7b40c72493ULL,
-    0x3c9ebe0a15c9bebcULL, 0x431d67c49c100d4cULL,
-    0x4cc5d4becb3e42b6ULL, 0x597f299cfc657e2aULL,
-    0x5fcb6fab3ad6faecULL, 0x6c44198c4a475817ULL
-};
-
-/* Initial hash value H for SHA-384 */
-static const sha2_word64 sha384_initial_hash_value[8] = {
-    0xcbbb9d5dc1059ed8ULL,
-    0x629a292a367cd507ULL,
-    0x9159015a3070dd17ULL,
-    0x152fecd8f70e5939ULL,
-    0x67332667ffc00b31ULL,
-    0x8eb44a8768581511ULL,
-    0xdb0c2e0d64f98fa7ULL,
-    0x47b5481dbefa4fa4ULL
-};
-
-/* Initial hash value H for SHA-512 */
-static const sha2_word64 sha512_initial_hash_value[8] = {
-    0x6a09e667f3bcc908ULL,
-    0xbb67ae8584caa73bULL,
-    0x3c6ef372fe94f82bULL,
-    0xa54ff53a5f1d36f1ULL,
-    0x510e527fade682d1ULL,
-    0x9b05688c2b3e6c1fULL,
-    0x1f83d9abfb41bd6bULL,
-    0x5be0cd19137e2179ULL
-};
-
-/*
- * Constant used by SHA256/384/512_End() functions for converting the
- * digest to a readable hexadecimal character string:
- */
-static const char *sha2_hex_digits = "0123456789abcdef";
-
-
-/*** SHA-256: *********************************************************/
-void SHA256_Init(SHA256_CTX* context) {
-    if (context == (SHA256_CTX*)0) {
-        return;
-    }
-    MEMCPY_BCOPY(context->state, sha256_initial_hash_value, SHA256_DIGEST_LENGTH);
-    MEMSET_BZERO(context->buffer, SHA256_BLOCK_LENGTH);
-    context->bitcount = 0;
-}
-
-#ifdef SHA2_UNROLL_TRANSFORM
-
-/* Unrolled SHA-256 round macros: */
-
-#if BYTE_ORDER == LITTLE_ENDIAN
-
-#define ROUND256_0_TO_15(a,b,c,d,e,f,g,h)    \
-    REVERSE32(*data++, W256[j]); \
-    T1 = (h) + Sigma1_256(e) + Ch((e), (f), (g)) + \
-             K256[j] + W256[j]; \
-    (d) += T1; \
-    (h) = T1 + Sigma0_256(a) + Maj((a), (b), (c)); \
-    j++
-
-
-#else /* BYTE_ORDER == LITTLE_ENDIAN */
-
-#define ROUND256_0_TO_15(a,b,c,d,e,f,g,h)    \
-    T1 = (h) + Sigma1_256(e) + Ch((e), (f), (g)) + \
-         K256[j] + (W256[j] = *data++); \
-    (d) += T1; \
-    (h) = T1 + Sigma0_256(a) + Maj((a), (b), (c)); \
-    j++
-
-#endif /* BYTE_ORDER == LITTLE_ENDIAN */
-
-#define ROUND256(a,b,c,d,e,f,g,h)    \
-    s0 = W256[(j+1)&0x0f]; \
-    s0 = sigma0_256(s0); \
-    s1 = W256[(j+14)&0x0f]; \
-    s1 = sigma1_256(s1); \
-    T1 = (h) + Sigma1_256(e) + Ch((e), (f), (g)) + K256[j] + \
-         (W256[j&0x0f] += s1 + W256[(j+9)&0x0f] + s0); \
-    (d) += T1; \
-    (h) = T1 + Sigma0_256(a) + Maj((a), (b), (c)); \
-    j++
-
-void SHA256_Transform(SHA256_CTX* context, const sha2_word32* data) {
-    sha2_word32    a, b, c, d, e, f, g, h, s0, s1;
-    sha2_word32    T1, *W256;
-    int        j;
-
-    W256 = (sha2_word32*)context->buffer;
-
-    /* Initialize registers with the prev. intermediate value */
-    a = context->state[0];
-    b = context->state[1];
-    c = context->state[2];
-    d = context->state[3];
-    e = context->state[4];
-    f = context->state[5];
-    g = context->state[6];
-    h = context->state[7];
-
-    j = 0;
-    do {
-        /* Rounds 0 to 15 (unrolled): */
-        ROUND256_0_TO_15(a,b,c,d,e,f,g,h);
-        ROUND256_0_TO_15(h,a,b,c,d,e,f,g);
-        ROUND256_0_TO_15(g,h,a,b,c,d,e,f);
-        ROUND256_0_TO_15(f,g,h,a,b,c,d,e);
-        ROUND256_0_TO_15(e,f,g,h,a,b,c,d);
-        ROUND256_0_TO_15(d,e,f,g,h,a,b,c);
-        ROUND256_0_TO_15(c,d,e,f,g,h,a,b);
-        ROUND256_0_TO_15(b,c,d,e,f,g,h,a);
-    } while (j < 16);
-
-    /* Now for the remaining rounds to 64: */
-    do {
-        ROUND256(a,b,c,d,e,f,g,h);
-        ROUND256(h,a,b,c,d,e,f,g);
-        ROUND256(g,h,a,b,c,d,e,f);
-        ROUND256(f,g,h,a,b,c,d,e);
-        ROUND256(e,f,g,h,a,b,c,d);
-        ROUND256(d,e,f,g,h,a,b,c);
-        ROUND256(c,d,e,f,g,h,a,b);
-        ROUND256(b,c,d,e,f,g,h,a);
-    } while (j < 64);
-
-    /* Compute the current intermediate hash value */
-    context->state[0] += a;
-    context->state[1] += b;
-    context->state[2] += c;
-    context->state[3] += d;
-    context->state[4] += e;
-    context->state[5] += f;
-    context->state[6] += g;
-    context->state[7] += h;
-
-    /* Clean up */
-    a = b = c = d = e = f = g = h = T1 = 0;
-}
-
-#else /* SHA2_UNROLL_TRANSFORM */
-
-void SHA256_Transform(SHA256_CTX* context, const sha2_word32* data) {
-    sha2_word32    a, b, c, d, e, f, g, h, s0, s1;
-    sha2_word32    T1, T2, *W256;
-    int        j;
-
-    W256 = (sha2_word32*)context->buffer;
-
-    /* Initialize registers with the prev. intermediate value */
-    a = context->state[0];
-    b = context->state[1];
-    c = context->state[2];
-    d = context->state[3];
-    e = context->state[4];
-    f = context->state[5];
-    g = context->state[6];
-    h = context->state[7];
-
-    j = 0;
-    do {
-#if BYTE_ORDER == LITTLE_ENDIAN
-        /* Copy data while converting to host byte order */
-        REVERSE32(*data++,W256[j]);
-        /* Apply the SHA-256 compression function to update a..h */
-        T1 = h + Sigma1_256(e) + Ch(e, f, g) + K256[j] + W256[j];
-#else /* BYTE_ORDER == LITTLE_ENDIAN */
-        /* Apply the SHA-256 compression function to update a..h with copy */
-        T1 = h + Sigma1_256(e) + Ch(e, f, g) + K256[j] + (W256[j] = *data++);
-#endif /* BYTE_ORDER == LITTLE_ENDIAN */
-        T2 = Sigma0_256(a) + Maj(a, b, c);
-        h = g;
-        g = f;
-        f = e;
-        e = d + T1;
-        d = c;
-        c = b;
-        b = a;
-        a = T1 + T2;
-
-        j++;
-    } while (j < 16);
-
-    do {
-        /* Part of the message block expansion: */
-        s0 = W256[(j+1)&0x0f];
-        s0 = sigma0_256(s0);
-        s1 = W256[(j+14)&0x0f];
-        s1 = sigma1_256(s1);
-
-        /* Apply the SHA-256 compression function to update a..h */
-        T1 = h + Sigma1_256(e) + Ch(e, f, g) + K256[j] +
-             (W256[j&0x0f] += s1 + W256[(j+9)&0x0f] + s0);
-        T2 = Sigma0_256(a) + Maj(a, b, c);
-        h = g;
-        g = f;
-        f = e;
-        e = d + T1;
-        d = c;
-        c = b;
-        b = a;
-        a = T1 + T2;
-
-        j++;
-    } while (j < 64);
-
-    /* Compute the current intermediate hash value */
-    context->state[0] += a;
-    context->state[1] += b;
-    context->state[2] += c;
-    context->state[3] += d;
-    context->state[4] += e;
-    context->state[5] += f;
-    context->state[6] += g;
-    context->state[7] += h;
-
-    /* Clean up */
-    a = b = c = d = e = f = g = h = T1 = T2 = 0;
-}
-
-#endif /* SHA2_UNROLL_TRANSFORM */
-
-void SHA256_Update(SHA256_CTX* context, const sha2_byte *data, size_t len) {
-    unsigned int    freespace, usedspace;
-
-    if (len == 0) {
-        /* Calling with no data is valid - we do nothing */
-        return;
-    }
-
-    /* Sanity check: */
-    assert(context != (SHA256_CTX*)0 && data != (sha2_byte*)0);
-
-    usedspace = (context->bitcount >> 3) % SHA256_BLOCK_LENGTH;
-    if (usedspace > 0) {
-        /* Calculate how much free space is available in the buffer */
-        freespace = SHA256_BLOCK_LENGTH - usedspace;
-
-        if (len >= freespace) {
-            /* Fill the buffer completely and process it */
-            MEMCPY_BCOPY(&context->buffer[usedspace], data, freespace);
-            context->bitcount += freespace << 3;
-            len -= freespace;
-            data += freespace;
-            SHA256_Transform(context, (sha2_word32*)context->buffer);
-        } else {
-            /* The buffer is not yet full */
-            MEMCPY_BCOPY(&context->buffer[usedspace], data, len);
-            context->bitcount += len << 3;
-            /* Clean up: */
-            usedspace = freespace = 0;
-            return;
-        }
-    }
-    while (len >= SHA256_BLOCK_LENGTH) {
-        /* Process as many complete blocks as we can */
-        SHA256_Transform(context, (sha2_word32*)data);
-        context->bitcount += SHA256_BLOCK_LENGTH << 3;
-        len -= SHA256_BLOCK_LENGTH;
-        data += SHA256_BLOCK_LENGTH;
-    }
-    if (len > 0) {
-        /* There's left-overs, so save 'em */
-        MEMCPY_BCOPY(context->buffer, data, len);
-        context->bitcount += len << 3;
-    }
-    /* Clean up: */
-    usedspace = freespace = 0;
-}
-
-void SHA256_Final(sha2_byte digest[], SHA256_CTX* context) {
-    sha2_word32    *d = (sha2_word32*)digest;
-    unsigned int    usedspace;
-
-    /* Sanity check: */
-    assert(context != (SHA256_CTX*)0);
-
-    /* If no digest buffer is passed, we don't bother doing this: */
-    if (digest != (sha2_byte*)0) {
-        usedspace = (context->bitcount >> 3) % SHA256_BLOCK_LENGTH;
-#if BYTE_ORDER == LITTLE_ENDIAN
-        /* Convert FROM host byte order */
-        REVERSE64(context->bitcount,context->bitcount);
-#endif
-        if (usedspace > 0) {
-            /* Begin padding with a 1 bit: */
-            context->buffer[usedspace++] = 0x80;
-
-            if (usedspace <= SHA256_SHORT_BLOCK_LENGTH) {
-                /* Set-up for the last transform: */
-                MEMSET_BZERO(&context->buffer[usedspace], SHA256_SHORT_BLOCK_LENGTH - usedspace);
-            } else {
-                if (usedspace < SHA256_BLOCK_LENGTH) {
-                    MEMSET_BZERO(&context->buffer[usedspace], SHA256_BLOCK_LENGTH - usedspace);
-                }
-                /* Do second-to-last transform: */
-                SHA256_Transform(context, (sha2_word32*)context->buffer);
-
-                /* And set-up for the last transform: */
-                MEMSET_BZERO(context->buffer, SHA256_SHORT_BLOCK_LENGTH);
-            }
-        } else {
-            /* Set-up for the last transform: */
-            MEMSET_BZERO(context->buffer, SHA256_SHORT_BLOCK_LENGTH);
-
-            /* Begin padding with a 1 bit: */
-            *context->buffer = 0x80;
-        }
-        /* Set the bit count: */
-        *(sha2_word64*)&context->buffer[SHA256_SHORT_BLOCK_LENGTH] = context->bitcount;
-
-        /* Final transform: */
-        SHA256_Transform(context, (sha2_word32*)context->buffer);
-
-#if BYTE_ORDER == LITTLE_ENDIAN
-        {
-            /* Convert TO host byte order */
-            int    j;
-            for (j = 0; j < 8; j++) {
-                REVERSE32(context->state[j],context->state[j]);
-                *d++ = context->state[j];
-            }
-        }
-#else
-        MEMCPY_BCOPY(d, context->state, SHA256_DIGEST_LENGTH);
-#endif
-    }
-
-    /* Clean up state data: */
-    MEMSET_BZERO(context, sizeof(SHA256_CTX));
-    usedspace = 0;
-}
-
-char *SHA256_End(SHA256_CTX* context, char buffer[]) {
-    sha2_byte    digest[SHA256_DIGEST_LENGTH], *d = digest;
-    int        i;
-
-    /* Sanity check: */
-    assert(context != (SHA256_CTX*)0);
-
-    if (buffer != (char*)0) {
-        SHA256_Final(digest, context);
-
-        for (i = 0; i < SHA256_DIGEST_LENGTH; i++) {
-            *buffer++ = sha2_hex_digits[(*d & 0xf0) >> 4];
-            *buffer++ = sha2_hex_digits[*d & 0x0f];
-            d++;
-        }
-        *buffer = (char)0;
-    } else {
-        MEMSET_BZERO(context, sizeof(SHA256_CTX));
-    }
-    MEMSET_BZERO(digest, SHA256_DIGEST_LENGTH);
-    return buffer;
-}
-
-char* SHA256_Data(const sha2_byte* data, size_t len, char digest[SHA256_DIGEST_STRING_LENGTH]) {
-    SHA256_CTX    context;
-
-    SHA256_Init(&context);
-    SHA256_Update(&context, data, len);
-    return SHA256_End(&context, digest);
-}
-
-
-/*** SHA-512: *********************************************************/
-void SHA512_Init(SHA512_CTX* context) {
-    if (context == (SHA512_CTX*)0) {
-        return;
-    }
-    MEMCPY_BCOPY(context->state, sha512_initial_hash_value, SHA512_DIGEST_LENGTH);
-    MEMSET_BZERO(context->buffer, SHA512_BLOCK_LENGTH);
-    context->bitcount[0] = context->bitcount[1] =  0;
-}
-
-#ifdef SHA2_UNROLL_TRANSFORM
-
-/* Unrolled SHA-512 round macros: */
-#if BYTE_ORDER == LITTLE_ENDIAN
-
-#define ROUND512_0_TO_15(a,b,c,d,e,f,g,h)    \
-    REVERSE64(*data++, W512[j]); \
-    T1 = (h) + Sigma1_512(e) + Ch((e), (f), (g)) + \
-             K512[j] + W512[j]; \
-    (d) += T1, \
-    (h) = T1 + Sigma0_512(a) + Maj((a), (b), (c)), \
-    j++
-
-
-#else /* BYTE_ORDER == LITTLE_ENDIAN */
-
-#define ROUND512_0_TO_15(a,b,c,d,e,f,g,h)    \
-    T1 = (h) + Sigma1_512(e) + Ch((e), (f), (g)) + \
-             K512[j] + (W512[j] = *data++); \
-    (d) += T1; \
-    (h) = T1 + Sigma0_512(a) + Maj((a), (b), (c)); \
-    j++
-
-#endif /* BYTE_ORDER == LITTLE_ENDIAN */
-
-#define ROUND512(a,b,c,d,e,f,g,h)    \
-    s0 = W512[(j+1)&0x0f]; \
-    s0 = sigma0_512(s0); \
-    s1 = W512[(j+14)&0x0f]; \
-    s1 = sigma1_512(s1); \
-    T1 = (h) + Sigma1_512(e) + Ch((e), (f), (g)) + K512[j] + \
-             (W512[j&0x0f] += s1 + W512[(j+9)&0x0f] + s0); \
-    (d) += T1; \
-    (h) = T1 + Sigma0_512(a) + Maj((a), (b), (c)); \
-    j++
-
-void SHA512_Transform(SHA512_CTX* context, const sha2_word64* data) {
-    sha2_word64    a, b, c, d, e, f, g, h, s0, s1;
-    sha2_word64    T1, *W512 = (sha2_word64*)context->buffer;
-    int        j;
-
-    /* Initialize registers with the prev. intermediate value */
-    a = context->state[0];
-    b = context->state[1];
-    c = context->state[2];
-    d = context->state[3];
-    e = context->state[4];
-    f = context->state[5];
-    g = context->state[6];
-    h = context->state[7];
-
-    j = 0;
-    do {
-        ROUND512_0_TO_15(a,b,c,d,e,f,g,h);
-        ROUND512_0_TO_15(h,a,b,c,d,e,f,g);
-        ROUND512_0_TO_15(g,h,a,b,c,d,e,f);
-        ROUND512_0_TO_15(f,g,h,a,b,c,d,e);
-        ROUND512_0_TO_15(e,f,g,h,a,b,c,d);
-        ROUND512_0_TO_15(d,e,f,g,h,a,b,c);
-        ROUND512_0_TO_15(c,d,e,f,g,h,a,b);
-        ROUND512_0_TO_15(b,c,d,e,f,g,h,a);
-    } while (j < 16);
-
-    /* Now for the remaining rounds up to 79: */
-    do {
-        ROUND512(a,b,c,d,e,f,g,h);
-        ROUND512(h,a,b,c,d,e,f,g);
-        ROUND512(g,h,a,b,c,d,e,f);
-        ROUND512(f,g,h,a,b,c,d,e);
-        ROUND512(e,f,g,h,a,b,c,d);
-        ROUND512(d,e,f,g,h,a,b,c);
-        ROUND512(c,d,e,f,g,h,a,b);
-        ROUND512(b,c,d,e,f,g,h,a);
-    } while (j < 80);
-
-    /* Compute the current intermediate hash value */
-    context->state[0] += a;
-    context->state[1] += b;
-    context->state[2] += c;
-    context->state[3] += d;
-    context->state[4] += e;
-    context->state[5] += f;
-    context->state[6] += g;
-    context->state[7] += h;
-
-    /* Clean up */
-    a = b = c = d = e = f = g = h = T1 = 0;
-}
-
-#else /* SHA2_UNROLL_TRANSFORM */
-
-void SHA512_Transform(SHA512_CTX* context, const sha2_word64* data) {
-    sha2_word64    a, b, c, d, e, f, g, h, s0, s1;
-    sha2_word64    T1, T2, *W512 = (sha2_word64*)context->buffer;
-    int        j;
-
-    /* Initialize registers with the prev. intermediate value */
-    a = context->state[0];
-    b = context->state[1];
-    c = context->state[2];
-    d = context->state[3];
-    e = context->state[4];
-    f = context->state[5];
-    g = context->state[6];
-    h = context->state[7];
-
-    j = 0;
-    do {
-#if BYTE_ORDER == LITTLE_ENDIAN
-        /* Convert TO host byte order */
-        REVERSE64(*data++, W512[j]);
-        /* Apply the SHA-512 compression function to update a..h */
-        T1 = h + Sigma1_512(e) + Ch(e, f, g) + K512[j] + W512[j];
-#else /* BYTE_ORDER == LITTLE_ENDIAN */
-        /* Apply the SHA-512 compression function to update a..h with copy */
-        T1 = h + Sigma1_512(e) + Ch(e, f, g) + K512[j] + (W512[j] = *data++);
-#endif /* BYTE_ORDER == LITTLE_ENDIAN */
-        T2 = Sigma0_512(a) + Maj(a, b, c);
-        h = g;
-        g = f;
-        f = e;
-        e = d + T1;
-        d = c;
-        c = b;
-        b = a;
-        a = T1 + T2;
-
-        j++;
-    } while (j < 16);
-
-    do {
-        /* Part of the message block expansion: */
-        s0 = W512[(j+1)&0x0f];
-        s0 = sigma0_512(s0);
-        s1 = W512[(j+14)&0x0f];
-        s1 =  sigma1_512(s1);
-
-        /* Apply the SHA-512 compression function to update a..h */
-        T1 = h + Sigma1_512(e) + Ch(e, f, g) + K512[j] +
-             (W512[j&0x0f] += s1 + W512[(j+9)&0x0f] + s0);
-        T2 = Sigma0_512(a) + Maj(a, b, c);
-        h = g;
-        g = f;
-        f = e;
-        e = d + T1;
-        d = c;
-        c = b;
-        b = a;
-        a = T1 + T2;
-
-        j++;
-    } while (j < 80);
-
-    /* Compute the current intermediate hash value */
-    context->state[0] += a;
-    context->state[1] += b;
-    context->state[2] += c;
-    context->state[3] += d;
-    context->state[4] += e;
-    context->state[5] += f;
-    context->state[6] += g;
-    context->state[7] += h;
-
-    /* Clean up */
-    a = b = c = d = e = f = g = h = T1 = T2 = 0;
-}
-
-#endif /* SHA2_UNROLL_TRANSFORM */
-
-void SHA512_Update(SHA512_CTX* context, const sha2_byte *data, size_t len) {
-    unsigned int    freespace, usedspace;
-
-    if (len == 0) {
-        /* Calling with no data is valid - we do nothing */
-        return;
-    }
-
-    /* Sanity check: */
-    assert(context != (SHA512_CTX*)0 && data != (sha2_byte*)0);
-
-    usedspace = (context->bitcount[0] >> 3) % SHA512_BLOCK_LENGTH;
-    if (usedspace > 0) {
-        /* Calculate how much free space is available in the buffer */
-        freespace = SHA512_BLOCK_LENGTH - usedspace;
-
-        if (len >= freespace) {
-            /* Fill the buffer completely and process it */
-            MEMCPY_BCOPY(&context->buffer[usedspace], data, freespace);
-            ADDINC128(context->bitcount, freespace << 3);
-            len -= freespace;
-            data += freespace;
-            SHA512_Transform(context, (sha2_word64*)context->buffer);
-        } else {
-            /* The buffer is not yet full */
-            MEMCPY_BCOPY(&context->buffer[usedspace], data, len);
-            ADDINC128(context->bitcount, len << 3);
-            /* Clean up: */
-            usedspace = freespace = 0;
-            return;
-        }
-    }
-    while (len >= SHA512_BLOCK_LENGTH) {
-        /* Process as many complete blocks as we can */
-        SHA512_Transform(context, (sha2_word64*)data);
-        ADDINC128(context->bitcount, SHA512_BLOCK_LENGTH << 3);
-        len -= SHA512_BLOCK_LENGTH;
-        data += SHA512_BLOCK_LENGTH;
-    }
-    if (len > 0) {
-        /* There's left-overs, so save 'em */
-        MEMCPY_BCOPY(context->buffer, data, len);
-        ADDINC128(context->bitcount, len << 3);
-    }
-    /* Clean up: */
-    usedspace = freespace = 0;
-}
-
-void SHA512_Last(SHA512_CTX* context) {
-    unsigned int    usedspace;
-
-    usedspace = (context->bitcount[0] >> 3) % SHA512_BLOCK_LENGTH;
-#if BYTE_ORDER == LITTLE_ENDIAN
-    /* Convert FROM host byte order */
-    REVERSE64(context->bitcount[0],context->bitcount[0]);
-    REVERSE64(context->bitcount[1],context->bitcount[1]);
-#endif
-    if (usedspace > 0) {
-        /* Begin padding with a 1 bit: */
-        context->buffer[usedspace++] = 0x80;
-
-        if (usedspace <= SHA512_SHORT_BLOCK_LENGTH) {
-            /* Set-up for the last transform: */
-            MEMSET_BZERO(&context->buffer[usedspace], SHA512_SHORT_BLOCK_LENGTH - usedspace);
-        } else {
-            if (usedspace < SHA512_BLOCK_LENGTH) {
-                MEMSET_BZERO(&context->buffer[usedspace], SHA512_BLOCK_LENGTH - usedspace);
-            }
-            /* Do second-to-last transform: */
-            SHA512_Transform(context, (sha2_word64*)context->buffer);
-
-            /* And set-up for the last transform: */
-            MEMSET_BZERO(context->buffer, SHA512_BLOCK_LENGTH - 2);
-        }
-    } else {
-        /* Prepare for final transform: */
-        MEMSET_BZERO(context->buffer, SHA512_SHORT_BLOCK_LENGTH);
-
-        /* Begin padding with a 1 bit: */
-        *context->buffer = 0x80;
-    }
-    /* Store the length of input data (in bits): */
-    *(sha2_word64*)&context->buffer[SHA512_SHORT_BLOCK_LENGTH] = context->bitcount[1];
-    *(sha2_word64*)&context->buffer[SHA512_SHORT_BLOCK_LENGTH+8] = context->bitcount[0];
-
-    /* Final transform: */
-    SHA512_Transform(context, (sha2_word64*)context->buffer);
-}
-
-void SHA512_Final(sha2_byte digest[], SHA512_CTX* context) {
-    sha2_word64    *d = (sha2_word64*)digest;
-
-    /* Sanity check: */
-    assert(context != (SHA512_CTX*)0);
-
-    /* If no digest buffer is passed, we don't bother doing this: */
-    if (digest != (sha2_byte*)0) {
-        SHA512_Last(context);
-
-        /* Save the hash data for output: */
-#if BYTE_ORDER == LITTLE_ENDIAN
-        {
-            /* Convert TO host byte order */
-            int    j;
-            for (j = 0; j < 8; j++) {
-                REVERSE64(context->state[j],context->state[j]);
-                *d++ = context->state[j];
-            }
-        }
-#else
-        MEMCPY_BCOPY(d, context->state, SHA512_DIGEST_LENGTH);
-#endif
-    }
-
-    /* Zero out state data */
-    MEMSET_BZERO(context, sizeof(SHA512_CTX));
-}
-
-char *SHA512_End(SHA512_CTX* context, char buffer[]) {
-    sha2_byte    digest[SHA512_DIGEST_LENGTH], *d = digest;
-    int        i;
-
-    /* Sanity check: */
-    assert(context != (SHA512_CTX*)0);
-
-    if (buffer != (char*)0) {
-        SHA512_Final(digest, context);
-
-        for (i = 0; i < SHA512_DIGEST_LENGTH; i++) {
-            *buffer++ = sha2_hex_digits[(*d & 0xf0) >> 4];
-            *buffer++ = sha2_hex_digits[*d & 0x0f];
-            d++;
-        }
-        *buffer = (char)0;
-    } else {
-        MEMSET_BZERO(context, sizeof(SHA512_CTX));
-    }
-    MEMSET_BZERO(digest, SHA512_DIGEST_LENGTH);
-    return buffer;
-}
-
-char* SHA512_Data(const sha2_byte* data, size_t len, char digest[SHA512_DIGEST_STRING_LENGTH]) {
-    SHA512_CTX    context;
-
-    SHA512_Init(&context);
-    SHA512_Update(&context, data, len);
-    return SHA512_End(&context, digest);
-}
-
-
-/*** SHA-384: *********************************************************/
-void SHA384_Init(SHA384_CTX* context) {
-    if (context == (SHA384_CTX*)0) {
-        return;
-    }
-    MEMCPY_BCOPY(context->state, sha384_initial_hash_value, SHA512_DIGEST_LENGTH);
-    MEMSET_BZERO(context->buffer, SHA384_BLOCK_LENGTH);
-    context->bitcount[0] = context->bitcount[1] = 0;
-}
-
-void SHA384_Update(SHA384_CTX* context, const sha2_byte* data, size_t len) {
-    SHA512_Update((SHA512_CTX*)context, data, len);
-}
-
-void SHA384_Final(sha2_byte digest[], SHA384_CTX* context) {
-    sha2_word64    *d = (sha2_word64*)digest;
-
-    /* Sanity check: */
-    assert(context != (SHA384_CTX*)0);
-
-    /* If no digest buffer is passed, we don't bother doing this: */
-    if (digest != (sha2_byte*)0) {
-        SHA512_Last((SHA512_CTX*)context);
-
-        /* Save the hash data for output: */
-#if BYTE_ORDER == LITTLE_ENDIAN
-        {
-            /* Convert TO host byte order */
-            int    j;
-            for (j = 0; j < 6; j++) {
-                REVERSE64(context->state[j],context->state[j]);
-                *d++ = context->state[j];
-            }
-        }
-#else
-        MEMCPY_BCOPY(d, context->state, SHA384_DIGEST_LENGTH);
-#endif
-    }
-
-    /* Zero out state data */
-    MEMSET_BZERO(context, sizeof(SHA384_CTX));
-}
-
-char *SHA384_End(SHA384_CTX* context, char buffer[]) {
-    sha2_byte    digest[SHA384_DIGEST_LENGTH], *d = digest;
-    int        i;
-
-    /* Sanity check: */
-    assert(context != (SHA384_CTX*)0);
-
-    if (buffer != (char*)0) {
-        SHA384_Final(digest, context);
-
-        for (i = 0; i < SHA384_DIGEST_LENGTH; i++) {
-            *buffer++ = sha2_hex_digits[(*d & 0xf0) >> 4];
-            *buffer++ = sha2_hex_digits[*d & 0x0f];
-            d++;
-        }
-        *buffer = (char)0;
-    } else {
-        MEMSET_BZERO(context, sizeof(SHA384_CTX));
-    }
-    MEMSET_BZERO(digest, SHA384_DIGEST_LENGTH);
-    return buffer;
-}
-
-char* SHA384_Data(const sha2_byte* data, size_t len, char digest[SHA384_DIGEST_STRING_LENGTH]) {
-    SHA384_CTX    context;
-
-    SHA384_Init(&context);
-    SHA384_Update(&context, data, len);
-    return SHA384_End(&context, digest);
-}
-
diff --git a/src/hash/sha2.h b/src/hash/sha2.h
deleted file mode 100644 (file)
index 4f202a4..0000000
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * FILE:       sha2.h
- * AUTHOR:     Aaron D. Gifford - http://www.aarongifford.com/
- *
- * Copyright (c) 2000-2001, Aaron D. Gifford
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. 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.
- * 3. Neither the name of the copyright holder nor the names of contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTOR(S) ``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 AUTHOR OR CONTRIBUTOR(S) 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.
- */
-
-/*
- * DO NOT EDIT sha2.h or sha2.c
- * the only changes are listed here:
- * -- removed the source control id line from above since n/a
- * -- changed sha2.c const static to static const to squelch warnings
- * -- added config.h foo
- */
-
-#ifndef __SHA2_H__
-#define __SHA2_H__
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Import u_intXX_t size_t type definitions from system headers.  You
- * may need to change this, or define these things yourself in this
- * file.
- */
-#include <sys/types.h>
-
-#ifdef SHA2_USE_INTTYPES_H
-
-#include <inttypes.h>
-
-#endif /* SHA2_USE_INTTYPES_H */
-
-/*** SHA-256/384/512 Various Length Definitions ***********************/
-#define SHA256_BLOCK_LENGTH     64
-#define SHA256_DIGEST_LENGTH        32
-#define SHA256_DIGEST_STRING_LENGTH (SHA256_DIGEST_LENGTH * 2 + 1)
-#define SHA384_BLOCK_LENGTH     128
-#define SHA384_DIGEST_LENGTH        48
-#define SHA384_DIGEST_STRING_LENGTH (SHA384_DIGEST_LENGTH * 2 + 1)
-#define SHA512_BLOCK_LENGTH     128
-#define SHA512_DIGEST_LENGTH        64
-#define SHA512_DIGEST_STRING_LENGTH (SHA512_DIGEST_LENGTH * 2 + 1)
-
-/*** SHA-256/384/512 Context Structures *******************************/
-/* NOTE: If your architecture does not define either u_intXX_t types or
- * uintXX_t (from inttypes.h), you may need to define things by hand
- * for your system:
- */
-#if 0
-typedef unsigned char u_int8_t;     /* 1-byte  (8-bits)  */
-typedef unsigned int u_int32_t;     /* 4-bytes (32-bits) */
-typedef unsigned long long u_int64_t;   /* 8-bytes (64-bits) */
-#endif
-/*
- * Most BSD systems already define u_intXX_t types, as does Linux.
- * Some systems, however, like Compaq's Tru64 Unix instead can use
- * uintXX_t types defined by very recent ANSI C standards and included
- * in the file:
- *
- *   #include <inttypes.h>
- *
- * If you choose to use <inttypes.h> then please define:
- *
- *   #define SHA2_USE_INTTYPES_H
- *
- * Or on the command line during compile:
- *
- *   cc -DSHA2_USE_INTTYPES_H ...
- */
-#ifdef SHA2_USE_INTTYPES_H
-
-typedef struct _SHA256_CTX
-{
-    uint32_t state[8];
-    uint64_t bitcount;
-    uint8_t buffer[SHA256_BLOCK_LENGTH];
-} SHA256_CTX;
-typedef struct _SHA512_CTX
-{
-    uint64_t state[8];
-    uint64_t bitcount[2];
-    uint8_t buffer[SHA512_BLOCK_LENGTH];
-} SHA512_CTX;
-
-#else /* SHA2_USE_INTTYPES_H */
-
-typedef struct _SHA256_CTX
-{
-    u_int32_t state[8];
-    u_int64_t bitcount;
-    u_int8_t buffer[SHA256_BLOCK_LENGTH];
-} SHA256_CTX;
-typedef struct _SHA512_CTX
-{
-    u_int64_t state[8];
-    u_int64_t bitcount[2];
-    u_int8_t buffer[SHA512_BLOCK_LENGTH];
-} SHA512_CTX;
-
-#endif /* SHA2_USE_INTTYPES_H */
-
-typedef SHA512_CTX SHA384_CTX;
-
-/*** SHA-256/384/512 Function Prototypes ******************************/
-#ifndef NOPROTO
-#ifdef SHA2_USE_INTTYPES_H
-
-void SHA256_Init(SHA256_CTX*);
-void SHA256_Update(SHA256_CTX*, const uint8_t*, size_t);
-void SHA256_Final(uint8_t[SHA256_DIGEST_LENGTH], SHA256_CTX*);
-char* SHA256_End(SHA256_CTX*, char[SHA256_DIGEST_STRING_LENGTH]);
-char* SHA256_Data(const uint8_t*, size_t, char[SHA256_DIGEST_STRING_LENGTH]);
-
-void SHA384_Init(SHA384_CTX*);
-void SHA384_Update(SHA384_CTX*, const uint8_t*, size_t);
-void SHA384_Final(uint8_t[SHA384_DIGEST_LENGTH], SHA384_CTX*);
-char* SHA384_End(SHA384_CTX*, char[SHA384_DIGEST_STRING_LENGTH]);
-char* SHA384_Data(const uint8_t*, size_t, char[SHA384_DIGEST_STRING_LENGTH]);
-
-void SHA512_Init(SHA512_CTX*);
-void SHA512_Update(SHA512_CTX*, const uint8_t*, size_t);
-void SHA512_Final(uint8_t[SHA512_DIGEST_LENGTH], SHA512_CTX*);
-char* SHA512_End(SHA512_CTX*, char[SHA512_DIGEST_STRING_LENGTH]);
-char* SHA512_Data(const uint8_t*, size_t, char[SHA512_DIGEST_STRING_LENGTH]);
-
-#else /* SHA2_USE_INTTYPES_H */
-
-void SHA256_Init(SHA256_CTX*);
-void SHA256_Update(SHA256_CTX*, const u_int8_t*, size_t);
-void SHA256_Final(u_int8_t[SHA256_DIGEST_LENGTH], SHA256_CTX*);
-char* SHA256_End(SHA256_CTX*, char[SHA256_DIGEST_STRING_LENGTH]);
-char* SHA256_Data(const u_int8_t*, size_t, char[SHA256_DIGEST_STRING_LENGTH]);
-
-void 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*);
-char* SHA384_End(SHA384_CTX*, char[SHA384_DIGEST_STRING_LENGTH]);
-char* SHA384_Data(const u_int8_t*, size_t, char[SHA384_DIGEST_STRING_LENGTH]);
-
-void SHA512_Init(SHA512_CTX*);
-void SHA512_Update(SHA512_CTX*, const u_int8_t*, size_t);
-void SHA512_Final(u_int8_t[SHA512_DIGEST_LENGTH], SHA512_CTX*);
-char* SHA512_End(SHA512_CTX*, char[SHA512_DIGEST_STRING_LENGTH]);
-char* SHA512_Data(const u_int8_t*, size_t, char[SHA512_DIGEST_STRING_LENGTH]);
-
-#endif /* SHA2_USE_INTTYPES_H */
-
-#else /* NOPROTO */
-
-void SHA256_Init();
-void SHA256_Update();
-void SHA256_Final();
-char* SHA256_End();
-char* SHA256_Data();
-
-void SHA384_Init();
-void SHA384_Update();
-void SHA384_Final();
-char* SHA384_End();
-char* SHA384_Data();
-
-void SHA512_Init();
-void SHA512_Update();
-void SHA512_Final();
-char* SHA512_End();
-char* SHA512_Data();
-
-#endif /* NOPROTO */
-
-#ifdef  __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __SHA2_H__ */
-
index 8221afbd458dacee218f1b5acd8379628bd67fce..1d1942923e9d01a1231026b9cf8b91a5eedf9e35 100644 (file)
@@ -33,6 +33,7 @@
 #include <limits.h>
 #include <luajit.h>
 #include <netdb.h>
+#include <openssl/crypto.h>
 #include <pcap.h>
 #include <pcre.h>
 #include <pwd.h>
@@ -44,9 +45,6 @@
 #include <unistd.h>
 #include <zlib.h>
 
-#ifdef HAVE_OPENSSL_SHA
-#include <openssl/crypto.h>
-#endif
 
 #ifdef HAVE_LZMA
 #include <lzma.h>
@@ -138,9 +136,7 @@ int DisplayBanner()
 #ifdef HAVE_LZMA
     LogMessage("           Using LZMA version %s\n", lzma_version_string());
 #endif
-#ifdef HAVE_OPENSSL_SHA
     LogMessage("           Using %s\n", SSLeay_version(SSLEAY_VERSION));
-#endif
 #ifdef HAVE_HYPERSCAN
     LogMessage("           Using Hyperscan version %s\n", hs_version());
 #endif