diff --git a/Launcher/source/hasher/HashedFile.java b/Launcher/source/hasher/HashedFile.java index 306cbd1..0becfe0 100644 --- a/Launcher/source/hasher/HashedFile.java +++ b/Launcher/source/hasher/HashedFile.java @@ -22,7 +22,7 @@ @LauncherAPI public HashedFile(long size, byte[] digest) { this.size = VerifyHelper.verifyLong(size, VerifyHelper.L_NOT_NEGATIVE, "Illegal size: " + size); - this.digest = DIGEST_ALGO.verify(digest).clone(); + this.digest = digest == null ? null : DIGEST_ALGO.verify(digest).clone(); } @LauncherAPI diff --git a/Launcher/source/helper/VerifyHelper.java b/Launcher/source/helper/VerifyHelper.java index aa2a2f0..5e06a7a 100644 --- a/Launcher/source/helper/VerifyHelper.java +++ b/Launcher/source/helper/VerifyHelper.java @@ -41,6 +41,7 @@ return USERNAME_PATTERN.matcher(username).matches(); } + @LauncherAPI public static void putIfAbsent(Map map, K key, V value, String error) { verify(map.putIfAbsent(key, value), Objects::isNull, error); } diff --git a/Launcher/source/request/update/UpdateRequest.java b/Launcher/source/request/update/UpdateRequest.java index 3741fe1..5d5f06a 100644 --- a/Launcher/source/request/update/UpdateRequest.java +++ b/Launcher/source/request/update/UpdateRequest.java @@ -180,7 +180,7 @@ updateState(filePath, 0L, hFile.size); // Start file update - MessageDigest digest = SecurityHelper.newDigest(DigestAlgorithm.MD5); + MessageDigest digest = this.digest ? SecurityHelper.newDigest(DigestAlgorithm.MD5) : null; try (OutputStream fileOutput = IOHelper.newOutput(file)) { long downloaded = 0L; @@ -194,8 +194,10 @@ } // Update file - digest.update(bytes, 0, length); fileOutput.write(bytes, 0, length); + if (digest != null) { + digest.update(bytes, 0, length); + } // Update state downloaded += length; @@ -205,9 +207,11 @@ } // Verify digest - byte[] digestBytes = digest.digest(); - if (!hFile.isSameDigest(digestBytes)) { - throw new SecurityException(String.format("File digest mismatch: '%s'", filePath)); + if (digest != null) { + byte[] digestBytes = digest.digest(); + if (!hFile.isSameDigest(digestBytes)) { + throw new SecurityException(String.format("File digest mismatch: '%s'", filePath)); + } } }