Example usage for java.math BigInteger isProbablePrime

List of usage examples for java.math BigInteger isProbablePrime

Introduction

In this page you can find the example usage for java.math BigInteger isProbablePrime.

Prototype

public boolean isProbablePrime(int certainty) 

Source Link

Document

Returns true if this BigInteger is probably prime, false if it's definitely composite.

Usage

From source file:BigNumApp.java

public static void main(String args[]) {
    BigInteger n = new BigInteger("1000000000000");
    BigInteger one = new BigInteger("1");
    while (!n.isProbablePrime(7))
        n = n.add(one);// w w w.j av  a 2  s  .  c  o  m
    System.out.println(n.toString(10) + " is probably prime.");
    System.out.println("It is " + n.bitLength() + " bits in length.");
}

From source file:Main.java

public static void main(String[] args) {

    // assign values to bi1, bi2
    BigInteger bi1 = new BigInteger("7");
    BigInteger bi2 = new BigInteger("9");

    // perform isProbablePrime on bi1, bi2
    Boolean b1 = bi1.isProbablePrime(1);
    Boolean b2 = bi2.isProbablePrime(1);
    Boolean b3 = bi2.isProbablePrime(-1);

    System.out.println(b1);//  w  w  w  . j a v  a2 s.  c om
    System.out.println(b2);
    System.out.println(b3);
}

From source file:dk.alexandra.fresco.suite.bgw.configuration.BgwConfiguration.java

public static BgwConfiguration fromCmdLine(SCEConfiguration sceConf, CommandLine cmd) throws ParseException {
    // Validate BGW specific arguments.
    Properties p = cmd.getOptionProperties("D");
    if (!p.containsKey("bgw.threshold")) {
        throw new ParseException("BGW requires setting -Dbgw.threshold=[int]");
    }//from  ww  w.  j  a va2 s  . c  o m

    try {
        final int threshold = Integer.parseInt(p.getProperty("bgw.threshold"));
        if (threshold < 1)
            throw new ParseException("bgw.threshold must be > 0");
        if (threshold > sceConf.getParties().size() / 2)
            throw new ParseException("bgw.threshold must be < n/2");

        final BigInteger modulus = new BigInteger(p.getProperty("bgw.modulus", "618970019642690137449562111"));
        if (!modulus.isProbablePrime(40)) {
            throw new ParseException("BGW Modulus must be a prime number");
        }

        return new BgwConfiguration() {

            @Override
            public int getThreshold() {
                return threshold;
            }

            @Override
            public BigInteger getModulus() {
                return modulus;
            }

        };
    } catch (NumberFormatException e) {
        throw new ParseException("Invalid bgw.threshold value: '" + p.getProperty("bgw.threshold") + "'");
    }
}

From source file:Main.java

static BigInteger[] generateSafePrimes(int size, int certainty, SecureRandom random) {
    BigInteger p, q;
    int qLength = size - 1;

    for (;;) {/* w w w  .  j  a va 2  s .  c o m*/
        q = new BigInteger(qLength, 2, random);

        // p <- 2q + 1
        p = q.shiftLeft(1).add(ONE);

        if (p.isProbablePrime(certainty) && (certainty <= 2 || q.isProbablePrime(certainty))) {
            break;
        }
    }

    return new BigInteger[] { p, q };
}

From source file:Main.java

public static boolean isGoodPrime(byte[] prime, int g) {
    if (!(g >= 2 && g <= 7)) {
        return false;
    }/*from   w ww.  j  a  v a  2  s  . com*/

    if (prime.length != 256 || prime[0] >= 0) {
        return false;
    }

    BigInteger dhBI = new BigInteger(1, prime);

    if (g == 2) { // p mod 8 = 7 for g = 2;
        BigInteger res = dhBI.mod(BigInteger.valueOf(8));
        if (res.intValue() != 7) {
            return false;
        }
    } else if (g == 3) { // p mod 3 = 2 for g = 3;
        BigInteger res = dhBI.mod(BigInteger.valueOf(3));
        if (res.intValue() != 2) {
            return false;
        }
    } else if (g == 5) { // p mod 5 = 1 or 4 for g = 5;
        BigInteger res = dhBI.mod(BigInteger.valueOf(5));
        int val = res.intValue();
        if (val != 1 && val != 4) {
            return false;
        }
    } else if (g == 6) { // p mod 24 = 19 or 23 for g = 6;
        BigInteger res = dhBI.mod(BigInteger.valueOf(24));
        int val = res.intValue();
        if (val != 19 && val != 23) {
            return false;
        }
    } else if (g == 7) { // p mod 7 = 3, 5 or 6 for g = 7.
        BigInteger res = dhBI.mod(BigInteger.valueOf(7));
        int val = res.intValue();
        if (val != 3 && val != 5 && val != 6) {
            return false;
        }
    }

    String hex = bytesToHex(prime);
    if (hex.equals(
            "C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C3720FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F642477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5B")) {
        return true;
    }

    BigInteger dhBI2 = dhBI.subtract(BigInteger.valueOf(1)).divide(BigInteger.valueOf(2));
    return !(!dhBI.isProbablePrime(30) || !dhBI2.isProbablePrime(30));
}

