Skip to content

Commit eb2a0c8

Browse files
committed
Deprecate internal checksum APIs and move checksum algorithms from http-auth-aws module to checksums module
1 parent 8f2c7ba commit eb2a0c8

File tree

36 files changed

+202
-114
lines changed

36 files changed

+202
-114
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"type": "deprecation",
3+
"category": "AWS SDK for Java v2",
4+
"contributor": "",
5+
"description": "Deprecate internal checksum algorithm classes."
6+
}

build-tools/src/main/resources/software/amazon/awssdk/spotbugs-suppressions.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -303,8 +303,8 @@
303303
<!-- Retrieves and updates crc value in update() -->
304304
<Match>
305305
<Or>
306-
<Class name="software.amazon.awssdk.http.auth.aws.internal.signer.checksums.SdkCrc32CChecksum"/>
307-
<Class name="software.amazon.awssdk.http.auth.aws.internal.signer.checksums.SdkCrc32Checksum"/>
306+
<Class name="software.amazon.awssdk.checksums.internal.SdkCrc32CChecksum"/>
307+
<Class name="software.amazon.awssdk.checksums.internal.SdkCrc32Checksum"/>
308308
<Class name="software.amazon.awssdk.core.internal.checksums.factory.SdkCrc32C"/>
309309
<Class name="software.amazon.awssdk.core.internal.checksums.factory.SdkCrc32"/>
310310
</Or>

core/checksums/pom.xml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,19 @@
4545
<version>${awsjavasdk.version}</version>
4646
</dependency>
4747

48+
<dependency>
49+
<groupId>software.amazon.awssdk</groupId>
50+
<artifactId>utils</artifactId>
51+
<version>${awsjavasdk.version}</version>
52+
</dependency>
53+
54+
<dependency>
55+
<groupId>software.amazon.awssdk.crt</groupId>
56+
<artifactId>aws-crt</artifactId>
57+
<version>${awscrt.version}</version>
58+
<optional>true</optional>
59+
</dependency>
60+
4861
<dependency>
4962
<groupId>org.junit.jupiter</groupId>
5063
<artifactId>junit-jupiter</artifactId>
Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,48 @@
1313
* permissions and limitations under the License.
1414
*/
1515

16-
package software.amazon.awssdk.http.auth.aws.internal.signer.checksums;
16+
package software.amazon.awssdk.checksums;
1717

1818
import java.nio.ByteBuffer;
1919
import java.util.zip.Checksum;
20-
import software.amazon.awssdk.annotations.SdkInternalApi;
20+
import software.amazon.awssdk.annotations.SdkProtectedApi;
21+
import software.amazon.awssdk.checksums.internal.Crc32CChecksum;
22+
import software.amazon.awssdk.checksums.internal.Crc32Checksum;
23+
import software.amazon.awssdk.checksums.internal.Crc64NvmeChecksum;
24+
import software.amazon.awssdk.checksums.internal.Md5Checksum;
25+
import software.amazon.awssdk.checksums.internal.Sha1Checksum;
26+
import software.amazon.awssdk.checksums.internal.Sha256Checksum;
27+
import software.amazon.awssdk.checksums.spi.ChecksumAlgorithm;
2128

