db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From David Van Couvering <David.Vancouver...@Sun.COM>
Subject Re: Problem using encrypted databases with jar subprotocol
Date Thu, 01 Jun 2006 23:45:54 GMT
Hi, Mathias.  Did your submission ever get any attention?  This seems 
like it could be a very valuable fix.

Thanks,

David

Mathias Herberts wrote:
> The current trunk (410361) does not allow to have encrypted databases
> using encryptionKey with the jar subprotocol (and probably also the
> http/https and classpath subprotocols also).
> 
> The problem lies in the method run from JCECipherFactory. The call to
> getRandomAccessFile returns null when the verifyKeyFile is an instance
> of InputStreamFile and the key verification therefore fails.
> 
> Included in this email is a new class InputStreamRandomAccessFile in
> package org.apache.derby.impl.io. This class provides simple
> implementations of readInt and readFully so the key verification
> process succeeds.
> 
> Also included in this email is a patch to
> org/apache/derby/impl/io/InputStreamFile.java so the
> getRandomAccessFile creates an instance of InputStreamRandomAccessFile
> instead of returning null.
> 
> I have tested my patch with an encrypted db accessed via the jar
> subprotocol, it has not been tested with any other subprotocol.
> 
> Regards,
> 
> Mathias.
> 
> 
> ------------------------------------------------------------------------
> 
> package org.apache.derby.impl.io;
> 
> import java.io.DataInput;
> import java.io.DataOutput;
> import java.io.EOFException;
> import java.io.FileNotFoundException;
> import java.io.IOException;
> import java.io.InputStream;
> 
> import org.apache.derby.io.StorageRandomAccessFile;
> 
> public class InputStreamRandomAccessFile implements DataInput, DataOutput,
> 		StorageRandomAccessFile {
> 
> 	private InputStream is = null;
> 	
> 	public InputStreamRandomAccessFile (InputStreamFile isf) throws FileNotFoundException
{
> 			this.is = isf.getInputStream();		
> 	}
> 	
> 	public void readFully(byte[] arg0) throws IOException {
> 		//
> 		// Read arg0.length bytes of data
> 		//
> 		
> 		int n = 0;
> 		
> 		while (n < arg0.length) {
> 			int r = is.read(arg0,n,arg0.length - n);
> 			
> 			if (r == -1) {
> 				throw new EOFException();
> 			}
> 			
> 			n += r;
> 		}
> 	}
> 
> 	public void readFully(byte[] arg0, int arg1, int arg2) throws IOException {
> 		// TODO Auto-generated method stub
> 
> 	}
> 
> 	public int skipBytes(int arg0) throws IOException {
> 		// TODO Auto-generated method stub
> 		return 0;
> 	}
> 
> 	public boolean readBoolean() throws IOException {
> 		// TODO Auto-generated method stub
> 		return false;
> 	}
> 
> 	public byte readByte() throws IOException {
> 		// TODO Auto-generated method stub
> 		return 0;
> 	}
> 
> 	public int readUnsignedByte() throws IOException {
> 		// TODO Auto-generated method stub
> 		return 0;
> 	}
> 
> 	public short readShort() throws IOException {
> 		// TODO Auto-generated method stub
> 		return 0;
> 	}
> 
> 	public int readUnsignedShort() throws IOException {
> 		// TODO Auto-generated method stub
> 		return 0;
> 	}
> 
> 	public char readChar() throws IOException {
> 		// TODO Auto-generated method stub
> 		return 0;
> 	}
> 
> 	public int readInt() throws IOException {
> 		int a = is.read();
> 		int b = is.read();
> 		int c = is.read();
> 		int d = is.read();
> 		
> 		if (a == -1 || b == -1 || c == -1 || d == -1) {
> 			throw new EOFException();
> 		}
> 		
> 		return (((a & 0xff) << 24) | ((b & 0xff) << 16) |
> 				  ((c & 0xff) << 8) | (d & 0xff));
> 	}
> 
> 	public long readLong() throws IOException {
> 		// TODO Auto-generated method stub
> 		return 0;
> 	}
> 
> 	public float readFloat() throws IOException {
> 		// TODO Auto-generated method stub
> 		return 0;
> 	}
> 
> 	public double readDouble() throws IOException {
> 		// TODO Auto-generated method stub
> 		return 0;
> 	}
> 
> 	public String readLine() throws IOException {
> 		// TODO Auto-generated method stub
> 		return null;
> 	}
> 
> 	public String readUTF() throws IOException {
> 		// TODO Auto-generated method stub
> 		return null;
> 	}
> 
> 	public void write(int arg0) throws IOException {
> 		// TODO Auto-generated method stub
> 
> 	}
> 
> 	public void write(byte[] arg0) throws IOException {
> 		// TODO Auto-generated method stub
> 
> 	}
> 
> 	public void write(byte[] arg0, int arg1, int arg2) throws IOException {
> 		// TODO Auto-generated method stub
> 
> 	}
> 
> 	public void writeBoolean(boolean arg0) throws IOException {
> 		// TODO Auto-generated method stub
> 
> 	}
> 
> 	public void writeByte(int arg0) throws IOException {
> 		// TODO Auto-generated method stub
> 
> 	}
> 
> 	public void writeShort(int arg0) throws IOException {
> 		// TODO Auto-generated method stub
> 
> 	}
> 
> 	public void writeChar(int arg0) throws IOException {
> 		// TODO Auto-generated method stub
> 
> 	}
> 
> 	public void writeInt(int arg0) throws IOException {
> 		// TODO Auto-generated method stub
> 
> 	}
> 
> 	public void writeLong(long arg0) throws IOException {
> 		// TODO Auto-generated method stub
> 
> 	}
> 
> 	public void writeFloat(float arg0) throws IOException {
> 		// TODO Auto-generated method stub
> 
> 	}
> 
> 	public void writeDouble(double arg0) throws IOException {
> 		// TODO Auto-generated method stub
> 
> 	}
> 
> 	public void writeBytes(String arg0) throws IOException {
> 		// TODO Auto-generated method stub
> 
> 	}
> 
> 	public void writeChars(String arg0) throws IOException {
> 		// TODO Auto-generated method stub
> 
> 	}
> 
> 	public void writeUTF(String arg0) throws IOException {
> 		// TODO Auto-generated method stub
> 
> 	}
> 
> 	public void close() throws IOException {
> 		// TODO Auto-generated method stub
> 
> 	}
> 
> 	public long getFilePointer() throws IOException {
> 		// TODO Auto-generated method stub
> 		return 0;
> 	}
> 
> 	public long length() throws IOException {
> 		// TODO Auto-generated method stub
> 		return 0;
> 	}
> 
> 	public void seek(long newFilePointer) throws IOException {
> 		// TODO Auto-generated method stub
> 
> 	}
> 
> 	public void setLength(long newLength) throws IOException {
> 		// TODO Auto-generated method stub
> 
> 	}
> 
> 	public void sync(boolean metaData) throws IOException {
> 		// TODO Auto-generated method stub
> 
> 	}
> 
> }

Mime
View raw message