Exemple #1
0
 private void generateKeys(int keyBitSize)
 {
     keyByteSize = keyBitSize / 8;
     do
     {
         // Generate Primes for Q and P
         // Use Cores parallel, if there are more than 1
         if (cores > 1)
         {
             do
             {
                 BigInteger[] primes = getPrimesParallel(keyBitSize);
                 p = primes[0];
                 q = primes[1];
             }while (p.compareTo(q) == 0);
         }
         else
         {
             do
             {
                 p        = getPrimesParallel(keyBitSize)[0];
                 q        = getPrimesParallel(keyBitSize)[0];
                 log2ofPQ = java.lang.Math.abs(CryptobyHelper.logBigInteger(p) - CryptobyHelper.logBigInteger
                                                   (q));
             }while (log2ofPQ <= 0.1 || log2ofPQ >= 30);
         }
         // Calculate n Module
         calcN();
         // Calculate Phi Module
         calcPhi();
         // Calculate D Module
         calcD();
     }while (n.toByteArray().Length != (keyByteSize) || d.toByteArray().Length != (keyByteSize
                                                                                   ));
 }
Exemple #2
0
 private BigInteger[] getPrimesParallel(int keyBitSize)
 {
     System.Threading.Thread[] startThreads = new System.Threading.Thread[cores];
     GenPrimeThread[]          primeThreads = new GenPrimeThread[cores];
     BigInteger[] primes   = new BigInteger[cores];
     BigInteger[] retPrime = new BigInteger[2];
     for (int i = 0; i < cores; i++)
     {
         primeThreads[i] = new GenPrimeThread(core, keyBitSize);
         startThreads[i] = new System.Threading.Thread(new System.Threading.ThreadStart(primeThreads[i].run));
     }
     // Start Threads
     for (int i_1 = 0; i_1 < cores; i_1++)
     {
         startThreads[i_1].Start();
     }
     for (int i_2 = 0; i_2 < cores; i_2++)
     {
         startThreads[i_2].Join();
     }
     for (int i_3 = 0; i_3 < cores; i_3++)
     {
         primes[i_3] = primeThreads[i_3].getPrime();
     }
     for (int i_4 = 0; i_4 < cores; i_4++)
     {
         for (int j = cores - 1; j >= 0; j--)
         {
             log2ofPQ = java.lang.Math.abs(CryptobyHelper.logBigInteger(primes[i_4]) - CryptobyHelper
                                           .logBigInteger(primes[j]));
             if (log2ofPQ >= 0.1 || log2ofPQ <= 30)
             {
                 retPrime[0] = primes[i_4];
                 retPrime[1] = primes[j];
                 return(retPrime);
             }
         }
     }
     retPrime[0] = BigInteger.ZERO;
     retPrime[1] = BigInteger.ZERO;
     return(retPrime);
 }