mirror of
https://github.com/Kunzisoft/KeePassDX.git
synced 2025-12-04 15:49:33 +01:00
Remove unused stream
This commit is contained in:
@@ -20,7 +20,6 @@
|
|||||||
package com.kunzisoft.encrypt
|
package com.kunzisoft.encrypt
|
||||||
|
|
||||||
import com.kunzisoft.encrypt.engine.AesEngine
|
import com.kunzisoft.encrypt.engine.AesEngine
|
||||||
import com.kunzisoft.encrypt.stream.BetterCipherInputStream
|
|
||||||
import com.kunzisoft.encrypt.stream.LittleEndianDataInputStream
|
import com.kunzisoft.encrypt.stream.LittleEndianDataInputStream
|
||||||
import org.junit.Assert.assertArrayEquals
|
import org.junit.Assert.assertArrayEquals
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
@@ -28,6 +27,7 @@ import java.io.ByteArrayInputStream
|
|||||||
import java.io.ByteArrayOutputStream
|
import java.io.ByteArrayOutputStream
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import javax.crypto.Cipher
|
import javax.crypto.Cipher
|
||||||
|
import javax.crypto.CipherInputStream
|
||||||
import javax.crypto.CipherOutputStream
|
import javax.crypto.CipherOutputStream
|
||||||
|
|
||||||
class CipherTest {
|
class CipherTest {
|
||||||
@@ -79,7 +79,7 @@ class CipherTest {
|
|||||||
val secrettext = bos.toByteArray()
|
val secrettext = bos.toByteArray()
|
||||||
|
|
||||||
val bis = ByteArrayInputStream(secrettext)
|
val bis = ByteArrayInputStream(secrettext)
|
||||||
val cis = BetterCipherInputStream(bis, decrypt)
|
val cis = CipherInputStream(bis, decrypt)
|
||||||
val lis = LittleEndianDataInputStream(cis)
|
val lis = LittleEndianDataInputStream(cis)
|
||||||
|
|
||||||
val decrypttext = lis.readBytes(MESSAGE_LENGTH)
|
val decrypttext = lis.readBytes(MESSAGE_LENGTH)
|
||||||
|
|||||||
@@ -1,247 +0,0 @@
|
|||||||
/*
|
|
||||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
||||||
* contributor license agreements. See the NOTICE file distributed with
|
|
||||||
* this work for additional information regarding copyright ownership.
|
|
||||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
|
||||||
* (the "License"); you may not use this file except in compliance with
|
|
||||||
* the License. You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.kunzisoft.encrypt.stream;
|
|
||||||
|
|
||||||
import java.io.FilterInputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.security.GeneralSecurityException;
|
|
||||||
|
|
||||||
import javax.crypto.Cipher;
|
|
||||||
import javax.crypto.NullCipher;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This class wraps an {@code InputStream} and a cipher so that {@code read()}
|
|
||||||
* methods return data that are read from the underlying {@code InputStream} and
|
|
||||||
* processed by the cipher.
|
|
||||||
* <p>
|
|
||||||
* The cipher must be initialized for the requested operation before being used
|
|
||||||
* by a {@code BetterCipherInputStream}. For example, if a cipher initialized for
|
|
||||||
* decryption is used with a {@code BetterCipherInputStream}, the {@code
|
|
||||||
* BetterCipherInputStream} tries to read the data an decrypt them before returning.
|
|
||||||
*/
|
|
||||||
public class BetterCipherInputStream extends FilterInputStream {
|
|
||||||
|
|
||||||
private final Cipher cipher;
|
|
||||||
private static final int I_DEFAULT_BUFFER_SIZE = 8 * 1024;
|
|
||||||
private final byte[] i_buffer;
|
|
||||||
private int index; // index of the bytes to return from o_buffer
|
|
||||||
private byte[] o_buffer;
|
|
||||||
private boolean finished;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new {@code BetterCipherInputStream} instance for an {@code
|
|
||||||
* InputStream} and a cipher.
|
|
||||||
*
|
|
||||||
* @param is
|
|
||||||
* the input stream to read data from.
|
|
||||||
* @param c
|
|
||||||
* the cipher to process the data with.
|
|
||||||
*/
|
|
||||||
public BetterCipherInputStream(InputStream is, Cipher c) {
|
|
||||||
this(is, c, I_DEFAULT_BUFFER_SIZE);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new {@code BetterCipherInputStream} instance for an {@code
|
|
||||||
* InputStream} and a cipher.
|
|
||||||
*
|
|
||||||
* @param is
|
|
||||||
* the input stream to read data from.
|
|
||||||
* @param c
|
|
||||||
* the cipher to process the data with.
|
|
||||||
* @param bufferSize
|
|
||||||
* size to buffer output from the cipher
|
|
||||||
*/
|
|
||||||
public BetterCipherInputStream(InputStream is, Cipher c, int bufferSize) {
|
|
||||||
super(is);
|
|
||||||
this.cipher = c;
|
|
||||||
i_buffer = new byte[bufferSize];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new {@code BetterCipherInputStream} instance for an {@code
|
|
||||||
* InputStream} without a cipher.
|
|
||||||
* <p>
|
|
||||||
* A {@code NullCipher} is created and used to process the data.
|
|
||||||
*
|
|
||||||
* @param is
|
|
||||||
* the input stream to read data from.
|
|
||||||
*/
|
|
||||||
protected BetterCipherInputStream(InputStream is) {
|
|
||||||
this(is, new NullCipher());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reads the next byte from this cipher input stream.
|
|
||||||
*
|
|
||||||
* @return the next byte, or {@code -1} if the end of the stream is reached.
|
|
||||||
* @throws IOException
|
|
||||||
* if an error occurs.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public int read() throws IOException {
|
|
||||||
if (finished) {
|
|
||||||
return ((o_buffer == null) || (index == o_buffer.length))
|
|
||||||
? -1
|
|
||||||
: o_buffer[index++] & 0xFF;
|
|
||||||
}
|
|
||||||
if ((o_buffer != null) && (index < o_buffer.length)) {
|
|
||||||
return o_buffer[index++] & 0xFF;
|
|
||||||
}
|
|
||||||
index = 0;
|
|
||||||
o_buffer = null;
|
|
||||||
int num_read;
|
|
||||||
while (o_buffer == null) {
|
|
||||||
if ((num_read = in.read(i_buffer)) == -1) {
|
|
||||||
try {
|
|
||||||
o_buffer = cipher.doFinal();
|
|
||||||
} catch (Exception e) {
|
|
||||||
throw new IOException(e.getMessage());
|
|
||||||
}
|
|
||||||
finished = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
o_buffer = cipher.update(i_buffer, 0, num_read);
|
|
||||||
}
|
|
||||||
return read();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reads the next {@code b.length} bytes from this input stream into buffer
|
|
||||||
* {@code b}.
|
|
||||||
*
|
|
||||||
* @param b
|
|
||||||
* the buffer to be filled with data.
|
|
||||||
* @return the number of bytes filled into buffer {@code b}, or {@code -1}
|
|
||||||
* if the end of the stream is reached.
|
|
||||||
* @throws IOException
|
|
||||||
* if an error occurs.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public int read(byte[] b) throws IOException {
|
|
||||||
return read(b, 0, b.length);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reads the next {@code len} bytes from this input stream into buffer
|
|
||||||
* {@code b} starting at offset {@code off}.
|
|
||||||
* <p>
|
|
||||||
* if {@code b} is {@code null}, the next {@code len} bytes are read and
|
|
||||||
* discarded.
|
|
||||||
*
|
|
||||||
* @param b
|
|
||||||
* the buffer to be filled with data.
|
|
||||||
* @param off
|
|
||||||
* the offset to start in the buffer.
|
|
||||||
* @param len
|
|
||||||
* the maximum number of bytes to read.
|
|
||||||
* @return the number of bytes filled into buffer {@code b}, or {@code -1}
|
|
||||||
* of the of the stream is reached.
|
|
||||||
* @throws IOException
|
|
||||||
* if an error occurs.
|
|
||||||
* @throws NullPointerException
|
|
||||||
* if the underlying input stream is {@code null}.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public int read(byte[] b, int off, int len) throws IOException {
|
|
||||||
if (in == null) {
|
|
||||||
throw new NullPointerException("Underlying input stream is null");
|
|
||||||
}
|
|
||||||
|
|
||||||
int read_b;
|
|
||||||
int i;
|
|
||||||
for (i=0; i<len; i++) {
|
|
||||||
if ((read_b = read()) == -1) {
|
|
||||||
return (i == 0) ? -1 : i;
|
|
||||||
}
|
|
||||||
if (b != null) {
|
|
||||||
b[off+i] = (byte) read_b;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Skips up to n bytes from this input stream.
|
|
||||||
* <p>
|
|
||||||
* The number of bytes skipped depends on the result of a call to
|
|
||||||
* {@link BetterCipherInputStream#available() available}. The smaller of n and the
|
|
||||||
* result are the number of bytes being skipped.
|
|
||||||
*
|
|
||||||
* @param n
|
|
||||||
* the number of bytes that should be skipped.
|
|
||||||
* @return the number of bytes actually skipped.
|
|
||||||
* @throws IOException
|
|
||||||
* if an error occurs
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public long skip(long n) throws IOException {
|
|
||||||
long i = 0;
|
|
||||||
int available = available();
|
|
||||||
if (available < n) {
|
|
||||||
n = available;
|
|
||||||
}
|
|
||||||
while ((i < n) && (read() != -1)) {
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the number of bytes available without blocking.
|
|
||||||
*
|
|
||||||
* @return the number of bytes available, currently zero.
|
|
||||||
* @throws IOException
|
|
||||||
* if an error occurs
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public int available() throws IOException {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Closes this {@code BetterCipherInputStream}, also closes the underlying input
|
|
||||||
* stream and call {@code doFinal} on the cipher object.
|
|
||||||
*
|
|
||||||
* @throws IOException
|
|
||||||
* if an error occurs.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void close() throws IOException {
|
|
||||||
in.close();
|
|
||||||
try {
|
|
||||||
cipher.doFinal();
|
|
||||||
} catch (GeneralSecurityException ignore) {
|
|
||||||
//do like RI does
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns whether this input stream supports {@code mark} and
|
|
||||||
* {@code reset}, which it does not.
|
|
||||||
*
|
|
||||||
* @return false, since this input stream does not support {@code mark} and
|
|
||||||
* {@code reset}.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public boolean markSupported() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user