From source file:test.be.fedict.eid.applet.RSATest.java

@Test
public void testManualEncryption() throws Exception {
    while (true) {
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA",
                BouncyCastleProvider.PROVIDER_NAME);
        SecureRandom random = new SecureRandom();
        int keySize = 128;
        keyPairGenerator.initialize(new RSAKeyGenParameterSpec(keySize, RSAKeyGenParameterSpec.F0), random);
        KeyPair keyPair = keyPairGenerator.generateKeyPair();
        PrivateKey privateKey = keyPair.getPrivate();
        PublicKey publicKey = keyPair.getPublic();
        RSAPrivateCrtKey rsaPrivateKey = (RSAPrivateCrtKey) privateKey;
        LOG.debug("private key modulus: " + rsaPrivateKey.getModulus());
        RSAPublicKey rsaPublicKey = (RSAPublicKey) publicKey;
        LOG.debug("public key modulus: " + rsaPublicKey.getModulus());
        LOG.debug("public key exponent: " + rsaPublicKey.getPublicExponent());
        LOG.debug("modulus size: " + rsaPublicKey.getModulus().toByteArray().length);

        Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
        cipher.init(Cipher.ENCRYPT_MODE, privateKey);

        int dataSize = keySize / 8 - 11;
        byte[] data1 = new byte[dataSize];
        for (int i = 0; i < data1.length; i++) {
            data1[i] = 0x00;//w ww.  ja  v  a2  s  .co m
        }
        byte[] data2 = new byte[dataSize];
        for (int i = 0; i < data2.length; i++) {
            data2[i] = 0x00;
        }
        data2[data2.length - 1] = 0x07;

        byte[] signatureValue1 = cipher.doFinal(data1);

        LOG.debug("signature size: " + signatureValue1.length);

        cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
        cipher.init(Cipher.ENCRYPT_MODE, privateKey);
        byte[] signatureValue2 = cipher.doFinal(data2);

        BigInteger sigBigInt1 = new BigInteger(signatureValue1);
        BigInteger sigBigInt2 = new BigInteger(signatureValue2);
        BigInteger msgBigInt1 = sigBigInt1.modPow(rsaPublicKey.getPublicExponent(), rsaPublicKey.getModulus());
        BigInteger msgBigInt2 = sigBigInt2.modPow(rsaPublicKey.getPublicExponent(), rsaPublicKey.getModulus());
        LOG.debug("msg big int: " + msgBigInt1);
        byte[] msgBytes1 = msgBigInt1.toByteArray();
        LOG.debug("original message size: " + msgBytes1.length);
        LOG.debug("original message1: " + new String(Hex.encodeHex(msgBytes1)));
        LOG.debug("original message2: " + new String(Hex.encodeHex(msgBigInt2.toByteArray())));

        LOG.debug("msg1 prime: " + msgBigInt1.isProbablePrime(100));
        LOG.debug("msg2 prime: " + msgBigInt2.isProbablePrime(100));

        // BigInteger.pow offers a very naive implementation
        LOG.debug("calculating s1^e...");
        BigInteger s1_e = sigBigInt1.pow(rsaPublicKey.getPublicExponent().intValue());
        LOG.debug("s1^e: " + s1_e);
        LOG.debug("calculating s2^e...");
        BigInteger s2_e = sigBigInt2.pow(rsaPublicKey.getPublicExponent().intValue());
        LOG.debug("s2^e: " + s2_e);

        LOG.debug("calculating GCD...");
        LOG.debug("msg1: " + msgBigInt1);
        LOG.debug("msg2: " + msgBigInt2);
        BigInteger a = s1_e.subtract(msgBigInt1);
        BigInteger b = s2_e.subtract(msgBigInt2);
        LOG.debug("a: " + a);
        LOG.debug("b: " + b);
        BigInteger candidateModulus = a.gcd(b);
        LOG.debug("candidate modulus: " + candidateModulus);
        LOG.debug("candidate modulus size: " + candidateModulus.toByteArray().length);
        BigInteger s_e = s1_e.multiply(s2_e);
        BigInteger m = msgBigInt1.multiply(msgBigInt2);
        while (false == rsaPublicKey.getModulus().equals(candidateModulus)) {
            LOG.error("incorrect candidate modulus");
            LOG.debug("modulus | candidate modulus: "
                    + candidateModulus.remainder(rsaPublicKey.getModulus()).equals(BigInteger.ZERO));
            s_e = s_e.multiply(s1_e);
            m = m.multiply(msgBigInt1);
            BigInteger n1 = s_e.subtract(m).gcd(a);
            BigInteger n2 = s_e.subtract(m).gcd(b);
            candidateModulus = n1.gcd(n2);
            // try / 2
            LOG.debug("new modulus:       " + n1);
            LOG.debug("new modulus:       " + n2);
            LOG.debug("candidate modulus: " + candidateModulus);
            LOG.debug("actual mod:        " + rsaPublicKey.getModulus());
        }
    }
}