A simple class that allows to extract the original file from a signed p7m file.
- PHP 7.0+
- Symphony Prcess 3.3 or 4.0+
Behind the scenes this package leverages openssl. You can verify if the binary installed on your system by issueing this command:
which openssl
If it is installed it will return the path to the binary.
You can install the package via composer:
composer require filippo-toso/p7m-extractor
Extracting text from a pdf is easy. P7M::extract('test.pdf.p7m', 'test.pdf', 'C:/Program Files/OpenSSL-Win64/bin/openssl.exe')
use FilippoToso\P7MExtractor\P7M;
$success = (new P7M())
->setSource('source.pdf.p7m')
->setDestination('destination.pdf')
->save();
Or easier:
use FilippoToso\P7MExtractor\P7M;
$success = P7M::convert('source.pdf.p7m', 'destination.pdf');
By default the package will assume that the openssl
command is located at /usr/bin/openssl
.
If it is located elsewhere pass its binary path to constructor
use FilippoToso\P7MExtractor\P7M;
$success = (new P7M('/custom/path/to/openssl'))
->setSource('source.pdf.p7m')
->setDestination('destination.pdf')
->save();
or as the last parameter to the extract
static method:
$success = P7M::convert('source.pdf.p7m', 'destination.pdf', '/custom/path/to/openssl');
If you want to get the content as a string instead of saving it to a file you can use the get() method or the extract() static method.
By default the package will assume that the openssl
command is smime
.
If necessary you can use cms
instead
use FilippoToso\P7MExtractor\P7M;
$success = (new P7M('/custom/path/to/openssl'))
->setCommand('cms')
->setSource('source.pdf.p7m')
->setDestination('destination.pdf')
->save();
You can also add another param to the command line, for example:
use FilippoToso\P7MExtractor\P7M;
$success = (new P7M('/custom/path/to/openssl'))
->setCommand('cms')
->setExtraParam('-no_attr_verify')
->setSource('source.pdf.p7m')
->setDestination('destination.pdf')
->save();
The last example is usefull to solve issues on some kind of p7m files (probably old ones):
cms
solve problemes like Error reading S/MIME message - Exit Code: 2 (Misuse of shell builtins)
-no_attr_verify
is usefull when receiving errors like this: rsa routines:int_rsa_verify:bad signature - CMS routines:CMS_SignerInfo_verify:verification failure
(no_attr_verify: Do not verify the signer's attribute of a signature)