Skip to content

Commit 9f9f308

Browse files
committed
Check signature with all 3 keys instead of comparing keys, as the keys could change from metadata
1 parent 68dd2e1 commit 9f9f308

File tree

2 files changed

+31
-17
lines changed

2 files changed

+31
-17
lines changed

evolution/src/main/java/bisq/evolution/updater/DownloadedFilesVerification.java

+30-17
Original file line numberDiff line numberDiff line change
@@ -31,35 +31,48 @@
3131

3232
@Slf4j
3333
public class DownloadedFilesVerification {
34-
public static void verify(String directory, String fileName, List<String> keyIds, boolean ignoreSigningKeyInResourcesCheck) throws IOException {
34+
public static void verify(String directory,
35+
String dataFileName,
36+
List<String> keyIds,
37+
boolean ignoreSigningKeyInResourcesCheck) throws IOException {
3538
String signingKeyId = getSigningKeyId(directory);
3639
checkArgument(keyIds.contains(signingKeyId), "signingKeyId not matching any of the provided keys");
3740
String signingKey = getSigningKey(directory, signingKeyId);
41+
File sigFile = Path.of(directory, dataFileName + ASC_EXTENSION).toFile(); // E.g. Bisq-2.1.3.dmg.asc
42+
File dataFile = Path.of(directory, dataFileName).toFile(); // E.g. Bisq2.dmg
3843

3944
// We require that the signing key is provided on the Bisq webpage
40-
DownloadedFilesVerification.checkIfSigningKeyMatchesKeyFromWebpage(directory, signingKeyId, signingKey);
45+
checkSignatureWithKeyFromWebpage(directory, signingKeyId, signingKey, sigFile, dataFile);
4146

4247
if (!ignoreSigningKeyInResourcesCheck) {
43-
DownloadedFilesVerification.checkIfSigningKeyMatchesKeyInResources(signingKeyId, signingKey);
48+
checkSignatureWithKeyInResources(directory, signingKeyId, signingKey, sigFile, dataFile);
4449
}
4550

46-
File signingKeyFile = Path.of(directory, signingKeyId + ASC_EXTENSION).toFile();
47-
File sigFile = Path.of(directory, fileName + ASC_EXTENSION).toFile();
48-
File dataFile = Path.of(directory, fileName).toFile();
49-
checkArgument(PgPUtils.isSignatureValid(signingKeyFile, sigFile, dataFile), "Signature verification failed");
51+
String signingKeyFileName = signingKeyId + ASC_EXTENSION;
52+
File signingKeyFile = Path.of(directory, signingKeyId + ASC_EXTENSION).toFile(); // E.g. E222AA02.asc
53+
checkArgument(PgPUtils.isSignatureValid(signingKeyFile, sigFile, dataFile), "Signature verification failed: signingKeyFileName=" + signingKeyFileName);
5054
log.info("signature verification succeeded");
5155
}
52-
private static void checkIfSigningKeyMatchesKeyFromWebpage(String directory, String keyId, String signingKey) throws IOException {
53-
String keyFileName = FROM_BISQ_WEBPAGE_PREFIX + keyId + ASC_EXTENSION;
54-
String keyFromWebpage = FileUtils.readStringFromFile(Path.of(directory, keyFileName).toFile());
55-
checkArgument(keyFromWebpage.equals(signingKey),
56-
"Key from webpage not matching signing key. keyFromWebpage=" + keyFromWebpage + "; signingKey=" + signingKey);
57-
}
5856

57+
private static void checkSignatureWithKeyFromWebpage(String directory,
58+
String signingKeyId,
59+
String signingKey,
60+
File sigFile,
61+
File dataFile) {
62+
63+
String signingKeyFileName = FROM_BISQ_WEBPAGE_PREFIX + signingKeyId + ASC_EXTENSION;
64+
File signingKeyFile = Path.of(directory, signingKeyFileName).toFile(); // E.g. from_bisq_webpage_E222AA02.asc
65+
checkArgument(PgPUtils.isSignatureValid(signingKeyFile, sigFile, dataFile), "Signature verification failed: signingKeyFileName=" + signingKeyFileName);
66+
}
5967

60-
private static void checkIfSigningKeyMatchesKeyInResources(String keyId, String signingKey) throws IOException {
61-
String keyFromResources = FileUtils.readStringFromResource("keys/" + keyId + ASC_EXTENSION);
62-
checkArgument(keyFromResources.equals(signingKey),
63-
"Key from resources not matching signing key. keyFromResources=" + keyFromResources + "; signingKey=" + signingKey);
68+
private static void checkSignatureWithKeyInResources(String directory,
69+
String signingKeyId,
70+
String signingKey,
71+
File sigFile,
72+
File dataFile) throws IOException {
73+
String signingKeyFileName = FROM_RESOURCES_PREFIX + signingKeyId + ASC_EXTENSION;
74+
File signingKeyFile = Path.of(directory, signingKeyFileName).toFile(); // E.g. from_resources_E222AA02.asc
75+
FileUtils.resourceToFile("keys/" + signingKeyId + ASC_EXTENSION, signingKeyFile); // We copy key from resources to download directory
76+
checkArgument(PgPUtils.isSignatureValid(signingKeyFile, sigFile, dataFile), "Signature verification failed: signingKeyFileName=" + signingKeyFileName);
6477
}
6578
}

evolution/src/main/java/bisq/evolution/updater/UpdaterUtils.java

+1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ public class UpdaterUtils {
3131
public static final String GITHUB_DOWNLOAD_URL = "https://github.com/bisq-network/bisq2/releases/download/v";
3232
public static final String PUB_KEYS_URL = "https://bisq.network/pubkey/";
3333
public static final String FROM_BISQ_WEBPAGE_PREFIX = "from_bisq_webpage_";
34+
public static final String FROM_RESOURCES_PREFIX = "from_resources_";
3435
public static final String SIGNING_KEY_FILE = "signingkey.asc";
3536
public static final String VERSION_FILE_NAME = "version.txt";
3637
public static final String UPDATES_DIR = "updates";

0 commit comments

Comments
 (0)