from pyderasn import Any
from pyderasn import BitString
from pyderasn import Boolean
+from pyderasn import IA5String
from pyderasn import Integer
from pyderasn import OctetString
from pyderasn import PrintableString
from pygost.asn1schemas.oids import id_at_commonName
from pygost.asn1schemas.oids import id_ce_basicConstraints
+from pygost.asn1schemas.oids import id_ce_subjectAltName
from pygost.asn1schemas.oids import id_ce_subjectKeyIdentifier
from pygost.asn1schemas.oids import id_tc26_gost3410_2012_256
from pygost.asn1schemas.oids import id_tc26_gost3410_2012_256_paramSetA
from pygost.asn1schemas.x509 import CertificateSerialNumber
from pygost.asn1schemas.x509 import Extension
from pygost.asn1schemas.x509 import Extensions
+from pygost.asn1schemas.x509 import GeneralName
from pygost.asn1schemas.x509 import GostR34102012PublicKeyParameters
from pygost.asn1schemas.x509 import Name
from pygost.asn1schemas.x509 import RDNSequence
from pygost.asn1schemas.x509 import RelativeDistinguishedName
+from pygost.asn1schemas.x509 import SubjectAltName
from pygost.asn1schemas.x509 import SubjectKeyIdentifier
from pygost.asn1schemas.x509 import SubjectPublicKeyInfo
from pygost.asn1schemas.x509 import TBSCertificate
SubjectKeyIdentifier(GOST34112012256(pub_raw).digest()[:20]).encode()
)),
)),
+ Extension((
+ ("extnID", id_ce_subjectAltName),
+ ("extnValue", OctetString(
+ SubjectAltName((
+ GeneralName(("dNSName", IA5String(args.cn))),
+ )).encode()
+ )),
+ )),
]
if args.ca:
exts.append(Extension((
id_at_commonName = ObjectIdentifier("2.5.4.3")
id_ce_basicConstraints = ObjectIdentifier("2.5.29.19")
id_ce_subjectKeyIdentifier = ObjectIdentifier("2.5.29.14")
+id_ce_subjectAltName = ObjectIdentifier("2.5.29.17")
from pyderasn import Boolean
from pyderasn import Choice
from pyderasn import GeneralizedTime
+from pyderasn import IA5String
from pyderasn import Integer
from pyderasn import ObjectIdentifier
from pyderasn import OctetString
("signatureAlgorithm", AlgorithmIdentifier()),
("signatureValue", BitString()),
)
+
+
+class GeneralName(Choice):
+ schema = (
+ # ('otherName', AnotherName(impl=tag_ctxc(0))),
+ # ('rfc822Name', IA5String(impl=tag_ctxp(1))),
+ ('dNSName', IA5String(impl=tag_ctxp(2))),
+ # ('x400Address', ORAddress(impl=tag_ctxp(3))),
+ # ('x400Address', OctetString(impl=tag_ctxp(3))),
+ # ('directoryName', Name(expl=tag_ctxc(4))),
+ # ('ediPartyName', EDIPartyName(impl=tag_ctxc(5))),
+ # ('uniformResourceIdentifier', IA5String(impl=tag_ctxp(6))),
+ # ('iPAddress', OctetString(impl=tag_ctxp(7))),
+ # ('registeredID', ObjectIdentifier(impl=tag_ctxp(8))),
+ )
+
+
+class GeneralNames(SequenceOf):
+ schema = GeneralName()
+ bounds = (1, float('+inf'))
+
+
+class SubjectAltName(GeneralNames):
+ pass