1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage org.bouncycastle.jce.provider; 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.AlgorithmParameterGeneratorSpi; 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.AlgorithmParameters; 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.InvalidAlgorithmParameterException; 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.SecureRandom; 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.spec.AlgorithmParameterSpec; 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.spec.DSAParameterSpec; 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.crypto.spec.DHGenParameterSpec; 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.crypto.spec.DHParameterSpec; 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.crypto.spec.IvParameterSpec; 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.crypto.spec.RC2ParameterSpec; 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.bouncycastle.crypto.generators.DHParametersGenerator; 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.bouncycastle.crypto.generators.DSAParametersGenerator; 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// BEGIN android-removed 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// import org.bouncycastle.crypto.generators.ElGamalParametersGenerator; 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// import org.bouncycastle.crypto.generators.GOST3410ParametersGenerator; 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// END android-removed 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.bouncycastle.crypto.params.DHParameters; 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.bouncycastle.crypto.params.DSAParameters; 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// BEGIN android-removed 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// import org.bouncycastle.crypto.params.ElGamalParameters; 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// import org.bouncycastle.crypto.params.GOST3410Parameters; 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// import org.bouncycastle.jce.spec.GOST3410ParameterSpec; 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// import org.bouncycastle.jce.spec.GOST3410PublicKeyParameterSetSpec; 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// END android-removed 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic abstract class JDKAlgorithmParameterGenerator 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project extends AlgorithmParameterGeneratorSpi 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project{ 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected SecureRandom random; 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected int strength = 1024; 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected void engineInit( 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int strength, 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SecureRandom random) 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.strength = strength; 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.random = random; 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static class DH 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project extends JDKAlgorithmParameterGenerator 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private int l = 0; 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected void engineInit( 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AlgorithmParameterSpec genParamSpec, 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SecureRandom random) 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws InvalidAlgorithmParameterException 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (!(genParamSpec instanceof DHGenParameterSpec)) 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new InvalidAlgorithmParameterException("DH parameter generator requires a DHGenParameterSpec for initialisation"); 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project DHGenParameterSpec spec = (DHGenParameterSpec)genParamSpec; 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.strength = spec.getPrimeSize(); 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.l = spec.getExponentSize(); 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.random = random; 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected AlgorithmParameters engineGenerateParameters() 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project DHParametersGenerator pGen = new DHParametersGenerator(); 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (random != null) 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pGen.init(strength, 20, random); 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pGen.init(strength, 20, new SecureRandom()); 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project DHParameters p = pGen.generateParameters(); 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AlgorithmParameters params; 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project params = AlgorithmParameters.getInstance("DH", "BC"); 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project params.init(new DHParameterSpec(p.getP(), p.getG(), l)); 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project catch (Exception e) 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new RuntimeException(e.getMessage()); 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return params; 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static class DSA 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project extends JDKAlgorithmParameterGenerator 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected void engineInit( 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AlgorithmParameterSpec genParamSpec, 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SecureRandom random) 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws InvalidAlgorithmParameterException 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for DSA parameter generation."); 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected AlgorithmParameters engineGenerateParameters() 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project DSAParametersGenerator pGen = new DSAParametersGenerator(); 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (random != null) 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pGen.init(strength, 20, random); 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pGen.init(strength, 20, new SecureRandom()); 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project DSAParameters p = pGen.generateParameters(); 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AlgorithmParameters params; 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project params = AlgorithmParameters.getInstance("DSA", "BC"); 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project params.init(new DSAParameterSpec(p.getP(), p.getQ(), p.getG())); 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project catch (Exception e) 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new RuntimeException(e.getMessage()); 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return params; 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// BEGIN android-removed 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// public static class GOST3410 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// extends JDKAlgorithmParameterGenerator 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// { 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// protected void engineInit( 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// AlgorithmParameterSpec genParamSpec, 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// SecureRandom random) 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// throws InvalidAlgorithmParameterException 146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// { 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for GOST3410 parameter generation."); 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// } 149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// 150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// protected AlgorithmParameters engineGenerateParameters() 151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// { 152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// GOST3410ParametersGenerator pGen = new GOST3410ParametersGenerator(); 153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// 154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// if (random != null) 155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// { 156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// pGen.init(strength, 2, random); 157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// } 158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// else 159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// { 160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// pGen.init(strength, 2, new SecureRandom()); 161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// } 162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// 163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// GOST3410Parameters p = pGen.generateParameters(); 164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// 165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// AlgorithmParameters params; 166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// 167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// try 168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// { 169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// params = AlgorithmParameters.getInstance("GOST3410", "BC"); 170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// params.init(new GOST3410ParameterSpec(new GOST3410PublicKeyParameterSetSpec(p.getP(), p.getQ(), p.getA()))); 171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// } 172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// catch (Exception e) 173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// { 174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// throw new RuntimeException(e.getMessage()); 175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// } 176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// 177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// return params; 178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// } 179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// } 180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// 181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// public static class ElGamal 182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// extends JDKAlgorithmParameterGenerator 183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// { 184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// private int l = 0; 185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// 186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// protected void engineInit( 187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// AlgorithmParameterSpec genParamSpec, 188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// SecureRandom random) 189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// throws InvalidAlgorithmParameterException 190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// { 191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// if (!(genParamSpec instanceof DHGenParameterSpec)) 192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// { 193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// throw new InvalidAlgorithmParameterException("DH parameter generator requires a DHGenParameterSpec for initialisation"); 194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// } 195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// DHGenParameterSpec spec = (DHGenParameterSpec)genParamSpec; 196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// 197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// this.strength = spec.getPrimeSize(); 198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// this.l = spec.getExponentSize(); 199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// this.random = random; 200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// } 201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// 202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// protected AlgorithmParameters engineGenerateParameters() 203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// { 204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// ElGamalParametersGenerator pGen = new ElGamalParametersGenerator(); 205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// 206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// if (random != null) 207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// { 208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// pGen.init(strength, 20, random); 209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// } 210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// else 211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// { 212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// pGen.init(strength, 20, new SecureRandom()); 213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// } 214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// 215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// ElGamalParameters p = pGen.generateParameters(); 216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// 217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// AlgorithmParameters params; 218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// 219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// try 220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// { 221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// params = AlgorithmParameters.getInstance("ElGamal", "BC"); 222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// params.init(new DHParameterSpec(p.getP(), p.getG(), l)); 223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// } 224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// catch (Exception e) 225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// { 226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// throw new RuntimeException(e.getMessage()); 227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// } 228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// 229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// return params; 230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// } 231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// } 232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// END android-removed 233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static class DES 235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project extends JDKAlgorithmParameterGenerator 236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected void engineInit( 238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AlgorithmParameterSpec genParamSpec, 239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SecureRandom random) 240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws InvalidAlgorithmParameterException 241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for DES parameter generation."); 243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected AlgorithmParameters engineGenerateParameters() 246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] iv = new byte[8]; 248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (random == null) 250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project random = new SecureRandom(); 252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project random.nextBytes(iv); 255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AlgorithmParameters params; 257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try 259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project params = AlgorithmParameters.getInstance("DES", "BC"); 261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project params.init(new IvParameterSpec(iv)); 262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project catch (Exception e) 264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new RuntimeException(e.getMessage()); 266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return params; 269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static class RC2 273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project extends JDKAlgorithmParameterGenerator 274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project RC2ParameterSpec spec = null; 276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected void engineInit( 278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AlgorithmParameterSpec genParamSpec, 279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SecureRandom random) 280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws InvalidAlgorithmParameterException 281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (genParamSpec instanceof RC2ParameterSpec) 283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project spec = (RC2ParameterSpec)genParamSpec; 285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return; 286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for RC2 parameter generation."); 289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected AlgorithmParameters engineGenerateParameters() 292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AlgorithmParameters params; 294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (spec == null) 296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] iv = new byte[8]; 298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (random == null) 300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project random = new SecureRandom(); 302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project random.nextBytes(iv); 305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try 307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project params = AlgorithmParameters.getInstance("RC2", "BC"); 309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project params.init(new IvParameterSpec(iv)); 310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project catch (Exception e) 312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new RuntimeException(e.getMessage()); 314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else 317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try 319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project params = AlgorithmParameters.getInstance("RC2", "BC"); 321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project params.init(spec); 322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project catch (Exception e) 324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new RuntimeException(e.getMessage()); 326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return params; 330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static class AES 334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project extends JDKAlgorithmParameterGenerator 335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected void engineInit( 337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AlgorithmParameterSpec genParamSpec, 338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SecureRandom random) 339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws InvalidAlgorithmParameterException 340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for AES parameter generation."); 342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected AlgorithmParameters engineGenerateParameters() 345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] iv = new byte[16]; 347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (random == null) 349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project random = new SecureRandom(); 351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project random.nextBytes(iv); 354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AlgorithmParameters params; 356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try 358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project params = AlgorithmParameters.getInstance("AES", "BC"); 360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project params.init(new IvParameterSpec(iv)); 361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project catch (Exception e) 363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new RuntimeException(e.getMessage()); 365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return params; 368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static class IDEA 372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project extends JDKAlgorithmParameterGenerator 373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected void engineInit( 375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AlgorithmParameterSpec genParamSpec, 376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SecureRandom random) 377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws InvalidAlgorithmParameterException 378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for IDEA parameter generation."); 380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected AlgorithmParameters engineGenerateParameters() 383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] iv = new byte[8]; 385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (random == null) 387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project random = new SecureRandom(); 389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project random.nextBytes(iv); 392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AlgorithmParameters params; 394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try 396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project params = AlgorithmParameters.getInstance("IDEA", "BC"); 398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project params.init(new IvParameterSpec(iv)); 399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project catch (Exception e) 401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new RuntimeException(e.getMessage()); 403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return params; 406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static class CAST5 410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project extends JDKAlgorithmParameterGenerator 411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected void engineInit( 413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AlgorithmParameterSpec genParamSpec, 414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SecureRandom random) 415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws InvalidAlgorithmParameterException 416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for CAST5 parameter generation."); 418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected AlgorithmParameters engineGenerateParameters() 421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] iv = new byte[8]; 423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (random == null) 425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project random = new SecureRandom(); 427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project random.nextBytes(iv); 430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AlgorithmParameters params; 432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try 434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project params = AlgorithmParameters.getInstance("CAST5", "BC"); 436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project params.init(new IvParameterSpec(iv)); 437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project catch (Exception e) 439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new RuntimeException(e.getMessage()); 441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return params; 444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 447