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

calculate

调用隐私求交PSI类算子,实现两方或三方的隐私求交功能,目前支持多方输入字符串类型的数据集,返回结果为字符串数据交集或交集的下标。

int calculate ( 
     DG_TeeCtx *dgTeeCtx, 
     DG_AlgorithmsType type,
     DG_TeeInput *input,
     DG_TeeOutput **output,
     DG_TeeMode outputMode
)

参数

参数名

描述

取值范围

输入/输出

dgTeeCtx

KCAL上下文信息

initTeeCtx成功初始化的结果

输入

type

算子类型

DG_AlgorithmsType

目前支持PSI和PSU

输入

input

输入数据

DG_TeeInput

目前支持字符串数组

输入

outputMode

输出的模式

DG_TeeMode

枚举类:TEE_OUTPUT_STRING或

TEE_OUTPUT_INDEX

输入

output

算子计算结果

一级指针为空,二级指针不为空

输出

表1 DG_TeeInput结构体

名称

类型

说明

data

DG_MpcDataUnion

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

size

uint64_t

数据量

dataType

DG_MpcDataType

数据类型枚举有:

  • MPC_STRING(PSI字符串交集)
  • MPC_INT(PSI字符串交集下标)
表2 DG_MpcDataUnion联合体

名称

类型

说明

strings

DG_String

字符串数组类型

u64Numbers

u64

u64数组

doubleNumbers

double

double数组

DG_TeeOutput结构体与DG_TeeInput结构体类型一致。

返回值

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

错误码

错误码

错误码值

描述

特殊说明

DG_ERR_MPC_TEE_INVALID_PARAM

4501

参数校验失败

dgTeeCtxnulloutput二级指针NULL或通信回调未注册

inputNULLsize小于0input中的stringnull

DG_ERR_MPC_TEE_INVALID_NODE_INFO

4503

无效的节点信息

节点信息从0开始依次递增

DG_FAILURE

1

计算失败

Hash失败

交换桶失败

求交失败

依赖

  • teeOpts依赖DG_InitPsiOpts的成功初始化KCAL函数组
  • 在计算PSI前,需要先调用setTeeNodeInfos接口设置所有节点信息。
  • 依赖的头文件为#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;
}
std::vector<std::string> datas = {"hello", "world"};
unsigned int size;
DG_String *strings = nullptr;
BuildDgString(datas, &strings, size);
DG_TeeInput teeInput;
teeInput.data.strings = strings;
teeInput.size = size;
teeInput.dataType = MPC_STRING;
struct DG_TeeOutput *output = nullptr;
// teeOpts为DG_InitPsiOpts成功后的结果,dgTeeinitTeeCtx成功后的结果
int res = teeOpts.calculate(dgTee, PSI, &teeInput, &output, TEE_OUTPUT_STRING);

运行结果: res结果为0且output不为null。

调用DG_InitPsiOpts成功后的teeOpts来调用calculate接口。