Skip to content

Feature Request: support ISAAC + RSA for 235 server compatibility #4

@Hubcapp

Description

@Hubcapp

// TODO toggle ISAAC
/*seedIsaac(seed) {
//this.isaacIncoming = new ISAAC(seed);
//this.isaacOutgoing = new ISAAC(seed);
}*/

Not sure what else is needed here to enable ISAAC.

Also in

async login(u, p, reconnecting) {
if (this.worldFullTimeout > 0) {
this.showLoginScreenStatus('Please wait...', 'Connecting to server');
await sleep(2000);
this.showLoginScreenStatus('Sorry! The server is currently full.', 'Please try again later');
return;
}
try {
this.username = u;
u = Utility.formatAuthString(u, 20);
this.password = p;
p = Utility.formatAuthString(p, 20);
if (u.trim().length === 0) {
this.showLoginScreenStatus('You must enter both a username', 'and a password - Please try again');
return;
}
if (reconnecting) {
this.drawTextBox('Connection lost! Please wait...', 'Attempting to re-establish');
} else {
this.showLoginScreenStatus('Please wait...', 'Connecting to server');
}
this.packetStream = new PacketStream(await this.createSocket(this.server, this.port), this);
this.packetStream.maxReadTries = GameConnection.maxReadTries;
let l = Utility.usernameToHash(u);
this.packetStream.newPacket(clientOpcodes.SESSION);
this.packetStream.putByte(l.shiftRight(16).and(31).toInt());
this.packetStream.flushPacket();
let sessId = await this.packetStream.getLong();
this.sessionID = sessId;
if (sessId.equals(0)) {
this.showLoginScreenStatus('Login server offline.', 'Please try again in a few mins');
return;
}
console.log('Verb: Session id: ' + sessId);
let ai = new Int32Array(4);
ai[0] = (Math.random() * 99999999) | 0;
ai[1] = (Math.random() * 99999999) | 0;
ai[2] = sessId.shiftRight(32).toInt();
ai[3] = sessId.toInt();
this.packetStream.newPacket(clientOpcodes.LOGIN);
if (reconnecting) {
this.packetStream.putByte(1);
} else {
this.packetStream.putByte(0);
}
this.packetStream.putShort(GameConnection.clientVersion);
this.packetStream.putByte(0); // limit30
this.packetStream.putByte(10);
this.packetStream.putInt(ai[0]);
this.packetStream.putInt(ai[1]);
this.packetStream.putInt(ai[2]);
this.packetStream.putInt(ai[3]);
this.packetStream.putInt(0); // uuid
this.packetStream.putString(u);
this.packetStream.putString(p);
this.packetStream.flushPacket();
//this.packetStream.seedIsaac(ai);
let resp = await this.packetStream.readStream();
console.log('login response:' + resp);
if (resp === 25) {
this.moderatorLevel = 1;
this.autoLoginTimeout = 0;
this.resetGame();
return;
}
if (resp === 0) {
this.moderatorLevel = 0;
this.autoLoginTimeout = 0;
this.resetGame();
return;
}
if (resp === 1) {
this.autoLoginTimeout = 0;
, the login packet isn't encapsulated in RSA, so it won't work for a 235 server. Might be correct for a 204 server, haven't looked into that.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions