安全多方计算之SPDZ初探(三)

自己写了个冒泡排序练手。

内容如下:

from util import if_else
from Compiler import types

def maopao(a):
	print_ln("hello: %s", a.reveal())
	n = len(a)
	@for_range(n)
	def _(i):
		@for_range(n)
		def _(j):
			@if_((a[i] > a[j]).reveal())
			def _():
				# print_ln("!!!")
				tmp = a[i]
				a[i] = a[j]
				a[j] = tmp
	return a

n = 5

a = Array(n, sfix)

@for_range_opt(n)
def _(i):
    a[i] = sfix.get_input_from(0)

d = maopao(a)
print_str("%s", d.reveal())

print_ln('Data receive success !!')

程序解释:

首先定义了一个函数,都是python语法,实现冒泡排序

然后指定数组大小n=5。定义一个sfix类型的数组a。sfix指安全的定点数(Secret fixed-point number represented as secret integer.)。

通过for循环将参与方的数据写入数组a。其中,get_input_from(0),0代表参与方的编号(ID)(这里是0号)。

注意for循环的写法,跟python语法还是有区别的。

冒泡排序流程就不解释了,大家都懂。注意一个坑:

在if条件语句里不可以写

a[i] > a[j]

要写:

(a[i] > a[j]).reavel()

否则会出错。原因暂时不知道(我也是初学者)。猜测,他们的比较结果不是一个单值,而是一个类或者元组之类的东西,必须通过调用reavel才能返回他们的值。

程序编译与执行:

1. 程序编译:merge_and_sort是程序文件名,源代码放在Programs/Source/中

./compile.py -B 32 merge_and_sort

2. 生成证书与密钥文件,建立安全的通道:在这个程序里只有一方参与计算。

Scripts/setup-ssl.sh 1

3. 输入参与方的数据:数据存储在d0.dat文件里,这里是五个数,代表一个数组。

cat testData_gp/d0.dat > Player-Data/Input-P0-0

4. 执行程序:

./semi-party.x -N 1 -p 0 merge_and_sort

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值