跳转到主要内容

Ed25519数字签名的底层ctypes包装器。

项目描述

关于Ed25519

Ed25519是一种具有多个吸引人特点的公钥签名系统,包括

  • 快速的单签名验证。

  • 非常快速的签名。

  • 快速密钥生成。

  • 高安全级别。

  • 小签名。签名适合64字节。

  • 小密钥。公钥仅占用32字节。

此文本摘自 http://ed25519.cr.yp.to/.

关于ed25519ll

ed25519ll是Ed25519公钥签名系统的底层包装器。它使用Extension()编译一个不是Python扩展模块的共享库,然后使用ctypes与库通信。希望每个平台只需编译ed25519ll一次,然后在Python版本之间重用其共享库。

此包装器目前公开了Ed25519的supercop-ref10实现,在我的2.6GHz Athlon上,每核心达到约7200个签名/秒和2900个验证/秒,包括包装器开销。

此包装器还包含一个性能相当好的纯Python回退。与参考实现不同,Python实现不包含针对时间攻击的保护。

示例

import ed25519ll
msg = b"The rain in Spain stays mainly on the plain"
kp = ed25519ll.crypto_sign_keypair()
signed = ed25519ll.crypto_sign(msg, kp.sk)
verified = ed25519ll.crypto_sign_open(signed, kp.vk)
assert verified == msg  # but ValueError is raised for bad signatures

API

ed25519ll直接公开了supercop-ref10 API。所有消息和密钥都是二进制字符串(bytes()或Python 2 str())。已签名的消息由64个签名字节与消息连接而成。

Keypair()是一个命名元组(vk, sk),包含验证密钥(32字节)和签名密钥(64字节)。签名密钥的后半部分是验证密钥的副本。

crypto_sign_keypair()返回一个新的Keypair()。使用os.urandom()作为随机种子。此操作的速度与签名相当。

crypto_sign(msg, sk) 接收一条消息(任何二进制字符串)和一个 64 字节的签名密钥(来自 crypto_sign_keypair())并返回一个已签名的消息。

crypto_sign_open(signed, vk) 接收一个已签名的消息(64 字节签名 + 消息)和相应的 32 字节验证密钥,并返回不带附加签名的消息副本。对于无效签名,将引发 ValueError。

0.6

  • 包含纯 Python 降级实现

0.5

  • 切换到 ctypes 以避免此类简单库的解析开销

0.4

  • 再次切换到 ffi.verify()

0.3

  • 切换到 supercop-ref10

  • 切换到 ffi.verify()

  • 更新以支持 cffi 0.3

  • 更新以支持 Python 3.3

0.2

  • 100% 测试覆盖率

  • 基本文档

0.1

  • 初始发布

项目详情


下载文件

为您的平台下载文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源分布

ed25519ll-0.6.tar.gz (74.8 kB 查看哈希)

上传时间

由...支持