<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic thanks for you,this is in Intel® Integrated Performance Primitives</title>
    <link>https://community.intel.com/t5/Intel-Integrated-Performance/ippsECCPSignDSA-function-call-fail/m-p/1179904#M27154</link>
    <description>&lt;P&gt;thanks for you,this is important to me&lt;/P&gt;</description>
    <pubDate>Tue, 26 May 2020 01:37:34 GMT</pubDate>
    <dc:creator>Tom__Jimmy</dc:creator>
    <dc:date>2020-05-26T01:37:34Z</dc:date>
    <item>
      <title>ippsECCPSignDSA function call fail !</title>
      <link>https://community.intel.com/t5/Intel-Integrated-Performance/ippsECCPSignDSA-function-call-fail/m-p/1179900#M27150</link>
      <description>&lt;P&gt;Floating point exception (core dumped) when calling&amp;nbsp;ippsECCPSignDSA.&amp;nbsp;&lt;/P&gt;

&lt;P&gt;It may bugs in the function.&lt;/P&gt;

&lt;P&gt;Sample code:&lt;/P&gt;

&lt;P&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;BR /&gt;
	#include &amp;lt;stdio.h&amp;gt;&lt;BR /&gt;
	#include &amp;lt;time.h&amp;gt;&lt;/P&gt;

&lt;P&gt;#include "ippcp.h"&lt;/P&gt;

&lt;P&gt;#define MAX_RETRY 20&lt;BR /&gt;
	#define RAND_SEED_BYTES 32&lt;BR /&gt;
	#define MAX_RAND_BITS 512&lt;BR /&gt;
	#define BYTES2U32LEN(n) ((n + sizeof(Ipp32u) - 1) / sizeof(Ipp32u))&lt;/P&gt;

