private void readInternal(ByteBuffer dst, long position, int len) throws IOException { int x = dst.position(); readFully(base, position + HEADER_LENGTH, dst); long block = position / BLOCK_SIZE; while (len > 0) { xts.decrypt(block++, BLOCK_SIZE, dst.array(), dst.arrayOffset() + x); x += BLOCK_SIZE; len -= BLOCK_SIZE; } }
private void writeInternal(ByteBuffer src, long position, int len) throws IOException { ByteBuffer crypt = ByteBuffer.allocate(len); crypt.put(src); crypt.flip(); long block = position / BLOCK_SIZE; int x = 0, l = len; while (l > 0) { xts.encrypt(block++, BLOCK_SIZE, crypt.array(), crypt.arrayOffset() + x); x += BLOCK_SIZE; l -= BLOCK_SIZE; } writeFully(base, position + HEADER_LENGTH, crypt); }