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

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