@Override public void write(final byte[] b, final int off, final int len) throws IOException { try { for(int chunkOffset = off; chunkOffset < len; chunkOffset += chunksize) { int chunkLen = Math.min(chunksize, len - chunkOffset); final ByteBuffer encryptedChunk = cryptor.fileContentCryptor().encryptChunk( ByteBuffer.wrap(Arrays.copyOfRange(b, chunkOffset, chunkOffset + chunkLen)), chunkIndexOffset++, header, nonces.next()); super.write(encryptedChunk.array()); } } catch(CryptoException e) { throw new IOException(e.getMessage(), new CryptoAuthenticationException(e.getMessage(), e)); } } }