randrei98/josephp

JSON对象签名和加密

2.0.0 2023-05-31 19:46 UTC

This package is auto-updated.

Last update: 2024-09-30 01:41:07 UTC


README

JOSE类似于COSE(CBOR对象签名和加密)

Software License

简介

目前只有一个选项,即'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());