diff --git a/.github/workflows/build-win32.yml b/.github/workflows/build-win32.yml index 2715926..48c4cbb 100644 --- a/.github/workflows/build-win32.yml +++ b/.github/workflows/build-win32.yml @@ -28,7 +28,7 @@ jobs: echo "VERSION=/D `"VERSION=\`"3proxy-$RELEASE\`"`"" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append echo "BUILDDATE=/D `"BUILDDATE=\`"$NOW\`"`"" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append - name: install packages - run: vcpkg install pcre2:x86-windows-static wolfssl[opensslcompat]:x86-windows-static + run: vcpkg install pcre2:x86-windows-static wolfssl:x86-windows-static - name: Add msbuild to PATH uses: microsoft/setup-msbuild@v3 - name: make Windows MSVC diff --git a/.github/workflows/build-win64.yml b/.github/workflows/build-win64.yml index 291b064..b3623f0 100644 --- a/.github/workflows/build-win64.yml +++ b/.github/workflows/build-win64.yml @@ -29,7 +29,7 @@ jobs: echo "VERSION=/D `"VERSION=\`"3proxy-$RELEASE\`"`"" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append echo "BUILDDATE=/D `"BUILDDATE=\`"$NOW\`"`"" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append - name: install packages - run: vcpkg install pcre2:x64-windows-static wolfssl[opensslcompat]:x64-windows-static + run: vcpkg install pcre2:x64-windows-static wolfssl:x64-windows-static - name: Add msbuild to PATH uses: microsoft/setup-msbuild@v3 - name: make Windows MSVC diff --git a/.github/workflows/build-winarm64.yml b/.github/workflows/build-winarm64.yml index d84ab33..59c110c 100644 --- a/.github/workflows/build-winarm64.yml +++ b/.github/workflows/build-winarm64.yml @@ -28,7 +28,7 @@ jobs: echo "VERSION=/D `"VERSION=\`"3proxy-$RELEASE\`"`"" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append echo "BUILDDATE=/D `"BUILDDATE=\`"$NOW\`"`"" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append - name: install packages - run: vcpkg install pcre2:arm64-windows-static wolfssl[opensslcompat]:arm64-windows-static + run: vcpkg install pcre2:arm64-windows-static wolfssl:arm64-windows-static - name: Add msbuild to PATH uses: microsoft/setup-msbuild@v3 - name: make Windows MSVC diff --git a/.github/workflows/c-cpp-Windows.yml b/.github/workflows/c-cpp-Windows.yml index 7ba7056..382dd88 100644 --- a/.github/workflows/c-cpp-Windows.yml +++ b/.github/workflows/c-cpp-Windows.yml @@ -21,7 +21,7 @@ jobs: steps: - uses: actions/checkout@v7 - name: install Windows libraries - run: vcpkg install pcre2:x64-windows wolfssl[opensslcompat]:x64-windows-static && c:\msys64\usr\bin\pacman.exe -S --noconfirm mingw-w64-x86_64-pcre2 mingw-w64-x86_64-wolfssl + run: vcpkg install pcre2:x64-windows wolfssl:x64-windows-static && c:\msys64\usr\bin\pacman.exe -S --noconfirm mingw-w64-x86_64-pcre2 mingw-w64-x86_64-wolfssl - name: make Windows run: make -f Makefile.win env: diff --git a/CMakeLists.txt b/CMakeLists.txt index 77bdf40..24912a0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -351,15 +351,8 @@ set(3PROXY_CORE_SOURCES src/stringtable.c ) -# BLAKE2 source for 3proxy_crypt (bundled reference impl; wolfSSL provides -# BLAKE2b natively via wc_Blake2b* when WITH_WOLFSSL is enabled) -if(3PROXY_SSL_WOLFSSL) - set(MD_SOURCES) -else() - set(MD_SOURCES - src/libs/blake2b-ref.c - ) -endif() +# Bundled hash implementations (md4.c, md5.c, blake2b-ref.c) self-disable +# via preprocessor guards when wolfSSL provides them natively. # ============================================================================ # Object libraries for common sources (shared between executables) @@ -378,15 +371,9 @@ target_include_directories(common_obj PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src) add_library(base64_obj OBJECT src/base64.c) target_include_directories(base64_obj PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src) -# mdhash object library (MD4/MD5: CAPI on Windows, bundled Solar Designer MD4/MD5 elsewhere, -# wolfSSL when WITH_WOLFSSL is enabled) -if(WIN32) - add_library(mdhash_obj OBJECT src/mdhash.c) -elseif(3PROXY_SSL_WOLFSSL) - add_library(mdhash_obj OBJECT src/mdhash.c) -else() - add_library(mdhash_obj OBJECT src/mdhash.c src/libs/md4.c src/libs/md5.c) -endif() +# mdhash object library. md4.c/md5.c self-disable via NO_MD4/NO_MD5 guards +# when wolfSSL provides them; always compiled for fallback. +add_library(mdhash_obj OBJECT src/mdhash.c src/libs/md4.c src/libs/md5.c src/libs/blake2b-ref.c) target_include_directories(mdhash_obj PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src) if(3PROXY_SSL_WOLFSSL) target_include_directories(mdhash_obj PRIVATE ${WOLFSSL_INCLUDE_DIR}) @@ -461,7 +448,6 @@ add_executable(3proxy $ $ ) -target_sources(3proxy PRIVATE ${MD_SOURCES}) if(3PROXY_SSL_ENABLED) target_sources(3proxy PRIVATE src/ssllib.c src/ssl.c) @@ -586,7 +572,6 @@ add_executable(3proxy_crypt $ $ ) -target_sources(3proxy_crypt PRIVATE ${MD_SOURCES}) target_compile_definitions(3proxy_crypt PRIVATE WITHMAIN) target_include_directories(3proxy_crypt PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src diff --git a/Makefile.FreeBSD b/Makefile.FreeBSD index e049233..c47bd3f 100644 --- a/Makefile.FreeBSD +++ b/Makefile.FreeBSD @@ -74,11 +74,6 @@ ifeq ($(PAM_CHECK), true) PLUGINS += PamAuth endif -ifeq ($(WOLFSSL_CHECK), true) - BUNDLED_HASH_OBJS = -else - BUNDLED_HASH_OBJS = md4$(OBJSUFFICS) md5$(OBJSUFFICS) blake2$(OBJSUFFICS) -endif include Makefile.inc DESTDIR ?= diff --git a/Makefile.Linux b/Makefile.Linux index 519a0b0..7071d32 100644 --- a/Makefile.Linux +++ b/Makefile.Linux @@ -77,11 +77,6 @@ PAM_CHECK ?= $(shell echo "\#include \\n int main(){return ifeq ($(PAM_CHECK), true) PLUGINS += PamAuth endif -ifeq ($(WOLFSSL_CHECK), true) - BUNDLED_HASH_OBJS = -else - BUNDLED_HASH_OBJS = md4$(OBJSUFFICS) md5$(OBJSUFFICS) blake2$(OBJSUFFICS) -endif include Makefile.inc allplugins: diff --git a/Makefile.Solaris b/Makefile.Solaris index 771f42a..2140a37 100644 --- a/Makefile.Solaris +++ b/Makefile.Solaris @@ -51,11 +51,6 @@ ifeq ($(PCRE_CHECK), true) PCRE_LIBS = -Wl,-Bstatic -lpcre2-8 -Wl,-Bdynamic endif -ifeq ($(WOLFSSL_CHECK), true) - BUNDLED_HASH_OBJS = -else - BUNDLED_HASH_OBJS = md4$(OBJSUFFICS) md5$(OBJSUFFICS) blake2$(OBJSUFFICS) -endif include Makefile.inc allplugins: diff --git a/Makefile.msvc b/Makefile.msvc index 0e051e0..e412722 100644 --- a/Makefile.msvc +++ b/Makefile.msvc @@ -14,11 +14,9 @@ BUILDDATE = $(BUILDDATE) !IFDEF WOLFSSL SSL_DEFS = /D "WITH_SSL" /D "WITH_WOLFSSL" SSL_LIBS = wolfssl.lib -BUNDLED_HASH_OBJS = !ELSE SSL_DEFS = /D "WITH_SSL" SSL_LIBS = libcrypto.lib libssl.lib -BUNDLED_HASH_OBJS = blake2$(OBJSUFFICS) !ENDIF CFLAGS = /nologo /MT /W3 /Ox /GS /EHs- /GA /GF /D "MSVC" /D "WITH_WSAPOLL" /D "NDEBUG" /D "WIN32" $(SSL_DEFS) /D "WITH_PCRE" /D "WITH_ODBC" /D "_CONSOLE" /D "_MBCS" /D "_WIN32" /Fp"proxy.pch" /FD /c $(BUILDDATE) $(VERSION) COUT = /Fo diff --git a/Makefile.unix b/Makefile.unix index 21bf403..ae66fa2 100644 --- a/Makefile.unix +++ b/Makefile.unix @@ -76,11 +76,6 @@ ifeq ($(PAM_CHECK), true) PLUGINS += PamAuth endif -ifeq ($(WOLFSSL_CHECK), true) - BUNDLED_HASH_OBJS = -else - BUNDLED_HASH_OBJS = md4$(OBJSUFFICS) md5$(OBJSUFFICS) blake2$(OBJSUFFICS) -endif include Makefile.inc DESTDIR ?= diff --git a/Makefile.win b/Makefile.win index 609ee87..195e43a 100644 --- a/Makefile.win +++ b/Makefile.win @@ -48,9 +48,7 @@ ifeq ($(WOLFSSL_CHECK), true) CFLAGS += -DWITH_SSL -DWITH_WOLFSSL SSL_OBJS = ssllib$(OBJSUFFICS) ssl$(OBJSUFFICS) ZLIB := - BUNDLED_HASH_OBJS = else - BUNDLED_HASH_OBJS = blake2$(OBJSUFFICS) OPENSSL_CHECK = $(shell echo "\#include \\n int main(){return 0;}" | tr -d '\\\\' | $(CC) -x c $(CFLAGS) $(LDFLAGS) $(STATIC_PREFIX) $(ZLIB) -l crypto -l ssl $(STATIC_SUFFIX) -o testssl - 2>/dev/null && rm testssl && echo true||echo false) ifeq ($(OPENSSL_CHECK), true) LIBS += $(STATIC_PREFIX) $(ZLIB) -l crypto -l ssl $(STATIC_SUFFIX) -lcrypt32 diff --git a/src/Makefile.inc b/src/Makefile.inc index 08561e6..a76d2f7 100644 --- a/src/Makefile.inc +++ b/src/Makefile.inc @@ -164,8 +164,8 @@ md4$(OBJSUFFICS): libs/md4.c libs/md4.h md5$(OBJSUFFICS): libs/md5.c libs/md5.h $(CC) $(COUT)md5$(OBJSUFFICS) $(CFLAGS) libs/md5.c -$(BUILDDIR)$(CRYPT_PREFIX)crypt$(EXESUFFICS): $(BUNDLED_HASH_OBJS) 3proxy_cryptmain$(OBJSUFFICS) base64$(OBJSUFFICS) mdhash$(OBJSUFFICS) - $(LN) $(LNOUT)$(BUILDDIR)$(CRYPT_PREFIX)crypt$(EXESUFFICS) $(LDFLAGS) $(BUNDLED_HASH_OBJS) base64$(OBJSUFFICS) mdhash$(OBJSUFFICS) 3proxy_cryptmain$(OBJSUFFICS) $(LIBS) +$(BUILDDIR)$(CRYPT_PREFIX)crypt$(EXESUFFICS): md4$(OBJSUFFICS) md5$(OBJSUFFICS) blake2$(OBJSUFFICS) 3proxy_cryptmain$(OBJSUFFICS) base64$(OBJSUFFICS) mdhash$(OBJSUFFICS) + $(LN) $(LNOUT)$(BUILDDIR)$(CRYPT_PREFIX)crypt$(EXESUFFICS) $(LDFLAGS) md4$(OBJSUFFICS) md5$(OBJSUFFICS) blake2$(OBJSUFFICS) base64$(OBJSUFFICS) mdhash$(OBJSUFFICS) 3proxy_cryptmain$(OBJSUFFICS) $(LIBS) stringtable$(OBJSUFFICS): stringtable.c $(CC) $(COUT)stringtable$(OBJSUFFICS) $(CFLAGS) stringtable.c @@ -179,6 +179,6 @@ ssl$(OBJSUFFICS): ssl.c structures.h proxy.h ssl.h pcre$(OBJSUFFICS): pcre.c structures.h $(CC) $(COUT)pcre$(OBJSUFFICS) $(CFLAGS) $(DEFINEOPTION)WITH_PCRE pcre.c -$(BUILDDIR)3proxy$(EXESUFFICS): 3proxy$(OBJSUFFICS) mainfunc$(OBJSUFFICS) srvproxy$(OBJSUFFICS) srvpop3p$(OBJSUFFICS) srvsmtpp$(OBJSUFFICS) srvftppr$(OBJSUFFICS) srvsocks$(OBJSUFFICS) srvtcppm$(OBJSUFFICS) srvtlspr$(OBJSUFFICS) srvauto$(OBJSUFFICS) srvudppm$(OBJSUFFICS) sockmap$(OBJSUFFICS) udpsockmap$(OBJSUFFICS) sockgetchar$(OBJSUFFICS) common$(OBJSUFFICS) auth$(OBJSUFFICS) acl$(OBJSUFFICS) limiter$(OBJSUFFICS) redirect$(OBJSUFFICS) authradius$(OBJSUFFICS) hash$(OBJSUFFICS) hashtables$(OBJSUFFICS) resolve$(OBJSUFFICS) sql$(OBJSUFFICS) conf$(OBJSUFFICS) log$(OBJSUFFICS) datatypes$(OBJSUFFICS) $(BUNDLED_HASH_OBJS) 3proxy_crypt$(OBJSUFFICS) base64$(OBJSUFFICS) ftp$(OBJSUFFICS) stringtable$(OBJSUFFICS) srvwebadmin$(OBJSUFFICS) srvdnspr$(OBJSUFFICS) plugins$(OBJSUFFICS) mdhash$(OBJSUFFICS) $(SSL_OBJS) $(PCRE_OBJS) $(COMPATLIBS) $(VERSIONDEP) - $(LN) $(LNOUT)$(BUILDDIR)3proxy$(EXESUFFICS) $(LDFLAGS) $(VERFILE) 3proxy$(OBJSUFFICS) mainfunc$(OBJSUFFICS) auth$(OBJSUFFICS) acl$(OBJSUFFICS) limiter$(OBJSUFFICS) redirect$(OBJSUFFICS) authradius$(OBJSUFFICS) hash$(OBJSUFFICS) hashtables$(OBJSUFFICS) resolve$(OBJSUFFICS) sql$(OBJSUFFICS) conf$(OBJSUFFICS) datatypes$(OBJSUFFICS) srvauto$(OBJSUFFICS) srvproxy$(OBJSUFFICS) srvpop3p$(OBJSUFFICS) srvsmtpp$(OBJSUFFICS) srvftppr$(OBJSUFFICS) srvsocks$(OBJSUFFICS) srvtcppm$(OBJSUFFICS) srvtlspr$(OBJSUFFICS) srvudppm$(OBJSUFFICS) sockmap$(OBJSUFFICS) udpsockmap$(OBJSUFFICS) sockgetchar$(OBJSUFFICS) common$(OBJSUFFICS) log$(OBJSUFFICS) 3proxy_crypt$(OBJSUFFICS) $(BUNDLED_HASH_OBJS) base64$(OBJSUFFICS) ftp$(OBJSUFFICS) stringtable$(OBJSUFFICS) srvwebadmin$(OBJSUFFICS) srvdnspr$(OBJSUFFICS) plugins$(OBJSUFFICS) mdhash$(OBJSUFFICS) $(SSL_OBJS) $(PCRE_OBJS) $(COMPATLIBS) $(LIBS) $(PCRE_LIBS) +$(BUILDDIR)3proxy$(EXESUFFICS): 3proxy$(OBJSUFFICS) mainfunc$(OBJSUFFICS) srvproxy$(OBJSUFFICS) srvpop3p$(OBJSUFFICS) srvsmtpp$(OBJSUFFICS) srvftppr$(OBJSUFFICS) srvsocks$(OBJSUFFICS) srvtcppm$(OBJSUFFICS) srvtlspr$(OBJSUFFICS) srvauto$(OBJSUFFICS) srvudppm$(OBJSUFFICS) sockmap$(OBJSUFFICS) udpsockmap$(OBJSUFFICS) sockgetchar$(OBJSUFFICS) common$(OBJSUFFICS) auth$(OBJSUFFICS) acl$(OBJSUFFICS) limiter$(OBJSUFFICS) redirect$(OBJSUFFICS) authradius$(OBJSUFFICS) hash$(OBJSUFFICS) hashtables$(OBJSUFFICS) resolve$(OBJSUFFICS) sql$(OBJSUFFICS) conf$(OBJSUFFICS) log$(OBJSUFFICS) datatypes$(OBJSUFFICS) md4$(OBJSUFFICS) md5$(OBJSUFFICS) blake2$(OBJSUFFICS) 3proxy_crypt$(OBJSUFFICS) base64$(OBJSUFFICS) ftp$(OBJSUFFICS) stringtable$(OBJSUFFICS) srvwebadmin$(OBJSUFFICS) srvdnspr$(OBJSUFFICS) plugins$(OBJSUFFICS) mdhash$(OBJSUFFICS) $(SSL_OBJS) $(PCRE_OBJS) $(COMPATLIBS) $(VERSIONDEP) + $(LN) $(LNOUT)$(BUILDDIR)3proxy$(EXESUFFICS) $(LDFLAGS) $(VERFILE) 3proxy$(OBJSUFFICS) mainfunc$(OBJSUFFICS) auth$(OBJSUFFICS) acl$(OBJSUFFICS) limiter$(OBJSUFFICS) redirect$(OBJSUFFICS) authradius$(OBJSUFFICS) hash$(OBJSUFFICS) hashtables$(OBJSUFFICS) resolve$(OBJSUFFICS) sql$(OBJSUFFICS) conf$(OBJSUFFICS) datatypes$(OBJSUFFICS) srvauto$(OBJSUFFICS) srvproxy$(OBJSUFFICS) srvpop3p$(OBJSUFFICS) srvsmtpp$(OBJSUFFICS) srvftppr$(OBJSUFFICS) srvsocks$(OBJSUFFICS) srvtcppm$(OBJSUFFICS) srvtlspr$(OBJSUFFICS) srvudppm$(OBJSUFFICS) sockmap$(OBJSUFFICS) udpsockmap$(OBJSUFFICS) sockgetchar$(OBJSUFFICS) common$(OBJSUFFICS) log$(OBJSUFFICS) 3proxy_crypt$(OBJSUFFICS) md4$(OBJSUFFICS) md5$(OBJSUFFICS) blake2$(OBJSUFFICS) base64$(OBJSUFFICS) ftp$(OBJSUFFICS) stringtable$(OBJSUFFICS) srvwebadmin$(OBJSUFFICS) srvdnspr$(OBJSUFFICS) plugins$(OBJSUFFICS) mdhash$(OBJSUFFICS) $(SSL_OBJS) $(PCRE_OBJS) $(COMPATLIBS) $(LIBS) $(PCRE_LIBS) diff --git a/src/libs/blake2b-ref.c b/src/libs/blake2b-ref.c index cd38b1b..1ba3fea 100644 --- a/src/libs/blake2b-ref.c +++ b/src/libs/blake2b-ref.c @@ -13,6 +13,12 @@ https://blake2.net. */ +#if defined(WITH_WOLFSSL) +#include +#endif + +#ifndef HAVE_BLAKE2B + #include #include #include @@ -377,3 +383,5 @@ fail: return -1; } #endif + +#endif /* !HAVE_BLAKE2B */ diff --git a/src/libs/md4.c b/src/libs/md4.c index e952081..33b16bf 100644 --- a/src/libs/md4.c +++ b/src/libs/md4.c @@ -35,6 +35,12 @@ * compile-time configuration. */ +#if defined(WITH_WOLFSSL) +#include +#endif + +#if !defined(WITH_WOLFSSL) || defined(NO_MD4) + #include #include "md4.h" @@ -266,3 +272,5 @@ void MD4_Final(unsigned char *result, MD4_CTX *ctx) memset(ctx, 0, sizeof(*ctx)); #endif } + +#endif /* !WITH_WOLFSSL || NO_MD4 */ diff --git a/src/libs/md4.h b/src/libs/md4.h index aa64985..57f1e2f 100644 --- a/src/libs/md4.h +++ b/src/libs/md4.h @@ -28,6 +28,9 @@ #ifdef WITH_WOLFSSL #include +#endif + +#if defined(WITH_WOLFSSL) && !defined(NO_MD4) #include #else diff --git a/src/libs/md5.c b/src/libs/md5.c index a6a7ed6..2dcfd70 100644 --- a/src/libs/md5.c +++ b/src/libs/md5.c @@ -35,6 +35,12 @@ * compile-time configuration. */ +#if defined(WITH_WOLFSSL) +#include +#endif + +#if !defined(WITH_WOLFSSL) || defined(NO_MD5) + #include #include "md5.h" @@ -285,3 +291,5 @@ void MD5_Final(unsigned char *result, MD5_CTX *ctx) memset(ctx, 0, sizeof(*ctx)); } + +#endif /* !WITH_WOLFSSL || NO_MD5 */ diff --git a/src/libs/md5.h b/src/libs/md5.h index d9f1dd7..461ee30 100644 --- a/src/libs/md5.h +++ b/src/libs/md5.h @@ -28,6 +28,9 @@ #ifdef WITH_WOLFSSL #include +#endif + +#if defined(WITH_WOLFSSL) && !defined(NO_MD5) #include #else diff --git a/src/mdhash.c b/src/mdhash.c index f144468..282b814 100644 --- a/src/mdhash.c +++ b/src/mdhash.c @@ -14,13 +14,19 @@ #include /* ----- BLAKE2 backend selection ----- */ +/* wolfSSL may provide BLAKE2 natively (HAVE_BLAKE2B). If not enabled + (e.g. vcpkg port), fall back to the bundled reference implementation. */ #ifdef WITH_WOLFSSL #include +#ifdef HAVE_BLAKE2B #include #define MDH_BLAKE2_BACKEND_WOLFSSL #else #include "libs/blake2.h" #endif +#else +#include "libs/blake2.h" +#endif /* ----- MD4/MD5 backend selection ----- */ #if defined(_WIN32) && !defined(WITH_WOLFSSL)