security_huks/service/huks_standard/huks_engine/core/hks_rkc_rw解读

这段代码涉及密钥管理的各个关键步骤,包括信息提取、验证和保存。提取模块从ksf文件中抽取fileFlag、时间戳、密钥和摘要等数据;验证模块通过哈希算法确保数据完整性;填充模块将信息填充到结构体中;读写模块则实现了密钥数据的读取和写入。这些操作确保了密钥的安全存储和使用。
摘要由CSDN通过智能技术生成

总体概述

这部分代码是信息的提取填充与保存模块,将密钥所需要的信息分函数分块提取,并进行信息摘要的验证保证数据的完整性,然后本地化保存在密钥文件中,实现保存

代码解读

1.信息提取模块

这一模块的代码大多是检查并从所给参数ksfFromFile中提取相应参数

1.1RkcExtractKsfFileFlag

函数功能:提取并检查fileFlag

函数实现:通过memcpy_s和HksMemCmp和调用封装好的Rkc函数来进行参数的提取和检查

在这里插入图片描述

1.2RkcExtractTime

函数功能:从ksfFromFile中提取年月日时分秒到time中

由于提取全部使用了memcpy_s配合offset进行数据的读入和拷贝,所以这里不放源码

1.3 RkcExtractKsfRk

函数功能:从ksfFromFile中提取各类信息存入ksfData中

信息包括:

  • version
  • CreatedTime
  • ExpiredTime
  • two material
  • iteratorNumber
  • salt
  • hashAlg
  • rkRsv(reserve field)

调用了函数RkcExtractTime进行两次时间的获取,其余的信息通过memcpy_s进行拷贝

1.4RkcExtractKsfMk

函数功能:从ksfFromFile提取信息入ksfData

Mk类型

信息包括:

  • CreatedTime
  • ExpiredTime
  • EncryptAlg
  • IV
  • cipherText
  • reserve field

初步估计封装的数据用于加解密传输的

1.5RkcExtractKsfBuf

函数功能:Buf的构造

信息包括:

  • FileFlag
  • Rk
  • Mk

函数实现:调用函数RkcExtractKsfFileFlag获取fileFlag---->调用RkcExtractKsfRk将Rk进行封装进ksfData---->调用RkcExtractKsfMk将Mk封装入ksfData---->最后调用RkcExtractKsfHash进行hash摘要的生成与验证
在这里插入图片描述

2.信息验证模块

这部分函数主要用于数据信息的验证

2.1RkcExtractKsfHash

函数功能:利用hash算法进行摘要的生成并与传入的摘要进行一致性检查
在这里插入图片描述

2.2RkcFillKsfHash

函数功能:进行hash算法摘要生成

在这里插入图片描述

3.填充模块

*这部分函数主要是针对上述的信息提取函数中获得数据的结构体将其中的数据转移到HksBlob ksfBuf所指的数据块中

3.1RkcFillKsfTime

3.2RkcFillKsfRk

3.3RkcFillKsfMk

3.4RkcFillKsfBuf

由于这四个函数与上述的信息提取的实现方法几乎一致,只是memcpy_s是从上述模块中的参数比如time,ksfBuf中获取的。同样是通过offset进行数据拷贝,所以这里不再贴代码

4.顶层读写模块

主要是对于上述信息提取和填充的顶层调用模块

4.1HksRkcReadKsf

函数功能:根据传入的ksfName获取到存储在file中的ksfData

函数实现:首先调用函数HksGetProcessName获取processName当前进程的名称---->然后构造processNameBlob和fileNameBlob---->根据两个Blob进行文件的获取---->调用函数RkcExtractKsfBuf将buf相关的数据存入ksfData

在这里插入图片描述

4.2HksRkcWriteKsf

函数功能:将ksfData中的数据写入密钥存储的文件中

int32_t HksRkcWriteKsf(const char *ksfName, const struct HksRkcKsfData *ksfData)
{
    struct HksBlob ksfBuf;
    ksfBuf.data = (uint8_t *)HksMalloc(HKS_RKC_KSF_BUF_LEN);
    if (ksfBuf.data == NULL) {
        HKS_LOG_E("Malloc ksf buffer failed!");
        return HKS_ERROR_MALLOC_FAIL;
    }
    ksfBuf.size = HKS_RKC_KSF_BUF_LEN;
    (void)memset_s(ksfBuf.data, ksfBuf.size, 0, ksfBuf.size);

    int32_t ret;
    do {
        /* Fill data into buffer */
        ret = RkcFillKsfBuf(ksfData, &ksfBuf);
        if (ret != HKS_SUCCESS) {
            HKS_LOG_E("Fill ksf buf failed! ret = 0x%X", ret);
            break;
        }

        char *processName = NULL;
        if (HksGetProcessName(&processName) != HKS_SUCCESS) {
            HKS_LOG_E("get process name failed");
            ret = HKS_ERROR_INTERNAL_ERROR;
            break;
        }
        struct HksBlob processNameBlob = { strlen(processName), (uint8_t *)processName };

        /* write buffer data into keystore file */
        const struct HksBlob fileNameBlob = { strlen(ksfName), (uint8_t *)ksfName };
        ret = HksStoreKeyBlob(&processNameBlob, &fileNameBlob, HKS_STORAGE_TYPE_ROOT_KEY, &ksfBuf);
        if (ret != HKS_SUCCESS) {
            HKS_LOG_E("Store ksf failed! ret = 0x%X", ret);
        }
    } while (0);

    (void)memset_s(ksfBuf.data, ksfBuf.size, 0, ksfBuf.size);
    HKS_FREE_BLOB(ksfBuf);
    return ret;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

国家一级假勤奋研究牲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值