我正在使用Dabe scheme实施Charm,我需要在多个实体上共享公共参数。我尝试使用Charm附带的序列化API中的 objectToBytes ()函数序列化包含这些参数的charm对象,但我的脚本以退出代码139终止。
这是我的代码:
from charm.toolbox.pairinggroup import PairingGroup,ZR,G1,G2,GT,pair
from charm.toolbox.secretutil import SecretUtil
from charm.toolbox.ABEncMultiAuth import ABEncMultiAuth
from charm.core.engine.util import objectToBytes, bytesToObject
from charm.core.math.pairing import hashPair as extractor
from charm.schemes.dabe_aw11 import Dabe
# Global Setup
group = PairingGroup('SS512')
dabe = Dabe(group)
public_parameters = dabe.setup() # GP
# Trying to serialize public_parameters but...
# ...the following instruction causes the script <terminated, exit value: 139>
GP = objectToBytes(public_parameters, group)
我在Eclipse中运行调试模式并进入我的代码,问题似乎出现在PairingGroup
类定义中的 serialize ()函数中,该函数返回序列化()(编译)函数从charm.core.math.pairing
导入。
以前有人遇到过这个问题吗?关于如何在多个脚本上使用(导入)魅惑对象的任何建议?
谢谢
答案 0 :(得分:1)
GP或public_parameters是一个由'g'组成的字典,它是一个pairing.Element对象,'H'是一个lambda映射到一个哈希函数(随机oracle)。可能是objectToBytes和后续函数正在尝试序列化lambda映射并导致错误。
我测试了PairingGroup.serialize()函数,它确实适用于pairing.Element对象。根据我的理解,'g'值实际上是您需要分享的唯一值。 'H'只是一个固定组内的哈希映射:在Charm的情况下,对于dabe_aw11.py,它总是H = lambda x:group.hash(x,G1),其中G1来自charm.toolbox.pairinggroup。因此,您始终可以定义lambda映射并添加常量,共享'g',或者只调用setup()(选择'g'并定义'H'映射)并将'g'替换为先前选择的/共享一个。目标是从public_parameters字典中序列化'g',跳过那里的'H'。
这是我在博士学位概念验证中尝试的选项。利用dabe_aw11的论文。