Skip to content

Commit 04701a8

Browse files
committed
code style, return types and throws
1 parent 254fa07 commit 04701a8

29 files changed

Lines changed: 214 additions & 95 deletions

README.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
# AdvancedCMS
2+
A PHP Library that allows you to decode and manipulate CAdES or in other words CMS Advanced Electronic Signatures described in ETSI standart TS 101 733.
3+
24
Библиотека, которая позволит вам манипулировать CAdES или иначе стандартом электронной подписи, представляющий
35
собой расширенную версию стандарта электронной подписи CMS (Cryptographic Message Syntax) и разработанный ETSI.
46

@@ -20,13 +22,14 @@ composer require falseclock/advanced-cms
2022

2123
Предыстория
2224
------------
23-
Когда в Казахстане и России стала активно внедряться Электронная цифровая подпись (ЭЦП), я с большой для себя неожиданностью обнаружил,
25+
Когда в Казахстане и России стала активно внедряться Электронная цифровая подпись (ЭЦП), я, с большой для себя неожиданностью, обнаружил,
2426
что в PHP нет библиотек, позволяющих не только формализовать ASN.1 запись цифровой подписи в объект, но и тем более модифицировать её, путем добавления
2527
OCSP проверок или TSP меток, удалить электронный контент, чтобы оставить только подписи или просто объединить две разные подписи одних и тех же данных.
2628
Отправной точкой стала библиотека [adapik/cms](https://github.com/Adapik/CMS), в которой на тот момент не было детального описания всех возможных полей и данных в
2729
CAdES. Так начался долгий путь чтения RFC и написания [нескольких тысяч строк кода](https://github.com/Adapik/CMS/graphs/contributors) чтобы полностью и
28-
детально описать рекомендации в виде библиотеки. Но по договоренности с Александром Даниловым, мы решили, что изначальная библиотека будет, как и раньше,
30+
детально описать рекомендации в виде библиотеки. Но, по договоренности с [Александром Даниловым](https://github.com/Adapik), мы решили, что изначальная библиотека будет, как и раньше,
2931
работать исключительно в режиме чтения, а все остальное, если я того желаю, могу сделать в виде отдельного пакета. Что, собственно, и было сделано.
32+
3033
Человеку, не понимающему как работает ЭЦП, как проверяется легитимность и достоверность подписи будет довольно сложно понять суть и смысл этой библиотеки.
3134
Тем не менее я постарался сделать все возможные unit тесты и 100% покрыть код. Как работать с CMS файлами, изменять или создавать новые вы можете на основе тестов
3235
в папке [test](https://github.com/Falseclock/AdvancedCMS/tree/master/tests). В дальнейших планах реализация не только манипуляций с подписями, но и также

composer.json

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "falseclock/advanced-cms",
3-
"description": "A PHP Library that allows you to manipulate CMS.",
3+
"description": "A PHP Library that allows you to decode and manipulate CAdES or in other words CMS Advanced Electronic Signatures described in ETSI standart TS 101 733.",
44
"type": "library",
55
"homepage": "https://github.com/Falseclock/AdvancedCMS",
66
"license": "MIT",
@@ -25,23 +25,19 @@
2525
"encoding",
2626
"decoding",
2727
"gost",
28-
"kalkan"
29-
],
30-
"repositories": [
31-
{
32-
"name": "adapik/cms",
33-
"type": "vcs",
34-
"url": "https://github.com/Falseclock/CMS"
35-
}
28+
"kalkan",
29+
"эцп",
30+
"signature",
31+
"openssl"
3632
],
3733
"require": {
3834
"php": ">=7.2",
39-
"adapik/phpasn1": "^2.2",
40-
"adapik/cms": "dev-master"
35+
"adapik/phpasn1": "^2.3",
36+
"adapik/cms": "^0.2"
4137
},
4238
"require-dev": {
43-
"phpunit/phpunit": "^9.4.2",
44-
"php-coveralls/php-coveralls": "^2.4.2",
39+
"phpunit/phpunit": "^9.5.10",
40+
"php-coveralls/php-coveralls": "^2.4.3",
4541
"ext-curl": "*"
4642
},
4743
"autoload": {

phpunit.xml.dist

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3-
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd"
3+
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.5/phpunit.xsd"
44
colors="true"
55
bootstrap="vendor/autoload.php">
66
<coverage>

src/EncapsulatedContentInfo.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,9 @@ class EncapsulatedContentInfo extends \Adapik\CMS\EncapsulatedContentInfo
2626
* Insert or update data content
2727
*
2828
* @param OctetString $octetString
29+
*
2930
* @return EncapsulatedContentInfo
30-
* @throws Exception
31+
* @throws \Exception
3132
*/
3233
public function setEContent(OctetString $octetString): self
3334
{
@@ -42,11 +43,10 @@ public function setEContent(OctetString $octetString): self
4243
return $this;
4344
}
4445

45-
4646
/**
4747
* Removing content if exist in case of necessity.
4848
* Actually we sign content hash and storing content not always strict.
49-
* Moreover content can be very huge and heavy
49+
* Moreover, content can be very huge and heavy
5050
*
5151
* @return EncapsulatedContentInfo
5252
* @throws Exception

src/OCSPRequest.php

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,9 @@
1010

1111
namespace Falseclock\AdvancedCMS;
1212

13-
use Adapik\CMS\Algorithm;
14-
use Adapik\CMS\Certificate;
1513
use Adapik\CMS\CMSBase;
1614
use Adapik\CMS\Exception\FormatException;
17-
use Exception;
1815
use FG\ASN1\Exception\ParserException;
19-
use FG\ASN1\ExplicitlyTaggedObject;
20-
use FG\ASN1\Universal\BitString;
21-
use FG\ASN1\Universal\Integer;
22-
use FG\ASN1\Universal\NullObject;
23-
use FG\ASN1\Universal\ObjectIdentifier;
24-
use FG\ASN1\Universal\OctetString;
2516
use FG\ASN1\Universal\Sequence;
2617

2718
/**
@@ -35,14 +26,14 @@ class OCSPRequest extends CMSBase
3526
const CONTENT_TYPE = 'application/ocsp-request';
3627
const OCSP_DEFAULT_NONCE_LENGTH = 16;
3728
const OID_OCSPNonce = '1.3.6.1.5.5.7.48.1.2';
38-
3929
/**
4030
* @var Sequence
4131
*/
4232
protected $object;
4333

4434
/**
4535
* @param string $content
36+
*
4637
* @return OCSPRequest
4738
* @throws FormatException
4839
*/
@@ -51,14 +42,6 @@ public static function createFromContent(string $content): CMSBase
5142
return new self(self::makeFromContent($content, Maps\OCSPRequest::class, Sequence::class));
5243
}
5344

54-
/**
55-
* @return TBSRequest
56-
*/
57-
public function getTBSRequest(): TBSRequest
58-
{
59-
return new TBSRequest($this->object->getChildren()[0]);
60-
}
61-
6245
/**
6346
* @return Signature|null
6447
* @throws ParserException
@@ -69,9 +52,18 @@ public function getOptionalSignature(): ?Signature
6952

7053
if (count($children) == 2) {
7154
$binary = $children[1]->getBinaryContent();
55+
7256
return new Signature(Sequence::fromBinary($binary));
7357
}
7458

7559
return null;
7660
}
61+
62+
/**
63+
* @return TBSRequest
64+
*/
65+
public function getTBSRequest(): TBSRequest
66+
{
67+
return new TBSRequest($this->object->getChildren()[0]);
68+
}
7769
}

src/OCSPResponseStatus.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ public function getMapping(): array
5252
*/
5353
public function isSuccessful(): bool
5454
{
55+
/** @noinspection PhpCastIsUnnecessaryInspection */
5556
return intval($this->object->value) === 0;
5657
}
5758
}

src/RevocationValues.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ public static function createFromOCSPResponse(?BasicOCSPResponse $basicOCSPRespo
4343
* @param CertificateList|null $certificateList
4444
* @return Sequence
4545
* @throws ParserException
46+
* @throws Exception
47+
* @noinspection PhpIncompatibleReturnTypeInspection
4648
*/
4749
public static function sequenceFromOCSPResponse(?BasicOCSPResponse $basicOCSPResponse = null, ?CertificateList $certificateList = null): Sequence
4850
{

src/SignedData.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -65,12 +65,12 @@ public function mergeCMS(SignedData $signedData): SignedData
6565
$initialContent->appendCertificate($certificate);
6666
}
6767

68-
/* $revocationInfoChoices = $newContent->getRevocationInfoChoices();
69-
if ($revocationInfoChoices) {
70-
foreach ($revocationInfoChoices as $revocationInfoChoice) {
71-
$initialContent->appendRevocationInfoChoices($revocationInfoChoice);
72-
}
73-
}*/
68+
/* $revocationInfoChoices = $newContent->getRevocationInfoChoices();
69+
if ($revocationInfoChoices) {
70+
foreach ($revocationInfoChoices as $revocationInfoChoice) {
71+
$initialContent->appendRevocationInfoChoices($revocationInfoChoice);
72+
}
73+
}*/
7474

7575
foreach ($newContent->getSignerInfoSet() as $signerInfo) {
7676
$initialContent->appendSignerInfo($signerInfo);

src/SignedDataContent.php

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ class SignedDataContent extends \Adapik\CMS\SignedDataContent
3131
* @param AlgorithmIdentifier $algorithmIdentifier
3232
* @return SignedDataContent
3333
* @throws ParserException
34+
* @throws Exception
3435
*/
3536
public function appendDigestAlgorithmIdentifier(AlgorithmIdentifier $algorithmIdentifier): self
3637
{
@@ -44,6 +45,7 @@ public function appendDigestAlgorithmIdentifier(AlgorithmIdentifier $algorithmId
4445
* @param Certificate $certificate
4546
* @return SignedDataContent
4647
* @throws ParserException
48+
* @throws Exception
4749
*/
4850
public function appendCertificate(Certificate $certificate): self
4951
{
@@ -59,15 +61,16 @@ public function appendCertificate(Certificate $certificate): self
5961
* @return SignedDataContent
6062
* @todo implement
6163
*/
62-
/* public function appendRevocationInfoChoices(RevocationInfoChoices $revocationInfoChoice): self
63-
{
64-
return $this;
65-
}*/
64+
/* public function appendRevocationInfoChoices(RevocationInfoChoices $revocationInfoChoice): self
65+
{
66+
return $this;
67+
}*/
6668

6769
/**
6870
* @param SignerInfo $signerInfo
6971
* @return SignedDataContent
7072
* @throws ParserException
73+
* @throws Exception
7174
*/
7275
public function appendSignerInfo(SignerInfo $signerInfo): self
7376
{

src/SignerInfo.php

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,16 +33,17 @@ class SignerInfo extends \Adapik\CMS\SignerInfo
3333
* @return SignerInfo
3434
* @throws FormatException
3535
*/
36-
public static function createFromContent(string $content): CMSBase
37-
{
38-
return new self(self::makeFromContent($content, \Adapik\CMS\Maps\SignerInfo::class, Sequence::class));
39-
}
36+
public static function createFromContent(string $content): CMSBase
37+
{
38+
return new self(self::makeFromContent($content, \Adapik\CMS\Maps\SignerInfo::class, Sequence::class));
39+
}
4040

4141
/**
4242
* @param UnsignedAttribute $newAttribute
4343
* @return $this
4444
* @throws \FG\ASN1\Exception\Exception
4545
* @throws ParserException
46+
* @throws Exception
4647
*/
4748
public function addUnsignedAttribute(UnsignedAttribute $newAttribute): SignerInfo
4849
{
@@ -97,6 +98,7 @@ protected function createUnsignedAttributes(): ?UnsignedAttributes
9798
/**
9899
* @return $this
99100
* @throws \FG\ASN1\Exception\Exception
101+
* @throws Exception
100102
*/
101103
public function deleteUnsignedAttributes(): SignerInfo
102104
{

0 commit comments

Comments
 (0)