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
Pick-to: 6.8
Change-Id: I48003b58cef0d8bcc720fffdd89b0f151fd102e3
Reviewed-by: Linus Jahn <lnj@kaidan.im>
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
(cherry picked from commit b884fbf10237547e809745f528978942faf0e5f6)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Thiago Macieira 2024-12-19 14:02:08 -03:00 committed by Qt Cherry-pick Bot
parent b79b2edde8
commit d39c493390
5 changed files with 89 additions and 17 deletions

View File

@ -0,0 +1,67 @@
From eb08d0a94e6f64c2ba78536c00c654102ed5cc41 Mon Sep 17 00:00:00 2001
From: Thiago Macieira <thiago.macieira@intel.com>
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

View File

@ -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 <sneves@dei.uc.pt>"

View File

@ -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",

View File

@ -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)
}

View File

@ -111,8 +111,13 @@ static inline int SHA384_512AddLength(SHA512Context *context, unsigned int lengt
#if QT_CONFIG(system_libb2)
#include <blake2.h>
#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