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

📄 ecdsasigner.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:   ECDSASigner.java

package org.bouncycastle.crypto.signers;

import java.math.BigInteger;
import java.security.SecureRandom;
import org.bouncycastle.crypto.CipherParameters;
import org.bouncycastle.crypto.DSA;
import org.bouncycastle.crypto.params.*;
import org.bouncycastle.math.ec.*;

public class ECDSASigner
	implements ECConstants, DSA
{

	ECKeyParameters key;
	SecureRandom random;

	public ECDSASigner()
	{
	}

	public void init(boolean forSigning, CipherParameters param)
	{
		if (forSigning)
		{
			if (param instanceof ParametersWithRandom)
			{
				ParametersWithRandom rParam = (ParametersWithRandom)param;
				random = rParam.getRandom();
				key = (ECPrivateKeyParameters)rParam.getParameters();
			} else
			{
				random = new SecureRandom();
				key = (ECPrivateKeyParameters)param;
			}
		} else
		{
			key = (ECPublicKeyParameters)param;
		}
	}

	public BigInteger[] generateSignature(byte message[])
	{
		BigInteger e = new BigInteger(1, message);
		BigInteger n = key.getParameters().getN();
		BigInteger r = null;
		BigInteger s = null;
		do
		{
			BigInteger k = null;
			int nBitLength = n.bitLength();
			do
			{
				do
					k = new BigInteger(nBitLength, random);
				while (k.equals(ZERO));
				ECPoint p = key.getParameters().getG().multiply(k);
				BigInteger x = p.getX().toBigInteger();
				r = x.mod(n);
			} while (r.equals(ZERO));
			BigInteger d = ((ECPrivateKeyParameters)key).getD();
			s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n);
		} while (s.equals(ZERO));
		BigInteger res[] = new BigInteger[2];
		res[0] = r;
		res[1] = s;
		return res;
	}

	public boolean verifySignature(byte message[], BigInteger r, BigInteger s)
	{
		BigInteger e = new BigInteger(1, message);
		BigInteger n = key.getParameters().getN();
		if (r.compareTo(ONE) < 0 || r.compareTo(n) >= 0)
			return false;
		if (s.compareTo(ONE) < 0 || s.compareTo(n) >= 0)
		{
			return false;
		} else
		{
			BigInteger c = s.modInverse(n);
			BigInteger u1 = e.multiply(c).mod(n);
			BigInteger u2 = r.multiply(c).mod(n);
			ECPoint G = key.getParameters().getG();
			ECPoint Q = ((ECPublicKeyParameters)key).getQ();
			ECPoint point = G.multiply(u1).add(Q.multiply(u2));
			BigInteger v = point.getX().toBigInteger().mod(n);
			return v.equals(r);
		}
	}
}

⌨️ 快捷键说明

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