1b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallampackage org.bouncycastle.crypto.params; 2b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 3b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallampublic class DESedeParameters 4b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam extends DESParameters 5b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam{ 6b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam /* 7b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * DES-EDE Key length in bytes. 8b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam */ 9b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam static public final int DES_EDE_KEY_LENGTH = 24; 10b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 11b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public DESedeParameters( 12b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam byte[] key) 13b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 14b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam super(key); 15b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 16c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom if (isWeakKey(key, 0, key.length)) 17b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 18b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam throw new IllegalArgumentException("attempt to create weak DESede key"); 19b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 20b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 21b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 22b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam /** 23b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * return true if the passed in key is a DES-EDE weak key. 24b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * 25b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * @param key bytes making up the key 26b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * @param offset offset into the byte array the key starts at 27b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * @param length number of bytes making up the key 28b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam */ 29b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public static boolean isWeakKey( 30b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam byte[] key, 31b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam int offset, 32b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam int length) 33b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 34b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam for (int i = offset; i < length; i += DES_KEY_LENGTH) 35b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 36b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam if (DESParameters.isWeakKey(key, i)) 37b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 38b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return true; 39b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 40b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 41b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 42b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return false; 43b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 44b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 45b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam /** 46b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * return true if the passed in key is a DES-EDE weak key. 47b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * 48b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * @param key bytes making up the key 49b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * @param offset offset into the byte array the key starts at 50b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam */ 51b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public static boolean isWeakKey( 52b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam byte[] key, 53b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam int offset) 54b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 55b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return isWeakKey(key, offset, key.length - offset); 56b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 57b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam} 58