mirror of
https://github.com/crypto-pro-web/crypto-pro-php.git
synced 2025-01-18 11:25:50 +03:00
Доработки и исправления
This commit is contained in:
parent
54fd91fa65
commit
84879f7a1e
@ -2,14 +2,18 @@
|
|||||||
|
|
||||||
namespace Webmasterskaya\CryptoPro;
|
namespace Webmasterskaya\CryptoPro;
|
||||||
|
|
||||||
|
use Webmasterskaya\CryptoPro\Constants\CADESCOM_ATTRIBUTE;
|
||||||
|
use Webmasterskaya\CryptoPro\Constants\CADESCOM_CADES_TYPE;
|
||||||
|
use Webmasterskaya\CryptoPro\Constants\CADESCOM_CONTENT_ENCODING_TYPE;
|
||||||
|
use Webmasterskaya\CryptoPro\Constants\CADESCOM_ENCODE;
|
||||||
|
use Webmasterskaya\CryptoPro\Constants\CADESCOM_HASH_ALGORITHM;
|
||||||
|
use Webmasterskaya\CryptoPro\Constants\CADESCOM_STORE_LOCATION;
|
||||||
use Webmasterskaya\CryptoPro\Constants\CAPICOM_CERTIFICATE_FIND_TYPE;
|
use Webmasterskaya\CryptoPro\Constants\CAPICOM_CERTIFICATE_FIND_TYPE;
|
||||||
use Webmasterskaya\CryptoPro\Constants\CAPICOM_ENCODE;
|
use Webmasterskaya\CryptoPro\Constants\CAPICOM_CERTIFICATE_INCLUDE_OPTION;
|
||||||
use Webmasterskaya\CryptoPro\Constants\CAPICOM_PROPID;
|
use Webmasterskaya\CryptoPro\Constants\CAPICOM_PROPID;
|
||||||
use Webmasterskaya\CryptoPro\Helpers\CertificateHelper;
|
use Webmasterskaya\CryptoPro\Helpers\CertificateHelper;
|
||||||
use Webmasterskaya\CryptoPro\Helpers\ErrorMessageHelper;
|
use Webmasterskaya\CryptoPro\Helpers\ErrorMessageHelper;
|
||||||
|
|
||||||
const CONTAINER_STORE = 100;
|
|
||||||
|
|
||||||
class CryptoPro
|
class CryptoPro
|
||||||
{
|
{
|
||||||
protected const CP_MY_STORE = 'My';
|
protected const CP_MY_STORE = 'My';
|
||||||
@ -25,9 +29,10 @@ class CryptoPro
|
|||||||
public static function getUserCertificates(bool $resetCache = false)
|
public static function getUserCertificates(bool $resetCache = false)
|
||||||
{
|
{
|
||||||
static $certificates;
|
static $certificates;
|
||||||
|
|
||||||
if ($resetCache === true || !isset($certificates))
|
if ($resetCache === true || !isset($certificates))
|
||||||
{
|
{
|
||||||
$certificates = self::getCertificatesFromStore(CURRENT_USER_STORE);
|
$certificates = self::getCertificatesFromStore(CADESCOM_STORE_LOCATION::CURRENT_USER_STORE);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $certificates;
|
return $certificates;
|
||||||
@ -44,9 +49,14 @@ class CryptoPro
|
|||||||
public static function getAllUserCertificates(bool $resetCache = false)
|
public static function getAllUserCertificates(bool $resetCache = false)
|
||||||
{
|
{
|
||||||
static $certificates;
|
static $certificates;
|
||||||
|
|
||||||
if ($resetCache === true || !isset($certificates))
|
if ($resetCache === true || !isset($certificates))
|
||||||
{
|
{
|
||||||
$certificates = self::getCertificatesFromStore(CURRENT_USER_STORE, self::CP_MY_STORE, false);
|
$certificates = self::getCertificatesFromStore(
|
||||||
|
CADESCOM_STORE_LOCATION::CURRENT_USER_STORE,
|
||||||
|
self::CP_MY_STORE,
|
||||||
|
false
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $certificates;
|
return $certificates;
|
||||||
@ -63,9 +73,10 @@ class CryptoPro
|
|||||||
public static function getContainerCertificates(bool $resetCache = false)
|
public static function getContainerCertificates(bool $resetCache = false)
|
||||||
{
|
{
|
||||||
static $certificates;
|
static $certificates;
|
||||||
|
|
||||||
if ($resetCache === true || !isset($certificates))
|
if ($resetCache === true || !isset($certificates))
|
||||||
{
|
{
|
||||||
$certificates = self::getCertificatesFromStore(CONTAINER_STORE);
|
$certificates = self::getCertificatesFromStore(CADESCOM_STORE_LOCATION::CONTAINER_STORE);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $certificates;
|
return $certificates;
|
||||||
@ -82,9 +93,14 @@ class CryptoPro
|
|||||||
public static function getAllContainerCertificates(bool $resetCache = false)
|
public static function getAllContainerCertificates(bool $resetCache = false)
|
||||||
{
|
{
|
||||||
static $certificates;
|
static $certificates;
|
||||||
|
|
||||||
if ($resetCache === true || !isset($certificates))
|
if ($resetCache === true || !isset($certificates))
|
||||||
{
|
{
|
||||||
$certificates = self::getCertificatesFromStore(CONTAINER_STORE, self::CP_MY_STORE, false);
|
$certificates = self::getCertificatesFromStore(
|
||||||
|
CADESCOM_STORE_LOCATION::CONTAINER_STORE,
|
||||||
|
self::CP_MY_STORE,
|
||||||
|
false
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $certificates;
|
return $certificates;
|
||||||
@ -100,6 +116,7 @@ class CryptoPro
|
|||||||
public static function getCertificates(bool $resetCache = false)
|
public static function getCertificates(bool $resetCache = false)
|
||||||
{
|
{
|
||||||
static $certificates;
|
static $certificates;
|
||||||
|
|
||||||
if ($resetCache === true || !isset($certificates))
|
if ($resetCache === true || !isset($certificates))
|
||||||
{
|
{
|
||||||
$availableCertificates = [];
|
$availableCertificates = [];
|
||||||
@ -141,6 +158,7 @@ class CryptoPro
|
|||||||
public static function getAllCertificates(bool $resetCache = false)
|
public static function getAllCertificates(bool $resetCache = false)
|
||||||
{
|
{
|
||||||
static $certificates;
|
static $certificates;
|
||||||
|
|
||||||
if ($resetCache === true || !isset($certificates))
|
if ($resetCache === true || !isset($certificates))
|
||||||
{
|
{
|
||||||
$availableCertificates = [];
|
$availableCertificates = [];
|
||||||
@ -222,6 +240,7 @@ class CryptoPro
|
|||||||
*/
|
*/
|
||||||
public static function createAttachedSignature(string $thumbprint, string $unencryptedMessage, string $pin = null)
|
public static function createAttachedSignature(string $thumbprint, string $unencryptedMessage, string $pin = null)
|
||||||
{
|
{
|
||||||
|
/** @noinspection DuplicatedCode */
|
||||||
$cadesCertificate = self::getCadesCertificate($thumbprint);
|
$cadesCertificate = self::getCadesCertificate($thumbprint);
|
||||||
|
|
||||||
try
|
try
|
||||||
@ -240,7 +259,7 @@ class CryptoPro
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
$cadesAttrs->set_Name(AUTHENTICATED_ATTRIBUTE_SIGNING_TIME);
|
$cadesAttrs->set_Name(CADESCOM_ATTRIBUTE::SIGNING_TIME);
|
||||||
$cadesAttrs->set_Value($currentDateTime);
|
$cadesAttrs->set_Value($currentDateTime);
|
||||||
}
|
}
|
||||||
catch (\Throwable $e)
|
catch (\Throwable $e)
|
||||||
@ -262,10 +281,10 @@ class CryptoPro
|
|||||||
$cadesAuthAttrs = $cadesSigner->get_AuthenticatedAttributes();
|
$cadesAuthAttrs = $cadesSigner->get_AuthenticatedAttributes();
|
||||||
$cadesAuthAttrs->Add($cadesAttrs);
|
$cadesAuthAttrs->Add($cadesAttrs);
|
||||||
|
|
||||||
$cadesSignedData->set_ContentEncoding(BASE64_TO_BINARY);
|
$cadesSignedData->set_ContentEncoding(CADESCOM_CONTENT_ENCODING_TYPE::BASE64_TO_BINARY);
|
||||||
$cadesSignedData->set_Content($messageBase64);
|
$cadesSignedData->set_Content($messageBase64);
|
||||||
|
|
||||||
$cadesSigner->set_Options(CERTIFICATE_INCLUDE_WHOLE_CHAIN);
|
$cadesSigner->set_Options(CAPICOM_CERTIFICATE_INCLUDE_OPTION::WHOLE_CHAIN);
|
||||||
}
|
}
|
||||||
catch (\Throwable $e)
|
catch (\Throwable $e)
|
||||||
{
|
{
|
||||||
@ -277,9 +296,9 @@ class CryptoPro
|
|||||||
/** @var string $signature */
|
/** @var string $signature */
|
||||||
$signature = $cadesSignedData->SignCades(
|
$signature = $cadesSignedData->SignCades(
|
||||||
$cadesSigner,
|
$cadesSigner,
|
||||||
PKCS7_TYPE,
|
CADESCOM_CADES_TYPE::PKCS7_TYPE,
|
||||||
false,
|
false,
|
||||||
CAPICOM_ENCODE::BASE64
|
CADESCOM_ENCODE::BASE64
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
catch (\Throwable $e)
|
catch (\Throwable $e)
|
||||||
@ -302,6 +321,7 @@ class CryptoPro
|
|||||||
*/
|
*/
|
||||||
public static function createDetachedSignature(string $thumbprint, string $messageHash, string $pin = null)
|
public static function createDetachedSignature(string $thumbprint, string $messageHash, string $pin = null)
|
||||||
{
|
{
|
||||||
|
/** @noinspection DuplicatedCode */
|
||||||
$cadesCertificate = self::getCadesCertificate($thumbprint);
|
$cadesCertificate = self::getCadesCertificate($thumbprint);
|
||||||
|
|
||||||
try
|
try
|
||||||
@ -321,7 +341,7 @@ class CryptoPro
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
$cadesAttrs->set_Name(AUTHENTICATED_ATTRIBUTE_SIGNING_TIME);
|
$cadesAttrs->set_Name(CADESCOM_ATTRIBUTE::SIGNING_TIME);
|
||||||
$cadesAttrs->set_Value($currentDateTime);
|
$cadesAttrs->set_Value($currentDateTime);
|
||||||
}
|
}
|
||||||
catch (\Throwable $e)
|
catch (\Throwable $e)
|
||||||
@ -341,7 +361,7 @@ class CryptoPro
|
|||||||
$cadesAuthAttrs = $cadesSigner->get_AuthenticatedAttributes();
|
$cadesAuthAttrs = $cadesSigner->get_AuthenticatedAttributes();
|
||||||
$cadesAuthAttrs->Add($cadesAttrs);
|
$cadesAuthAttrs->Add($cadesAttrs);
|
||||||
|
|
||||||
$cadesSigner->set_Options(CERTIFICATE_INCLUDE_WHOLE_CHAIN);
|
$cadesSigner->set_Options(CAPICOM_CERTIFICATE_INCLUDE_OPTION::WHOLE_CHAIN);
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (\Throwable $e)
|
catch (\Throwable $e)
|
||||||
@ -351,7 +371,7 @@ class CryptoPro
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
$cadesHashedData->set_Algorithm(CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256);
|
$cadesHashedData->set_Algorithm(CADESCOM_HASH_ALGORITHM::HASH_CP_GOST_3411_2012_256);
|
||||||
$cadesHashedData->SetHashValue($messageHash);
|
$cadesHashedData->SetHashValue($messageHash);
|
||||||
|
|
||||||
// Для получения объекта отсоединенной (открепленной) подписи, необходимо задать любой контент.
|
// Для получения объекта отсоединенной (открепленной) подписи, необходимо задать любой контент.
|
||||||
@ -370,8 +390,8 @@ class CryptoPro
|
|||||||
$signature = $cadesSignedData->SignHash(
|
$signature = $cadesSignedData->SignHash(
|
||||||
$cadesHashedData,
|
$cadesHashedData,
|
||||||
$cadesSigner,
|
$cadesSigner,
|
||||||
PKCS7_TYPE,
|
CADESCOM_CADES_TYPE::PKCS7_TYPE,
|
||||||
CAPICOM_ENCODE::BASE64
|
CADESCOM_ENCODE::BASE64
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
catch (\Throwable $e)
|
catch (\Throwable $e)
|
||||||
@ -394,6 +414,7 @@ class CryptoPro
|
|||||||
*/
|
*/
|
||||||
public static function addAttachedSignature(string $thumbprint, string $signedMessage, string $pin = null)
|
public static function addAttachedSignature(string $thumbprint, string $signedMessage, string $pin = null)
|
||||||
{
|
{
|
||||||
|
/** @noinspection DuplicatedCode */
|
||||||
$cadesCertificate = self::getCadesCertificate($thumbprint);
|
$cadesCertificate = self::getCadesCertificate($thumbprint);
|
||||||
|
|
||||||
try
|
try
|
||||||
@ -412,7 +433,7 @@ class CryptoPro
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
$cadesAttrs->set_Name(AUTHENTICATED_ATTRIBUTE_SIGNING_TIME);
|
$cadesAttrs->set_Name(CADESCOM_ATTRIBUTE::SIGNING_TIME);
|
||||||
$cadesAttrs->set_Value($currentDateTime);
|
$cadesAttrs->set_Value($currentDateTime);
|
||||||
}
|
}
|
||||||
catch (\Throwable $e)
|
catch (\Throwable $e)
|
||||||
@ -434,11 +455,10 @@ class CryptoPro
|
|||||||
$cadesAuthAttrs = $cadesSigner->get_AuthenticatedAttributes();
|
$cadesAuthAttrs = $cadesSigner->get_AuthenticatedAttributes();
|
||||||
$cadesAuthAttrs->Add($cadesAttrs);
|
$cadesAuthAttrs->Add($cadesAttrs);
|
||||||
|
|
||||||
$cadesSignedData->set_ContentEncoding(BASE64_TO_BINARY);
|
$cadesSignedData->set_ContentEncoding(CADESCOM_CONTENT_ENCODING_TYPE::BASE64_TO_BINARY);
|
||||||
$cadesSignedData->set_Content($messageBase64);
|
$cadesSignedData->set_Content($messageBase64);
|
||||||
|
|
||||||
$cadesSigner->set_Options(CERTIFICATE_INCLUDE_WHOLE_CHAIN);
|
$cadesSigner->set_Options(CAPICOM_CERTIFICATE_INCLUDE_OPTION::WHOLE_CHAIN);
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (\Throwable $e)
|
catch (\Throwable $e)
|
||||||
{
|
{
|
||||||
@ -447,8 +467,17 @@ class CryptoPro
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
$cadesSignedData->VerifyCades($signedMessage, PKCS7_TYPE);
|
$cadesSignedData->VerifyCades(
|
||||||
$signature = $cadesSignedData->CoSignCades($cadesSigner, PKCS7_TYPE);
|
$signedMessage,
|
||||||
|
CADESCOM_CADES_TYPE::PKCS7_TYPE,
|
||||||
|
false
|
||||||
|
);
|
||||||
|
|
||||||
|
$signature = $cadesSignedData->CoSignCades(
|
||||||
|
$cadesSigner,
|
||||||
|
CADESCOM_CADES_TYPE::PKCS7_TYPE,
|
||||||
|
CADESCOM_ENCODE::BASE64
|
||||||
|
);
|
||||||
}
|
}
|
||||||
catch (\Throwable $e)
|
catch (\Throwable $e)
|
||||||
{
|
{
|
||||||
@ -471,6 +500,7 @@ class CryptoPro
|
|||||||
*/
|
*/
|
||||||
public static function addDetachedSignature(string $thumbprint, string $signedMessage, string $messageHash, string $pin = null)
|
public static function addDetachedSignature(string $thumbprint, string $signedMessage, string $messageHash, string $pin = null)
|
||||||
{
|
{
|
||||||
|
/** @noinspection DuplicatedCode */
|
||||||
$cadesCertificate = self::getCadesCertificate($thumbprint);
|
$cadesCertificate = self::getCadesCertificate($thumbprint);
|
||||||
|
|
||||||
try
|
try
|
||||||
@ -490,7 +520,7 @@ class CryptoPro
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
$cadesAttrs->set_Name(AUTHENTICATED_ATTRIBUTE_SIGNING_TIME);
|
$cadesAttrs->set_Name(CADESCOM_ATTRIBUTE::SIGNING_TIME);
|
||||||
$cadesAttrs->set_Value($currentDateTime);
|
$cadesAttrs->set_Value($currentDateTime);
|
||||||
}
|
}
|
||||||
catch (\Throwable $e)
|
catch (\Throwable $e)
|
||||||
@ -510,7 +540,7 @@ class CryptoPro
|
|||||||
$cadesAuthAttrs = $cadesSigner->get_AuthenticatedAttributes();
|
$cadesAuthAttrs = $cadesSigner->get_AuthenticatedAttributes();
|
||||||
$cadesAuthAttrs->Add($cadesAttrs);
|
$cadesAuthAttrs->Add($cadesAttrs);
|
||||||
|
|
||||||
$cadesSigner->set_Options(CERTIFICATE_INCLUDE_WHOLE_CHAIN);
|
$cadesSigner->set_Options(CAPICOM_CERTIFICATE_INCLUDE_OPTION::WHOLE_CHAIN);
|
||||||
}
|
}
|
||||||
catch (\Throwable $e)
|
catch (\Throwable $e)
|
||||||
{
|
{
|
||||||
@ -519,7 +549,7 @@ class CryptoPro
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
$cadesHashedData->set_Algorithm(CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256);
|
$cadesHashedData->set_Algorithm(CADESCOM_HASH_ALGORITHM::HASH_CP_GOST_3411_2012_256);
|
||||||
$cadesHashedData->SetHashValue($messageHash);
|
$cadesHashedData->SetHashValue($messageHash);
|
||||||
|
|
||||||
// Для получения объекта отсоединенной (открепленной) подписи, необходимо задать любой контент.
|
// Для получения объекта отсоединенной (открепленной) подписи, необходимо задать любой контент.
|
||||||
@ -534,9 +564,17 @@ class CryptoPro
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
$cadesSignedData->VerifyHash($cadesHashedData, $signedMessage, PKCS7_TYPE);
|
$cadesSignedData->VerifyHash(
|
||||||
|
$cadesHashedData,
|
||||||
|
$signedMessage,
|
||||||
|
CADESCOM_CADES_TYPE::PKCS7_TYPE
|
||||||
|
);
|
||||||
|
|
||||||
$signature = $cadesSignedData->CoSignHash($cadesHashedData, $cadesSigner, PKCS7_TYPE);
|
$signature = $cadesSignedData->CoSignHash(
|
||||||
|
$cadesHashedData,
|
||||||
|
$cadesSigner,
|
||||||
|
CADESCOM_CADES_TYPE::PKCS7_TYPE
|
||||||
|
);
|
||||||
}
|
}
|
||||||
catch (\Throwable $e)
|
catch (\Throwable $e)
|
||||||
{
|
{
|
||||||
@ -546,15 +584,6 @@ class CryptoPro
|
|||||||
return $signature;
|
return $signature;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* создает XML подпись для документа в формате XML
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public static function createXMLSignature()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Создает хеш сообщения по ГОСТ Р 34.11-2012 256 бит
|
* Создает хеш сообщения по ГОСТ Р 34.11-2012 256 бит
|
||||||
*
|
*
|
||||||
@ -831,7 +860,7 @@ class CryptoPro
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
$cadesCertificate = self::getCadesCertificateFromStore($thumbprint, CURRENT_USER_STORE);
|
$cadesCertificate = self::getCadesCertificateFromStore($thumbprint, CADESCOM_STORE_LOCATION::CURRENT_USER_STORE);
|
||||||
}
|
}
|
||||||
catch (\Throwable $e)
|
catch (\Throwable $e)
|
||||||
{
|
{
|
||||||
@ -839,7 +868,7 @@ class CryptoPro
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
$cadesCertificate = self::getCadesCertificateFromStore($thumbprint, CONTAINER_STORE);
|
$cadesCertificate = self::getCadesCertificateFromStore($thumbprint, CADESCOM_STORE_LOCATION::CONTAINER_STORE);
|
||||||
}
|
}
|
||||||
catch (\Throwable $e)
|
catch (\Throwable $e)
|
||||||
{
|
{
|
||||||
@ -920,7 +949,7 @@ class CryptoPro
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
$cadesSignedData->VerifyHash($cadesHashedData, $signedMessage, PKCS7_TYPE);
|
$cadesSignedData->VerifyHash($cadesHashedData, $signedMessage, CADESCOM_CADES_TYPE::PKCS7_TYPE);
|
||||||
}
|
}
|
||||||
catch (\Throwable $e)
|
catch (\Throwable $e)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user