leon-mbs/ppolib

乌克兰POS机的数字签名库

1.5.2 2024-09-20 10:57 UTC

README

根据DSTU-4145标准实现数字签名的库

大部分代码从https://github.com/dstucrypt/jkurwa移植而来

安装
composer require leon-mbs/ppolib

如何使用

解包密钥和证书

$cert = \PPOLib\Cert::load($certdata) ;

$key = \PPOLib\KeyStore::load($keydata,$password,$cert ) ;

其中 $certdata - 证书文件内容 $keydata - 密钥文件内容 $password - 密钥密码

由于解包过程比较慢,应将 $cert 和 $key 对象放入会话或序列化到文件并保存在安全的地方以供后续使用

加载jks文件(PrivatBank)list($key,$cert) = \PPOLib\KeyStore::loadjks($jks,$password) ;

签名文档或命令
$signeddata= \PPOLib\PPO::sign($message,$key,$cert);

脱签(无数据)
$signeddata= \PPOLib\PPO::sign($message,$key,$cert,true);

带有TSP标记的签名
$signeddata= \PPOLib\PPO::sign($message,$key,$cert,false,true);

向税务局发送请求

$answer = \PPOLib\PPO::send($signeddata,'cmd') ;

如果发送文档,则响应将包含签名数据,需要从中提取文档响应(通常是xml)

$data = \PPOLib\PPO::decrypt($answer ) ;

如果响应来自FS,则它将正确签名,可以设置第二个参数为true以加快处理速度。

获取签名信息
$info = \PPOLib\PPO::signinfo($answer) ;

加密消息。
使用密钥-证书对进行加密以及接收者的证书 \PPOLib\PPO::encode($message,$forcert,$key,$keycert );

解密消息。
使用接收者证书的密钥
\PPOLib\PPO::decode($message,$key );

用于发送到电子柜台的函数

\PPOLib\DFS::encodeCrypt($encodedData,$h,$keycert ) ;
\PPOLib\DFS::encodeSign($signedData,$h ) ;

头部
$h=\PPOLib\DFS::createHeader($keycert,"admin@gmail.com","test.txt") ;

示例顺序

加密数据
$encoded= \PPOLib\PPO::encode($message,$forcert,$key,$keycert);

$h=\PPOLib\DFS::createHeader($keycert,"admin@gmail.com","test.txt") ;

打包
$transport=\PPOLib\DFS::encodeCrypt($encoded,$h,$keycert ) ;

如果需要签名
$signed= \PPOLib\PPO::sign($transport,$key,$keycert);
$transport=\PPOLib\DFS::encodeSign($signed,$h ) ;

解包
\PPOLib\DFS::decode($ticket ) ;