Bouncy Castle Cryptography Library 1.79

org.bouncycastle.math
Class Primes

java.lang.Object
  |
  +--org.bouncycastle.math.Primes

public abstract class Primes
extends java.lang.Object

Utility methods for generating primes and testing for primality.


Inner Class Summary
static class Primes.MROutput
          Used to return the output from the {@linkplain Primes#enhancedMRProbablePrimeTest(BigInteger, SecureRandom, int) Enhanced Miller-Rabin Probabilistic Primality Test}
static class Primes.STOutput
          Used to return the output from the {@linkplain Primes#generateSTRandomPrime(Digest, int, byte[]) Shawe-Taylor Random_Prime Routine}
 
Field Summary
static int SMALL_FACTOR_LIMIT
           
 
Constructor Summary
Primes()
           
 
Method Summary
static Primes.MROutput enhancedMRProbablePrimeTest(java.math.BigInteger candidate, java.security.SecureRandom random, int iterations)
          FIPS 186-4 C.3.2 Enhanced Miller-Rabin Probabilistic Primality Test Run several iterations of the Miller-Rabin algorithm with randomly-chosen bases.
static Primes.STOutput generateSTRandomPrime(Digest hash, int length, byte[] inputSeed)
          FIPS 186-4 C.6 Shawe-Taylor Random_Prime Routine Construct a provable prime number using a hash function.
static boolean hasAnySmallFactors(java.math.BigInteger candidate)
          A fast check for small divisors, up to some implementation-specific limit.
static boolean isMRProbablePrime(java.math.BigInteger candidate, java.security.SecureRandom random, int iterations)
          FIPS 186-4 C.3.1 Miller-Rabin Probabilistic Primality Test Run several iterations of the Miller-Rabin algorithm with randomly-chosen bases.
static boolean isMRProbablePrimeToBase(java.math.BigInteger candidate, java.math.BigInteger base)
          FIPS 186-4 C.3.1 Miller-Rabin Probabilistic Primality Test (to a fixed base).
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

SMALL_FACTOR_LIMIT

public static final int SMALL_FACTOR_LIMIT
Constructor Detail

Primes

public Primes()
Method Detail

generateSTRandomPrime

public static Primes.STOutput generateSTRandomPrime(Digest hash,
                                                    int length,
                                                    byte[] inputSeed)
FIPS 186-4 C.6 Shawe-Taylor Random_Prime Routine Construct a provable prime number using a hash function.
Parameters:
hash - the Digest instance to use (as "Hash()"). Cannot be null.
length - the length (in bits) of the prime to be generated. Must be at least 2.
inputSeed - the seed to be used for the generation of the requested prime. Cannot be null or empty.
Returns:
an Primes.STOutput instance containing the requested prime.

enhancedMRProbablePrimeTest

public static Primes.MROutput enhancedMRProbablePrimeTest(java.math.BigInteger candidate,
                                                          java.security.SecureRandom random,
                                                          int iterations)
FIPS 186-4 C.3.2 Enhanced Miller-Rabin Probabilistic Primality Test Run several iterations of the Miller-Rabin algorithm with randomly-chosen bases. This is an alternative to isMRProbablePrime(BigInteger, SecureRandom, int) that provides more information about a composite candidate, which may be useful when generating or validating RSA moduli.
Parameters:
candidate - the BigInteger instance to test for primality.
random - the source of randomness to use to choose bases.
iterations - the number of randomly-chosen bases to perform the test for.
Returns:
an Primes.MROutput instance that can be further queried for details.

hasAnySmallFactors

public static boolean hasAnySmallFactors(java.math.BigInteger candidate)
A fast check for small divisors, up to some implementation-specific limit.
Parameters:
candidate - the BigInteger instance to test for division by small factors.
Returns:
true if the candidate is found to have any small factors, false otherwise.

isMRProbablePrime

public static boolean isMRProbablePrime(java.math.BigInteger candidate,
                                        java.security.SecureRandom random,
                                        int iterations)
FIPS 186-4 C.3.1 Miller-Rabin Probabilistic Primality Test Run several iterations of the Miller-Rabin algorithm with randomly-chosen bases.
Parameters:
candidate - the BigInteger instance to test for primality.
random - the source of randomness to use to choose bases.
iterations - the number of randomly-chosen bases to perform the test for.
Returns:
false if any witness to compositeness is found amongst the chosen bases (so candidate is definitely NOT prime), or else true (indicating primality with some probability dependent on the number of iterations that were performed).

isMRProbablePrimeToBase

public static boolean isMRProbablePrimeToBase(java.math.BigInteger candidate,
                                              java.math.BigInteger base)
FIPS 186-4 C.3.1 Miller-Rabin Probabilistic Primality Test (to a fixed base). Run a single iteration of the Miller-Rabin algorithm against the specified base.
Parameters:
candidate - the BigInteger instance to test for primality.
base - the base value to use for this iteration.
Returns:
false if the specified base is a witness to compositeness (so candidate is definitely NOT prime), or else true.

Bouncy Castle Cryptography Library 1.79