Skip to content

Commit 85dd1d8

Browse files
committed
ECC key support
IB-8381 Signed-off-by: Raul Metsma <raul@metsma.ee>
1 parent 9045b12 commit 85dd1d8

File tree

8 files changed

+413
-380
lines changed

8 files changed

+413
-380
lines changed

.github/workflows/build.yml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ jobs:
1414
uses: actions/checkout@v4
1515
- name: Build
1616
run: |
17-
cmake -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" -S . -B build
17+
cmake -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" -DCMAKE_BUILD_TYPE=RelWithDebInfo -S . -B build
1818
cmake --build build --target pkgbuild
1919
- name: Archive artifacts
2020
uses: actions/upload-artifact@v4
@@ -43,19 +43,19 @@ jobs:
4343
- name: Install Qt
4444
uses: jurplel/install-qt-action@v4
4545
with:
46-
version: 6.9.1
46+
version: 6.9.2
4747
arch: win64_msvc2022_64
4848
- name: Setup dev env
4949
uses: ilammy/msvc-dev-cmd@v1
5050
with:
5151
arch: x64
5252
- name: Install WiX
5353
run: |
54-
dotnet tool install -g wix --version 6.0.1
55-
wix extension -g add WixToolset.UI.wixext/6.0.1
54+
dotnet tool install -g wix --version 6.0.2
55+
wix extension -g add WixToolset.UI.wixext/6.0.2
5656
- name: Build
5757
run: |
58-
cmake -S . -B build `
58+
cmake -S . -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo `
5959
-DCMAKE_TOOLCHAIN_FILE=${{ env.RUNVCPKG_VCPKG_ROOT }}/scripts/buildsystems/vcpkg.cmake
6060
cmake --build build --target installer
6161
- name: Archive artifacts

CMakeLists.txt

Lines changed: 60 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -13,40 +13,71 @@ set_env(BUILD_NUMBER 0)
1313
set(VERSION ${PROJECT_VERSION}.${BUILD_NUMBER})
1414
set_env( CONFIG_URL "https://id.eesti.ee/config.json" CACHE STRING "Set Config URL" )
1515
set_env( SIGNCERT "" CACHE STRING "Common name of certificate to used sign binaries, empty skip signing" )
16-
add_definitions( -DCONFIG_URL="${CONFIG_URL}" )
17-
string( REPLACE ".json" ".pub" PUB_URL ${CONFIG_URL} )
18-
file( DOWNLOAD ${PUB_URL} ${CMAKE_CURRENT_BINARY_DIR}/config.pub )
16+
string(REPLACE ".json" ".ecpub" PUB_URL ${CONFIG_URL})
17+
message("Fetching pub key: ${PUB_URL}")
18+
file(DOWNLOAD ${PUB_URL} ${CMAKE_CURRENT_BINARY_DIR}/config.ecpub)
1919

