in src/main/java/software/amazon/encryption/s3/S3AsyncEncryptionClient.java [153:170]
private CompletableFuture<PutObjectResponse> multipartPutObject(PutObjectRequest putObjectRequest, AsyncRequestBody requestBody) {
S3AsyncClient mpuClient;
if (_wrappedClient instanceof S3CrtAsyncClient) {
// if the wrappedClient is a CRT, use it
mpuClient = _wrappedClient;
} else {
// else create a default CRT client
mpuClient = S3AsyncClient.crtCreate();
}
PutEncryptedObjectPipeline pipeline = PutEncryptedObjectPipeline.builder()
.s3AsyncClient(mpuClient)
.cryptoMaterialsManager(_cryptoMaterialsManager)
.secureRandom(_secureRandom)
.build();
// Ensures parts are not retried to avoid corrupting ciphertext
AsyncRequestBody noRetryBody = new NoRetriesAsyncRequestBody(requestBody);
return pipeline.putObject(putObjectRequest, noRetryBody);
}