Blame SOURCES/0001-Add-support-for-computing-hashes-using-OpenSSL.patch

56f70c
From c56a7db62db6d62b53830f8f1af4d5a70e86d69f Mon Sep 17 00:00:00 2001
56f70c
From: Jaroslav Rohel <jrohel@redhat.com>
56f70c
Date: Fri, 25 Oct 2019 14:33:22 +0200
56f70c
Subject: [PATCH 1/3] Add support for computing hashes using OpenSSL
6e36fb
Brian Stinson d0f450
It adds WITH_OPENSSL build option.
Brian Stinson d0f450
If it is ON, OpenSSL will be used instead of internal implementation
Brian Stinson d0f450
of computing hashes (MD5, SHA1, SHA224, SHA256, SHA384, SHA512).
6e36fb
---
4d0d5d
 CMakeLists.txt       | 13 +++++++++++--
56f70c
 src/CMakeLists.txt   | 12 +++++++++---
6e36fb
 src/chksum.c         | 32 ++++++++++++++++++++++++++++++++
6e36fb
 tools/CMakeLists.txt |  2 +-
56f70c
 4 files changed, 53 insertions(+), 6 deletions(-)
6e36fb
6e36fb
diff --git a/CMakeLists.txt b/CMakeLists.txt
4d0d5d
index 3541f496..e73dc552 100644
6e36fb
--- a/CMakeLists.txt
6e36fb
+++ b/CMakeLists.txt
b7f621
@@ -40,6 +40,7 @@ OPTION (ENABLE_ZCHUNK_COMPRESSION "Build with zchunk compression support?" OFF)
6e36fb
 OPTION (WITH_SYSTEM_ZCHUNK "Use system zchunk library?" OFF)
6e36fb
 OPTION (WITH_LIBXML2  "Build with libxml2 instead of libexpat?" OFF)
Brian Stinson d0f450
 OPTION (WITHOUT_COOKIEOPEN "Disable the use of stdio cookie opens?" OFF)
6e36fb
+OPTION (WITH_OPENSSL "Use OpenSSL instead of internal implementation of hashes?" OFF)
6e36fb
 
Brian Stinson d0f450
 include (GNUInstallDirs)
Brian Stinson d0f450
 message (STATUS "Libraries will be installed in ${CMAKE_INSTALL_FULL_LIBDIR}")
4d0d5d
@@ -164,6 +165,11 @@ INCLUDE_DIRECTORIES (${EXPAT_INCLUDE_DIRS})
6e36fb
 ENDIF (WITH_LIBXML2 )
6e36fb
 ENDIF (ENABLE_RPMMD OR ENABLE_SUSEREPO OR ENABLE_APPDATA OR ENABLE_COMPS OR ENABLE_HELIXREPO OR ENABLE_MDKREPO)
6e36fb
 
6e36fb
+IF (WITH_OPENSSL)
6e36fb
+FIND_PACKAGE (OpenSSL REQUIRED)
6e36fb
+INCLUDE_DIRECTORIES (${OPENSSL_INCLUDE_DIR})
6e36fb
+ENDIF(WITH_OPENSSL)
6e36fb
+
6e36fb
 IF (ENABLE_ZLIB_COMPRESSION)
6e36fb
 FIND_PACKAGE (ZLIB REQUIRED)
6e36fb
 INCLUDE_DIRECTORIES (${ZLIB_INCLUDE_DIRS})
4d0d5d
@@ -288,8 +294,8 @@ ENDIF (${CMAKE_MAJOR_VERSION} GREATER 2)
4d0d5d
 
6e36fb
 # should create config.h with #cmakedefine instead...
6e36fb
 FOREACH (VAR HAVE_STRCHRNUL HAVE_FOPENCOOKIE HAVE_FUNOPEN WORDS_BIGENDIAN
4d0d5d
-  HAVE_RPM_DB_H HAVE_RPMDBNEXTITERATORHEADERBLOB HAVE_RPMDBFSTAT
b7f621
-  WITH_LIBXML2 WITHOUT_COOKIEOPEN)
4d0d5d
+  HAVE_RPM_DB_H HAVE_PGPDIGGETPARAMS HAVE_RPMDBNEXTITERATORHEADERBLOB HAVE_RPMDBFSTAT
b7f621
+  WITH_LIBXML2 WITHOUT_COOKIEOPEN WITH_OPENSSL)
6e36fb
   IF(${VAR})
