annotate app/src/main/java/ch/ethz/ssh2/transport/KexManager.java @ 518:9acc51a5a98f

Added tag stable-1.9.4-6 for changeset 947ea334735d
author Carl Byington <carl@five-ten-sg.com>
date Fri, 31 May 2024 13:35:44 -0600
parents 7953570e5210
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
1 /*
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
2 * Copyright (c) 2006-2011 Christian Plattner. All rights reserved.
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
3 * Please refer to the LICENSE.txt for licensing details.
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
4 */
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
5 package ch.ethz.ssh2.transport;
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
6
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
7 import java.io.IOException;
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
8 import java.io.InterruptedIOException;
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
9 import java.security.DigestException;
280
51d5f434ef6b start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents: 278
diff changeset
10 import java.security.KeyPair;
51d5f434ef6b start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents: 278
diff changeset
11 import java.security.PrivateKey;
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
12 import java.security.SecureRandom;
280
51d5f434ef6b start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents: 278
diff changeset
13 import java.security.interfaces.DSAPrivateKey;
51d5f434ef6b start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents: 278
diff changeset
14 import java.security.interfaces.RSAPrivateKey;
51d5f434ef6b start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents: 278
diff changeset
15 import java.security.interfaces.ECPrivateKey;
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
16 import java.util.Arrays;
358
37f4a3b506d9 move nist ec curves to lower priority
Carl Byington <carl@five-ten-sg.com>
parents: 324
diff changeset
17 import java.util.ArrayList;
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
18
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
19 import ch.ethz.ssh2.ConnectionInfo;
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
20 import ch.ethz.ssh2.DHGexParameters;
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
21 import ch.ethz.ssh2.compression.CompressionFactory;
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
22 import ch.ethz.ssh2.compression.Compressor;
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
23 import ch.ethz.ssh2.crypto.CryptoWishList;
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
24 import ch.ethz.ssh2.crypto.KeyMaterial;
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
25 import ch.ethz.ssh2.crypto.cipher.BlockCipher;
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
26 import ch.ethz.ssh2.crypto.cipher.BlockCipherFactory;
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
27 import ch.ethz.ssh2.crypto.digest.MAC;
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
28 import ch.ethz.ssh2.log.Logger;
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
29 import ch.ethz.ssh2.packets.PacketKexInit;
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
30 import ch.ethz.ssh2.packets.PacketNewKeys;
280
51d5f434ef6b start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents: 278
diff changeset
31 import java.security.interfaces.DSAPrivateKey;
278
d7e088fa2123 start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents: 273
diff changeset
32 import java.security.interfaces.RSAPrivateKey;
280
51d5f434ef6b start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents: 278
diff changeset
33 import java.security.interfaces.ECPrivateKey;
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
34
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
35 /**
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
36 * @version $Id: KexManager.java 152 2014-04-28 11:02:23Z dkocher@sudo.ch $
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
37 */
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
38 public abstract class KexManager implements MessageHandler {
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
39 protected static final Logger log = Logger.getLogger(KexManager.class);
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
40
358
37f4a3b506d9 move nist ec curves to lower priority
Carl Byington <carl@five-ten-sg.com>
parents: 324
diff changeset
41 private static final ArrayList<String> HOSTKEY_ALGS = new ArrayList<String>();
300
349847b2e318 add ecdsa key support everywhere
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
42 static {
373
2768eb029d73 debug kex error
Carl Byington <carl@five-ten-sg.com>
parents: 368
diff changeset
43 HOSTKEY_ALGS.add("ssh-rsa");
2768eb029d73 debug kex error
Carl Byington <carl@five-ten-sg.com>
parents: 368
diff changeset
44 HOSTKEY_ALGS.add("ssh-dss");
300
349847b2e318 add ecdsa key support everywhere
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
45 HOSTKEY_ALGS.add("ecdsa-sha2-nistp256");
349847b2e318 add ecdsa key support everywhere
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
46 HOSTKEY_ALGS.add("ecdsa-sha2-nistp384");
349847b2e318 add ecdsa key support everywhere
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
47 HOSTKEY_ALGS.add("ecdsa-sha2-nistp521");
349847b2e318 add ecdsa key support everywhere
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
48 }
349847b2e318 add ecdsa key support everywhere
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
49
358
37f4a3b506d9 move nist ec curves to lower priority
Carl Byington <carl@five-ten-sg.com>
parents: 324
diff changeset
50 private static final ArrayList<String> KEX_ALGS = new ArrayList<String>();
300
349847b2e318 add ecdsa key support everywhere
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
51 static {
349847b2e318 add ecdsa key support everywhere
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
52 KEX_ALGS.add("diffie-hellman-group-exchange-sha256");
349847b2e318 add ecdsa key support everywhere
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
53 KEX_ALGS.add("diffie-hellman-group-exchange-sha1");
349847b2e318 add ecdsa key support everywhere
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
54 KEX_ALGS.add("diffie-hellman-group14-sha1");
510
7953570e5210 update to ganymed-ssh2 tag 263 and fix hmac-sha2-512
Carl Byington <carl@five-ten-sg.com>
parents: 438
diff changeset
55 KEX_ALGS.add("diffie-hellman-group14-sha256");
7953570e5210 update to ganymed-ssh2 tag 263 and fix hmac-sha2-512
Carl Byington <carl@five-ten-sg.com>
parents: 438
diff changeset
56 KEX_ALGS.add("diffie-hellman-group16-sha512");
7953570e5210 update to ganymed-ssh2 tag 263 and fix hmac-sha2-512
Carl Byington <carl@five-ten-sg.com>
parents: 438
diff changeset
57 KEX_ALGS.add("diffie-hellman-group18-sha512");
300
349847b2e318 add ecdsa key support everywhere
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
58 KEX_ALGS.add("diffie-hellman-group1-sha1");
373
2768eb029d73 debug kex error
Carl Byington <carl@five-ten-sg.com>
parents: 368
diff changeset
59 KEX_ALGS.add("ecdh-sha2-nistp256");
2768eb029d73 debug kex error
Carl Byington <carl@five-ten-sg.com>
parents: 368
diff changeset
60 KEX_ALGS.add("ecdh-sha2-nistp384");
2768eb029d73 debug kex error
Carl Byington <carl@five-ten-sg.com>
parents: 368
diff changeset
61 KEX_ALGS.add("ecdh-sha2-nistp521");
300
349847b2e318 add ecdsa key support everywhere
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
62 }
349847b2e318 add ecdsa key support everywhere
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
63
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
64 KexState kxs;
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
65 int kexCount = 0;
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
66 KeyMaterial km;
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
67 byte[] sessionId;
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
68 ClientServerHello csh;
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
69
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
70 final Object accessLock = new Object();
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
71 ConnectionInfo lastConnInfo = null;
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
72
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
73 boolean connectionClosed = false;
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
74
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
75 boolean ignore_next_kex_packet = false;
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
76
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
77 final TransportManager tm;
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
78
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
79 CryptoWishList nextKEXcryptoWishList;
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
80 DHGexParameters nextKEXdhgexParameters;
285
486df527ddc5 start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents: 280
diff changeset
81 KeyPair nextKEXdsakey;
486df527ddc5 start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents: 280
diff changeset
82 KeyPair nextKEXrsakey;
300
349847b2e318 add ecdsa key support everywhere
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
83 KeyPair nextKEXeckey;
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
84
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
85 final SecureRandom rnd;
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
86
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
87 public KexManager(TransportManager tm, ClientServerHello csh, CryptoWishList initialCwl, SecureRandom rnd) {
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
88 this.tm = tm;
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
89 this.csh = csh;
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
90 this.nextKEXcryptoWishList = initialCwl;
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
91 this.nextKEXdhgexParameters = new DHGexParameters();
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
92 this.rnd = rnd;
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
93 }
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
94
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
95 public ConnectionInfo getOrWaitForConnectionInfo(int minKexCount) throws IOException {
307
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
96 synchronized (accessLock) {
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
97 while (true) {
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
98 if ((lastConnInfo != null) && (lastConnInfo.keyExchangeCounter >= minKexCount)) {
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
99 return lastConnInfo;
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
100 }
307
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
101
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
102 if (connectionClosed) {
324
a1a2e33b3565 add ecdsa key support everywhere
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
103 throw(IOException) new IOException("Key exchange was not finished, connection is closed.").initCause(tm.getReasonClosedCause());
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
104 }
307
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
105
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
106 try {
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
107 accessLock.wait();
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
108 }
307
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
109 catch (InterruptedException e) {
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
110 throw new InterruptedIOException(e.getMessage());
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
111 }
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
112 }
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
113 }
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
114 }
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
115
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
116 private String getFirstMatch(String[] client, String[] server) throws NegotiateException {
307
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
117 if (client == null || server == null) {
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
118 throw new IllegalArgumentException();
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
119 }
307
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
120
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
121 for (String c : client) {
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
122 for (String s : server) {
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
123 if (c.equals(s)) {
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
124 return c;
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
125 }
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
126 }
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
127 }
307
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
128
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
129 throw new NegotiateException(String.format("Negotiation failed for %s", Arrays.toString(server)));
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
130 }
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
131
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
132 private boolean compareFirstOfNameList(String[] a, String[] b) {
307
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
133 if (a == null || b == null) {
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
134 throw new IllegalArgumentException();
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
135 }
307
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
136
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
137 if ((a.length == 0) && (b.length == 0)) {
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
138 return true;
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
139 }
307
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
140
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
141 if ((a.length == 0) || (b.length == 0)) {
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
142 return false;
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
143 }
307
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
144
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
145 return (a[0].equals(b[0]));
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
146 }
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
147
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
148 private boolean isGuessOK(KexParameters cpar, KexParameters spar) {
307
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
149 if (cpar == null || spar == null) {
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
150 throw new IllegalArgumentException();
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
151 }
307
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
152
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
153 if (!compareFirstOfNameList(cpar.kex_algorithms, spar.kex_algorithms)) {
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
154 return false;
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
155 }
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
156
307
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
157 if (!compareFirstOfNameList(cpar.server_host_key_algorithms, spar.server_host_key_algorithms)) {
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
158 return false;
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
159 }
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
160
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
161 /*
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
162 * We do NOT check here if the other algorithms can be agreed on, this
307
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
163 * is just a check if kex_algorithms and server_host_key_algorithms were
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
164 * guessed right!
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
165 */
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
166 return true;
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
167 }
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
168
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
169 protected NegotiatedParameters mergeKexParameters(KexParameters client, KexParameters server)
307
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
170 throws NegotiateException {
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
171 NegotiatedParameters np = new NegotiatedParameters();
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
172 np.kex_algo = getFirstMatch(client.kex_algorithms, server.kex_algorithms);
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
173 log.info("kex_algo=" + np.kex_algo);
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
174 np.server_host_key_algo = getFirstMatch(client.server_host_key_algorithms,
307
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
175 server.server_host_key_algorithms);
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
176 log.info("server_host_key_algo=" + np.server_host_key_algo);
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
177 np.enc_algo_client_to_server = getFirstMatch(client.encryption_algorithms_client_to_server,
307
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
178 server.encryption_algorithms_client_to_server);
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
179 np.enc_algo_server_to_client = getFirstMatch(client.encryption_algorithms_server_to_client,
307
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
180 server.encryption_algorithms_server_to_client);
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
181 log.info("enc_algo_client_to_server=" + np.enc_algo_client_to_server);
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
182 log.info("enc_algo_server_to_client=" + np.enc_algo_server_to_client);
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
183 np.mac_algo_client_to_server = getFirstMatch(client.mac_algorithms_client_to_server,
307
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
184 server.mac_algorithms_client_to_server);
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
185 np.mac_algo_server_to_client = getFirstMatch(client.mac_algorithms_server_to_client,
307
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
186 server.mac_algorithms_server_to_client);
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
187 log.info("mac_algo_client_to_server=" + np.mac_algo_client_to_server);
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
188 log.info("mac_algo_server_to_client=" + np.mac_algo_server_to_client);
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
189 np.comp_algo_client_to_server = getFirstMatch(client.compression_algorithms_client_to_server,
307
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
190 server.compression_algorithms_client_to_server);
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
191 np.comp_algo_server_to_client = getFirstMatch(client.compression_algorithms_server_to_client,
307
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
192 server.compression_algorithms_server_to_client);
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
193 log.info("comp_algo_client_to_server=" + np.comp_algo_client_to_server);
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
194 log.info("comp_algo_server_to_client=" + np.comp_algo_server_to_client);
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
195 np.lang_client_to_server = getFirstMatch(client.languages_client_to_server,
307
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
196 server.languages_client_to_server);
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
197 np.lang_server_to_client = getFirstMatch(client.languages_server_to_client,
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
198 server.languages_server_to_client);
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
199
307
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
200 if (isGuessOK(client, server)) {
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
201 np.guessOK = true;
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
202 }
307
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
203
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
204 return np;
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
205 }
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
206
300
349847b2e318 add ecdsa key support everywhere
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
207 public synchronized void initiateKEX(CryptoWishList cwl, DHGexParameters dhgex, KeyPair dsa, KeyPair rsa, KeyPair ec)
307
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
208 throws IOException {
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
209 nextKEXcryptoWishList = cwl;
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
210 nextKEXdhgexParameters = dhgex;
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
211 nextKEXdsakey = dsa;
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
212 nextKEXrsakey = rsa;
300
349847b2e318 add ecdsa key support everywhere
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
213 nextKEXeckey = ec;
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
214
307
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
215 if (kxs == null) {
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
216 kxs = new KexState();
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
217 kxs.local_dsa_key = dsa;
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
218 kxs.local_rsa_key = rsa;
300
349847b2e318 add ecdsa key support everywhere
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
219 kxs.local_ec_key = ec;
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
220 kxs.dhgexParameters = nextKEXdhgexParameters;
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
221 kxs.localKEX = new PacketKexInit(nextKEXcryptoWishList, rnd);
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
222 tm.sendKexMessage(kxs.localKEX.getPayload());
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
223 }
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
224 }
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
225
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
226 private boolean establishKeyMaterial() throws IOException {
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
227 try {
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
228 int mac_cs_key_len = MAC.getKeyLen(kxs.np.mac_algo_client_to_server);
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
229 int enc_cs_key_len = BlockCipherFactory.getKeySize(kxs.np.enc_algo_client_to_server);
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
230 int enc_cs_block_len = BlockCipherFactory.getBlockSize(kxs.np.enc_algo_client_to_server);
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
231 int mac_sc_key_len = MAC.getKeyLen(kxs.np.mac_algo_server_to_client);
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
232 int enc_sc_key_len = BlockCipherFactory.getKeySize(kxs.np.enc_algo_server_to_client);
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
233 int enc_sc_block_len = BlockCipherFactory.getBlockSize(kxs.np.enc_algo_server_to_client);
374
597138203c15 debug kex error
Carl Byington <carl@five-ten-sg.com>
parents: 373
diff changeset
234 km = KeyMaterial.create(kxs.hashAlgo, kxs.H, kxs.K, sessionId, enc_cs_key_len, enc_cs_block_len, mac_cs_key_len,
307
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
235 enc_sc_key_len, enc_sc_block_len, mac_sc_key_len);
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
236 }
307
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
237 catch (IllegalArgumentException e) {
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
238 return false;
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
239 }
307
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
240
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
241 return true;
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
242 }
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
243
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
244 protected void finishKex(boolean clientMode) throws IOException {
307
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
245 if (sessionId == null) {
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
246 sessionId = kxs.H;
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
247 }
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
248
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
249 establishKeyMaterial();
307
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
250 /* Tell the other side that we start using the new material */
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
251 PacketNewKeys ign = new PacketNewKeys();
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
252 tm.sendKexMessage(ign.getPayload());
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
253 BlockCipher cbc;
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
254 MAC mac;
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
255 Compressor comp;
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
256
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
257 try {
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
258 cbc = BlockCipherFactory.createCipher(clientMode ? kxs.np.enc_algo_client_to_server
307
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
259 : kxs.np.enc_algo_server_to_client, true, clientMode ? km.enc_key_client_to_server
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
260 : km.enc_key_server_to_client, clientMode ? km.initial_iv_client_to_server
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
261 : km.initial_iv_server_to_client);
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
262
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
263 try {
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
264 mac = new MAC(clientMode ? kxs.np.mac_algo_client_to_server : kxs.np.mac_algo_server_to_client, clientMode
307
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
265 ? km.integrity_key_client_to_server : km.integrity_key_server_to_client);
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
266 }
307
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
267 catch (DigestException e) {
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
268 throw new IOException(e);
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
269 }
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
270
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
271 comp = CompressionFactory.createCompressor(kxs.np.comp_algo_client_to_server);
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
272 }
307
071eccdff8ea fix java formatting
Carl Byington <carl@five-ten-sg.com>
parents: 301
diff changeset
273 catch (IllegalArgumentException f) {
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
274 throw new IOException(String.format("Fatal error initializing ciphers. %s", f.getMessage()));
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
275 }
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
276
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
277 tm.changeSendCipher(cbc, mac);
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
278 tm.changeSendCompression(comp);
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
279 tm.kexFinished();
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
280 }
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
281
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
282 public static String[] getDefaultServerHostkeyAlgorithmList() {
300
349847b2e318 add ecdsa key support everywhere
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
283 return HOSTKEY_ALGS.toArray(new String[HOSTKEY_ALGS.size()]);
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
284 }
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
285
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
286 public static void checkServerHostkeyAlgorithmsList(String[] algos) {
300
349847b2e318 add ecdsa key support everywhere
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
287 for (final String algo : algos) {
349847b2e318 add ecdsa key support everywhere
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
288 if (!HOSTKEY_ALGS.contains(algo))
349847b2e318 add ecdsa key support everywhere
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
289 throw new IllegalArgumentException("Unknown server host key algorithm '" + algo + "'");
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
290 }
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
291 }
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
292
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
293 public static String[] getDefaultClientKexAlgorithmList() {
300
349847b2e318 add ecdsa key support everywhere
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
294 return KEX_ALGS.toArray(new String[KEX_ALGS.size()]);
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
295 }
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
296
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
297 public static String[] getDefaultServerKexAlgorithmList() {
300
349847b2e318 add ecdsa key support everywhere
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
298 return KEX_ALGS.toArray(new String[KEX_ALGS.size()]);
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
299 }
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
300
510
7953570e5210 update to ganymed-ssh2 tag 263 and fix hmac-sha2-512
Carl Byington <carl@five-ten-sg.com>
parents: 438
diff changeset
301 public static void checkClientKexAlgorithmList(String[] algos) {
300
349847b2e318 add ecdsa key support everywhere
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
302 for (final String algo : algos) {
349847b2e318 add ecdsa key support everywhere
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
303 if (!KEX_ALGS.contains(algo))
349847b2e318 add ecdsa key support everywhere
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
304 throw new IllegalArgumentException("Unknown kex algorithm '" + algo + "'");
273
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
305 }
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
306 }
91a31873c42a start conversion from trilead to ganymed
Carl Byington <carl@five-ten-sg.com>
parents:
diff changeset
307 }