You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by mi...@apache.org on 2020/05/30 22:14:19 UTC

[maven-resolver] branch MRESOLVER-56 created (now 086e624)

This is an automated email from the ASF dual-hosted git repository.

michaelo pushed a change to branch MRESOLVER-56
in repository https://gitbox.apache.org/repos/asf/maven-resolver.git.


      at 086e624  [MRESOLVER-56] Support SHA-256 and SHA-512 as checksums

This branch includes the following new commits:

     new 086e624  [MRESOLVER-56] Support SHA-256 and SHA-512 as checksums

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[maven-resolver] 01/01: [MRESOLVER-56] Support SHA-256 and SHA-512 as checksums

Posted by mi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

michaelo pushed a commit to branch MRESOLVER-56
in repository https://gitbox.apache.org/repos/asf/maven-resolver.git

commit 086e624dbc33e74a3ef439c4b94c46b847d6b079
Author: Michael Osipov <mi...@apache.org>
AuthorDate: Sun May 31 00:13:08 2020 +0200

    [MRESOLVER-56] Support SHA-256 and SHA-512 as checksums
---
 .../connector/basic/ChecksumCalculatorTest.java    | 44 ++++++++++++++-------
 .../connector/basic/ChecksumValidatorTest.java     |  9 ++++-
 .../impl/Maven2RepositoryLayoutFactory.java        | 11 ++++--
 .../eclipse/aether/internal/impl/SimpleDigest.java | 30 ++++++++++----
 .../impl/Maven2RepositoryLayoutFactoryTest.java    | 46 ++++++++++++++--------
 .../aether/spi/connector/layout/ChecksumTest.java  | 14 +++++--
 .../org/eclipse/aether/util/ChecksumUtilTest.java  | 40 ++++++++++++++-----
 7 files changed, 137 insertions(+), 57 deletions(-)

diff --git a/maven-resolver-connector-basic/src/test/java/org/eclipse/aether/connector/basic/ChecksumCalculatorTest.java b/maven-resolver-connector-basic/src/test/java/org/eclipse/aether/connector/basic/ChecksumCalculatorTest.java
index b0921e1..a903386 100644
--- a/maven-resolver-connector-basic/src/test/java/org/eclipse/aether/connector/basic/ChecksumCalculatorTest.java
+++ b/maven-resolver-connector-basic/src/test/java/org/eclipse/aether/connector/basic/ChecksumCalculatorTest.java
@@ -8,9 +8,9 @@ package org.eclipse.aether.connector.basic;
  * to you under the Apache License, Version 2.0 (the
  * "License"); you may not use this file except in compliance
  * with the License.  You may obtain a copy of the License at
