Developer Reference for Intel® Integrated Performance Primitives Cryptography

Example of Using Montgomery Reduction Scheme Functions

Montgomery Multiplication  

void MontMul_sample(void){</codeblock> 
   int size;
 
   // define and initialize Montgomery Engine over Modulus N
   Ipp32u bnuN = 19;
   ippsMontGetSize(IppsBinaryMethod, 1, &amp;size);
   IppsMontState* pMont = (IppsMontState*)( new Ipp8u [size] );
   ippsMontInit(IppsBinaryMethod, 1, pMont);
   ippsMontSet(&amp;bnuN, 1, pMont);
 
   // define and init Big Number multiplicant A
   Ipp32u bnuA = 12;
   IppsBigNumState* bnA = New_BN(1, &amp;bnuA);
   // encode A into Montfomery form
   ippsMontForm(bnA, pMont, bnA);
 
   // define and init Big Number multiplicant A
   Ipp32u bnuB = 15;
   IppsBigNumState* bnB = New_BN(1, &amp;bnuB);
 
 
   // compute R = A*B mod N
   IppsBigNumState* bnR = New_BN(1);
   ippsMontMul(bnA, bnB, pMont, bnR);
 
   Type_BN("R = A*B mod N:\n", bnR); 
   delete [] (Ipp8u*)pMont;
   delete [] (Ipp8u*)bnA;
   delete [] (Ipp8u*)bnB;
   delete [] (Ipp8u*)bnR;
}