您当前的位置: 首页 > 

小生叫安辰

暂无认证

  • 4浏览

    0关注

    105博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

鸿蒙源码分析(三十一)

小生叫安辰 发布时间:2021-08-16 00:15:19 ,浏览量:4

本片主要分析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;
}
关注
打赏
1635606302
查看更多评论
立即登录/注册

微信扫码登录

0.0896s