All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.sshtools.ssh.components.DiffieHellmanGroups Maven / Gradle / Ivy

The newest version!
/**
 * Copyright 2003-2016 SSHTOOLS Limited. All Rights Reserved.
 *
 * For product documentation visit https://www.sshtools.com/
 *
 * This file is part of J2SSH Maverick.
 *
 * J2SSH Maverick is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * J2SSH Maverick is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with J2SSH Maverick.  If not, see .
 */
package com.sshtools.ssh.components;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import com.sshtools.util.UnsignedInteger32;

public class DiffieHellmanGroups {
	
	public static final BigInteger group1 = new BigInteger(
			"FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1"
					+ "29024E088A67CC74020BBEA63B139B22514A08798E3404DD"
					+ "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245"
					+ "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED"
					+ "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE65381"
					+ "FFFFFFFFFFFFFFFF", 16);

	public static final BigInteger group5 = new BigInteger("FFFFFFFF"
			+ "FFFFFFFF" + "C90FDAA2" + "2168C234" + "C4C6628B" + "80DC1CD1"
			+ "29024E08" + "8A67CC74" + "020BBEA6" + "3B139B22" + "514A0879"
			+ "8E3404DD" + "EF9519B3" + "CD3A431B" + "302B0A6D" + "F25F1437"
			+ "4FE1356D" + "6D51C245" + "E485B576" + "625E7EC6" + "F44C42E9"
			+ "A637ED6B" + "0BFF5CB6" + "F406B7ED" + "EE386BFB" + "5A899FA5"
			+ "AE9F2411" + "7C4B1FE6" + "49286651" + "ECE45B3D" + "C2007CB8"
			+ "A163BF05" + "98DA4836" + "1C55D39A" + "69163FA8" + "FD24CF5F"
			+ "83655D23" + "DCA3AD96" + "1C62F356" + "208552BB" + "9ED52907"
			+ "7096966D" + "670C354E" + "4ABC9804" + "F1746C08" + "CA237327"
			+ "FFFFFFFF" + "FFFFFFFF", 16);

	public static final BigInteger group14 = new BigInteger("FFFFFFFF"
			+ "FFFFFFFF" + "C90FDAA2" + "2168C234" + "C4C6628B" + "80DC1CD1"
			+ "29024E08" + "8A67CC74" + "020BBEA6" + "3B139B22" + "514A0879"
			+ "8E3404DD" + "EF9519B3" + "CD3A431B" + "302B0A6D" + "F25F1437"
			+ "4FE1356D" + "6D51C245" + "E485B576" + "625E7EC6" + "F44C42E9"
			+ "A637ED6B" + "0BFF5CB6" + "F406B7ED" + "EE386BFB" + "5A899FA5"
			+ "AE9F2411" + "7C4B1FE6" + "49286651" + "ECE45B3D" + "C2007CB8"
			+ "A163BF05" + "98DA4836" + "1C55D39A" + "69163FA8" + "FD24CF5F"
			+ "83655D23" + "DCA3AD96" + "1C62F356" + "208552BB" + "9ED52907"
			+ "7096966D" + "670C354E" + "4ABC9804" + "F1746C08" + "CA18217C"
			+ "32905E46" + "2E36CE3B" + "E39E772C" + "180E8603" + "9B2783A2"
			+ "EC07A28F" + "B5C55DF0" + "6F4C52C9" + "DE2BCBF6" + "95581718"
			+ "3995497C" + "EA956AE5" + "15D22618" + "98FA0510" + "15728E5A"
			+ "8AACAA68" + "FFFFFFFF" + "FFFFFFFF", 16);

