package crypt; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import com.jds.jn.crypt.ProtocolCrypter; import com.jds.jn.network.packets.DecryptedPacket; import com.jds.jn.network.packets.PacketType; import com.jds.jn.session.Session; import crypt.helpers.RC4; /** * Author: VISTALL * Company: J Develop Station * Date: 23:36:41/18.07.2010 */ public class APBAuthCrypter implements ProtocolCrypter { private RC4 _crypt; private boolean _first = true; @Override public byte[] decrypt(byte[] raw, PacketType dir, Session session) { if(_crypt == null && _first) { try { DecryptedPacket packet = new DecryptedPacket(null, dir, raw, System.currentTimeMillis(), session.getProtocol(), false); // LS2GC_LOGIN_PIZZLE if(packet.getPacketInfo() != null) { MessageDigest sha1 = MessageDigest.getInstance("SHA-1"); byte[] nounce = packet.getBytes("nounce"); sha1.update(nounce); byte[] hash = sha1.digest(); _crypt = new RC4(); _crypt.setKey(hash); _first = false; } } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } } else if(_crypt != null) { byte[] newdata = new byte[raw.length]; _crypt.decrypt(raw, 0, newdata, 0, raw.length); //_crypt = null; return newdata; } return raw; } @Override public byte[] encrypt(byte[] raw, PacketType dir, Session session) { return new byte[0]; } }