O7/Core/Src/sts_cmox_hmac_sha.c

81 lines
2.9 KiB
C

/**
******************************************************************************
* @file sts_cmox_hmac_sha.c *
* @author Yunhorn (r) Technology Limited Application Team *
* @brief Yunhorn (r) SmarToilets (r) HMAC-SHA1 Process file. *
******************************************************************************
* @attention
*
* Copyright (c) 2023 Yunhorn Technology Limited.
* Copyright (c) 2023 Shenzhen Yunhorn Technology Co., Ltd.
* All rights reserved.
******************************************************************************
*/
#include "main.h"
#include "string.h"
#include "cmox_init.h"
#include "cmox_low_level.h"
#include "stm32wlxx_hal.h"
#include "sts_cmox_hmac_sha.h"
#include "yunhorn_sts_prd_conf.h"
#include "sys_app.h"
/* Private macros ------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
const uint8_t mKey[] =
{
0x59,0x75,0x33,0x6e,0x31,0x48,0x34,0x4f,0x31,0x52,0x35,0x4e,0x39,0x53,0x32,0x54,0x36,0x53
};
uint8_t Computed_Tag_SHA1[YUNHORN_STS_AC_CODE_SIZE]={0x0};
extern volatile uint8_t sts_ac_code[YUNHORN_STS_AC_CODE_SIZE];
hmac_result_t hmac_result;
uint32_t sts_hmac_verify(void)
{
uint8_t uid[8]="";
uint32_t ret=0;
hmac_result.ac_pass = 60;
hmac_result.hmac_tag_size = 0;
GetUniqueId(uid);
ret = sts_hmac_sha1((const uint8_t *) mKey, sizeof(mKey), (const uint8_t*)(uid+4), 4, &hmac_result);
ret = memcmp(hmac_result.hmac_tag, (void *)sts_ac_code, sizeof(sts_ac_code));
hmac_result.ac_pass = (ret == 0x0)?1U:0U;
APP_LOG(TS_OFF, VLEVEL_M, "\r\nHMAC Verify Success = %u \r\n", hmac_result.ac_pass);
return ret;
}
uint32_t sts_hmac_sha1(const uint8_t *key, int key_length, const uint8_t *message, int message_length, hmac_result_t *hmac_result)
{
cmox_mac_retval_t retval=0;
size_t computed_size=0;
/* Initialize cryptographic library */
if (cmox_initialize(NULL) != CMOX_INIT_SUCCESS)
{
retval = 1;
return retval;
}
/* Compute directly the authentication tag passing all the needed parameters */
retval = cmox_mac_compute(CMOX_HMAC_SHA1_ALGO, /* Use HMAC SHA256 algorithm */
message, message_length, /* Message to authenticate */
key, key_length, /* HMAC Key to use */
NULL, 0, /* Custom data */
Computed_Tag_SHA1, /* Data buffer to receive generated authnetication tag */
sizeof(Computed_Tag_SHA1), /* Expected authentication tag size */
&computed_size); /* Generated tag size */
memcpy(hmac_result->hmac_tag, Computed_Tag_SHA1, sizeof(Computed_Tag_SHA1));
hmac_result->hmac_tag_size = computed_size;
return retval;
}
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/