1 /* 2 * Copyright (c) 2006-2011 Christian Plattner. All rights reserved. 3 * Please refer to the LICENSE.txt for licensing details. 4 */ 5 package ch.ethz.ssh2; 6 7 /** 8 * A <code>DHGexParameters</code> object can be used to specify parameters for 9 * the diffie-hellman group exchange. 10 * <p> 11 * Depending on which constructor is used, either the use of a 12 * <code>SSH_MSG_KEX_DH_GEX_REQUEST</code> or <code>SSH_MSG_KEX_DH_GEX_REQUEST_OLD</code> 13 * can be forced. 14 * 15 * @see Connection#setDHGexParameters(DHGexParameters) 16 * @author Christian Plattner 17 * @version 2.50, 03/15/10 18 */ 19 20 public class DHGexParameters 21 { 22 private final int min_group_len; 23 private final int pref_group_len; 24 private final int max_group_len; 25 26 private static final int MIN_ALLOWED = 1024; 27 private static final int MAX_ALLOWED = 8192; 28 29 /** 30 * Same as calling {@link #DHGexParameters(int, int, int) DHGexParameters(1024, 1024, 4096)}. 31 * This is also the default used by the Connection class. 32 * 33 */ 34 public DHGexParameters() 35 { 36 this(1024, 1024, 4096); 37 } 38 39 /** 40 * This constructor can be used to force the sending of a 41 * <code>SSH_MSG_KEX_DH_GEX_REQUEST_OLD</code> request. 42 * Internally, the minimum and maximum group lengths will 43 * be set to zero. 44 * 45 * @param pref_group_len has to be >= 1024 and <= 8192 46 */ 47 public DHGexParameters(int pref_group_len) 48 { 49 if ((pref_group_len < MIN_ALLOWED) || (pref_group_len > MAX_ALLOWED)) 50 throw new IllegalArgumentException("pref_group_len out of range!"); 51 52 this.pref_group_len = pref_group_len; 53 this.min_group_len = 0; 54 this.max_group_len = 0; 55 } 56 57 /** 58 * This constructor can be used to force the sending of a 59 * <code>SSH_MSG_KEX_DH_GEX_REQUEST</code> request. 60 * <p> 61 * Note: older OpenSSH servers don't understand this request, in which 62 * case you should use the {@link #DHGexParameters(int)} constructor. 63 * <p> 64 * All values have to be >= 1024 and <= 8192. Furthermore, 65 * min_group_len <= pref_group_len <= max_group_len. 66 * 67 * @param min_group_len 68 * @param pref_group_len 69 * @param max_group_len 70 */ 71 public DHGexParameters(int min_group_len, int pref_group_len, int max_group_len) 72 { 73 if ((min_group_len < MIN_ALLOWED) || (min_group_len > MAX_ALLOWED)) 74 throw new IllegalArgumentException("min_group_len out of range!"); 75 76 if ((pref_group_len < MIN_ALLOWED) || (pref_group_len > MAX_ALLOWED)) 77 throw new IllegalArgumentException("pref_group_len out of range!"); 78 79 if ((max_group_len < MIN_ALLOWED) || (max_group_len > MAX_ALLOWED)) 80 throw new IllegalArgumentException("max_group_len out of range!"); 81 82 if ((pref_group_len < min_group_len) || (pref_group_len > max_group_len)) 83 throw new IllegalArgumentException("pref_group_len is incompatible with min and max!"); 84 85 if (max_group_len < min_group_len) 86 throw new IllegalArgumentException("max_group_len must not be smaller than min_group_len!"); 87 88 this.min_group_len = min_group_len; 89 this.pref_group_len = pref_group_len; 90 this.max_group_len = max_group_len; 91 } 92 93 /** 94 * Get the maximum group length. 95 * 96 * @return the maximum group length, may be <code>zero</code> if 97 * SSH_MSG_KEX_DH_GEX_REQUEST_OLD should be requested 98 */ 99 public int getMax_group_len() 100 { 101 return max_group_len; 102 } 103 104 /** 105 * Get the minimum group length. 106 * 107 * @return minimum group length, may be <code>zero</code> if 108 * SSH_MSG_KEX_DH_GEX_REQUEST_OLD should be requested 109 */ 110 public int getMin_group_len() 111 { 112 return min_group_len; 113 } 114 115 /** 116 * Get the preferred group length. 117 * 118 * @return the preferred group length 119 */ 120 public int getPref_group_len() 121 { 122 return pref_group_len; 123 } 124 } 125