Arcturus-Community/src/main/java/com/eu/habbo/messages/incoming/handshake/CompleteDiffieHandshakeEvent.java
Mike 57f66a1514 Force encryption to be used when it is enabled.
Not doing this check would make it possible to skip encryption when it is enabled.
2020-05-02 04:36:26 +02:00

35 lines
1.4 KiB
Java

package com.eu.habbo.messages.incoming.handshake;
import com.eu.habbo.Emulator;
import com.eu.habbo.crypto.HabboRC4;
import com.eu.habbo.messages.NoAuthMessage;
import com.eu.habbo.messages.incoming.MessageHandler;
import com.eu.habbo.messages.outgoing.handshake.CompleteDiffieHandshakeComposer;
import com.eu.habbo.networking.gameserver.decoders.GameByteDecryption;
import com.eu.habbo.networking.gameserver.encoders.GameByteEncryption;
import com.eu.habbo.networking.gameserver.GameServerAttributes;
@NoAuthMessage
public class CompleteDiffieHandshakeEvent extends MessageHandler {
@Override
public void handle() throws Exception {
if (this.client.getEncryption() == null) {
Emulator.getGameServer().getGameClientManager().disposeClient(this.client);
return;
}
byte[] sharedKey = this.client.getEncryption().getDiffie().getSharedKey(this.packet.readString());
this.client.setHandshakeFinished(true);
this.client.sendResponse(new CompleteDiffieHandshakeComposer(this.client.getEncryption().getDiffie().getPublicKey()));
this.client.getChannel().attr(GameServerAttributes.CRYPTO_CLIENT).set(new HabboRC4(sharedKey));
this.client.getChannel().attr(GameServerAttributes.CRYPTO_SERVER).set(new HabboRC4(sharedKey));
this.client.getChannel().pipeline().addFirst(new GameByteDecryption());
this.client.getChannel().pipeline().addFirst(new GameByteEncryption());
}
}