in src/main/java/software/amazon/encryption/s3/internal/GetEncryptedObjectPipeline.java [137:159]
public void onStream(SdkPublisher<ByteBuffer> ciphertextPublisher) {
long[] desiredRange = RangedGetUtils.getRange(materials.getContentRange());
long[] cryptoRange = RangedGetUtils.getCryptoRange(materials.getContentRange());
AlgorithmSuite algorithmSuite = materials.algorithmSuite();
byte[] iv = contentMetadata.contentIv();
if (algorithmSuite == AlgorithmSuite.ALG_AES_256_CTR_IV16_TAG16_NO_KDF) {
iv = AesCtrUtils.adjustIV(iv, cryptoRange[0]);
}
if (algorithmSuite.equals(AlgorithmSuite.ALG_AES_256_CBC_IV16_NO_KDF)
|| algorithmSuite.equals(AlgorithmSuite.ALG_AES_256_CTR_IV16_TAG16_NO_KDF)
|| _enableDelayedAuthentication) {
// CBC and GCM with delayed auth enabled use a standard publisher
CipherPublisher plaintextPublisher = new CipherPublisher(ciphertextPublisher,
getObjectResponse.contentLength(), desiredRange, contentMetadata.contentRange(), algorithmSuite.cipherTagLengthBits(), materials, iv);
wrappedAsyncResponseTransformer.onStream(plaintextPublisher);
} else {
// Use buffered publisher for GCM when delayed auth is not enabled
BufferedCipherPublisher plaintextPublisher = new BufferedCipherPublisher(ciphertextPublisher,
getObjectResponse.contentLength(), materials, iv, _bufferSize);
wrappedAsyncResponseTransformer.onStream(plaintextPublisher);
}
}