Skip to content

Commit 32cf342

Browse files
Merge pull request #740 from fernandotonon/feat/windows-minisign-445
Enable Windows MinGW minisign verify (#445)
2 parents fb34113 + 4be0442 commit 32cf342

3 files changed

Lines changed: 64 additions & 14 deletions

File tree

cmake/Libsodium.cmake

Lines changed: 60 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,67 @@
11
# libsodium for minisign verify (#440 / #445).
2-
# Linux + macOS link static/system libsodium. Windows MinGW verify is deferred
3-
# (autotools/cmake build not wired in CI yet — download still runs, verify fails closed).
2+
# Linux + macOS: system pkg-config or autotools static build from source.
3+
# Windows MinGW: official prebuilt static libs (same 1.0.20-stable release).
44

55
if(TARGET qtmesh_sodium)
66
return()
77
endif()
88

9+
function(qtmesh_sodium_add_imported_static lib_path include_dir)
10+
add_library(qtmesh_sodium STATIC IMPORTED GLOBAL)
11+
set_target_properties(qtmesh_sodium PROPERTIES
12+
IMPORTED_LOCATION "${lib_path}"
13+
INTERFACE_INCLUDE_DIRECTORIES "${include_dir}"
14+
INTERFACE_COMPILE_DEFINITIONS "SODIUM_STATIC=1;QTMESH_MINISIGN_VERIFY=1"
15+
)
16+
if(WIN32)
17+
set_property(TARGET qtmesh_sodium APPEND PROPERTY
18+
IMPORTED_LINK_INTERFACE_LIBRARIES "advapi32;bcrypt")
19+
endif()
20+
endfunction()
21+
922
if(WIN32)
10-
message(STATUS "libsodium: Windows MinGW verify deferred (#445 follow-up)")
11-
add_library(qtmesh_sodium INTERFACE)
12-
target_compile_definitions(qtmesh_sodium INTERFACE QTMESH_MINISIGN_VERIFY=0)
23+
if(NOT MINGW)
24+
message(STATUS "libsodium: Windows MSVC minisign verify not wired — verify disabled")
25+
add_library(qtmesh_sodium INTERFACE)
26+
target_compile_definitions(qtmesh_sodium INTERFACE QTMESH_MINISIGN_VERIFY=0)
27+
return()
28+
endif()
29+
30+
include(FetchContent)
31+
32+
set(QTMESH_LIBSODIUM_MINGW_URL
33+
"https://download.libsodium.org/libsodium/releases/libsodium-1.0.20-stable-mingw.tar.gz"
34+
CACHE STRING "Prebuilt MinGW libsodium tarball for minisign verify")
35+
set(QTMESH_LIBSODIUM_MINGW_SHA256
36+
"19f7e5f814f62f5bfdf6ea2208244adbddb80e73362879ddb0e4844bc1f12c82"
37+
CACHE STRING "SHA256 of MinGW libsodium tarball")
38+
39+
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
40+
set(QTMESH_LIBSODIUM_MINGW_ARCH "win64")
41+
else()
42+
set(QTMESH_LIBSODIUM_MINGW_ARCH "win32")
43+
endif()
44+
45+
message(STATUS "libsodium: using prebuilt MinGW ${QTMESH_LIBSODIUM_MINGW_ARCH} package")
46+
47+
FetchContent_Declare(
48+
qtmesh_libsodium_mingw
49+
URL ${QTMESH_LIBSODIUM_MINGW_URL}
50+
URL_HASH SHA256=${QTMESH_LIBSODIUM_MINGW_SHA256}
51+
)
52+
FetchContent_MakeAvailable(qtmesh_libsodium_mingw)
53+
54+
set(QTMESH_LIBSODIUM_MINGW_ROOT
55+
"${qtmesh_libsodium_mingw_SOURCE_DIR}/libsodium-${QTMESH_LIBSODIUM_MINGW_ARCH}")
56+
set(QTMESH_LIBSODIUM_MARKER "${QTMESH_LIBSODIUM_MINGW_ROOT}/lib/libsodium.a")
57+
58+
if(NOT EXISTS "${QTMESH_LIBSODIUM_MARKER}")
59+
message(FATAL_ERROR "libsodium MinGW package missing ${QTMESH_LIBSODIUM_MARKER}")
60+
endif()
61+
62+
qtmesh_sodium_add_imported_static(
63+
"${QTMESH_LIBSODIUM_MARKER}"
64+
"${QTMESH_LIBSODIUM_MINGW_ROOT}/include")
1365
return()
1466
endif()
1567

@@ -87,9 +139,6 @@ if(NOT EXISTS "${QTMESH_LIBSODIUM_MARKER}")
87139
endif()
88140
endif()
89141

90-
add_library(qtmesh_sodium STATIC IMPORTED GLOBAL)
91-
set_target_properties(qtmesh_sodium PROPERTIES
92-
IMPORTED_LOCATION "${QTMESH_LIBSODIUM_MARKER}"
93-
INTERFACE_INCLUDE_DIRECTORIES "${QTMESH_LIBSODIUM_PREFIX}/include"
94-
INTERFACE_COMPILE_DEFINITIONS "SODIUM_STATIC=1;QTMESH_MINISIGN_VERIFY=1"
95-
)
142+
qtmesh_sodium_add_imported_static(
143+
"${QTMESH_LIBSODIUM_MARKER}"
144+
"${QTMESH_LIBSODIUM_PREFIX}/include")

docs/AUTO_UPDATER_DESIGN.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ Production public key: `packaging/updater/minisign.pub` (embedded in `MinisignVe
4242
### PoC status
4343

4444
- `MinisignVerify::verifyFile()` implements minisign’s dual-signature check (file + trusted comment) via **libsodium** (same algorithms as the CLI).
45-
- **#445:** builds with `QTMESH_MINISIGN_VERIFY=1` on Linux and macOS (system pkg-config or static libsodium). Windows MinGW verify is deferred — downloads fail closed at the signature step until a follow-up wires libsodium there.
45+
- **#445:** builds with `QTMESH_MINISIGN_VERIFY=1` on Linux, macOS, and Windows MinGW (system pkg-config, autotools static build, or official prebuilt MinGW libs). Windows MSVC builds still fail closed at verify until wired.
4646
- Tests: `MinisignVerify_test` verifies good/tampered/bad-key against `tests/fixtures/updater/release-3.5.3-readme.md` (content from GitHub tag `3.5.3`).
4747

4848
---

src/updater/MinisignVerify.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@
1111
* production public key is compiled in; CI signs artifacts with the matching
1212
* secret (see docs/AUTO_UPDATER_DESIGN.md).
1313
*
14-
* Linux builds link libsodium for verify when @c QTMESH_MINISIGN_VERIFY is set.
15-
* Builds without the backend return @ref Result::Unsupported.
14+
* Linux, macOS, and Windows MinGW builds link libsodium when
15+
* @c QTMESH_MINISIGN_VERIFY is set. Builds without the backend return
16+
* @ref Result::Unsupported.
1617
*/
1718
namespace MinisignVerify {
1819

0 commit comments

Comments
 (0)