	public static final BigInteger group15 = new BigInteger("FFFFFFFF"
			+ "FFFFFFFF" + "C90FDAA2" + "2168C234" + "C4C6628B" + "80DC1CD1"
			+ "29024E08" + "8A67CC74" + "020BBEA6" + "3B139B22" + "514A0879"
			+ "8E3404DD" + "EF9519B3" + "CD3A431B" + "302B0A6D" + "F25F1437"
			+ "4FE1356D" + "6D51C245" + "E485B576" + "625E7EC6" + "F44C42E9"
			+ "A637ED6B" + "0BFF5CB6" + "F406B7ED" + "EE386BFB" + "5A899FA5"
			+ "AE9F2411" + "7C4B1FE6" + "49286651" + "ECE45B3D" + "C2007CB8"
			+ "A163BF05" + "98DA4836" + "1C55D39A" + "69163FA8" + "FD24CF5F"
			+ "83655D23" + "DCA3AD96" + "1C62F356" + "208552BB" + "9ED52907"
			+ "7096966D" + "670C354E" + "4ABC9804" + "F1746C08" + "CA18217C"
			+ "32905E46" + "2E36CE3B" + "E39E772C" + "180E8603" + "9B2783A2"
			+ "EC07A28F" + "B5C55DF0" + "6F4C52C9" + "DE2BCBF6" + "95581718"
			+ "3995497C" + "EA956AE5" + "15D22618" + "98FA0510" + "15728E5A"
			+ "8AAAC42D" + "AD33170D" + "04507A33" + "A85521AB" + "DF1CBA64"
			+ "ECFB8504" + "58DBEF0A" + "8AEA7157" + "5D060C7D" + "B3970F85"
			+ "A6E1E4C7" + "ABF5AE8C" + "DB0933D7" + "1E8C94E0" + "4A25619D"
			+ "CEE3D226" + "1AD2EE6B" + "F12FFA06" + "D98A0864" + "D8760273"
			+ "3EC86A64" + "521F2B18" + "177B200C" + "BBE11757" + "7A615D6C"
			+ "770988C0" + "BAD946E2" + "08E24FA0" + "74E5AB31" + "43DB5BFC"
			+ "E0FD108E" + "4B82D120" + "A93AD2CA" + "FFFFFFFF" + "FFFFFFFF",
			16);

	public static final BigInteger group16 = new BigInteger("FFFFFFFF"
			+ "FFFFFFFF" + "C90FDAA2" + "2168C234" + "C4C6628B" + "80DC1CD1"
			+ "29024E08" + "8A67CC74" + "020BBEA6" + "3B139B22" + "514A0879"
			+ "8E3404DD" + "EF9519B3" + "CD3A431B" + "302B0A6D" + "F25F1437"
			+ "4FE1356D" + "6D51C245" + "E485B576" + "625E7EC6" + "F44C42E9"
			+ "A637ED6B" + "0BFF5CB6" + "F406B7ED" + "EE386BFB" + "5A899FA5"
			+ "AE9F2411" + "7C4B1FE6" + "49286651" + "ECE45B3D" + "C2007CB8"
			+ "A163BF05" + "98DA4836" + "1C55D39A" + "69163FA8" + "FD24CF5F"
			+ "83655D23" + "DCA3AD96" + "1C62F356" + "208552BB" + "9ED52907"
			+ "7096966D" + "670C354E" + "4ABC9804" + "F1746C08" + "CA18217C"
			+ "32905E46" + "2E36CE3B" + "E39E772C" + "180E8603" + "9B2783A2"
			+ "EC07A28F" + "B5C55DF0" + "6F4C52C9" + "DE2BCBF6" + "95581718"
			+ "3995497C" + "EA956AE5" + "15D22618" + "98FA0510" + "15728E5A"
			+ "8AAAC42D" + "AD33170D" + "04507A33" + "A85521AB" + "DF1CBA64"
			+ "ECFB8504" + "58DBEF0A" + "8AEA7157" + "5D060C7D" + "B3970F85"
			+ "A6E1E4C7" + "ABF5AE8C" + "DB0933D7" + "1E8C94E0" + "4A25619D"
			+ "CEE3D226" + "1AD2EE6B" + "F12FFA06" + "D98A0864" + "D8760273"
			+ "3EC86A64" + "521F2B18" + "177B200C" + "BBE11757" + "7A615D6C"
			+ "770988C0" + "BAD946E2" + "08E24FA0" + "74E5AB31" + "43DB5BFC"
			+ "E0FD108E" + "4B82D120" + "A9210801" + "1A723C12" + "A787E6D7"
			+ "88719A10" + "BDBA5B26" + "99C32718" + "6AF4E23C" + "1A946834"
			+ "B6150BDA" + "2583E9CA" + "2AD44CE8" + "DBBBC2DB" + "04DE8EF9"
			+ "2E8EFC14" + "1FBECAA6" + "287C5947" + "4E6BC05D" + "99B2964F"
			+ "A090C3A2" + "233BA186" + "515BE7ED" + "1F612970" + "CEE2D7AF"
			+ "B81BDD76" + "2170481C" + "D0069127" + "D5B05AA9" + "93B4EA98"
			+ "8D8FDDC1" + "86FFB7DC" + "90A6C08F" + "4DF435C9" + "34063199",
			16);