- * 
+ *
  *  http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing,
  * software distributed under the License is distributed on an
  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@@ -39,6 +39,10 @@ import org.junit.Test;
 public class ChecksumCalculatorTest
 {
 
+    private static final String SHA512 = "SHA-512";
+
+    private static final String SHA256 = "SHA-256";
+
     private static final String SHA1 = "SHA-1";
 
     private static final String MD5 = "MD5";
@@ -70,40 +74,46 @@ public class ChecksumCalculatorTest
     @Test
     public void testNoOffset()
     {
-        ChecksumCalculator calculator = newCalculator( SHA1, MD5 );
+        ChecksumCalculator calculator = newCalculator( SHA512, SHA256, SHA1, MD5 );
         calculator.init( 0 );
         calculator.update( toBuffer( "Hello World!" ) );
         Map<String, Object> digests = calculator.get();
         assertNotNull( digests );
+        assertEquals( "861844d6704e8573fec34d967e20bcfef3d424cf48be04e6dc08f2bd58c729743371015ead891cc3cf1c9d34b49264b510751b1ff9e537937bc46b5d6ff4ecc8", digests.get( SHA512 ) );
+        assertEquals( "7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069", digests.get( SHA256 ) );
         assertEquals( "2ef7bde608ce5404e97d5f042f95f89f1c232871", digests.get( SHA1 ) );
         assertEquals( "ed076287532e86365e841e92bfc50d8c", digests.get( MD5 ) );
-        assertEquals( 2, digests.size() );
+        assertEquals( 4, digests.size() );
     }
 
     @Test
     public void testWithOffset()
     {
-        ChecksumCalculator calculator = newCalculator( SHA1, MD5 );
+        ChecksumCalculator calculator = newCalculator( SHA512, SHA256, SHA1, MD5 );
         calculator.init( 6 );
         calculator.update( toBuffer( "World!" ) );
         Map<String, Object> digests = calculator.get();
         assertNotNull( digests );
+        assertEquals( "861844d6704e8573fec34d967e20bcfef3d424cf48be04e6dc08f2bd58c729743371015ead891cc3cf1c9d34b49264b510751b1ff9e537937bc46b5d6ff4ecc8", digests.get( SHA512 ) );
+        assertEquals( "7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069", digests.get( SHA256 ) );
         assertEquals( "2ef7bde608ce5404e97d5f042f95f89f1c232871", digests.get( SHA1 ) );
         assertEquals( "ed076287532e86365e841e92bfc50d8c", digests.get( MD5 ) );
-        assertEquals( 2, digests.size() );
+        assertEquals( 4, digests.size() );
     }
 
     @Test
     public void testWithExcessiveOffset()
     {
-        ChecksumCalculator calculator = newCalculator( SHA1, MD5 );
+        ChecksumCalculator calculator = newCalculator( SHA512, SHA256, SHA1, MD5 );
         calculator.init( 100 );
         calculator.update( toBuffer( "World!" ) );
         Map<String, Object> digests = calculator.get();
         assertNotNull( digests );
+        assertTrue( digests.get( SHA512 ) instanceof IOException );
+        assertTrue( digests.get( SHA256 ) instanceof IOException );
         assertTrue( digests.get( SHA1 ) instanceof IOException );
         assertTrue( digests.get( MD5 ) instanceof IOException );
-        assertEquals( 2, digests.size() );
+        assertEquals( 4, digests.size() );
     }
 
     @Test
@@ -122,42 +132,48 @@ public class ChecksumCalculatorTest
     @Test
     public void testNoInitCall()
     {
-        ChecksumCalculator calculator = newCalculator( SHA1, MD5 );
+        ChecksumCalculator calculator = newCalculator( SHA512, SHA256, SHA1, MD5 );
         calculator.update( toBuffer( "Hello World!" ) );
         Map<String, Object> digests = calculator.get();
         assertNotNull( digests );
+        assertEquals( "861844d6704e8573fec34d967e20bcfef3d424cf48be04e6dc08f2bd58c729743371015ead891cc3cf1c9d34b49264b510751b1ff9e537937bc46b5d6ff4ecc8", digests.get( SHA512 ) );
+        assertEquals( "7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069", digests.get( SHA256 ) );
         assertEquals( "2ef7bde608ce5404e97d5f042f95f89f1c232871", digests.get( SHA1 ) );
         assertEquals( "ed076287532e86365e841e92bfc50d8c", digests.get( MD5 ) );
-        assertEquals( 2, digests.size() );
+        assertEquals( 4, digests.size() );
     }
 
     @Test
     public void testRestart()
     {
-        ChecksumCalculator calculator = newCalculator( SHA1, MD5 );
+        ChecksumCalculator calculator = newCalculator( SHA512, SHA256, SHA1, MD5 );
         calculator.init( 0 );
         calculator.update( toBuffer( "Ignored" ) );
         calculator.init( 0 );
         calculator.update( toBuffer( "Hello World!" ) );
         Map<String, Object> digests = calculator.get();
         assertNotNull( digests );
+        assertEquals( "861844d6704e8573fec34d967e20bcfef3d424cf48be04e6dc08f2bd58c729743371015ead891cc3cf1c9d34b49264b510751b1ff9e537937bc46b5d6ff4ecc8", digests.get( SHA512 ) );
+        assertEquals( "7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069", digests.get( SHA256 ) );
         assertEquals( "2ef7bde608ce5404e97d5f042f95f89f1c232871", digests.get( SHA1 ) );
         assertEquals( "ed076287532e86365e841e92bfc50d8c", digests.get( MD5 ) );
-        assertEquals( 2, digests.size() );
+        assertEquals( 4, digests.size() );
     }
 
     @Test
     public void testRestartAfterError()
     {
-        ChecksumCalculator calculator = newCalculator( SHA1, MD5 );
+        ChecksumCalculator calculator = newCalculator( SHA512, SHA256, SHA1, MD5 );
         calculator.init( 100 );
         calculator.init( 0 );
         calculator.update( toBuffer( "Hello World!" ) );
         Map<String, Object> digests = calculator.get();
         assertNotNull( digests );
+        assertEquals( "861844d6704e8573fec34d967e20bcfef3d424cf48be04e6dc08f2bd58c729743371015ead891cc3cf1c9d34b49264b510751b1ff9e537937bc46b5d6ff4ecc8", digests.get( SHA512 ) );
+        assertEquals( "7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069", digests.get( SHA256 ) );
         assertEquals( "2ef7bde608ce5404e97d5f042f95f89f1c232871", digests.get( SHA1 ) );
         assertEquals( "ed076287532e86365e841e92bfc50d8c", digests.get( MD5 ) );
-        assertEquals( 2, digests.size() );
+        assertEquals( 4, digests.size() );
     }
 
 }
