Index: yc_rsa.c
===================================================================
--- /YC3121_SDK/fw/crypt/yc_rsa.c	(revision 635)
+++ /YC3121_SDK/fw/crypt/yc_rsa.c	(working copy)
@@ -365,7 +365,7 @@
   * @param	p_rng		:true random number generation para
   * @retval  RET_RSA_KEYGEN_SUCCESS or RET_RSA_RANDNUM_NOT_ACCEPT
   */
-uint32_t RSA_GenerateKey(RSA_PrivateKeyTypeDef *para, uint32_t exponent, uint32_t nbits,
+uint32_t _RSA_GenerateKey(RSA_PrivateKeyTypeDef *para, uint32_t exponent, uint32_t nbits,
 							rng_callback f_rng, void *p_rng)
 {
 //	uint8_t p_t[128] = {0},q_t[128] = {0};
@@ -414,11 +414,37 @@
 	//generate p and q
 	RSA_GeneratePrime((uint32_t *)para->p,nbits>>1,f_rng, p_rng);
 	RSA_GeneratePrime((uint32_t *)para->q,nbits>>1,f_rng, p_rng);
+#ifdef debug
+	MyPrintf("\n p: \n");
+	for(uint32_t i=0;i<para->bytes/2;i++)
+	{
+		MyPrintf("%02x ",*((uint8_t*)(para->p) + i));
+	}
 
+	MyPrintf("\n q: \n");
+	for(uint32_t i=0;i<para->bytes/2;i++)
+	{
+		MyPrintf("%02x ",*((uint8_t*)(para->q) + i));
+	}
+#endif
 	return RSA_CompleteKey_e(para, f_rng, p_rng);
 	
 }
 
+uint32_t RSA_GenerateKey(RSA_PrivateKeyTypeDef *para, uint32_t exponent, uint32_t nbits,
+							rng_callback f_rng, void *p_rng)
+{
+	uint8_t i = 100;
+	uint32_t ret = 0;
+
+	while (i--)
+	{
+		ret = _RSA_GenerateKey(para, exponent, nbits, f_rng, p_rng);
+		if (ret == RET_RSA_KEYGEN_SUCCESS) break;
+	}
+
+	return ret;
+}
 
 /**
   * @method	RSA_Public
@@ -1588,42 +1614,39 @@
 	uint32_t count;
 	uint32_t len = nbits>>5;
 	uint32_t Grand_p_t[32] = {0};
-	
- 	uint32_t Geta_t[32] = {0xdb4decf3, 0x19a4952d, 0xf48622b7, 0xa6639a70,0x0584177a, 0x9cdced3a, 0x1ba9b3f3, 0xee67d4f2,0x18d42169, 0x774d18ec, 0x9b3a296a, 0xb8799127,0x91b35653, 0x8db83803, 0x99d6663a, 0x62f6fb1b,0x9574f2fc, 0x2ce37cda, 0x98e09d12, 0x58ac684a,0x22cd66e1, 0xfbb8fefb, 0xbe0dddb3, 0x11b48108,0x2e376b25, 0x904742a8, 0xfbde1368, 0x811d8558,0x25366e6a, 0x8d02e7a5, 0xd4d9e03b, 0x0000f6c6};		
-	uint32_t Gpi_t[32] = {0x333c6dff, 0x3c859740, 0x83a9c99d, 0x0019d278,0xf9b5f56e, 0x295d014e, 0x54b7c0a6, 0xb0f3b0a1,0xe94a9339, 0xfed33126, 0xf236e4cf, 0x86359d2a,0x0ff89ce9, 0x779c2d92, 0xdebc47af, 0x71968982,0x3014e5fc, 0xf79cd329, 0x3417567c, 0x180ab163,0x9001f315, 0x5a0dc0b9, 0x6c5abe37, 0xeab6ece4,0x3bdf99d9, 0x75e2e152, 0x9dbb62dc, 0x3cd3613b,0x021900cb, 0x62e8ee47, 0x541b773d, 0x4af7b507}; 
-	uint32_t Gro_t[32] = {0x1c448bcb, 0x5b31a033, 0xf8ad017e, 0x6604c54d,0xd1dd06d7, 0x8abfa495, 0xaeb13ddb, 0x08130c4c,0x72f69d52, 0xfcbd0782, 0x5ceb49bc, 0xa47ae67c,0x65ddef7c, 0xd68e963b, 0x6603097e, 0x1d58520b,0xc6512474, 0x6ad0b2cb, 0x1b179a0f, 0x8f8c603e,0x5d6c62b4, 0xc681a59a, 0x59d58b30, 0xc0fab2b1,0xc4c73409, 0x55a42fce, 0xf98a9e7d, 0xf095b2d8,0xfa647def, 0xd67d82d8, 0x45dc8ec2, 0xb504ff98};
-	
+
+ 	uint32_t Geta_t[32] = {0xdb4decf3, 0x19a4952d, 0xf48622b7, 0xa6639a70,0x0584177a, 0x9cdced3a, 0x1ba9b3f3, 0xee67d4f2,0x18d42169, 0x774d18ec, 0x9b3a296a, 0xb8799127,0x91b35653, 0x8db83803, 0x99d6663a, 0x62f6fb1b,0x9574f2fc, 0x2ce37cda, 0x98e09d12, 0x58ac684a,0x22cd66e1, 0xfbb8fefb, 0xbe0dddb3, 0x11b48108,0x2e376b25, 0x904742a8, 0xfbde1368, 0x811d8558,0x25366e6a, 0x8d02e7a5, 0xd4d9e03b, 0x0000f6c6};
+	uint32_t Gpi_t[32]  = {0x333c6dff, 0x3c859740, 0x83a9c99d, 0x0019d278,0xf9b5f56e, 0x295d014e, 0x54b7c0a6, 0xb0f3b0a1,0xe94a9339, 0xfed33126, 0xf236e4cf, 0x86359d2a,0x0ff89ce9, 0x779c2d92, 0xdebc47af, 0x71968982,0x3014e5fc, 0xf79cd329, 0x3417567c, 0x180ab163,0x9001f315, 0x5a0dc0b9, 0x6c5abe37, 0xeab6ece4,0x3bdf99d9, 0x75e2e152, 0x9dbb62dc, 0x3cd3613b,0x021900cb, 0x62e8ee47, 0x541b773d, 0x4af7b507};
+	uint32_t Gro_t[32]  = {0x1c448bcb, 0x5b31a033, 0xf8ad017e, 0x6604c54d,0xd1dd06d7, 0x8abfa495, 0xaeb13ddb, 0x08130c4c,0x72f69d52, 0xfcbd0782, 0x5ceb49bc, 0xa47ae67c,0x65ddef7c, 0xd68e963b, 0x6603097e, 0x1d58520b,0xc6512474, 0x6ad0b2cb, 0x1b179a0f, 0x8f8c603e,0x5d6c62b4, 0xc681a59a, 0x59d58b30, 0xc0fab2b1,0xc4c73409, 0x55a42fce, 0xf98a9e7d, 0xf095b2d8,0xfa647def, 0xd67d82d8, 0x45dc8ec2, 0xb504ff98};
+
 	uint32_t RSA_CLK = 0;
-	
+
 	RSA_CLK = SYSCTRL_RSACLK;
 	SYSCTRL_RSACLK = 7;
-	
+
 	uint32_t *rand = Grand_p_t;
  	rsa_prime *prime = NULL;
 	rsa_prime prime_t;
- 	
 
+loop:
 	(*f_rng)((uint8_t *)Grand_p_t ,128,p_rng);
  //	(*f_rng)((uint8_t *)Geta_t,128,p_rng);
 //	(*f_rng)((uint8_t *)Gpi_t,128,p_rng);
-//	(*f_rng)((uint8_t *)Gro_t,128,p_rng);	
+//	(*f_rng)((uint8_t *)Gro_t,128,p_rng);
 
 	prime_t.eta = Geta_t;
 	prime_t.pi = Gpi_t;
-	prime_t.ro = Gro_t;	
+	prime_t.ro = Gro_t;
 	prime = &prime_t;
-	
+
 	// to get c, c is relatively prime to lots of small prime numbers.
-loop:
-	calc_div(NULL, c, rand, prime->pi, len, len); //ȡģ
-//calc_div(NULL, rrrrc, rand, prime->pi, len, len); 
-//while(1);
+
+	calc_div(NULL, c, rand, prime->pi, len, len);
 
 	count = 1000;
 	while(calc_modinv(NULL, c, prime->eta, len) != RET_CALC_IMPLEMENT_SUCCESS)
-	{//c and eta �Ƿ���
+	{//c and eta
 		if(count == 0)
-//while(1);
 			goto loop;            //to prevent count from endless loop
 		calc_add(c,c,(volatile unsigned int *)CONST_LONG_ONE,len);
 		count--;
@@ -1632,56 +1655,26 @@
 	count = 1000;
 	while(1)
 	{
-//		uart_txd((byte *)&count,4);
-//	 	dma_wait(DMACH_UART);
- 		
 		if(count == 0)
-//while(1);
 			goto loop;
 		calc_add(result, c, prime->ro, len);
-		if((result[0] & 1) ==0) //����
+		if((result[0] & 1) ==0)
 		{
-//			uart_txd((byte *)c,128);
 			calc_add(result, result, prime->eta, len);
-
-//			uart_txd_r(1,c,128);
 		}
-//uart_txd_r(0x66,result,128);		
-		if(rsa_verifyprime(result, len, 2)!=RET_PRIME_CHECK_PASS)//�Ƿ�Ϊ2�ı���
+		if(rsa_verifyprime(result, len, 2)!=RET_PRIME_CHECK_PASS)
 		{
-//			uart_txd((byte *)c,128);
-//			uart_txd_r(0xff, prime->pi,128);
 			calc_modadd(c, c, c, prime->pi, len);
-/*
-				carry=calc_add(c,c,c,len);                  //a+b
-				uart_txd_r(0x4f,c,128);
-				com = mem_cmp(c, prime->pi,len);
-				uart_txd_r(0x8f,(uint32_t *)&com,4);
-			if (carry==1 || com!=SMALLER)  //if a+b>=p
-				{
-					calc_sub(c,c, prime->pi,len);               //then a+b-p
-					uart_txd_r(0xf,c,128);
-				}
-*/			
-//			uart_txd_r(2,c,128);
-//			break;
-			}
-			else if(rsa_verifyprime(result, len, 3) != RET_PRIME_CHECK_PASS)//�Ƿ�Ϊ3�ı���
-				{
-	//				uart_txd((byte *)c,128);
-					calc_modadd(c, c, c, prime->pi, len);
-	//				uart_txd_r(3,c,128);
-				}
-				else
-					break;
-					
-		
-//		if(count == 1000)
-//			break;
+		}
+		else if(rsa_verifyprime(result, len, 3) != RET_PRIME_CHECK_PASS)
+		{
+			calc_modadd(c, c, c, prime->pi, len);
+		}
+		else
+			break;
  		count--;
 	}
 	SYSCTRL_RSACLK = RSA_CLK;
