From dd3e8be410fc908790a036ac136d1946ef1f8ad1 Mon Sep 17 00:00:00 2001 From: Gabor Aranyossy Date: Fri, 4 Aug 2017 16:21:01 +0200 Subject: [PATCH] introducing sha-256 checksum support (#625) introducing sha-256 checksum support --- cache/src/main/scala/coursier/Cache.scala | 4 ++-- cache/src/main/scala/coursier/TermDisplay.scala | 2 +- .../src/main/scala/coursier/core/Repository.scala | 3 ++- .../src/main/scala/coursier/maven/MavenSource.scala | 4 ++-- .../scala-2.11/coursier/sbtlauncher/Launcher.scala | 2 +- tests/jvm/src/test/resources/empty.sha256 | 1 + .../http/abc.com/com/abc/test/0.1/test-0.1.pom.sha256 | 1 + .../1.0.0-M9/coursier_2.11-1.0.0-M9.pom.sha256 | 1 + .../src/test/scala/coursier/test/ChecksumTests.scala | 10 +++++++++- 9 files changed, 20 insertions(+), 8 deletions(-) create mode 100644 tests/jvm/src/test/resources/empty.sha256 create mode 100644 tests/jvm/src/test/resources/test-repo/http/abc.com/com/abc/test/0.1/test-0.1.pom.sha256 create mode 100644 tests/jvm/src/test/resources/test-repo/http/abc.com/com/github/alexarchambault/coursier_2.11/1.0.0-M9/coursier_2.11-1.0.0-M9.pom.sha256 diff --git a/cache/src/main/scala/coursier/Cache.scala b/cache/src/main/scala/coursier/Cache.scala index cd4c9f048..0405f59c3 100644 --- a/cache/src/main/scala/coursier/Cache.scala +++ b/cache/src/main/scala/coursier/Cache.scala @@ -871,8 +871,8 @@ object Cache { parseChecksumLine(lines) orElse parseChecksumAlternative(lines) } - // matches md5 or sha1 - private val checksumPattern = Pattern.compile("^[0-9a-f]{32}([0-9a-f]{8})?") + // matches md5 or sha1 or sha-256 + private val checksumPattern = Pattern.compile("^[0-9a-f]{32}([0-9a-f]{8})?([0-9a-f]{24})?") private def findChecksum(elems: Seq[String]): Option[BigInteger] = elems.collectFirst { diff --git a/cache/src/main/scala/coursier/TermDisplay.scala b/cache/src/main/scala/coursier/TermDisplay.scala index 7ea1b7f25..9ecd32bbd 100644 --- a/cache/src/main/scala/coursier/TermDisplay.scala +++ b/cache/src/main/scala/coursier/TermDisplay.scala @@ -267,7 +267,7 @@ object TermDisplay { .toVector .filter { case (url, _) => - !url.endsWith(".sha1") && !url.endsWith(".md5") && !url.endsWith("/") + !url.endsWith(".sha1") && !url.endsWith(".sha256") && !url.endsWith(".md5") && !url.endsWith("/") } .sortBy { case (url, _) => url } diff --git a/core/shared/src/main/scala/coursier/core/Repository.scala b/core/shared/src/main/scala/coursier/core/Repository.scala index 8e5b6b55c..78ea9e050 100644 --- a/core/shared/src/main/scala/coursier/core/Repository.scala +++ b/core/shared/src/main/scala/coursier/core/Repository.scala @@ -24,7 +24,8 @@ object Repository { def withDefaultChecksums: Artifact = underlying.copy(checksumUrls = underlying.checksumUrls ++ Seq( "MD5" -> (underlying.url + ".md5"), - "SHA-1" -> (underlying.url + ".sha1") + "SHA-1" -> (underlying.url + ".sha1"), + "SHA-256" -> (underlying.url + ".sha256") )) def withDefaultSignature: Artifact = underlying.copy(extra = underlying.extra ++ Seq( diff --git a/core/shared/src/main/scala/coursier/maven/MavenSource.scala b/core/shared/src/main/scala/coursier/maven/MavenSource.scala index df1b09dfe..574168a3f 100644 --- a/core/shared/src/main/scala/coursier/maven/MavenSource.scala +++ b/core/shared/src/main/scala/coursier/maven/MavenSource.scala @@ -133,7 +133,7 @@ final case class MavenSource( .map(artifactWithExtra) } - private val types = Map("sha1" -> "SHA-1", "md5" -> "MD5", "asc" -> "sig") + private val types = Map("sha1" -> "SHA-1", "sha256" -> "SHA-256", "md5" -> "MD5", "asc" -> "sig") private def artifactsKnownPublications( dependency: Dependency, @@ -327,7 +327,7 @@ final case class MavenSource( object MavenSource { - private val checksumTypes = Set("MD5", "SHA-1") + private val checksumTypes = Set("MD5", "SHA-1", "SHA-256") val typeExtensions: Map[String, String] = Map( "eclipse-plugin" -> "jar", diff --git a/sbt-launcher/src/main/scala-2.11/coursier/sbtlauncher/Launcher.scala b/sbt-launcher/src/main/scala-2.11/coursier/sbtlauncher/Launcher.scala index b560a98a7..aa0aed435 100644 --- a/sbt-launcher/src/main/scala-2.11/coursier/sbtlauncher/Launcher.scala +++ b/sbt-launcher/src/main/scala-2.11/coursier/sbtlauncher/Launcher.scala @@ -248,7 +248,7 @@ class Launcher( def globalLock = DummyGlobalLock // See https://github.com/sbt/ivy/blob/2cf13e211b2cb31f0d3b317289dca70eca3362f6/src/java/org/apache/ivy/util/ChecksumHelper.java - def checksums: Array[String] = Array("sha1", "md5") + def checksums: Array[String] = Array("sha1", "sha256", "md5") def app(id: xsbti.ApplicationID, version: String): xsbti.AppProvider = app(ApplicationID(id).copy(version = version)) diff --git a/tests/jvm/src/test/resources/empty.sha256 b/tests/jvm/src/test/resources/empty.sha256 new file mode 100644 index 000000000..293ce40fd --- /dev/null +++ b/tests/jvm/src/test/resources/empty.sha256 @@ -0,0 +1 @@ +e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 \ No newline at end of file diff --git a/tests/jvm/src/test/resources/test-repo/http/abc.com/com/abc/test/0.1/test-0.1.pom.sha256 b/tests/jvm/src/test/resources/test-repo/http/abc.com/com/abc/test/0.1/test-0.1.pom.sha256 new file mode 100644 index 000000000..28bbab611 --- /dev/null +++ b/tests/jvm/src/test/resources/test-repo/http/abc.com/com/abc/test/0.1/test-0.1.pom.sha256 @@ -0,0 +1 @@ +df2bc197a6cf76f8086ef746e8af05ff07c2fbec8122ed474ffd341e1cf13307 \ No newline at end of file diff --git a/tests/jvm/src/test/resources/test-repo/http/abc.com/com/github/alexarchambault/coursier_2.11/1.0.0-M9/coursier_2.11-1.0.0-M9.pom.sha256 b/tests/jvm/src/test/resources/test-repo/http/abc.com/com/github/alexarchambault/coursier_2.11/1.0.0-M9/coursier_2.11-1.0.0-M9.pom.sha256 new file mode 100644 index 000000000..a51eb4cd0 --- /dev/null +++ b/tests/jvm/src/test/resources/test-repo/http/abc.com/com/github/alexarchambault/coursier_2.11/1.0.0-M9/coursier_2.11-1.0.0-M9.pom.sha256 @@ -0,0 +1 @@ +401737ef38d6c6dd387f208123b3ec096f98899191311815596d8c79a6e5ae03 \ No newline at end of file diff --git a/tests/jvm/src/test/scala/coursier/test/ChecksumTests.scala b/tests/jvm/src/test/scala/coursier/test/ChecksumTests.scala index ae1c6f31b..45915785a 100644 --- a/tests/jvm/src/test/scala/coursier/test/ChecksumTests.scala +++ b/tests/jvm/src/test/scala/coursier/test/ChecksumTests.scala @@ -52,6 +52,12 @@ object ChecksumTests extends TestSuite { assert(res.nonEmpty) } + 'binarySha256 - { + val content = Platform.readFullySync(getClass.getResource("/empty.sha256").openStream()) + val res = Cache.parseRawChecksum(content) + assert(res.nonEmpty) + } + 'binaryMd5 - { val content = Platform.readFullySync(getClass.getResource("/empty.md5").openStream()) val res = Cache.parseRawChecksum(content) @@ -77,7 +83,8 @@ object ChecksumTests extends TestSuite { url, Map( "MD5" -> (url + ".md5"), - "SHA-1" -> (url + ".sha1") + "SHA-1" -> (url + ".sha1"), + "SHA-256" -> (url + ".sha256") ), Map.empty, Attributes("jar"), @@ -98,6 +105,7 @@ object ChecksumTests extends TestSuite { } 'sha1 - validateAll("SHA-1") + 'sha256 - validateAll("SHA-256") 'md5 - validateAll("MD5") } }