ibnux / file-sign
A simple library to digitally sign a file using JWT
v0.1.3
2020-04-16 15:51 UTC
Requires
- firebase/php-jwt: ^5.2
README
A simple library to digitally sign a file using JSON Web Tokens (JWT) in PHP
Installation
Use composer to manage your dependencies and download PHP-FileSign:
composer require ibnux/file-sign
Example RS256 (openssl)
<?php require 'vendor/autoload.php'; use Ibnux\FileSign; $privateKey = <<<EOD -----BEGIN RSA PRIVATE KEY----- MIICXAIBAAKBgQC8kGa1pSjbSYZVebtTRBLxBz5H4i2p/llLCrEeQhta5kaQu/Rn vuER4W8oDH3+3iuIYW4VQAzyqFpwuzjkDI+17t5t0tyazyZ8JXw+KgXTxldMPEL9 5+qVhgXvwtihXC1c5oGbRlEDvDF6Sa53rcFVsYJ4ehde/zUxo6UvS7UrBQIDAQAB AoGAb/MXV46XxCFRxNuB8LyAtmLDgi/xRnTAlMHjSACddwkyKem8//8eZtw9fzxz bWZ/1/doQOuHBGYZU8aDzzj59FZ78dyzNFoF91hbvZKkg+6wGyd/LrGVEB+Xre0J Nil0GReM2AHDNZUYRv+HYJPIOrB0CRczLQsgFJ8K6aAD6F0CQQDzbpjYdx10qgK1 cP59UHiHjPZYC0loEsk7s+hUmT3QHerAQJMZWC11Qrn2N+ybwwNblDKv+s5qgMQ5 5tNoQ9IfAkEAxkyffU6ythpg/H0Ixe1I2rd0GbF05biIzO/i77Det3n4YsJVlDck ZkcvY3SK2iRIL4c9yY6hlIhs+K9wXTtGWwJBAO9Dskl48mO7woPR9uD22jDpNSwe k90OMepTjzSvlhjbfuPN1IdhqvSJTDychRwn1kIJ7LQZgQ8fVz9OCFZ/6qMCQGOb qaGwHmUK6xzpUbbacnYrIM6nLSkXgOAwv7XXCojvY614ILTK3iXiLBOxPu5Eu13k eUz9sHyD6vkgZzjtxXECQAkp4Xerf5TGfQXGXhxIX52yH+N2LtujCdkQZjXAsGdm B2zNzvrlgRmgBrklMTrMYgm1NPcW+bRLGcwgW2PTvNM= -----END RSA PRIVATE KEY----- EOD; $publicKey = <<<EOD -----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC8kGa1pSjbSYZVebtTRBLxBz5H 4i2p/llLCrEeQhta5kaQu/RnvuER4W8oDH3+3iuIYW4VQAzyqFpwuzjkDI+17t5t 0tyazyZ8JXw+KgXTxldMPEL95+qVhgXvwtihXC1c5oGbRlEDvDF6Sa53rcFVsYJ4 ehde/zUxo6UvS7UrBQIDAQAB -----END PUBLIC KEY----- EOD; $file = './document.pdf'; $fs = new FileSign($file); $fs->setLocation('Indonesia', 'Banten', 'Kota Serang'); $fs->setUserInfo('Ibnu Maksum', 'me@ibnux.net', 'PT. iBNuX'); $fs->setNote('This File is a proof that alien exists'); //this will create new File document.pdf.jwt.sign $fs->sign($privateKey, $publicKey); $fs->setUserInfo('Maksum', 'maksum@ibnux.net', 'PT. maksum'); $fs->setNote('Yes This File is a proof that alien exists'); //this will append sign to document.pdf.jwt.sign $fs->sign($privateKey, $publicKey); print_r($fs->verify($file)) if($fs->isVerified($file)){ echo "\nFILE VERIFIED\n"; }else{ echo "\nSIGN IS NOT VALID for this file, file corrupted or tampered\n"; }
New Lines in private keys
If your private key contains \n
characters, be sure to wrap it in double quotes ""
and not single quotes ''
in order to properly interpret the escaped characters.