9(Zc@`sy dZddlmZmZmZmZddlmZddlm Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlmZddlmZmZdd lmZdd lmZmZmZdd lmZmZdd lmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9dd l:m;Z;ddl<m=Z=m>Z>m?Z?m@Z@de'fdYZAde'fdYZBde'fdYZCde-fdYZDde0fdYZEde1fdYZFde fdYZGde0fdYZHde4fd YZIed!ZJd"e#fd#YZKd$e+fd%YZLd&e0fd'YZMd(e3fd)YZNd*e1fd+YZOd,e#fd-YZPd.e0fd/YZQd0e#fd1YZRd2e#fd3YZSd4e#fd5YZTd6e2fd7YZUd8e2fd9YZVd:e1fd;YZWd<e1fd=YZXd>e0fd?YZYd@e0fdAYZZdBe1fdCYZ[dDe0fdEYZ\dFe1fdGYZ]dHe#fdIYZ^dJe#fdKYZ_dLe2fdMYZ`dNe1fdOYZadPe2fdQYZbdRe0fdSYZcdTe3fdUYZddVe0fdWYZedXe#fdYYZfdZe(fd[YZgd\e(fd]YZhd^e0fd_YZid`e1fdaYZjdbe0fdcYZkdde0fdeYZldfe#fdgYZmdhe1fdiYZndje#fdkYZodle0fdmYZpdne0fdoYZqdpe0fdqYZrdre#fdsYZsdte fduYZtdve0fdwYZudxe1fdyYZvdze0fd{YZwd|e0fd}YZxd~e1fdYZyde#fdYZzde1fdYZ{de0fdYZ|de0fdYZ}de+fdYZ~de0fdYZde1fdYZde+fdYZde0fdYZde1fdYZde0fdYZde1fdYZde0fdYZde+fdYZde1fdYZde+fdYZde0fdYZde1fdYZde1fdYZde1fdYZde0fdYZde fdYZde+fdYZde0fdYZde1fdYZde(fdYZde0fdYZde0fdYZde1fdYZde1fdYZde0fdYZde$fdYZdS(u ASN.1 type classes for X.509 certificates. Exports the following items: - Attributes() - Certificate() - Extensions() - GeneralName() - GeneralNames() - Name() Other type classes are defined that help compose the types listed above. i(tunicode_literalstdivisiontabsolute_importtprint_function(tcontextmanager(tidnaNi(tunwrap(t iri_to_urit uri_to_iri(t OrderedDict(t type_nametstr_clst bytes_to_list(tAlgorithmIdentifiertSignedDigestAlgorithm(tAnyt BitStringt BMPStringtBooleantChoicetConcattGeneralizedTimet GeneralStringt IA5StringtIntegertNullt NumericStringtObjectIdentifiertOctetBitStringt OctetStringtParsableOctetStringtPrintableStringtSequencet SequenceOftSettSetOft TeletexStringtUniversalStringtUTCTimet UTF8Stringt VisibleStringtVOID(t PublicKeyInfo(t int_to_bytestint_from_bytest inet_ntopt inet_ptontDNSNamecB`s/eZdZdZdZdZdZRS(uidnaicC`s ||k S(N((tselftother((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyt__ne__KscC`s5t|tstS|jj|jjkS(u Equality as defined by https://tools.ietf.org/html/rfc5280#section-7.2 :param other: Another DNSName object :return: A boolean (t isinstanceR/tFalset __unicode__tlower(R0R1((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyt__eq__Ns cC`st|ts6ttdt|t|n|jdrbd|dj|j}n|j|j}||_||_ d|_ |j dkrd|_ ndS(ud Sets the value of the DNS name :param value: A unicode string uK %s value must be a unicode string, not %s u.t.itN( R3R t TypeErrorRR t startswithtencodet _encodingt_unicodetcontentstNonet_headert_trailer(R0tvaluet encoded_value((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pytset^s    (t__name__t __module__R=t_bad_tagR2R7RE(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR/Fs   tURIcB`s,eZdZdZdZdZRS(cC`svt|ts6ttdt|t|n||_t||_d|_ |j dkrrd|_ ndS(ub Sets the value of the string :param value: A unicode string uK %s value must be a unicode string, not %s R9N( R3R R:RR R>RR?R@RARB(R0RC((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRE}s   cC`s ||k S(N((R0R1((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR2scC`s/t|tstSt|jt|jkS(u Equality as defined by https://tools.ietf.org/html/rfc5280#section-7.4 :param other: Another URI object :return: A boolean (R3RIR4Rtnative(R0R1((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR7s cC`sA|jdkrdS|jdkr:t|j|_n|jS(u7 :return: A unicode string uN(R?R@R>Rt _merge_chunks(R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR5s (RFRGRER2R7R5(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRI{s   t EmailAddresscB`sYeZdZeZedZejdZdZ dZ dZ dZ RS(cC`s|jS(u` :return: A byte string of the DER-encoded contents of the sequence (t _contents(R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR?scC`st|_||_dS(ue :param value: A byte string of the DER-encoded contents of the sequence N(R4t _normalizedRM(R0RC((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR?s cC`st|ts6ttdt|t|n|jddkr|jdd\}}|jdd|jd}n|jd}t|_ ||_ ||_ d |_ |jdkrd|_nd S( ub Sets the value of the string :param value: A unicode string uK %s value must be a unicode string, not %s u@iiuasciit@uidnaR9N(R3R R:RR tfindtrsplitR<tTrueRNR>R?R@RARB(R0RCtmailboxthostnameRD((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyREs #    cC`s|jdkr|j}|jddkrE|jd|_q|jdd\}}|jdd|jd|_n|jS(u7 :return: A unicode string ROiuasciiiu@uidnaN(R>R@RKRPtdecodeRQ(R0R?RSRT((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR5s &cC`s ||k S(N((R0R1((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR2scC`st|tstS|js/|j|jn|jsK|j|jn|jjddks{|jjddkr|j|jkS|jjdd\}}|jjdd\}}||krtS|j |j krtSt S(u Equality as defined by https://tools.ietf.org/html/rfc5280#section-7.5 :param other: Another EmailAddress object :return: A boolean ROii( R3RLR4RNRERJRMRPRQR6RR(R0R1t other_mailboxtother_hostnameRSRT((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR7s   0 N( RFRGR@RMR4RNtpropertyR?tsetterRER5R2R7(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRLs    t IPAddresscB`sAeZdddZdZedZdZdZRS(cC`sttddS(u? This method is not applicable to IP addresses u= IP address values can not be parsed N(t ValueErrorR(R0tspect spec_params((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pytparse!sc C`st|ts6ttdt|t|n|}|jddk}d}|r|jdd}|d}t|d}|dkrttdt|qn|jddkrt j }|dkrttd t|nd}n9t j }|d kr:ttd t|nd }d }|rd |} | d|t | 7} t t| d}d|dt ||}n||_t||||_|j|_d|_|jd krd |_ndS(u Sets the value of the object :param value: A unicode string containing an IPv4 address, IPv4 address with CIDR, an IPv6 address or IPv6 address with CIDR uK %s value must be a unicode string, not %s u/iiiuT %s value contains a CIDR range less than 0 u:iu %s value contains a CIDR range bigger than 128, the maximum value for an IPv6 address i u %s value contains a CIDR range bigger than 32, the maximum value for an IPv4 address R9u1u0itiN(R3R R:RR RPtsplittintR[tsockettAF_INET6tAF_INETtlenR+t_nativeR.R?t_bytesR@RARB( R0RCtoriginal_valuethas_cidrtcidrtpartstfamilyt cidr_sizet cidr_bytest cidr_mask((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRE,sR             cC`s@|jd krd S|jd kr9|j}t|}d }|tddgkrttj|dd!}|dkrt |d}qnS|tddgkrttj |dd!}|dkrt |d}qn|d k r-dj |}t|j d}|dt |}n||_n|jS( u The a native Python datatype representation of this value :return: A unicode string or None i iiiiu{0:b}u0u/N(R?R@Rft __bytes__ReRER-RbRcR,RdtformattrstripR (R0t byte_stringtbyte_lentcidr_intRCt cidr_bitsRj((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRJss(       cC`s ||k S(N((R0R1((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR2scC`s)t|tstS|j|jkS(ul :param other: Another IPAddress object :return: A boolean (R3RZR4Rp(R0R1((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR7s N( RFRGR@R^RERXRJR2R7(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRZ s  G t AttributecB`s*eZdefdeied6fgZRS(utypeuvaluesuspec(RFRGRR#Rt_fields(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRws t AttributescB`seZeZRS((RFRGRwt _child_spec(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRystKeyUsagecB`sMeZi dd6dd6dd6dd6dd 6d d 6d d 6dd6dd6ZRS(udigital_signatureiunon_repudiationiukey_enciphermentiudata_enciphermentiu key_agreementiu key_cert_signiucrl_signiu encipher_onlyiu decipher_onlyi(RFRGt_map(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR{stPrivateKeyUsagePeriodcB`sBeZdeidd6ed6fdeidd6ed6fgZRS(u not_beforeiuimplicituoptionalu not_afteri(RFRGRRRRx(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR}stNotReallyTeletexStringcB`seZdZdZdZRS(u6 OpenSSL (and probably some other libraries) puts ISO-8859-1 into TeletexString instead of ITU T.61. We use Windows-1252 when decoding since it is a superset of ISO-8859-1, and less likely to cause encoding issues, but we stay strict with encoding to prevent us from creating bad data. ucp1252cC`sG|jdkrdS|jdkr@|jj|j|_n|jS(u7 :return: A unicode string uN(R?R@R>RKRUt_decoding_encoding(R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR5s (RFRGt__doc__RR5(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR~scc`s#zdt_dVWddt_XdS(Nuteletexucp1252(R~R(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pytstrict_teletexs  tDirectoryStringcB`sDeZdefdefdefdefdefdefgZRS(uteletex_stringuprintable_stringuuniversal_stringu utf8_stringu bmp_stringu ia5_string( RFRGR~RR%R'RRt _alternatives(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRs      tNameTypecB`s=eZidd6dd6dd6dd6dd 6d d 6d d 6dd6dd6dd6dd6dd6dd6dd6dd6dd6d d!6d"d#6d$d%6d&d'6d(d)6d*d+6d,d-6d.d/6d0d16d2d36d4d56Zd0d.d,ddddd dd dddddd dddd&d$dd*d2d4d(gZed6Zed7ZRS(8u common_nameu2.5.4.3usurnameu2.5.4.4u serial_numberu2.5.4.5u country_nameu2.5.4.6u locality_nameu2.5.4.7ustate_or_province_nameu2.5.4.8ustreet_addressu2.5.4.9uorganization_nameu2.5.4.10uorganizational_unit_nameu2.5.4.11utitleu2.5.4.12ubusiness_categoryu2.5.4.15u postal_codeu2.5.4.17utelephone_numberu2.5.4.20unameu2.5.4.41u given_nameu2.5.4.42uinitialsu2.5.4.43ugeneration_qualifieru2.5.4.44uunique_identifieru2.5.4.45u dn_qualifieru2.5.4.46u pseudonymu2.5.4.65uorganization_identifieru2.5.4.97u email_addressu1.2.840.113549.1.9.1uincorporation_localityu1.3.6.1.4.1.311.60.2.1.1uincorporation_state_or_provinceu1.3.6.1.4.1.311.60.2.1.2uincorporation_countryu1.3.6.1.4.1.311.60.2.1.3udomain_componentu0.9.2342.19200300.100.1.25uname_distinguisheru0.2.262.1.10.7.20cC`sL|j|}||jkr3|jj|}nt|j}||fS(u Returns an ordering value for a particular attribute key. Unrecognized attributes and OIDs will be sorted lexically at the end. :return: An orderable value. (tmaptpreferred_ordertindexRe(tclst attr_nametordinal((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pytpreferred_ordinal4s cC`sidd6dd6dd6dd6d d 6d d 6d d6dd6dd6dd6dd6dd6dd6dd6dd6dd 6d!d"6d#d$6d%d&6d'd(6d)d*6d+d,6d-d.6d/d06d1d26d3d46d5d66j|j|jS(7uZ :return: A human-friendly unicode string to display to users u Common Nameu common_nameuSurnameusurnameu Serial Numberu serial_numberuCountryu country_nameuLocalityu locality_nameuState/Provinceustate_or_province_nameuStreet Addressustreet_addressu Organizationuorganization_nameuOrganizational Unituorganizational_unit_nameuTitleutitleuBusiness Categoryubusiness_categoryu Postal Codeu postal_codeuTelephone Numberutelephone_numberuNameunameu Given Nameu given_nameuInitialsuinitialsuGeneration Qualifierugeneration_qualifieruUnique Identifieruunique_identifieru DN Qualifieru dn_qualifieru Pseudonymu pseudonymu Email Addressu email_addressuIncorporation Localityuincorporation_localityuIncorporation State/Provinceuincorporation_state_or_provinceuIncorporation Countryuincorporation_countryuDomain Componentudomain_componentuName Distinguisheruname_distinguisheruOrganization Identifieruorganization_identifier(tgetRJ(R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pythuman_friendlyHs: (RFRGR|Rt classmethodRRXR(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRsp  tNameTypeAndValuecB`seZdefdefgZd!Zied6ed6ed6ed6ed6ed6ed6ed 6ed 6ed 6ed 6ed 6ed6ed6ed6ed6ed6ed6ed6ed6e d6ed6ed6ed6e d6ed6ed6Z d"Z edZdZdZd ZRS(#utypeuvalueu common_nameusurnameu serial_numberu country_nameu locality_nameustate_or_province_nameustreet_addressuorganization_nameuorganizational_unit_nameutitleubusiness_categoryu postal_codeutelephone_numberunameu given_nameuinitialsugeneration_qualifieruunique_identifieru dn_qualifieru pseudonymu email_addressuincorporation_localityuincorporation_state_or_provinceuincorporation_countryudomain_componentuname_distinguisheruorganization_identifiercC`s2|jdkr+|j|dj|_n|jS(u Returns the value after being processed by the internationalized string preparation as specified by RFC 5280 :return: A unicode string uvalueN(t_preppedR@t_ldap_string_prepRJ(R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyt prepped_values cC`s ||k S(N((R0R1((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR2scC`sAt|tstS|dj|djkr1tS|j|jkS(u Equality as defined by https://tools.ietf.org/html/rfc5280#section-7.1 :param other: Another NameTypeAndValue object :return: A boolean utype(R3RR4RJR(R0R1((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR7s cC`stjdd|}tjdd|}tjdkrQtjdd|}ntjdd|}tjdd|}|jd d}tjd d|}djttj|}t j d |}x|D]}tj |rt t d ntj|r$t t d ntj|rHt t dntj|rlt t dntj|rt t dn|dkrt t dqqWt}t}x>|D]6}tj|rt}qtj|rt}qqW|rZtj|d}tj|d}|sB| sB| rZt t dqZndtjdd|jd}|S(u" Implements the internationalized string preparation algorithm from RFC 4518. https://tools.ietf.org/html/rfc4518#section-2 :param string: A unicode string to prepare :return: A prepared unicode string, ready for comparison u[­᠆͏᠋-᠍️-＀]+uu [ …]u iu[-]|[-]|󠀁u[𝅳-𝅺󠀠-󠁿󠀁]u?[---„†-Ÿ۝܏᠎‌-‏‪-‮⁠-⁣--]+u​u[   - 
-
   ]uNFKCuc X.509 Name objects may not contain unassigned code points u X.509 Name objects may not contain change display or zzzzdeprecated characters uc X.509 Name objects may not contain private use characters uf X.509 Name objects may not contain non-character code points ub X.509 Name objects may not contain surrogate code points u�uf X.509 Name objects may not contain the replacement character iiu{ X.509 Name object contains a malformed bidirectional sequence u +u (tretsubtsyst maxunicodetreplacetjoinRt stringprept map_table_b2t unicodedatat normalizet in_table_a1R[Rt in_table_c8t in_table_c3t in_table_c4t in_table_c5R4t in_table_d1RRt in_table_d2tstrip(R0tstringtcharthas_r_and_al_catt has_l_cattfirst_is_r_and_altlast_is_r_and_al((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRs^       #(utypeuvalueN(RFRGRRRxt _oid_pairRRRRLR/t _oid_specsR@RRXRR2R7R(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRnsH    tRelativeDistinguishedNamecB`sAeZeZedZdZdZdZdZ RS(cC`sZg}|j|}x5t|jD]!}|jd|||fq(Wdj|S(ub :return: A unicode string that can be used as a dict key or in a set u%s: %su(t _get_valuestsortedtkeystappendR(R0toutputtvaluestkey((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pythashable+s cC`s ||k S(N((R0R1((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR2;scC`st|tstSt|t|kr/tS|j|}|j|}||kr]tS|j|}|j|}x&|D]}||||krtSqWtS(u Equality as defined by https://tools.ietf.org/html/rfc5280#section-7.1 :param other: Another RelativeDistinguishedName object :return: A boolean (R3RR4Ret _get_typesRRR(R0R1t self_typest other_typest self_valuest other_valuest type_name_((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR7>s   cC`s$tg|D]}|dj^q S(u Returns a set of types contained in an RDN :param rdn: A RelativeDistinguishedName object :return: A set object with unicode strings of NameTypeAndValue type field values utype(RERJ(R0trdntntv((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR^s cC`s=i}g|D](}|j|dj|jfg^q |S(u$ Returns a dict of prepped values contained in an RDN :param rdn: A RelativeDistinguishedName object :return: A dict object with unicode strings of NameTypeAndValue value field values that have been prepped for comparison utype(tupdateRJR(R0RRR((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRls 3( RFRGRRzRXRR2R7RR(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR(s   t RDNSequencecB`s/eZeZedZdZdZRS(cC`sdjd|DS(ub :return: A unicode string that can be used as a dict key or in a set ucs`s|]}|jVqdS(N(R(t.0R((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pys s(R(R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRs cC`s ||k S(N((R0R1((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR2scC`sdt|tstSt|t|kr/tSx.t|D] \}}|||kr<tSq<WtS(u Equality as defined by https://tools.ietf.org/html/rfc5280#section-7.1 :param other: Another RDNSequence object :return: A boolean (R3RR4Ret enumerateRR(R0R1Rtself_rdn((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR7s (RFRGRRzRXRR2R7(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR}s tNamecB`seZdefgZd Zd Zd Zee dZ e dZ dZ dZdZe dZe dZdZe d Ze d ZRS( uc C`sAg}|sd}t}n d}t}tt|jdd}x|jD]\}}tj|}|dkrt|}no|dkrt|}nT|t ddd gkrt d dd t|}nt d |d ||}|j t t i|d 6|d 6gqUW|d dd t|S(uT Creates a Name object from a dict of unicode string keys and values. The keys should be from NameType._map, or a dotted-integer OID unicode string. :param name_dict: A dict of name information, e.g. {"common_name": "Will Bond", "country_name": "US", "organization": "Codex Non Sufficit LC"} :param use_printable: A bool - if PrintableString should be used for encoding instead of UTF8String. This is for backwards compatibility with old software. :return: An x509.Name object u utf8_stringuprintable_stringRcS`stj|dS(Ni(RR(titem((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pytsu email_addressudomain_componentu dn_qualifieru country_nameu serial_numbertnameRCutypeuvalueu(R'RR RtitemsRRRLR/RERRRRR( Rt name_dictt use_printabletrdnst encoding_nametencoding_classtattribute_nametattribute_valueRC((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pytbuilds8     cC`s |jjS(ub :return: A unicode string that can be used as a dict key or in a set (tchosenR(R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRscC`s t|jS(N(ReR(R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyt__len__scC`s ||k S(N((R0R1((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR2scC`s#t|tstS|j|jkS(u Equality as defined by https://tools.ietf.org/html/rfc5280#section-7.1 :param other: Another Name object :return: A boolean (R3RR4R(R0R1((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR7s cC`s|jdkrt|_x|jjD]}x|D]w}|d}||jkr|j|}t|ts|g}|j||D]6}||} |j | } |jd|| fqWt } x-|D]%} | j ddkrt } PqqW| sOdnd} | j |d d d|_n|jS( ug :return: A human-friendly unicode string containing the parts of the name utypeuvalueuCountryu%s: %su,iu, u; N(t_human_friendlyR@R RRRRtreversedRt_recursive_humanizeR4RPRRR(R0tdatat last_fieldRRRtto_joinRRRCt native_valuet has_commatelementt separator((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRs6         "cC`sEt|tr>djtg|D]}|j|^qS|jS(u Recursively serializes data compiled from the RDNSequence :param value: An Asn1Value object, or a list of Asn1Value objects :return: A unicode string u, (R3RRRRRJ(R0RCt sub_value((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRBs )cC`s7|jdkr0tj|jj|_n|jS(uZ :return: The SHA1 hash of the DER-encoded bytes of this name N(t_sha1R@thashlibtsha1tdumptdigest(R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRSs!cC`s7|jdkr0tj|jj|_n|jS(u] :return: The SHA-256 hash of the DER-encoded bytes of this name N(t_sha256R@Rtsha256RR(R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR^s!N(RFRGRRR@RRRRR4RRXRRR2R7RJRRRR(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRs<   '  t AnotherNamecB`s*eZdefdeidd6fgZRS(utype_iduvalueiuexplicit(RFRGRRRx(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRjs t CountryNamecB`s,eZdZdZdefdefgZRS(iu x121_dcc_codeuiso_3166_alpha2_code(RFRGtclass_ttagRRR(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRqs tAdministrationDomainNamecB`s,eZdZdZdefdefgZRS(iiunumericu printable(RFRGRRRRR(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR{s tPrivateDomainNamecB`s eZdefdefgZRS(unumericu printable(RFRGRRR(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRs t PersonalNamecB`soeZdeidd6fdeidd6ed6fdeidd6ed6fdeid d6ed6fgZRS( usurnameiuimplicitu given_nameiuoptionaluinitialsiugeneration_qualifieri(RFRGRRRRx(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRstTeletexPersonalNamecB`soeZdeidd6fdeidd6ed6fdeidd6ed6fdeid d6ed6fgZRS( usurnameiuimplicitu given_nameiuoptionaluinitialsiugeneration_qualifieri(RFRGR$RRRx(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRstOrganizationalUnitNamescB`seZeZRS((RFRGRRz(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRstTeletexOrganizationalUnitNamescB`seZeZRS((RFRGR$Rz(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRstBuiltInStandardAttributesc B`seZdeied6fdeied6fdeidd6ed6fdeidd6ed6fdeid d 6ed6fd eid d6ed6fd eidd6ed6fdeidd6ed6fde idd6ed6fg Z RS(u country_nameuoptionaluadministration_domain_nameunetwork_addressiuimplicituterminal_identifieriuprivate_domain_nameiuexplicituorganization_nameiunumeric_user_identifieriu personal_nameiuorganizational_unit_namesi( RFRGRRRRRRRRRRx(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRstBuiltInDomainDefinedAttributecB`s eZdefdefgZRS(utypeuvalue(RFRGRRx(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRs tBuiltInDomainDefinedAttributescB`seZeZRS((RFRGRRz(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRstTeletexDomainDefinedAttributecB`s eZdefdefgZRS(utypeuvalue(RFRGR$Rx(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRs tTeletexDomainDefinedAttributescB`seZeZRS((RFRGRRz(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRstPhysicalDeliveryCountryNamecB`s eZdefdefgZRS(u x121_dcc_codeuiso_3166_alpha2_code(RFRGRRR(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRs t PostalCodecB`s eZdefdefgZRS(u numeric_codeuprintable_code(RFRGRRR(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRs t PDSParametercB`s4eZdeied6fdeied6fgZRS(uprintable_stringuoptionaluteletex_string(RFRGRRRR$Rx(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRstPrintableAddresscB`seZeZRS((RFRGRRz(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRstUnformattedPostalAddresscB`s4eZdeied6fdeied6fgZRS(uprintable_addressuoptionaluteletex_string(RFRGRRRR$Rx(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRst E1634AddresscB`s;eZdeidd6fdeidd6ed6fgZRS(unumberiuimplicitu sub_addressiuoptional(RFRGRRRRx(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRst NAddressescB`seZeZRS((RFRGRRz(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRstPresentationAddresscB`soeZdeidd6ed6fdeidd6ed6fdeidd6ed6fdeid d6fgZRS( u p_selectoriuexplicituoptionalu s_selectoriu t_selectoriu n_addressesi(RFRGRRRRRx(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRstExtendedNetworkAddresscB`s*eZdefdeidd6fgZRS(ue163_4_addressu psap_addressiuimplicit(RFRGRRR(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRs t TerminalTypecB`s8eZidd6dd6dd6dd6dd 6d d 6ZRS( utelexiuteletexiu g3_facsimileiu g4_facsimileiu ia5_terminaliuvideotexi(RFRGR|(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRstExtensionAttributeTypecB`seZidd6dd6dd6dd6dd 6d d 6d d 6dd6dd6dd6dd6dd6dd6dd6dd6dd6d d!6d"d#6d$d%6d&d'6d(d)6d*d+6d,d-6ZRS(.u common_nameiuteletex_common_nameiuteletex_organization_nameiuteletex_personal_nameiuteletex_organization_unit_namesiu!teletex_domain_defined_attributesiupds_nameiuphysical_delivery_country_nameiu postal_codei uphysical_delivery_office_namei uphysical_delivery_office_numberi uextension_of_address_componentsi uphysical_delivery_personal_namei u#physical_delivery_organization_nameiu.extension_physical_delivery_address_componentsiuunformatted_postal_addressiustreet_addressiupost_office_box_addressiuposte_restante_addressiuunique_postal_nameiulocal_postal_attributesiuextended_network_addressiu terminal_typei(RFRGR|(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRs0tExtensionAttributecB`seZdeidd6fdeidd6fgZdZied6ed6ed6ed 6e d 6e d 6ed 6e d 6e d6e d6e d6e d6e d6e d6e d6ed6e d6e d6e d6e d6e d6ed6ed6ZRS(uextension_attribute_typeiuimplicituextension_attribute_valueiuexplicitu common_nameuteletex_common_nameuteletex_organization_nameuteletex_personal_nameuteletex_organization_unit_namesu!teletex_domain_defined_attributesupds_nameuphysical_delivery_country_nameu postal_codeuphysical_delivery_office_nameuphysical_delivery_office_numberuextension_of_address_componentsuphysical_delivery_personal_nameu#physical_delivery_organization_nameu.extension_physical_delivery_address_componentsuunformatted_postal_addressustreet_addressupost_office_box_addressuposte_restante_addressuunique_postal_nameulocal_postal_attributesuextended_network_addressu terminal_type(uextension_attribute_typeuextension_attribute_value(RFRGRRRxRRR$RRRRRRRRRR(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR,s6tExtensionAttributescB`seZeZRS((RFRGRRz(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRNst ORAddresscB`s=eZdefdeied6fdeied6fgZRS(ubuilt_in_standard_attributesu"built_in_domain_defined_attributesuoptionaluextension_attributes(RFRGRRRRRRx(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRRs t EDIPartyNamecB`s;eZdeidd6ed6fdeidd6fgZRS(u name_assigneriuimplicituoptionalu party_namei(RFRGRRRRx(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRZst GeneralNamec B`seZdeidd6fdeidd6fdeidd6fdeidd6fd eid d 6fd eid d6fdeidd6fde idd6fde idd6fg Z dZ dZ RS(u other_nameiuimplicitu rfc822_nameiudns_nameiu x400_addressiudirectory_nameiuexplicituedi_party_nameiuuniform_resource_identifieriu ip_addressiu registered_idicC`s ||k S(N((R0R1((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR2nscC`sz|jdkr*ttd|jn|jdkrTttd|jn|j|jkrjtS|j|jkS(u Does not support other_name, x400_address or edi_party_name :param other: The other GeneralName to compare to :return: A boolean u other_nameu x400_addressuedi_party_nameur Comparison is not supported for GeneralName objects of choice %s ua Comparison is not supported for GeneralName objects of choice %s(u other_nameu x400_addressuedi_party_name(u other_nameu x400_addressuedi_party_name(RR[RR4R(R0R1((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR7qs (RFRGRRLR/RRRRIRZRRR2R7(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRas t GeneralNamescB`seZeZRS((RFRGRRz(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRstTimecB`s eZdefdefgZRS(uutc_timeu general_time(RFRGR&RR(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRs tValiditycB`s eZdefdefgZRS(u not_beforeu not_after(RFRGRRx(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR s tBasicConstraintscB`s4eZdeied6fdeied6fgZRS(ucaudefaultupath_len_constraintuoptional(RFRGRR4RRRRx(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR stAuthorityKeyIdentifiercB`s\eZdeidd6ed6fdeidd6ed6fdeidd6ed6fgZRS(ukey_identifieriuimplicituoptionaluauthority_cert_issueriuauthority_cert_serial_numberi(RFRGRRRRRRx(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR stDistributionPointNamecB`s4eZdeidd6fdeidd6fgZRS(u full_nameiuimplicituname_relative_to_crl_issueri(RFRGRRR(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR st ReasonFlagscB`sMeZi dd6dd6dd6dd6dd 6d d 6d d 6dd6dd6ZRS(uunusediukey_compromiseiu ca_compromiseiuaffiliation_changediu supersedediucessation_of_operationiucertificate_holdiuprivilege_withdrawniu aa_compromisei(RFRGR|(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR stGeneralSubtreecB`sKeZdefdeidd6dd6fdeidd6ed6fgZRS(ubaseuminimumiuimplicitudefaultumaximumiuoptional(RFRGRRRRRx(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRs tGeneralSubtreescB`seZeZRS((RFRGRRz(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRstNameConstraintscB`sBeZdeidd6ed6fdeidd6ed6fgZRS(upermitted_subtreesiuimplicituoptionaluexcluded_subtreesi(RFRGRRRRx(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRstDistributionPointcB`sqeZdeidd6ed6fdeidd6ed6fdeidd6ed6fgZeZe d Z RS( udistribution_pointiuexplicituoptionalureasonsiuimplicitu crl_issuericC`s|jtkrd |_|d}|jdkrFttdnxQ|jD]C}|jdkrP|j}|jj d r||_PqqPqPWn|jS( u_ :return: None or a unicode string of the distribution point's URL udistribution_pointu full_nameu CRL distribution points that are relative to the issuer are not supported uuniform_resource_identifieruhttp://uhttps://uldap://uldaps://N(uhttp://uhttps://uldap://uldaps://( t_urlR4R@RR[RRRJR6R;(R0Rt general_nameturl((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRs    ( RFRGR RRR RRxR4RRXR(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRs  tCRLDistributionPointscB`seZeZRS((RFRGRRz(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRst DisplayTextcB`s2eZdefdefdefdefgZRS(u ia5_stringuvisible_stringu bmp_stringu utf8_string(RFRGRR(RR'R(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRs   t NoticeNumberscB`seZeZRS((RFRGRRz(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRstNoticeReferencecB`s eZdefdefgZRS(u organizationunotice_numbers(RFRGRRRx(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRs t UserNoticecB`s4eZdeied6fdeied6fgZRS(u notice_refuoptionalu explicit_text(RFRGRRRRRx(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRstPolicyQualifierIdcB`seZidd6dd6ZRS(u certification_practice_statementu1.3.6.1.5.5.7.2.1u user_noticeu1.3.6.1.5.5.7.2.2(RFRGR|(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR stPolicyQualifierInfocB`s:eZdefdefgZdZied6ed6ZRS(upolicy_qualifier_idu qualifieru certification_practice_statementu user_notice(upolicy_qualifier_idu qualifier( RFRGRRRxRRRR(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR's  tPolicyQualifierInfoscB`seZeZRS((RFRGRRz(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR4stPolicyIdentifiercB`seZidd6ZRS(u any_policyu 2.5.29.32.0(RFRGR|(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR8stPolicyInformationcB`s*eZdefdeied6fgZRS(upolicy_identifierupolicy_qualifiersuoptional(RFRGRRRRRx(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR>s tCertificatePoliciescB`seZeZRS((RFRGRRz(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyREst PolicyMappingcB`s eZdefdefgZRS(uissuer_domain_policyusubject_domain_policy(RFRGRRx(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR Is tPolicyMappingscB`seZeZRS((RFRGR Rz(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR!PstPolicyConstraintscB`sBeZdeidd6ed6fdeidd6ed6fgZRS(urequire_explicit_policyiuimplicituoptionaluinhibit_policy_mappingi(RFRGRRRRx(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR"Tst KeyPurposeIdcB`s)eZiMdd6dd6dd6dd6dd 6d d 6d d 6dd6dd6dd6dd6dd6dd6dd6dd6dd6d d!6d"d#6d$d%6d&d'6d(d)6d*d+6d,d-6d.d/6d0d16d2d36d4d56d6d76d8d96d:d;6d<d=6d>d?6d@dA6dBdC6dDdE6dFdG6dHdI6dJdK6dLdM6dNdO6dPdQ6dRdS6dTdU6dVdW6dXdY6dZd[6d\d]6d^d_6d`da6dbdc6ddde6dfdg6dhdi6djdk6dldm6dndo6dpdq6drds6dtdu6dvdw6dxdy6dzd{6d|d}6d~d6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6ZRS(uany_extended_key_usageu 2.5.29.37.0u server_authu1.3.6.1.5.5.7.3.1u client_authu1.3.6.1.5.5.7.3.2u code_signingu1.3.6.1.5.5.7.3.3uemail_protectionu1.3.6.1.5.5.7.3.4uipsec_end_systemu1.3.6.1.5.5.7.3.5u ipsec_tunnelu1.3.6.1.5.5.7.3.6u ipsec_useru1.3.6.1.5.5.7.3.7u time_stampingu1.3.6.1.5.5.7.3.8u ocsp_signingu1.3.6.1.5.5.7.3.9udvcsu1.3.6.1.5.5.7.3.10u eap_over_pppu1.3.6.1.5.5.7.3.13u eap_over_lanu1.3.6.1.5.5.7.3.14u scvp_serveru1.3.6.1.5.5.7.3.15u scvp_clientu1.3.6.1.5.5.7.3.16u ipsec_ikeu1.3.6.1.5.5.7.3.17u capwap_acu1.3.6.1.5.5.7.3.18u capwap_wtpu1.3.6.1.5.5.7.3.19u sip_domainu1.3.6.1.5.5.7.3.20usecure_shell_clientu1.3.6.1.5.5.7.3.21usecure_shell_serveru1.3.6.1.5.5.7.3.22u send_routeru1.3.6.1.5.5.7.3.23usend_proxied_routeru1.3.6.1.5.5.7.3.24u send_owneru1.3.6.1.5.5.7.3.25usend_proxied_owneru1.3.6.1.5.5.7.3.26ucmc_cau1.3.6.1.5.5.7.3.27ucmc_rau1.3.6.1.5.5.7.3.28u cmc_archiveu1.3.6.1.5.5.7.3.29ubgpspec_routeru1.3.6.1.5.5.7.3.30umicrosoft_trust_list_signingu1.3.6.1.4.1.311.10.3.1umicrosoft_time_stamp_signingu1.3.6.1.4.1.311.10.3.2umicrosoft_server_gatedu1.3.6.1.4.1.311.10.3.3umicrosoft_serializedu1.3.6.1.4.1.311.10.3.3.1u microsoft_efsu1.3.6.1.4.1.311.10.3.4umicrosoft_efs_recoveryu1.3.6.1.4.1.311.10.3.4.1umicrosoft_whqlu1.3.6.1.4.1.311.10.3.5u microsoft_nt5u1.3.6.1.4.1.311.10.3.6umicrosoft_oem_whqlu1.3.6.1.4.1.311.10.3.7umicrosoft_embedded_ntu1.3.6.1.4.1.311.10.3.8umicrosoft_root_list_signeru1.3.6.1.4.1.311.10.3.9u!microsoft_qualified_subordinationu1.3.6.1.4.1.311.10.3.10umicrosoft_key_recoveryu1.3.6.1.4.1.311.10.3.11umicrosoft_document_signingu1.3.6.1.4.1.311.10.3.12umicrosoft_lifetime_signingu1.3.6.1.4.1.311.10.3.13u microsoft_mobile_device_softwareu1.3.6.1.4.1.311.10.3.14uapple_x509_basicu1.2.840.113635.100.1.2u apple_sslu1.2.840.113635.100.1.3uapple_local_cert_genu1.2.840.113635.100.1.4u apple_csr_genu1.2.840.113635.100.1.5uapple_revocation_crlu1.2.840.113635.100.1.6uapple_revocation_ocspu1.2.840.113635.100.1.7u apple_smimeu1.2.840.113635.100.1.8u apple_eapu1.2.840.113635.100.1.9uapple_software_update_signingu1.2.840.113635.100.1.10u apple_ipsecu1.2.840.113635.100.1.11u apple_ichatu1.2.840.113635.100.1.12uapple_resource_signingu1.2.840.113635.100.1.13uapple_pkinit_clientu1.2.840.113635.100.1.14uapple_pkinit_serveru1.2.840.113635.100.1.15uapple_code_signingu1.2.840.113635.100.1.16uapple_package_signingu1.2.840.113635.100.1.17uapple_id_validationu1.2.840.113635.100.1.18uapple_time_stampingu1.2.840.113635.100.1.20uapple_revocationu1.2.840.113635.100.1.21uapple_passbook_signingu1.2.840.113635.100.1.22uapple_mobile_storeu1.2.840.113635.100.1.23uapple_escrow_serviceu1.2.840.113635.100.1.24uapple_profile_signeru1.2.840.113635.100.1.25uapple_qa_profile_signeru1.2.840.113635.100.1.26uapple_test_mobile_storeu1.2.840.113635.100.1.27uapple_otapki_signeru1.2.840.113635.100.1.28uapple_test_otapki_signeru1.2.840.113635.100.1.29u)apple_id_validation_record_signing_policyu1.2.840.113625.100.1.30uapple_smp_encryptionu1.2.840.113625.100.1.31uapple_test_smp_encryptionu1.2.840.113625.100.1.32uapple_server_authenticationu1.2.840.113635.100.1.33uapple_pcs_escrow_serviceu1.2.840.113635.100.1.34(RFRGR|(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR#[stExtKeyUsageSyntaxcB`seZeZRS((RFRGR#Rz(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR$st AccessMethodcB`s*eZidd6dd6dd6dd6ZRS(uocspu1.3.6.1.5.5.7.48.1u ca_issuersu1.3.6.1.5.5.7.48.2u time_stampingu1.3.6.1.5.5.7.48.3u ca_repositoryu1.3.6.1.5.5.7.48.5(RFRGR|(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR%s tAccessDescriptioncB`s eZdefdefgZRS(u access_methoduaccess_location(RFRGR%RRx(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR&s tAuthorityInfoAccessSyntaxcB`seZeZRS((RFRGR&Rz(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR'stSubjectInfoAccessSyntaxcB`seZeZRS((RFRGR&Rz(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR(stFeaturescB`seZeZRS((RFRGRRz(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR)stEntrustVersionInfocB`s eZdefdefgZRS(u entrust_versuentrust_info_flags(RFRGRRRx(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR*s tNetscapeCertificateTypecB`sFeZidd6dd6dd6dd6dd 6d d 6d d 6dd6ZRS(u ssl_clientiu ssl_serveriuemailiuobject_signingiureservediussl_caiuemail_caiuobject_signing_cai(RFRGR|(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR+st ExtensionIdcB`seZidd6dd6dd6dd6dd 6d d 6d d 6dd6dd6dd6dd6dd6dd6dd6dd6dd6d d!6d"d#6d$d%6d&d'6d(d)6d*d+6d,d-6ZRS(.usubject_directory_attributesu2.5.29.9ukey_identifieru 2.5.29.14u key_usageu 2.5.29.15uprivate_key_usage_periodu 2.5.29.16usubject_alt_nameu 2.5.29.17uissuer_alt_nameu 2.5.29.18ubasic_constraintsu 2.5.29.19uname_constraintsu 2.5.29.30ucrl_distribution_pointsu 2.5.29.31ucertificate_policiesu 2.5.29.32upolicy_mappingsu 2.5.29.33uauthority_key_identifieru 2.5.29.35upolicy_constraintsu 2.5.29.36uextended_key_usageu 2.5.29.37u freshest_crlu 2.5.29.46uinhibit_any_policyu 2.5.29.54uauthority_information_accessu1.3.6.1.5.5.7.1.1usubject_information_accessu1.3.6.1.5.5.7.1.11u tls_featureu1.3.6.1.5.5.7.1.24u ocsp_no_checku1.3.6.1.5.5.7.48.1.5uentrust_version_extensionu1.2.840.113533.7.65.0unetscape_certificate_typeu2.16.840.1.113730.1.1u!signed_certificate_timestamp_listu1.3.6.1.4.1.11129.2.4.2(RFRGR|(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR,s0t ExtensioncB`seZdefdeied6fdefgZdZied6e d6e d6e d6e d6e d 6e d 6ed 6ed 6ed 6ed6ed6ed6ed6ed6ed6ed6ed6ed6ed6ed6ed6e d6ZRS(uextn_iducriticaludefaultu extn_valueusubject_directory_attributesukey_identifieru key_usageuprivate_key_usage_periodusubject_alt_nameuissuer_alt_nameubasic_constraintsuname_constraintsucrl_distribution_pointsucertificate_policiesupolicy_mappingsuauthority_key_identifierupolicy_constraintsuextended_key_usageu freshest_crluinhibit_any_policyuauthority_information_accessusubject_information_accessu tls_featureu ocsp_no_checkuentrust_version_extensionunetscape_certificate_typeu!signed_certificate_timestamp_list(uextn_idu extn_value(RFRGR,RR4RRxRRyRR{R}RR RRRR!R R"R$RR'R(R)RR*R+R(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR-s8 t ExtensionscB`seZeZRS((RFRGR-Rz(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR.3stVersioncB`s#eZidd6dd6dd6ZRS(uv1iuv2iuv3i(RFRGR|(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR/7stTbsCertificatecB`seZdeidd6dd6fdefdefdefdefd efd efd eid d 6e d6fdeidd 6e d6fde idd6e d6fg Z RS(uversioniuexplicituv1udefaultu serial_numberu signatureuissueruvalidityusubjectusubject_public_key_infouissuer_unique_idiuimplicituoptionalusubject_unique_idiu extensionsi( RFRGR/RRRR R*RRRR.Rx(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR0?s      t CertificatecB`seZdefdefdefgZeZd4Z d4Z d4Z d4Z d4Z d4Zd4Zd4Zd4Zd4Zd4Zd4Zd4Zd4Zd4Zd4Zd4Zd4Zd4Zd4Zd4ZeZd4Zd4Z d4Z!d4Z"d4Z#d4Z$d4Z%d4Z&dZ'e(dZ)e(dZ*e(dZ+e(dZ,e(dZ-e(d Z.e(d Z/e(d Z0e(d Z1e(d Z2e(dZ3e(dZ4e(dZ5e(dZ6e(dZ7e(dZ8e(dZ9e(dZ:e(dZ;e(dZ<e(dZ=e(dZ>e(dZ?e(dZ@e(dZAe(dZBe(dZCe(dZDe(d ZEe(d!ZFe(d"ZGe(d#ZHe(d$ZId%ZJe(d&ZKe(d'ZLe(d(ZMe(d)ZNe(d*ZOe(d+ZPe(d,ZQe(d-ZRe(d.ZSe(d/ZTe(d0ZUd1ZVd2ZWd3ZXRS(5utbs_certificateusignature_algorithmusignature_valuecC`st|_xv|ddD]f}|dj}d|}t||rat|||djn|djr|jj|qqWt|_dS(uv Sets common named extensions to private attributes and creates a list of critical extensions utbs_certificateu extensionsuextn_idu _%s_valueu extn_valueucriticalN( REt_critical_extensionsRJthasattrtsetattrtparsedtaddRRt_processed_extensions(R0t extensionRR((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyt_set_extensionsus    cC`s|js|jn|jS(u Returns a set of the names (or OID if not a known extension) of the extensions marked as critical :return: A set of unicode strings (R7R9R2(R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pytcritical_extensionss  cC`s|js|jn|jS(u This extension is used to contain additional identification attributes about the subject. :return: None or an Attributes object (R7R9t_key_identifier_value(R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyt"subject_directory_attributes_values  cC`s|js|jn|jS(u This extension is used to help in creating certificate validation paths. It contains an identifier that should generally, but is not guaranteed to, be unique. :return: None or an OctetString object (R7R9R;(R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pytkey_identifier_values  cC`s|js|jn|jS(u This extension is used to define the purpose of the public key contained within the certificate. :return: None or a KeyUsage (R7R9t_key_usage_value(R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pytkey_usage_values  cC`s|js|jn|jS(uT This extension allows for additional names to be associate with the subject of the certificate. While it may contain a whole host of possible names, it is usually used to allow certificates to be used with multiple different domain names. :return: None or a GeneralNames object (R7R9t_subject_alt_name_value(R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pytsubject_alt_name_values  cC`s|js|jn|jS(u This extension allows associating one or more alternative names with the issuer of the certificate. :return: None or an x509.GeneralNames object (R7R9t_issuer_alt_name_value(R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pytissuer_alt_name_values  cC`s|js|jn|jS(u' This extension is used to determine if the subject of the certificate is a CA, and if so, what the maximum number of intermediate CA certs after this are, before an end-entity certificate is found. :return: None or a BasicConstraints object (R7R9t_basic_constraints_value(R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pytbasic_constraints_values  cC`s|js|jn|jS(u This extension is used in CA certificates, and is used to limit the possible names of certificates issued. :return: None or a NameConstraints object (R7R9t_name_constraints_value(R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pytname_constraints_values  cC`s|js|jn|jS(u This extension is used to help in locating the CRL for this certificate. :return: None or a CRLDistributionPoints object extension (R7R9t_crl_distribution_points_value(R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pytcrl_distribution_points_values  cC`s|js|jn|jS(u; This extension defines policies in CA certificates under which certificates may be issued. In end-entity certificates, the inclusion of a policy indicates the issuance of the certificate follows the policy. :return: None or a CertificatePolicies object (R7R9t_certificate_policies_value(R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pytcertificate_policies_value s  cC`s|js|jn|jS(u This extension allows mapping policy OIDs to other OIDs. This is used to allow different policies to be treated as equivalent in the process of validation. :return: None or a PolicyMappings object (R7R9t_policy_mappings_value(R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pytpolicy_mappings_values  cC`s|js|jn|jS(u This extension helps in identifying the public key with which to validate the authenticity of the certificate. :return: None or an AuthorityKeyIdentifier object (R7R9t_authority_key_identifier_value(R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pytauthority_key_identifier_value(s  cC`s|js|jn|jS(u This extension is used to control if policy mapping is allowed and when policies are required. :return: None or a PolicyConstraints object (R7R9t_policy_constraints_value(R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pytpolicy_constraints_value6s  cC`s|js|jn|jS(u This extension is used to help locate any available delta CRLs :return: None or an CRLDistributionPoints object (R7R9t_freshest_crl_value(R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pytfreshest_crl_valueDs  cC`s|js|jn|jS(u This extension is used to prevent mapping of the any policy to specific requirements :return: None or a Integer object (R7R9t_inhibit_any_policy_value(R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pytinhibit_any_policy_valueQs  cC`s|js|jn|jS(u This extension is used to define additional purposes for the public key beyond what is contained in the basic constraints. :return: None or an ExtKeyUsageSyntax object (R7R9t_extended_key_usage_value(R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pytextended_key_usage_value_s  cC`s|js|jn|jS(u This extension is used to locate the CA certificate used to sign this certificate, or the OCSP responder for this certificate. :return: None or an AuthorityInfoAccessSyntax object (R7R9t#_authority_information_access_value(R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyt"authority_information_access_valuems  cC`s|js|jn|jS(u This extension is used to access information about the subject of this certificate. :return: None or a SubjectInfoAccessSyntax object (R7R9t!_subject_information_access_value(R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyt subject_information_access_value{s  cC`s|js|jn|jS(u This extension is used to list the TLS features a server must respond with if a client initiates a request supporting them. :return: None or a Features object (R7R9t_tls_feature_value(R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyttls_feature_values  cC`s|js|jn|jS(u- This extension is used on certificates of OCSP responders, indicating that revocation information for the certificate should never need to be verified, thus preventing possible loops in path validation. :return: None or a Null object (if present) (R7R9t_ocsp_no_check_value(R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pytocsp_no_check_values  cC`s |djS(uE :return: A byte string of the signature usignature_value(RJ(R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyt signaturescC`s |djS(uj :return: A unicode string of "rsassa_pkcs1v15", "rsassa_pss", "dsa", "ecdsa" usignature_algorithm(tsignature_algo(R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRascC`s |djS(u :return: A unicode string of "md2", "md5", "sha1", "sha224", "sha256", "sha384", "sha512", "sha512_224", "sha512_256" usignature_algorithm(t hash_algo(R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRbscC`s |ddS(uT :return: The PublicKeyInfo object for this certificate utbs_certificateusubject_public_key_info((R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyt public_keyscC`s |ddS(uZ :return: The Name object for the subject of this certificate utbs_certificateusubject((R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pytsubjectscC`s |ddS(uY :return: The Name object for the issuer of this certificate utbs_certificateuissuer((R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pytissuerscC`s|ddjS(uT :return: An integer of the certificate's serial number utbs_certificateu serial_number(RJ(R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyt serial_numberscC`s|js dS|jjS(u :return: None or a byte string of the certificate's key identifier from the key identifier extension N(R=R@RJ(R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pytkey_identifiers cC`sB|jdkr;|jjdt|jjd|_n|jS(u :return: A byte string of the SHA-256 hash of the issuer concatenated with the ascii character ":", concatenated with the serial number as an ascii string t:uasciiN(t_issuer_serialR@ReRR RfR<(R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyt issuer_serials ,cC`s|js dS|jdjS(u :return: None or a byte string of the key_identifier from the authority key identifier extension ukey_identifierN(ROR@RJ(R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pytauthority_key_identifier s cC`s|jtkr|j}|r|djr|jddj}|j}|jdj}|jdt|jd|_qd|_n|jS(u; :return: None or a byte string of the SHA-256 hash of the isser from the authority key identifier extension concatenated with the ascii character ":", concatenated with the serial number from the authority key identifier extension as an ascii string uauthority_cert_issueriuauthority_cert_serial_numberRhuasciiN( t_authority_issuer_serialR4RORJRtuntagRR R<R@(R0takivRetauthority_serial((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pytauthority_issuer_serial s   & cC`s.|jdkr'|j|j|_n|jS(u Returns complete CRL URLs - does not include delta CRLs :return: A list of zero or more DistributionPoint objects N(t_crl_distribution_pointsR@t!_get_http_crl_distribution_pointsRI(R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pytcrl_distribution_points# s cC`s.|jdkr'|j|j|_n|jS(u Returns delta CRL URLs - does not include complete CRLs :return: A list of zero or more DistributionPoint objects N(t_delta_crl_distribution_pointsR@RrRS(R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pytdelta_crl_distribution_points0 s cC`sg}|dkrgSxr|D]j}|d}|tkr?qn|jdkrTqnx0|jD]%}|jdkr^|j|q^q^WqW|S(u? Fetches the DistributionPoint object for non-relative, HTTP CRLs referenced by the certificate :param crl_distribution_points: A CRLDistributionPoints object to grab the DistributionPoints from :return: A list of zero or more DistributionPoint objects udistribution_pointuname_relative_to_crl_issueruuniform_resource_identifierN(R@R)RRR(R0RsRtdistribution_pointtdistribution_point_nameR((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRr= s     cC`s|js gSg}xt|jD]i}|djdkr|d}|jdkrUqn|j}|jjd r|j|qqqW|S( ux :return: A list of zero or more unicode strings of the OCSP URLs for this cert u access_methoduocspuaccess_locationuuniform_resource_identifieruhttp://uhttps://uldap://uldaps://(uhttp://uhttps://uldap://uldaps://(RYRJRR6R;R(R0RtentrytlocationR((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyt ocsp_urls\ s   cC`s|jdkrg|_|jrox|jD]=}|jdkr+|j|jkr+|jj|jq+q+Wqtjd}xm|jj D]\}xS|D]K}|djdkr|dj}|j |r|jj|qqqWqWn|jS(u :return: A list of unicode strings of valid domain names for the certificate. Wildcard certificates will have a domain in the form: *.example.com udns_nameuE^(\*\.)?(?:[a-zA-Z0-9](?:[a-zA-Z0-9\-]*[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$utypeu common_nameuvalueN( t_valid_domainsR@RARRJRRtcompileRdRtmatch(R0RtpatternRtname_type_valueRC((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyt valid_domainsr s  !  !cC`sg|jdkr`g|_|jr`x9|jD]+}|jdkr+|jj|jq+q+Wq`n|jS(uj :return: A list of unicode strings of valid IP addresses for the certificate u ip_addressN(t _valid_ipsR@RARRRJ(R0R((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyt valid_ips s   cC`s|jo|jdjS(uW :return; A boolean - if the certificate is marked as a CA uca(RERJ(R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pytca scC`s|js dS|jdjS(uT :return; None or an integer of the maximum path length upath_len_constraintN(RR@RERJ(R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pytmax_path_length s cC`s.|jdkr'|j|jk|_n|jS(ux :return: A boolean - if the certificate is self-issued, as defined by RFC 5280 N(t _self_issuedR@RdRe(R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyt self_issued scC`sv|jdkrod|_|jro|jr`|js?d|_qi|j|jkrid|_qiqld|_qon|jS(u :return: A unicode string of "yes", "no" or "maybe". The "maybe" result will be returned if the certificate does not contain a key identifier extension, but is issued by the subject. In this case the certificate signature will need to be verified using the subject public key to determine a "yes" or "no" answer. unouyesumaybeN(t _self_signedR@RRgRk(R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyt self_signed s      cC`s7|jdkr0tj|jj|_n|jS(uk :return: The SHA-1 hash of the DER-encoded bytes of this complete certificate N(RR@RRRR(R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR s!cC`s djdt|jDS(u :return: A unicode string of the SHA-1 hash, formatted using hex encoding with a space between each pair of characters, all uppercase u cs`s|]}d|VqdS(u%02XN((Rtc((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pys s(RR R(R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pytsha1_fingerprint scC`s7|jdkr0tj|jj|_n|jS(uy :return: The SHA-256 hash of the DER-encoded bytes of this complete certificate N(RR@RRRR(R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR s!cC`s djdt|jDS(u :return: A unicode string of the SHA-256 hash, formatted using hex encoding with a space between each pair of characters, all uppercase u cs`s|]}d|VqdS(u%02XN((RR((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pys  s(RR R(R0((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pytsha256_fingerprint scC`st|ts-ttdt|n|jdjdj}|jddk}| ovt j d|}| o| }|rG|j st S|j d}x|j D]}|jdjdj}|j d} t| t|krqn| |krtS|j|} | r|j|| rtSqWt S|jsTt S|rctjntj} t| |} xW|jD]L} | jddkrtjntj}t|| }|| krtSqWt S(u Check if a domain name or IP address is valid according to the certificate :param domain_ip: A unicode string of a domain name or IP address :return: A boolean - if the domain or IP is valid for the certificate uL domain_ip must be a unicode string, not %s uidnauasciiu:iu^\d+\.\d+\.\d+\.\d+$u.(R3R R:RR R<RUR6RPRR}RR4R`ReRRt_is_wildcard_domaint_is_wildcard_matchRRbRdRcR.(R0t domain_iptencoded_domain_iptis_ipv6tis_ipv4t is_domaint domain_labelst valid_domaintencoded_valid_domaintvalid_domain_labelst is_wildcardRlt normalized_iptvalid_ipt valid_familytnormalized_valid_ip((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pytis_valid_domain_ip sB    ' cC`st|jddkrtS|jjd}|s8tS|djddkrUtS|ddd!dkrptStS(uf Checks if a domain is a valid wildcard according to https://tools.ietf.org/html/rfc6125#section-6.4.3 :param domain: A unicode string of the domain name, where any U-labels from an IDN have been converted to A-labels :return: A boolean - if the domain is a valid wildcard domain u*iu.iiiuxn--(tcountR4R6R`RPRR(R0tdomaintlabels((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRJ scC`s|d}|d}|d}|d}||kr8tS|dkrHtStjd|jddd}|j|r~tStS(u Determines if the labels in a domain are a match for labels from a wildcard valid domain name :param domain_labels: A list of unicode strings, with A-label form for IDNs, of the labels in the domain name to check :param valid_domain_labels: A list of unicode strings, with A-label form for IDNs, of the labels in a wildcard domain pattern :return: A boolean - if the domain matches the valid domain iiu*u^u.*u$(R4RRRR|RR}(R0RRtfirst_domain_labeltother_domain_labelstwildcard_labeltother_valid_domain_labelstwildcard_regex((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyRk s      #N(YRFRGR0RRRxR4R7R@R2t_subject_directory_attributesR;R>R@RBRDRFRHRJRLRNRPRRRTRVRXRZR\R^RiRlRqRtR{RRRRRR9RXR:R<R=R?RARCRERGRIRKRMRORQRSRURWRYR[R]R_R`RaRbRcRdReRfRgRjRkRpRsRuRrRzRRRRRRRRRRRRR(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR1Ns                #       B !tKeyPurposeIdentifierscB`seZeZRS((RFRGR#Rz(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR stSequenceOfAlgorithmIdentifierscB`seZeZRS((RFRGR Rz(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR stCertificateAuxc B`s{eZdeied6fdeidd6ed6fdeied6fdeied6fdeidd6ed6fgZRS( utrustuoptionalurejectiuimplicitualiasukeyiduotheri(RFRGRRRR'RRRx(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR s tTrustedCertificatecB`seZeegZRS((RFRGR1Rt _child_specs(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyR s(Rt __future__RRRRt contextlibRt encodingsRRRRbRRRt_errorsRt_iriRRt _ordereddictR t_typesR R R talgosR RtcoreRRRRRRRRRRRRRRRRRR R!R"R#R$R%R&R'R(R)RR*tutilR+R,R-R.R/RIRLRZRwRyR{R}R~RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR R R R R RRRRRRRRRRRRRRRR R!R"R#R$R%R&R'R(R)R*R+R,R-R.R/R0R1RRRR(((s3/tmp/pip-build-wDUJoH/asn1crypto/asn1crypto/x509.pyts"      "59l  }U*      "2%  b  #J