Org.BouncyCastle.Crypto.Generators.Gost3410ParametersGenerator.GenerateParameters C# (CSharp) Method

GenerateParameters() public method

public GenerateParameters ( ) : Gost3410Parameters
return Org.BouncyCastle.Crypto.Parameters.Gost3410Parameters
		public Gost3410Parameters GenerateParameters()
		{
			BigInteger [] pq = new BigInteger[2];
			BigInteger    q = null, p = null, a = null;

			int  x0, c;
			long  x0L, cL;

			if (typeproc==1)
			{
				x0 = init_random.NextInt();
				c  = init_random.NextInt();

				switch(size)
				{
					case 512:
						procedure_A(x0, c, pq, 512);
						break;
					case 1024:
						procedure_B(x0, c, pq);
						break;
					default:
						throw new ArgumentException("Ooops! key size 512 or 1024 bit.");
				}
				p = pq[0];  q = pq[1];
				a = procedure_C(p, q);
				//System.out.println("p:"+p.toString(16)+"\n"+"q:"+q.toString(16)+"\n"+"a:"+a.toString(16));
				//System.out.println("p:"+p+"\n"+"q:"+q+"\n"+"a:"+a);
				return new Gost3410Parameters(p, q, a, new Gost3410ValidationParameters(x0, c));
			}
			else
			{
				x0L = init_random.NextLong();
				cL  = init_random.NextLong();

				switch(size)
				{
					case 512:
						procedure_Aa(x0L, cL, pq, 512);
						break;
					case 1024:
						procedure_Bb(x0L, cL, pq);
						break;
					default:
						throw new InvalidOperationException("Ooops! key size 512 or 1024 bit.");
				}
				p = pq[0];  q = pq[1];
				a = procedure_C(p, q);
				//System.out.println("p:"+p.toString(16)+"\n"+"q:"+q.toString(16)+"\n"+"a:"+a.toString(16));
				//System.out.println("p:"+p+"\n"+"q:"+q+"\n"+"a:"+a);
				return new Gost3410Parameters(p, q, a, new Gost3410ValidationParameters(x0L, cL));
			}
		}
	}

Usage Example

コード例 #1
0
			public ITestResult Perform()
			{
				BigInteger r = new BigInteger("860d82c60e9502cd00c0e9e1f6563feafec304801974d745c5e02079946f729e",16);
				BigInteger s = new BigInteger("7ef49264ef022801aaa03033cd97915235fbab4c823ed936b0f360c22114688a",16);
				Gost3410ParametersGenerator pGen = new Gost3410ParametersGenerator();

				pGen.Init(1024, 2, init_random);

				Gost3410Parameters parameters = pGen.GenerateParameters();

				if (!pValue.Equals(parameters.P) || !qValue.Equals(parameters.Q))
				{
					return new SimpleTestResult(false, Name + ": p or q wrong");
				}

				Gost3410KeyPairGenerator Gost3410KeyGen = new Gost3410KeyPairGenerator();
				Gost3410KeyGenerationParameters genParam = new Gost3410KeyGenerationParameters(keyRandom, parameters);

				Gost3410KeyGen.Init(genParam);

				AsymmetricCipherKeyPair pair = Gost3410KeyGen.GenerateKeyPair();

				ParametersWithRandom param = new ParametersWithRandom(pair.Private, random);

				Gost3410Signer Gost3410 = new Gost3410Signer();

				Gost3410.Init(true, param);

				BigInteger[] sig = Gost3410.GenerateSignature(hashmessage);

				if (!r.Equals(sig[0]))
				{
					return new SimpleTestResult(false, Name
						+ ": r component wrong." + SimpleTest.NewLine
						+ " expecting: " + r.ToString(16) + SimpleTest.NewLine
						+ " got      : " + sig[0].ToString(16));
				}

				if (!s.Equals(sig[1]))
				{
					return new SimpleTestResult(false, Name
						+ ": s component wrong." + SimpleTest.NewLine
						+ " expecting: " + s.ToString(16) + SimpleTest.NewLine
						+ " got      : " + sig[1].ToString(16));
				}

				Gost3410.Init(false, pair.Public);

				if (Gost3410.VerifySignature(hashmessage, sig[0], sig[1]))
				{
					return new SimpleTestResult(true, Name + ": Okay");
				}
				else
				{
					return new SimpleTestResult(false, Name + ": verification fails");
				}
			}
All Usage Examples Of Org.BouncyCastle.Crypto.Generators.Gost3410ParametersGenerator::GenerateParameters