caculate
调用此函数对基础算子进行计算,目前支持密态乘法、密态比较、密态除法、密态求均值、密态求和及密态排序。
int calculate(
DG_TeeCtx *dgTeeCtx,
DG_AlgorithmsType type,
DG_MpcShareSet *shareSet,
DG_MpcShare **share
)
参数
参数名 |
描述 |
取值范围 |
输入/输出 |
|---|---|---|---|
dgTeeCtx |
KCAL上下文信息 |
为initTeeCtx成功初始化的结果 |
输入 |
type |
算子枚举 DG_AlgorithmsType |
MULTI : 乘法 DIV :除法 LT :小于 LT_EQ :小于等于 GT :大于 GT_EQ :大于等于 EQ : 等于 NEQ: 不等于 AVG :平均数 SUM: 求和 ASCEND_SORT : 升序排序 DESCEND_SORT :降序排序 |
输入 |
shareSet |
分片数据组装后的结构体 类型为DG_MpcShareSet |
不能输入为NULL |
输入 |
share |
计算结果 类型为:DG_MpcShare |
一级指针为NULL,二级指针不为NULL |
输出 |
名称 |
类型 |
说明 |
|---|---|---|
shareSet |
DG_MpcShare |
每个参与方的分片 |
size |
unsigned long |
参与方数量 |
名称 |
类型 |
说明 |
|---|---|---|
dataShare |
Share* |
分片结构 |
size |
unsigned long |
数据规模 |
shareType |
DG_ShareType |
分片类型 |
返回值
- 成功:返回0。
- 失败:返回错误码。
错误码
错误码 |
错误码值 |
描述 |
特殊说明 |
|---|---|---|---|
DG_ERR_MPC_TEE_INVALID_PARAM |
4501 |
无效参数 |
- |
DG_ERR_MPC_TEE_INVALID_ALGORITHM_TYPE |
4502 |
无效算法类型 |
- |
DG_ERR_MALLOC_FAIL |
51 |
内存分配失败 |
- |
DG_ERR_MPC_DIVISION_BY_ZERO |
4020 |
除0异常 |
- |
DG_FAILURE |
4501 |
算子执行失败 |
参数校验失败 分片失败 接收对方数据失败 |
依赖
- 调用initTeeCtx成功后的dgTeeCtx来调用calculate接口。
- 通过分片获取的是单个数据方的分片结果,需要用户多次调用makeShare,将各方的数据DG_MpcShare拼接成DG_MpcShareSet,需要注意的是拼接的先后顺序,例如调用小于算子,比较a < b (a为计算节点1的数据,b为计算节点0的数据),计算节点0获取到a的分片后,需要将a的分片放到DG_MpcShareSet的第0个位置,将b的分片放到第1个位置。
- 对于基础运算,支持两方运算。
示例
#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);
计算的为乘法算子,样例只做参考,share1和share2为分片的结果,不能真正运行。
运行结果:shares不为NULL和res为0。
父主题: 算术类算子