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

clientCalculate

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

int clientCalculate(
    DG_TeeCtx *dgTeeCtx,
    DG_TeeMode outputMode,
    DG_TeeInput *input,
    DG_TeeOutput **output
)

参数

参数名

描述

取值范围

输入/输出

dgTeeCtx

MPC上下文信息

DG_InitPsmOpts成功初始化的结果

输入

outputMode

结果形式

TEE_OUTPUT_STRING和TEE_OUTPUT_INDEX

输入

input

要查询的值

DG_TeeInput

目前支持字符串数组

输入

output

返回查询结果

DG_TeeOutput

支持字符串数组以及input数组下标

输出

enum DG_TeeMode {
    TEE_OUTPUT_STRING,
    TEE_OUTPUT_INDEX
};
表1 DG_TeeInput结构体

名称

类型

说明

data

DG_MpcDataUnion

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

size

uint64_t

数据量

dataType

DG_MpcDataType

数据类型枚举有:

MPC_STRING(PSM查询)

MPC_INT(PSM字符串交集下标)

表2 DG_MpcDataUnion联合体

名称

类型

说明

strings

DG_String

字符串数组类型

u64Numbers

u64

u64数组

doubleNumbers

double

double数组

返回值

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

错误码

错误码

错误码值

描述

特殊说明

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

参数校验失败

DgCfg为NULL或dgTeeCtx二级指针为空

依赖

  • dgCfg依赖DataGuard操作集设置类接口设置MPC配置信息成功,用设定好的dgCfg作为此接口的入参。
  • 依赖的头文件为 #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_TeeInput BuildTeeInput(std::vector<std::string> inputData)
{
    DG_String *dgInput;
    unsigned int size;
    BuildDgString(inputData, &dgInput, size);
    DG_TeeInput dgTeeInput = {};
    dgTeeInput.dataType = MPC_STRING;
    dgTeeInput.data.strings = dgInput;
    dgTeeInput.size = size;
    return dgTeeInput;
}
DG_TeeInput teeInput = BuildTeeInput("name", "age", "a", "hello");
DG_TeeOutput *output = nullptr;
// psmOpts为DG_InitPsmOpts成功后的结果,dgTee为initTeeMpcSql成功后的结果
int rv = psmOpts.clientCalculate(nodeCtx, TEE_OUTPUT_STRING, &teeInput, &output);
if (rv != 0) {
    return rv;
}

调用DG_InitPsmOpts成功后的psmOpts来调用initTeeCtx接口。