148ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood/*
248ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood * Copyright (c) 2006-2011 Christian Plattner. All rights reserved.
348ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood * Please refer to the LICENSE.txt for licensing details.
448ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood */
548ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwoodpackage ch.ethz.ssh2.packets;
648ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
748ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwoodimport java.io.IOException;
848ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
948ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwoodimport java.math.BigInteger;
1048ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
1148ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood/**
1248ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood * PacketKexDHReply.
1348ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood *
1448ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood * @author Christian Plattner
1548ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood * @version 2.50, 03/15/10
1648ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood */
1748ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwoodpublic class PacketKexDHReply
1848ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood{
1948ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	byte[] payload;
2048ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
2148ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	byte[] hostKey;
2248ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	BigInteger f;
2348ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	byte[] signature;
2448ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
2548ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	public PacketKexDHReply(byte payload[], int off, int len) throws IOException
2648ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	{
2748ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood		this.payload = new byte[len];
2848ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood		System.arraycopy(payload, off, this.payload, 0, len);
2948ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
3048ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood		TypesReader tr = new TypesReader(payload, off, len);
3148ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
3248ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood		int packet_type = tr.readByte();
3348ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
3448ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood		if (packet_type != Packets.SSH_MSG_KEXDH_REPLY)
3548ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			throw new IOException("This is not a SSH_MSG_KEXDH_REPLY! ("
3648ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood					+ packet_type + ")");
3748ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
3848ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood		hostKey = tr.readByteString();
3948ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood		f = tr.readMPINT();
4048ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood		signature = tr.readByteString();
4148ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
4248ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood		if (tr.remain() != 0) throw new IOException("PADDING IN SSH_MSG_KEXDH_REPLY!");
4348ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	}
4448ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
4548ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	public BigInteger getF()
4648ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	{
4748ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood		return f;
4848ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	}
4948ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
5048ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	public byte[] getHostKey()
5148ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	{
5248ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood		return hostKey;
5348ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	}
5448ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
5548ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	public byte[] getSignature()
5648ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	{
5748ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood		return signature;
5848ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	}
5948ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood}
60