ionux/phactor

Phactor 是一个高性能的 PHP 实现,用于生成和验证基于 secp256k1 曲线参数的私钥/公钥(非对称)EC 密钥对和 ECDSA 签名所需的椭圆曲线数学函数。这个库还包括一个用于生成服务识别号码(SINs)的类。

v1.0.8 2018-04-27 16:49 UTC

This package is not auto-updated.

Last update: 2024-09-14 16:45:00 UTC


README

Phactor Logo

Build Status Scrutinizer Code Quality Software License Latest Release

描述

Phactor 是一个基于 secp256k1 曲线参数生成私钥/公钥 EC 密钥对和 ECDSA 签名的椭圆曲线数学函数的高性能 PHP 实现。此库还包括一个基于已发布的 身份协议 v1 规范生成服务识别号码(SINs)的类。

这些 PHP 类目前设计用于与用于比特币相关加密操作的软件一起使用,但最终、长期目标是成为一个更通用的数学库,也可以用于科学计算和其他非椭圆曲线加密项目 - 基本上任何你需要 PHP 实现的任意精度数学函数的方便接口的地方。

注意:这些类需要 BC 或 GMP 数学 PHP 扩展(首选 GMP,但将使用 BC 作为后备)。您可以在此处了解更多关于 GMP 扩展的信息:https://php.ac.cn/manual/en/book.gmp.php

安装

使用 composer 安装此项目非常简单

php composer.phar require ionux/phactor:1.0.8

如果您已安装 git,您可以克隆仓库

git clone https://github.com/ionux/phactor.git

或者您可以通过从 发布 页面下载 zip 文件并将其内容提取到项目的源目录中手动安装。

注意:Phactor 正在积极开发中,因此您应始终从 发布 页面下载项目。这些包是生产环境中唯一应该依赖的包,因为最新源代码的变化可能包含回归。

使用

将此类集成到项目中非常简单。例如,在包含必要的 Phactor 类文件(或使用自动加载器)后,生成密钥对

$key = new \Phactor\Key;

$info = $key->GenerateKeypair();

成功后将返回一个关联数组

Array
(
  [private_key_hex] => 7a4fbece43963538cb8f9149b094906168d71be36cfb405e6930fddb42da2c7d
  [private_key_dec] => 55323065337948610870652254548527896513063178460294714145329611159...
  [public_key] => 043fbbf44c3da3fec12bf7bac254fd176adc3eaed79470932b574d8d60728eb206fb7a...
  [public_key_compressed] => 033fbbf44c3da3fec12bf7bac254fd176adc3eaed79470932b574d8d607...
  [public_key_x] => 3fbbf44c3da3fec12bf7bac254fd176adc3eaed79470932b574d8d60728eb206
  [public_key_y] => fb7ac7ac6959f75a6859a1a8d745db7e825a3c5c826e5b2e4950892b35772313
)

根据您硬件的速度,使用 GMP 生成密钥大约需要 10 毫秒或更少

要生成 ECDSA 签名

$sig = new \Phactor\Signature;

$signature = $sig->generate('my message to sign...', $info['private_key_hex']);

它将返回 ASN.1 DER 格式的编码签名

30440220421cfa96cb4f735cc768e8e2acd6bdf87c9b731ded3184f05a146ba0709cf24802204a21831926b14...

要验证现有签名,调用 Verify() 函数,它返回布尔值 true/false

$sig = new \Phactor\Signature;

if ($sig->Verify($signature, $message, $publickey) == false) {
  // The signature is invalid - reject!
} else {
  // The signature is valid.
}

签名和密钥已通过 OpenSSL 进行测试,并且是互操作的。事实上,任何可以导入/导出正确 EC 密钥对和 ECDSA 签名的其他项目都将与这个库兼容。

注意:在返回给调用者之前,所有点和签名都经过数学验证。如果点或签名未通过验证方法,将抛出 \Exception。

生成服务识别号码(SINs)的类以类似方式工作。传递十六进制形式的压缩公钥,例如

$sin = new \Phactor\Sin;

print_r($sin->Generate($info['public_key_compressed']));

它将返回一个以字母 'T' 开头的单个 BASE-58 编码值(特定值到 SINs)。例如

Tf61EPoJDSjbp6tGoyjbTKq7XLABPVcyUwY

注意:当使用此类生成与比特币相关的项目中的SIN时,未压缩公钥的使用已被弃用。为保持与比特币网络的兼容性,请仅使用压缩公钥生成SIN。

发现了一个错误吗?

请告诉我!发送一个拉取请求或补丁。有疑问?问吧!我将回复所有提交的问题。

支持

  • GitHub问题
    • 如果您在使用此库时遇到问题,请打开一个问题

贡献

您想帮助这个项目吗?太好了!您不必是开发者。如果您发现了一个错误或有一个改进的想法,请打开一个问题并告诉我。

如果您是想要为此项目贡献增强、错误修复或其他补丁的开发者,请将此存储库分叉并提交一个包含您的更改的拉取请求。我会审查所有PR!

此开源项目在MIT许可证下发布,这意味着如果您想在自己的项目中使用此项目的代码,您可以自由地这样做。说到这里,如果您在某个酷炫的新项目中使用了Phactor,我想听听关于它的事!

许可证

  Copyright (c) 2015-2024 Rich Morgan, rich@richmorgan.me

  The MIT License (MIT)

  Permission is hereby granted, free of charge, to any person obtaining a copy of
  this software and associated documentation files (the "Software"), to deal in
  the Software without restriction, including without limitation the rights to
  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
  the Software, and to permit persons to whom the Software is furnished to do so,
  subject to the following conditions:

  The above copyright notice and this permission notice shall be included in all
  copies or substantial portions of the Software.

  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.