diff --git a/maven-resolver-connector-basic/src/test/java/org/eclipse/aether/connector/basic/ChecksumValidatorTest.java b/maven-resolver-connector-basic/src/test/java/org/eclipse/aether/connector/basic/ChecksumValidatorTest.java
index 0e860ce..3bb7385 100644
--- a/maven-resolver-connector-basic/src/test/java/org/eclipse/aether/connector/basic/ChecksumValidatorTest.java
+++ b/maven-resolver-connector-basic/src/test/java/org/eclipse/aether/connector/basic/ChecksumValidatorTest.java
@@ -8,9 +8,9 @@ package org.eclipse.aether.connector.basic;
  * to you under the Apache License, Version 2.0 (the
  * "License"); you may not use this file except in compliance
  * with the License.  You may obtain a copy of the License at
- * 
+ *
  *  http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing,
  * software distributed under the License is distributed on an
  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@@ -167,6 +167,11 @@ public class ChecksumValidatorTest
 
     }
 
+    // FIXME Modify tests for SHA-2 family
+    private static final String SHA512 = "SHA-512";
+
+    private static final String SHA256 = "SHA-256";
+
     private static final String SHA1 = "SHA-1";
 
     private static final String MD5 = "MD5";
diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/Maven2RepositoryLayoutFactory.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/Maven2RepositoryLayoutFactory.java
index 9202c4b..d8dff28 100644
--- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/Maven2RepositoryLayoutFactory.java
+++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/Maven2RepositoryLayoutFactory.java
@@ -8,9 +8,9 @@ package org.eclipse.aether.internal.impl;
  * to you under the Apache License, Version 2.0 (the
  * "License"); you may not use this file except in compliance
  * with the License.  You may obtain a copy of the License at
- * 
+ *
  *  http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing,
  * software distributed under the License is distributed on an
  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@@ -55,7 +55,7 @@ public final class Maven2RepositoryLayoutFactory
 
     /**
      * Sets the priority of this component.
-     * 
+     *
      * @param priority The priority.
      * @return This component for chaining, never {@code null}.
      */
