X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=pygost%2Fasn1schemas%2Fx509.py;h=cda11da42dcb4d1a8daff65bb054b9c6d02108f4;hb=08cedcc91f44b8ffd2d8f3a3fbbb15263ccff440;hp=188ef3a6126ee3a1d02f5ede5e97ea18bc6572ad;hpb=5e92533267cb41c42af1243592c530304d18bff5;p=pygost.git diff --git a/pygost/asn1schemas/x509.py b/pygost/asn1schemas/x509.py index 188ef3a..cda11da 100644 --- a/pygost/asn1schemas/x509.py +++ b/pygost/asn1schemas/x509.py @@ -1,6 +1,6 @@ # coding: utf-8 # PyGOST -- Pure Python GOST cryptographic functions library -# Copyright (C) 2015-2020 Sergey Matveev +# Copyright (C) 2015-2021 Sergey Matveev # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -23,6 +23,7 @@ from pyderasn import BitString 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 @@ -35,6 +36,12 @@ from pyderasn import tag_ctxp 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 = ( @@ -73,11 +80,11 @@ class OrganizationName(Choice): 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()), ) @@ -204,3 +211,38 @@ class CertificateList(Sequence): ("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 + + +class AuthorityKeyIdentifier(Sequence): + schema = ( + ("keyIdentifier", KeyIdentifier(impl=tag_ctxp(0), optional=True)), + # ("authorityCertIssuer", GeneralNames(impl=tag_ctxc(1), optional=True)), + # ( + # "authorityCertSerialNumber", + # CertificateSerialNumber(impl=tag_ctxp(2), optional=True), + # ), + )