	public static final BigInteger group17 = new BigInteger("FFFFFFFF"
			+ "FFFFFFFF" + "C90FDAA2" + "2168C234" + "C4C6628B" + "80DC1CD1"
			+ "29024E08" + "8A67CC74" + "020BBEA6" + "3B139B22" + "514A0879"
			+ "8E3404DD" + "EF9519B3" + "CD3A431B" + "302B0A6D" + "F25F1437"
			+ "4FE1356D" + "6D51C245" + "E485B576" + "625E7EC6" + "F44C42E9"
			+ "A637ED6B" + "0BFF5CB6" + "F406B7ED" + "EE386BFB" + "5A899FA5"
			+ "AE9F2411" + "7C4B1FE6" + "49286651" + "ECE45B3D" + "C2007CB8"
			+ "A163BF05" + "98DA4836" + "1C55D39A" + "69163FA8" + "FD24CF5F"
			+ "83655D23" + "DCA3AD96" + "1C62F356" + "208552BB" + "9ED52907"
			+ "7096966D" + "670C354E" + "4ABC9804" + "F1746C08" + "CA18217C"
			+ "32905E46" + "2E36CE3B" + "E39E772C" + "180E8603" + "9B2783A2"
			+ "EC07A28F" + "B5C55DF0" + "6F4C52C9" + "DE2BCBF6" + "95581718"
			+ "3995497C" + "EA956AE5" + "15D22618" + "98FA0510" + "15728E5A"
			+ "8AAAC42D" + "AD33170D" + "04507A33" + "A85521AB" + "DF1CBA64"
			+ "ECFB8504" + "58DBEF0A" + "8AEA7157" + "5D060C7D" + "B3970F85"
			+ "A6E1E4C7" + "ABF5AE8C" + "DB0933D7" + "1E8C94E0" + "4A25619D"
			+ "CEE3D226" + "1AD2EE6B" + "F12FFA06" + "D98A0864" + "D8760273"
			+ "3EC86A64" + "521F2B18" + "177B200C" + "BBE11757" + "7A615D6C"
			+ "770988C0" + "BAD946E2" + "08E24FA0" + "74E5AB31" + "43DB5BFC"
			+ "E0FD108E" + "4B82D120" + "A9210801" + "1A723C12" + "A787E6D7"
			+ "88719A10" + "BDBA5B26" + "99C32718" + "6AF4E23C" + "1A946834"
			+ "B6150BDA" + "2583E9CA" + "2AD44CE8" + "DBBBC2DB" + "04DE8EF9"
			+ "2E8EFC14" + "1FBECAA6" + "287C5947" + "4E6BC05D" + "99B2964F"
			+ "A090C3A2" + "233BA186" + "515BE7ED" + "1F612970" + "CEE2D7AF"
			+ "B81BDD76" + "2170481C" + "D0069127" + "D5B05AA9" + "93B4EA98"
			+ "8D8FDDC1" + "86FFB7DC" + "90A6C08F" + "4DF435C9" + "34028492"
			+ "36C3FAB4" + "D27C7026" + "C1D4DCB2" + "602646DE" + "C9751E76"
			+ "3DBA37BD" + "F8FF9406" + "AD9E530E" + "E5DB382F" + "413001AE"
			+ "B06A53ED" + "9027D831" + "179727B0" + "865A8918" + "DA3EDBEB"
			+ "CF9B14ED" + "44CE6CBA" + "CED4BB1B" + "DB7F1447" + "E6CC254B"
			+ "33205151" + "2BD7AF42" + "6FB8F401" + "378CD2BF" + "5983CA01"
			+ "C64B92EC" + "F032EA15" + "D1721D03" + "F482D7CE" + "6E74FEF6"
			+ "D55E702F" + "46980C82" + "B5A84031" + "900B1C9E" + "59E7C97F"
			+ "BEC7E8F3" + "23A97A7E" + "36CC88BE" + "0F1D45B7" + "FF585AC5"
			+ "4BD407B2" + "2B4154AA" + "CC8F6D7E" + "BF48E1D8" + "14CC5ED2"
			+ "0F8037E0" + "A79715EE" + "F29BE328" + "06A1D58B" + "B7C5DA76"
			+ "F550AA3D" + "8A1FBFF0" + "EB19CCB1" + "A313D55C" + "DA56C9EC"
			+ "2EF29632" + "387FE8D7" + "6E3C0468" + "043E8F66" + "3F4860EE"
			+ "12BF2D5B" + "0B7474D6" + "E694F91E" + "6DCC4024" + "FFFFFFFF"
			+ "FFFFFFFF", 16);

