From 0823934e28419226a46f7872cc07be7a02ae61cc Mon Sep 17 00:00:00 2001 From: akwizgran Date: Tue, 17 Apr 2018 11:49:45 +0100 Subject: [PATCH 1/3] Don't download Tor binaries if they already exist. --- bramble-android/build.gradle | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/bramble-android/build.gradle b/bramble-android/build.gradle index 5435134a7..c245537c5 100644 --- a/bramble-android/build.gradle +++ b/bramble-android/build.gradle @@ -74,18 +74,26 @@ def downloadBinary(name) { .replace('geoip', "geoip-${geoipVersion}") .replaceAll('_', '-') dest "${torBinaryDir}/${name}.zip" - onlyIfNewer true } } def verifyBinary(name, chksum) { - return tasks.create([ - name : "verifyBinary${name}", - type : Verify, - dependsOn: downloadBinary(name)]) { - src "${torBinaryDir}/${name}.zip" - algorithm 'SHA-256' - checksum chksum + String filename = "${torBinaryDir}/${name}.zip" + if (new File("bramble-android/${filename}").exists()) { + return tasks.create("verifyBinary${name}", Verify) { + src filename + algorithm 'SHA-256' + checksum chksum + } + } else { + return tasks.create([ + name : "verifyBinary${name}", + type : Verify, + dependsOn: downloadBinary(name)]) { + src filename + algorithm 'SHA-256' + checksum chksum + } } } From ff9971b728b22a75bf4d4a01726446a411ac74bd Mon Sep 17 00:00:00 2001 From: akwizgran Date: Wed, 18 Apr 2018 11:03:39 +0100 Subject: [PATCH 2/3] If verification fails, delete, download and re-verify. --- bramble-android/build.gradle | 64 +++++++++++++++++++++++++----------- 1 file changed, 44 insertions(+), 20 deletions(-) diff --git a/bramble-android/build.gradle b/bramble-android/build.gradle index c245537c5..284ba173a 100644 --- a/bramble-android/build.gradle +++ b/bramble-android/build.gradle @@ -1,6 +1,8 @@ import de.undercouch.gradle.tasks.download.Download import de.undercouch.gradle.tasks.download.Verify +import java.security.NoSuchAlgorithmException + apply plugin: 'com.android.library' apply plugin: 'witness' apply plugin: 'de.undercouch.download' @@ -67,38 +69,60 @@ def torBinaries = [ "geoip" : '8239b98374493529a29096e45fc5877d4d6fdad0146ad8380b291f90d61484ea' ] -def downloadBinary(name) { - return tasks.create("downloadBinary${name}", Download) { +def verifyOrDeleteBinary(name, chksum) { + return tasks.create("verifyOrDeleteBinary${name}", VerifyOrDelete) { + src "${torBinaryDir}/${name}.zip" + algorithm 'SHA-256' + checksum chksum + onlyIf { + src.exists() + } + } +} + +def downloadBinary(name, chksum) { + return tasks.create([ + name: "downloadBinary${name}", + type: Download, + dependsOn: verifyOrDeleteBinary(name, chksum)]) { src "${torDownloadUrl}${name}.zip" .replace('tor_', "tor-${torVersion}-") .replace('geoip', "geoip-${geoipVersion}") .replaceAll('_', '-') dest "${torBinaryDir}/${name}.zip" + onlyIf { + !dest.exists() + } } } def verifyBinary(name, chksum) { - String filename = "${torBinaryDir}/${name}.zip" - if (new File("bramble-android/${filename}").exists()) { - return tasks.create("verifyBinary${name}", Verify) { - src filename - algorithm 'SHA-256' - checksum chksum - } - } else { - return tasks.create([ - name : "verifyBinary${name}", - type : Verify, - dependsOn: downloadBinary(name)]) { - src filename - algorithm 'SHA-256' - checksum chksum - } + return tasks.create([ + name : "verifyBinary${name}", + type : Verify, + dependsOn: downloadBinary(name, chksum)]) { + src "${torBinaryDir}/${name}.zip" + algorithm 'SHA-256' + checksum chksum } } project.afterEvaluate { - torBinaries.every { key, value -> - preBuild.dependsOn.add(verifyBinary(key, value)) + torBinaries.every { name, checksum -> + preBuild.dependsOn.add(verifyBinary(name, checksum)) + } +} + +class VerifyOrDelete extends Verify { + + @TaskAction + @Override + void verify() throws IOException, NoSuchAlgorithmException { + try { + super.verify() + } catch (Exception e) { + println "${src} failed verification - deleting" + src.delete() + } } } From c7718db419b2c3e9f8340f16d585a60b1a868576 Mon Sep 17 00:00:00 2001 From: akwizgran Date: Wed, 18 Apr 2018 17:01:02 +0100 Subject: [PATCH 3/3] Skip second verification if first succeeds. --- bramble-android/build.gradle | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/bramble-android/build.gradle b/bramble-android/build.gradle index 284ba173a..917db0b39 100644 --- a/bramble-android/build.gradle +++ b/bramble-android/build.gradle @@ -69,22 +69,23 @@ def torBinaries = [ "geoip" : '8239b98374493529a29096e45fc5877d4d6fdad0146ad8380b291f90d61484ea' ] -def verifyOrDeleteBinary(name, chksum) { +def verifyOrDeleteBinary(name, chksum, alreadyVerified) { return tasks.create("verifyOrDeleteBinary${name}", VerifyOrDelete) { src "${torBinaryDir}/${name}.zip" algorithm 'SHA-256' checksum chksum + result alreadyVerified onlyIf { src.exists() } } } -def downloadBinary(name, chksum) { +def downloadBinary(name, chksum, alreadyVerified) { return tasks.create([ name: "downloadBinary${name}", type: Download, - dependsOn: verifyOrDeleteBinary(name, chksum)]) { + dependsOn: verifyOrDeleteBinary(name, chksum, alreadyVerified)]) { src "${torDownloadUrl}${name}.zip" .replace('tor_', "tor-${torVersion}-") .replace('geoip', "geoip-${geoipVersion}") @@ -97,13 +98,17 @@ def downloadBinary(name, chksum) { } def verifyBinary(name, chksum) { + boolean[] alreadyVerified = [false] return tasks.create([ name : "verifyBinary${name}", type : Verify, - dependsOn: downloadBinary(name, chksum)]) { + dependsOn: downloadBinary(name, chksum, alreadyVerified)]) { src "${torBinaryDir}/${name}.zip" algorithm 'SHA-256' checksum chksum + onlyIf { + !alreadyVerified[0] + } } } @@ -115,11 +120,14 @@ project.afterEvaluate { class VerifyOrDelete extends Verify { + boolean[] result + @TaskAction @Override void verify() throws IOException, NoSuchAlgorithmException { try { super.verify() + result[0] = true } catch (Exception e) { println "${src} failed verification - deleting" src.delete()