mirror of
https://github.com/crypto-pro-web/crypto-pro-php.git
synced 2025-01-18 19:25:51 +03:00
Процесс переделки библиотеки
This commit is contained in:
parent
aa94495fe7
commit
895acf2a85
87
src/Certificate.php
Executable file
87
src/Certificate.php
Executable file
@ -0,0 +1,87 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Webmasterskaya\CryptoPro;
|
||||||
|
|
||||||
|
class Certificate
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* возвращает флаг действительности сертификата
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function isValid()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* возвращает указанное внутренее свойство у сертификата в формате Cades
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function getCadesProp()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* возвращает сертификат в формате base64
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function exportBase64()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* возвращает информацию об алгоритме сертификата
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function getAlgorithm()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* возвращает расшифрованную информацию о владельце сертификата
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function getOwnerInfo()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* возвращает расшифрованную информацию об издателе сертификата
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function getIssuerInfo()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* возвращает ОИД'ы сертификата
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function getExtendedKeyUsage()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* возвращает расшифрованные ОИД'ы
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function getDecodedExtendedKeyUsage()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* проверяет наличие ОИД'а (ОИД'ов) у сертификата
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function hasExtendedKeyUsage()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
@ -4,5 +4,112 @@ namespace Webmasterskaya\CryptoPro;
|
|||||||
|
|
||||||
class CryptoPro
|
class CryptoPro
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* возвращает список сертификатов, доступных пользователю в системе
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function getUserCertificates(bool $resetCache = false)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* возвращает список сертификатов, доступных пользователю в системе, в том числе просроченные и без закрытого ключа
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function getAllUserCertificates(bool $resetCache = false)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* возвращает список сертификатов, из закрытых ключей и/или сертификаты не установленные всистеме*
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function getContainerCertificates(bool $resetCache = false)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* возвращает список сертификатов, из закрытых ключей и/или сертификаты не установленные всистеме*, в том числе просроченные и без закрытого ключа
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function getAllContainerCertificates(bool $resetCache = false)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* возвращает сертификат по отпечатку
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function getCertificate()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* создает совмещенную (присоединенную) подпись сообщения
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function createAttachedSignature()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* создает отсоединенную (открепленную) подпись сообщения
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function createDetachedSignature()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* добавляет совмещенную (присоединенную) подпись к раннее подписанному документу (реализует метод coSign)
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function addAttachedSignature()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* добавляет отсоединенную (открепленную) подпись к раннее подписанному документу (реализует метод coSign)
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function addDetachedSignature()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* создает XML подпись для документа в формате XML
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function createXMLSignature()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* создает хеш сообщения по ГОСТ Р 34.11-2012 256 бит
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function createHash()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* возвращает информацию о CSP и плагине
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function getSystemInfo()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
70
src/Helpers/CertificateHelper.php
Executable file
70
src/Helpers/CertificateHelper.php
Executable file
@ -0,0 +1,70 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Webmasterskaya\CryptoPro\Helpers;
|
||||||
|
|
||||||
|
use Webmasterskaya\CryptoPro\Tags\TagsCodes;
|
||||||
|
use Webmasterskaya\CryptoPro\Tags\TagsOIDs;
|
||||||
|
use Webmasterskaya\CryptoPro\Tags\TagsTranslationsInterface;
|
||||||
|
|
||||||
|
class CertificateHelper
|
||||||
|
{
|
||||||
|
public static function parseCertInfo(TagsTranslationsInterface $tagsTranslations, string $rawInfo)
|
||||||
|
{
|
||||||
|
$extractedEntities = [];
|
||||||
|
|
||||||
|
preg_match_all('/([а-яА-Яa-zA-Z0-9\s.]+)=(?:("[^"]+?")|(.+?))(?:,|$)/', $rawInfo, $extractedEntities, PREG_SET_ORDER, 0);
|
||||||
|
|
||||||
|
if (!empty($extractedEntities))
|
||||||
|
{
|
||||||
|
return array_map(function ($extractedEntity) use ($tagsTranslations) {
|
||||||
|
|
||||||
|
$title = trim($extractedEntity[1]);
|
||||||
|
|
||||||
|
// Проверяем наличие OID в заголовке
|
||||||
|
$oidIdentifierMatch = [];
|
||||||
|
$oidIdentifier = null;
|
||||||
|
if (preg_match('/^OID\.(.*)/', $title, $oidIdentifierMatch) === 1)
|
||||||
|
{
|
||||||
|
$oidIdentifier = trim($oidIdentifierMatch[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Если нашли OID в заголовке, пытаемся его расшифровать
|
||||||
|
if (!empty($oidIdentifier))
|
||||||
|
{
|
||||||
|
$titleCode = TagsOIDs::codeByOid($oidIdentifier);
|
||||||
|
|
||||||
|
if (empty($titleCode))
|
||||||
|
{
|
||||||
|
$titleCode = 'OID.' . $oidIdentifier;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$titleCode = TagsCodes::codeByName($title);
|
||||||
|
|
||||||
|
if (empty($titleCode))
|
||||||
|
{
|
||||||
|
$titleCode = $title;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Получаем человекочитаемый заголовок
|
||||||
|
$title = $tagsTranslations::translationByCode($titleCode);
|
||||||
|
|
||||||
|
// Вырезаем лишние кавычки
|
||||||
|
$description = preg_replace(
|
||||||
|
'/"{2}/g', '"',
|
||||||
|
preg_replace(
|
||||||
|
'/^"(.*)"/', "$1",
|
||||||
|
trim($extractedEntity[2] ?? $extractedEntity[3])
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
return ['title' => $title, 'description' => $description, 'code' => $titleCode];
|
||||||
|
|
||||||
|
}, $extractedEntities);
|
||||||
|
}
|
||||||
|
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
8
src/Helpers/Messages/HumanReadebleCPErrors.php
Executable file
8
src/Helpers/Messages/HumanReadebleCPErrors.php
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Webmasterskaya\CryptoPro\Helpers\Messages;
|
||||||
|
|
||||||
|
class HumanReadableCPErrors
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
20
src/Tags/AbstractTagsCodes.php
Executable file
20
src/Tags/AbstractTagsCodes.php
Executable file
@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Webmasterskaya\CryptoPro\Tags;
|
||||||
|
|
||||||
|
use Webmasterskaya\CryptoPro\Traits\ReversMapInterface;
|
||||||
|
use Webmasterskaya\CryptoPro\Traits\ReversMapTrait;
|
||||||
|
|
||||||
|
abstract class AbstractTagsCodes implements TagsCodesInterface, ReversMapInterface
|
||||||
|
{
|
||||||
|
protected const MAP = [];
|
||||||
|
|
||||||
|
use ReversMapTrait;
|
||||||
|
|
||||||
|
public static function codeByName($name)
|
||||||
|
{
|
||||||
|
$reverseMap = self::reverseMap();
|
||||||
|
|
||||||
|
return $reverseMap[strtolower($name)] ?? null;
|
||||||
|
}
|
||||||
|
}
|
25
src/Tags/AbstractTagsOIDs.php
Executable file
25
src/Tags/AbstractTagsOIDs.php
Executable file
@ -0,0 +1,25 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Webmasterskaya\CryptoPro\Tags;
|
||||||
|
|
||||||
|
use Webmasterskaya\CryptoPro\Traits\ReversMapInterface;
|
||||||
|
use Webmasterskaya\CryptoPro\Traits\ReversMapTrait;
|
||||||
|
|
||||||
|
abstract class AbstractTagsOIDs implements TagsOIDsInterface, ReversMapInterface
|
||||||
|
{
|
||||||
|
protected const MAP = [];
|
||||||
|
|
||||||
|
use ReversMapTrait;
|
||||||
|
|
||||||
|
public static function codeByOid($oid)
|
||||||
|
{
|
||||||
|
return self::MAP[$oid] ?? null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function oidByCode($code)
|
||||||
|
{
|
||||||
|
$reverseMap = self::reverseMap();
|
||||||
|
|
||||||
|
return $reverseMap[strtolower($code)] ?? null;
|
||||||
|
}
|
||||||
|
}
|
13
src/Tags/AbstractTagsTranslations.php
Executable file
13
src/Tags/AbstractTagsTranslations.php
Executable file
@ -0,0 +1,13 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Webmasterskaya\CryptoPro\Tags;
|
||||||
|
|
||||||
|
abstract class AbstractTagsTranslations implements TagsTranslationsInterface
|
||||||
|
{
|
||||||
|
protected const MAP = [];
|
||||||
|
|
||||||
|
public static function translationByCode($code)
|
||||||
|
{
|
||||||
|
return self::MAP[$code] ?? $code;
|
||||||
|
}
|
||||||
|
}
|
25
src/Tags/IssuerTagsTranslations.php
Executable file
25
src/Tags/IssuerTagsTranslations.php
Executable file
@ -0,0 +1,25 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Webmasterskaya\CryptoPro\Tags;
|
||||||
|
|
||||||
|
class IssuerTagsTranslations extends AbstractTagsTranslations
|
||||||
|
{
|
||||||
|
protected const MAP
|
||||||
|
= [
|
||||||
|
'UN' => 'Неструктурированное имя',
|
||||||
|
'CN' => 'Удостоверяющий центр',
|
||||||
|
'C' => 'Страна',
|
||||||
|
'S' => 'Регион',
|
||||||
|
'STREET' => 'Адрес',
|
||||||
|
'O' => 'Компания',
|
||||||
|
'OU' => 'Тип',
|
||||||
|
'T' => 'Должность',
|
||||||
|
'OGRN' => 'ОГРН',
|
||||||
|
'OGRNIP' => 'ОГРНИП',
|
||||||
|
'SNILS' => 'СНИЛС',
|
||||||
|
'INN' => 'ИНН',
|
||||||
|
'INNLE' => 'ИНН рганизации',
|
||||||
|
'E' => 'Email',
|
||||||
|
'L' => 'Город',
|
||||||
|
];
|
||||||
|
}
|
27
src/Tags/SubjectTagsTranslations.php
Executable file
27
src/Tags/SubjectTagsTranslations.php
Executable file
@ -0,0 +1,27 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Webmasterskaya\CryptoPro\Tags;
|
||||||
|
|
||||||
|
class SubjectTagsTranslations extends AbstractTagsTranslations
|
||||||
|
{
|
||||||
|
protected const MAP
|
||||||
|
= [
|
||||||
|
'UN' => 'Неструктурированное имя',
|
||||||
|
'CN' => 'Владелец',
|
||||||
|
'SN' => 'Фамилия',
|
||||||
|
'G' => 'Имя Отчество',
|
||||||
|
'C' => 'Страна',
|
||||||
|
'S' => 'Регион',
|
||||||
|
'STREET' => 'Адрес',
|
||||||
|
'O' => 'Компания',
|
||||||
|
'OU' => 'Отдел/подразделение',
|
||||||
|
'T' => 'Должность',
|
||||||
|
'OGRN' => 'ОГРН',
|
||||||
|
'OGRNIP' => 'ОГРНИП',
|
||||||
|
'SNILS' => 'СНИЛС',
|
||||||
|
'INN' => 'ИНН',
|
||||||
|
'INNLE' => 'ИНН рганизации',
|
||||||
|
'E' => 'Email',
|
||||||
|
'L' => 'Город',
|
||||||
|
];
|
||||||
|
}
|
27
src/Tags/TagsCodes.php
Executable file
27
src/Tags/TagsCodes.php
Executable file
@ -0,0 +1,27 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Webmasterskaya\CryptoPro\Tags;
|
||||||
|
|
||||||
|
class TagsCodes extends AbstractTagsCodes
|
||||||
|
{
|
||||||
|
protected const MAP
|
||||||
|
= [
|
||||||
|
'UN' => ['UN', 'unstructuredName'],
|
||||||
|
'CN' => ['CN', 'commonName'],
|
||||||
|
'SN' => ['SN', 'surname'],
|
||||||
|
'G' => ['G', 'givenName', 'gn'],
|
||||||
|
'C' => ['C', 'countryName'],
|
||||||
|
'S' => ['S', 'ST', 'stateOrProvinceName'],
|
||||||
|
'STREET' => ['STREET', 'streetAddress'],
|
||||||
|
'O' => ['O', 'organizationName'],
|
||||||
|
'OU' => ['OU', 'organizationalUnitName'],
|
||||||
|
'T' => ['T', 'TITLE'],
|
||||||
|
'OGRN' => ['OGRN', 'ОГРН'],
|
||||||
|
'OGRNIP' => ['OGRNIP', 'ОГРНИП'],
|
||||||
|
'SNILS' => ['СНИЛС', 'SNILS'],
|
||||||
|
'INN' => ['ИНН', 'ИННФЛ', 'ИНН ФЛ', 'INN'],
|
||||||
|
'INNLE' => ['ИННЮЛ', 'ИНН ЮЛ', 'INNLE', 'INN LE', 'ИНН организации'],
|
||||||
|
'E' => ['E', 'email', 'emailAddress', 'pkcs9email'],
|
||||||
|
'L' => ['L', 'localityName'],
|
||||||
|
];
|
||||||
|
}
|
8
src/Tags/TagsCodesInterface.php
Executable file
8
src/Tags/TagsCodesInterface.php
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Webmasterskaya\CryptoPro\Tags;
|
||||||
|
|
||||||
|
interface TagsCodesInterface
|
||||||
|
{
|
||||||
|
public static function codeByName($name);
|
||||||
|
}
|
27
src/Tags/TagsOIDs.php
Executable file
27
src/Tags/TagsOIDs.php
Executable file
@ -0,0 +1,27 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Webmasterskaya\CryptoPro\Tags;
|
||||||
|
|
||||||
|
class TagsOIDs extends AbstractTagsOIDs
|
||||||
|
{
|
||||||
|
protected const MAP
|
||||||
|
= [
|
||||||
|
'1.2.840.113549.1.9.2' => 'UN',
|
||||||
|
'2.5.4.3' => 'CN',
|
||||||
|
'2.5.4.4' => 'SN',
|
||||||
|
'2.5.4.42' => 'G',
|
||||||
|
'2.5.4.6' => 'C',
|
||||||
|
'2.5.4.8' => 'S',
|
||||||
|
'2.5.4.9' => 'STREET',
|
||||||
|
'2.5.4.10' => 'O',
|
||||||
|
'2.5.4.11' => 'OU',
|
||||||
|
'2.5.4.12' => 'T',
|
||||||
|
'1.2.643.100.1' => 'OGRN',
|
||||||
|
'1.2.643.100.5' => 'OGRNIP',
|
||||||
|
'1.2.643.100.3' => 'SNILS',
|
||||||
|
'1.2.643.3.131.1.1' => 'INN',
|
||||||
|
'1.2.643.100.4' => 'INNLE',
|
||||||
|
'1.2.840.113549.1.9.1' => 'E',
|
||||||
|
'2.5.4.7' => 'L',
|
||||||
|
];
|
||||||
|
}
|
10
src/Tags/TagsOIDsInterface.php
Executable file
10
src/Tags/TagsOIDsInterface.php
Executable file
@ -0,0 +1,10 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Webmasterskaya\CryptoPro\Tags;
|
||||||
|
|
||||||
|
interface TagsOIDsInterface
|
||||||
|
{
|
||||||
|
public static function codeByOid($oid);
|
||||||
|
|
||||||
|
public static function oidByCode($code);
|
||||||
|
}
|
8
src/Tags/TagsTranslationsInterface.php
Executable file
8
src/Tags/TagsTranslationsInterface.php
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Webmasterskaya\CryptoPro\Tags;
|
||||||
|
|
||||||
|
interface TagsTranslationsInterface
|
||||||
|
{
|
||||||
|
public static function translationByCode($code);
|
||||||
|
}
|
8
src/Traits/ReversMapInterface.php
Executable file
8
src/Traits/ReversMapInterface.php
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Webmasterskaya\CryptoPro\Traits;
|
||||||
|
|
||||||
|
interface ReversMapInterface
|
||||||
|
{
|
||||||
|
public static function reverseMap();
|
||||||
|
}
|
37
src/Traits/ReversMapTrait.php
Executable file
37
src/Traits/ReversMapTrait.php
Executable file
@ -0,0 +1,37 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Webmasterskaya\CryptoPro\Traits;
|
||||||
|
|
||||||
|
trait ReversMapTrait
|
||||||
|
{
|
||||||
|
public static function reverseMap()
|
||||||
|
{
|
||||||
|
static $reverseMap;
|
||||||
|
|
||||||
|
if (!isset($reverseMap))
|
||||||
|
{
|
||||||
|
$reverseMap = [];
|
||||||
|
foreach (self::MAP as $key => $values)
|
||||||
|
{
|
||||||
|
if (is_object($values))
|
||||||
|
{
|
||||||
|
$values = (array) $values;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!is_array($values))
|
||||||
|
{
|
||||||
|
$reverseMap[strtolower((string) $values)] = $key;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
foreach ($values as $value)
|
||||||
|
{
|
||||||
|
$reverseMap[strtolower($value)] = $key;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $reverseMap;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user