Thread: RSA with netty help

Results 1 to 9 of 9
  1. #1 RSA with netty help 
    Registered Member
    Join Date
    May 2010
    Posts
    178
    Thanks given
    2
    Thanks received
    4
    Rep Power
    2
    i've implemented netty, and i want to implement RSA with it, however it doesn't work. it just throws a: Encrypted size mismatch.
    i've literally tried everything.

    here's my RS2LoginProtocolDecoder.java:
    Code:
    package server.net;
    
    import java.math.BigInteger;
    import java.security.SecureRandom;
    
    import org.jboss.netty.buffer.ChannelBuffer;
    import org.jboss.netty.buffer.ChannelBuffers;
    import org.jboss.netty.channel.Channel;
    import org.jboss.netty.channel.ChannelFuture;
    import org.jboss.netty.channel.ChannelFutureListener;
    import org.jboss.netty.channel.ChannelHandlerContext;
    import org.jboss.netty.handler.codec.frame.FrameDecoder;
    
    import server.Config;
    import server.Connection;
    import server.Server;
    import server.engine.HandleConnection;
    import server.model.players.Client;
    import server.model.players.PlayerHandler;
    import server.model.players.PlayerSave;
    import server.net.PacketBuilder;
    import server.util.ISAACCipher;
    import server.util.Misc;
    
    public class RS2LoginProtocolDecoder extends FrameDecoder {
    
    	
    	private static final BigInteger RSA_MODULUS = new BigInteger("134879924117018689760458617113763010794928714932318058467109552420048747861644217016255598201828589101722456409486834737042810145044971733480806210971246858756450230199459844416953238964275407953368738189689602122143864920074673229804529378820732033043260467820015292026023179060008040229774580922064833792491");
    
    	private static final BigInteger RSA_EXPONENT = new BigInteger("90234148541839990140799054102809488461370745952554327409432095095970479290262432684753810024275945810395950055961377271021025802208702575380814921553066912655199489970700117073408649367015293924129928310987520073084130900423361880923927472681140195478097378187149074976649709577953631380990519168830771137473");
    
    	
    	
    	private static final int CONNECTED = 0;
    	private static final int LOGGING_IN = 1;
    	private int state = CONNECTED;
    
    	@Override
    	protected Object decode(ChannelHandlerContext ctx, Channel channel, ChannelBuffer buffer) throws Exception {
    		if(!channel.isConnected()) {
    			return null;
    		}
    		switch (state) {
    		case CONNECTED:
    			if (buffer.readableBytes() < 2)
    				return null;
    			int request = buffer.readUnsignedByte();
    			if (request != 14) {
    				System.out.println("Invalid login request: " + request);
    				channel.close();
    				return null;
    			}
    			buffer.readUnsignedByte();
    			channel.write(new PacketBuilder().putLong(0).put((byte) 0).putLong(new SecureRandom().nextLong()).toPacket());
    			state = LOGGING_IN;
    			return null;
    		case LOGGING_IN:
    			
    			if (buffer.readableBytes() < 2) {
    				return null;
    			}
    			
    			int loginType = buffer.readByte();
    			if (loginType != 16 && loginType != 18) {
    				System.out.println("Invalid login type: " + loginType);
    			}
    			int blockLength = buffer.readByte() & 0xff;
    			if (buffer.readableBytes() < blockLength) {
    				return null;
    			}
    			
    			buffer.readByte();
    			
    			for (int i = 0; i < 9; i++)
    				buffer.readInt();
    
    			int loginEncryptPacketSize = -1;
    			loginEncryptPacketSize--;
    			if(loginEncryptPacketSize != (buffer.readLong() & 0xff)) {
    				System.out.println("Encrypted size mismatch.");
    				channel.close();
    				return false;
    			}
    			
                byte[] encryptionBytes = new byte[loginEncryptPacketSize];
                buffer.writeBytes(encryptionBytes);
                ChannelBuffer rsaBuffer = ChannelBuffers.wrappedBuffer(new BigInteger(encryptionBytes).modPow(RSA_EXPONENT, RSA_MODULUS).toByteArray());
    			if((rsaBuffer.readLong() & 0xff) != 10) {
    				System.out.println("Encrypted id != 10.");
    				channel.close();
    				return false;
    			}
    			int uid = rsaBuffer.readInt();
    			
    			if(uid == 0 || uid == 99735086) {
    				channel.close();
    				return false;
    			}
    			
    			final long clientHalf = rsaBuffer.readLong();
    			final long serverHalf = rsaBuffer.readLong();
    			
    			final int[] isaacSeed = { (int) (clientHalf >> 32), (int) clientHalf, (int) (serverHalf >> 32), (int) serverHalf };
    			final ISAACCipher inCipher = new ISAACCipher(isaacSeed);
    			for (int i = 0; i < isaacSeed.length; i++)
    				isaacSeed[i] += 50;
    			final ISAACCipher outCipher = new ISAACCipher(isaacSeed);
    			final int version = buffer.readInt();
    			final String name = Misc.formatPlayerName(Misc.getRS2String(buffer));
    			final String pass = Misc.getRS2String(buffer);
    			channel.getPipeline().replace("decoder", "decoder", new RS2ProtocolDecoder(inCipher));
    			return login(channel, inCipher, outCipher, version, name, pass);
    		}
    		return null;
    	}
    
    	private static Client login(Channel channel, ISAACCipher inCipher, ISAACCipher outCipher, int version, String name, String pass) {
    		int returnCode = 2;
    		if (!name.matches("[A-Za-z0-9 ]+")) {
    			returnCode = 4;
    		}
    		if (name.length() > 12) {
    			returnCode = 8;
    		}
    		Client cl = new Client(channel, -1);
    		cl.playerName = name;
    		cl.playerName2 = cl.playerName;
    		cl.playerPass = pass;
    		cl.outStream.packetEncryption = outCipher;
    		cl.saveCharacter = false;
    		cl.isActive = true;
    		if (Connection.isNamedBanned(cl.playerName)) {
    			returnCode = 4;
    		}
    		if (PlayerHandler.isPlayerOn(name)) {
    			returnCode = 5;
    		}
    		if (PlayerHandler.getPlayerCount() >= Config.MAX_PLAYERS) {
    			returnCode = 7;
    		}
    		if (HandleConnection.UpdateServer) {
    			returnCode = 14;
    		}
    		if (returnCode == 2) {
    			int load = PlayerSave.loadGame(cl, cl.playerName, cl.playerPass);
    			if (load == 0)
    				cl.addStarter = true;
    			if (load == 3) {
    				returnCode = 3;
    				cl.saveFile = false;
    			} else {
    				for (int i = 0; i < cl.playerEquipment.length; i++) {
    					if (cl.playerEquipment[i] == 0) {
    						cl.playerEquipment[i] = -1;
    						cl.playerEquipmentN[i] = 0;
    					}
    				}
    				if (!Server.playerHandler.newPlayerClient(cl)) {
    					returnCode = 7;
    					cl.saveFile = false;
    				} else {
    					cl.saveFile = true;
    				}
    			}
    		}
    		if(returnCode == 2) {
    			cl.saveCharacter = true;
    			cl.packetType = -1;
    			cl.packetSize = 0;
    			final PacketBuilder bldr = new PacketBuilder();
    			bldr.put((byte) 2);
    			if (cl.playerRights == 3) {
    				bldr.put((byte) 2);
    			} else {
    				bldr.put((byte) cl.playerRights);
    			}
    			bldr.put((byte) 0);
    			channel.write(bldr.toPacket());
    		} else {
    			System.out.println("returncode:" + returnCode);
    			sendReturnCode(channel, returnCode);
    			return null;
    		}
    		synchronized (PlayerHandler.lock) {
    			cl.initialize();
    			cl.initialized = true;
    		}
    		return cl;
    	}
    
    	public static void sendReturnCode(final Channel channel, final int code) {
    		channel.write(new PacketBuilder().put((byte) code).toPacket()).addListener(new ChannelFutureListener() {
    			@Override
    			public void operationComplete(final ChannelFuture arg0) throws Exception {
    				arg0.getChannel().close();
    			}
    		});
    	}
    
    }
    and here's my doKeys() void, Stream.java:
    Code:
    	public void doKeys() {
    		int i = currentOffset;
    		currentOffset = 0;
    		byte abyte0[] = new byte[i];
    		readBytes(i, 0, abyte0);
    		BigInteger biginteger2 = new BigInteger(abyte0);
    		BigInteger biginteger3 = biginteger2.modPow(RSA_EXPONENT, RSA_MODULUS);
    		byte abyte1[] = biginteger3.toByteArray();
    		currentOffset = 0;
    		writeWordBigEndian(abyte1.length);
    		writeBytes(abyte1, abyte1.length, 0);
    	}

    any help is much appreciated, thank you!
    Reply With Quote  
     

  2. #2  
    Extreme Donator


    Join Date
    May 2010
    Posts
    1,344
    Thanks given
    961
    Thanks received
    132
    Rep Power
    216
    remove this
    Code:
    byte[] encryptionBytes = new byte[loginEncryptPacketSize];
    buffer.writeBytes(encryptionBytes);
    ChannelBuffer rsaBuffer = ChannelBuffers.wrappedBuffer(new BigInteger(encryptionBytes).modPow(RSA_EXPONENT, RSA_MODULUS).toByteArray());
    add this
    Code:
    ChannelBuffer rsaBuffer = buffer.readBytes(loginEncryptPacketSize);
    
    BigInteger bigInteger = new BigInteger(securePayload.array());
    bigInteger = bigInteger.modPow(RSA_EXPONENT, RSA_MODULUS);
    
    rsaBuffer = ChannelBuffers.wrappedBuffer(bigInteger.toByteArray());
    credits nikki & major
    Reply With Quote  
     

  3. #3  
    Registered Member
    Join Date
    May 2010
    Posts
    178
    Thanks given
    2
    Thanks received
    4
    Rep Power
    2
    it's for PI by the way. ok, so this is what i have now:
    Code:
    package server.net;
    
    import java.math.BigInteger;
    import java.security.SecureRandom;
    
    import org.jboss.netty.buffer.ChannelBuffer;
    import org.jboss.netty.buffer.ChannelBuffers;
    import org.jboss.netty.channel.Channel;
    import org.jboss.netty.channel.ChannelFuture;
    import org.jboss.netty.channel.ChannelFutureListener;
    import org.jboss.netty.channel.ChannelHandlerContext;
    import org.jboss.netty.handler.codec.frame.FrameDecoder;
    
    import server.Config;
    import server.Connection;
    import server.Server;
    import server.engine.HandleConnection;
    import server.model.players.Client;
    import server.model.players.PlayerHandler;
    import server.model.players.PlayerSave;
    import server.net.PacketBuilder;
    import server.util.ISAACCipher;
    import server.util.Misc;
    
    public class RS2LoginProtocolDecoder extends FrameDecoder {
    
    	
    	private static final BigInteger RSA_MODULUS = new BigInteger("134879924117018689760458617113763010794928714932318058467109552420048747861644217016255598201828589101722456409486834737042810145044971733480806210971246858756450230199459844416953238964275407953368738189689602122143864920074673229804529378820732033043260467820015292026023179060008040229774580922064833792491");
    
    	private static final BigInteger RSA_EXPONENT = new BigInteger("90234148541839990140799054102809488461370745952554327409432095095970479290262432684753810024275945810395950055961377271021025802208702575380814921553066912655199489970700117073408649367015293924129928310987520073084130900423361880923927472681140195478097378187149074976649709577953631380990519168830771137473");
    
    	
    	
    	private static final int CONNECTED = 0;
    	private static final int LOGGING_IN = 1;
    	private int state = CONNECTED;
    
    	@Override
    	protected Object decode(ChannelHandlerContext ctx, Channel channel, ChannelBuffer buffer) throws Exception {
    		if(!channel.isConnected()) {
    			return null;
    		}
    		switch (state) {
    		case CONNECTED:
    			if (buffer.readableBytes() < 2)
    				return null;
    			int request = buffer.readUnsignedByte();
    			if (request != 14) {
    				System.out.println("Invalid login request: " + request);
    				channel.close();
    				return null;
    			}
    			buffer.readUnsignedByte();
    			channel.write(new PacketBuilder().putLong(0).put((byte) 0).putLong(new SecureRandom().nextLong()).toPacket());
    			state = LOGGING_IN;
    			return null;
    		case LOGGING_IN:
    			
    			if (buffer.readableBytes() < 2) {
    				return null;
    			}
    			
    			int loginType = buffer.readByte();
    			if (loginType != 16 && loginType != 18) {
    				System.out.println("Invalid login type: " + loginType);
    			}
    			int blockLength = buffer.readByte() & 0xff;
    			if (buffer.readableBytes() < blockLength) {
    				return null;
    			}
    			
    			buffer.readByte();
    			
    			for (int i = 0; i < 9; i++)
    				buffer.readInt();
    
    			int loginEncryptPacketSize = -1;
    			loginEncryptPacketSize--;
    			if(loginEncryptPacketSize != (buffer.readLong() & 0xff)) {
    				System.out.println("Encrypted size mismatch.");
    				channel.close();
    				return false;
    			}
    			
    			
    			ChannelBuffer rsaBuffer = buffer.readBytes(loginEncryptPacketSize);
    
    			BigInteger bigInteger = new BigInteger(rsaBuffer.array());
    			bigInteger = bigInteger.modPow(RSA_EXPONENT, RSA_MODULUS);
    
    			rsaBuffer = ChannelBuffers.wrappedBuffer(bigInteger.toByteArray());
    			if((rsaBuffer.readLong() & 0xff) != 10) {
    				System.out.println("Encrypted id != 10.");
    				channel.close();
    				return false;
    			}
    			int uid = rsaBuffer.readInt();
    			
    			if(uid == 0 || uid == 99735086) {
    				channel.close();
    				return false;
    			}
    			
    			final long clientHalf = rsaBuffer.readLong();
    			final long serverHalf = rsaBuffer.readLong();
    			
    			final int[] isaacSeed = { (int) (clientHalf >> 32), (int) clientHalf, (int) (serverHalf >> 32), (int) serverHalf };
    			final ISAACCipher inCipher = new ISAACCipher(isaacSeed);
    			for (int i = 0; i < isaacSeed.length; i++)
    				isaacSeed[i] += 50;
    			final ISAACCipher outCipher = new ISAACCipher(isaacSeed);
    			final int version = buffer.readInt();
    			final String name = Misc.formatPlayerName(Misc.getRS2String(buffer));
    			final String pass = Misc.getRS2String(buffer);
    			channel.getPipeline().replace("decoder", "decoder", new RS2ProtocolDecoder(inCipher));
    			return login(channel, inCipher, outCipher, version, name, pass);
    		}
    		return null;
    	}
    
    	private static Client login(Channel channel, ISAACCipher inCipher, ISAACCipher outCipher, int version, String name, String pass) {
    		int returnCode = 2;
    		if (!name.matches("[A-Za-z0-9 ]+")) {
    			returnCode = 4;
    		}
    		if (name.length() > 12) {
    			returnCode = 8;
    		}
    		Client cl = new Client(channel, -1);
    		cl.playerName = name;
    		cl.playerName2 = cl.playerName;
    		cl.playerPass = pass;
    		cl.outStream.packetEncryption = outCipher;
    		cl.saveCharacter = false;
    		cl.isActive = true;
    		if (Connection.isNamedBanned(cl.playerName)) {
    			returnCode = 4;
    		}
    		if (PlayerHandler.isPlayerOn(name)) {
    			returnCode = 5;
    		}
    		if (PlayerHandler.getPlayerCount() >= Config.MAX_PLAYERS) {
    			returnCode = 7;
    		}
    		if (HandleConnection.UpdateServer) {
    			returnCode = 14;
    		}
    		if (returnCode == 2) {
    			int load = PlayerSave.loadGame(cl, cl.playerName, cl.playerPass);
    			if (load == 0)
    				cl.addStarter = true;
    			if (load == 3) {
    				returnCode = 3;
    				cl.saveFile = false;
    			} else {
    				for (int i = 0; i < cl.playerEquipment.length; i++) {
    					if (cl.playerEquipment[i] == 0) {
    						cl.playerEquipment[i] = -1;
    						cl.playerEquipmentN[i] = 0;
    					}
    				}
    				if (!Server.playerHandler.newPlayerClient(cl)) {
    					returnCode = 7;
    					cl.saveFile = false;
    				} else {
    					cl.saveFile = true;
    				}
    			}
    		}
    		if(returnCode == 2) {
    			cl.saveCharacter = true;
    			cl.packetType = -1;
    			cl.packetSize = 0;
    			final PacketBuilder bldr = new PacketBuilder();
    			bldr.put((byte) 2);
    			if (cl.playerRights == 3) {
    				bldr.put((byte) 2);
    			} else {
    				bldr.put((byte) cl.playerRights);
    			}
    			bldr.put((byte) 0);
    			channel.write(bldr.toPacket());
    		} else {
    			System.out.println("returncode:" + returnCode);
    			sendReturnCode(channel, returnCode);
    			return null;
    		}
    		synchronized (PlayerHandler.lock) {
    			cl.initialize();
    			cl.initialized = true;
    		}
    		return cl;
    	}
    
    	public static void sendReturnCode(final Channel channel, final int code) {
    		channel.write(new PacketBuilder().put((byte) code).toPacket()).addListener(new ChannelFutureListener() {
    			@Override
    			public void operationComplete(final ChannelFuture arg0) throws Exception {
    				arg0.getChannel().close();
    			}
    		});
    	}
    
    }
    still spamming the same message: Encrypted size mismatch.
    Reply With Quote  
     

  4. #4  
    Extreme Donator


    Join Date
    May 2010
    Posts
    1,344
    Thanks given
    961
    Thanks received
    132
    Rep Power
    216
    mainly because of this part
    Code:
    int loginEncryptPacketSize = -1;
    loginEncryptPacketSize--;
    if(loginEncryptPacketSize != (buffer.readLong() & 0xff)) {
    	System.out.println("Encrypted size mismatch.");
    	channel.close();
    	return false;
    }
    you should read it as a unsigned byte. also, why are you comparing it to a '-2' ?
    here
    Code:
    int loginEncryptPacketSize = buffer.readUnsignedByte();
    blockLength--;
    if(loginEncryptPacketSize != (blockLength - 40)) {
    	System.out.println("Encrypted size mismatch[loginEncryptPacketSize:" + loginEncryptPacketSize + ", blockLength - 40:" + (blockLength - 40) + "].");
    	channel.close();
    	return false;
    }
    Reply With Quote  
     

  5. #5  
    Registered Member
    Join Date
    May 2010
    Posts
    178
    Thanks given
    2
    Thanks received
    4
    Rep Power
    2
    Quote Originally Posted by Snake View Post
    mainly because of this part
    Code:
    int loginEncryptPacketSize = -1;
    loginEncryptPacketSize--;
    if(loginEncryptPacketSize != (buffer.readLong() & 0xff)) {
    	System.out.println("Encrypted size mismatch.");
    	channel.close();
    	return false;
    }
    you should read it as a unsigned byte. also, why are you comparing it to a '-2' ?
    here
    Code:
    int loginEncryptPacketSize = buffer.readUnsignedByte();
    blockLength--;
    if(loginEncryptPacketSize != (blockLength - 40)) {
    	System.out.println("Encrypted size mismatch[loginEncryptPacketSize:" + loginEncryptPacketSize + ", blockLength - 40:" + (blockLength - 40) + "].");
    	channel.close();
    	return false;
    }

    thanks, i appreciate the help. however, now it's spamming: Encrypted size mismatch[loginEncryptPacketSize:0, blockLength - 40:128].
    Reply With Quote  
     

  6. #6  
    Extreme Donator


    Join Date
    May 2010
    Posts
    1,344
    Thanks given
    961
    Thanks received
    132
    Rep Power
    216
    then it's something with you client, compare your client's login method with the server's.
    Reply With Quote  
     

  7. #7  
    Registered Member
    Join Date
    May 2010
    Posts
    178
    Thanks given
    2
    Thanks received
    4
    Rep Power
    2
    still desperately need this.

    this is my client's login:
    Code:
    	private void login(String s, String s1, boolean flag)
    	{
    		signlink.errorname = s;
    		try
    		{
    			if(!flag)
    			{
    				loginMessage1 = "";
    				loginMessage2 = "Connecting to server...";
    				drawLoginScreen(true);
    			}
    			socketStream = new RSSocket(this, openSocket(43594 + portOff));
    			long l = TextClass.longForName(s);
    			int i = (int)(l >> 16 & 31L);
    			stream.currentOffset = 0;
    			stream.writeWordBigEndian(14);
    			stream.writeWordBigEndian(i);
    			socketStream.queueBytes(2, stream.buffer);
    			for(int j = 0; j < 8; j++)
    				socketStream.read();
    
    			int k = socketStream.read();
    			int i1 = k;
    			if(k == 0)
    			{
    				socketStream.flushInputStream(inStream.buffer, 8);
    				inStream.currentOffset = 0;
    				aLong1215 = inStream.readQWord();
    				int ai[] = new int[4];
    				ai[0] = (int)(Math.random() * 99999999D);
    				ai[1] = (int)(Math.random() * 99999999D);
    				ai[2] = (int)(aLong1215 >> 32);
    				ai[3] = (int)aLong1215;
    				stream.currentOffset = 0;
    				stream.writeWordBigEndian(10);
    				stream.writeDWord(ai[0]);
    				stream.writeDWord(ai[1]);
    				stream.writeDWord(ai[2]);
    				stream.writeDWord(ai[3]);
    				stream.writeDWord(999999);
    				stream.writeString(s);
    				stream.writeString(s1);
    				stream.doKeys();
    				aStream_847.currentOffset = 0;
    				if(flag)
    					aStream_847.writeWordBigEndian(18);
    				else
    					aStream_847.writeWordBigEndian(16);
    				aStream_847.writeWordBigEndian(stream.currentOffset + 36 + 1 + 1 + 2);
    				aStream_847.writeWordBigEndian(255);
    				aStream_847.writeWord(317);
    				aStream_847.writeWordBigEndian(lowMem ? 1 : 0);
    				for(int l1 = 0; l1 < 9; l1++)
    					aStream_847.writeDWord(expectedCRCs[l1]);
    
    				aStream_847.writeBytes(stream.buffer, stream.currentOffset, 0);
    				stream.encryption = new ISAACRandomGen(ai);
    				for(int j2 = 0; j2 < 4; j2++)
    					ai[j2] += 50;
    
    				encryption = new ISAACRandomGen(ai);
    				socketStream.queueBytes(aStream_847.currentOffset, aStream_847.buffer);
    				k = socketStream.read();
    			}
    			if(k == 1)
    			{
    				try
    				{
    					Thread.sleep(2000L);
    				}
    				catch(Exception _ex) { }
    				login(s, s1, flag);
    				return;
    			}
    			if(k == 2)
    			{
    				myPrivilege = socketStream.read();
    				flagged = socketStream.read() == 1;
    				aLong1220 = 0L;
    				anInt1022 = 0;
    				mouseDetection.coordsIndex = 0;
    				super.awtFocus = true;
    				aBoolean954 = true;
    				loggedIn = true;
    				stream.currentOffset = 0;
    				inStream.currentOffset = 0;
    				pktType = -1;
    				anInt841 = -1;
    				anInt842 = -1;
    				anInt843 = -1;
    				pktSize = 0;
    				anInt1009 = 0;
    				anInt1104 = 0;
    				anInt1011 = 0;
    				anInt855 = 0;
    				menuActionRow = 0;
    				menuOpen = false;
    				super.idleTime = 0;
    				for(int j1 = 0; j1 < 100; j1++)
    					chatMessages[j1] = null;
    
    				itemSelected = 0;
    				spellSelected = 0;
    				loadingStage = 0;
    				anInt1062 = 0;
    				anInt1278 = (int)(Math.random() * 100D) - 50;
    				anInt1131 = (int)(Math.random() * 110D) - 55;
    				anInt896 = (int)(Math.random() * 80D) - 40;
    				minimapInt2 = (int)(Math.random() * 120D) - 60;
    				minimapInt3 = (int)(Math.random() * 30D) - 20;
    				minimapInt1 = (int)(Math.random() * 20D) - 10 & 0x7ff;
    				anInt1021 = 0;
    				anInt985 = -1;
    				destX = 0;
    				destY = 0;
    				playerCount = 0;
    				npcCount = 0;
    				for(int i2 = 0; i2 < maxPlayers; i2++)
    				{
    					playerArray[i2] = null;
    					aStreamArray895s[i2] = null;
    				}
    
    				for(int k2 = 0; k2 < 16384; k2++)
    					npcArray[k2] = null;
    
    				myPlayer = playerArray[myPlayerIndex] = new Player();
    				aClass19_1013.removeAll();
    				aClass19_1056.removeAll();
    				for(int l2 = 0; l2 < 4; l2++)
    				{
    					for(int i3 = 0; i3 < 104; i3++)
    					{
    						for(int k3 = 0; k3 < 104; k3++)
    							groundArray[l2][i3][k3] = null;
    
    					}
    
    				}
    
    				aClass19_1179 = new NodeList();
    				fullscreenInterfaceID = -1;
    				anInt900 = 0;
    				friendsCount = 0;
    				dialogID = -1;
    				backDialogID = -1;
    				openInterfaceID = -1;
    				invOverlayInterfaceID = -1;
    				anInt1018 = -1;
    				aBoolean1149 = false;
    				tabID = 3;
    				inputDialogState = 0;
    				menuOpen = false;
    				messagePromptRaised = false;
    				aString844 = null;
    				anInt1055 = 0;
    				anInt1054 = -1;
    				aBoolean1047 = true;
    				method45();
    				for(int j3 = 0; j3 < 5; j3++)
    					anIntArray990[j3] = 0;
    
    				for(int l3 = 0; l3 < 5; l3++)
    				{
    					atPlayerActions[l3] = null;
    					atPlayerArray[l3] = false;
    				}
    
    				anInt1175 = 0;
    				anInt1134 = 0;
    				anInt986 = 0;
    				anInt1288 = 0;
    				anInt924 = 0;
    				anInt1188 = 0;
    				anInt1155 = 0;
    				anInt1226 = 0;
    				int anInt941 = 0;
    				int anInt1260 = 0;
    				resetImageProducers2();
    				return;
    			}
    			if(k == 3)
    			{
    				loginMessage1 = "";
    				loginMessage2 = "Invalid username or password.";
    				return;
    			}
    			if(k == 4)
    			{
    				loginMessage1 = "Your account has been disabled.";
    				loginMessage2 = "Please check your message-center for details.";
    				return;
    			}
    			if(k == 5)
    			{
    				loginMessage1 = "Your account is already logged in.";
    				loginMessage2 = "Try again in 60 secs...";
    				return;
    			}
    			if(k == 6)
    			{
    				loginMessage1 = "RuneScape has been updated!";
    				loginMessage2 = "Please reload this page.";
    				return;
    			}
    			if(k == 7)
    			{
    				loginMessage1 = "This world is full.";
    				loginMessage2 = "Please use a different world.";
    				return;
    			}
    			if(k == 8)
    			{
    				loginMessage1 = "Unable to connect.";
    				loginMessage2 = "Login server offline.";
    				return;
    			}
    			if(k == 9)
    			{
    				loginMessage1 = "Login limit exceeded.";
    				loginMessage2 = "Too many connections from your address.";
    				return;
    			}
    			if(k == 10)
    			{
    				loginMessage1 = "Unable to connect.";
    				loginMessage2 = "Bad session id.";
    				return;
    			}
    			if(k == 11)
    			{
    				loginMessage2 = "Login server rejected session.";
    				loginMessage2 = "Please try again.";
    				return;
    			}
    			if(k == 12)
    			{
    				loginMessage1 = "You need a members account to login to this world.";
    				loginMessage2 = "Please subscribe, or use a different world.";
    				return;
    			}
    			if(k == 13)
    			{
    				loginMessage1 = "Could not complete login.";
    				loginMessage2 = "Please try using a different world.";
    				return;
    			}
    			if(k == 14)
    			{
    				loginMessage1 = "The server is being updated.";
    				loginMessage2 = "Please wait 1 minute and try again.";
    				return;
    			}
    			if(k == 15)
    			{
    				loggedIn = true;
    				stream.currentOffset = 0;
    				inStream.currentOffset = 0;
    				pktType = -1;
    				anInt841 = -1;
    				anInt842 = -1;
    				anInt843 = -1;
    				pktSize = 0;
    				anInt1009 = 0;
    				anInt1104 = 0;
    				menuActionRow = 0;
    				menuOpen = false;
    				aLong824 = System.currentTimeMillis();
    				return;
    			}
    			if(k == 16)
    			{
    				loginMessage1 = "Login attempts exceeded.";
    				loginMessage2 = "Please wait 1 minute and try again.";
    				return;
    			}
    			if(k == 17)
    			{
    				loginMessage1 = "You are standing in a members-only area.";
    				loginMessage2 = "To play on this world move to a free area first";
    				return;
    			}
    			if(k == 20)
    			{
    				loginMessage1 = "Invalid loginserver requested";
    				loginMessage2 = "Please try using a different world.";
    				return;
    			}
    			if(k == 21)
    			{
    				for(int k1 = socketStream.read(); k1 >= 0; k1--)
    				{
    					loginMessage1 = "You have only just left another world";
    					loginMessage2 = "Your profile will be transferred in: " + k1 + " seconds";
    					drawLoginScreen(true);
    					try
    					{
    						Thread.sleep(1000L);
    					}
    					catch(Exception _ex) { }
    				}
    
    				login(s, s1, flag);
    				return;
    			}
    			if(k == -1)
    			{
    				if(i1 == 0) {
    					try {
    						Thread.sleep(2000L);
    					}
    					catch(Exception _ex) { }
    					login(s, s1, flag);
    					return;
    				} else
    				{
    					loginMessage1 = "No response from server";
    					loginMessage2 = "Please try using a different world.";
    					return;
    				}
    			} else
    			{
    				System.out.println("response:" + k);
    				loginMessage1 = "Unexpected server response";
    				loginMessage2 = "Please try using a different world.";
    				return;
    			}
    		}
    		catch(IOException _ex)
    		{
    			loginMessage1 = "";
    		}
    		loginMessage2 = "Error connecting to server.";
    	}
    still can't fix this. thanks.
    Reply With Quote  
     

  8. #8  
    Super Donator


    Join Date
    Mar 2009
    Age
    28
    Posts
    1,388
    Thanks given
    316
    Thanks received
    408
    Rep Power
    608
    erm i dont think you've enabled rsa in ur client
    Reply With Quote  
     

  9. #9  
    Registered Member
    Join Date
    May 2010
    Posts
    178
    Thanks given
    2
    Thanks received
    4
    Rep Power
    2
    Quote Originally Posted by RuneCore View Post
    erm i dont think you've enabled rsa in ur client
    RSA is enabled in my client, here's my doKeys() method:

    Code:
    	public void doKeys() {
    		int i = currentOffset;
    		currentOffset = 0;
    		byte abyte0[] = new byte[i];
    		readBytes(i, 0, abyte0);
    		BigInteger biginteger2 = new BigInteger(abyte0);
    		BigInteger biginteger3 = biginteger2.modPow(RSA_EXPONENT, RSA_MODULUS);
    		byte abyte1[] = biginteger3.toByteArray();
    		currentOffset = 0;
    		writeWordBigEndian(abyte1.length);
    		writeBytes(abyte1, abyte1.length, 0);
    	}
    Code:
    	private static final BigInteger RSA_MODULUS = new BigInteger("134879924117018689760458617113763010794928714932318058467109552420048747861644217016255598201828589101722456409486834737042810145044971733480806210971246858756450230199459844416953238964275407953368738189689602122143864920074673229804529378820732033043260467820015292026023179060008040229774580922064833792491");
    
    	private static final BigInteger RSA_EXPONENT = new BigInteger("65537");
    Reply With Quote  
     


Thread Information
Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)


User Tag List

Similar Threads

  1. [PI] Enabling RSA with Netty Networking
    By Thock321 in forum Help
    Replies: 2
    Last Post: 07-05-2012, 02:36 PM
  2. [delta]Need Help With Commands [Help]
    By qizdipin in forum Help
    Replies: 2
    Last Post: 04-26-2009, 04:36 PM
  3. pking with range HELP ITS SERIOUS
    By silabgarza in forum Help
    Replies: 2
    Last Post: 01-06-2009, 01:29 PM
  4. [help] with object [Help]
    By Mocro in forum Help
    Replies: 1
    Last Post: 10-31-2008, 10:08 AM
  5. Problems with Uppit, Help Please
    By Dizzeh in forum Chat
    Replies: 9
    Last Post: 08-16-2008, 09:15 PM
Posting Permissions
  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •