aboutsummaryrefslogtreecommitdiffstats
path: root/libraries/spongycastle/core/src/main/java/org/spongycastle/crypto/signers/DSASigner.java
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/spongycastle/core/src/main/java/org/spongycastle/crypto/signers/DSASigner.java')
-rw-r--r--libraries/spongycastle/core/src/main/java/org/spongycastle/crypto/signers/DSASigner.java160
1 files changed, 0 insertions, 160 deletions
diff --git a/libraries/spongycastle/core/src/main/java/org/spongycastle/crypto/signers/DSASigner.java b/libraries/spongycastle/core/src/main/java/org/spongycastle/crypto/signers/DSASigner.java
deleted file mode 100644
index 4d9b87842..000000000
--- a/libraries/spongycastle/core/src/main/java/org/spongycastle/crypto/signers/DSASigner.java
+++ /dev/null
@@ -1,160 +0,0 @@
-package org.spongycastle.crypto.signers;
-
-import java.math.BigInteger;
-import java.security.SecureRandom;
-
-import org.spongycastle.crypto.CipherParameters;
-import org.spongycastle.crypto.DSA;
-import org.spongycastle.crypto.params.DSAKeyParameters;
-import org.spongycastle.crypto.params.DSAParameters;
-import org.spongycastle.crypto.params.DSAPrivateKeyParameters;
-import org.spongycastle.crypto.params.DSAPublicKeyParameters;
-import org.spongycastle.crypto.params.ParametersWithRandom;
-
-/**
- * The Digital Signature Algorithm - as described in "Handbook of Applied
- * Cryptography", pages 452 - 453.
- */
-public class DSASigner
- implements DSA
-{
- private final DSAKCalculator kCalculator;
-
- private DSAKeyParameters key;
- private SecureRandom random;
-
- /**
- * Default configuration, random K values.
- */
- public DSASigner()
- {
- this.kCalculator = new RandomDSAKCalculator();
- }
-
- /**
- * Configuration with an alternate, possibly deterministic calculator of K.
- *
- * @param kCalculator a K value calculator.
- */
- public DSASigner(DSAKCalculator kCalculator)
- {
- this.kCalculator = kCalculator;
- }
-
- public void init(
- boolean forSigning,
- CipherParameters param)
- {
- if (forSigning)
- {
- if (param instanceof ParametersWithRandom)
- {
- ParametersWithRandom rParam = (ParametersWithRandom)param;
-
- this.random = rParam.getRandom();
- this.key = (DSAPrivateKeyParameters)rParam.getParameters();
- }
- else
- {
- this.random = new SecureRandom();
- this.key = (DSAPrivateKeyParameters)param;
- }
- }
- else
- {
- this.key = (DSAPublicKeyParameters)param;
- }
- }
-
- /**
- * generate a signature for the given message using the key we were
- * initialised with. For conventional DSA the message should be a SHA-1
- * hash of the message of interest.
- *
- * @param message the message that will be verified later.
- */
- public BigInteger[] generateSignature(
- byte[] message)
- {
- DSAParameters params = key.getParameters();
- BigInteger m = calculateE(params.getQ(), message);
-
- if (kCalculator.isDeterministic())
- {
- kCalculator.init(params.getQ(), ((DSAPrivateKeyParameters)key).getX(), message);
- }
- else
- {
- kCalculator.init(params.getQ(), random);
- }
-
- BigInteger k = kCalculator.nextK();
-
- BigInteger r = params.getG().modPow(k, params.getP()).mod(params.getQ());
-
- k = k.modInverse(params.getQ()).multiply(
- m.add(((DSAPrivateKeyParameters)key).getX().multiply(r)));
-
- BigInteger s = k.mod(params.getQ());
-
- BigInteger[] res = new BigInteger[2];
-
- res[0] = r;
- res[1] = s;
-
- return res;
- }
-
- /**
- * return true if the value r and s represent a DSA signature for
- * the passed in message for standard DSA the message should be a
- * SHA-1 hash of the real message to be verified.
- */
- public boolean verifySignature(
- byte[] message,
- BigInteger r,
- BigInteger s)
- {
- DSAParameters params = key.getParameters();
- BigInteger m = calculateE(params.getQ(), message);
- BigInteger zero = BigInteger.valueOf(0);
-
- if (zero.compareTo(r) >= 0 || params.getQ().compareTo(r) <= 0)
- {
- return false;
- }
-
- if (zero.compareTo(s) >= 0 || params.getQ().compareTo(s) <= 0)
- {
- return false;
- }
-
- BigInteger w = s.modInverse(params.getQ());
-
- BigInteger u1 = m.multiply(w).mod(params.getQ());
- BigInteger u2 = r.multiply(w).mod(params.getQ());
-
- u1 = params.getG().modPow(u1, params.getP());
- u2 = ((DSAPublicKeyParameters)key).getY().modPow(u2, params.getP());
-
- BigInteger v = u1.multiply(u2).mod(params.getP()).mod(params.getQ());
-
- return v.equals(r);
- }
-
- private BigInteger calculateE(BigInteger n, byte[] message)
- {
- if (n.bitLength() >= message.length * 8)
- {
- return new BigInteger(1, message);
- }
- else
- {
- byte[] trunc = new byte[n.bitLength() / 8];
-
- System.arraycopy(message, 0, trunc, 0, trunc.length);
-
- return new BigInteger(1, trunc);
- }
- }
-}