OpenHarmony深度解读之设备认证:HiChain机制部分源码解析1(推荐模块之外)

一、概述

HiChain机制是OpenHarmony实现设备互联安全的一种协议机制,本文将对软总线模块涉及到的相关HiChain的接口进行一个简单的分析。处理逻辑是承接上文 OpenHarmony深度解读之分布式软总线:authmanager模块(3)/设备身份认证过程。

二、源码分析

1.在之前的文章的源码分析中,首先判断了数据包的module字段如果是MODULE_AUTH_SDK,就调用AuthProcessReceivedData函数继续处理,该函数如下:

arduino 复制代码
/*
函数功能:处理身份认证过程中接收到的数据
函数参数:
    sessionId:会话id
    data:数据负载部分首地址
    dataLen:数据长度
函数返回值:无
详细:
*/
static void AuthProcessReceivedData(uint32_t sessionId, const char *data, int dataLen)
{
    if (g_hcHandle == NULL) {//如果hichain实例对象为空,则进行初始化
        if (AuthInitHiChain(sessionId) != 0) {//初始化HiChain
            AuthDelAuthSessionBySessionId(sessionId);//根据sessionId删除该认证会话
            return;
        }
    }
    struct uint8_buff request = {(uint8_t *)data, dataLen, dataLen};//封装request数据
    if (receive_data(g_hcHandle, &request) != HC_OK) {//在其他模块继续处理该数据包
        return;
    }
}

2.在AuthProcessReceivedData函数中,首先进行HiChain的初始化,在函数AuthInitHiChain中实现,代码分析如下:

ini 复制代码
/*
函数功能:在身份认证过程中,初始化HiChain
函数参数:
    sessionId:会话id
函数返回值:
    成功:返回0
    失败:返回-1
*/
static int AuthInitHiChain(uint32_t sessionId)
{
    SOFTBUS_PRINT("[AUTH] AuthInitHiChain begin\n");
    struct session_identity serverIdentity = {
        sessionId,
        {AUTH_DEFAULT_ID_LEN, AUTH_DEFAULT_ID},//hc包名称
        {AUTH_DEFAULT_ID_LEN, AUTH_DEFAULT_ID},//hc服务类型
        0
    };
    struct hc_call_back hiChainCallback = {//初始化hc_call_back回调函数结构体
        AuthOnTransmit,
        AuthGetProtocolParams,
        AuthSetSessionKey,
        AuthSetServiceResult,
        AuthConfirmReceiveRequest
    };
    g_hcHandle = get_instance(&serverIdentity, HC_ACCESSORY, &hiChainCallback);//获取hichain实例
    if (g_hcHandle == NULL) {
        return -1;
    }
    SOFTBUS_PRINT("[AUTH] AuthInitHiChain ok\n");
    return 0;
}

DD一下: 欢迎大家关注公众号<程序猿百晓生>,可以了解到一下知识点。

erlang 复制代码
1.OpenHarmony开发基础
2.OpenHarmony北向开发环境搭建
3.鸿蒙南向开发环境的搭建
4.鸿蒙生态应用开发白皮书V2.0 & V3.0
5.鸿蒙开发面试真题(含参考答案) 
6.TypeScript入门学习手册
7.OpenHarmony 经典面试题(含参考答案)
8.OpenHarmony设备开发入门【最新版】
9.沉浸式剖析OpenHarmony源代码
10.系统定制指南
11.【OpenHarmony】Uboot 驱动加载流程
12.OpenHarmony构建系统--GN与子系统、部件、模块详解
13.ohos开机init启动流程
14.鸿蒙版性能优化指南
.......

3.位于/base/security/deviceauth模块的get_instance函数分析:

scss 复制代码
/*
函数功能:获取hichain实例
函数参数:
    identity:会话基本信息
    type:hichain设备类型
    call_back:hichain回调函数
函数返回值:
    成功:返回hichain结构体地址
    失败:返回NULL
*/
DLL_API_PUBLIC hc_handle get_instance(const struct session_identity *identity, enum hc_type type,
    const struct hc_call_back *call_back)
{
    LOGI("Begin get instance");
    if (check_identity(identity) != HC_OK) {//检查hc的基本信息是否符合规范
        LOGE("Identity error");
        return NULL;
    }
    if (check_call_back(call_back) != HC_OK) {//检查callback结构体的函数指针是否为空
        LOGE("Call back error");
        return NULL;
    }
#if !(defined(_CUT_STS_) || defined(_CUT_STS_SERVER_) || defined(_CUT_EXCHANGE_) || defined(_CUT_EXCHANGE_SERVER_))
    int32_t ret = key_info_init();//初始化密钥信息
    if (ret != HC_OK) {
        LOGE("Call key info init failed, status=%d", ret);
        return NULL;
    }
#endif
    struct hichain *hichain = (struct hichain *)MALLOC(sizeof(struct hichain));//定义一个hichain实例并为其申请空间
    if (hichain == NULL) {//申请内存失败
        LOGE("Alloc memory failed");
        return NULL;
    }
    (void)memset_s(hichain, sizeof(*hichain), 0, sizeof(*hichain));//清空该实例空间
    //初始化该hichain实例对象的相关属性
    hichain->identity = *identity;//hichain基本信息
    hichain->type = type;//hichain设备类型
    hichain->state = INIT_STATE;//hichain状态
    hichain->last_state = INIT_STATE;//hichain最终状态
    hichain->cb = *call_back;//hichain回调函数
#if !(defined(_CUT_STS_) || defined(_CUT_STS_SERVER_) || defined(_CUT_EXCHANGE_) || defined(_CUT_EXCHANGE_SERVER_))
    build_self_lt_key_pair(hichain);
#endif
    LOGI("Get instance success");
    return hichain;
}

4.初始化HiChain之后,再继续调用/base/security/deviceauth模块的receive_data函数进行数据处理。

对于receive_data函数的具体内容,涉及到大量的HiChain模块的内容,由于篇幅有限,将在接下来的文章中继续分析,敬请期待。

相关推荐
二蛋和他的大花18 分钟前
HarmonyOS运动开发:如何集成百度地图SDK、运动跟随与运动公里数记录
华为·harmonyos
SuperHeroWu736 分钟前
【HarmonyOS 5】鸿蒙页面和组件生命周期函数
华为·harmonyos·鸿蒙·自定义组件·页面·生命周期函数
憧憬一下1 小时前
stm32之DMA
stm32·单片机·嵌入式硬件·嵌入式
HarmonyOS小助手2 小时前
Flutter适配HarmonyOS 5开发知识地图
harmonyos·鸿蒙·harmonyos next·鸿蒙flutter
搞瓶可乐2 小时前
鸿蒙ArkTs实战之截图保存图片到相册,详细教程,不使用SaveButton的方法,附上源码和效果图
华为·harmonyos·arkts·保存图片·操作沙箱·鸿蒙解决方案·媒体操作
__Benco3 小时前
OpenHarmony平台驱动开发(九),MIPI DSI
人工智能·驱动开发·harmonyos
深海的鲸同学 luvi5 小时前
【HarmonyOS 5】App Linking 应用间跳转详解
华为·harmonyos·applinking·应用间跳转
Bruce_Liuxiaowei5 小时前
HarmonyOS NEXT深度解析:自研框架ArkUI-X的技术革命与跨平台实践
华为·harmonyos
25March14 小时前
如何测试 esp-webrtc-solution_solutions_doorbell_demo 例程?
物联网·webrtc·iot
仓颉编程语言19 小时前
南京大学OpenHarmony技术俱乐部正式揭牌 仓颉编程语言引领生态创新
harmonyos·鸿蒙·仓颉编程语言