@@ -155,7 +155,10 @@ public final class Maven2RepositoryLayoutFactory
 
         private List<Checksum> getChecksums( URI location )
         {
-            return Arrays.asList( Checksum.forLocation( location, "SHA-1" ), Checksum.forLocation( location, "MD5" ) );
+            return Arrays.asList( Checksum.forLocation( location, "SHA-512" ),
+                                  Checksum.forLocation( location, "SHA-256" ),
+                                  Checksum.forLocation( location, "SHA-1" ),
+                                  Checksum.forLocation( location, "MD5" ) );
         }
 
     }
diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/SimpleDigest.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/SimpleDigest.java
index 479ae76..0f83c59 100644
--- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/SimpleDigest.java
+++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/SimpleDigest.java
@@ -8,9 +8,9 @@ package org.eclipse.aether.internal.impl;
  * to you under the Apache License, Version 2.0 (the
  * "License"); you may not use this file except in compliance
  * with the License.  You may obtain a copy of the License at
- * 
+ *
  *  http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing,
  * software distributed under the License is distributed on an
  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@@ -37,18 +37,32 @@ class SimpleDigest
     {
         try
         {
-            digest = MessageDigest.getInstance( "SHA-1" );
+            digest = MessageDigest.getInstance( "SHA-512" );
         }
-        catch ( NoSuchAlgorithmException e )
+        catch ( NoSuchAlgorithmException ne3 )
         {
             try
             {
-                digest = MessageDigest.getInstance( "MD5" );
+                digest = MessageDigest.getInstance( "SHA-256" );
             }
-            catch ( NoSuchAlgorithmException ne )
+            catch ( NoSuchAlgorithmException ne2 )
             {
-                digest = null;
-                hash = 13;
+                try
+                {
+                    digest = MessageDigest.getInstance( "SHA-1" );
+                }
+                catch ( NoSuchAlgorithmException ne1 )
+                {
+                    try
+                    {
+                        digest = MessageDigest.getInstance( "MD5" );
+                    }
+                    catch ( NoSuchAlgorithmException ne0 )
+                    {
+                        digest = null;
+                        hash = 13;
+                    }
+                }
             }
         }
     }
diff --git a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/Maven2RepositoryLayoutFactoryTest.java b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/Maven2RepositoryLayoutFactoryTest.java
index 7411a1d..4d14cb0 100644
--- a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/Maven2RepositoryLayoutFactoryTest.java
+++ b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/Maven2RepositoryLayoutFactoryTest.java
@@ -8,9 +8,9 @@ package org.eclipse.aether.internal.impl;
  * to you under the Apache License, Version 2.0 (the
  * "License"); you may not use this file except in compliance
  * with the License.  You may obtain a copy of the License at
- * 
+ *
  *  http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing,
  * software distributed under the License is distributed on an
  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@@ -154,9 +154,11 @@ public class Maven2RepositoryLayoutFactoryTest
         DefaultArtifact artifact = new DefaultArtifact( "g.i.d", "a-i.d", "cls", "ext", "1.0" );
         URI uri = layout.getLocation( artifact, false );
         List<Checksum> checksums = layout.getChecksums( artifact, false, uri );
-        assertEquals( 2, checksums.size() );
-        assertChecksum( checksums.get( 0 ), "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.ext.sha1", "SHA-1" );
-        assertChecksum( checksums.get( 1 ), "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.ext.md5", "MD5" );
+        assertEquals( 4, checksums.size() );
+        assertChecksum( checksums.get( 0 ), "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.ext.sha512", "SHA-512" );
+        assertChecksum( checksums.get( 1 ), "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.ext.sha256", "SHA-256" );
+        assertChecksum( checksums.get( 2 ), "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.ext.sha1", "SHA-1" );
+        assertChecksum( checksums.get( 3 ), "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.ext.md5", "MD5" );
     }
 
     @Test