6e36fb
     ADD_DEFINITIONS (-D${VAR}=1)
6e36fb
     SET (SWIG_FLAGS ${SWIG_FLAGS} -D${VAR})
4d0d5d
@@ -426,6 +432,9 @@ ENDIF (ENABLE_ZSTD_COMPRESSION)
6e36fb
 IF (WITH_SYSTEM_ZCHUNK)
6e36fb
 SET (SYSTEM_LIBRARIES ${SYSTEM_LIBRARIES} ${ZCHUNK_LIBRARIES})
6e36fb
 ENDIF (WITH_SYSTEM_ZCHUNK)
6e36fb
+IF (WITH_OPENSSL)
6e36fb
+SET (SYSTEM_LIBRARIES ${SYSTEM_LIBRARIES} ${OPENSSL_CRYPTO_LIBRARY})
6e36fb
+ENDIF (WITH_OPENSSL)
6e36fb
 IF (ENABLE_RPMDB)
6e36fb
 SET (SYSTEM_LIBRARIES ${RPMDB_LIBRARY} ${SYSTEM_LIBRARIES})
6e36fb
 ENDIF (ENABLE_RPMDB)
6e36fb
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
56f70c
index bbf30bac..6b5ea42b 100644
6e36fb
--- a/src/CMakeLists.txt
6e36fb
+++ b/src/CMakeLists.txt
6e36fb
@@ -18,9 +18,8 @@ SET (libsolv_SRCS
6e36fb
     solver.c solverdebug.c repo_solv.c repo_write.c evr.c pool.c
6e36fb
     queue.c repo.c repodata.c repopage.c util.c policy.c solvable.c
6e36fb
     transaction.c order.c rules.c problems.c linkedpkg.c cplxdeps.c
6e36fb
-    chksum.c md5.c sha1.c sha2.c solvversion.c selection.c
6e36fb
-    fileprovides.c diskusage.c suse.c solver_util.c cleandeps.c
6e36fb
-    userinstalled.c filelistfilter.c)
6e36fb
+    chksum.c solvversion.c selection.c fileprovides.c diskusage.c
6e36fb
+    suse.c solver_util.c cleandeps.c userinstalled.c filelistfilter.c)
6e36fb
 
