SPDZ开源库——基础OT的用法

最近研究了spdz源代码里的BaseOT.h 写了两个测试程序。第一个是OT里的发送者,第二个是接受者。
useOT.cpp

#include <iostream>

#include "OT/BaseOT.h"  
#include "Networking/Player.h"
#include "Tools/octetStream.h"

using namespace std;

int main()
{
	
	
	int player = 0;
	int nplayers = 2;
	const char* servername = "127.0.0.1";
	int pnb = 8000;
	int my_port = 8001;
	Names n = Names(player,nplayers,servername,pnb,my_port);
	//Names n = Names(player,nplayers,servername,pnb,Names::DEFAULT_PORT);
	RealTwoPartyPlayer tp = RealTwoPartyPlayer(n,1,101);
	//PlainPlayer p = PlainPlayer(n,10);

	OT_ROLE ot_role = SENDER;
	//int mynum = 8000;
	
	RealTwoPartyPlayer *s;
	s = &tp;
	BaseOT send = BaseOT(8,128,s, ot_role);
	send.exec_base();

	cout<< "Success !!" <<endl; 
	return 0;
}

程序详解:

  • 实例化类Names用来开启并监听端口,进行通信。
  • 实例化类RealTwoPartyPlaye 用来模拟两个参与方。
    • 第一个参数是Names类
    • 第二个参数:other_player,表示另一个参与者的编号
    • 第三个参数:唯一标志id
  • 实例化一个BaseOT类
    • 第一个参数nOT,表示执行OT的数量,这里我设置为8,注意必须为4的倍数,要不会报错。
    • 第二参数表示消息的长度,这里我设置为128比特。
    • 第三个参数,参与方的类指针
    • 第四个参数,ot的角色,这里有三个角色:发送者(SENDER),接收者(RECEIVER),两者都是(BOTH)。
    • 实例化时候,也可以只给第三四个参数,这时候nOT和ot_length都默认为128
  • 调用类方法exec_base()。运行的时候只需要这些参数,所有消息和选择比特都随机生成了。
    useOTRec.cpp
#include <iostream>

#include "OT/BaseOT.h"  
#include "Networking/Player.h"
#include "Tools/octetStream.h"

using namespace std;

int main()
{
	int player = 1;
	int nplayers = 2;
	const char* servername = "127.0.0.1";
	int pnb = 8000;
	int my_port = 8002;
	Names n = Names(player,nplayers,servername,pnb,my_port);
	//Names n = Names(player,nplayers,servername,pnb,Names::DEFAULT_PORT);
	RealTwoPartyPlayer tp = RealTwoPartyPlayer(n,0,101);
	//PlainPlayer p = PlainPlayer(n,10);

	OT_ROLE ot_role = RECEIVER;
	//int mynum = 8000;
	
	RealTwoPartyPlayer *s;
	s = &tp;
	BaseOT rec = BaseOT(8,128,s, ot_role);
	rec.exec_base();

	cout<< "Success !!" <<endl; 
	return 0;
}

makefile文件

# objs_SimpleOT = ../SimpleOT/ot_sender.o ../SimpleOT/ot_receiver.o ../SimpleOT/sc25519_random.o ../SimpleOT/ge25519_pack.o ../SimpleOT/ge25519_double.o ../SimpleOT/fe25519_pack.o
objs_SimpleOT = ../SimpleOT/*.o
all: useOT useOTRec
useOT: useOT.o
	g++ -o useOT useOT.o ../OT/*.o $(objs_SimpleOT) ../libSPDZ.so -lntl -lmpirxx -lmpir -lsodium -lboost_system -lssl -lcrypto -lrt

useOTRec: useOTRec.o
	g++ -o useOTRec useOTRec.o ../OT/*.o $(objs_SimpleOT) ../libSPDZ.so -lntl -lmpirxx -lmpir -lsodium -lboost_system -lssl -lcrypto -lrt

useOT.o: useOT.cpp ../Networking/Player.h ../OT/BaseOT.h
	g++ -c useOT.cpp -I ~/spdz029 -march=native -g -Wextra -Wall -O3 -I. -pthread    -DUSE_GF2N_LONG '-DPREP_DIR="Player-Data/"'  -std=c++11 -Werror -fPIC -MMD -MP -c

useOTRec.o: useOTRec.cpp ../Networking/Player.h ../OT/BaseOT.h
	g++ -c useOTRec.cpp -I ~/spdz029 -march=native -g -Wextra -Wall -O3 -I. -pthread    -DUSE_GF2N_LONG '-DPREP_DIR="Player-Data/"'  -std=c++11 -Werror -fPIC -MMD -MP -c

clean:
	rm -f *.o main *.out useOT useOTRec *.d

编译

make all
编译时注意事项

SimpleOT文件夹里,ot_sender_test.cot_receiver_test.c里的main函数注释掉。然后分别运行命令make SimpleOT/ot_sender_test.omake SimpleOT/ot_receiver_test.o

运行

开两个终端,一个终端运行./useOT,另一个运行./useOTRec

运行结果截图

./useOT
在这里插入图片描述
./useOTRec
在这里插入图片描述

运行说明

如果你的运行结果只有 Success!! 也表示运行成功。如果你想像上面一样显示结果,你需要修改OT/BaseOT.cpp文件,在里面定义一个宏#define BASE_OT_DEBUG。然后编译make BaseOT.o。最后,make cleanmake all 两个测试程序。

--------------------------分割线---------------------------------------------
细心的小伙伴可能会在运行截图里发现一个bug。这个bug具体是什么,我不在这里说了,大家可以找一找,欢迎在评论区讨论。对于这个bug,根据与作者沟通,发布版本是不存在的,是因为我加了宏BASE_OT_DEBUG引起的。但是这个bug也不是我写的,确实是存在在0.2.9版本(博主使用的spdz版本)中的。在使用spdz库时,只要你不加这个宏,就没有bug。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值