// Path: jrdp/core/src/main/java/com/jrdp/core/encryption/EncryptionSession.java
// public interface EncryptionSession
// {	
// 	public abstract byte[] encrypt(byte[] data, int offset, int length);
// 	public abstract byte[] decrypt(byte[] data, int offset, int length);
// 	public abstract byte[] createMac(byte[] data);
// }


import com.jrdp.core.encryption.EncryptionSession;
	public short getShortLittleEndian()
	{
		return (short) ((data[pos++] & 0xFF) | (data[pos++] & 0xFF) << 8);
	}
	
	public short[] getShortArray(int size)
	{
		short[] array = new short[size];
		for(int i=0; i < size; i++)
		{
			array[i] = getShort();
		}
		return array;
	}
	
	public short[] getShortArrayLittleEndian(int size)
	{
		short[] array = new short[size];
		for(int i=0; i < size; i++)
		{
			array[i] = getShortLittleEndian();
		}
		return array;
	}
	
	public int left()
	{
		return data.length - pos;
	}
	
// Path: jrdp/core/src/main/java/com/jrdp/core/encryption/EncryptionSession.java
// public interface EncryptionSession
// {	
// 	public abstract byte[] encrypt(byte[] data, int offset, int length);
// 	public abstract byte[] decrypt(byte[] data, int offset, int length);
// 	public abstract byte[] createMac(byte[] data);
// }


// Path: jrdp/core/src/main/java/com/jrdp/core/util/InputByteStream.java
import com.jrdp.core.encryption.EncryptionSession;

	public short getShortLittleEndian()
	{
		return (short) ((data[pos++] & 0xFF) | (data[pos++] & 0xFF) << 8);
	}
	
	public short[] getShortArray(int size)
	{
		short[] array = new short[size];
		for(int i=0; i < size; i++)
		{
			array[i] = getShort();
		}
		return array;
	}
	
	public short[] getShortArrayLittleEndian(int size)
	{
		short[] array = new short[size];
		for(int i=0; i < size; i++)
		{
			array[i] = getShortLittleEndian();
		}
		return array;
	}
	
	public int left()
	{
		return data.length - pos;
	}
	
	public void decryptStream(EncryptionSession encryption)