Skip to content

Commit 8e10473

Browse files
jroheljonathanspw
authored andcommitted
It adds WITH_OPENSSL build option.
If it is ON, OpenSSL will be used instead of internal implementation of computing hashes (MD5, SHA1, SHA224, SHA256, SHA384, SHA512).
1 parent 56f5ca0 commit 8e10473

5 files changed

Lines changed: 205 additions & 4 deletions

File tree

CMakeLists.txt

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ OPTION (ENABLE_ZCHUNK_COMPRESSION "Build with zchunk compression support?" OFF)
4242
OPTION (WITH_SYSTEM_ZCHUNK "Use system zchunk library?" OFF)
4343
OPTION (WITH_LIBXML2 "Build with libxml2 instead of libexpat?" OFF)
4444
OPTION (WITHOUT_COOKIEOPEN "Disable the use of stdio cookie opens?" OFF)
45+
OPTION (WITH_OPENSSL "Use OpenSSL instead of internal implementation of hashes?" OFF)
4546

4647
OPTION (ENABLE_STATIC_TOOLS "Link the tools against the static version of the libraries?" OFF)
4748
OPTION (ENABLE_STATIC_BINDINGS "Link the bindings against the static version of the libraries?" OFF)
@@ -173,6 +174,11 @@ INCLUDE_DIRECTORIES (${EXPAT_INCLUDE_DIRS})
173174
ENDIF (WITH_LIBXML2 )
174175
ENDIF (ENABLE_RPMMD OR ENABLE_SUSEREPO OR ENABLE_APPDATA OR ENABLE_COMPS OR ENABLE_HELIXREPO OR ENABLE_MDKREPO)
175176

177+
IF (WITH_OPENSSL)
178+
FIND_PACKAGE (OpenSSL REQUIRED)
179+
INCLUDE_DIRECTORIES (${OPENSSL_INCLUDE_DIR})
180+
ENDIF(WITH_OPENSSL)
181+
176182
IF (ENABLE_ZLIB_COMPRESSION)
177183
FIND_PACKAGE (ZLIB REQUIRED)
178184
INCLUDE_DIRECTORIES (${ZLIB_INCLUDE_DIRS})
@@ -292,8 +298,8 @@ check_linker_flag("-Wl,--version-script=${CMAKE_SOURCE_DIR}/src/libsolv.ver" HAV
292298

293299
# should create config.h with #cmakedefine instead...
294300
FOREACH (VAR HAVE_STRCHRNUL HAVE_FOPENCOOKIE HAVE_FUNOPEN WORDS_BIGENDIAN
295-
HAVE_RPM_DB_H HAVE_RPMDBNEXTITERATORHEADERBLOB HAVE_RPMDBFSTAT
296-
WITH_LIBXML2 WITHOUT_COOKIEOPEN)
301+
HAVE_RPM_DB_H HAVE_PGPDIGGETPARAMS HAVE_RPMDBNEXTITERATORHEADERBLOB HAVE_RPMDBFSTAT
302+
WITH_LIBXML2 WITHOUT_COOKIEOPEN WITH_OPENSSL)
297303
IF(${VAR})
298304
ADD_DEFINITIONS (-D${VAR}=1)
299305
SET (SWIG_FLAGS ${SWIG_FLAGS} -D${VAR})
@@ -432,6 +438,9 @@ ENDIF (ENABLE_ZSTD_COMPRESSION)
432438
IF (WITH_SYSTEM_ZCHUNK)
433439
SET (SYSTEM_LIBRARIES ${SYSTEM_LIBRARIES} ${ZCHUNK_LIBRARIES})
434440
ENDIF (WITH_SYSTEM_ZCHUNK)
441+
IF (WITH_OPENSSL)
442+
SET (SYSTEM_LIBRARIES ${SYSTEM_LIBRARIES} ${OPENSSL_CRYPTO_LIBRARY})
443+
ENDIF (WITH_OPENSSL)
435444
IF (ENABLE_RPMDB)
436445
SET (SYSTEM_LIBRARIES ${RPMDB_LIBRARY} ${SYSTEM_LIBRARIES})
437446
ENDIF (ENABLE_RPMDB)

