Similar to my last post about Zend_Mail S/MIME class, this one allows to digitally sign and even add TSA (timestamping) support to your PDF documents generated using Zend_Pdf. There is a standalone ASN1 parser included that can be used for other projects that require ASN1 data interchange. See https://en.wikipedia.org/wiki/PAdES , https://www.ietf.org/rfc/rfc3161.txt for reference. The challenge was to add the BytesRange element with right byte bounds of the signed document. How to use it:
setSigParams(array( 'Name' => 'Someone', 'Location' => 'Kharkov, UA', 'Reason' => 'I'm approving this document', 'ContactInfo' => 'email@example.com' )); $signature->setTSAParams(array( 'TSA_username' => '', 'TSA_password' => '', 'TSA_url' => 'https://timestamping.edelweb.fr/service/tsp', 'TSA_cert' => '', 'TSA_algorithm' => 'sha1' )); $pdf->setSignature($signature); $fp = fopen('tmp3.pdf','w'); $pdf->render(false,$fp); fclose($fp);
Note, that you need a writeable by php user directory (tmp in the example above). See attached Zend_Pdf modified class + Zend_ASN1 parser.