2229
/**
2330
* Extension of {@link Checksum} to support checksums and checksum validations used by the SDK that are not provided by the JDK.
2431
*/
25-
@SdkInternalApi
32+
@SdkProtectedApi
2633
public interface SdkChecksum extends Checksum {
2734

35+
/**
36+
* Returns an {@link SdkChecksum} based on the {@link ChecksumAlgorithm} provided.
37+
* UnsupportedOperationException will be thrown for unsupported algorithm.
38+
*/
39+
static SdkChecksum forAlgorithm(ChecksumAlgorithm algorithm) {
40+
switch (algorithm.algorithmId()) {
41+
case "CRC32C":
42+
return new Crc32CChecksum();
43+
case "CRC32":
44+
return new Crc32Checksum();
45+
case "SHA1":
46+
return new Sha1Checksum();
47+
case "SHA256":
48+
return new Sha256Checksum();
49+
case "MD5":
50+
return new Md5Checksum();
51+
case "CRC64NVME":
52+
return new Crc64NvmeChecksum();
53+
default:
54+
throw new UnsupportedOperationException("Unsupported checksum algorithm: " + algorithm);
55+
}
56+
}
57+
2858
/**
2959
* Returns the computed checksum in a byte array rather than the long provided by {@link #getValue()}.
3060
*
@@ -49,7 +79,6 @@ default void update(byte[] b) {
4979
update(b, 0, b.length);
5080
}
5181

52-
5382
/**
5483
* Updates the current checksum with the bytes from the specified buffer.
5584
* <p>
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,11 @@
1313
* permissions and limitations under the License.
1414
*/
1515

16-
package software.amazon.awssdk.http.auth.aws.internal.signer.checksums;
16+
package software.amazon.awssdk.checksums.internal;
1717

1818
import java.util.zip.Checksum;
1919
import software.amazon.awssdk.annotations.SdkInternalApi;
20+
import software.amazon.awssdk.checksums.SdkChecksum;
2021

2122
/**
2223
* Base class for CRC related checksums
Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,14 @@
1313
* permissions and limitations under the License.
1414
*/
1515

16-
package software.amazon.awssdk.http.auth.aws.internal.signer.checksums;
16+
package software.amazon.awssdk.checksums.internal;
1717

18-
import static software.amazon.awssdk.http.auth.aws.internal.signer.util.ChecksumUtil.longToByte;
18+
import static software.amazon.awssdk.utils.NumericUtils.longToByte;
1919

2020
import java.util.Arrays;
2121
import java.util.zip.Checksum;
2222
import software.amazon.awssdk.annotations.SdkInternalApi;
23+
import software.amazon.awssdk.checksums.SdkChecksum;
2324
import software.amazon.awssdk.crt.checksums.CRC32C;
2425
import software.amazon.awssdk.utils.ClassLoaderHelper;
2526

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,14 @@
1313
* permissions and limitations under the License.
1414
*/
1515

16-
package software.amazon.awssdk.http.auth.aws.internal.signer.checksums;
16+
package software.amazon.awssdk.checksums.internal;
1717

18-
import static software.amazon.awssdk.http.auth.aws.internal.signer.util.ChecksumUtil.longToByte;
18+
import static software.amazon.awssdk.utils.NumericUtils.longToByte;
1919

2020
import java.util.Arrays;
2121
import java.util.zip.Checksum;
2222
import software.amazon.awssdk.annotations.SdkInternalApi;
23+
import software.amazon.awssdk.checksums.SdkChecksum;
2324
import software.amazon.awssdk.crt.checksums.CRC32;
2425
import software.amazon.awssdk.utils.ClassLoaderHelper;
2526

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,25 +13,33 @@
1313
* permissions and limitations under the License.
1414
*/
1515

16-
package software.amazon.awssdk.http.auth.aws.internal.signer.checksums;
16+
package software.amazon.awssdk.checksums.internal;
1717

18-
import static software.amazon.awssdk.http.auth.aws.internal.signer.util.ChecksumUtil.longToByte;
19-
import static software.amazon.awssdk.http.auth.aws.internal.signer.util.OptionalDependencyLoaderUtil.getCrc64Nvme;
18+
import static software.amazon.awssdk.utils.DependencyValidate.requireClass;
19+
import static software.amazon.awssdk.utils.NumericUtils.longToByte;
2020

2121
import java.util.zip.Checksum;
2222
import software.amazon.awssdk.annotations.SdkInternalApi;
23+
import software.amazon.awssdk.checksums.SdkChecksum;
2324
import software.amazon.awssdk.crt.checksums.CRC64NVME;
2425

2526
/**
2627
* Implementation of {@link SdkChecksum} to calculate an CRC64NVME checksum.
2728
*/
2829
@SdkInternalApi
2930
public final class Crc64NvmeChecksum extends BaseCrcChecksum {
31+
private static final String CRT_CRC64NVME_PATH = "software.amazon.awssdk.crt.checksums.CRC64NVME";
32+
private static final String CRT_MODULE = "software.amazon.awssdk.crt:aws-crt";
3033

3134
public Crc64NvmeChecksum() {
3235
super(getCrc64Nvme());
3336
}
3437

38+
private static CRC64NVME getCrc64Nvme() {
39+
requireClass(CRT_CRC64NVME_PATH, CRT_MODULE, "CRC64NVME");
40+
return new CRC64NVME();
41+
}
42+
3543
@Override
3644
public Checksum cloneChecksum(Checksum checksum) {
3745
if (checksum instanceof CRC64NVME) {
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
* permissions and limitations under the License.
1414
*/
1515

16-
package software.amazon.awssdk.http.auth.aws.internal.signer.util;
16+
package software.amazon.awssdk.checksums.internal;
1717

1818
import java.security.MessageDigest;
1919
import java.security.NoSuchAlgorithmException;
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@
1313
* permissions and limitations under the License.
1414
*/
1515

16-
package software.amazon.awssdk.http.auth.aws.internal.signer.checksums;
16+
package software.amazon.awssdk.checksums.internal;
1717

1818
import java.security.MessageDigest;
1919
import software.amazon.awssdk.annotations.SdkInternalApi;
20-
import software.amazon.awssdk.http.auth.aws.internal.signer.util.DigestAlgorithm;
20+
import software.amazon.awssdk.checksums.SdkChecksum;
2121

2222
/**
2323
* Implementation of {@link SdkChecksum} to calculate an MD5 checksum.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
* permissions and limitations under the License.
1414
*/
1515

16-
package software.amazon.awssdk.http.auth.aws.internal.signer.checksums;
16+
package software.amazon.awssdk.checksums.internal;
1717

1818
import java.util.zip.Checksum;
1919
import software.amazon.awssdk.annotations.SdkInternalApi;
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
* permissions and limitations under the License.
1414
*/
1515

16-
package software.amazon.awssdk.http.auth.aws.internal.signer.checksums;
16+
package software.amazon.awssdk.checksums.internal;
1717

1818
import java.util.zip.Checksum;
1919
import software.amazon.awssdk.annotations.SdkInternalApi;
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@
1313
* permissions and limitations under the License.
1414
*/
1515

16-
package software.amazon.awssdk.http.auth.aws.internal.signer.checksums;
16+
package software.amazon.awssdk.checksums.internal;
1717

1818
import java.security.MessageDigest;
1919
import software.amazon.awssdk.annotations.SdkInternalApi;
20-
import software.amazon.awssdk.http.auth.aws.internal.signer.util.DigestAlgorithm;
20+
import software.amazon.awssdk.checksums.SdkChecksum;
2121

2222
/**
2323
* Implementation of {@link SdkChecksum} to calculate an Sha-1 checksum.
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@
1313
* permissions and limitations under the License.
1414
*/
1515

16-
package software.amazon.awssdk.http.auth.aws.internal.signer.checksums;
16+
package software.amazon.awssdk.checksums.internal;
1717

1818
import java.security.MessageDigest;
1919
import software.amazon.awssdk.annotations.SdkInternalApi;
20-
import software.amazon.awssdk.http.auth.aws.internal.signer.util.DigestAlgorithm;
20+
import software.amazon.awssdk.checksums.SdkChecksum;
2121

2222
/**
2323
* Implementation of {@link SdkChecksum} to calculate an Sha-256 Checksum.

core/http-auth-aws/src/main/java/software/amazon/awssdk/http/auth/aws/crt/internal/signer/AwsChunkedV4aPayloadSigner.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,12 @@
2929
import java.util.Collections;
3030
import java.util.List;
3131
import software.amazon.awssdk.annotations.SdkInternalApi;
32+
import software.amazon.awssdk.checksums.SdkChecksum;
3233
import software.amazon.awssdk.checksums.spi.ChecksumAlgorithm;
3334
import software.amazon.awssdk.http.ContentStreamProvider;
3435
import software.amazon.awssdk.http.Header;
3536
import software.amazon.awssdk.http.SdkHttpRequest;
3637
import software.amazon.awssdk.http.auth.aws.internal.signer.CredentialScope;
37-
import software.amazon.awssdk.http.auth.aws.internal.signer.checksums.SdkChecksum;
3838
import software.amazon.awssdk.http.auth.aws.internal.signer.chunkedencoding.ChecksumTrailerProvider;
3939
import software.amazon.awssdk.http.auth.aws.internal.signer.chunkedencoding.ChunkedEncodedInputStream;
4040
import software.amazon.awssdk.http.auth.aws.internal.signer.chunkedencoding.TrailerProvider;

core/http-auth-aws/src/main/java/software/amazon/awssdk/http/auth/aws/internal/signer/AwsChunkedV4PayloadSigner.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,11 @@
3333
import java.util.List;
3434
import org.reactivestreams.Publisher;
3535
import software.amazon.awssdk.annotations.SdkInternalApi;
36+
import software.amazon.awssdk.checksums.SdkChecksum;
3637
import software.amazon.awssdk.checksums.spi.ChecksumAlgorithm;
3738
import software.amazon.awssdk.http.ContentStreamProvider;
3839
import software.amazon.awssdk.http.Header;
3940
import software.amazon.awssdk.http.SdkHttpRequest;
40-
import software.amazon.awssdk.http.auth.aws.internal.signer.checksums.SdkChecksum;
4141
import software.amazon.awssdk.http.auth.aws.internal.signer.chunkedencoding.ChecksumTrailerProvider;
4242
import software.amazon.awssdk.http.auth.aws.internal.signer.chunkedencoding.ChunkedEncodedInputStream;
4343
import software.amazon.awssdk.http.auth.aws.internal.signer.chunkedencoding.SigV4ChunkExtensionProvider;

core/http-auth-aws/src/main/java/software/amazon/awssdk/http/auth/aws/internal/signer/FlexibleChecksummer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,10 @@
2929
import java.util.stream.Collectors;
3030
import org.reactivestreams.Publisher;
3131
import software.amazon.awssdk.annotations.SdkInternalApi;
32+
import software.amazon.awssdk.checksums.SdkChecksum;
3233
import software.amazon.awssdk.checksums.spi.ChecksumAlgorithm;
3334
import software.amazon.awssdk.http.ContentStreamProvider;
3435
import software.amazon.awssdk.http.SdkHttpRequest;
35-
import software.amazon.awssdk.http.auth.aws.internal.signer.checksums.SdkChecksum;
3636
import software.amazon.awssdk.http.auth.aws.internal.signer.io.ChecksumInputStream;
3737
import software.amazon.awssdk.http.auth.aws.internal.signer.io.ChecksumSubscriber;
3838
import software.amazon.awssdk.utils.Validate;

core/http-auth-aws/src/main/java/software/amazon/awssdk/http/auth/aws/internal/signer/checksums/ConstantChecksum.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import java.nio.charset.StandardCharsets;
1919
import software.amazon.awssdk.annotations.SdkInternalApi;
20+
import software.amazon.awssdk.checksums.SdkChecksum;
2021

2122
/**
2223
* Implementation of {@link SdkChecksum} to provide a constant checksum.

core/http-auth-aws/src/main/java/software/amazon/awssdk/http/auth/aws/internal/signer/chunkedencoding/ChecksumTrailerProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import java.util.Collections;
1919
import java.util.List;
2020
import software.amazon.awssdk.annotations.SdkInternalApi;
21-
import software.amazon.awssdk.http.auth.aws.internal.signer.checksums.SdkChecksum;
21+
import software.amazon.awssdk.checksums.SdkChecksum;
2222
import software.amazon.awssdk.utils.BinaryUtils;
2323
import software.amazon.awssdk.utils.Pair;
2424

core/http-auth-aws/src/main/java/software/amazon/awssdk/http/auth/aws/internal/signer/util/ChecksumUtil.java

Lines changed: 6 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -15,45 +15,20 @@
1515

1616
package software.amazon.awssdk.http.auth.aws.internal.signer.util;
1717

18-
import static software.amazon.awssdk.checksums.DefaultChecksumAlgorithm.CRC32;
19-
import static software.amazon.awssdk.checksums.DefaultChecksumAlgorithm.CRC32C;
20-
import static software.amazon.awssdk.checksums.DefaultChecksumAlgorithm.CRC64NVME;
21-
import static software.amazon.awssdk.checksums.DefaultChecksumAlgorithm.MD5;
22-
import static software.amazon.awssdk.checksums.DefaultChecksumAlgorithm.SHA1;
23-
import static software.amazon.awssdk.checksums.DefaultChecksumAlgorithm.SHA256;
24-
2518
import java.io.InputStream;
2619
import java.nio.ByteBuffer;
2720
import java.util.Locale;
28-
import java.util.Map;
29-
import java.util.function.Supplier;
3021
import software.amazon.awssdk.annotations.SdkInternalApi;
22+
import software.amazon.awssdk.checksums.SdkChecksum;
3123
import software.amazon.awssdk.checksums.spi.ChecksumAlgorithm;
3224
import software.amazon.awssdk.http.auth.aws.internal.signer.checksums.ConstantChecksum;
33-
import software.amazon.awssdk.http.auth.aws.internal.signer.checksums.Crc32CChecksum;
34-
import software.amazon.awssdk.http.auth.aws.internal.signer.checksums.Crc32Checksum;
35-
import software.amazon.awssdk.http.auth.aws.internal.signer.checksums.Crc64NvmeChecksum;
36-
import software.amazon.awssdk.http.auth.aws.internal.signer.checksums.Md5Checksum;
37-
import software.amazon.awssdk.http.auth.aws.internal.signer.checksums.SdkChecksum;
38-
import software.amazon.awssdk.http.auth.aws.internal.signer.checksums.Sha1Checksum;
39-
import software.amazon.awssdk.http.auth.aws.internal.signer.checksums.Sha256Checksum;
4025
import software.amazon.awssdk.utils.FunctionalUtils;
41-
import software.amazon.awssdk.utils.ImmutableMap;
4226

4327
@SdkInternalApi
4428
public final class ChecksumUtil {
4529

4630
private static final String CONSTANT_CHECKSUM = "CONSTANT";
4731

48-
private static final Map<String, Supplier<SdkChecksum>> CHECKSUM_MAP =
49-
ImmutableMap.<String, Supplier<SdkChecksum>>builder()
50-
.put(SHA256.algorithmId(), Sha256Checksum::new)
51-
.put(SHA1.algorithmId(), Sha1Checksum::new)
52-
.put(CRC32.algorithmId(), Crc32Checksum::new)
53-
.put(CRC32C.algorithmId(), Crc32CChecksum::new)
54-
.put(MD5.algorithmId(), Md5Checksum::new)
55-
.put(CRC64NVME.algorithmId(), Crc64NvmeChecksum::new).build();
56-
5732
private ChecksumUtil() {
5833
}
5934

@@ -73,15 +48,15 @@ public static String checksumHeaderName(ChecksumAlgorithm checksumAlgorithm) {
7348
*/
7449
public static SdkChecksum fromChecksumAlgorithm(ChecksumAlgorithm checksumAlgorithm) {
7550
String algorithmId = checksumAlgorithm.algorithmId();
76-
Supplier<SdkChecksum> checksumSupplier = CHECKSUM_MAP.get(algorithmId);
77-
if (checksumSupplier != null) {
78-
return checksumSupplier.get();
79-
}
80-
8151
if (CONSTANT_CHECKSUM.equals(algorithmId)) {
8252
return new ConstantChecksum(((ConstantChecksumAlgorithm) checksumAlgorithm).value);
8353
}
8454

55+
SdkChecksum checksum = SdkChecksum.forAlgorithm(checksumAlgorithm);
56+
if (checksum != null) {
57+
return checksum;
58+
}
59+
8560
throw new UnsupportedOperationException("Checksum not supported for " + algorithmId);
8661
}
8762

0 commit comments

Comments
 (0)