@@ -165,9 +167,11 @@ public class Maven2RepositoryLayoutFactoryTest
         DefaultArtifact artifact = new DefaultArtifact( "g.i.d", "a-i.d", "cls", "ext", "1.0" );
         URI uri = layout.getLocation( artifact, true );
         List<Checksum> checksums = layout.getChecksums( artifact, true, uri );
-        assertEquals( 2, checksums.size() );
-        assertChecksum( checksums.get( 0 ), "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.ext.sha1", "SHA-1" );
-        assertChecksum( checksums.get( 1 ), "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.ext.md5", "MD5" );
+        assertEquals( 4, checksums.size() );
+        assertChecksum( checksums.get( 0 ), "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.ext.sha512", "SHA-512" );
+        assertChecksum( checksums.get( 1 ), "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.ext.sha256", "SHA-256" );
+        assertChecksum( checksums.get( 2 ), "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.ext.sha1", "SHA-1" );
+        assertChecksum( checksums.get( 3 ), "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.ext.md5", "MD5" );
     }
 
     @Test
@@ -178,10 +182,14 @@ public class Maven2RepositoryLayoutFactoryTest
                                  Metadata.Nature.RELEASE_OR_SNAPSHOT );
         URI uri = layout.getLocation( metadata, false );
         List<Checksum> checksums = layout.getChecksums( metadata, false, uri );
-        assertEquals( 2, checksums.size() );
-        assertChecksum( checksums.get( 0 ), "org/apache/maven/plugins/maven-jar-plugin/maven-metadata.xml.sha1",
+        assertEquals( 4, checksums.size() );
+        assertChecksum( checksums.get( 0 ), "org/apache/maven/plugins/maven-jar-plugin/maven-metadata.xml.sha512",
+                        "SHA-512" );
+        assertChecksum( checksums.get( 1 ), "org/apache/maven/plugins/maven-jar-plugin/maven-metadata.xml.sha256",
+                        "SHA-256" );
+        assertChecksum( checksums.get( 2 ), "org/apache/maven/plugins/maven-jar-plugin/maven-metadata.xml.sha1",
                         "SHA-1" );
-        assertChecksum( checksums.get( 1 ), "org/apache/maven/plugins/maven-jar-plugin/maven-metadata.xml.md5", "MD5" );
+        assertChecksum( checksums.get( 3 ), "org/apache/maven/plugins/maven-jar-plugin/maven-metadata.xml.md5", "MD5" );
     }
 
     @Test
@@ -192,10 +200,14 @@ public class Maven2RepositoryLayoutFactoryTest
                                  Metadata.Nature.RELEASE_OR_SNAPSHOT );
         URI uri = layout.getLocation( metadata, true );
         List<Checksum> checksums = layout.getChecksums( metadata, true, uri );
-        assertEquals( 2, checksums.size() );
-        assertChecksum( checksums.get( 0 ), "org/apache/maven/plugins/maven-jar-plugin/maven-metadata.xml.sha1",
+        assertEquals( 4, checksums.size() );
+        assertChecksum( checksums.get( 0 ), "org/apache/maven/plugins/maven-jar-plugin/maven-metadata.xml.sha512",
+                        "SHA-512" );
+        assertChecksum( checksums.get( 1 ), "org/apache/maven/plugins/maven-jar-plugin/maven-metadata.xml.sha256",
+                        "SHA-256" );
+        assertChecksum( checksums.get( 2 ), "org/apache/maven/plugins/maven-jar-plugin/maven-metadata.xml.sha1",
                         "SHA-1" );
-        assertChecksum( checksums.get( 1 ), "org/apache/maven/plugins/maven-jar-plugin/maven-metadata.xml.md5", "MD5" );
+        assertChecksum( checksums.get( 3 ), "org/apache/maven/plugins/maven-jar-plugin/maven-metadata.xml.md5", "MD5" );
     }
 
     @Test
