用于ed25519数字签名的低级cTypes包装器。
ed25519ll的Python项目详细描述
关于ED25519
ed25519是一个公钥签名系统,具有以下几个吸引人的特性 包括:
- 快速单签名验证。
- 签得很快。
- 快速密钥生成。
- 高安全级别。
- 小签名。签名可容纳64个字节。
- 小钥匙。公钥只占用32字节。
这篇文章是从http://ed25519.cr.yp.to/删节而来的。
关于ED25519LL
ed25519ll是ed25519公钥签名的低级包装器 系统。它使用extension()来编译不是 python扩展模块,然后使用cTypes与库对话。与 幸运的是,每次只需要编译一次ed25519ll 平台,跨python版本重用其共享库。
这个包装器目前公开了 ED25519,在我的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()是验证密钥(32字节)的命名元组(vk, sk),并且 签名密钥(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
- 切换到SUPERCP-REF10
- 切换到ffi.verify()
- 更新以使用CFFI 0.3
- 更新以使用python 3.3
0.2
- 100%测试覆盖率
- 基本文档
0.1
- 初始版本