libsecp256k1的跨平台python cffi绑定;
coincurve的Python项目详细描述
目录
功能
- 最快的实现速度(比OpenSSL快10倍以上)
- 干净、易用的API
- 频繁更新 libsecp256k1 master
- Linux、MacOS和Windows都有64位和32位体系结构的二进制软件包 <李>linux&macos使用gmp实现更快的计算
- 确定性签名通过RFC 6979
- 默认情况下,不可延展签名(低S格式)
- 安全、不可延展的ECDH实现
- 在MacOS上实现对https://bugs.python.org/issue28150" rel="nofollow">https://bugs.python.org/issue28150的修复以支持Python3.6+。
用户
- https://www.ethereum.org
- https://lbry.io
- https://ark.io
- https://www.augur.net
- https://www.nucypher.com
- https://raiden.network
- https://golem.network
- https://omisego.network
以及 更多信息
安装
coincurve在pypi上发布,并在linux/macos和windows上提供 支持Python2.7/3.5+和PyPy3.5-V5.8.1+。
$ pip install coincurve
如果您所在的系统没有预编译的二进制控制盘(例如freebsd) 然后pip将获取源代码来构建自己。您必须有必要的包裹。
在debian/ubuntu上,必需的系统包是:
- 基本构建
- 汽车制造
- 包配置
- libtool
- libffi开发工具
- python3 dev (或 python dev 对于python 2)
- libgmp开发程序 (可选)
在MacOS上,必需的自制软件包是:
- 汽车制造
- 包配置
- libtool
- libffi
- gmp (可选)
API
coincurve提供了一个简单的api。
coincurve.verify_signature
验证签名(签名、消息、公钥、哈希器=SHA256、上下文=全局上下文)
验证某些消息是否由公钥所有者签名。
参数:
< Buff行情>- 签名 ( 字节 )-要验证的签名。
- 消息 ( 字节 )—假定已签名的消息。
- 公钥 ( 字节 )—压缩或未压缩形式的公钥。
- 散列器 -要使用的散列函数,可以是 none 。哈希器(消息)必须返回32字节。
- 上下文 ( coincurve.context )
返回: bool
coincurve.privatekey的coincurve.privatekey属性
所有实例都有一个类型为coincurve.public key的公共密钥
私有密钥(secret=none,context=global_context)
参数:
< Buff行情>- 秘密 ( 字节 )-使用的秘密。
- 上下文 ( coincurve.context )
方法:
类方法 来自十六进制(十六进制,上下文=全局上下文)
类方法 来自_int(num,context=global_context)
类方法 来自PEM(PEM,context=global_context)
类方法 来自顺序(顺序,上下文=全局上下文)
签名(消息,hasher=sha256,自定义标志=none)
参数:
< Buff行情>- 消息 ( 字节 )-要签名的消息。
- 散列器 -要使用的散列函数,可以是 none 。哈希器(消息)必须返回32字节。
- 自定义值 -以 形式的arity 2元组(nonce fn,nonce_data) 。参考: secp256k1.h
返回: 字节 。68<;=len(签名)<;=71
符号可恢复(消息,hasher=sha256)
参数:
< Buff行情>- 消息 ( 字节 )-要签名的消息。
- 散列器 -要使用的散列函数,可以是 none 。哈希器(消息)必须返回32字节。
返回: 字节
ECDH(公共密钥)
在固定时间内计算Diffie Hellman的秘密。 注意: 这会通过返回来防止延展性 sha256(x) 而不是直接的 x 坐标。参见 https://github.com/ofek/coincurve/issues/9
参数:
< Buff行情>- 公钥 ( 字节 )—另一方以压缩或未压缩形式的公钥。
返回: 字节
添加(标量,update=false)
参数:
< Buff行情>- 标量 ( 字节 )-要添加的标量。
- 更新 ( bool )-如果 true ,将更新并返回 self
返回: coincurve.privatekey
乘法(标量,update=false)
参数:
< Buff行情>- 标量 ( 字节 )-要乘法的标量。
- 更新 ( bool )-如果 true ,将更新并返回 self
返回: coincurve.privatekey
到_hex()
到@int()
到pem()
到目的地
共曲线.publickey
公钥(data,context=global_context)
参数:
< Buff行情>- 数据 ( 字节 )—压缩或未压缩形式的公钥。
- 上下文 ( coincurve.context )
方法:
classmethod 来自_secret(secret,context=global_context)
classmethod 来自有效的密钥(secret,context=global\u context)
类方法 从点(x,y,context=global_context)
类方法 来自签名和消息(序列化的信号,消息,哈希器=SHA256,上下文=全局上下文)
classmethod 组合键(公共键,context=global\u context)
参数:
< Buff行情>- 公共密钥 ( 列表 )-a 列表 的coincurve.publickey 要添加。
- 上下文 ( coincurve.context )
返回: coincurve.publickey
格式(压缩=真)
-
< < > >标准计量器:
< Buff行情>
- 压缩的 ( bool )
返回:公钥序列化为 字节
点()
- 返回:(x,y)
验证(签名,消息,hasher=sha256)
验证某个消息是否由该公钥的所有者签名。
参数:
< Buff行情>- 签名 ( 字节 )-要验证的签名。
- 消息 ( 字节 )—假定已签名的消息。
- 散列器 -要使用的散列函数,可以是 none 。哈希器(消息)必须返回32字节。
返回: bool
添加(标量,update=false)
参数:
< Buff行情>- 标量 ( 字节 )-要添加的标量。
- 更新 ( bool )-如果 true ,将更新并返回 self
返回: coincurve.publickey
乘法(标量,update=false)
参数:
< Buff行情>- 标量 ( 字节 )-要乘法的标量。
- 更新 ( bool )-如果 true ,将更新并返回 self
返回: coincurve.publickey
联合收割机(公共密钥,更新=false)
参数:
< Buff行情>- 公共密钥 ( 列表 )-a 列表 的coincurve.publickey要添加。
- 更新 ( bool )-如果 true ,将更新并返回 self
返回: coincurve.publickey
积分
- libsecp256k1的贡献者。
- secp256k1 py的贡献者。 虽然coincurve几乎是一个完整的重写,但大部分构建系统 由ulope提供。
历史记录
强调重要的变化。
12.0.0
- 新功能: 针对PyPy3.6 v7.1.1-beta的Linux上的二进制控制盘!
- 新增: 适用于Python3.8.0-Alpha.3的MacOS上的二进制控制盘!
- 新的: Linux上的二进制轮子现在也使用新的 manylinux2010 64位平台规范构建!
- libsecp256k1 master的改进
11.0.0
- 通过将捆绑的libsecp256k1 dir放在路径的第一个位置来修复一些链接场景
- 允许使用环境变量重写系统libsecp256k1
- 添加基准
- 使用codecov跟踪覆盖范围
- 使用黑色进行代码格式化
10.0.0
- 支持毒性检测
- 与最新的libsecp256k1 ecdh api兼容
- 从源代码生成时,使libgmp为可选
9.0.0
- MacOS的固定轮子
- 中断: 放弃对32位MacOS的支持
8.0.2
- 不再打包测试
8.0.0
- 新的: python 3.7的二进制轮子!
- 已更改: MacOS for Python 3.5上的二进制控制盘现在使用自制 由于新的安全要求而编译的python
- 使生成系统支持新的github&pypi安全要求
- libsecp256k1 master的改进
查看所有历史记录