in src/main/java/software/amazon/encryption/s3/internal/GetEncryptedObjectPipeline.java [68:94]
private DecryptionMaterials prepareMaterialsFromRequest(final GetObjectRequest getObjectRequest, final GetObjectResponse getObjectResponse,
final ContentMetadata contentMetadata) {
// If the response contains a range, but the request does not,
// then this is an unsupported case where the client is using multipart downloads.
// Until this is supported, throw an exception
if (getObjectRequest.range() == null && getObjectResponse.contentRange() != null) {
throw new S3EncryptionClientException("Content range in response but is missing from request. Ensure multipart upload is not enabled on the wrapped async client.");
}
AlgorithmSuite algorithmSuite = contentMetadata.algorithmSuite();
if (!_enableLegacyUnauthenticatedModes && algorithmSuite.isLegacy()) {
throw new S3EncryptionClientException("Enable legacy unauthenticated modes to use legacy content decryption: " + algorithmSuite.cipherName());
}
List<EncryptedDataKey> encryptedDataKeys = Collections.singletonList(contentMetadata.encryptedDataKey());
DecryptMaterialsRequest materialsRequest = DecryptMaterialsRequest.builder()
.s3Request(getObjectRequest)
.algorithmSuite(algorithmSuite)
.encryptedDataKeys(encryptedDataKeys)
.encryptionContext(contentMetadata.encryptedDataKeyContext())
.ciphertextLength(getObjectResponse.contentLength())
.contentRange(getObjectRequest.range())
.build();
return _cryptoMaterialsManager.decryptMaterials(materialsRequest);
}