From 9ffbf4ae1ccfb1a54b6c8cd3b7bdb256e5011b1d Mon Sep 17 00:00:00 2001
From: Kateryna Kostiuk <kateryna.kostiuk@savoirfairelinux.com>
Date: Fri, 27 Jan 2023 12:35:07 -0500
Subject: [PATCH] macOS: update signature for Sparkle

This patch sets up app updates to use EdDSA signature as now
it is required by Sparkle

Change-Id: I68a581e21850f04a819f4fe7ea49a33766031e01
---
 CMakeLists.txt                                |  9 ++---
 extras/packaging/update/sparkle/dsa_pub.pem   | 36 -------------------
 .../packaging/update/sparkle/sign_update.sh   | 11 ------
 .../update/sparkle/sparkle-xml-updater.sh     | 14 ++++----
 resources/Info.plist                          |  4 +--
 5 files changed, 10 insertions(+), 64 deletions(-)
 delete mode 100644 extras/packaging/update/sparkle/dsa_pub.pem
 delete mode 100755 extras/packaging/update/sparkle/sign_update.sh

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 92d4d65fd..ab92d866c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -449,12 +449,6 @@ else() # APPLE
       HINTS ${sparkle_dir})
     add_definitions(-DENABLE_SPARKLE)
     message("Sparkle is here:" ${SPARKLE_FRAMEWORK})
-    set(PUBLIC_KEY_PATH "${sparkle_dir}/dsa_pub.pem")
-    set_source_files_properties(
-      ${PUBLIC_KEY_PATH}
-      PROPERTIES
-      MACOSX_PACKAGE_LOCATION Resources)
-    set(PUBLIC_KEY ${PUBLIC_KEY_PATH})
   endif()
   if(BETA)
     message(STATUS "Beta config enabled")
@@ -722,7 +716,7 @@ else()
     ${CMAKE_CURRENT_SOURCE_DIR}/resources/images/jami.icns)
   set(libs ${QT_LIBS} ${SYSTEM_CONFIGURATUION} qrencode ${LIBCLIENT_NAME})
   if(ENABLE_SPARKLE)
-    set(resources ${resources} ${PUBLIC_KEY} ${SPARKLE_FRAMEWORK})
+    set(resources ${resources} ${SPARKLE_FRAMEWORK})
     set(libs ${libs} ${SPARKLE_FRAMEWORK})
   endif(ENABLE_SPARKLE)
   target_sources(${PROJECT_NAME} PRIVATE ${resources})
@@ -766,6 +760,7 @@ else()
       else()
           set_target_properties(${PROJECT_NAME} PROPERTIES
                 SPARKLE_URL "${SPARKLE_URL}"
+                SPARKLE_PUBLIC_KEY "${SPARKLE_PUBLIC_KEY}"
                 XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS "${CMAKE_CURRENT_SOURCE_DIR}/resources/entitlements/Jami.entitlements"
                 XCODE_ATTRIBUTE_ENABLE_HARDENED_RUNTIME TRUE)
       endif()
diff --git a/extras/packaging/update/sparkle/dsa_pub.pem b/extras/packaging/update/sparkle/dsa_pub.pem
deleted file mode 100644
index 97455e2f2..000000000
--- a/extras/packaging/update/sparkle/dsa_pub.pem
+++ /dev/null
@@ -1,36 +0,0 @@
------BEGIN PUBLIC KEY-----
-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
-ZnO5P9x/rPIJLCXY4xQYBryQCMu6JC5ibWzP
------END PUBLIC KEY-----
diff --git a/extras/packaging/update/sparkle/sign_update.sh b/extras/packaging/update/sparkle/sign_update.sh
deleted file mode 100755
index bb2fbab5e..000000000
--- a/extras/packaging/update/sparkle/sign_update.sh
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/bash
-set -e
-set -o pipefail
-if [ "$#" -ne 2 ]; then
-  echo "Usage: $0 update_archive private_key"
-  exit 1
-fi
-
-openssl=/usr/bin/openssl
-$openssl dgst -sha1 -binary < "$1" | $openssl dgst -dss1 -sign "$2" | base64 $BASE64_OPTS
-
diff --git a/extras/packaging/update/sparkle/sparkle-xml-updater.sh b/extras/packaging/update/sparkle/sparkle-xml-updater.sh
index ddfd22217..b9a404439 100755
--- a/extras/packaging/update/sparkle/sparkle-xml-updater.sh
+++ b/extras/packaging/update/sparkle/sparkle-xml-updater.sh
@@ -6,13 +6,12 @@ REPO_FOLDER=$1
 SPARKLE_FILE=$2
 REPO_URL=$3
 PACKAGE=$4
-DSA_KEY=$5
-CHANNEL_NAME=$6
-VERSION=$7
-BUILD=$8
+CHANNEL_NAME=$5
+VERSION=$6
+BUILD=$7
 
-if [ ! -f ${PACKAGE} -o ! -f ${DSA_KEY} ]; then
-    echo "Can't find package or dsa key, aborting..."
+if [ ! -f ${PACKAGE} ]; then
+    echo "Can't find package, aborting..."
     exit 1
 fi
 
@@ -20,7 +19,6 @@ if [ -f ${REPO_FOLDER}/${SPARKLE_FILE} ]; then
     ITEMS=$(sed -n "/<item>/,/<\/item>/p" ${REPO_FOLDER}/${SPARKLE_FILE})
 fi
 
-PACKAGE_SIZE=`stat -f%z ${PACKAGE}`
 DATE_RFC2822=`date "+%a, %d %b %Y %T %z"`
 
 cat << EOFILE > ${REPO_FOLDER}/${SPARKLE_FILE}
@@ -37,7 +35,7 @@ cat << EOFILE > ${REPO_FOLDER}/${SPARKLE_FILE}
             <sparkle:version>${BUILD}</sparkle:version>
             <sparkle:shortVersionString>${VERSION}</sparkle:shortVersionString>
             <sparkle:minimumSystemVersion>10.15.0</sparkle:minimumSystemVersion>
-            <enclosure url="${REPO_URL}/$(basename ${PACKAGE})" length="$PACKAGE_SIZE" type="application/octet-stream" sparkle:dsaSignature="$(./sign_update.sh ${PACKAGE} ${DSA_KEY})" />
+            <enclosure url="${REPO_URL}/$(basename ${PACKAGE})" type="application/octet-stream" $(./sign_update ${PACKAGE}) />
         </item>
 $(echo -e "${ITEMS}")
     </channel>
diff --git a/resources/Info.plist b/resources/Info.plist
index 19dec6658..3f9dd2b30 100644
--- a/resources/Info.plist
+++ b/resources/Info.plist
@@ -24,8 +24,8 @@
 	<string>public.app-category.social-networking</string>
 	<key>NSHumanReadableCopyright</key>
 	<string>${MACOSX_BUNDLE_COPYRIGHT}</string>
-	<key>SUPublicDSAKeyFile</key>
-	<string>dsa_pub.pem</string>
+	<key>SUPublicEDKey</key>
+	<string>${SPARKLE_PUBLIC_KEY}</string>
 	<key>SUFeedURL</key>
 	<string>${SPARKLE_URL}</string>
 	<key>NSPrincipalClass</key>
-- 
GitLab