. './vendor/autoload.php';
$content = file_get_contents(__DIR__ . '/Polozhenie.pdf');
$regexp
= '#ByteRange\[\s*(\d+) (\d+) (\d+)#'; // subexpressions are used to extract b and c
$result = [];
preg_match_all($regexp, $content, $result);
if (isset($result[2]) && isset($result[3]) && isset($result[2][0])
&& isset($result[3][0])
) {
$start = $result[2][0];
$end = $result[3][0];
if ($stream = fopen(__DIR__ . '/Polozhenie.pdf', 'rb')) {
$signature = stream_get_contents(
$stream, $end - $start - 2, $start + 1
); // because we need to exclude < and > from start and end
fclose($stream);
}
if (!empty($signature)) {
$binary = hex2bin($signature);
$seq = Sequence::fromDER($binary);
$signed_data = $seq->getTagged(0)->asExplicit()->asSequence();
$ecac = $signed_data->getTagged(0)->asImplicit(Element::TYPE_SET)
->asSet();
/** @var Sop\ASN1\Type\UnspecifiedType $ecoc */
$ecoc = $ecac->at($ecac->count() - 1);
$cert = Certificate::fromASN1($ecoc->asSequence());
foreach ($cert->tbsCertificate()->subject()->all() as $attr) {
/** @var Webmasterskaya\X501\ASN1\AttributeTypeAndValue $atv */
$atv = $attr->getIterator()->current();
echo $atv->type()->typeName() . ' : ' . $atv->value()->stringValue() . PHP_EOL;
}
}
}
Код и composer.json Для тестов https://gist.github.com/kernusr/aded2c230a05776bdbd456320f6ae33f
Туда же предложения/замечания пишите
Подскажите пожалуйста, да это все работает, а можно ли это все завернуть в функцию? Передал ей файл, а функция возвратила текст о сертификате. Я попробовал и у меня все время ругается на use(( syntax error, unexpected 'use' (T_USE) //Все разобрался, просто use вынес наверх файла function.php, а остальной код завернул в функцию. Вроде работает)
Обсуждают сегодня