patch.patch

Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
From: Jonathan Wright <[email protected]>
2+
Date: Fri Jun 6 16:47:14 2025 -0500
3+
Subject: Rebase patch to libsolv-0.7.32
4+
5+
From 49859c1ad32487de6adb65eedf4b81f021e1b0e8 Mon Sep 17 00:00:00 2001
6+
From: Jaroslav Rohel <[email protected]>
7+
Date: Fri, 25 Oct 2019 14:33:22 +0200
8+
Subject: [PATCH] Add support for computing hashes using OpenSSL
9+
10+
It adds WITH_OPENSSL build option.
11+
If it is ON, OpenSSL will be used instead of internal implementation
12+
of computing hashes (MD5, SHA1, SHA224, SHA256, SHA384, SHA512).
13+
14+
diff --git a/CMakeLists.txt b/CMakeLists.txt
15+
index 5ba5ed5..16750ae 100644
16+
--- a/CMakeLists.txt
17+
+++ b/CMakeLists.txt
18+
@@ -42,6 +42,7 @@ OPTION (ENABLE_ZCHUNK_COMPRESSION "Build with zchunk compression support?" OFF)
19+
OPTION (WITH_SYSTEM_ZCHUNK "Use system zchunk library?" OFF)
20+
OPTION (WITH_LIBXML2 "Build with libxml2 instead of libexpat?" OFF)
21+
OPTION (WITHOUT_COOKIEOPEN "Disable the use of stdio cookie opens?" OFF)
22+
+OPTION (WITH_OPENSSL "Use OpenSSL instead of internal implementation of hashes?" OFF)
23+
24+
OPTION (ENABLE_STATIC_TOOLS "Link the tools against the static version of the libraries?" OFF)
25+
OPTION (ENABLE_STATIC_BINDINGS "Link the bindings against the static version of the libraries?" OFF)
26+
@@ -173,6 +174,11 @@ INCLUDE_DIRECTORIES (${EXPAT_INCLUDE_DIRS})
27+
ENDIF (WITH_LIBXML2 )
28+
ENDIF (ENABLE_RPMMD OR ENABLE_SUSEREPO OR ENABLE_APPDATA OR ENABLE_COMPS OR ENABLE_HELIXREPO OR ENABLE_MDKREPO)
29+
30+
+IF (WITH_OPENSSL)
31+
+FIND_PACKAGE (OpenSSL REQUIRED)
32+
+INCLUDE_DIRECTORIES (${OPENSSL_INCLUDE_DIR})
33+
+ENDIF(WITH_OPENSSL)
34+
+
35+
IF (ENABLE_ZLIB_COMPRESSION)
36+
FIND_PACKAGE (ZLIB REQUIRED)
37+
INCLUDE_DIRECTORIES (${ZLIB_INCLUDE_DIRS})
38+
@@ -292,8 +298,8 @@ check_linker_flag("-Wl,--version-script=${CMAKE_SOURCE_DIR}/src/libsolv.ver" HAV
39+
40+
# should create config.h with #cmakedefine instead...
41+
FOREACH (VAR HAVE_STRCHRNUL HAVE_FOPENCOOKIE HAVE_FUNOPEN WORDS_BIGENDIAN
42+
- HAVE_RPM_DB_H HAVE_RPMDBNEXTITERATORHEADERBLOB HAVE_RPMDBFSTAT
43+
- WITH_LIBXML2 WITHOUT_COOKIEOPEN)
44+
+ HAVE_RPM_DB_H HAVE_PGPDIGGETPARAMS HAVE_RPMDBNEXTITERATORHEADERBLOB HAVE_RPMDBFSTAT
45+
+ WITH_LIBXML2 WITHOUT_COOKIEOPEN WITH_OPENSSL)
46+
IF(${VAR})
47+
ADD_DEFINITIONS (-D${VAR}=1)
48+
SET (SWIG_FLAGS ${SWIG_FLAGS} -D${VAR})
49+
@@ -432,6 +438,9 @@ ENDIF (ENABLE_ZSTD_COMPRESSION)
50+
IF (WITH_SYSTEM_ZCHUNK)
51+
SET (SYSTEM_LIBRARIES ${SYSTEM_LIBRARIES} ${ZCHUNK_LIBRARIES})
52+
ENDIF (WITH_SYSTEM_ZCHUNK)
53+
+IF (WITH_OPENSSL)
54+
+SET (SYSTEM_LIBRARIES ${SYSTEM_LIBRARIES} ${OPENSSL_CRYPTO_LIBRARY})
55+
+ENDIF (WITH_OPENSSL)
56+
IF (ENABLE_RPMDB)
57+
SET (SYSTEM_LIBRARIES ${RPMDB_LIBRARY} ${SYSTEM_LIBRARIES})
58+
ENDIF (ENABLE_RPMDB)
59+
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
60+
index 25ad09b..4265dfb 100644
61+
--- a/src/CMakeLists.txt
62+
+++ b/src/CMakeLists.txt
63+
@@ -18,7 +18,7 @@ SET (libsolv_SRCS
64+
solver.c solverdebug.c repo_solv.c repo_write.c evr.c pool.c
65+
queue.c repo.c repodata.c repopage.c util.c policy.c solvable.c
66+
transaction.c order.c rules.c problems.c linkedpkg.c cplxdeps.c
67+
- chksum.c md5.c sha1.c sha2.c solvversion.c selection.c
68+
+ chksum.c solvversion.c selection.c
69+
fileprovides.c diskusage.c suse.c solver_util.c cleandeps.c
70+
userinstalled.c filelistfilter.c decision.c)
71+
72+
@@ -47,6 +47,10 @@ IF (WIN32)
73+
LIST (APPEND libsolv_SRCS ${WIN32_COMPAT_SOURCES})
74+
ENDIF (WIN32)
75+
76+
+IF (NOT WITH_OPENSSL)
77+
+ SET (libsolv_SRCS ${libsolv_SRCS} md5.c sha1.c sha2.c)
78+
+ENDIF (NOT WITH_OPENSSL)
79+
+
80+
IF (HAVE_LINKER_VERSION_SCRIPT)
81+
SET (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${LINK_FLAGS} -Wl,--version-script=${CMAKE_SOURCE_DIR}/src/libsolv.ver")
82+
ENDIF (HAVE_LINKER_VERSION_SCRIPT)
83+
@@ -55,6 +59,9 @@ IF (DISABLE_SHARED)
84+
ADD_LIBRARY (libsolv STATIC ${libsolv_SRCS})
85+
ELSE (DISABLE_SHARED)
86+
ADD_LIBRARY (libsolv SHARED ${libsolv_SRCS})
87+
+ IF (WITH_OPENSSL)
88+
+ TARGET_LINK_LIBRARIES (libsolv ${OPENSSL_CRYPTO_LIBRARY})
89+
+ ENDIF (WITH_OPENSSL)
90+
ENDIF (DISABLE_SHARED)
91+
92+
IF (WIN32)
93+
diff --git a/src/chksum.c b/src/chksum.c
94+
index 1f8ab47..9189b74 100644
95+
--- a/src/chksum.c
96+
+++ b/src/chksum.c
97+
@@ -15,10 +15,42 @@
98+
#include "util.h"
99+
#include "chksum.h"
100+
101+
+#ifdef WITH_OPENSSL
102+
+
103+
+#include <openssl/md5.h>
104+
+#include <openssl/sha.h>
105+
+
106+
+typedef SHA_CTX SHA1_CTX;
107+
+typedef SHA256_CTX SHA224_CTX;
108+
+typedef SHA512_CTX SHA384_CTX;
109+
+
110+
+#define solv_MD5_Init(ctx) MD5_Init(ctx)
111+
+#define solv_MD5_Update(ctx, data, len) MD5_Update(ctx, data, len)
112+
+#define solv_MD5_Final(md, ctx) MD5_Final(md, ctx)
113+
+#define solv_SHA1_Init(ctx) SHA1_Init(ctx)
114+
+#define solv_SHA1_Update(ctx, data, len) SHA1_Update(ctx, data, len)
115+
+#define solv_SHA1_Final(ctx, md) SHA1_Final(md, ctx)
116+
+#define solv_SHA224_Init(ctx) SHA224_Init(ctx)
117+
+#define solv_SHA224_Update(ctx, data, len) SHA224_Update(ctx, data, len)
118+
+#define solv_SHA224_Final(md, ctx) SHA224_Final(md, ctx)
119+
+#define solv_SHA256_Init(ctx) SHA256_Init(ctx)
120+
+#define solv_SHA256_Update(ctx, data, len) SHA256_Update(ctx, data, len)
121+
+#define solv_SHA256_Final(md, ctx) SHA256_Final(md, ctx)
122+
+#define solv_SHA384_Init(ctx) SHA384_Init(ctx)
123+
+#define solv_SHA384_Update(ctx, data, len) SHA384_Update(ctx, data, len)
124+
+#define solv_SHA384_Final(md, ctx) SHA384_Final(md, ctx)
125+
+#define solv_SHA512_Init(ctx) SHA512_Init(ctx)
126+
+#define solv_SHA512_Update(ctx, data, len) SHA512_Update(ctx, data, len)
127+
+#define solv_SHA512_Final(md, ctx) SHA512_Final(md, ctx)
128+
+
129+
+#else
130+
+
131+
#include "md5.h"
132+
#include "sha1.h"
133+
#include "sha2.h"
134+
135+
+#endif
136+
+
137+
#ifdef _WIN32
138+
#include "strfncs.h"
139+
#endif
140+
diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt
141+
index 4b3548a..c405743 100644
142+
--- a/tools/CMakeLists.txt
143+
+++ b/tools/CMakeLists.txt
144+
@@ -19,7 +19,7 @@ ENDIF (WIN32)
145+
SET (tools_list testsolv mergesolv dumpsolv installcheck testsolv)
146+
147+
ADD_EXECUTABLE (dumpsolv dumpsolv.c )
148+
-TARGET_LINK_LIBRARIES (dumpsolv ${LIBSOLV_TOOLS_LIBRARY})
149+
+TARGET_LINK_LIBRARIES (dumpsolv ${LIBSOLV_TOOLS_LIBRARY} ${SYSTEM_LIBRARIES})
150+
151+
IF (ENABLE_RPMDB)
152+
ADD_EXECUTABLE (rpmdb2solv rpmdb2solv.c)
153+

src/CMakeLists.txt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ SET (libsolv_SRCS
1919
solver.c solverdebug.c repo_solv.c repo_write.c evr.c
2020
queue.c repo.c repodata.c repopage.c util.c policy.c solvable.c
2121
transaction.c order.c rules.c problems.c linkedpkg.c cplxdeps.c
22-
chksum.c md5.c sha1.c sha2.c solvversion.c selection.c
22+
chksum.c solvversion.c selection.c
2323
fileprovides.c diskusage.c suse.c solver_util.c cleandeps.c
2424
userinstalled.c filelistfilter.c decision.c)
2525

@@ -48,6 +48,10 @@ IF (WIN32)
4848
LIST (APPEND libsolv_SRCS ${WIN32_COMPAT_SOURCES})
4949
ENDIF (WIN32)
5050

51+
IF (NOT WITH_OPENSSL)
52+
SET (libsolv_SRCS ${libsolv_SRCS} md5.c sha1.c sha2.c)
53+
ENDIF (NOT WITH_OPENSSL)
54+
5155
IF (HAVE_LINKER_VERSION_SCRIPT)
5256
SET (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${LINK_FLAGS} -Wl,--version-script=${CMAKE_SOURCE_DIR}/src/libsolv.ver")
5357
ENDIF (HAVE_LINKER_VERSION_SCRIPT)
@@ -56,6 +60,9 @@ IF (DISABLE_SHARED)
5660
ADD_LIBRARY (libsolv STATIC ${libsolv_SRCS})
5761
ELSE (DISABLE_SHARED)
5862
ADD_LIBRARY (libsolv SHARED ${libsolv_SRCS})
63+
IF (WITH_OPENSSL)
64+
TARGET_LINK_LIBRARIES (libsolv ${OPENSSL_CRYPTO_LIBRARY})
65+
ENDIF (WITH_OPENSSL)
5966
ENDIF (DISABLE_SHARED)
6067

6168
IF (WIN32)

src/chksum.c

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,42 @@
1818
#include "util.h"
1919
#include "chksum.h"
2020

21+
#ifdef WITH_OPENSSL
22+
23+
#include <openssl/md5.h>
24+
#include <openssl/sha.h>
25+
26+
typedef SHA_CTX SHA1_CTX;
27+
typedef SHA256_CTX SHA224_CTX;
28+
typedef SHA512_CTX SHA384_CTX;
29+
30+
#define solv_MD5_Init(ctx) MD5_Init(ctx)
31+
#define solv_MD5_Update(ctx, data, len) MD5_Update(ctx, data, len)
32+
#define solv_MD5_Final(md, ctx) MD5_Final(md, ctx)
33+
#define solv_SHA1_Init(ctx) SHA1_Init(ctx)
34+
#define solv_SHA1_Update(ctx, data, len) SHA1_Update(ctx, data, len)
35+
#define solv_SHA1_Final(ctx, md) SHA1_Final(md, ctx)
36+
#define solv_SHA224_Init(ctx) SHA224_Init(ctx)
37+
#define solv_SHA224_Update(ctx, data, len) SHA224_Update(ctx, data, len)
38+
#define solv_SHA224_Final(md, ctx) SHA224_Final(md, ctx)
39+
#define solv_SHA256_Init(ctx) SHA256_Init(ctx)
40+
#define solv_SHA256_Update(ctx, data, len) SHA256_Update(ctx, data, len)
41+
#define solv_SHA256_Final(md, ctx) SHA256_Final(md, ctx)
42+
#define solv_SHA384_Init(ctx) SHA384_Init(ctx)
43+
#define solv_SHA384_Update(ctx, data, len) SHA384_Update(ctx, data, len)
44+
#define solv_SHA384_Final(md, ctx) SHA384_Final(md, ctx)
45+
#define solv_SHA512_Init(ctx) SHA512_Init(ctx)
46+
#define solv_SHA512_Update(ctx, data, len) SHA512_Update(ctx, data, len)
47+
#define solv_SHA512_Final(md, ctx) SHA512_Final(md, ctx)
48+
49+
#else
50+
2151
#include "md5.h"
2252
#include "sha1.h"
2353
#include "sha2.h"
2454

55+
#endif
56+
2557
#ifdef _WIN32
2658
#include "strfncs.h"
2759
#endif

tools/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ ENDIF (WIN32)
1919
SET (tools_list testsolv mergesolv dumpsolv installcheck testsolv)
2020

2121
ADD_EXECUTABLE (dumpsolv dumpsolv.c )
22-
TARGET_LINK_LIBRARIES (dumpsolv ${LIBSOLV_TOOLS_LIBRARY})
22+
TARGET_LINK_LIBRARIES (dumpsolv ${LIBSOLV_TOOLS_LIBRARY} ${SYSTEM_LIBRARIES})
2323

2424
IF (ENABLE_RPMDB)
2525
ADD_EXECUTABLE (rpmdb2solv rpmdb2solv.c)

0 commit comments

Comments
 (0)