void CheckPrime(void){
Ipp32u result;
int size;
// define 256-bit Prime Generator
int maxBitSize = 256;
ippsPrimeGetSize(maxBitSize, &size);
IppsPrimeState* pPrimeGen = (IppsPrimeState*)( new Ipp8u [size] );
ippsPrimeInit(maxBitSize, pPrimeGen);
// define Pseudo Random Generator (default settings)
ippsPRNGGetSize(&size);
IppsPRNGState* pPrng = (IppsPRNGState*)(new Ipp8u [size] );
ippsPRNGInit(160, pPrng);
// define known prime value (2^128 -3)/76439
Ipp32u bnuPrime1[] = {
0xBEAD208B, 0x5E668076, 0x2ABF62E3, 0xDB7C};
IppsBigNumState* bnP1 = New_BN(4, bnuPrime1);
// make sure P1 is really prime
ippsPrimeSet_BN(bnP1, pPrimeGen);
ippsPrimeTest(50, &result, pPrimeGen,
ippsPRNGen, pPrng);
IS_PRIME==result?
cout <<"Primality of P1 is confirmed\n" :
cout <<"Primality of P1 isn't confirmed\n";
// define another known prime value 2^128 -2^97 -1
Ipp32u bnuPrime2[] = {
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFD};
IppsBigNumState* bnP2 = New_BN(4, bnuPrime2);
// make sure P2 is really prime
ippsPrimeSet_BN(bnP2, pPrimeGen);
ippsPrimeTest(50, &result, pPrimeGen,
ippsPRNGen, pPrng);
IS_PRIME==result?
cout <<"Primality of P2 is confirmed\n" :
cout <<"Primality of P2 isn't confirmed\n";
// define composite Big Number C = P1*P2
IppsBigNumState* bnC = New_BN(8);
ippsMul_BN(bnP1, bnP2, bnC);
// make sure C is really composite
ippsPrimeSet_BN(bnC, pPrimeGen);
ippsPrimeTest(50, &result, pPrimeGen,
ippsPRNGen, pPrng);
IS_PRIME==result?
cout <<"Strange, but C=P1*P2 is prime\n" :
cout <<"OK, C=P1*P2 is composite\n";
delete [] (Ipp8u*)pPrimeGen;
delete [] (Ipp8u*)pPrng;
delete [] (Ipp8u*)bnP1;
delete [] (Ipp8u*)bnP2;
delete [] (Ipp8u*)bnC;
}
Copyright © 2000 - 2010, Intel Corporation. All rights reserved.