/** * Get signature data from a single signature container. * * @param string $signature * @return array * @throws SetaPDF_Signer_Asn1_Exception */ private static function _getSignatureData($signature) { $data = array('certificates' => array(), 'signerCertificate' => null, 'subject' => null, 'MIDSN' => null); $asn1 = SetaPDF_Signer_Asn1_Element::parse($signature); $certificates = SetaPDF_Signer_Asn1_Element::findByPath('1/0/3', $asn1); $certificates = $certificates->getChildren(); $lastValidToTime = PHP_INT_MAX; for ($no = 0; $no < count($certificates); $no++) { $certificate = $certificates[$no]; $certificate = $certificate->__toString(); $certificate = "-----BEGIN CERTIFICATE-----\n" . chunk_split(base64_encode($certificate)) . "-----END CERTIFICATE-----"; $certificateInfo = openssl_x509_parse($certificate); $data['certificates'][] = $certificateInfo; if (isset($certificateInfo['validTo_time_t']) && $certificateInfo['validTo_time_t'] <= $lastValidToTime) { $lastValidToTime = $certificateInfo['validTo_time_t']; $data['signerCertificate'] = $certificateInfo; } } $data['subject'] = $data['signerCertificate']['name']; // extract MIDSN if (isset($data['signerCertificate']['extensions']['subjectAltName'])) { $subjectAltName = $data['signerCertificate']['extensions']['subjectAltName']; // Format: 'DirName: serialNumber = ID-16981fa2-8998-4125-9a93-5fecbff74515, name = "+41798...", description = test.ch: Signer le document?, pseudonym = MIDCHEGU8GSH6K83' if (preg_match("/pseudonym = ([^,]*)/", $subjectAltName, $match)) { $data['MIDSN'] = $match[1]; } } return $data; }
/** * Encapsulates an OCSP response value in a response envelope. * * @param string $encoded * @return string * @throws SetaPDF_Signer_Asn1_Exception */ protected function _prepareOscpResponse($encoded) { $main = SetaPDF_Signer_Asn1_Element::parse($encoded); $final = new SetaPDF_Signer_Asn1_Element(SetaPDF_Signer_Asn1_Element::SEQUENCE, '', array(new SetaPDF_Signer_Asn1_Element(SetaPDF_Signer_Asn1_Element::ENUMERATED, ""), new SetaPDF_Signer_Asn1_Element(SetaPDF_Signer_Asn1_Element::SEQUENCE | SetaPDF_Signer_Asn1_Element::TAG_CLASS_CONTEXT_SPECIFIC, '', array(new SetaPDF_Signer_Asn1_Element(SetaPDF_Signer_Asn1_Element::SEQUENCE, '', array(new SetaPDF_Signer_Asn1_Element(SetaPDF_Signer_Asn1_Element::OBJECT_IDENTIFIER, SetaPDF_Signer_Asn1_Oid::encode('1.3.6.1.5.5.7.48.1.1')), new SetaPDF_Signer_Asn1_Element(SetaPDF_Signer_Asn1_Element::OCTET_STRING, $main))))))); return (string) $final; }