arcula:一种安全的分层确定性钱包

arcula的Python项目详细描述


弓形

这个存储库包含了Arcula的概念证明实现,我们在MIT许可下发布的安全分层确定性钱包的设计

安装

Arcula需要Python3.7或更高版本

您可以从python包索引安装arcula,如下所示:

$ pip install --user arcula  # use "arcula[dev]" to install the optional development dependencies
$ python3 -c 'import arcula; print(arcula.__version__)'# Test the installation

用法

Arcula既可以用作命令行可执行文件,也可以用作库

命令行用法

待完成

库使用

首先,产生一个种子。在我们的示例中,我们使用实现BIP39的mnemonic package来生成种子

importmnemonicm=mnemonic.Mnemonic(language='english').generate()print(m)seed=mnemonic.Mnemonic.to_seed(m)

接下来,我们定义层次结构。 如果您想使用bip44标准,可以使用arcula.bip44中定义的助手,例如:

fromarculaimportbip44WALLET_CONFIG={'BCH':(# (n. of public, private addresses)(1,2),(4,5),(0,1))}w=bip44.ArculaBIP44(seed,WALLET_CONFIG)

这将生成一个具有以下图像层次结构的钱包。 ArculaBIP44类提供助手方法get_cold_storage_public_key()get_signing_key_certificate(path),它们分别返回由path指定的节点(例如m/44'/BCH/1/xpub/3)的冷库公钥和签名密钥以及授权证书。 请参阅下面的比特币现金示例了解详细用法。

否则,arcula.hierarchy.ArculaNode类表示Arcula层次结构中的节点,并允许创建任何自定义层次结构。 每个节点都由数字id和附加的tag标识。 此外,它还保存对其他节点的引用列表edges

例如,您可以实例化自定义二进制层次结构,如下所示:

fromarcula.hierarchyimportArculaNoderoot=ArculaNode(id=0,tag='root')left=ArculaNode(id=1,tag='l')right=ArculaNode(id=1,tag='r')root.edges=[left,right]

接下来,运行密钥派生过程:

fromarculaimportarculawallet=arcula.Arcula(root)wallet.keygen()

ArculaNode的实例在certificate_signing_key属性中保存其签名密钥和授权证书。 certificate是一对包含签名和已签名消息的签名。 例如:

left.certificate,left._signing_key

示例

比特币现金

文件utils/bch_test.py提供了一个如何使用arcula在比特币现金测试网络上发送和接收资金的示例。

在我们的示例中,我们将种子生成的随机性固定为correct horse battery staple,然后生成具有以下结构的bip44兼容钱包:

以绿色突出显示的节点首先从testnet水龙头接收bch,然后通过以下事务返回它们:

  1. 337a67d36b8ecdd6bfbf2db654e54d71fcfd7a295cc97494e47272d305a6f444
  2. 10594853b5dc6d482fc1abf24b68afde04ba71bbf7c780db4c98381064ded302

文件

大部分的弧函数都有大量的文档记录。 我们的academical paper描述了我们的设计见解、arcula的形式化定义及其核心的确定性层次密钥分配密钥、与bip32的详细比较以及形式化的安全性证明。

作者

  • 阿德里亚诺·迪卢西奥,罗马萨皮恩扎大学和史蒂文斯理工学院。
  • 丹尼洛·弗朗卡蒂,史蒂文斯理工学院。
  • Giuseppe Ateniese,史蒂文斯理工学院。

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

推荐PyPI第三方库


热门话题
使用C在任何情况下检索Java安装目录#   javascript ClassNotFoundException在NativeScript中使用。扩展()   如何将Hadoop路径对象转换为Java文件对象   JavaJersey 2.22:我应该在哪里定义REST资源的位置?   java复制数组并使用printall()方法将1添加到其大小,以返回新数组中的所有int   在Java代码中使用JMeter JDBC连接   Java8流。findFirst()仅在排序后才有意义?   用于授权的Java swagger注释   java如何执行未使用execmavenplugin调用的“Premain”方法   java请求错误,状态:0弹出a4j:支持   Java JUnit、接口、类标题   java需要正则表达式来匹配字符串   java Springboot Wildfly 10部署错误jdk。找不到不支持的模块   java notifyDataSetChanged()不起作用   java搜索将对象之间的双向链接转换为JSON格式的正确方法   java在json中使用多个不同的嵌套对象来改进   java JPA:将LocalDateTime属性与生成器进行比较。currentTimestamp()   java在遗留应用程序中查找硬编码字符串