6e36fb
 SET (libsolv_HEADERS
6e36fb
     bitmap.h evr.h hash.h policy.h poolarch.h poolvendor.h pool.h
56f70c
@@ -43,6 +42,10 @@ IF (WIN32)
Brian Stinson d0f450
     LIST (APPEND libsolv_SRCS ${WIN32_COMPAT_SOURCES})
Brian Stinson d0f450
 ENDIF (WIN32)
6e36fb
 
6e36fb
+IF (NOT WITH_OPENSSL)
6e36fb
+  SET (libsolv_SRCS ${libsolv_SRCS} md5.c sha1.c sha2.c)
6e36fb
+ENDIF (NOT WITH_OPENSSL)
Brian Stinson d0f450
+
6e36fb
 IF (HAVE_LINKER_VERSION_SCRIPT)
6e36fb
 SET (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${LINK_FLAGS} -Wl,--version-script=${CMAKE_SOURCE_DIR}/src/libsolv.ver")
6e36fb
 ENDIF (HAVE_LINKER_VERSION_SCRIPT)
56f70c
@@ -51,6 +54,9 @@ IF (DISABLE_SHARED)
56f70c
     ADD_LIBRARY (libsolv STATIC ${libsolv_SRCS})
6e36fb
 ELSE (DISABLE_SHARED)
56f70c
     ADD_LIBRARY (libsolv SHARED ${libsolv_SRCS})
56f70c
+    IF (WITH_OPENSSL)
56f70c
+        TARGET_LINK_LIBRARIES (libsolv ${OPENSSL_CRYPTO_LIBRARY})
56f70c
+    ENDIF (WITH_OPENSSL)
6e36fb
 ENDIF (DISABLE_SHARED)
6e36fb
 
4d0d5d
 IF (WIN32)
6e36fb
diff --git a/src/chksum.c b/src/chksum.c
Brian Stinson d0f450
index 1f8ab471..9189b744 100644
6e36fb
--- a/src/chksum.c
6e36fb
+++ b/src/chksum.c
6e36fb
@@ -15,10 +15,42 @@
6e36fb
 #include "util.h"
6e36fb
 #include "chksum.h"
6e36fb
 
6e36fb
+#ifdef WITH_OPENSSL
6e36fb
+
6e36fb
+#include <openssl/md5.h>
6e36fb
+#include <openssl/sha.h>
6e36fb
+
6e36fb
+typedef SHA_CTX SHA1_CTX;
6e36fb
+typedef SHA256_CTX SHA224_CTX;
6e36fb
+typedef SHA512_CTX SHA384_CTX;
6e36fb
+
6e36fb
+#define solv_MD5_Init(ctx) MD5_Init(ctx)
6e36fb
+#define solv_MD5_Update(ctx, data, len) MD5_Update(ctx, data, len)
6e36fb
+#define solv_MD5_Final(md, ctx) MD5_Final(md, ctx)
6e36fb
+#define solv_SHA1_Init(ctx) SHA1_Init(ctx)
6e36fb
+#define solv_SHA1_Update(ctx, data, len) SHA1_Update(ctx, data, len)
6e36fb
+#define solv_SHA1_Final(ctx, md) SHA1_Final(md, ctx)
6e36fb
+#define solv_SHA224_Init(ctx) SHA224_Init(ctx)
6e36fb
+#define solv_SHA224_Update(ctx, data, len) SHA224_Update(ctx, data, len)
6e36fb
+#define solv_SHA224_Final(md, ctx) SHA224_Final(md, ctx)
6e36fb
+#define solv_SHA256_Init(ctx) SHA256_Init(ctx)
6e36fb
+#define solv_SHA256_Update(ctx, data, len) SHA256_Update(ctx, data, len)
6e36fb
+#define solv_SHA256_Final(md, ctx) SHA256_Final(md, ctx)
6e36fb
+#define solv_SHA384_Init(ctx) SHA384_Init(ctx)
6e36fb
+#define solv_SHA384_Update(ctx, data, len) SHA384_Update(ctx, data, len)
6e36fb
+#define solv_SHA384_Final(md, ctx) SHA384_Final(md, ctx)
6e36fb
+#define solv_SHA512_Init(ctx) SHA512_Init(ctx)
6e36fb
+#define solv_SHA512_Update(ctx, data, len) SHA512_Update(ctx, data, len)
6e36fb
+#define solv_SHA512_Final(md, ctx) SHA512_Final(md, ctx)
6e36fb
+
6e36fb
+#else
6e36fb
+
6e36fb
 #include "md5.h"
6e36fb
 #include "sha1.h"
6e36fb
 #include "sha2.h"
6e36fb
 
6e36fb
+#endif
6e36fb
+
Brian Stinson d0f450
 #ifdef _WIN32
Brian Stinson d0f450
   #include "strfncs.h"
Brian Stinson d0f450
 #endif
6e36fb
diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt
Brian Stinson d0f450
index f19030eb..d477e195 100644
6e36fb
--- a/tools/CMakeLists.txt
6e36fb
+++ b/tools/CMakeLists.txt
Brian Stinson d0f450
@@ -116,7 +116,7 @@ SET(tools_list ${tools_list} repo2solv)
Brian Stinson d0f450
 ENDIF (NOT WIN32)
6e36fb
 
6e36fb
 ADD_EXECUTABLE (dumpsolv dumpsolv.c )
6e36fb
-TARGET_LINK_LIBRARIES (dumpsolv libsolv)
6e36fb
+TARGET_LINK_LIBRARIES (dumpsolv libsolv ${SYSTEM_LIBRARIES})
6e36fb
 
6e36fb
 ADD_EXECUTABLE (mergesolv mergesolv.c )
6e36fb
 TARGET_LINK_LIBRARIES (mergesolv toolstuff libsolvext libsolv ${SYSTEM_LIBRARIES})
b7f621
-- 
56f70c
2.31.1
b7f621