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 }