package org.bouncycastle.crypto.signers; import java.math.BigInteger; import java.security.SecureRandom; public class RandomDSAKCalculator implements DSAKCalculator { private static final BigInteger ZERO = BigInteger.valueOf(0); private BigInteger q; private SecureRandom random; public boolean isDeterministic() { return false; } public void init(BigInteger n, SecureRandom random) { this.q = n; this.random = random; } public void init(BigInteger n, BigInteger d, byte[] message) { throw new IllegalStateException("Operation not supported"); } public BigInteger nextK() { int qBitLength = q.bitLength(); BigInteger k; do { k = new BigInteger(qBitLength, random); } while (k.equals(ZERO) || k.compareTo(q) >= 0); return k; } }