in encryption/src/main/java/org/apache/solr/encryption/EncryptionUpdateLog.java [195:222]
protected void reencrypt(FileChannel inputChannel,
String inputKeyRef,
OutputStream outputStream,
String activeKeyRef,
EncryptionDirectory directory)
throws IOException {
ChannelFastInputStream cfis = inputKeyRef == null ?
new ChannelFastInputStream(inputChannel, 0)
: new DecryptingChannelInputStream(inputChannel,
ENCRYPTION_KEY_HEADER_LENGTH,
0,
directory.getKeySecret(inputKeyRef),
directory.getEncrypterFactory());
if (activeKeyRef != null) {
// Get the key secret first. If it fails, we do not write anything.
byte[] keySecret = directory.getKeySecret(activeKeyRef);
writeEncryptionHeader(activeKeyRef, outputStream);
outputStream = new EncryptingOutputStream(outputStream,
keySecret,
directory.getEncrypterFactory());
}
byte[] buffer = new byte[REENCRYPTION_BUFFER_SIZE];
int nRead;
while ((nRead = cfis.read(buffer, 0, buffer.length)) >= 0) {
outputStream.write(buffer, 0, nRead);
}
outputStream.flush();
}