jdkalgorithmparametergenerator.java

来自「kmlnjlkj nlkjlkjkljl okopokipoipo oipipi」· Java 代码 · 共 340 行

JAVA
340
字号
package org.bouncycastle.jce.provider;import org.bouncycastle.crypto.generators.DHParametersGenerator;import org.bouncycastle.crypto.generators.DSAParametersGenerator;import org.bouncycastle.crypto.generators.ElGamalParametersGenerator;import org.bouncycastle.crypto.generators.GOST3410ParametersGenerator;import org.bouncycastle.crypto.params.DHParameters;import org.bouncycastle.crypto.params.DSAParameters;import org.bouncycastle.crypto.params.ElGamalParameters;import org.bouncycastle.crypto.params.GOST3410Parameters;import org.bouncycastle.jce.spec.GOST3410ParameterSpec;import org.bouncycastle.jce.spec.GOST3410PublicKeyParameterSetSpec;import javax.crypto.spec.DHGenParameterSpec;import javax.crypto.spec.DHParameterSpec;import javax.crypto.spec.IvParameterSpec;import javax.crypto.spec.RC2ParameterSpec;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;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", "BC");                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", "BC");                params.init(new DSAParameterSpec(p.getP(), p.getQ(), p.getG()));            }            catch (Exception e)            {                throw new RuntimeException(e.getMessage());            }            return params;        }    }    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", "BC");                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", "BC");                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", "BC");                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", "BC");                    params.init(new IvParameterSpec(iv));                }                catch (Exception e)                {                    throw new RuntimeException(e.getMessage());                }            }            else            {                try                {                    params = AlgorithmParameters.getInstance("RC2", "BC");                    params.init(spec);                }                catch (Exception e)                {                    throw new RuntimeException(e.getMessage());                }            }            return params;        }    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?