leon-mbs / ppolib
乌克兰POS机的数字签名库
Requires
- php: ^8.0.0
- sop/asn1: 4.1.1
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 ) ;