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

calculate

调用此函数对基础算子进行计算,目前支持密态加法、密态减法、密态最大值、密态最小值、密态乘法、密态除法、密态求均值、密态求和、密态排序、密态比较。

int calculate(
	DG_TeeCtx *dgTeeCtx,
        DG_AlgorithmsType type,
        DG_MpcShareSet *shareSet,
        DG_MpcShare **share
)

参数

表1 参数说明

参数名

描述

取值范围

输入/输出

dgTeeCtx

KCAL上下文信息

initTeeCtx成功初始化的结果

输入

type

算子枚举

DG_AlgorithmsType

MULTI : 乘法

DIV :除法

LT :小于

LT_EQ :小于等于

GT :大于

GT_EQ :大于等于

EQ : 等于

NEQ: 不等于

AVG :平均数

SUM: 求和

ASCEND_SORT : 升序排序

DESCEND_SORT :降序排序

ADD:加法

SUB:减法

MAX:最大值

MIN:最小值

输入

shareSet

分片数据组装后的结构体

类型为DG_MpcShareSet

不能输入为NULL

输入

share

计算结果

类型为:DG_MpcShare

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

输出

表2 DG_MpcShareSet结构体

名称

类型

说明

shareSet

DG_MpcShare

每个参与方的分片

size

unsigned long

参与方数量

表3 DG_MpcShare结构体

名称

类型

说明

dataShare

Share*

分片结构

size

unsigned long

数据规模

shareType

DG_ShareType

分片类型

返回值

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

错误码

表4 错误码

错误码

错误码值

描述

特殊说明

DG_ERR_MPC_TEE_INVALID_PARAM

4501

无效参数

-

DG_ERR_MPC_TEE_INVALID_ALGORITHM_TYPE

4502

无效算法类型

-

DG_ERR_MALLOC_FAIL

51

内存分配失败

-

DG_ERR_MPC_TEE_DIV_IS_ZERO

4512

除0异常

-

DG_FAILURE

4501

算子执行失败

参数校验失败

分片失败

接收对方数据失败

依赖

  • dgTeeCtx依赖initTeeCtx的成功初始化
  • 入参需要依赖调用makeShare后的结果作为入参
  • 依赖的头文件为 #include "data_guard_mpc.h"

示例

#include  "data_guard_mpc.h" 
  //计算方
DG_AlgorithmsType type = MULTI;
std::unique_ptr<DG_MpcShareSet> shares = std::make_unique<DG_MpcShareSet>();
std::unique_ptr<DG_MpcShare[]> share_datas = std::make_unique<DG_MpcShare[]>(2);
share_datas[0] = *share2;
share_datas[1] = *share1;
shares->shareSet = share_datas.get();
shares->size = 2;   
DG_MpcShare *share_out = nullptr;
res = aritOpts.calculate(dgTee, type, shares.get(), &share_out);
  • 调用initTeeCtx成功后的dgTeeCtx来调用calculate接口
  • 通过分片获取的是单个数据方的分片结果,需要用户多次调用makeShare,将各方的数据DG_MpcShare拼接成DG_MpcShareSet,需要注意的是拼接的先后顺序,例如调用小于算子,比较a < b a为计算节点1的数据,b为计算节点0的数据),计算节点0获取到a的分片后,需要将a的分片放到DG_MpcShareSet的第0个位置,将b的分片放到第1个位置。
  • 支持2方运算和3方运算,2方需设置一方为0节点,另一方为1节点。3方需设置0,1,2节点。
  • 计算的为乘法算子,样例只做参考,share1和share2为分片的结果,不能真正运行。
  • 运行结果:shares不为NULL和res为0。