本片主要分析hks_mbedlts_common.c代码
代码分析
自定义随机数种子数组
const unsigned char g_hksRandomSeedCustom[] = {
/* H K S */
0x48, 0x4B, 0x53
};
从hks对应算法转换至mbedtls算法
参数详解
- hksAlg:hks对应的算法
- mbedtlsAlg:mbedtls库中对应的算法
int32_t HksToMbedtlsDigestAlg(const uint32_t hksAlg, uint32_t *mbedtlsAlg)
{
switch (hksAlg) {
//采用switch分支语句对应三种情况:SHA256算法,SHA384算法,SHA512算法
case HKS_DIGEST_SHA256:
*mbedtlsAlg = MBEDTLS_MD_SHA256;
break;
case HKS_DIGEST_SHA384:
*mbedtlsAlg = MBEDTLS_MD_SHA384;
break;
case HKS_DIGEST_SHA512:
*mbedtlsAlg = MBEDTLS_MD_SHA512;
break;
default:
//对其他情况算法都不支持转换
HKS_LOG_E("Unsupported digest algorithm! digestAlg: 0x%X", hksAlg);
return HKS_ERROR_INVALID_DIGEST;
}
return HKS_SUCCESS;
}
随机数种子生成器函数
参数详解:
- ctrDrbg:存放随机数
- entropy:指定的熵源
//伪随机数种子生成
int32_t HksCtrDrbgSeed(mbedtls_ctr_drbg_context *ctrDrbg, mbedtls_entropy_context *entropy)
{
mbedtls_ctr_drbg_init(ctrDrbg);
mbedtls_entropy_init(entropy);
/* use the g_hksRandomSeedCustom without string terminator */
int32_t ret = mbedtls_ctr_drbg_seed(ctrDrbg, mbedtls_entropy_func,
entropy, g_hksRandomSeedCustom, sizeof(g_hksRandomSeedCustom));
//通过mbedtls里面分装好的函数mbedtls_ctr_drbg_seed进行随机数种子的生成,将生成的随机数存在ctrDrbg。
if (ret != HKS_MBEDTLS_SUCCESS) {
HKS_LOG_E("Ctr drbg seed failed! mbedtls ret = 0x%X", ret);
mbedtls_ctr_drbg_free(ctrDrbg);
mbedtls_entropy_free(entropy);
//生成失败的检查,如果生成失败就返回错误码并且输出相关报错释放相关空间
return ret;
}
return HKS_SUCCESS;
}