diff --git a/core/http-auth-aws/src/main/java/software/amazon/awssdk/http/auth/aws/internal/signer/DefaultAwsV4HttpSigner.java b/core/http-auth-aws/src/main/java/software/amazon/awssdk/http/auth/aws/internal/signer/DefaultAwsV4HttpSigner.java index 68a543afa631..800154ac804f 100644 --- a/core/http-auth-aws/src/main/java/software/amazon/awssdk/http/auth/aws/internal/signer/DefaultAwsV4HttpSigner.java +++ b/core/http-auth-aws/src/main/java/software/amazon/awssdk/http/auth/aws/internal/signer/DefaultAwsV4HttpSigner.java @@ -168,6 +168,33 @@ private static V4PayloadSigner v4PayloadSigner( return V4PayloadSigner.create(); } + private static V4PayloadSigner v4PayloadAsyncSigner( + BaseSignRequest request, + V4Properties properties) { + + boolean isPayloadSigning = request.requireProperty(PAYLOAD_SIGNING_ENABLED, true); + boolean isEventStreaming = isEventStreaming(request.request()); + boolean isChunkEncoding = request.requireProperty(CHUNK_ENCODING_ENABLED, false); + + if (isEventStreaming) { + if (isPayloadSigning) { + return getEventStreamV4PayloadSigner( + properties.getCredentials(), + properties.getCredentialScope(), + properties.getSigningClock() + ); + } + throw new UnsupportedOperationException("Unsigned payload is not supported with event-streaming."); + } + + if (isChunkEncoding && isPayloadSigning) { + throw new UnsupportedOperationException("Chunked encoding and payload signing is not supported in async client. Use" + + " sync client instead"); + } + + return V4PayloadSigner.create(); + } + private static SignedRequest doSign(SignRequest request, Checksummer checksummer, V4RequestSigner requestSigner, @@ -250,7 +277,7 @@ public CompletableFuture signAsync(AsyncSignRequest