in src/main/java/org/apache/commons/crypto/stream/CryptoInputStream.java [500:530]
public int read(final byte[] array, final int off, final int len) throws IOException {
checkStream();
Objects.requireNonNull(array, "array");
if (off < 0 || len < 0 || len > array.length - off) {
throw new IndexOutOfBoundsException();
}
if (len == 0) {
return 0;
}
final int remaining = outBuffer.remaining();
if (remaining > 0) {
// Satisfy the read with the existing data
final int n = Math.min(len, remaining);
outBuffer.get(array, off, n);
return n;
}
// No data in the out buffer, try read new data and decrypt it
// we loop for new data
int nd = 0;
while (nd == 0) {
nd = decryptMore();
}
if (nd < 0) {
return nd;
}
final int n = Math.min(len, outBuffer.remaining());
outBuffer.get(array, off, n);
return n;
}