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 }