标签:初始 inux 放大 编译 忘记密码 上下文 err alt+ img
简介:在上一节《安全多方计算(MPC)从入门到精通:Frutta语言》中,已经介绍了Frutta语言语法相关的内容,在本节中,我们将介绍JUGO-IDE及SDK。键名 | 操作 | 功能限制 |
---|---|---|
Alt+p | 新建工程 | 无 |
Alt+N | 新建文件 | IDE当前文件系统中至少有一个工程 |
Ctrl+O | 导入本地文件 | IDE当前文件系统中至少有一个工程 |
Ctrl+S | 保存 | IDE当前文件系统中有未保存的文件 |
Ctrl+Alt+S | 全部保存 | IDE当前文件系统中有未保存的文件 |
Ctrl+delete | 删除 | 当前有选中的文件 |
Ctrl+Z | 撤销 | 当前编辑区窗口中有打开的文件 |
Ctrl+Y | 恢复 | 当前编辑区窗口中有打开的文件 |
Ctrl+C | 复制 | 当前编辑区窗口中有打开的文件 |
Ctrl+X | 剪切 | 当前编辑区窗口中有打开的文件 |
Ctrl+V | 粘贴 | 当前编辑区窗口中有打开的文件 |
Ctrl+F | 查找 | 当前编辑区窗口中有打开的文件 |
Ctrl+H | 替换 | 当前编辑区窗口中有打开的文件 |
Ctrl+L | 代码格式化 | 当前编辑区窗口中有打开的文件 |
F2 | 重命名 | 当前有选中的文件 |
F8 | 编译 | IDE当前文件系统中至少有一个工程 |
三、编写流程
1.文件格式
1) 输入文件格式
JUGO-IDE目前支持所有格式文件的编辑,但是编译功能仅限于.wir格式的文件。
2) 输出文件格式
在JUGO-IDE中对一个.wir格式的文件进行编译将生成一个.gc格式的电路文件和一个.java格式的java模板文件;.gc文件可通过“导出”按钮导出到本地,.java文件放置于工程“bin”目录,可通过菜单栏或者工具栏中“导出到本地”功能导出到本地,.java文件可在java-sdk中使用。
2.自动补全
功能描述:JUGO-IDE编辑区在输入过程中即时显示自动补全提示。
3.编程
功能描述:JUGO-IDE编辑区提供查找、替换、代码格式化、字体放大、字体缩小、撤销、恢复等常用功能。
流程:编辑--保存--编译
错误类型反馈:
1)开发者在执行保存操作时,如果代码中有语法错误,错误的地方行号处有红色叉号标识,鼠标悬浮在该行文字上时会显示具体的错误信息。
2)开发者在执行编译操作时,如果编译出错,IDE输出区域会有红色的错误信息输出,点击错误信息,编辑区会自动打开当前发生错误的文件。
措施:开发者在执行保存或者编译时如果有错误信息提示,需要重新编辑文件纠错后再执行保存或者编译操作。
4.运行
功能描述:JUGO-IDE编辑区提供“查找、替换、代码格式化、字体放大、字体缩小、撤销、恢复”等常用功能。
流程:当前工程编译成功后执行运行
错误类型反馈:
1)当前项目没有编译成功
措施:开发者需要先对当前工程进行编译,编译成功后才能运行算法。
2)无效参数
措施:当前项目编译成功后运行的时候,会对输入参数进行类型和范围校验,存在不合法的参数时无法点击“运行”按钮。
5.发布
功能限制:
1)需要开发者登录。
2)当前项目编译成功并通过了运行测试。
用途:开发者可将已通过运行测试的算法发布到JUGO技术产品的算法库中,算法库是JUGO技术产品的算法仓库,开发者使用JUGO-IDE发布的算法会生成一个唯一的算法ID,通过这个算法ID可以下载该算法,并通过JUGO-SDK使用该算法。
6.算法库
功能限制:需要开发者登录。
用途:开发者可以访问到JUGO技术产品的算法中心的所有算法。算法列表中展示每一个算法的名称、简介和发布者,支持关键字搜索算法;点击某一个算法,即跳往该算法的详情界面,开发者可以了解到算法更多的信息,并提供了下载该算法的功能入口。
7.导出
功能描述:开发者可以通过导出功能将JUGO-IDE中当前选中的文件或文件夹导出到本地,文件夹的格式为“文件夹名”.rar,文件的格式和当前选中的文件在IDE中的格式保持一致。
1.什么是JUGO-SDK
JUGO-SDK是JUGO技术产品面向开发者提供的安全多方计算应用开发工具包。
开发者通过使用JUGO-SDK与其他JUGO技术产品,可以高效快速的开发MPC(安全多方计算)应用。每个集成了SDK的应用将作为计算节点接入到计算网络中。应用调用SDK可以实现安全多方计算以满足业务需求。
此文档面向开发者介绍如何使用JUGO-SDK及其相关注意事项。同时,阅读此文档的开发者需要具备分布式系统中间件(Ice)的基础知识——JUGO-SDK使用RPC协议进行数据传输,使用了Ice中的Glacier2进行防火墙穿透。
2.编程语言&开发环境
支持语言:JAVA语言。
JDK版本:JDK1.8。
开发工具:推荐使用 IntelliJ IDEA。
开发环境:操作系统window/linux,ICE-3.6
3.调试&运行环境
调试环境:由于MPC算法库目前仅支持.so动态库(Linux平台运行),所以开发阶段部分功能可在window上进行调试,完整的计算流程需要在Linux环境上进行。
运行环境:目前仅支持运行在Linux环境,推荐:CentOS Linux release 7.2.1511 (Core)。
电路文件:后缀格式规定为:.gc
一、集成流程
1、IDE上编写电路算法;
2、编译算法并生成电路文件JAVA包装类;示例查看
3、项目中引入步骤2中的JAVA包装类;
4、集成API,完成应用开发;
二、API列表
API | 说明 |
---|---|
YourCircuitWrapper() | 初始化上下文, 构建电路对象 |
doCompute() | 启动计算任务 |
setInputCallbackForORG() | 设置发起方计算数据源回调CALLBACK |
setInputCallbackForDST() | 设置受邀方计算数据源回调CALLBACK |
setOutputCallback() | 设置结果处理回调CALLBACK |
invite() | 是否接受计算邀请 |
getLocal() | 获取电路文件路径 |
三、API详情
1.创建电路实例
接口:YourCircuitWrapper circuit=new YourCircuitWrapper();
注意:电路文件包装类,仅可实例化一次,建立与代理连接。
描述:创建电路实例,并完成链路初始化工作,与JUGO代理服务进行会话连接,后续数据通信都依赖此连接通道进行。
参数说明:
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
pcbId | String | 是 | 电路ID,一般与电路文件名相同,此值会用于进行本地电路文件搜索。如:xxx.gc |
user | String | 是 | 节点用户名,用于连接JUGO平台代理服务进行鉴权。获取方式从JUGO开发服务平台已注册 |
password | String | 是 | 用户名对应密码,用于连接JUGO代理服务会话连接鉴权。此密码对应JUGO开发服务平台已注册账号对应的密码 |
mode | NodeCommunicateMode | 是 | 节点启动模式,有两种类型SERVER -节点初始化后同时作为服务节点启动CALLBACK -节点初始化后作为回调节点启动有关二者差异的描述请参考配置节点为服务节点 |
proxyEndpoint | String | 是 | JUGO代理服务的Endpoints连接信息。例如:ProxyGlacier2/router:tcp -h 192.168.7.167 -p 4502 -t 11000 |
jugoEndpoint | String | 否 | 当前节点的Endpoint信息,当mode == SERVER时,此值必填。mode == CALLBACK时可不填 |
args | Array | 是 | 启动配置信息。如:携带节点服务配置信息:--Ice.Config=config.conf |
返回参数说明:
参数 | 说明 |
---|---|
无返回参数 | 需处理调用过程中可能触发的异常MPCException |
示例代码:
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
roomId | String | 是 | 计算实例ID,该值由JUGO开发服务平台提供,当创建好一次计算任务后会产生该值 |
args | Array | 否 | 计算条件,参数可任意扩展,但需要保证所有计算参与方对此字段的解析过程一致即可。如:此处传递A=15 B=15 C=17,各其它参与方收到数据后按规则解析参数结构获取 |
takerList | List | 是 | 计算参与方用户名列表,列表中第一个元素为计算任务发起者 |
resultReceiverList | List | 是 | 计算结果接收方列表,计算完成后该列表中用户都会收到计算结果 |
返回参数说明:
参数 | 说明 |
---|---|
无返回参数 | 需处理调用过程中可能触发的异常MPCException |
示例代码:
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
taskId | String | 是 | 任务ID,回调传入。每发起一次计算就会产生一个新的任务ID |
algorithmId | String | 是 | 算法ID,回调传入。每一次任务对应一个算法ID |
args | Array | 是 | 附加参数,此参数就是在调用startTask时传入的args参数,可以使用此参数携带条件(如果业务需要的话),任何参与方收到的参数都是一致的 |
返回参数说明:
类型 | 说明 |
---|---|
返回具体类型由电路文件定义 | 无 |
示例代码:
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
taskId | String | 是 | 任务ID,回调传入。每发起一次计算就会产生一个新的任务ID |
algorithmId | String | 是 | 算法ID,回调传入。每一次任务对应一个算法ID |
args | Array | 是 | 附加参数,此参数就是在调用startTask时传入的args参数,可以使用此参数携带条件(如果业务需要的话),任何参与方收到的参数都是一致的 |
返回参数说明:
类型 | 说明 |
---|---|
返回具体类型由电路文件定义 | 无 |
示例代码:
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
taskId | String | 是 | 任务ID,回调传入。每发起一次计算就会产生一个新的任务ID |
algorithmId | String | 是 | 算法ID,回调传入。每一次任务对应一个算法ID |
resultCode | int | 是 | 结果错误码,0表示成功获取数据。 |
result | <T> | 是 | 计算结果,其类型根据电路决定,是动态变化的。可能为:Int32/Int64/Int32[]/Int32[][] |
返回参数说明
参数 | 说明 |
---|---|
void | 无返回值 |
示例代码:
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
taskId | String | 是 | 任务ID,回调传入。每发起一次计算就会产生一个新的任务ID |
starter | String | 是 | 计算发起者用户名 |
algorithmId | String | 是 | 算法ID,回调传入。每次任务都对应有一个算法ID |
numberOfParticipants | int | 是 | 参与计算方人数 |
takersList | List<String> | 是 | 计算参与方用户名列表 |
返回参数说明:
类型 | 说明 |
---|---|
boolean | 计算邀请确认结果,true 同意参与计算,false 拒绝参与计算 |
示例代码:
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
algorithmId | String | 是 | 算法ID,优先会根据算法ID作为文件名进行本地搜索(后缀.gc),如果不存在则会从电路文件仓库进行下载 |
返回参数说明:
类型 | 说明 |
---|---|
String | 返回电路文件存储在本地的全路径 |
示例代码:
1. <dependency>
2. <groupId>com.juzix.jugo</groupId>
3. <artifactId>mpc-node-sdk</artifactId>
4. <version>1.1.0-SNATSHOP</version>
5. </dependency>`
Gradle
compile "com.juzix.jugo:mpc-node-sdk:1.1.0-SNATSHOP"
2.算法动态库
底层算法逻辑使用c/c++进行编写,JAVA使用JNI进行调用。目前仅提供了Linux环境下的动态库(.so),因此测试环节需在Linux完成。下载解压后会得到一个libjuzixmpc.so动态库文件,需要更改配置文件mpc-node-config.conf进行配置 。此操作是必须的,否则无法完成计算操作。
3.配置文件创建
JUGO-SDK使用默认方式获取电路文件时需要一些配置信息,如自定义实现了CircuitManager,则无需提供配置文件。此处规定,配置文件名为:mpc-node-config.conf,必须在目录config下。配置文件可位于classes源码目录或者${user.dir}工作目录。如果使用IDEA开发工具,则可将配置文件放置在:${project.dir}/src/main/resources/config/mpc-node-config.conf。
文件内容如下:
1. node {
2. isDebug=false
3. # 是否使用Glacier2进行消息路由 false 不使用, true 使用
4. isRouterModel=false
5. circuit {
6. # 电路文件下载地址,此处将IP和port更改为实际地址即可
7. download.url = "http://xxx:port/file_api/file/download?arithmeticId=%s&user=%s"
8. # 电路文件本地存储目录
9. local.dirPath = /home/test/developer/jugompc
10. }
11. jni {
12. # jni调用的动态库文件目录
13. library.path=/home/test/developer/jnilib
14. }
15. }
注:完成以上2步操作基本完成了对JUGO-SDK的集成。请务必注意算法库的文件路经配置正确。
4.配置节点为服务节点
在启动一个节点的时,可以将节点作为一个服务节点启动。可直接接收对端(计算比较端)的数据,而不需要通过JUGO代理服务回调传输。在调用API-初始化节点(initContext)时,如果参数mode传入SERVER,则必须进行配置操作。如果传入CALLBACK则可忽略此步骤。
当节点需要作为服务节点启动时,需提供服务配置文件,并在初始化时通过参数args传入。
服务配置文件:config.node-server
1. # 当前节点作为服务提供的Endpoints信息
2. NodeServer.Endpoints=tcp -p 12001
3. Server.Trace=1
4. Ice.ThreadPool.Server.Size=10
5. Ice.ThreadPool.Server.SizeMax=10
6. Ice.ThreadPool.Client.Size=10
7. Ice.ThreadPool.Client.SizeMax=10
注:在创建电路实例中的args=new String[]{“--Ice.Config=config.node-server”}
5.配置节点Glacier2
注意:如果配置文件mpc-node-config中,isRouterModel=false, 则无需启动节点Glacier2,该模式标识仅使用节点直连进行消息传递而不需要Glacier2进行消息路由。
Glacier2是ICE特有的应用层防火墙和路由器,提供了安全校验、消息路由和事务管理等功能。这里为了防止网络造成数据传输阻碍,引入Glacier2进行网络穿透。将节点服务放置在Glacier2之后,由Glacier2进行消息接收并路由到目标服务。
Glacier2配置文件:config.glacier2-node-server
1. #Glacier2实例名
2. Glacier2.InstanceName=NodeGlacier2
3. # 客户端访问Endpoints信息
4. Glacier2.Client.Endpoints=tcp -h 0.0.0.0 -p 4503 -t 12000
5. Glacier2.Server.Endpoints=tcp
6. # 会话创建服务地址,此处连接到节点服务的EEndpoings
7. Glacier2.SessionManager=NodeSessionManager:tcp -h 192.168.7.168 -p 12001
8. # 权限校验服务地址,此处连接到节点服务的Endpoints
9. Glacier2.PermissionsVerifier=NodePermissionsVerifier:tcp -h 192.168.7.168 -p 12001
10. Glacier2.SessionTimeout=30
11. Glacier2.Server.Buffered=0
12. Glacier2.Client.Buffered=0
13. IceSSL.Trace.Security=1
14. Ice.Trace.Network=1
15. Ice.Warn.Connections=1
16. Ice.Trace.Protocol=1
17. Ice.ThreadPool.Server.Size=10
18. Ice.ThreadPool.Server.SizeMax=10
19. Ice.ThreadPool.Client.Size=10
20. Ice.ThreadPool.Client.SizeMax=10
注:配置中为基本的Glacier2信息配置,具体含义请参考ICE详细文档查看。
启动Glacier2之前请确保本地已安装Ice并可正常使用。
启动Glaicer2命令为:glacier2router --Ice.Config=./config.glacier2-node-server
使用Glacier2后,在调用节点初始化(initContext)时的参数jugoEndpoint=NodeGlacier2/router:tcp -h 127.0.0.1 -p 4503 -t 12000。后续再计算过程中对端节点会通过该Endpoints信息直接调用Glacier2进行数据转发路由到目标服务。
五、返回码一览
错误码 | 说明 |
---|---|
0 | 计算成功 |
100 | 程序未知异常 |
1001 | 连接失败,网络不通 |
1007 | 参与计算节点异常下线 |
1008 | 有节点拒绝参与计算 |
1009 | 电路文件缺失 |
更多内容可以参考视频:安全多方计算MPC视频课程
安全多方计算(MPC)从入门到精通:JUGO-IDE及SDK
标签:初始 inux 放大 编译 忘记密码 上下文 err alt+ img
原文地址:http://blog.51cto.com/13701316/2136534