protected DSA createDSAImpl() { return new DSASigner(); } }
/** * 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 q = params.getQ(); BigInteger m = calculateE(q, message); BigInteger x = ((DSAPrivateKeyParameters)key).getX(); if (kCalculator.isDeterministic()) { kCalculator.init(q, x, message); } else { kCalculator.init(q, random); } BigInteger k = kCalculator.nextK(); // the randomizer is to conceal timing information related to k and x. BigInteger r = params.getG().modPow(k.add(getRandomizer(q, random)), params.getP()).mod(q); k = k.modInverse(q).multiply(m.add(x.multiply(r))); BigInteger s = k.mod(q); return new BigInteger[]{ r, s }; }
BigInteger m = calculateE(q, message); BigInteger zero = BigInteger.valueOf(0);
public void init( boolean forSigning, CipherParameters param) { SecureRandom providedRandom = null; if (forSigning) { if (param instanceof ParametersWithRandom) { ParametersWithRandom rParam = (ParametersWithRandom)param; this.key = (DSAPrivateKeyParameters)rParam.getParameters(); providedRandom = rParam.getRandom(); } else { this.key = (DSAPrivateKeyParameters)param; } } else { this.key = (DSAPublicKeyParameters)param; } this.random = initSecureRandom(forSigning && !kCalculator.isDeterministic(), providedRandom); }
/** * 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); }
public dsa256() { super(DigestFactory.createSHA256(), new org.spongycastle.crypto.signers.DSASigner()); } }
/** * 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); BigInteger k; int qBitLength = params.getQ().bitLength(); do { k = new BigInteger(qBitLength, random); } while (k.compareTo(params.getQ()) >= 0); 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; }
public stdDSA() { super(new SHA1Digest(), new org.spongycastle.crypto.signers.DSASigner()); } }
public dsa384() { super(DigestFactory.createSHA384(), new org.spongycastle.crypto.signers.DSASigner()); } }
public noneDSA() { super(new NullDigest(), new org.spongycastle.crypto.signers.DSASigner()); } }
protected Signer createSigner(AlgorithmIdentifier sigAlgId, AlgorithmIdentifier digAlgId) throws OperatorCreationException { Digest dig = digestProvider.get(digAlgId); return new DSADigestSigner(new DSASigner(), dig); } }
public dsaSha3_256() { super(DigestFactory.createSHA3_256(), new org.spongycastle.crypto.signers.DSASigner()); } }
protected Signer createSigner(AlgorithmIdentifier sigAlgId, AlgorithmIdentifier digAlgId) throws OperatorCreationException { Digest dig = digestProvider.get(digAlgId); return new DSADigestSigner(new DSASigner(), dig); } }
public dsa224() { super(new SHA224Digest(), new org.spongycastle.crypto.signers.DSASigner()); } }
public dsa512() { super(DigestFactory.createSHA512(), new org.spongycastle.crypto.signers.DSASigner()); } }
public dsaSha3_224() { super(DigestFactory.createSHA3_224(), new org.spongycastle.crypto.signers.DSASigner()); } }
public dsaSha3_512() { super(DigestFactory.createSHA3_512(), new org.spongycastle.crypto.signers.DSASigner()); } }
public noneDSA() { super(new NullDigest(), new org.spongycastle.crypto.signers.DSASigner()); } }
public stdDSA() { super(DigestFactory.createSHA1(), new org.spongycastle.crypto.signers.DSASigner()); } }
public dsa224() { super(DigestFactory.createSHA224(), new org.spongycastle.crypto.signers.DSASigner()); } }