blob: 6373557f29422803602d7bdf7dfc63b8036d8ab8 [file] [log] [blame]
package org.bouncycastle.jce.provider;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidParameterException;
import java.security.SecureRandom;
import java.security.spec.AlgorithmParameterSpec;
import javax.crypto.KeyGeneratorSpi;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import org.bouncycastle.crypto.CipherKeyGenerator;
import org.bouncycastle.crypto.KeyGenerationParameters;
import org.bouncycastle.crypto.generators.DESKeyGenerator;
public class JCEKeyGenerator
extends KeyGeneratorSpi
{
protected String algName;
protected int keySize;
protected int defaultKeySize;
protected CipherKeyGenerator engine;
protected boolean uninitialised = true;
protected JCEKeyGenerator(
String algName,
int defaultKeySize,
CipherKeyGenerator engine)
{
this.algName = algName;
this.keySize = this.defaultKeySize = defaultKeySize;
this.engine = engine;
}
protected void engineInit(
AlgorithmParameterSpec params,
SecureRandom random)
throws InvalidAlgorithmParameterException
{
throw new InvalidAlgorithmParameterException("Not Implemented");
}
protected void engineInit(
SecureRandom random)
{
if (random != null)
{
engine.init(new KeyGenerationParameters(random, defaultKeySize));
uninitialised = false;
}
}
protected void engineInit(
int keySize,
SecureRandom random)
{
try
{
// BEGIN android-added
if (random == null) {
random = new SecureRandom();
}
// END android-added
engine.init(new KeyGenerationParameters(random, keySize));
uninitialised = false;
}
catch (IllegalArgumentException e)
{
throw new InvalidParameterException(e.getMessage());
}
}
protected SecretKey engineGenerateKey()
{
if (uninitialised)
{
engine.init(new KeyGenerationParameters(new SecureRandom(), defaultKeySize));
uninitialised = false;
}
return new SecretKeySpec(engine.generateKey(), algName);
}
/**
* the generators that are defined directly off us.
*/
/**
* DES
*/
public static class DES
extends JCEKeyGenerator
{
public DES()
{
super("DES", 64, new DESKeyGenerator());
}
}
// BEGIN android-removed
// /**
// * RC2
// */
// public static class RC2
// extends JCEKeyGenerator
// {
// public RC2()
// {
// super("RC2", 128, new CipherKeyGenerator());
// }
// }
//
// /**
// * GOST28147
// */
// public static class GOST28147
// extends JCEKeyGenerator
// {
// public GOST28147()
// {
// super("GOST28147", 256, new CipherKeyGenerator());
// }
// }
// END android-removed
// HMAC Related secret keys..
// BEGIN android-removed
// /**
// * MD2HMAC
// */
// public static class MD2HMAC
// extends JCEKeyGenerator
// {
// public MD2HMAC()
// {
// super("HMACMD2", 128, new CipherKeyGenerator());
// }
// }
//
//
// /**
// * MD4HMAC
// */
// public static class MD4HMAC
// extends JCEKeyGenerator
// {
// public MD4HMAC()
// {
// super("HMACMD4", 128, new CipherKeyGenerator());
// }
// }
// END android-removed
/**
* MD5HMAC
*/
public static class MD5HMAC
extends JCEKeyGenerator
{
public MD5HMAC()
{
super("HMACMD5", 128, new CipherKeyGenerator());
}
}
// /**
// * RIPE128HMAC
// */
// public static class RIPEMD128HMAC
// extends JCEKeyGenerator
// {
// public RIPEMD128HMAC()
// {
// super("HMACRIPEMD128", 128, new CipherKeyGenerator());
// }
// }
// /**
// * RIPE160HMAC
// */
// public static class RIPEMD160HMAC
// extends JCEKeyGenerator
// {
// public RIPEMD160HMAC()
// {
// super("HMACRIPEMD160", 160, new CipherKeyGenerator());
// }
// }
/**
* HMACSHA1
*/
public static class HMACSHA1
extends JCEKeyGenerator
{
public HMACSHA1()
{
super("HMACSHA1", 160, new CipherKeyGenerator());
}
}
// BEGIN android-removed
// /**
// * HMACSHA224
// */
// public static class HMACSHA224
// extends JCEKeyGenerator
// {
// public HMACSHA224()
// {
// super("HMACSHA224", 224, new CipherKeyGenerator());
// }
// }
// END android-removed
/**
* HMACSHA256
*/
public static class HMACSHA256
extends JCEKeyGenerator
{
public HMACSHA256()
{
super("HMACSHA256", 256, new CipherKeyGenerator());
}
}
/**
* HMACSHA384
*/
public static class HMACSHA384
extends JCEKeyGenerator
{
public HMACSHA384()
{
super("HMACSHA384", 384, new CipherKeyGenerator());
}
}
/**
* HMACSHA512
*/
public static class HMACSHA512
extends JCEKeyGenerator
{
public HMACSHA512()
{
super("HMACSHA512", 512, new CipherKeyGenerator());
}
}
// BEGIN android-removed
// /**
// * HMACTIGER
// */
// public static class HMACTIGER
// extends JCEKeyGenerator
// {
// public HMACTIGER()
// {
// super("HMACTIGER", 192, new CipherKeyGenerator());
// }
// }
// END android-removed
}