001    package net.minecraft.network.packet;
002    
003    import cpw.mods.fml.common.Side;
004    import cpw.mods.fml.common.asm.SideOnly;
005    import java.io.DataInputStream;
006    import java.io.DataOutputStream;
007    import java.io.IOException;
008    import java.security.PrivateKey;
009    import java.security.PublicKey;
010    import javax.crypto.SecretKey;
011    import net.minecraft.util.CryptManager;
012    
013    public class Packet252SharedKey extends Packet
014    {
015        private byte[] sharedSecret = new byte[0];
016        private byte[] verifyToken = new byte[0];
017        private SecretKey field_73306_c;
018    
019        public Packet252SharedKey() {}
020    
021        @SideOnly(Side.CLIENT)
022        public Packet252SharedKey(SecretKey par1SecretKey, PublicKey par2PublicKey, byte[] par3ArrayOfByte)
023        {
024            this.field_73306_c = par1SecretKey;
025            this.sharedSecret = CryptManager.func_75894_a(par2PublicKey, par1SecretKey.getEncoded());
026            this.verifyToken = CryptManager.func_75894_a(par2PublicKey, par3ArrayOfByte);
027        }
028    
029        /**
030         * Abstract. Reads the raw packet data from the data stream.
031         */
032        public void readPacketData(DataInputStream par1DataInputStream) throws IOException
033        {
034            this.sharedSecret = readBytesFromStream(par1DataInputStream);
035            this.verifyToken = readBytesFromStream(par1DataInputStream);
036        }
037    
038        /**
039         * Abstract. Writes the raw packet data to the data stream.
040         */
041        public void writePacketData(DataOutputStream par1DataOutputStream) throws IOException
042        {
043            writeByteArray(par1DataOutputStream, this.sharedSecret);
044            writeByteArray(par1DataOutputStream, this.verifyToken);
045        }
046    
047        /**
048         * Passes this Packet on to the NetHandler for processing.
049         */
050        public void processPacket(NetHandler par1NetHandler)
051        {
052            par1NetHandler.handleSharedKey(this);
053        }
054    
055        /**
056         * Abstract. Return the size of the packet (not counting the header).
057         */
058        public int getPacketSize()
059        {
060            return 2 + this.sharedSecret.length + 2 + this.verifyToken.length;
061        }
062    
063        public SecretKey func_73303_a(PrivateKey par1PrivateKey)
064        {
065            return par1PrivateKey == null ? this.field_73306_c : (this.field_73306_c = CryptManager.func_75887_a(par1PrivateKey, this.sharedSecret));
066        }
067    
068        public SecretKey func_73304_d()
069        {
070            return this.func_73303_a((PrivateKey)null);
071        }
072    
073        public byte[] func_73302_b(PrivateKey par1PrivateKey)
074        {
075            return par1PrivateKey == null ? this.verifyToken : CryptManager.func_75889_b(par1PrivateKey, this.verifyToken);
076        }
077    }