OpenHarmony解读之设备认证:数据接收管理-获取HiChain实例(3)

一、概述

上一篇博客 OpenHarmony解读之设备认证:数据接收管理-获取HiChain实例(2)介绍的主要内容是构建本端的长期保存的密钥对,即重点是对函数build_self_lt_key_pair的总体分析,在上文中讲到该函数通过回调函数的方式调用位于分布式软总线模块的AuthGetProtocolParams函数进行协议参数的获取,主要是获取密钥长度、对端认证id和本端认证id。本文将继续分析build_self_lt_key_pair函数的其余内容。

二、源码分析

这一模块的源码位于:/base/security/deviceauth。

  1. 继上文,如果在函数AuthGetProtocolParams中成功获取到本端认证id,则将继续处理,否则就返回。在成功获取到本端认证id的情况下,接着调用generate_service_id函数进行处理,该函数的具体分析如下:
/*
函数功能:利用会话标识符的HC包名称和HC服务类型通过sha256哈希算法计算出哈希值,作为服务id
函数参数:
    identity:会话标识,包括会话id、HC包名称、HC服务类型以及上下文信息
函数返回值:
    成功:返回赋值后的服务id结构体
    失败:返回空的服务id结构体
详细:
//服务id结构:
struct service_id {
    uint32_t length;//长度
    uint8_t service_id[HC_SERVICE_ID_BUFF_LEN];//服务id数组
};
//sha256哈希值结构:
struct sha256_value {
    uint32_t length;//长度
    uint8_t sha256_value[HC_SHA256_LEN];//value
};
*/
struct service_id generate_service_id(const struct session_identity *identity)
{
   
    struct service_id service_id;//定义一个service_id局部变量
    (void)memset_s(&service_id, sizeof(service_id), 0, sizeof(service_id));//清空service_id地址空间
    if (identity == NULL) {
   //参数有效性检查
        LOGE("Input is null");
        return service_id;
    }

    uint32_t pack_name_len = identity->package_name.length;//获取HC包名称长度
    if ((pack_name_len == 0) || (pack_name_len > HC_PACKAGE_NAME_BUFF_LEN)) {
   //若长度为0或者HC_PACKAGE_NAME_BUFF_LEN,则直接返回空service_id
        LOGE("Pack name length is: %u", pack_name_len)<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值