]> Cypherpunks.ru repositories - pygost.git/commitdiff
Partly supported ContentInfo.SignedData.certificates
authorSergey Matveev <stargrave@stargrave.org>
Wed, 4 Sep 2019 12:39:00 +0000 (15:39 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Wed, 4 Sep 2019 12:39:00 +0000 (15:39 +0300)
pygost/asn1schemas/cms.py

index f5e0a907096bbeee7de7436da35d834965621b61..f168c1c93de8720044c0538f921f6a7ca8cbb158 100644 (file)
@@ -36,6 +36,7 @@ from pygost.asn1schemas.oids import id_signedData
 from pygost.asn1schemas.oids import id_tc26_gost3410_2012_256
 from pygost.asn1schemas.oids import id_tc26_gost3410_2012_512
 from pygost.asn1schemas.x509 import AlgorithmIdentifier
+from pygost.asn1schemas.x509 import Certificate
 from pygost.asn1schemas.x509 import SubjectPublicKeyInfo
 
 
@@ -270,12 +271,26 @@ class SignerInfos(SetOf):
     schema = SignerInfo()
 
 
+class CertificateChoices(Choice):
+    schema = (
+        ('certificate', Certificate()),
+        # ('extendedCertificate', ExtendedCertificate(impl=tag_ctxp(0))),
+        # ('v1AttrCert', AttributeCertificateV1(impl=tag_ctxc(1))),  # V1 is osbolete
+        # ('v2AttrCert', AttributeCertificateV2(impl=tag_ctxc(2))),
+        # ('other', OtherCertificateFormat(impl=tag_ctxc(3))),
+    )
+
+
+class CertificateSet(SetOf):
+    schema = CertificateChoices()
+
+
 class SignedData(Sequence):
     schema = (
         ("version", CMSVersion()),
         ("digestAlgorithms", DigestAlgorithmIdentifiers()),
         ("encapContentInfo", EncapsulatedContentInfo()),
-        ("certificates", CertificateSet(impl=tag_ctxc(0), optional=True)),
+        ("certificates", CertificateSet(impl=tag_ctxc(0), optional=True)),
         # ("crls", RevocationInfoChoices(impl=tag_ctxc(1), optional=True)),
         ("signerInfos", SignerInfos()),
     )