in src/main/java/org/apache/commons/crypto/stream/PositionedCryptoInputStream.java [213:242]
protected void decrypt(final long position, final byte[] buffer, final int offset, final int length)
throws IOException {
final ByteBuffer inByteBuffer = getBuffer();
final ByteBuffer outByteBuffer = getBuffer();
CipherState state = null;
try {
state = getCipherState();
final byte[] iv = getInitIV().clone();
resetCipher(state, position, iv);
byte padding = getPadding(position);
inByteBuffer.position(padding); // Set proper position for input data.
int n = 0;
while (n < length) {
final int toDecrypt = Math.min(length - n, inByteBuffer.remaining());
inByteBuffer.put(buffer, offset + n, toDecrypt);
// Do decryption
decrypt(state, inByteBuffer, outByteBuffer, padding);
outByteBuffer.get(buffer, offset + n, toDecrypt);
n += toDecrypt;
padding = postDecryption(state, inByteBuffer, position + n, iv);
}
} finally {
returnToPool(inByteBuffer);
returnToPool(outByteBuffer);
returnToPool(state);
}
}