Example of Using RSA Primitive Functions

Use of DLPSignDSA and DLPVerifyDSA

//
// known domain parameters
//
static const int M = 512; // DSA system bitsize
static const int L = 160; // DSA order  bitsize

		
static
BigNumber P("0x8DF2A494492276AA3D25759BB06869CBEAC0D83AFB8D0CF7" \
            "CBB8324F0D7882E5D0762FC5B7210EAFC2E9ADAC32AB7AAC" \
            "49693DFBF83724C2EC0736EE31C80291");
 
static
BigNumber Q("0xC773218C737EC8EE993B4F2DED30F48EDACE915F");
 
static
BigNumber G("0x626D027839EA0A13413163A55B4CB500299D5522956CEFCB" \
            "3BFF10F399CE2C2E71CB9DE5FA24BABF58E5B79521925C9C" \
            "C42E9F6F464B088CC572AF53E6D78802");
 
//
// known DSA regular key pair
//
static
BigNumber X("0x2070B3223DBA372FDE1C0FFC7B2E3B498B260614");
 
 
static
BigNumber Y("0x19131871D75B1612A819F29D78D1B0D7346F7AA77BB62A85" \
            "9BFD6C5675DA9D212D3A36EF1672EF660B8C7C255CC0EC74" \
            "858FBA33F44C06699630A76B030EE333");
 
 
int DSAsign_verify_sample(void)
{
   // DLP context
   IppsDLPState *DLPState = newDLP(M, L);
 
   // set up DLP crypto system
   ippsDLPSet(P, Q, G, DLPState);
 
  // message
   Ipp8u message[] = "abc";
 
   // compute message digest to be signed
   Ipp8u md[SHA1_DIGEST_LENGTH/8];
   ippsSHA1MessageDigest(message, sizeof(message)-1, md);
   BigNumber digest(0, BITS_2_WORDS(SHA1_DIGEST_LENGTH));
   ippsSetOctString_BN(md, SHA1_DIGEST_LENGTH/8, digest);
 
   // generate ephemeral key pair (ephX,ephY)
   BigNumber ephX(0, BITS_2_WORDS(L));
   BigNumber ephY(0, BITS_2_WORDS(M));
 
 
   IppsPRNGState* pRand = newPRNG();
   ippsDLPGenKeyPair(ephX, ephY, DLPState, ippsPRNGen, pRand);
   deletePRNG(pRand);
   //
   // generate signature
   //
   BigNumber signR(0, BITS_2_WORDS(L));      // R and S signature's component
   BigNumber signS(0, BITS_2_WORDS(L));
   ippsDLPSetKeyPair(ephX, ephY, DLPState);  // set up ephemeral keys
   ippsDLPSignDSA(digest, X,                 // sign digest
                  signR, signS,
                  DLPState);
 
 
   //
   // verify signature
   //
   ippsDLPSetKeyPair(0, Y, DLPState);        // set up regular public key
	IppDLResult result;
	ippsDLPVerifyDSA(digest, signR,signS,     // verify
                    &result, DLPState);
 
   deleteDLP(DLPState);
   return result==ippDLValid;
}
 

Submit feedback on this help topic

Copyright © 2000 - 2011, Intel Corporation. All rights reserved.