&lt;P&gt;void data_dump(char *prompt, unsigned char *data, int len)&lt;BR /&gt;
	{&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;int i;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;int prev;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;int curr;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp;fprintf(stderr, "[%s] [length = %d]\n", prompt, len);&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;prev = curr = 0;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;for (i = 0; i &amp;lt; len; i++) {&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; if (i == (prev + 16)) {&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;i = prev;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;curr = prev + 16;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fprintf(stderr, " &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;");&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (; i &amp;lt; curr; i++)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (isprint(data&lt;I&gt;))&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fprintf(stderr, "%c", data&lt;I&gt;);&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fprintf(stderr, " ");&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fprintf(stderr, "\n");&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;prev = curr;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; fprintf(stderr, "%02x ", data&lt;I&gt;);&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;}&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;if (i != curr) {&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; curr = i;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; for (; i &amp;lt; (prev + 16); i++)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fprintf(stderr, " &amp;nbsp; ");&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; fprintf(stderr, " &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;");&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; for (i = prev ; i &amp;lt; curr; i++) {&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (isprint(data&lt;I&gt;))&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fprintf(stderr, "%c", data&lt;I&gt;);&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fprintf(stderr, " ");&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;}&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;fprintf(stderr, "\n");&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;fflush(stderr);&lt;BR /&gt;
	}&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/P&gt;

&lt;P&gt;static void RAND_bytes(Ipp8u *randData, int nBytes)&lt;BR /&gt;
	{&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;int i, round;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;int *pRnd = (int *)randData;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;round = (nBytes + sizeof(int) - 1) / sizeof(int);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;for(i = 0; i &amp;lt; round; i++){&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;*pRnd = rand();&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;pRnd++;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;BR /&gt;
	#ifdef DUMP&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;data_dump("Random", randData, nBytes);&lt;BR /&gt;
	#endif&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;return;&lt;BR /&gt;
	}&lt;/P&gt;

&lt;P&gt;static IppsPRNGState* newRandCtx()&lt;BR /&gt;
	{&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;IppsPRNGState *pRndCtx = NULL;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;int rndCtxSize, bnCtxSize;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;IppStatus ret;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;IppsBigNumState* bnTmp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;Ipp8u tmpSeed[RAND_SEED_BYTES] = {0};&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;ippsPRNGGetSize(&amp;amp;rndCtxSize);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;if(rndCtxSize &amp;amp; 0x07)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;rndCtxSize = ((rndCtxSize &amp;gt;&amp;gt; 3) + 1) &amp;lt;&amp;lt; 3;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;pRndCtx = (IppsPRNGState*)malloc(rndCtxSize);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;if(!pRndCtx){&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;return NULL;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;ret = ippsPRNGInit(MAX_RAND_BITS, pRndCtx);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;if(ippStsNoErr != ret){&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;fprintf(stderr, "ippsPRNGInit fial: %s\n", ippcpGetStatusString(ret));&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;free(pRndCtx);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;pRndCtx = NULL;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;return NULL;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;ippsBigNumGetSize(BYTES2U32LEN(RAND_SEED_BYTES), &amp;amp;bnCtxSize);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;bnTmp = (IppsBigNumState*) malloc(bnCtxSize);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;if(bnTmp){&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;RAND_bytes(tmpSeed, RAND_SEED_BYTES);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;ippsBigNumInit(BYTES2U32LEN(RAND_SEED_BYTES), bnTmp);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;ippsSetOctString_BN(tmpSeed, RAND_SEED_BYTES, bnTmp);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;ippsPRNGSetSeed(bnTmp, pRndCtx);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;free(bnTmp);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;return pRndCtx;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;}else{&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;free(pRndCtx);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;return NULL;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;BR /&gt;
	}&lt;/P&gt;

&lt;P&gt;static int genECCKey(IppsBigNumState* priKey, IppsECCPPointState* pubKey, const IppsECCPState* pCtx)&lt;BR /&gt;
	{&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;IppStatus ret = -1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;IppsPRNGState *pRndCtx;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;int i;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;pRndCtx = newRandCtx();&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;if(!pRndCtx)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;return -1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;for(i = 0; i &amp;lt; MAX_RETRY; i++){&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;ret = ippsECCPGenKeyPair(priKey, pubKey, pCtx, ippsPRNGen, pRndCtx);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if(ippStsNoErr == ret)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;break;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;free(pRndCtx);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;return ret;&lt;BR /&gt;
	}&lt;/P&gt;

&lt;P&gt;&lt;BR /&gt;
	int ec_sign_verify_test()&lt;BR /&gt;
	{&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;int prilen, publen;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;int bnSize, bnCtxSize;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;int ret = -1, nSize;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;IppECResult nResult;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;unsigned char digst[32];&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;IppsBigNumState *pPrivate = NULL, *pDigst = NULL, *pSignR = NULL, *pSignS = NULL;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;IppsECCPPointState* pPublic = NULL;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;IppsECCPState* pCtx;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;//init ECC CTX&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;ippsECCPGetSizeStd256r1(&amp;amp;nSize);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;pCtx = (IppsECCPState*)malloc(nSize);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;if(pCtx){&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;ippsECCPInitStd256r1(pCtx);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;ippsECCPSetStd256r1(pCtx);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;ippsECCPBindGxyTblStd256r1(pCtx);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;}else&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;goto testEnd;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;//generate public &amp;amp; private key&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;bnSize = BYTES2U32LEN(32);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;ippsBigNumGetSize(bnSize, &amp;amp;bnCtxSize);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;prilen = bnCtxSize;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;ippsECCPPointGetSize(256, &amp;amp;publen);&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;pPrivate = (IppsBigNumState*)malloc(prilen);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;pPublic = (IppsECCPPointState*)malloc(publen);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;if(!pPrivate || !pPublic)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;goto testEnd;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;ippsBigNumInit(bnSize, pPrivate);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;ippsECCPPointInit(256, pPublic);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;fprintf(stderr, "Calling genECCKey to generate ECC key pair ...\n");&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;ret = genECCKey(pPrivate, pPublic, pCtx);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;if(ippStsNoErr != ret)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;goto testEnd;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;fprintf(stderr, "Generate ECC key pair suceed !\n");&lt;BR /&gt;
	#ifdef DUMP&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;data_dump("Private Key", pPrivate, prilen);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;data_dump("Public Key", pPublic, publen);&lt;BR /&gt;
	#endif&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;//get random digest&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;pDigst = (IppsBigNumState*)malloc(bnCtxSize);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;ippsBigNumInit(bnSize, pDigst);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;RAND_bytes(digst, 32);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;ippsSetOctString_BN(digst, 32, pDigst);&lt;BR /&gt;
	#ifdef DUMP&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;data_dump("Digest", pDigst, bnCtxSize);&lt;BR /&gt;
	#endif&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;//do signature&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;pSignR = (IppsBigNumState*)malloc(bnCtxSize);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;pSignS = (IppsBigNumState*)malloc(bnCtxSize);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;if(!pSignR || !pSignS)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;goto testEnd;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;ippsBigNumInit(bnSize, pSignR);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;ippsBigNumInit(bnSize, pSignS);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;fprintf(stderr, "Calling ippsECCPSignDSA to do signature ...\n");&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;ret = ippsECCPSignDSA(pDigst, pPrivate, pSignR, pSignS, pCtx);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;fprintf(stderr, "ippsECCPSignDSA return: %d, It means: %s\n", ret, ippsECCGetResultString(ret));&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;if(ret)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;goto testEnd;&lt;BR /&gt;
	#ifdef DUMP&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;data_dump("SignR", pSignR, bnCtxSize);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;data_dump("SignS", pSignS, bnCtxSize);&lt;BR /&gt;
	#endif&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;//do verify&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;ret = ippsECCPSetKeyPair(NULL, pPublic, ippTrue, pCtx);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;fprintf(stderr, "ippsECCPSetKeyPair return: %d, It means: %s\n", ret, ippsECCGetResultString(ret));&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;if(ret)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;goto testEnd;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;ret = ippsECCPVerifyDSA(pDigst, pSignR, pSignS, &amp;amp;nResult, pCtx);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;fprintf(stderr, "ippsECCPSignDSA return: %d, It means: %s\n", ret, ippsECCGetResultString(ret));&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;fprintf(stderr, "ippsECCPSignDSA result: %d, It means: %s\n", nResult, ippsECCGetResultString(nResult));&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	testEnd:&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;if(pCtx)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;free(pCtx);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;if(pPrivate)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;free(pPrivate);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;if(pPublic)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;free(pPublic);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;if(pDigst)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;free(pDigst);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;if(pSignR)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;free(pSignR);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;if(pSignS)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;free(pSignS);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;return ret;&lt;BR /&gt;
	}&lt;/P&gt;

&lt;P&gt;int main()&lt;BR /&gt;
	{&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;srand(time(NULL));&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;ec_sign_verify_test();&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;return 0;&lt;BR /&gt;
	}&lt;/P&gt;</description>
      <pubDate>Wed, 03 Jan 2018 08:46:45 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Integrated-Performance/ippsECCPSignDSA-function-call-fail/m-p/1179900#M27150</guid>
      <dc:creator>kinrong_l_</dc:creator>
      <dc:date>2018-01-03T08:46:45Z</dc:date>
    </item>
    <item>
      <title>The problem resolved.</title>
      <link>https://community.intel.com/t5/Intel-Integrated-Performance/ippsECCPSignDSA-function-call-fail/m-p/1179901#M27151</link>
      <description>&lt;P&gt;The problem resolved.&lt;/P&gt;

&lt;P&gt;before calling &amp;nbsp;&lt;SPAN style="font-size: 12px; line-height: 18px;"&gt;ippsECCPSignDSA&lt;/SPAN&gt;&lt;/P&gt;

&lt;P&gt;it must set an&amp;nbsp;Ephemeral EC key pair to the ECC context.&lt;/P&gt;

&lt;P&gt;The keys can be generated and set up by the functions ECCPGenKeyPair and ECCPSetKeyPair with only&lt;BR /&gt;
	requirement that the key regPrivKey be different from the key ephPrivKey.&lt;/P&gt;</description>
      <pubDate>Thu, 04 Jan 2018 08:19:15 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Integrated-Performance/ippsECCPSignDSA-function-call-fail/m-p/1179901#M27151</guid>
      <dc:creator>kinrong_l_</dc:creator>
      <dc:date>2018-01-04T08:19:15Z</dc:date>
    </item>
    <item>
      <title>thanks for sharing this.</title>
      <link>https://community.intel.com/t5/Intel-Integrated-Performance/ippsECCPSignDSA-function-call-fail/m-p/1179902#M27152</link>
      <description>&lt;P&gt;thanks for sharing this.&amp;nbsp;kinrong.&lt;/P&gt;</description>
      <pubDate>Fri, 05 Jan 2018 03:13:09 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Integrated-Performance/ippsECCPSignDSA-function-call-fail/m-p/1179902#M27152</guid>
      <dc:creator>Chao_Y_Intel</dc:creator>
      <dc:date>2018-01-05T03:13:09Z</dc:date>
    </item>
    <item>
      <title>hi kinrong,</title>
      <link>https://community.intel.com/t5/Intel-Integrated-Performance/ippsECCPSignDSA-function-call-fail/m-p/1179903#M27153</link>
      <description>&lt;P&gt;hi kinrong,&lt;/P&gt;

&lt;P&gt;the right sequence of calls is described in the manual, the corrected code (that works fine) is below.&lt;/P&gt;

&lt;P style="margin: 0cm 0cm 0pt;"&gt;&lt;SPAN lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 9pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"&gt;&lt;FONT color="#000000"&gt;Calling genECCKey to generate ECC key pair ...&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;

&lt;P style="margin: 0cm 0cm 0pt;"&gt;&lt;SPAN lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 9pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"&gt;&lt;FONT color="#000000"&gt;Generate ECC key pair suceed !&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;

&lt;P style="margin: 0cm 0cm 0pt;"&gt;&lt;SPAN lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 9pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"&gt;&lt;FONT color="#000000"&gt;Calling ippsECCPSignDSA to do signature ...&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;

&lt;P style="margin: 0cm 0cm 0pt;"&gt;&lt;SPAN lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 9pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"&gt;&lt;FONT color="#000000"&gt;ippsECCPSignDSA return: 0, It means: Validation pass successfully&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;

&lt;P style="margin: 0cm 0cm 0pt;"&gt;&lt;SPAN lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 9pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"&gt;&lt;FONT color="#000000"&gt;ippsECCPSetKeyPair return: 0, It means: Validation pass successfully&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;

&lt;P style="margin: 0cm 0cm 0pt;"&gt;&lt;SPAN lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 9pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"&gt;&lt;FONT color="#000000"&gt;ippsECCPSignDSA return: 0, It means: Validation pass successfully&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;

&lt;P style="margin: 0cm 0cm 0pt;"&gt;&lt;SPAN lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 9pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"&gt;&lt;FONT color="#000000"&gt;ippsECCPSignDSA result: 0, It means: Validation pass successfully&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;

&lt;P style="margin: 0cm 0cm 0pt;"&gt;&lt;SPAN lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 9pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"&gt;&lt;FONT color="#000000"&gt;Press any key to continue . . .&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;

&lt;P style="margin: 0cm 0cm 0pt;"&gt;&lt;SPAN lang="EN-US" style="color: rgb(31, 73, 125); font-family: &amp;quot;Calibri&amp;quot;,sans-serif; font-size: 11pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;

&lt;P style="margin: 0cm 0cm 0pt;"&gt;&lt;SPAN lang="EN-US" style="color: rgb(31, 73, 125); font-family: &amp;quot;Calibri&amp;quot;,sans-serif; font-size: 11pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"&gt;The root of the problem – incorrect sequence of IPP calls&lt;/SPAN&gt;&lt;/P&gt;

&lt;P style="margin: 0cm 0cm 0pt;"&gt;&lt;SPAN lang="EN-US" style="color: rgb(31, 73, 125); font-family: &amp;quot;Calibri&amp;quot;,sans-serif; font-size: 11pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"&gt;regards, Igor&lt;/SPAN&gt;&lt;/P&gt;

&lt;P style="margin: 0cm 0cm 0pt;"&gt;&amp;nbsp;&lt;/P&gt;

&lt;PRE class="brush:cpp;"&gt;#include &amp;lt;stdlib.h&amp;gt;
#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;ctype.h&amp;gt;
#include &amp;lt;time.h&amp;gt;
#include "ippcp.h"

#define MAX_RETRY 20
#define RAND_SEED_BYTES 32
#define MAX_RAND_BITS 512
#define BYTES2U32LEN(n) ((n + sizeof(Ipp32u) - 1) / sizeof(Ipp32u))

void data_dump(char *prompt, unsigned char *data, int len)
{
&amp;nbsp;&amp;nbsp; int i;
&amp;nbsp;&amp;nbsp; int prev;
&amp;nbsp;&amp;nbsp; int curr; 
&amp;nbsp;&amp;nbsp; fprintf(stderr, "[%s] [length = %d]\n", prompt, len);
&amp;nbsp;&amp;nbsp; prev = curr = 0;
&amp;nbsp;&amp;nbsp; for (i = 0; i &amp;lt; len; i++) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (i == (prev + 16)) { 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i = prev;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; curr = prev + 16;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf(stderr, "&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp; ");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (; i &amp;lt; curr; i++)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (isprint(data&lt;I&gt;))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf(stderr, "%c", data&lt;I&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf(stderr, " ");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf(stderr, "\n");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; prev = curr;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf(stderr, "%02x ", data&lt;I&gt;); 
&amp;nbsp;&amp;nbsp; }
&amp;nbsp;
&amp;nbsp;&amp;nbsp; if (i != curr) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; curr = i;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (; i &amp;lt; (prev + 16); i++)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf(stderr, "&amp;nbsp;&amp;nbsp; ");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf(stderr, "&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp; ");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (i = prev ; i &amp;lt; curr; i++) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (isprint(data&lt;I&gt;))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf(stderr, "%c", data&lt;I&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf(stderr, " ");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp; fprintf(stderr, "\n");
&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp; fflush(stderr);
}
static void RAND_bytes(Ipp8u *randData, int nBytes)
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; int i, round;
&amp;nbsp;&amp;nbsp;&amp;nbsp; int *pRnd = (int *)randData;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; round = (nBytes + sizeof(int) - 1) / sizeof(int);
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; for(i = 0; i &amp;lt; round; i++){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *pRnd = rand();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pRnd++;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
#ifdef DUMP
&amp;nbsp;&amp;nbsp;&amp;nbsp; data_dump("Random", randData, nBytes);
#endif&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; return;
}
static IppsPRNGState* newRandCtx()
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; IppsPRNGState *pRndCtx = NULL;
&amp;nbsp;&amp;nbsp;&amp;nbsp; int rndCtxSize, bnCtxSize;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IppStatus ret;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IppsBigNumState* bnTmp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Ipp8u tmpSeed[RAND_SEED_BYTES] = {0};&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; ippsPRNGGetSize(&amp;amp;rndCtxSize);
&amp;nbsp;&amp;nbsp;&amp;nbsp; if(rndCtxSize &amp;amp; 0x07)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rndCtxSize = ((rndCtxSize &amp;gt;&amp;gt; 3) + 1) &amp;lt;&amp;lt; 3;
&amp;nbsp;&amp;nbsp;&amp;nbsp; pRndCtx = (IppsPRNGState*)malloc(rndCtxSize);
&amp;nbsp;&amp;nbsp;&amp;nbsp; if(!pRndCtx){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return NULL;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; ret = ippsPRNGInit(MAX_RAND_BITS, pRndCtx);
&amp;nbsp;&amp;nbsp;&amp;nbsp; if(ippStsNoErr != ret){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf(stderr, "ippsPRNGInit fial: %s\n", ippcpGetStatusString(ret));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; free(pRndCtx);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pRndCtx = NULL;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return NULL;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; ippsBigNumGetSize(BYTES2U32LEN(RAND_SEED_BYTES), &amp;amp;bnCtxSize);
&amp;nbsp;&amp;nbsp;&amp;nbsp; bnTmp = (IppsBigNumState*) malloc(bnCtxSize);
&amp;nbsp;&amp;nbsp;&amp;nbsp; if(bnTmp){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RAND_bytes(tmpSeed, RAND_SEED_BYTES);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ippsBigNumInit(BYTES2U32LEN(RAND_SEED_BYTES), bnTmp);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ippsSetOctString_BN(tmpSeed, RAND_SEED_BYTES, bnTmp);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ippsPRNGSetSeed(bnTmp, pRndCtx);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; free(bnTmp);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return pRndCtx;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }else{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; free(pRndCtx);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return NULL;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
}
static int genECCKey(IppsBigNumState* priKey, IppsECCPPointState* pubKey, const IppsECCPState* pCtx)
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; IppStatus ret = -1;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IppsPRNGState *pRndCtx;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; int i;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; pRndCtx = newRandCtx();
&amp;nbsp;&amp;nbsp;&amp;nbsp; if(!pRndCtx)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return -1;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; for(i = 0; i &amp;lt; MAX_RETRY; i++){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ret = ippsECCPGenKeyPair(priKey, pubKey, pCtx, ippsPRNGen, pRndCtx);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(ippStsNoErr == ret)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; free(pRndCtx);
&amp;nbsp;&amp;nbsp;&amp;nbsp; return ret;
}
int ec_sign_verify_test()
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; int prilen, publen;
&amp;nbsp;&amp;nbsp;&amp;nbsp; int bnSize, bnCtxSize;
&amp;nbsp;&amp;nbsp;&amp;nbsp; int ret = -1, nSize;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IppECResult nResult;
&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned char digst[32];
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; IppsBigNumState *pPrivate = NULL, *pDigst = NULL, *pSignR = NULL, *pSignS = NULL;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IppsECCPPointState* pPublic = NULL;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IppsECCPState* pCtx;

&amp;nbsp;&amp;nbsp;&amp;nbsp; /* gres */IppsBigNumState *pPrivateE = NULL;
&amp;nbsp;&amp;nbsp;&amp;nbsp; /* gres */IppsECCPPointState* pPublicE = NULL;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; //init ECC CTX
&amp;nbsp;&amp;nbsp;&amp;nbsp; ippsECCPGetSizeStd256r1(&amp;amp;nSize);
&amp;nbsp;&amp;nbsp;&amp;nbsp; pCtx = (IppsECCPState*)malloc(nSize);
&amp;nbsp;&amp;nbsp;&amp;nbsp; if(pCtx){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ippsECCPInitStd256r1(pCtx);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ippsECCPSetStd256r1(pCtx);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ippsECCPBindGxyTblStd256r1(pCtx);
&amp;nbsp;&amp;nbsp;&amp;nbsp; }else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; goto testEnd;
&amp;nbsp;&amp;nbsp;&amp;nbsp; //generate public &amp;amp; private key
&amp;nbsp;&amp;nbsp;&amp;nbsp; bnSize = BYTES2U32LEN(32);
&amp;nbsp;&amp;nbsp;&amp;nbsp; ippsBigNumGetSize(bnSize, &amp;amp;bnCtxSize);
&amp;nbsp;&amp;nbsp;&amp;nbsp; prilen = bnCtxSize;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ippsECCPPointGetSize(256, &amp;amp;publen);&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; pPrivate = (IppsBigNumState*)malloc(prilen);
&amp;nbsp;&amp;nbsp;&amp;nbsp; pPublic = (IppsECCPPointState*)malloc(publen);
&amp;nbsp;&amp;nbsp;&amp;nbsp; /* gres */ pPrivateE = (IppsBigNumState*)malloc(prilen);
&amp;nbsp;&amp;nbsp;&amp;nbsp; /* gres */ pPublicE = (IppsECCPPointState*)malloc(publen);
&amp;nbsp;&amp;nbsp;&amp;nbsp; if(!pPrivate || !pPublic /* gres */ || !pPrivateE || !pPublicE)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; goto testEnd;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ippsBigNumInit(bnSize, pPrivate);
&amp;nbsp;&amp;nbsp;&amp;nbsp; ippsECCPPointInit(256, pPublic);
&amp;nbsp;&amp;nbsp;&amp;nbsp; ippsBigNumInit(bnSize, pPrivateE);
&amp;nbsp;&amp;nbsp;&amp;nbsp; ippsECCPPointInit(256, pPublicE);
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf(stderr, "Calling genECCKey to generate ECC key pair ...\n");
&amp;nbsp;&amp;nbsp;&amp;nbsp; ret = genECCKey(pPrivate, pPublic, pCtx);
&amp;nbsp;&amp;nbsp;&amp;nbsp; /* gres: ephemeral keys */ genECCKey(pPrivateE, pPublicE, pCtx);
&amp;nbsp;&amp;nbsp;&amp;nbsp; if(ippStsNoErr != ret)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; goto testEnd;
&amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf(stderr, "Generate ECC key pair suceed !\n");
#ifdef DUMP
&amp;nbsp;&amp;nbsp;&amp;nbsp; data_dump("Private Key", pPrivate, prilen);
&amp;nbsp;&amp;nbsp;&amp;nbsp; data_dump("Public Key", pPublic, publen);
#endif&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; //get random digest
&amp;nbsp;&amp;nbsp;&amp;nbsp; pDigst = (IppsBigNumState*)malloc(bnCtxSize);
&amp;nbsp;&amp;nbsp;&amp;nbsp; ippsBigNumInit(bnSize, pDigst);
&amp;nbsp;&amp;nbsp;&amp;nbsp; RAND_bytes(digst, 32);
&amp;nbsp;&amp;nbsp;&amp;nbsp; ippsSetOctString_BN(digst, 32, pDigst);
#ifdef DUMP
&amp;nbsp;&amp;nbsp;&amp;nbsp; data_dump("Digest", pDigst, bnCtxSize);
#endif
&amp;nbsp;&amp;nbsp;&amp;nbsp; //do signature
&amp;nbsp;&amp;nbsp;&amp;nbsp; pSignR = (IppsBigNumState*)malloc(bnCtxSize);
&amp;nbsp;&amp;nbsp;&amp;nbsp; pSignS = (IppsBigNumState*)malloc(bnCtxSize);
&amp;nbsp;&amp;nbsp;&amp;nbsp; if(!pSignR || !pSignS)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; goto testEnd;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ippsBigNumInit(bnSize, pSignR);
&amp;nbsp;&amp;nbsp;&amp;nbsp; ippsBigNumInit(bnSize, pSignS);
&amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf(stderr, "Calling ippsECCPSignDSA to do signature ...\n");
&amp;nbsp;&amp;nbsp;&amp;nbsp; /* gres set ephemeral keys: */ ippsECCPSetKeyPair(pPrivateE, pPublicE, ippFalse, pCtx);
&amp;nbsp;&amp;nbsp;&amp;nbsp; ret = ippsECCPSignDSA(pDigst, pPrivate, pSignR, pSignS, pCtx);
&amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf(stderr, "ippsECCPSignDSA return: %d, It means: %s\n", ret, ippsECCGetResultString(ret));
&amp;nbsp;&amp;nbsp;&amp;nbsp; if(ret)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; goto testEnd;
#ifdef DUMP
&amp;nbsp;&amp;nbsp;&amp;nbsp; data_dump("SignR", pSignR, bnCtxSize);
&amp;nbsp;&amp;nbsp;&amp;nbsp; data_dump("SignS", pSignS, bnCtxSize);
#endif
&amp;nbsp;&amp;nbsp;&amp;nbsp; //do verify 
&amp;nbsp;&amp;nbsp;&amp;nbsp; ret = ippsECCPSetKeyPair(NULL, pPublic, ippTrue, pCtx);
&amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf(stderr, "ippsECCPSetKeyPair return: %d, It means: %s\n", ret, ippsECCGetResultString(ret));
&amp;nbsp;&amp;nbsp;&amp;nbsp; if(ret)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; goto testEnd;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; ret = ippsECCPVerifyDSA(pDigst, pSignR, pSignS, &amp;amp;nResult, pCtx);
&amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf(stderr, "ippsECCPSignDSA return: %d, It means: %s\n", ret, ippsECCGetResultString(ret));
&amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf(stderr, "ippsECCPSignDSA result: %d, It means: %s\n", nResult, ippsECCGetResultString(nResult));
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
testEnd:
&amp;nbsp;&amp;nbsp;&amp;nbsp; if(pCtx)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; free(pCtx);
&amp;nbsp;&amp;nbsp;&amp;nbsp; if(pPrivate)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; free(pPrivate);
&amp;nbsp;&amp;nbsp;&amp;nbsp; if(pPublic)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; free(pPublic);
&amp;nbsp;&amp;nbsp;&amp;nbsp; if(pPrivateE) /* gres */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; free(pPrivateE);
&amp;nbsp;&amp;nbsp;&amp;nbsp; if(pPublicE)&amp;nbsp; /* gres */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; free(pPublicE);
&amp;nbsp;&amp;nbsp;&amp;nbsp; if(pDigst)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; free(pDigst);
&amp;nbsp;&amp;nbsp;&amp;nbsp; if(pSignR)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; free(pSignR);
&amp;nbsp;&amp;nbsp;&amp;nbsp; if(pSignS)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; free(pSignS);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; return ret;
}
int main()
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; srand(time(NULL));
&amp;nbsp;&amp;nbsp;&amp;nbsp; ec_sign_verify_test();
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;
}
&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/PRE&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 19 Jan 2018 08:12:24 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Integrated-Performance/ippsECCPSignDSA-function-call-fail/m-p/1179903#M27153</guid>
      <dc:creator>Igor_A_Intel</dc:creator>
      <dc:date>2018-01-19T08:12:24Z</dc:date>
    </item>
    <item>
      <title>thanks for you,this is</title>
      <link>https://community.intel.com/t5/Intel-Integrated-Performance/ippsECCPSignDSA-function-call-fail/m-p/1179904#M27154</link>
      <description>&lt;P&gt;thanks for you,this is important to me&lt;/P&gt;</description>
      <pubDate>Tue, 26 May 2020 01:37:34 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Integrated-Performance/ippsECCPSignDSA-function-call-fail/m-p/1179904#M27154</guid>
      <dc:creator>Tom__Jimmy</dc:creator>
      <dc:date>2020-05-26T01:37:34Z</dc:date>
    </item>
  </channel>
</rss>

