0、前序工作已经将算法所需要的三个c++包进行了编译,注意这个编译目前还不支持windows下的动态链接的编译,编译后有两个文件夹mpc4j-native-tool、mpc4j-native-fourq
详细编译文档可参考:mpc4j-native-tool/doc 找到对应的系统编译文件
1、在windows本地把需要的模块进行打包
由于项目中每个包的错综复杂的依赖关系,因此不建议单独进行package,比如我对mpc4j-s2pc-pso单独进行package的时候会报一堆依赖Jar包没有,这时候千万不要按照提示剥洋葱一点点Install,
1)直接打开项目目录进行一键mvn clean install
2)打开自己的Maven仓库找到已经打好的Jar包
通过日志可以看出,在打包的时候忽略了所有的测试类
E:\efficient_work\mpc4j-main
mvn package -pl mpc4j-s2pc-pso -am -DskipTests=false
3)package之后会生成3个jar包
E:\efficient_work\mpc4j-main\mpc4j-s2pc-pso\target
-
.jar 文件:这是项目的主要 JAR 文件,它包含了项目的编译代码和资源文件,但不包括项目依赖的库。这个 JAR 文件通常带有项目的名称和版本号作为其命名的一部分。它适合用作库的发布,其他项目如果需要使用您的库,则可以将此 JAR 文件添加到它们的依赖中。
-
-jar-with-dependencies.jar 文件:这个 JAR 文件包含了项目的编译代码、资源文件以及所有项目依赖的库,它是一个“含有依赖项”的 JAR 文件。这样的 JAR 文件更大,但是它是一个完全可执行的 JAR 文件,可以独立运行,而无需其他依赖项。这在您希望将整个应用程序作为一个单独的 JAR 文件进行部署时非常有用。
-
-sources.jar 文件:这个 JAR 文件包含了项目的源代码,它是一个源代码 JAR 文件。通常情况下,这个 JAR 文件用于发布项目的源代码,使其他人可以查看和理解您项目的实现细节。这对于开源项目或者需要共享源代码的项目非常有用。
上传mpc4j-s2pc-pso-1.1.0-jar-with-dependencies.jar
另外在mpc4j的github首页的readme里也有说明
2、上传jar包,命令行运行
注意:
1需要指定conf/psu配置.txt文件
2 要先运行服务端再运行客户端
1)服务端
java -Djava.library.path=/home/fourQTest/mpc4j-native-tool/cmake-build-release -jar mpc4j-s2pc-pso-1.1.0-jar-with-dependencies.jar conf_psu_gmr21_server.txt
2)客户端
java -Djava.library.path=/home/fourQTest/mpc4j-native-tool/cmake-build-release -jar mpc4j-s2pc-pso-1.1.0-jar-with-dependencies.jar conf_psu_gmr21_client.txt
↘GMR21_PSU client Init begin
2024-03-26 22:57:44,300 [main] INFO edu.alibaba.mpc4j.common.rpc.pto.MultiPartyPto - ↘KKRT16_OPT_OPRF client Init begin
需要测试的是服务端10W 每条128字节 看运行时间
- Our paper "Efficient Private Multiset ID Protocols" was accepted to ICICS 2023. Package
pmid
inmpc4j-s2pc-pso
contains the implementation of this paper. The configuration files are underconf/pmid
inmpc4j-s2pc-pso
. - Our paper "Linear Private Set Union from Multi-Query Reverse Private Membership Test" was accepted to USENIX Security 2023. Package
psu
inmpc4j-s2pc-pso
contains the implementation of this paper. The configuration files are underconf/psu
inmpc4j-s2pc-pso
.
3)入口主函数
src/main/java/edu/alibaba/mpc4j/s2pc/pso/main/PsoMain.java
4)配置文件
conf_psu_gmr21_server.txt
# 服务端信息
server_name = server
server_ip = 127.0.0.1
server_port = 9002
# 客户端信息
client_name = client
client_ip = 127.0.0.1
client_port = 9003
# 所属参与方
own_name = server
# 协议类型
pto_type = PSU
# 元素字节长度
element_byte_length = 8
# 对数集合大小(log(n))
server_log_set_size = 20,18,16,14
client_log_set_size = 20,18,16,14
# 协议名称
psu_pto_name = GMR21
# 是否使用安静OT
silent_cot = false
# silent_cot = true
默认是PSU也就是同态求交,想测试PSI这里需要改
# 协议类型 pto_type = PSI
# 协议名称 psi_pto_name = GMR21