标签:array 成本 date ror tar roo 计算机科学 包括 nod
简介:在上一节《安全多方计算(MPC)从入门到精通:JUGO-IDE及SDK》中,已经介绍了JUGO-IDE及SDK相关的内容,本节也是本系列的最后一篇文章,我们将介绍MPC的经典案例,以及这些案例的代码及实现流程。1. #parties 2
2. #input 1 uint32
3. #input 2 uint32
4. #output 1 uint32
5. function void main()
6. {
7. /* 数据比较电路 (output1=1 && input1>input2)*/
8. output1 = input1/input2;
9. if(output1>0)
10. {
11. output1 = 1;
12. }
13. }
2.服务端代码
1)初始化节点
描述
引入JUGO平台SDK库;
初始化节点,启动节点监听(包括发起方节点和接收方节点);
JUGO的节点初始化是以异步形式进行返回。
代码参考:
1. compare = new Compare(SystemProperties.getDefault().getCompare(), SystemProperties.getDefault().getNode1UserName(), SystemProperties.getDefault().getNode1Password(), mode,SystemProperties.getDefault().getNode1Endpoint(), null, argsAttach);
2. //设置返回的callback对象,处理结果返回数据
3. compare.setOutputCallback(new OutputCallback<Uint32>(Uint32.class){
4. @Override
5. public void onResult(String taskId, String algorithmId, int resultCode, Uint32 result) {
6. logger.debug("获取到结果:任务ID:{},算法ID:{},错误码:{},值:{}",
7. taskId, algorithmId, resultCode, result.getValue().toString());
8. //根据返回值进行判断结果
9. if(resultCode == 0){
10. resultMapper.insertData(id, "获取最终结果,返回数据结果:我方值大于等于对方值,任务id:" + taskId, new Date(),Const.getType_one());}
11. else{
12. resultMapper.insertData(id, "获取最终结果,返回数据结果:对方值较大,任务id:" + taskId ,new Date(), Const.getType_one());}
13. }
14. @Override
15. public void onFailure(Throwable e) {
16. e.printStackTrace();
17. }
18. });
19. // 邀请方定义输入参数。对于输入发起方调用setInputCallbackForORG方法,被邀请方调用setInputCallbackForDST方法。
20. compare.setInputCallbackForORG(new InputCallback<Uint32>() {
21. @Override
22. public Uint32 onInput(String taskId, String algorithmId, String[] args) {
23. resultMapper.insertData(id, "准备参与计算参数,发起计算,任务id:" + taskId, new Date(),Const.getType_one());
24. //初始化后台输入参数
25. return new Uint32(BigInteger.valueOf(3));
26. }
27. @Override
28. public void onFailure(Throwable e) {
29. e.printStackTrace();
30. }
31. });`
2)节点启动任务
描述:
如果是被邀请方,无需启动任务
如果是发起方,需要进行启动任务
JUGO的节点初始化是以异步形式进行返回
代码参考:
1. //初始化计算双方
2. List<String> takerList = Arrays.asList(new String[] { "admin01", "admin02" });
3. //初始化接收结果的参与方
4. List<String> resulReceiverList = Arrays.asList(new String[] { "admin01" , "admin02"});
5. //启动节点任务
6. compare.doCompute(SystemProperties.getDefault().getRoomId(), argsAttach, takerList, resulReceiverList);`
二、实现流程
1.MPC应用部署
1)准备工作
环境搭建(要求linux系统)
安装nginx
安装JDK,配置JDK环境变量
2.项目打包
1)描述:
项目依赖gradle进行构建;
可通过gradle指令进行打包,文件输出在同级build目录下;
可通过JAVA IDE打包可执行文件;
2)gradle指令:
1.>cleanbuild
3.项目运行
1)描述:
在环境中执行以下指令进行监听;
后续可通过统计目录nohup.out查看输出日志
2)指令参考:
1.>nohupjava-jarMPCAcceptApp.jar&//启动接收方节点
2.>nohupjava-jarMPCStartApp.jar&//启动发起方节点
4.项目调试
部署完毕
在浏览器中输入http://ip:port/swagger-ui.html 可调试发起方接口
在浏览器中输入http://ip:port/swagger-ui.html 可调试接收方接口
更多内容可以参考视频:安全多方计算MPC视频课程
标签:array 成本 date ror tar roo 计算机科学 包括 nod
原文地址:http://blog.51cto.com/13701316/2136732