You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Когда в Казахстане и России стала активно внедряться Электронная цифровая подпись (ЭЦП), я с большой для себя неожиданностью обнаружил,
24
-
что в PHP нет библиотек, позволяющих не только формализовать ASN.1 запись цифровой подписи в объект, но и буквально модифицировать её, путем добавления
24
+
что в PHP нет библиотек, позволяющих не только формализовать ASN.1 запись цифровой подписи в объект, но и тем более модифицировать её, путем добавления
25
25
OCSP проверок или TSP меток, удалить электронный контент, чтобы оставить только подписи или просто объединить две разные подписи одних и тех же данных.
26
26
Отправной точкой стала библиотека [adapik/cms](https://github.com/Adapik/CMS), в которой на тот момент не было детального описания всех возможных полей и данных в
27
27
CAdES. Так начался долгий путь чтения RFC и написания [нескольких тысяч строк кода](https://github.com/Adapik/CMS/graphs/contributors) чтобы полностью и
28
-
безошибочно описать рекомендации в виде библиотеки. Но по договоренности с Александром Даниловым, мы решили, что изначальная библиотека будет работать
28
+
детально описать рекомендации в виде библиотеки. Но по договоренности с Александром Даниловым, мы решили, что изначальная библиотека будет работать
29
29
исключительно в режиме чтения, а все остальное, если я того желаю, могу сделать в виде отдельного пакета. Что, собственно, и было сделано.
@@ -40,7 +41,6 @@ CAdES. Так начался долгий путь чтения RFC и напи
40
41
*[ResponseBytes](#ResponseBytes)
41
42
*[RevocationValues](#RevocationValues)
42
43
*[Signature](#Signature)
43
-
*[SignedData](#_SignedData_)
44
44
*[SignedDataContent](#SignedDataContent)
45
45
*[SignerInfo](#SignerInfo)
46
46
*[TBSRequest](#TBSRequest)
@@ -53,7 +53,8 @@ CAdES. Так начался долгий путь чтения RFC и напи
53
53
* * *
54
54
55
55
# **EncapsulatedContentInfo**
56
-
**EncapsulatedContentInfo** — Согласно [RFC5652](https://datatracker.ietf.org/doc/html/rfc5652#section-5.2) - место хранения подписанных данных.
56
+
**EncapsulatedContentInfo** — Согласно [RFC5652](https://datatracker.ietf.org/doc/html/rfc5652#section-5.2) - место хранения подписанных данных. Хранить
57
+
данные в слепке ЭЦП не обязательное условие, следовательно, их можно удалять или внедрять.
57
58
58
59
## **Методы**
59
60
@@ -68,7 +69,8 @@ public function setEContent(OctetString $octetString): self
68
69
```
69
70
70
71
В случае, если подписанные данные и сами подписи хранятся раздельно, но необходимо сформировать полный CMS файл, данный метод позволяет
71
-
внедрить содержание в подпись.
72
+
внедрить содержание в подпись. Следует учесть, что метод не проверяет хэш файла и хэш из подписи, так как алгоритм хеширования может не входить
73
+
в стандартную поставку openssl.
72
74
73
75
* * *
74
76
@@ -86,4 +88,23 @@ public function unSetEContent(): self
86
88
хранить данные и подписи, вполне разумно их разделять, особенно, если данные очень большого объема, так как их всегда можно проверить по хэшу,
87
89
который использовался в подписи.
88
90
89
-
* * *
91
+
* * *
92
+
93
+
# **SignedData**
94
+
**SignedData** — объединение двух цифровых подписей в единую.
95
+
96
+
## **Методы**
97
+
98
+
### **mergeCMS**
99
+
100
+
mergeCMS — объединение дайджестов, публичных и отозванных сертификатов, а также самих подписей
101
+
102
+
#### Описание
103
+
104
+
```php
105
+
public function mergeCMS(SignedData $signedData): SignedData
106
+
```
107
+
108
+
Метод позволяет собрать несколько CMS файлов в единый, если один и тот же файл был подписан разными системами, либо если каждая подпись хранится отдельно.
0 commit comments