@@ -204,7 +216,7 @@ public class Maven2RepositoryLayoutFactoryTest
         DefaultArtifact artifact = new DefaultArtifact( "g.i.d", "a-i.d", "cls", "asc", "1.0" );
         URI uri = layout.getLocation( artifact, false );
         List<Checksum> checksums = layout.getChecksums( artifact, false, uri );
-        assertChecksums( checksums, "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.asc", "SHA-1", "MD5" );
+        assertChecksums( checksums, "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.asc", "SHA-512", "SHA-256", "SHA-1", "MD5" );
 
         artifact = new DefaultArtifact( "g.i.d", "a-i.d", "cls", "jar.asc", "1.0" );
         uri = layout.getLocation( artifact, false );
@@ -218,7 +230,7 @@ public class Maven2RepositoryLayoutFactoryTest
         DefaultArtifact artifact = new DefaultArtifact( "g.i.d", "a-i.d", "cls", "asc", "1.0" );
         URI uri = layout.getLocation( artifact, true );
         List<Checksum> checksums = layout.getChecksums( artifact, true, uri );
-        assertChecksums( checksums, "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.asc", "SHA-1", "MD5" );
+        assertChecksums( checksums, "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.asc", "SHA-512", "SHA-256", "SHA-1", "MD5" );
 
         artifact = new DefaultArtifact( "g.i.d", "a-i.d", "cls", "jar.asc", "1.0" );
         uri = layout.getLocation( artifact, true );
@@ -235,7 +247,7 @@ public class Maven2RepositoryLayoutFactoryTest
         DefaultArtifact artifact = new DefaultArtifact( "g.i.d", "a-i.d", "cls", "jar.asc", "1.0" );
         URI uri = layout.getLocation( artifact, true );
         List<Checksum> checksums = layout.getChecksums( artifact, true, uri );
-        assertChecksums( checksums, "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.jar.asc", "SHA-1", "MD5" );
+        assertChecksums( checksums, "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.jar.asc", "SHA-512", "SHA-256", "SHA-1", "MD5" );
     }
 
 }
diff --git a/maven-resolver-spi/src/test/java/org/eclipse/aether/spi/connector/layout/ChecksumTest.java b/maven-resolver-spi/src/test/java/org/eclipse/aether/spi/connector/layout/ChecksumTest.java
index bcd49b4..4d701b5 100644
--- a/maven-resolver-spi/src/test/java/org/eclipse/aether/spi/connector/layout/ChecksumTest.java
+++ b/maven-resolver-spi/src/test/java/org/eclipse/aether/spi/connector/layout/ChecksumTest.java
@@ -8,9 +8,9 @@ package org.eclipse.aether.spi.connector.layout;
  * to you under the Apache License, Version 2.0 (the
  * "License"); you may not use this file except in compliance
  * with the License.  You may obtain a copy of the License at
