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 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7b75b7e6f4c7e7c172229aa78b13436ca9834ef5893598b49c7163d7ba55adf9 |
|
MD5 | 35b3190ffefb631e7c5a45d96d768f80 |
|
BLAKE2b-256 | 8a34b27ee501205893cf7cc537b4e6553a557eaaca14c4755aa1eaa500afac57 |