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/31 20:43:10 UTC

[maven-resolver] branch MRESOLVER-56 updated (086e624 -> c50ba48)

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.


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

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (086e624)
            \
             N -- N -- N   refs/heads/MRESOLVER-56 (c50ba48)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

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.


Summary of changes:
 .../org/eclipse/aether/connector/basic/ChecksumValidatorTest.java    | 5 -----
 1 file changed, 5 deletions(-)


[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 c50ba488adf900e958811d0bc0eaf35603e6c752
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     |  4 +-
 .../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, 132 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..80d6173 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
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() )
             {