calculate
调用隐私求并PSU类算子,实现两方隐私求并功能,目前支持双方输入字符串类型的数据集,返回结果为双方的字符串数据并集。
int calculate (
DG_TeeCtx *dgTeeCtx,
DG_AlgorithmsType type,
DG_TeeInput *input,
DG_TeeOutput **output,
DG_TeeMode outputMode
)
参数
参数名 |
描述 |
取值范围 |
输入/输出 |
|---|---|---|---|
dgTeeCtx |
mpc上下文信息 |
为initTeeCtx成功初始化的结果 |
输入 |
type |
算子类型 DG_AlgorithmsType |
目前支持PSI和PSU |
输入 |
input |
输入数据 DG_TeeInput |
目前支持字符串数组 |
输入 |
outputMode |
输出的模式 DG_TeeMode |
枚举类:TEE_OUTPUT_STRING |
输入 |
output |
算子计算结果 |
一级指针为空,二级指针不为空 |
输出 |
名称 |
类型 |
说明 |
|---|---|---|
data |
DG_MpcDataUnion |
输入数据strings的类型为DG_String *,doubleNumbers为double *, u64Numbers类型为u64 * |
size |
uint64_t |
数据量 |
dataType |
DG_MpcDataType |
数据类型枚举有: MPC_STRING(PSU字符串并集) |
名称 |
类型 |
说明 |
|---|---|---|
strings |
DG_String |
字符串数组类型 |
u64Numbers |
u64 |
u64数组 |
doubleNumbers |
double |
double数组 |
DG_TeeOutput结构体与DG_TeeInput结构体类型一致。
返回值
- 成功:返回0。
- 失败:返回错误码。
错误码
错误码 |
错误码值 |
描述 |
特殊说明 |
|---|---|---|---|
DG_ERR_MPC_TEE_INVALID_PARAM |
4501 |
参数校验失败 |
dgTeeCtx为null或output二级指针为null或通信回调未注册 input为null或size小于0或input中的string为null |
DG_ERR_MPC_TEE_INVALID_NODE_INFO |
4503 |
无效的节点信息 |
节点信息从0开始依次递增 |
DG_FAILURE |
1 |
计算失败 |
Hash失败 交换桶失败 求并失败 |
依赖
- teeOpts依赖DG_InitPsiOpts的成功初始化KCAL函数组。
- 在计算PSU前,需要先调用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成功后的结果,dgTee为initTeeMpcSql成功后的结果
int res = teeOpts.calculate(dgTee, PSU, &teeInput, &output, TEE_OUTPUT_STRING);
运行结果: res结果为0且output不为null。
调用DG_InitPsiOpts成功后的teeOpts来调用calculate接口。