DESKeyGenerator.java revision e6bf3e8dfa2804891a82075cb469b736321b4827
1package org.bouncycastle.crypto.generators; 2 3import org.bouncycastle.crypto.CipherKeyGenerator; 4import org.bouncycastle.crypto.KeyGenerationParameters; 5import org.bouncycastle.crypto.params.DESParameters; 6 7public class DESKeyGenerator 8 extends CipherKeyGenerator 9{ 10 /** 11 * initialise the key generator - if strength is set to zero 12 * the key generated will be 64 bits in size, otherwise 13 * strength can be 64 or 56 bits (if you don't count the parity bits). 14 * 15 * @param param the parameters to be used for key generation 16 */ 17 public void init( 18 KeyGenerationParameters param) 19 { 20 super.init(param); 21 22 if (strength == 0 || strength == (56 / 8)) 23 { 24 strength = DESParameters.DES_KEY_LENGTH; 25 } 26 else if (strength != DESParameters.DES_KEY_LENGTH) 27 { 28 throw new IllegalArgumentException("DES key must be " 29 + (DESParameters.DES_KEY_LENGTH * 8) 30 + " bits long."); 31 } 32 } 33 34 public byte[] generateKey() 35 { 36 byte[] newKey = new byte[DESParameters.DES_KEY_LENGTH]; 37 38 do 39 { 40 random.nextBytes(newKey); 41 42 DESParameters.setOddParity(newKey); 43 } 44 while (DESParameters.isWeakKey(newKey, 0)); 45 46 return newKey; 47 } 48} 49