⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dsaparametersgenerator.java

📁 java 文件下载器。可自定义
💻 JAVA
字号:
// Decompiled by Jad v1.5.8e2. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://kpdus.tripod.com/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi space 
// Source File Name:   DSAParametersGenerator.java

package org.bouncycastle.crypto.generators;

import java.math.BigInteger;
import java.security.SecureRandom;
import org.bouncycastle.crypto.digests.SHA1Digest;
import org.bouncycastle.crypto.params.DSAParameters;
import org.bouncycastle.crypto.params.DSAValidationParameters;

public class DSAParametersGenerator
{

	private int size;
	private int certainty;
	private SecureRandom random;
	private static BigInteger ONE = BigInteger.valueOf(1L);
	private static BigInteger TWO = BigInteger.valueOf(2L);

	public DSAParametersGenerator()
	{
	}

	public void init(int size, int certainty, SecureRandom random)
	{
		this.size = size;
		this.certainty = certainty;
		this.random = random;
	}

	private void add(byte a[], byte b[], int value)
	{
		int x = (b[b.length - 1] & 0xff) + value;
		a[b.length - 1] = (byte)x;
		x >>>= 8;
		for (int i = b.length - 2; i >= 0; i--)
		{
			x += b[i] & 0xff;
			a[i] = (byte)x;
			x >>>= 8;
		}

	}

	public DSAParameters generateParameters()
	{
		byte seed[] = new byte[20];
		byte part1[] = new byte[20];
		byte part2[] = new byte[20];
		byte u[] = new byte[20];
		SHA1Digest sha1 = new SHA1Digest();
		int n = (size - 1) / 160;
		byte w[] = new byte[size / 8];
		BigInteger q = null;
		BigInteger p = null;
		BigInteger g = null;
		int counter = 0;
		boolean primesFound = false;
label0:
		do
		{
			if (!primesFound)
			{
				do
				{
					random.nextBytes(seed);
					sha1.update(seed, 0, seed.length);
					sha1.doFinal(part1, 0);
					System.arraycopy(seed, 0, part2, 0, seed.length);
					add(part2, seed, 1);
					sha1.update(part2, 0, part2.length);
					sha1.doFinal(part2, 0);
					for (int i = 0; i != u.length; i++)
						u[i] = (byte)(part1[i] ^ part2[i]);

					u[0] |= 0x80;
					u[19] |= 1;
					q = new BigInteger(1, u);
				} while (!q.isProbablePrime(certainty));
				counter = 0;
				int offset = 2;
				do
				{
					if (counter >= 4096)
						continue label0;
					for (int k = 0; k < n; k++)
					{
						add(part1, seed, offset + k);
						sha1.update(part1, 0, part1.length);
						sha1.doFinal(part1, 0);
						System.arraycopy(part1, 0, w, w.length - (k + 1) * part1.length, part1.length);
					}

					add(part1, seed, offset + n);
					sha1.update(part1, 0, part1.length);
					sha1.doFinal(part1, 0);
					System.arraycopy(part1, part1.length - (w.length - n * part1.length), w, 0, w.length - n * part1.length);
					w[0] |= 0x80;
					BigInteger x = new BigInteger(1, w);
					BigInteger c = x.mod(q.multiply(TWO));
					p = x.subtract(c.subtract(ONE));
					if (p.testBit(size - 1) && p.isProbablePrime(certainty))
					{
						primesFound = true;
						continue label0;
					}
					counter++;
					offset += n + 1;
				} while (true);
			}
			BigInteger pMinusOneOverQ = p.subtract(ONE).divide(q);
			do
			{
				BigInteger h;
				do
					h = new BigInteger(size, random);
				while (h.compareTo(ONE) <= 0 || h.compareTo(p.subtract(ONE)) >= 0);
				g = h.modPow(pMinusOneOverQ, p);
			} while (g.compareTo(ONE) <= 0);
			return new DSAParameters(p, q, g, new DSAValidationParameters(seed, counter));
		} while (true);
	}

}

⌨️ 快捷键说明

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