开发者
资源
文档评分
获取效率
正确性
完整性
易理解
在线提单
论坛求助

calculateByFile

调用此函数对基础算子进行文件计算,目前支持密态加法、密态减法、密态最大值、密态最小值、密态乘法、密态除法、密态求均值、密态求和、密态排序、密态比较。
int calculateByFile(
    DG_TeeCtx *dgTeeCtx, 
    DG_AlgorithmsType type, 
    DG_MpcFileInputSet *input,
    DG_MpcFileOutput *output
)

参数

参数名

描述

取值范围

输入/输出

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:最小值

MATRIX_ADD:矩阵加法

MATRIX_SUB:矩阵减法

MATRIX_MUL:矩阵乘法

输入

input

文件数据组装后的结构体

类型为DG_MpcFileInputSet

不能输入为NULL

输入

output

计算结果

类型为:DG_MpcFileOutput

不能输入为NULL

输出

表1 DG_MpcFileInputSet结构体

名称

类型

说明

shareInputSet

DG_MpcFileInput*

每个参与方的分片文件

size

unsigned long

参与方数量

表2 DG_MpcFileInput结构体

名称

类型

说明

filePath

char*

文件路径

pathLen

uint32_t

路径长度

dataSize

uint64_t

数据大小

表3 DG_MpcFileOutput结构体

名称

类型

说明

filePath

char*

文件路径

pathLen

uint32_t

路径长度

dataSize

uint64_t

数据大小

返回值

  • 成功:返回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

1

算子执行失败

参数校验失败

分片失败

接收对方数据失败

依赖

依赖调用revealShareByFile的返回结果。

示例

  • 使用调用initTeeCtx成功后的dgTeeCtx来调用calculateByFile接口。
  • 通过分片获取的是单个数据方的分片结果,需要用户调用makeShareByFile,将各方的文件输出为文件分片。
  • 对于基础运算,其中有计算节点和非计算节点,规定:其中0为计算节点,1为非计算节点,支持三方的算子,2为非计算节点。
#include  "data_guard_mpc.h" 
 //计算方
std::vector<DG_MpcFileInput> inputs(inputFilePaths.size());
for (size_t i = 0; i < inputFilePaths.size(); ++i) {
    inputs[i].filePath = const_cast<char *>(inputFilePaths[i].c_str());
    inputs[i].pathLen = static_cast<uint32_t>(inputFilePaths[i].length());
}
DG_MpcFileInputSet inputSet;
inputSet.shareInputSet = inputs.data();
inputSet.size = static_cast<uint32_t>(inputFilePaths.size());
DG_MpcFileOutput teeFileOutput;
teeFileOutput.filePath = const_cast<char *>(outputFilePath.c_str());
teeFileOutput.pathLen = static_cast<uint32_t>(outputFilePath.length());
int ret = opts_->calculateByFile(dgTeeCtx_, ADD, &inputSet, &teeFileOutput);