- * 
+ *
  *  http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing,
  * software distributed under the License is distributed on an
  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@@ -33,7 +33,15 @@ public class ChecksumTest
     @Test
     public void testForLocation()
     {
-        Checksum cs = Checksum.forLocation( URI.create( "dir/sub%20dir/file.txt" ), "SHA-1" );
+        Checksum cs = Checksum.forLocation( URI.create( "dir/sub%20dir/file.txt" ), "SHA-512" );
+        assertEquals( "SHA-512", cs.getAlgorithm() );
+        assertEquals( "dir/sub%20dir/file.txt.sha512", cs.getLocation().toString() );
+
+        cs = Checksum.forLocation( URI.create( "dir/sub%20dir/file.txt" ), "SHA-256" );
+        assertEquals( "SHA-256", cs.getAlgorithm() );
+        assertEquals( "dir/sub%20dir/file.txt.sha256", cs.getLocation().toString() );
+
+        cs = Checksum.forLocation( URI.create( "dir/sub%20dir/file.txt" ), "SHA-1" );
         assertEquals( "SHA-1", cs.getAlgorithm() );
         assertEquals( "dir/sub%20dir/file.txt.sha1", cs.getLocation().toString() );
 
diff --git a/maven-resolver-util/src/test/java/org/eclipse/aether/util/ChecksumUtilTest.java b/maven-resolver-util/src/test/java/org/eclipse/aether/util/ChecksumUtilTest.java
index 6082386..733c290 100644
--- a/maven-resolver-util/src/test/java/org/eclipse/aether/util/ChecksumUtilTest.java
+++ b/maven-resolver-util/src/test/java/org/eclipse/aether/util/ChecksumUtilTest.java
@@ -8,9 +8,9 @@ package org.eclipse.aether.util;
  * to you under the Apache License, Version 2.0 (the
  * "License"); you may not use this file except in compliance
  * with the License.  You may obtain a copy of the License at
- * 
+ *
  *  http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing,
  * software distributed under the License is distributed on an
  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@@ -40,11 +40,11 @@ public class ChecksumUtilTest
     private static final String EMPTY = "EMPTY";
     private static final String PATTERN = "PATTERN";
     private static final String TEXT = "TEXT";
-    
+
     private Map<String, File> files = new HashMap<>(3);
-    
+
     private Map<String, byte[]> bytes = new HashMap<>(3);
-    
+
     private static Map<String, String> emptyChecksums = new HashMap<>();
 
     private static Map<String, String> patternChecksums = new HashMap<>();
@@ -58,10 +58,16 @@ public class ChecksumUtilTest
     {
         emptyChecksums.put( "MD5", "d41d8cd98f00b204e9800998ecf8427e" );
         emptyChecksums.put( "SHA-1", "da39a3ee5e6b4b0d3255bfef95601890afd80709" );
+        emptyChecksums.put( "SHA-256", "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" );
+        emptyChecksums.put( "SHA-512", "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e" );
         patternChecksums.put( "MD5", "14f01d6c7de7d4cf0a4887baa3528b5a" );
         patternChecksums.put( "SHA-1", "feeeda19f626f9b0ef6cbf5948c1ec9531694295" );
+        patternChecksums.put( "SHA-256", "81d480a714840ab206dc8de62ca6119036f65499ad9e2e227c2465551bed684d" );
+        patternChecksums.put( "SHA-512", "931aa34118d9a85b9514e0224046d736a5bd7e2b2f366505fe1ad07ed85e1a4ac0cbc18e9b9a7fe36ce835be2a18cb571202a4975d182553faff336970eb0b7e" );
         textChecksums.put( "MD5", "12582d1a662cefe3385f2113998e43ed" );
         textChecksums.put( "SHA-1", "a8ae272db549850eef2ff54376f8cac2770745ee" );
+        textChecksums.put( "SHA-256", "35829adced2979761ba521dc2bb7d166e92ebed7342319d041398e509d481a46" );
+        textChecksums.put( "SHA-512", "2d6d19570b26080fa88101af2256ce3dae63512b06864cd36a05371c81d6dbd0ec226dd75f22e8d46a9582e1fc40ee6e7a02d43c852f3c92255982b835db6e7c" );
     }
 
     @Before
@@ -96,7 +102,7 @@ public class ChecksumUtilTest
         for ( Map.Entry<String,File> fileEntry : files.entrySet() )
         {
 
-            checksums = ChecksumUtils.calc( fileEntry.getValue(), Arrays.asList( "SHA-1", "MD5" ) );
+            checksums = ChecksumUtils.calc( fileEntry.getValue(), Arrays.asList( "SHA-512", "SHA-256", "SHA-1", "MD5" ) );
 
             for ( Entry<String, Object> entry : checksums.entrySet() )
             {
@@ -121,7 +127,7 @@ public class ChecksumUtilTest
         {
             for ( int i = 0; i < 150; i++ )
             {
-                ChecksumUtils.calc( file, Arrays.asList( "SHA-1", "MD5" ) );
+                ChecksumUtils.calc( file, Arrays.asList( "SHA-512", "SHA-256", "SHA-1", "MD5" ) );
             }
             assertTrue( "Could not delete file", file.delete() );
         }
@@ -134,15 +140,23 @@ public class ChecksumUtilTest
     {
         for ( Map<String, String> checksums : sums.values() )
         {
+            String sha512 = checksums.get( "SHA-512" );
+            String sha256 = checksums.get( "SHA-256" );
             String sha1 = checksums.get( "SHA-1" );
             String md5 = checksums.get( "MD5" );
 
+            File sha512File = createTempFile( sha512 );
+            File sha256File = createTempFile( sha256 );
             File sha1File = createTempFile( sha1 );
             File md5File = createTempFile( md5 );
 
+            assertEquals( sha512, ChecksumUtils.read( sha512File ) );
+            assertEquals( sha256, ChecksumUtils.read( sha256File ) );
             assertEquals( sha1, ChecksumUtils.read( sha1File ) );
             assertEquals( md5, ChecksumUtils.read( md5File ) );
 
+            assertTrue( "ChecksumUtils leaks file handles (cannot delete checksums.sha512)", sha512File.delete() );
+            assertTrue( "ChecksumUtils leaks file handles (cannot delete checksums.sha256)", sha256File.delete() );
             assertTrue( "ChecksumUtils leaks file handles (cannot delete checksums.sha1)", sha1File.delete() );
             assertTrue( "ChecksumUtils leaks file handles (cannot delete checksums.md5)", md5File.delete() );
         }
@@ -154,15 +168,23 @@ public class ChecksumUtilTest
     {
         for ( Map<String, String> checksums : sums.values() )
         {
+            String sha512 = checksums.get( "SHA-512" );
+            String sha256 = checksums.get( "SHA-256" );
             String sha1 = checksums.get( "SHA-1" );
             String md5 = checksums.get( "MD5" );
 
+            File sha512File = createTempFile( "sha512-checksum = " + sha512 );
+            File sha256File = createTempFile( "sha256-checksum = " + sha256 );
             File sha1File = createTempFile( "sha1-checksum = " + sha1 );
             File md5File = createTempFile( md5 + " test" );
 
+            assertEquals( sha512, ChecksumUtils.read( sha512File ) );
+            assertEquals( sha256, ChecksumUtils.read( sha256File ) );
             assertEquals( sha1, ChecksumUtils.read( sha1File ) );
             assertEquals( md5, ChecksumUtils.read( md5File ) );
 
+            assertTrue( "ChecksumUtils leaks file handles (cannot delete checksums.sha512)", sha512File.delete() );
+            assertTrue( "ChecksumUtils leaks file handles (cannot delete checksums.sha256)", sha256File.delete() );
             assertTrue( "ChecksumUtils leaks file handles (cannot delete checksums.sha1)", sha1File.delete() );
             assertTrue( "ChecksumUtils leaks file handles (cannot delete checksums.md5)", md5File.delete() );
         }
@@ -188,7 +210,7 @@ public class ChecksumUtilTest
         assertEquals( "ff", ChecksumUtils.toHexString( new byte[] { -1 } ) );
         assertEquals( "00017f", ChecksumUtils.toHexString( new byte[] { 0, 1, 127 } ) );
     }
-    
+
     @Test
     public void testCalcWithByteArray() throws Throwable
     {
@@ -196,7 +218,7 @@ public class ChecksumUtilTest
 
         for ( Map.Entry<String, byte[]> bytesEntry : bytes.entrySet() )
         {
-            checksums = ChecksumUtils.calc( bytesEntry.getValue(), Arrays.asList( "SHA-1", "MD5" ) );
+            checksums = ChecksumUtils.calc( bytesEntry.getValue(), Arrays.asList( "SHA-512", "SHA-256", "SHA-1", "MD5" ) );
 
             for ( Entry<String, Object> entry : checksums.entrySet() )
             {