randrei98 / josephp
JSON对象签名和加密
2.0.0
2023-05-31 19:46 UTC
Requires
- php: >=8.1
- ext-gmp: *
- ext-openssl: *
- 2tvenom/cborencode: ^1.0.2
- randrei98/ecdsaphp: ^2.0.0
This package is auto-updated.
Last update: 2024-09-30 01:41:07 UTC
README
JOSE类似于COSE(CBOR对象签名和加密)
简介
目前只有一个选项,即'Sign1Message'。当结构中只有一个签名附加时,使用Sign1Messages,该签名由头部和有效负载组成,接收者必须知道公钥以验证消息。
Sign1Message的基本结构:['Sign1Message', {phdr}, {uhdr}, {payload}, {signature}]
phdr = 受保护头部,该字段包含需要被保护的信息。这些信息在签名过程中被考虑。uhdr = 未受保护头部,该字段包含不需要被保护的信息,因此不在签名过程中被考虑。有效负载 = 包含签名过程中被考虑的主要消息主体签名 = (r, s)配对签名
安装
使用composer安装。
$ composer require randrei98/josephp
签名和编码
use \ECDSA\Curves; use \ECDSA\Algorithms; use \JOSE\JOSEmessage; use \JOSE\Sign1Message; use \JOSE\Keys; //Set information for protected header $phdr = 'JON DOE'; $uhdr = ''; //Set the paylaod $payload = 'This is a test'; $pem = 'PRIVATE EC KEY HERE'; //Set params $curve = Curves::NIST256P(); $algo = Algorithms::ES256(); //Set the Key ID $KID = ''; $key = new Keys($pem, $KID, $curve, $algo); $message = new Sign1Message($phdr, $uhdr, $payload); //Assign the key to the message $message->key = $key; //Encode the message $encoded = $message->encode(); var_dump($encoded);
解码和签名验证
use \ECDSA\Curves; use \ECDSA\Algorithms; use \JOSE\JOSEmessage; use \JOSE\Sign1Message; use \JOSE\Keys; $curve = Curves::NIST256P(); $algo = Algorithms::ES256(); $publicKey_pem = 'PUBLIC EC KEY HERE'; $key = $key = new Keys($pem, '', $curve, $algo); $decoded = JOSEmessage::decode($encoded); $decoded->key = $key; var_dump($decoded->Verify_Signature());