鲲鹏社区首页
中文
注册
开发者
我要评分
获取效率
正确性
完整性
易理解
在线提单
论坛求助

clientCalculate

客户端发送要查询的key到服务端获取查询结果。

int clientCalculate(
     DG_TeeCtx *dgTeeCtx, 
     DG_DummyMode dummyMode, 
     DG_TeeInput *input, 
     DG_TeeOutput **output
)

参数

表1 参数说明

参数名

描述

取值范围

输入/输出

dgTeeCtx

KCAL上下文信息

initTeeCtx成功初始化的结果

输入

dummyMode

dummy模式DG_DummyMode

正常模式NORMAL和dummy模式DUMMY

输入

input

要查询的key值

DG_TeeInput

目前支持字符串数组

输入

output

返回查询结果

DG_TeeOutput

支持字符串数组

输出

表2 DG_DummyMode枚举类

名称

说明

NORMAL

正常模式,隐藏client真实的查询内容

DUMMY

dummy模式,对client查询的真实数量与内容做dummy隐藏处理

表3 DG_TeeInput结构体

名称

类型

说明

data

DG_MpcDataUnion

输入数据strings的类型为DG_String *,doubleNumbers为double *, u64Numbers类型为u64 *

size

uint64_t

数据量

dataType

DG_MpcDataType

数据类型枚举有:

MPC_STRING(PIR查询)

表4 DG_MpcDataUnion联合体

名称

类型

说明

strings

DG_String

字符串数组类型

u64Numbers

u64

u64数组

doubleNumbers

double

double数组

返回值

  • 成功:返回0
  • 失败:返回错误码。

错误码

表5 错误码

错误码

错误码值

描述

特殊说明

DG_SUCCESS

0

成功

-

DG_FAILURE

1

通信失败

发送接收失败

DG_ERR_MALLOC_FAIL

51

申请内存失败

-

DG_ERR_STRCPY_FAIL

54

字符串拷贝失败

-

DG_ERR_MPC_TEE_INVALID_NODE_INFO

4503

无效的tee节点信息

-

DG_ERR_MPC_TEE_INVALID_PARAM

4501

参数校验失败

DgCfgNULLdgTeeCtx二级指针为空

依赖

  • dgCfg依赖DataGuard操作集设置类接口设置KCAL配置信息成功,用设定好的dgCfg作为此接口的入参
  • pirOpts依赖DG_InitPirOpts的成功初始化PIR类算子函数组
  • 依赖的头文件为#include "data_guard_mpc.h"

示例

#include  "data_guard_mpc.h"
 
void BuildDgString(std::vector<std::string> &strings, DG_String **dg, unsigned int &size)
{
    size = strings.size();
    DG_String *dgString = new DG_String[strings.size()];
    for (size_t i = 0; i < strings.size(); i++) {
        dgString[i].str = strdup(strings[i].c_str());
        dgString[i].size = strings[i].size() + 1;
    }
    *dg = dgString;
}
 
DG_String *strings = nullptr;
BuildDgString(dataString, &strings, size);
DG_TeeInput teeInput;
teeInput.data.strings = strings;
teeInput.size = size;
teeInput.dataType = MPC_STRING;
DG_TeeOutput* output = nullptr;
// pirOpts为DG_InitPirOpts成功后的结果,dgTee为initTeeMpcSql成功后的结果
int rv = pirOpts.clientCalculate(dgTee, DUMMY, &teeInput, &output);
if (rv != 0) {
      return rv;
}

调用DG_InitPirOpts成功后的pirOpts来调用clientCalculate接口