/** ****************************************************************************** * @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****/