-//	memcpy_r((uint8_t *)result,(uint8_t *)result,len<<2);
 	return RET_CALC_IMPLEMENT_SUCCESS;
 }
 
@@ -1853,12 +1846,12 @@
 //	}
 	else
 		cpu_close_branch_self();
-	
+
 	//w=(p-1)*(q-1)
 	key->p[0]--;
 	key->q[0]--;
 	calc_mul((uint32_t *)key->n, (uint32_t *)key->p,(uint32_t *)key->q, wlen>>1, wlen>>1);
-	
+
 	//d = e^-1 % w
 	do
 	{
@@ -1885,12 +1878,12 @@
 			}
 			calc_modinv2048((uint32_t *)key->d, (uint32_t *)key->e, (uint32_t *)key->n, 1, wlen);
 		}
-		
+
 		//(e*d)%w == 1
 		calc_mul(tmp, (uint32_t *)key->e, (uint32_t *)key->d, 1, wlen);
 		calc_div(NULL, tmp, tmp, (uint32_t *)key->n, wlen+1, wlen);
 	} while(mem_cmp2(tmp, 1, wlen) != EQUAL);
-	
+
 	//d > n^0.292
 	tmp[0] = wlen>>4;
 	tmp[1] = tmp[0]<<2;

Index: yc_crypt.lib
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
