python多签名协议MuSig的实现

pymusig的Python项目详细描述


Python的MuSig多签名

这是MuSig多重签名方案的Python实现,由几个比特币贡献者提出。 这是一种在不同签名参与者之间安全且不受信任地创建聚合多签名的方案。使用的签名方案是schnorr签名方案。 将来对草案或参考实施的更改将在此处进行调整。在

schnorr规范在BIP-340中定义,代码和测试向量来自here。在

MuSig代码遵循libsecp256k1的实现,并从implementation中提取测试向量。在

注意:此包仅用于测试和学习,不用于实时用例。Don't risk funds,可能存在错误。

安装

Python 3是必需的。在

Github:

git clone git://github.com/rage-proof/MuSig.git
cd MuSig
python3 setup.py install

或PyPI:

^{pr2}$

使用

# multiple signer can create aggregated signature on a combined public key# signer Alice and Bob doing the same steps in parallel #Alice's session:importosfrompymusigimportCombinedPubkey,MuSigSession,schnorr_verify# count signerN_SIGNERS=2# id from signer Alicei_alice=0#set the message and list of pubkeyspubkeys=[pubkey_alice,pubkey_bob]msg=sha256(b'Some Message')#create combined pubkeycombined_pk=CombinedPubkey(pubkeys)#create session#WARNING:every session needs a new random session ID, otherwise a malicious signer can extract the secret keysession_id_alice=os.urandom(32)session_alice=MuSigSession(session_id_alice,N_SIGNERS,i_alice,seckey_alice,combined_pk.get_key(),combined_pk.get_pre_session(),msg)#Three rounds of communication are necessary#1. Round: receive and exchange Nonce commitmentsnonce_commitment_alice=session_alice.get_nonce_commitment()nonce_commitments=[nonce_commitment_alice,nonce_commitment_bob]#2. Round: receive and exchange Noncesnonce_alice=session_alice.get_public_nonce(nonce_commitments)nonces=[nonce_alice,nonce_bob]ifsession_alice.set_nonce(nonces)#create combined Nonce and partial signature for Aliceifsession_alice.combine_nonces()signature_alice=session_alice.partial_sign()#3. Round: exchange and validate partial signatures, create a combined signatureifsession_alice.partial_sig_verify(signature_bob,pubkey_bob,i_bob)sigs=[signature_alice,signature_bob]final_sig=session_alice.partial_sig_combine(sigs)#verify the schnorr signatureifschnorr_verify(msg,combined_pk.get_key(),final_sig)

三方签名的详细示例可在/tests/test_musig.py下找到

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java为什么会出现这些错误?表达式的非法开始   使用HttpUrlConnection的java测试URL仅适用于前面的www   在大数据集上使用kmeans的java堆外内存   查找Java RandomAccessFile如何以字符形式读取第n个字节   java Android从BroadcastReceiver获取标题和描述   java使用构造函数参数模拟嵌套类并测试方法   正在将Azure Blob项强制转换为Java文件对象   java并行运行testNG套件   java程序在运行时似乎没有进入   贬低Java规则引擎的优点和缺点   文本区域中的java中心文本   java JPA从多个表中选择错误   类Java问题使用类加载器重新加载代码   java如何在Spring非管理类上使用@Value   java(关闭)Gradle导入VS代码失败   java arraylist拆分(“空白”)并计算字数   Android/Java如何在单独的*中调用函数。java文件?   具有基本身份验证的java Apache Camel RSS模块   java为什么程序在出现溢出或下溢时不抛出异常