	public static final BigInteger group18 = new BigInteger("FFFFFFFF"
			+ "FFFFFFFF" + "C90FDAA2" + "2168C234" + "C4C6628B" + "80DC1CD1"
			+ "29024E08" + "8A67CC74" + "020BBEA6" + "3B139B22" + "514A0879"
			+ "8E3404DD" + "EF9519B3" + "CD3A431B" + "302B0A6D" + "F25F1437"
			+ "4FE1356D" + "6D51C245" + "E485B576" + "625E7EC6" + "F44C42E9"
			+ "A637ED6B" + "0BFF5CB6" + "F406B7ED" + "EE386BFB" + "5A899FA5"
			+ "AE9F2411" + "7C4B1FE6" + "49286651" + "ECE45B3D" + "C2007CB8"
			+ "A163BF05" + "98DA4836" + "1C55D39A" + "69163FA8" + "FD24CF5F"
			+ "83655D23" + "DCA3AD96" + "1C62F356" + "208552BB" + "9ED52907"
			+ "7096966D" + "670C354E" + "4ABC9804" + "F1746C08" + "CA18217C"
			+ "32905E46" + "2E36CE3B" + "E39E772C" + "180E8603" + "9B2783A2"
			+ "EC07A28F" + "B5C55DF0" + "6F4C52C9" + "DE2BCBF6" + "95581718"
			+ "3995497C" + "EA956AE5" + "15D22618" + "98FA0510" + "15728E5A"
			+ "8AAAC42D" + "AD33170D" + "04507A33" + "A85521AB" + "DF1CBA64"
			+ "ECFB8504" + "58DBEF0A" + "8AEA7157" + "5D060C7D" + "B3970F85"
			+ "A6E1E4C7" + "ABF5AE8C" + "DB0933D7" + "1E8C94E0" + "4A25619D"
			+ "CEE3D226" + "1AD2EE6B" + "F12FFA06" + "D98A0864" + "D8760273"
			+ "3EC86A64" + "521F2B18" + "177B200C" + "BBE11757" + "7A615D6C"
			+ "770988C0" + "BAD946E2" + "08E24FA0" + "74E5AB31" + "43DB5BFC"
			+ "E0FD108E" + "4B82D120" + "A9210801" + "1A723C12" + "A787E6D7"
			+ "88719A10" + "BDBA5B26" + "99C32718" + "6AF4E23C" + "1A946834"
			+ "B6150BDA" + "2583E9CA" + "2AD44CE8" + "DBBBC2DB" + "04DE8EF9"
			+ "2E8EFC14" + "1FBECAA6" + "287C5947" + "4E6BC05D" + "99B2964F"
			+ "A090C3A2" + "233BA186" + "515BE7ED" + "1F612970" + "CEE2D7AF"
			+ "B81BDD76" + "2170481C" + "D0069127" + "D5B05AA9" + "93B4EA98"
			+ "8D8FDDC1" + "86FFB7DC" + "90A6C08F" + "4DF435C9" + "34028492"
			+ "36C3FAB4" + "D27C7026" + "C1D4DCB2" + "602646DE" + "C9751E76"
			+ "3DBA37BD" + "F8FF9406" + "AD9E530E" + "E5DB382F" + "413001AE"
			+ "B06A53ED" + "9027D831" + "179727B0" + "865A8918" + "DA3EDBEB"
			+ "CF9B14ED" + "44CE6CBA" + "CED4BB1B" + "DB7F1447" + "E6CC254B"
			+ "33205151" + "2BD7AF42" + "6FB8F401" + "378CD2BF" + "5983CA01"
			+ "C64B92EC" + "F032EA15" + "D1721D03" + "F482D7CE" + "6E74FEF6"
			+ "D55E702F" + "46980C82" + "B5A84031" + "900B1C9E" + "59E7C97F"
			+ "BEC7E8F3" + "23A97A7E" + "36CC88BE" + "0F1D45B7" + "FF585AC5"
			+ "4BD407B2" + "2B4154AA" + "CC8F6D7E" + "BF48E1D8" + "14CC5ED2"
			+ "0F8037E0" + "A79715EE" + "F29BE328" + "06A1D58B" + "B7C5DA76"
			+ "F550AA3D" + "8A1FBFF0" + "EB19CCB1" + "A313D55C" + "DA56C9EC"
			+ "2EF29632" + "387FE8D7" + "6E3C0468" + "043E8F66" + "3F4860EE"
			+ "12BF2D5B" + "0B7474D6" + "E694F91E" + "6DBE1159" + "74A3926F"
			+ "12FEE5E4" + "38777CB6" + "A932DF8C" + "D8BEC4D0" + "73B931BA"
			+ "3BC832B6" + "8D9DD300" + "741FA7BF" + "8AFC47ED" + "2576F693"
			+ "6BA42466" + "3AAB639C" + "5AE4F568" + "3423B474" + "2BF1C978"
			+ "238F16CB" + "E39D652D" + "E3FDB8BE" + "FC848AD9" + "22222E04"
			+ "A4037C07" + "13EB57A8" + "1A23F0C7" + "3473FC64" + "6CEA306B"
			+ "4BCBC886" + "2F8385DD" + "FA9D4B7F" + "A2C087E8" + "79683303"
			+ "ED5BDD3A" + "062B3CF5" + "B3A278A6" + "6D2A13F8" + "3F44F82D"
			+ "DF310EE0" + "74AB6A36" + "4597E899" + "A0255DC1" + "64F31CC5"
			+ "0846851D" + "F9AB4819" + "5DED7EA1" + "B1D510BD" + "7EE74D73"
			+ "FAF36BC3" + "1ECFA268" + "359046F4" + "EB879F92" + "4009438B"
			+ "481C6CD7" + "889A002E" + "D5EE382B" + "C9190DA6" + "FC026E47"
			+ "9558E447" + "5677E9AA" + "9E3050E2" + "765694DF" + "C81F56E8"
			+ "80B96E71" + "60C980DD" + "98EDD3DF" + "FFFFFFFF" + "FFFFFFFF",
			16);

	static List safePrimes = new ArrayList();

	static {
		safePrimes.add(group1);
		safePrimes.add(group5);
		safePrimes.add(group14);
		safePrimes.add(group15);
		safePrimes.add(group16);
		safePrimes.add(group17);
		safePrimes.add(group18);
	}

	/**
	 * get the biggest safe prime from the list that is <= maximumSize
	 * 
	 * @param maximumSize
	 * @return BigInteger
	 */
	public static BigInteger getSafePrime(UnsignedInteger32 maximumSize) {

		BigInteger prime = group1;
		for(Iterator it = safePrimes.iterator(); it.hasNext(); ) {
			BigInteger p = it.next();
			int len = p.bitLength();
			if(len > maximumSize.intValue()) {
				break;
			}
			prime = p;
		}
		
		return prime;
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy