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
from pyderasn import TeletexString
from pyderasn import UTCTime
+from pygost.asn1schemas.oids import id_at_commonName
+from pygost.asn1schemas.oids import id_at_countryName
+from pygost.asn1schemas.oids import id_at_localityName
+from pygost.asn1schemas.oids import id_at_organizationName
+from pygost.asn1schemas.oids import id_at_stateOrProvinceName
+
class Version(Integer):
schema = (
class AttributeTypeAndValue(Sequence):
schema = (
("type", AttributeType(defines=(((".", "value"), {
- ObjectIdentifier("2.5.4.6"): PrintableString(),
- ObjectIdentifier("2.5.4.8"): PrintableString(),
- ObjectIdentifier("2.5.4.7"): PrintableString(),
- ObjectIdentifier("2.5.4.10"): OrganizationName(),
- ObjectIdentifier("2.5.4.3"): PrintableString(),
+ id_at_countryName: PrintableString(),
+ id_at_stateOrProvinceName: PrintableString(),
+ id_at_localityName: PrintableString(),
+ id_at_organizationName: OrganizationName(),
+ id_at_commonName: PrintableString(),
}),))),
("value", AttributeValue()),
)
("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