124 lines
3.0 KiB
C
124 lines
3.0 KiB
C
|
/****************************************************************************
|
||
|
|
||
|
Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED.
|
||
|
|
||
|
This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT
|
||
|
be copied by any method or incorporated into another program without
|
||
|
the express written consent of Aerospace C.Power. This Information or any portion
|
||
|
thereof remains the property of Aerospace C.Power. The Information contained herein
|
||
|
is believed to be accurate and Aerospace C.Power assumes no responsibility or
|
||
|
liability for its use in any way and conveys no license or title under
|
||
|
any patent or copyright and makes no representation or warranty that this
|
||
|
Information is free from patent or copyright infringement.
|
||
|
|
||
|
****************************************************************************/
|
||
|
|
||
|
/* os_shim header files */
|
||
|
#include "os_types_api.h"
|
||
|
|
||
|
/* iot common header files */
|
||
|
#include "iot_pkt_api.h"
|
||
|
#include "iot_config_api.h"
|
||
|
#include "iot_utils_api.h"
|
||
|
#include "iot_errno_api.h"
|
||
|
#include "iot_sha1_api.h"
|
||
|
|
||
|
#if (HW_PLATFORM == HW_PLATFORM_SILICON)
|
||
|
|
||
|
#include "mbedtls/sha1.h"
|
||
|
|
||
|
#define IOT_SHA1_LEN (20)
|
||
|
|
||
|
iot_sha1_h iot_sha1_start(void)
|
||
|
{
|
||
|
iot_pkt_t *pkt = NULL;
|
||
|
mbedtls_sha1_context *ctx;
|
||
|
|
||
|
pkt = iot_pkt_alloc(sizeof(mbedtls_sha1_context), IOT_DRIVER_MID);
|
||
|
if (pkt) {
|
||
|
ctx = (mbedtls_sha1_context*)iot_pkt_put(pkt,
|
||
|
sizeof(mbedtls_sha1_context));
|
||
|
mbedtls_sha1_starts(ctx);
|
||
|
}
|
||
|
return pkt;
|
||
|
}
|
||
|
|
||
|
void iot_sha1_end(iot_sha1_h handle)
|
||
|
{
|
||
|
iot_pkt_t *pkt;
|
||
|
|
||
|
pkt = handle;
|
||
|
if (pkt) {
|
||
|
iot_pkt_free(pkt);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
uint32_t iot_sha1_update(iot_sha1_h handle, const uint8_t *data,
|
||
|
uint32_t len)
|
||
|
{
|
||
|
uint32_t ret = ERR_FAIL;
|
||
|
iot_pkt_t *pkt;
|
||
|
mbedtls_sha1_context *ctx;
|
||
|
|
||
|
pkt = handle;
|
||
|
if (pkt == NULL || iot_pkt_data_len(pkt) != sizeof(*ctx)) {
|
||
|
goto out;
|
||
|
}
|
||
|
ctx = (mbedtls_sha1_context*)iot_pkt_data(pkt);
|
||
|
mbedtls_sha1_update(ctx, data, len);
|
||
|
ret = ERR_OK;
|
||
|
out:
|
||
|
return ret;
|
||
|
}
|
||
|
|
||
|
uint32_t iot_sha1_finish(iot_sha1_h handle, uint8_t *data, uint32_t len)
|
||
|
{
|
||
|
uint32_t ret = ERR_FAIL, min_len;
|
||
|
uint8_t output[IOT_SHA1_LEN];
|
||
|
iot_pkt_t *pkt;
|
||
|
mbedtls_sha1_context *ctx;
|
||
|
|
||
|
pkt = handle;
|
||
|
if (pkt == NULL || iot_pkt_data_len(pkt) != sizeof(*ctx)) {
|
||
|
goto out;
|
||
|
}
|
||
|
ctx = (mbedtls_sha1_context*)iot_pkt_data(pkt);
|
||
|
mbedtls_sha1_finish(ctx, output);
|
||
|
min_len = min(IOT_SHA1_LEN, len);
|
||
|
os_mem_cpy(data, output, min_len);
|
||
|
ret = ERR_OK;
|
||
|
out:
|
||
|
return ret;
|
||
|
}
|
||
|
|
||
|
#else /* HW_PLATFORM == HW_PLATFORM_SILICON */
|
||
|
|
||
|
iot_sha1_h iot_sha1_start(void)
|
||
|
{
|
||
|
return NULL;
|
||
|
}
|
||
|
|
||
|
void iot_sha1_end(iot_sha1_h handle)
|
||
|
{
|
||
|
(void)handle;
|
||
|
}
|
||
|
|
||
|
uint32_t iot_sha1_update(iot_sha1_h handle, const uint8_t *data,
|
||
|
uint32_t len)
|
||
|
{
|
||
|
(void)handle;
|
||
|
(void)data;
|
||
|
(void)len;
|
||
|
return ERR_NOSUPP;
|
||
|
}
|
||
|
|
||
|
uint32_t iot_sha1_finish(iot_sha1_h handle, uint8_t *data, uint32_t len)
|
||
|
{
|
||
|
(void)handle;
|
||
|
(void)data;
|
||
|
(void)len;
|
||
|
return ERR_NOSUPP;
|
||
|
}
|
||
|
|
||
|
#endif /* HW_PLATFORM == HW_PLATFORM_SILICON */
|