1 2 package ch.ethz.ssh2.packets; 3 4 import java.io.IOException ; 5 import java.security.SecureRandom ; 6 7 import ch.ethz.ssh2.crypto.CryptoWishList; 8 import ch.ethz.ssh2.transport.KexParameters; 9 10 16 public class PacketKexInit 17 { 18 byte[] payload; 19 20 KexParameters kp = new KexParameters(); 21 22 public PacketKexInit(CryptoWishList cwl, SecureRandom rnd) 23 { 24 kp.cookie = new byte[16]; 25 rnd.nextBytes(kp.cookie); 26 27 kp.kex_algorithms = cwl.kexAlgorithms; 28 kp.server_host_key_algorithms = cwl.serverHostKeyAlgorithms; 29 kp.encryption_algorithms_client_to_server = cwl.c2s_enc_algos; 30 kp.encryption_algorithms_server_to_client = cwl.s2c_enc_algos; 31 kp.mac_algorithms_client_to_server = cwl.c2s_mac_algos; 32 kp.mac_algorithms_server_to_client = cwl.s2c_mac_algos; 33 kp.compression_algorithms_client_to_server = new String [] { "none" }; 34 kp.compression_algorithms_server_to_client = new String [] { "none" }; 35 kp.languages_client_to_server = new String [] {}; 36 kp.languages_server_to_client = new String [] {}; 37 kp.first_kex_packet_follows = false; 38 kp.reserved_field1 = 0; 39 } 40 41 public PacketKexInit(byte payload[], int off, int len) throws IOException 42 { 43 this.payload = new byte[len]; 44 System.arraycopy(payload, off, this.payload, 0, len); 45 46 TypesReader tr = new TypesReader(payload, off, len); 47 48 int packet_type = tr.readByte(); 49 50 if (packet_type != Packets.SSH_MSG_KEXINIT) 51 throw new IOException ("This is not a KexInitPacket! (" + packet_type + ")"); 52 53 kp.cookie = tr.readBytes(16); 54 kp.kex_algorithms = tr.readNameList(); 55 kp.server_host_key_algorithms = tr.readNameList(); 56 kp.encryption_algorithms_client_to_server = tr.readNameList(); 57 kp.encryption_algorithms_server_to_client = tr.readNameList(); 58 kp.mac_algorithms_client_to_server = tr.readNameList(); 59 kp.mac_algorithms_server_to_client = tr.readNameList(); 60 kp.compression_algorithms_client_to_server = tr.readNameList(); 61 kp.compression_algorithms_server_to_client = tr.readNameList(); 62 kp.languages_client_to_server = tr.readNameList(); 63 kp.languages_server_to_client = tr.readNameList(); 64 kp.first_kex_packet_follows = tr.readBoolean(); 65 kp.reserved_field1 = tr.readUINT32(); 66 67 if (tr.remain() != 0) 68 throw new IOException ("Padding in KexInitPacket!"); 69 } 70 71 public byte[] getPayload() 72 { 73 if (payload == null) 74 { 75 TypesWriter tw = new TypesWriter(); 76 tw.writeByte(Packets.SSH_MSG_KEXINIT); 77 tw.writeBytes(kp.cookie, 0, 16); 78 tw.writeNameList(kp.kex_algorithms); 79 tw.writeNameList(kp.server_host_key_algorithms); 80 tw.writeNameList(kp.encryption_algorithms_client_to_server); 81 tw.writeNameList(kp.encryption_algorithms_server_to_client); 82 tw.writeNameList(kp.mac_algorithms_client_to_server); 83 tw.writeNameList(kp.mac_algorithms_server_to_client); 84 tw.writeNameList(kp.compression_algorithms_client_to_server); 85 tw.writeNameList(kp.compression_algorithms_server_to_client); 86 tw.writeNameList(kp.languages_client_to_server); 87 tw.writeNameList(kp.languages_server_to_client); 88 tw.writeBoolean(kp.first_kex_packet_follows); 89 tw.writeUINT32(kp.reserved_field1); 90 payload = tw.getBytes(); 91 } 92 return payload; 93 } 94 95 public KexParameters getKexParameters() 96 { 97 return kp; 98 } 99 100 public String [] getCompression_algorithms_client_to_server() 101 { 102 return kp.compression_algorithms_client_to_server; 103 } 104 105 public String [] getCompression_algorithms_server_to_client() 106 { 107 return kp.compression_algorithms_server_to_client; 108 } 109 110 public byte[] getCookie() 111 { 112 return kp.cookie; 113 } 114 115 public String [] getEncryption_algorithms_client_to_server() 116 { 117 return kp.encryption_algorithms_client_to_server; 118 } 119 120 public String [] getEncryption_algorithms_server_to_client() 121 { 122 return kp.encryption_algorithms_server_to_client; 123 } 124 125 public boolean isFirst_kex_packet_follows() 126 { 127 return kp.first_kex_packet_follows; 128 } 129 130 public String [] getKex_algorithms() 131 { 132 return kp.kex_algorithms; 133 } 134 135 public String [] getLanguages_client_to_server() 136 { 137 return kp.languages_client_to_server; 138 } 139 140 public String [] getLanguages_server_to_client() 141 { 142 return kp.languages_server_to_client; 143 } 144 145 public String [] getMac_algorithms_client_to_server() 146 { 147 return kp.mac_algorithms_client_to_server; 148 } 149 150 public String [] getMac_algorithms_server_to_client() 151 { 152 return kp.mac_algorithms_server_to_client; 153 } 154 155 public int getReserved_field1() 156 { 157 return kp.reserved_field1; 158 } 159 160 public String [] getServer_host_key_algorithms() 161 { 162 return kp.server_host_key_algorithms; 163 } 164 } 165 | Popular Tags |