基于numpy和gmpy2实现的线性秘密共享方案(LSSS)

这篇博客介绍了如何基于numpy和gmpy2库实现线性秘密共享方案(LSSS),包括Matrix_Construct.py和LSSS.py两个文件的详细内容,适合需要理解及实现CP-ABE方案的读者。
摘要由CSDN通过智能技术生成

基于numpy和gmpy2实现的线性秘密共享方案(LSSS)

为了实现自己写的CP-ABE方案,写的这个,代码放到这儿,分享给大家。
至于numpy和gmpy2的安装使用,请自行在CSDN找,我的另一篇博客中也有提及。

Matrix_Construct.py

#! usr/bin/env python3
# -*- coding: utf-8 -*-

#说在最前,整体代码效率很低,也没用什么函数编程,递归之类的,都是一些笨办法,但笨办法比较好看懂,也算是一个优点吧-_-!!!
#代码写的确实有点烂,但好在功能实现了,也算有一点点小小的成就感,至于改进什么的,就留给各位看客了,也许在未来会发一个效率改进的版本吧,不过近期没有这个打算,嘻嘻!!!
#至于代码的基础理论,请参看CSDN上博主e小王同学V的博客https://blog.csdn.net/ping802363/article/details/77900273
#e小王同学V的博客中有些错误,但都无伤大雅,确实写得很好,浅显易懂,再想深究的请参看论文
#1,Linear Integer Secret Sharing and Distributed Exponentiation
#2,An expressive and provably secure Ciphertext-Policy Attribute-Based Encryption
#论文请自行下载,本人就不提供了。
#下面进入正题


import numpy as np

def matrix_construct( policy_list ):
    #代码的输入要严格按照相关的要求录入,np.array( [[1,2,5],[1,3,4]], dtype = np.int )
    #且每行中元素个数不能为1,为1的话没有意义
    #每行的元素间均为与门1&2&5,行与行之间为或门[1,2,5]or[1,3,4]

    #p_len访问策略中行的数量,即或门的数量,先计算与门,再计算或门
    p_len = len( policy_list )
    list_and = []
    for i in range( p_len ):
        list_and.append( matrix_construct_and( policy_list[i] ) )
    return_value = matrix_construct_or( list_and[0], list_and[1] )
    for i in range( p_len - 2 ):
        return_value = matrix_construct_or( return_value, list_and[i+2] )
    return return_value.astype(np.int)

#计算与门元素生成的矩阵
def matrix_construct_and( list_and ):
    length = len( list_and )
    
    #若长度为2,则不进行计算,直接返回这个矩阵
    two_item_array = np.array( [[1,1],[0,1]] )

    #虽然输入中已经确定了不可能为1,但还是放在这儿,以方便理解算法
    if ( length ==1 ):
        return np.array( [[1]] )
    elif ( length == 2 ):
        return two_item_array
    else :
        #设定返回值
        return_value = two_item_array

        #每次循环都是一个大矩阵与单条目矩阵[[1]]进行计算
        for i in range( length - 2 ):
            return_temp = np.empty( [ i+3, i+3 ] )

            #生成c_a的过程
            c_a = return_value[...,0]
            c_a_temp =
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值