From bb81ac778fd08d51dc785eca8e58d294924bb549 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Thu, 19 Dec 2024 14:02:08 -0300 Subject: [PATCH] 3rdparty: patch BLAKE2 sources to not export anything in static builds This could cause conflicts with other users of these algorithms, notably libb2 itself. Though if you're using libb2, you shouldn't be using the un-optimized copy inside QtCore... I've updated the SHA1 of the last commit in the repository, but there were no changes to our sources. [ChangeLog][Third-Party Code] Fixed a bug that caused the BLAKE2 symbols to be visible from QtCore in a static build. If you need to use the BLAKE2 hashing algorithm in your own code, either use QCryptographicHash or import libb2 into your build environment. Using libb2 remains the recommended solution for all systems, especially those for which it has optimized (vectorized) implementations. Fixes: QTBUG-132347 Change-Id: I48003b58cef0d8bcc720fffdd89b0f151fd102e3 Reviewed-by: Linus Jahn Reviewed-by: Marc Mutz (cherry picked from commit b884fbf10237547e809745f528978942faf0e5f6) Reviewed-by: Qt Cherry-pick Bot (cherry picked from commit d39c493390202faaa51e4f8ccede82acfdf07f5e) --- ...c-so-it-cant-be-exported-from-QtCore.patch | 67 +++++++++++++++++++ src/3rdparty/blake2/REUSE.toml | 2 +- src/3rdparty/blake2/qt_attribution.json | 6 +- src/3rdparty/blake2/src/blake2.h | 26 +++---- src/corelib/tools/qcryptographichash.cpp | 5 ++ 5 files changed, 89 insertions(+), 17 deletions(-) create mode 100644 src/3rdparty/blake2/0001-mark-the-API-static-so-it-cant-be-exported-from-QtCore.patch diff --git a/src/3rdparty/blake2/0001-mark-the-API-static-so-it-cant-be-exported-from-QtCore.patch b/src/3rdparty/blake2/0001-mark-the-API-static-so-it-cant-be-exported-from-QtCore.patch new file mode 100644 index 00000000000..bfa4adbcdf1 --- /dev/null +++ b/src/3rdparty/blake2/0001-mark-the-API-static-so-it-cant-be-exported-from-QtCore.patch @@ -0,0 +1,67 @@ +From eb08d0a94e6f64c2ba78536c00c654102ed5cc41 Mon Sep 17 00:00:00 2001 +From: Thiago Macieira +Date: Thu, 19 Dec 2024 14:02:08 -0300 +Subject: mark the API static so it can't be exported + from QtCore + +This affects static builds, where symbol visibility doesn't apply. +--- + src/3rdparty/blake2/src/blake2.h | 28 ++++++++++++++-------------- + 1 file changed, 14 insertions(+), 14 deletions(-) + +diff --git a/src/3rdparty/blake2/src/blake2.h b/src/3rdparty/blake2/src/blake2.h +index ca390305e60..0a90a9d2294 100644 +--- a/src/3rdparty/blake2/src/blake2.h ++++ b/src/3rdparty/blake2/src/blake2.h +@@ -142,17 +142,17 @@ extern "C" { + }; + + /* Streaming API */ +- int blake2s_init( blake2s_state *S, size_t outlen ); +- int blake2s_init_key( blake2s_state *S, size_t outlen, const void *key, size_t keylen ); +- int blake2s_init_param( blake2s_state *S, const blake2s_param *P ); +- int blake2s_update( blake2s_state *S, const void *in, size_t inlen ); +- int blake2s_final( blake2s_state *S, void *out, size_t outlen ); +- +- int blake2b_init( blake2b_state *S, size_t outlen ); +- int blake2b_init_key( blake2b_state *S, size_t outlen, const void *key, size_t keylen ); +- int blake2b_init_param( blake2b_state *S, const blake2b_param *P ); +- int blake2b_update( blake2b_state *S, const void *in, size_t inlen ); +- int blake2b_final( blake2b_state *S, void *out, size_t outlen ); ++ static int blake2s_init( blake2s_state *S, size_t outlen ); ++ static int blake2s_init_key( blake2s_state *S, size_t outlen, const void *key, size_t keylen ); ++ static int blake2s_init_param( blake2s_state *S, const blake2s_param *P ); ++ static int blake2s_update( blake2s_state *S, const void *in, size_t inlen ); ++ static int blake2s_final( blake2s_state *S, void *out, size_t outlen ); ++ ++ static int blake2b_init( blake2b_state *S, size_t outlen ); ++ static int blake2b_init_key( blake2b_state *S, size_t outlen, const void *key, size_t keylen ); ++ static int blake2b_init_param( blake2b_state *S, const blake2b_param *P ); ++ static int blake2b_update( blake2b_state *S, const void *in, size_t inlen ); ++ static int blake2b_final( blake2b_state *S, void *out, size_t outlen ); + + int blake2sp_init( blake2sp_state *S, size_t outlen ); + int blake2sp_init_key( blake2sp_state *S, size_t outlen, const void *key, size_t keylen ); +@@ -176,8 +176,8 @@ extern "C" { + int blake2xb_final(blake2xb_state *S, void *out, size_t outlen); + + /* Simple API */ +- int blake2s( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ); +- int blake2b( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ); ++ static int blake2s( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ); ++ static int blake2b( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ); + + int blake2sp( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ); + int blake2bp( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ); +@@ -186,7 +186,7 @@ extern "C" { + int blake2xb( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ); + + /* This is simply an alias for blake2b */ +- int blake2( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ); ++ static int blake2( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ); + + #if defined(__cplusplus) + } +-- +2.47.1 + diff --git a/src/3rdparty/blake2/REUSE.toml b/src/3rdparty/blake2/REUSE.toml index 114b6a49ef6..b36de512eaf 100644 --- a/src/3rdparty/blake2/REUSE.toml +++ b/src/3rdparty/blake2/REUSE.toml @@ -1,7 +1,7 @@ version = 1 [[annotations]] -path = ["src/blake2b-ref.c", "src/blake2s-ref.c", "src/blake2.h", "src/blake2-impl.h"] +path = ["src/blake2b-ref.c", "src/blake2s-ref.c", "src/blake2.h", "src/blake2-impl.h", "0001-mark-the-API-static-so-it-cant-be-exported-from-QtCore.patch"] comment = "Copyright line mixed with other text." precedence = "override" SPDX-FileCopyrightText = "Copyright 2012, Samuel Neves " diff --git a/src/3rdparty/blake2/qt_attribution.json b/src/3rdparty/blake2/qt_attribution.json index 1b79392b05f..99302219390 100644 --- a/src/3rdparty/blake2/qt_attribution.json +++ b/src/3rdparty/blake2/qt_attribution.json @@ -7,9 +7,9 @@ "Description": "BLAKE2 is a cryptographic hash function faster than MD5, SHA-1, SHA-2, and SHA-3, yet is at least as secure as the latest standard SHA-3.", "Homepage": "https://blake2.net/", - "Version": "54f4faa4c16ea34bcd59d16e8da46a64b259fc07", - "DownloadLocation": "https://github.com/BLAKE2/BLAKE2/tree/54f4faa4c16ea34bcd59d16e8da46a64b259fc07", - "PURL": "pkg:github/BLAKE2/BLAKE2@54f4faa4c16ea34bcd59d16e8da46a64b259fc07", + "Version": "ed1974ea83433eba7b2d95c5dcd9ac33cb847913", + "DownloadLocation": "https://github.com/BLAKE2/BLAKE2/tree/ed1974ea83433eba7b2d95c5dcd9ac33cb847913", + "PURL": "pkg:github/BLAKE2/BLAKE2@ed1974ea83433eba7b2d95c5dcd9ac33cb847913", "CPE": "cpe:2.3:a:blake2:blake2:*:*:*:*:*:*:*:*", "License": "Creative Commons Zero v1.0 Universal or Apache License 2.0", "LicenseId": "CC0-1.0 OR Apache-2.0", diff --git a/src/3rdparty/blake2/src/blake2.h b/src/3rdparty/blake2/src/blake2.h index ca390305e60..0a90a9d2294 100644 --- a/src/3rdparty/blake2/src/blake2.h +++ b/src/3rdparty/blake2/src/blake2.h @@ -142,17 +142,17 @@ extern "C" { }; /* Streaming API */ - int blake2s_init( blake2s_state *S, size_t outlen ); - int blake2s_init_key( blake2s_state *S, size_t outlen, const void *key, size_t keylen ); - int blake2s_init_param( blake2s_state *S, const blake2s_param *P ); - int blake2s_update( blake2s_state *S, const void *in, size_t inlen ); - int blake2s_final( blake2s_state *S, void *out, size_t outlen ); + static int blake2s_init( blake2s_state *S, size_t outlen ); + static int blake2s_init_key( blake2s_state *S, size_t outlen, const void *key, size_t keylen ); + static int blake2s_init_param( blake2s_state *S, const blake2s_param *P ); + static int blake2s_update( blake2s_state *S, const void *in, size_t inlen ); + static int blake2s_final( blake2s_state *S, void *out, size_t outlen ); - int blake2b_init( blake2b_state *S, size_t outlen ); - int blake2b_init_key( blake2b_state *S, size_t outlen, const void *key, size_t keylen ); - int blake2b_init_param( blake2b_state *S, const blake2b_param *P ); - int blake2b_update( blake2b_state *S, const void *in, size_t inlen ); - int blake2b_final( blake2b_state *S, void *out, size_t outlen ); + static int blake2b_init( blake2b_state *S, size_t outlen ); + static int blake2b_init_key( blake2b_state *S, size_t outlen, const void *key, size_t keylen ); + static int blake2b_init_param( blake2b_state *S, const blake2b_param *P ); + static int blake2b_update( blake2b_state *S, const void *in, size_t inlen ); + static int blake2b_final( blake2b_state *S, void *out, size_t outlen ); int blake2sp_init( blake2sp_state *S, size_t outlen ); int blake2sp_init_key( blake2sp_state *S, size_t outlen, const void *key, size_t keylen ); @@ -176,8 +176,8 @@ extern "C" { int blake2xb_final(blake2xb_state *S, void *out, size_t outlen); /* Simple API */ - int blake2s( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ); - int blake2b( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ); + static int blake2s( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ); + static int blake2b( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ); int blake2sp( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ); int blake2bp( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ); @@ -186,7 +186,7 @@ extern "C" { int blake2xb( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ); /* This is simply an alias for blake2b */ - int blake2( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ); + static int blake2( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen ); #if defined(__cplusplus) } diff --git a/src/corelib/tools/qcryptographichash.cpp b/src/corelib/tools/qcryptographichash.cpp index aefb91abecb..a38e9c2d3b1 100644 --- a/src/corelib/tools/qcryptographichash.cpp +++ b/src/corelib/tools/qcryptographichash.cpp @@ -111,8 +111,13 @@ static inline int SHA384_512AddLength(SHA512Context *context, unsigned int lengt #if QT_CONFIG(system_libb2) #include #else +QT_WARNING_PUSH +QT_WARNING_DISABLE_CLANG("-Wunused-function") +QT_WARNING_DISABLE_GCC("-Wunused-function") +QT_WARNING_DISABLE_MSVC(4505) #include "../../3rdparty/blake2/src/blake2b-ref.c" #include "../../3rdparty/blake2/src/blake2s-ref.c" +QT_WARNING_POP #endif #endif // QT_CRYPTOGRAPHICHASH_ONLY_SHA1