河北水利局项目
This commit is contained in:
181
APP/keywd.c
Normal file
181
APP/keywd.c
Normal file
@@ -0,0 +1,181 @@
|
||||
#include "keywd.h"
|
||||
#include "MD5.h"
|
||||
#include "Flash.h"
|
||||
|
||||
|
||||
extern const u16 CRC16_Table[256];
|
||||
/*****************************************************************************
|
||||
* Function : create_keywd
|
||||
* Description : none
|
||||
* Input : u8* keyid
|
||||
* Output : None
|
||||
* Return :
|
||||
* Others :
|
||||
* Record
|
||||
* 1.Date : 20170314
|
||||
* Author : barry
|
||||
* Modification: Created function
|
||||
|
||||
*****************************************************************************/
|
||||
bool create_keywd(u8* keyid)
|
||||
{
|
||||
u8 un_id[12];
|
||||
u8 md5_id[16];
|
||||
u16 crc = 0;
|
||||
u8 index = 0;
|
||||
|
||||
if (!read_unique_id(un_id))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
MD5_code(un_id, md5_id, sizeof(un_id));
|
||||
|
||||
for (u16 i = 0; i < KEY_LEN; i++)
|
||||
{
|
||||
keyid[i] = rand()%255;
|
||||
}
|
||||
|
||||
for (u32 i = 0; i < KEY_LEN; i++)
|
||||
{
|
||||
if ((i % 32) == 0)
|
||||
{
|
||||
keyid[i] = md5_id[index++];
|
||||
|
||||
if (index >= 16)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
crc = GetCRC16(keyid, KEY_LEN -2);
|
||||
|
||||
keyid[KEY_LEN -2] = (u8)(crc %256);
|
||||
keyid[KEY_LEN -1] = (u8)(crc /256);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* Function : set_key_word
|
||||
* Description : none
|
||||
* Input : void
|
||||
* Output : None
|
||||
* Return :
|
||||
* Others :
|
||||
* Record
|
||||
* 1.Date : 20170314
|
||||
* Author : barry
|
||||
* Modification: Created function
|
||||
|
||||
*****************************************************************************/
|
||||
bool set_key_word(void)
|
||||
{
|
||||
u8 keyid[KEY_LEN];
|
||||
|
||||
for (u32 i = 0; i < KEY_LEN; i++)
|
||||
{
|
||||
if (*((u8*)(FLASH_KEY_ADDRESS + i)) != 0xFF)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
if ( create_keywd(keyid))
|
||||
{
|
||||
if (STM32_FlashPageErase(FLASH_KEY_ADDRESS) == FLH_SUCCESS)
|
||||
{
|
||||
if (STM32_FlashWrite( FLASH_KEY_ADDRESS, keyid, KEY_LEN) == FLH_SUCCESS)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* Function : check_passwd
|
||||
* Description : none
|
||||
* Input : void
|
||||
* Output : None
|
||||
* Return :
|
||||
* Others :
|
||||
* Record
|
||||
* 1.Date : 20170314
|
||||
* Author : barry
|
||||
* Modification: Created function
|
||||
|
||||
*****************************************************************************/
|
||||
bool check_passwd(void)
|
||||
{
|
||||
u8 unid[12];
|
||||
|
||||
u8 MD5_ID[16];
|
||||
u8 passwd[16];
|
||||
|
||||
u8 temp;
|
||||
|
||||
u8 index = 0;
|
||||
|
||||
u16 crc16 = 0xFFFF;
|
||||
u16 crc_read = 0;
|
||||
bool new_flash_area = TRUE;
|
||||
|
||||
if ( read_unique_id(unid))
|
||||
{
|
||||
MD5_code(unid, MD5_ID, sizeof(unid));
|
||||
}
|
||||
else
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
for (u16 i = 0; i < KEY_LEN -2; i++)
|
||||
{
|
||||
temp = *((u8*)(FLASH_KEY_ADDRESS + i));
|
||||
|
||||
if (temp != 0xFF)
|
||||
{
|
||||
new_flash_area = FALSE;
|
||||
}
|
||||
|
||||
crc16 = (crc16 >> 8 ) ^ CRC16_Table[(crc16 ^ temp) & 0xFF];
|
||||
|
||||
if ( (i % 32) == 0)
|
||||
{
|
||||
if (index < sizeof(passwd))
|
||||
{
|
||||
passwd[index++] = temp;
|
||||
}
|
||||
}
|
||||
}
|
||||
crc16 ^= 0xFFFF;
|
||||
|
||||
crc_read = *((u8*)(FLASH_KEY_ADDRESS + KEY_LEN - 2)) + *((u8*)(FLASH_KEY_ADDRESS + KEY_LEN - 1))*256;
|
||||
|
||||
if (new_flash_area == TRUE)
|
||||
{
|
||||
return set_key_word();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (crc_read == crc16)
|
||||
{
|
||||
if (cmp_datas(passwd, MD5_ID, 16))
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user