2020
if( APPLE )
21-
add_custom_command( OUTPUT config.h
22-
COMMAND xxd -i config.pub config.h
21+
add_custom_command(OUTPUT config.h
22+
BYPRODUCTS module.modulemap
23+
COMMAND xxd -i config.ecpub config.h
24+
COMMAND echo "\\\#define CONFIG_URL \\\"${CONFIG_URL}\\\"" >> config.h
25+
COMMAND echo "module config [system] {" > module.modulemap
26+
COMMAND echo " private header \\\"config.h\\\"" >> module.modulemap
27+
COMMAND echo " export *" >> module.modulemap
28+
COMMAND echo "}" >> module.modulemap
2329
COMMENT "Generating config.h"
2430
)
25-
include_directories( ${CMAKE_CURRENT_BINARY_DIR} )
26-
add_library(id-updater-lib STATIC prefPane/update.m config.h)
27-
target_compile_options(id-updater-lib PRIVATE -Wno-unused-parameter -fobjc-arc -fmodules)
28-
set(SWIFT_FLAGS "")
31+
set(SWIFT_FLAGS xcrun --sdk macosx swiftc -I ${CMAKE_CURRENT_BINARY_DIR})
2932
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
30-
set(SWIFT_FLAGS -g)
33+
list(APPEND SWIFT_FLAGS -g)
3134
elseif(CMAKE_BUILD_TYPE STREQUAL "Release")
32-
set(SWIFT_FLAGS -O)
35+
list(APPEND SWIFT_FLAGS -O)
3336
elseif(CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
34-
set(SWIFT_FLAGS -O -g)
37+
list(APPEND SWIFT_FLAGS -O -g)
3538
elseif(CMAKE_BUILD_TYPE STREQUAL "MinSizeRel")
36-
set(SWIFT_FLAGS -Osize)
39+
list(APPEND SWIFT_FLAGS -Osize)
3740
endif()
41+
set(SWIFTMOD_DIR ${CMAKE_CURRENT_BINARY_DIR}/id_updater_lib.swiftmodule)
42+
set(SWIFTHDR_DIR ${CMAKE_CURRENT_BINARY_DIR}/id_updater_lib)
43+
add_custom_command(OUTPUT
44+
libid-updater-lib.a
45+
BYPRODUCTS
46+
libid-updater-lib_arm64.a
47+
libid-updater-lib_x86_64.a
48+
${SWIFTMOD_DIR}/arm64-apple-macos.swiftmodule
49+
${SWIFTMOD_DIR}/x86_64-apple-macos.swiftmodule
50+
DEPENDS config.h
51+
COMMENT "Build id-updater-lib"
52+
COMMAND ${CMAKE_COMMAND} -E make_directory ${SWIFTMOD_DIR}
53+
COMMAND ${CMAKE_COMMAND} -E make_directory ${SWIFTHDR_DIR}
54+
COMMAND ${SWIFT_FLAGS} -target arm64-apple-macosx${CMAKE_OSX_DEPLOYMENT_TARGET}
55+
-module-name id_updater_lib
56+
-emit-module -emit-module-path ${SWIFTMOD_DIR}/arm64-apple-macos.swiftmodule
57+
-emit-objc-header -emit-objc-header-path ${SWIFTHDR_DIR}/id_updater_lib-Swift.h
58+
${CMAKE_CURRENT_SOURCE_DIR}/prefPane/update.swift
59+
-emit-library -static -o libid-updater-lib_arm64.a
60+
COMMAND ${SWIFT_FLAGS} -target x86_64-apple-macosx${CMAKE_OSX_DEPLOYMENT_TARGET}
61+
-module-name id_updater_lib
62+
-emit-module -emit-module-path ${SWIFTMOD_DIR}/x86_64-apple-macos.swiftmodule
63+
-emit-objc-header -emit-objc-header-path ${SWIFTHDR_DIR}/id_updater_lib-Swift.h
64+
${CMAKE_CURRENT_SOURCE_DIR}/prefPane/update.swift
65+
-emit-library -static -o libid-updater-lib_x86_64.a
66+
COMMAND lipo -create libid-updater-lib_arm64.a libid-updater-lib_x86_64.a -output libid-updater-lib.a
67+
)
3868
add_custom_command(OUTPUT id-updater-helper
39-
BYPRODUCTS id-updater-helper_arm64 id-updater-helper_x86_64
69+
BYPRODUCTS
70+
id-updater-helper_arm64
71+
id-updater-helper_x86_64
72+
DEPENDS libid-updater-lib.a
4073
COMMENT "Build id-updater-helper"
41-
COMMAND xcrun --sdk macosx swiftc -target arm64-apple-macosx${CMAKE_OSX_DEPLOYMENT_TARGET} -parse-as-library ${SWIFT_FLAGS}
42-
-import-objc-header ${CMAKE_CURRENT_SOURCE_DIR}/prefPane/update.h
74+
COMMAND ${SWIFT_FLAGS} -target arm64-apple-macosx${CMAKE_OSX_DEPLOYMENT_TARGET} -parse-as-library
75+
${CMAKE_CURRENT_BINARY_DIR}/libid-updater-lib.a
4376
${CMAKE_CURRENT_SOURCE_DIR}/prefPane/id-updater-helper.swift
44-
$<TARGET_FILE:id-updater-lib>
4577
-o id-updater-helper_arm64
46-
COMMAND xcrun --sdk macosx swiftc -target x86_64-apple-macosx${CMAKE_OSX_DEPLOYMENT_TARGET} -parse-as-library ${SWIFT_FLAGS}
47-
-import-objc-header ${CMAKE_CURRENT_SOURCE_DIR}/prefPane/update.h
78+
COMMAND ${SWIFT_FLAGS} -target x86_64-apple-macosx${CMAKE_OSX_DEPLOYMENT_TARGET} -parse-as-library
79+
${CMAKE_CURRENT_BINARY_DIR}/libid-updater-lib.a
4880
${CMAKE_CURRENT_SOURCE_DIR}/prefPane/id-updater-helper.swift
49-
$<TARGET_FILE:id-updater-lib>
5081
-o id-updater-helper_x86_64
5182
COMMAND lipo -create id-updater-helper_arm64 id-updater-helper_x86_64 -output id-updater-helper
5283
)
@@ -55,25 +86,18 @@ if( APPLE )
5586
COMMAND ibtool --errors --warnings --notices --output-format human-readable-text
5687
--compile ID_updater.nib ${CMAKE_CURRENT_SOURCE_DIR}/prefPane/Base.lproj/ID_updater.xib
5788
)
58-
set(EN_RESOURCES prefPane/en.lproj/InfoPlist.strings prefPane/en.lproj/ID_updater.strings prefPane/en.lproj/Localizable.strings)
59-
set(ET_RESOURCES prefPane/et.lproj/InfoPlist.strings prefPane/et.lproj/ID_updater.strings prefPane/et.lproj/Localizable.strings)
60-
set(RU_RESOURCES prefPane/ru.lproj/InfoPlist.strings prefPane/ru.lproj/ID_updater.strings prefPane/ru.lproj/Localizable.strings)
6189

90+
file(GLOB RESOURCE_FILES prefPane/Icon.icns prefPane/*.lproj)
6291
find_library( XAR xar )
6392
add_library(${PROJECT_NAME} MODULE
6493
${CMAKE_CURRENT_BINARY_DIR}/id-updater-helper
6594
ID_updater.nib
66-
${EN_RESOURCES}
67-
${ET_RESOURCES}
68-
${RU_RESOURCES}
95+
${RESOURCE_FILES}
6996
prefPane/Icon.icns
7097
prefPane/id-updater.m
7198
)
72-
set_source_files_properties(prefPane/Icon.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
7399
set_source_files_properties(ID_updater.nib PROPERTIES MACOSX_PACKAGE_LOCATION Resources/Base.lproj)
74-
set_source_files_properties(${EN_RESOURCES} PROPERTIES MACOSX_PACKAGE_LOCATION Resources/en.lproj)
75-
set_source_files_properties(${ET_RESOURCES} PROPERTIES MACOSX_PACKAGE_LOCATION Resources/et.lproj)
76-
set_source_files_properties(${RU_RESOURCES} PROPERTIES MACOSX_PACKAGE_LOCATION Resources/ru.lproj)
100+
set_source_files_properties(${RESOURCE_FILES} PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
77101
set_target_properties(${PROJECT_NAME} PROPERTIES
78102
BUNDLE YES
79103
BUNDLE_EXTENSION prefPane
@@ -89,7 +113,8 @@ if( APPLE )
89113
MACOSX_BUNDLE_BUNDLE_VERSION ${BUILD_NUMBER}
90114
XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "ee.ria.${PROJECT_NAME}"
91115
)
92-
target_link_libraries(${PROJECT_NAME} ${XAR} id-updater-lib)
116+
target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
117+
target_link_libraries(${PROJECT_NAME} ${XAR} ${CMAKE_CURRENT_BINARY_DIR}/libid-updater-lib.a)
93118
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
94119
COMMAND cp ${CMAKE_CURRENT_BINARY_DIR}/id-updater-helper $<TARGET_BUNDLE_CONTENT_DIR:${PROJECT_NAME}>/Resources
95120
)
@@ -118,9 +143,9 @@ else()
118143
if(NOT EXISTS ${CMAKE_SOURCE_DIR}/common/CMakeLists.txt)
119144
message(FATAL_ERROR "cmake submodule directory empty, did you 'git clone --recursive'?")
120145
endif()
121-
file( DOWNLOAD ${CONFIG_URL} ${CMAKE_CURRENT_BINARY_DIR}/config.json )
122-
string( REPLACE ".json" ".rsa" RSA_URL ${CONFIG_URL} )
123-
file( DOWNLOAD ${RSA_URL} ${CMAKE_CURRENT_BINARY_DIR}/config.rsa )
146+
file(DOWNLOAD ${CONFIG_URL} ${CMAKE_CURRENT_BINARY_DIR}/config.json)
147+
string(REPLACE ".json" ".ecc" ECC_URL ${CONFIG_URL})
148+
file(DOWNLOAD ${ECC_URL} ${CMAKE_CURRENT_BINARY_DIR}/config.ecc)
124149
set(CONFIG_DIR ${CMAKE_CURRENT_BINARY_DIR})
125150

126151
find_package(OpenSSL 3.0.0 REQUIRED)
@@ -167,7 +192,7 @@ else()
167192
)
168193
qt_add_resources(${PROJECT_NAME} icon FILES appicon.png)
169194
qt_add_resources(${PROJECT_NAME} config BASE ${CONFIG_DIR} PREFIX / FILES
170-
${CONFIG_DIR}/config.json ${CONFIG_DIR}/config.rsa ${CONFIG_DIR}/config.pub
195+
${CONFIG_DIR}/config.json ${CONFIG_DIR}/config.ecc ${CONFIG_DIR}/config.ecpub
171196
)
172197

173198
if(OPENSSL_ROOT_DIR)

common

prefPane/id-updater-helper.swift

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,24 @@
1818
*/
1919

2020
import Foundation
21+
import id_updater_lib
2122

2223
@main
23-
class Updater: Update, UpdateDelegate, @unchecked Sendable {
24+
class Updater: NSObject, UpdateDelegate, @unchecked Sendable {
2425
private let path: String
26+
private let update: Update
2527

26-
init(path: String) {
28+
init?(path: String) {
2729
self.path = path
30+
guard let update = Update(delegate: nil) else {
31+
NSLog("Failed to create update")
32+
return nil
33+
}
34+
self.update = update
2835
super.init()
29-
delegate = self
30-
print("Installed \(path): \(self.baseversion ?? "")")
31-
request()
36+
self.update.delegate = self
37+
print("Installed \(path): \(update.baseVersion ?? "")")
38+
update.makeRequest()
3239
}
3340

3441
static func launch(_ path: String, arguments: [String]) -> Int32 {
@@ -54,7 +61,7 @@ class Updater: Update, UpdateDelegate, @unchecked Sendable {
5461
_ = Updater.launch("/usr/bin/open", arguments: [path])
5562
}
5663

57-
func updateAvailable(_ available: String, filename: String) {
64+
func updateAvailable(_ available: String, filename: URL) {
5865
print("Update available \(available) \(filename)")
5966
_ = Updater.launch("/usr/bin/open", arguments: [path])
6067
}

0 commit comments

Comments
 (0)