/* * Copyright (c) 2007, 2011, 2012, 2015 Eike Stepper (Berlin, Germany) and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Eike Stepper - initial API and implementation */ package org.eclipse.net4j.util.io; import java.io.IOException; import java.io.InputStream; /** * @author Eike Stepper */ public class XORInputStream extends DelegatingInputStream { private int[] key; private int index; public XORInputStream(InputStream in, int... key) { super(in); this.key = key; } public int[] getKey() { return key; } @Override public int read() throws IOException { int b = super.read(); if (b != -1) { if (key != null && key.length != 0) { if (index == key.length) { index = 0; } b = b & 0xFF ^ key[index++] & 0xFF; } } return b; } }