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+。

安装

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

许可证

coincurve在这两个条件下分布

由您选择。

积分

  • 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的改进

查看所有历史记录

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

推荐PyPI第三方库


热门话题
Java Selenium测试无符号扩展   Java JDBC DB2“CLI0129E无更多句柄”   java无法使SeleniumWebDriver单击复选框   wordpress Http请求帖子只有在通过Java应用程序发送时才起作用   java在while循环中构建Flux对象   java如何使用EL从地图中检索所有值   java在ImagePanel上绘制形状   java为同一服务器上的多个应用程序提供相同的JMX Mbean类   java如何基于s显示文本字段:选择struts 2   单个Java变量可以接受原语或对象数组吗?   java如何在文件中找到最大字节?   java Springboot可执行文件JAR错误:由于缺少EmbeddedServletContainerFactory bean,无法启动EmbeddedWebApplicationContext   JavaSpringJMX级联/联合   eclipse外部的命令行JUnit测试   java设置放大gral plot会导致空plot   java Android小部件   java如何在不同片段中更改具有不同样式的动作栏标题?