OpenHarmony解读之设备认证:pake协议-服务端响应pake start请求(2)

一、概述

本文将继续介绍服务端响应pake协议的start请求的过程,承接上文:OpenHarmony解读之设备认证:pake协议-服务端响应pake start请求(1)

二、源码分析

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

1. 在上文中创建完pake服务端对象之后,开始进入消息处理阶段,根据协议模块字段在全局分布式消息表中查询对应的消息处理函数,此处应该是proc_pake_request_message函数。
/*
函数功能:处理pake请求消息
函数参数:
    handle:hichain实例
    nav:消息头分析导航
    receive:接收的消息
    send:待发送消息地址
函数返回值:
    成功:0
    失败:error
*/
static int32_t proc_pake_request_message(struct hichain *handle, struct header_analysis *nav,
    struct message *receive, struct message *send)
#if !(defined(_CUT_PAKE_) || defined(_CUT_PAKE_SERVER_))
{
   
    DBG_OUT("Object %u proc pake %d request message", pake_server_sn(handle->pake_server), nav->msg_type);
    int32_t ret;

    if (nav->msg_type == PAKE_START_MSG) {
   //如果是start请求
        ret = send_pake_start_response(handle->pake_server, receive, send);//针对start请求构造发送响应消息
    } else if (nav->msg_type == PAKE_END_MSG) {
   //如果是end请求
        ret = send_pake_end_response(handle->pake_server, receive, send);//针对end请求发送响应消息
        if (ret == HC_OK) {
   
            handle->cb.set_session_key(&handle->identity, &handle->pake_server->service_key);//设置会话密钥为service_key
            (void)memset_s(handle->pake_server->service_key.session_key, HC_SESSION_KEY_LEN, 0, HC_SESSION_KEY_LEN);//清空会话密钥空间
        }
    } else {
   
        return HC_UNKNOW_MESSAGE;
    }
    return ret;
}
2. send_pake_start_response函数,构造针对start请求发送响应消息。
/*
函数功能:构造针对start请求发送响应消息
函数参数:
    pake_server:pake服务端对象
    receive:接收消息地址
    send:待发送消息缓冲区
函数返回值:
    成功:0
    失败:error
*/
int32_t send_pake_start_response(struct pake_server *pake_server, struct message *receive, struct message *send)
{
   
    check_ptr_return_val(pake_server, HC_INPUT_ERROR);//检查参数有效性
    check_ptr_return_val(receive, HC_INPUT_ERROR);
    check_ptr_return_val(send, HC_INPUT_ERROR);
    DBG_OUT("Receive pake start request message object %u success", pake_server_sn(pake_server));
    struct pake_start_request_data *receive_data = receive->payload;//获取start请求数据
    struct pake_start_response_data *send_data =
        (struct pake_start_response_data *)MALLOC(sizeof(struct pake_start_response_data));//申请发送缓冲区空间

    if (send_data == NULL) {
   
        LOGE("Malloc struct pake_start_response_data failed");
        send->msg_code = INFORM_MESSAGE;
        return HC_MALLOC_FAILED;
    }
    (void)memset_s(send_data, sizeof(*send_data), 0, sizeof(*send_data));//清空该空间
    int32_t ret = send_start_response(pake_server, receive_data, send_data);//构造start请求响应消息
    if (ret != HC_OK) {
   
        LOGE("Object %u called send_start_response failed, error code is %d", pake_server_sn(pake_server), ret);
        FREE(send_data
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值