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