| package org.bouncycastle.jce.provider; |
| |
| import java.security.AlgorithmParameterGeneratorSpi; |
| import java.security.AlgorithmParameters; |
| import java.security.InvalidAlgorithmParameterException; |
| import java.security.InvalidParameterException; |
| import java.security.SecureRandom; |
| import java.security.spec.AlgorithmParameterSpec; |
| import java.security.spec.DSAParameterSpec; |
| |
| import javax.crypto.spec.DHGenParameterSpec; |
| import javax.crypto.spec.DHParameterSpec; |
| import javax.crypto.spec.IvParameterSpec; |
| // BEGIN android-removed |
| // import javax.crypto.spec.RC2ParameterSpec; |
| // END android-removed |
| |
| import org.bouncycastle.crypto.generators.DHParametersGenerator; |
| import org.bouncycastle.crypto.generators.DSAParametersGenerator; |
| // BEGIN android-removed |
| // import org.bouncycastle.crypto.generators.ElGamalParametersGenerator; |
| // import org.bouncycastle.crypto.generators.GOST3410ParametersGenerator; |
| // END android-removed |
| import org.bouncycastle.crypto.params.DHParameters; |
| import org.bouncycastle.crypto.params.DSAParameters; |
| // BEGIN android-removed |
| // import org.bouncycastle.crypto.params.ElGamalParameters; |
| // import org.bouncycastle.crypto.params.GOST3410Parameters; |
| // import org.bouncycastle.jce.spec.GOST3410ParameterSpec; |
| // import org.bouncycastle.jce.spec.GOST3410PublicKeyParameterSetSpec; |
| // END android-removed |
| |
| public abstract class JDKAlgorithmParameterGenerator |
| extends AlgorithmParameterGeneratorSpi |
| { |
| protected SecureRandom random; |
| protected int strength = 1024; |
| |
| protected void engineInit( |
| int strength, |
| SecureRandom random) |
| { |
| this.strength = strength; |
| this.random = random; |
| } |
| |
| public static class DH |
| extends JDKAlgorithmParameterGenerator |
| { |
| private int l = 0; |
| |
| protected void engineInit( |
| AlgorithmParameterSpec genParamSpec, |
| SecureRandom random) |
| throws InvalidAlgorithmParameterException |
| { |
| if (!(genParamSpec instanceof DHGenParameterSpec)) |
| { |
| throw new InvalidAlgorithmParameterException("DH parameter generator requires a DHGenParameterSpec for initialisation"); |
| } |
| DHGenParameterSpec spec = (DHGenParameterSpec)genParamSpec; |
| |
| this.strength = spec.getPrimeSize(); |
| this.l = spec.getExponentSize(); |
| this.random = random; |
| } |
| |
| protected AlgorithmParameters engineGenerateParameters() |
| { |
| DHParametersGenerator pGen = new DHParametersGenerator(); |
| |
| if (random != null) |
| { |
| pGen.init(strength, 20, random); |
| } |
| else |
| { |
| pGen.init(strength, 20, new SecureRandom()); |
| } |
| |
| DHParameters p = pGen.generateParameters(); |
| |
| AlgorithmParameters params; |
| |
| try |
| { |
| params = AlgorithmParameters.getInstance("DH", BouncyCastleProvider.PROVIDER_NAME); |
| params.init(new DHParameterSpec(p.getP(), p.getG(), l)); |
| } |
| catch (Exception e) |
| { |
| throw new RuntimeException(e.getMessage()); |
| } |
| |
| return params; |
| } |
| } |
| |
| public static class DSA |
| extends JDKAlgorithmParameterGenerator |
| { |
| protected void engineInit( |
| int strength, |
| SecureRandom random) |
| { |
| if (strength < 512 || strength > 1024 || strength % 64 != 0) |
| { |
| throw new InvalidParameterException("strength must be from 512 - 1024 and a multiple of 64"); |
| } |
| |
| this.strength = strength; |
| this.random = random; |
| } |
| |
| protected void engineInit( |
| AlgorithmParameterSpec genParamSpec, |
| SecureRandom random) |
| throws InvalidAlgorithmParameterException |
| { |
| throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for DSA parameter generation."); |
| } |
| |
| protected AlgorithmParameters engineGenerateParameters() |
| { |
| DSAParametersGenerator pGen = new DSAParametersGenerator(); |
| |
| if (random != null) |
| { |
| pGen.init(strength, 20, random); |
| } |
| else |
| { |
| pGen.init(strength, 20, new SecureRandom()); |
| } |
| |
| DSAParameters p = pGen.generateParameters(); |
| |
| AlgorithmParameters params; |
| |
| try |
| { |
| params = AlgorithmParameters.getInstance("DSA", BouncyCastleProvider.PROVIDER_NAME); |
| params.init(new DSAParameterSpec(p.getP(), p.getQ(), p.getG())); |
| } |
| catch (Exception e) |
| { |
| throw new RuntimeException(e.getMessage()); |
| } |
| |
| return params; |
| } |
| } |
| |
| // BEGIN android-removed |
| // public static class GOST3410 |
| // extends JDKAlgorithmParameterGenerator |
| // { |
| // protected void engineInit( |
| // AlgorithmParameterSpec genParamSpec, |
| // SecureRandom random) |
| // throws InvalidAlgorithmParameterException |
| // { |
| // throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for GOST3410 parameter generation."); |
| // } |
| // |
| // protected AlgorithmParameters engineGenerateParameters() |
| // { |
| // GOST3410ParametersGenerator pGen = new GOST3410ParametersGenerator(); |
| // |
| // if (random != null) |
| // { |
| // pGen.init(strength, 2, random); |
| // } |
| // else |
| // { |
| // pGen.init(strength, 2, new SecureRandom()); |
| // } |
| // |
| // GOST3410Parameters p = pGen.generateParameters(); |
| // |
| // AlgorithmParameters params; |
| // |
| // try |
| // { |
| // params = AlgorithmParameters.getInstance("GOST3410", BouncyCastleProvider.PROVIDER_NAME); |
| // params.init(new GOST3410ParameterSpec(new GOST3410PublicKeyParameterSetSpec(p.getP(), p.getQ(), p.getA()))); |
| // } |
| // catch (Exception e) |
| // { |
| // throw new RuntimeException(e.getMessage()); |
| // } |
| // |
| // return params; |
| // } |
| // } |
| // |
| // public static class ElGamal |
| // extends JDKAlgorithmParameterGenerator |
| // { |
| // private int l = 0; |
| // |
| // protected void engineInit( |
| // AlgorithmParameterSpec genParamSpec, |
| // SecureRandom random) |
| // throws InvalidAlgorithmParameterException |
| // { |
| // if (!(genParamSpec instanceof DHGenParameterSpec)) |
| // { |
| // throw new InvalidAlgorithmParameterException("DH parameter generator requires a DHGenParameterSpec for initialisation"); |
| // } |
| // DHGenParameterSpec spec = (DHGenParameterSpec)genParamSpec; |
| // |
| // this.strength = spec.getPrimeSize(); |
| // this.l = spec.getExponentSize(); |
| // this.random = random; |
| // } |
| // |
| // protected AlgorithmParameters engineGenerateParameters() |
| // { |
| // ElGamalParametersGenerator pGen = new ElGamalParametersGenerator(); |
| // |
| // if (random != null) |
| // { |
| // pGen.init(strength, 20, random); |
| // } |
| // else |
| // { |
| // pGen.init(strength, 20, new SecureRandom()); |
| // } |
| // |
| // ElGamalParameters p = pGen.generateParameters(); |
| // |
| // AlgorithmParameters params; |
| // |
| // try |
| // { |
| // params = AlgorithmParameters.getInstance("ElGamal", BouncyCastleProvider.PROVIDER_NAME); |
| // params.init(new DHParameterSpec(p.getP(), p.getG(), l)); |
| // } |
| // catch (Exception e) |
| // { |
| // throw new RuntimeException(e.getMessage()); |
| // } |
| // |
| // return params; |
| // } |
| // } |
| // |
| // public static class DES |
| // extends JDKAlgorithmParameterGenerator |
| // { |
| // protected void engineInit( |
| // AlgorithmParameterSpec genParamSpec, |
| // SecureRandom random) |
| // throws InvalidAlgorithmParameterException |
| // { |
| // throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for DES parameter generation."); |
| // } |
| // |
| // protected AlgorithmParameters engineGenerateParameters() |
| // { |
| // byte[] iv = new byte[8]; |
| // |
| // if (random == null) |
| // { |
| // random = new SecureRandom(); |
| // } |
| // |
| // random.nextBytes(iv); |
| // |
| // AlgorithmParameters params; |
| // |
| // try |
| // { |
| // params = AlgorithmParameters.getInstance("DES", BouncyCastleProvider.PROVIDER_NAME); |
| // params.init(new IvParameterSpec(iv)); |
| // } |
| // catch (Exception e) |
| // { |
| // throw new RuntimeException(e.getMessage()); |
| // } |
| // |
| // return params; |
| // } |
| // } |
| // |
| // public static class RC2 |
| // extends JDKAlgorithmParameterGenerator |
| // { |
| // RC2ParameterSpec spec = null; |
| // |
| // protected void engineInit( |
| // AlgorithmParameterSpec genParamSpec, |
| // SecureRandom random) |
| // throws InvalidAlgorithmParameterException |
| // { |
| // if (genParamSpec instanceof RC2ParameterSpec) |
| // { |
| // spec = (RC2ParameterSpec)genParamSpec; |
| // return; |
| // } |
| // |
| // throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for RC2 parameter generation."); |
| // } |
| // |
| // protected AlgorithmParameters engineGenerateParameters() |
| // { |
| // AlgorithmParameters params; |
| // |
| // if (spec == null) |
| // { |
| // byte[] iv = new byte[8]; |
| // |
| // if (random == null) |
| // { |
| // random = new SecureRandom(); |
| // } |
| // |
| // random.nextBytes(iv); |
| // |
| // try |
| // { |
| // params = AlgorithmParameters.getInstance("RC2", BouncyCastleProvider.PROVIDER_NAME); |
| // params.init(new IvParameterSpec(iv)); |
| // } |
| // catch (Exception e) |
| // { |
| // throw new RuntimeException(e.getMessage()); |
| // } |
| // } |
| // else |
| // { |
| // try |
| // { |
| // params = AlgorithmParameters.getInstance("RC2", BouncyCastleProvider.PROVIDER_NAME); |
| // params.init(spec); |
| // } |
| // catch (Exception e) |
| // { |
| // throw new RuntimeException(e.getMessage()); |
| // } |
| // } |
| // |
| // return params; |
| // } |
| // } |
| // END android-removed |
| } |