Developer Reference for Intel® Integrated Performance Primitives Cryptography

Example of Using Pseudorandom Number Generation Functions

Find Pseudorandom Co-primes

void FindCoPrimes(void){ 
   int size; 
  
   // define Pseudo Random Generator (default settings) 
   ippsPRNGGetSize(&size); 
   IppsPRNGState* pPrng = (IppsPRNGState*)(new Ipp8u [size] ); 
   ippsPRNGInit(160, pPrng); 
  
   // define 256-bits Big Numbers X and Y 
   const int bnBitSize = 256; 
   IppsBigNumState* bnX = New_BN(bnBitSize/32); 
   IppsBigNumState* bnY = New_BN(bnBitSize/32); 
  
   // define temporary Big Numbers GCD and 1 
   IppsBigNumState* bnGCD = New_BN(bnBitSize/32); 
   Ipp32u one = 1; 
   IppsBigNumState* bnOne = New_BN(1, &one); 
  
  
   // generate pseudo random X and Y 
   // while GCD(X,Y) != 1 
   Ipp32u result; 
   int counter; 
   for(counter=0,result=1; result; counter++) { 
      ippsPRNGen_BN(bnX, bnBitSize, pPrng); 
      ippsPRNGen_BN(bnY, bnBitSize, pPrng); 
      ippsGcd_BN(bnX, bnY, bnGCD); 
      ippsCmp_BN(bnGCD, bnOne, &result); 
   } 
  
   cout <<"Coprimes:" <<endl; 
   Type_BN("X: ", bnX); cout <<endl; 
   Type_BN("Y: ", bnY); cout <<endl; 
   cout <<"were fond on " <<counter <<" attempt" <<endl; 
  
   delete [] (Ipp8u*)pPrng; 
   delete [] (Ipp8u*)bnX; 
   delete [] (Ipp8u*)bnY; 
   delete [] (Ipp8u*)bnGCD; 
   delete [] (Ipp8u*)bnOne; 
}