コード例 #1
0
ファイル: FipsDsa.cs プロジェクト: NDWX/BouncyCastle.FIPS
            /// <summary>
            /// Generate a new set of DSA domain parameters.
            /// </summary>
            /// <returns>A new set of DSADomainParameters</returns>
            public DsaDomainParameters GenerateDomainParameters()
            {
                if (parameters.P != null)
                {
                    byte[] seed = parameters.GetSeed();
                    if (seed != null && parameters.UsageIndex >= 0)
                    {
                        BigInteger g = DsaParametersGenerator.CalculateGenerator_FIPS186_3_Verifiable(FipsShs.CreateDigest(digestAlgorithm), parameters.P, parameters.Q, seed, parameters.UsageIndex);

                        return(new DsaDomainParameters(parameters.P, parameters.Q, g, new Org.BouncyCastle.Crypto.Asymmetric.DsaValidationParameters(seed, -1, parameters.UsageIndex)));
                    }
                    else
                    {
                        BigInteger g = DsaParametersGenerator.CalculateGenerator_FIPS186_3_Unverifiable(parameters.P, parameters.Q, random);

                        return(new DsaDomainParameters(parameters.P, parameters.Q, g, null));
                    }
                }
                else
                {
                    DsaParametersGenerator pGen = new DsaParametersGenerator(FipsShs.CreateDigest(digestAlgorithm));

                    DsaParameterGenerationParameters dsaGenParameters = new DsaParameterGenerationParameters(
                        parameters.L, parameters.N, parameters.Certainty, random, parameters.UsageIndex);

                    pGen.Init(dsaGenParameters);

                    DsaParameters p = pGen.GenerateParameters();

                    Org.BouncyCastle.Crypto.Internal.Parameters.DsaValidationParameters validationParameters = p.ValidationParameters;

                    return(new DsaDomainParameters(p.P, p.Q, p.G, new Org.BouncyCastle.Crypto.Asymmetric.DsaValidationParameters(validationParameters.GetSeed(), validationParameters.Counter, validationParameters.UsageIndex)));
                }
            }