[T106][ZXW-22]7520V3SCV2.01.01.02P42U09_VEC_V0.8_AP_VEC origin source commit

Change-Id: Ic6e05d89ecd62fc34f82b23dcf306c93764aec4b
diff --git a/ap/lib/libkey/auth_device_key.c b/ap/lib/libkey/auth_device_key.c
new file mode 100644
index 0000000..c6613bb
--- /dev/null
+++ b/ap/lib/libkey/auth_device_key.c
@@ -0,0 +1,120 @@
+/************************************************************************
+*¹¦ÄܽéÉÜ£ºÓû§Ä£Ê½ÇÐÑз¢Ä£Ê½¼øÈ¨
+*¸ºÔðÈË£º
+*±¸·ÝÈË£º
+*ÐÞ¸ÄÈÕ£º2019/9/20
+*ÐÞ¸ÄÄÚÈÝ£º
+*°æ±¾ºÅ£ºv1.0
+************************************************************************/
+#include <stdio.h>
+#include <unistd.h>
+#include <getopt.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#include <strings.h>
+#include <sys/types.h>
+#include <assert.h>
+#include "os_type_def.h"
+#include "RONvParam_AMT.h"
+#include "libcpnv.h"
+
+int auth_device_key_init_value(void)
+{
+	/*³õʼֵΪ0´ò¿ªÑз¢Ä£Ê½ÐèÃÜÂëÇл»¹¦ÄÜ£¬Ä¬ÈÏΪ1²»´ò¿ª*/
+	//return 0;
+	return 1;
+}
+
+int verify_device_key(char *device_key,int key_len,char *seed,int seed_len)
+{
+	int verify_result = auth_device_key_init_value();
+	//char myInit[16] = "ZXIC-TSP";
+	
+	//»ñÈ¡IMEIºÅ
+	unsigned int retCode =  CPNV_ERROR;
+    unsigned char imei_bcd[8]= {0};
+	int abImeiindex = 0,imeistrindex = 0;
+    char imeistr[2*8] = {0};
+	int i = 0;
+
+	if((device_key == NULL)||(key_len != 6)||(seed == NULL)||(seed_len != 8))
+	{
+    	printf("parameter error!\r\n");
+		return verify_result;
+	}
+	printf("parameter device key = %s,key_len=%d,seed = %s,seed_len=%d\r\n",device_key,key_len,seed,seed_len);
+	retCode = cpnv_NvItemRead(OS_FLASH_AMT_COMM_RO_IMEI_ADDRESS, (unsigned char *)imei_bcd, OS_FLASH_AMT_COMM_RO_IMEI_SIZE);
+    printf("retCode = %d\r\n",retCode );
+    if(CPNV_ERROR == retCode )
+    {
+        printf("read imei fail!\r\n");
+        return verify_result; //»ñÈ¡imeiºÅʧ°Ü
+    }
+    #if 0
+	for (i = 0; i < sizeof(imei_bcd); i++)
+	{
+		printf("imei_bcd[%d] = %02x\r\n",i,imei_bcd[i]);
+	}
+    
+    for (abImeiindex=0; abImeiindex< 8-1; abImeiindex++,imeistrindex+=2)
+    {
+        imeistr[imeistrindex] = (imei_bcd[abImeiindex]&0x0F) + '0';
+        imeistr[imeistrindex+1] = ((imei_bcd[abImeiindex]&0xF0)>>4)+ '0';
+    }
+    
+    imeistr[2*8-2]=(imei_bcd[8-1]&0x0F)+ '0';
+    imeistr[2*8-1] = '\0';
+
+	printf("imei = %s\r\n",imeistr);
+	#endif
+	
+    imei_bcd[7] |= 0xF0;
+	for (i = 0; i < sizeof(imei_bcd); i++)
+	{
+		imei_bcd[i] += seed[i];
+	}
+
+	for (i = 0; i < sizeof(imei_bcd); i++)
+	{
+		printf("imei_bcd[%d] = %02x\r\n",i,imei_bcd[i]);
+	}
+
+	unsigned int crc = crc32(0, imei_bcd, sizeof(imei_bcd));
+	printf("crc = %02x\r\n",crc);
+
+	char buf[16] = { 0 };
+
+	for (i = 0; i < 8; i++)
+	{
+		buf[i] = ((crc >> (28 - i * 4)) & 0xF);
+		if (buf[i] > 9)
+		{
+			buf[i] = buf[i] + 'A' - 10;
+		}
+		else
+		{
+			buf[i] = buf[i] + '0';
+		}
+	}
+
+	//printf("buf = %s\r\n",buf);
+
+	printf("current device key = %s\r\n",buf+2);
+
+	if(strcmp(buf+2,device_key)== 0)
+	{
+		verify_result = 1;
+		printf("verify device key success!verify_result=%d\r\n",verify_result);
+	}
+	else
+	{
+		printf("verify device key fail!verify_result=%d\r\n",verify_result);
+	}
+	
+	return verify_result;
+}
+
+
+