ibnux/file-sign

A simple library to digitally sign a file using JWT

v0.1.3 2020-04-16 15:51 UTC

This package is auto-updated.

Last update: 2024-05-17 02:00:37 UTC


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.

License

3-Clause BSD.