U vf9@sUddlmZddlZddlZddlZddlZddlZddlmZddl m Z ddl m Z mZGdddejZdd eDZe jeje jeje jeje jeje jeje jejiZd ed <ejeefZejeefZe j d e j!d e j"de j#de j$de jde j%de jde j&di Z'ded<dd e'(DZ)e jde jde j diZ*dddddZ+ddddd Z,Gd!d"d"Z-Gd#d$d$Z.Gd%d&d&Z/Gd'd(d(Z0dS))) annotationsN)utils)x509)NameOIDObjectIdentifierc@s<eZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd S) _ASN1Type N)__name__ __module__ __qualname__ BitStringZ OctetString UTF8StringZ NumericStringPrintableStringZ T61String IA5StringZUTCTimeZGeneralizedTimeZ VisibleStringZUniversalStringZ BMPStringrrI/opt/alt/python38/lib64/python3.8/site-packages/cryptography/x509/name.pyrsrcCsi|] }|j|qSr)value.0irrr !sr!z!dict[ObjectIdentifier, _ASN1Type]_NAMEOID_DEFAULT_TYPEZCNLZSTOZOUCZSTREETZDCUID _OidNameMap_NAMEOID_TO_NAMEcCsi|]\}}||qSrr)rkvrrrr!<s)r+)@ str | bytesstr)valreturncCs|sdSt|tr&dt|dS|dd}|dd}|dd }|d d }|d d }|dd}|dd}|dd}|ddkrd|}|ddkr|ddd}|S)z>Escape special characters in RFC4514 Distinguished Name value.#utf8\z\\"z\"+z\+,z\,;z\;z\>z\00r)r3 r=Nz\ ) isinstancebytesbinasciihexlifydecodereplace)r0rrr_escape_dn_valueEs"           rEcCs|sdSdd}tj||S)Nr2cSs(|d}t|dkr|Stt|dS)Nr,)grouplenchrint)mr0rrrsubjs  z_unescape_dn_value..sub)_RFC4514NameParser_PAIR_RErL)r0rLrrr_unescape_dn_valuebsrOc@seZdZd!dddddddd d d Zedd d dZedd ddZedd ddZd"dddddZdddddZ dd ddZ dd dd Z dS)# NameAttributeNT) _validaterr.z_ASN1Type | NoneboolNone)oidr_typerQr1c Cst|tstd|tjkrB|tjkr.tdt|tsTtdnt|tsTtdt |}|dk r|\}}t|ts|t t | d}||ks||krd|d|d|} |d krt| ntj| d d |dkrt |tj}t|tstd ||_||_||_dS) Nz2oid argument must be an ObjectIdentifier instance.z6oid must be X500_UNIQUE_IDENTIFIER for BitString type.z!value must be bytes for BitStringzvalue argument must be a strr4zAttribute's length must be >= z and <= z , but it was Tr+) stacklevelz%_type must be from the _ASN1Type enum)r?r TypeErrorrrrZX500_UNIQUE_IDENTIFIERr@r/_NAMEOID_LENGTH_LIMITgetAssertionErrorrHencode ValueErrorwarningswarnr"r_oid_valuerU) selfrTrrUrQZ length_limitsZ min_length max_lengthZc_lenmsgrrr__init__vs>         zNameAttribute.__init__r1cCs|jSN)r_rarrrrTszNameAttribute.oidcCs|jSrf)r`rgrrrrszNameAttribute.valuer/cCst|j|jjS)zt The short attribute name (for example "CN") if available, otherwise the OID dotted string. )r(rYrTZ dotted_stringrgrrrrfc4514_attribute_namesz$NameAttribute.rfc4514_attribute_name_OidNameMap | Noneattr_name_overridesr1cCs6|r||jnd}|dkr"|j}|dt|jS)z Format as RFC4514 Distinguished Name string. Use short attribute name if available, otherwise fall back to OID dotted string. N=)rYrTrhrEr)rark attr_namerrrrfc4514_strings zNameAttribute.rfc4514_stringobjectotherr1cCs&t|tstS|j|jko$|j|jkSrf)r?rPNotImplementedrTrrarqrrr__eq__s zNameAttribute.__eq__rJcCst|j|jfSrf)hashrTrrgrrr__hash__szNameAttribute.__hash__cCsd|jd|jdS)Nz)rTrrgrrr__repr__szNameAttribute.__repr__)N)N) rrrrdpropertyrTrrhrnrtrvrxrrrrrPus6rPc@seZdZddddZddddd Zd d d d ddZdddddZddddZddddZddddZ d dddZ d S)!RelativeDistinguishedNametyping.Iterable[NameAttribute]) attributescCs\t|}|stdtdd|Ds.td||_t||_t|jt|krXtddS)Nz-a relative distinguished name cannot be emptycss|]}t|tVqdSrfr?rPrxrrr sz5RelativeDistinguishedName.__init__..z/attributes must be an iterable of NameAttributez$duplicate attributes are not allowed)listr\allrW _attributes frozenset_attribute_setrHrar|rrrrds z"RelativeDistinguishedName.__init__rlist[NameAttribute]rTr1csfdd|DS)Ncsg|]}|jkr|qSrrTrrrr s zDRelativeDistinguishedName.get_attributes_for_oid..rrarTrrrget_attributes_for_oidsz0RelativeDistinguishedName.get_attributes_for_oidNrir/rjcsdfdd|jDS)z Format as RFC4514 Distinguished Name string. Within each RDN, attributes are joined by '+', although that is rarely used in certificates. r7c3s|]}|VqdSrfrnrattrrkrrrsz;RelativeDistinguishedName.rfc4514_string..joinrrarkrrrrns z(RelativeDistinguishedName.rfc4514_stringrorRrpcCst|tstS|j|jkSrf)r?rzrrrrsrrrrts z RelativeDistinguishedName.__eq__rJrecCs t|jSrf)rurrgrrrrvsz"RelativeDistinguishedName.__hash__typing.Iterator[NameAttribute]cCs t|jSrf)iterrrgrrr__iter__sz"RelativeDistinguishedName.__iter__cCs t|jSrf)rHrrgrrr__len__sz!RelativeDistinguishedName.__len__cCsd|dS)Nz.cSsg|]}ttt|gqSr)rztypingcastrPr~rrrrsz!Name.__init__..css|]}t|tVqdSrf)r?rzr~rrrr"szNattributes must be a list of NameAttribute or a list RelativeDistinguishedName)rrrrrListrzrWrrrrrds Nr/z_NameOidMap | Nonedatarkr1cCst||p iSrf)rMparse)clsrrkrrrfrom_rfc4514_string,szName.from_rfc4514_stringrirjcsdfddt|jDS)a Format as RFC4514 Distinguished Name string. For example 'CN=foobar.com,O=Foo Corp,C=US' An X.509 name is a two-level structure: a list of sets of attributes. Each list element is separated by ',' and within each list element, set elements are separated by '+'. The latter is almost never used in real world certificates. According to RFC4514 section 2.1 the RDNSequence must be reversed when converting to string representation. r8c3s|]}|VqdSrfrrrrrrAsz&Name.rfc4514_string..)rreversedrrrrrrn4s zName.rfc4514_stringrrrcsfdd|DS)Ncsg|]}|jkr|qSrrrrrrrIs z/Name.get_attributes_for_oid..rrrrrrFszName.get_attributes_for_oidzlist[RelativeDistinguishedName]recCs|jSrfrrgrrrrdnsKsz Name.rdnsz typing.Anyr@)backendr1cCs t|Srf) rust_x509Zencode_name_bytes)rarrrr public_bytesOszName.public_bytesrorRrpcCst|tstS|j|jkSrf)r?rrrrrsrrrrtRs z Name.__eq__rJcCstt|jSrf)rutuplerrgrrrrvXsz Name.__hash__rccs|jD]}|EdHqdSrfr)rardnrrrr]s z Name.__iter__cCstdd|jDS)Ncss|]}t|VqdSrf)rH)rrrrrrbszName.__len__..)sumrrgrrrrasz Name.__len__cCs"ddd|jD}d|dS)Nr8css|]}|VqdSrfrrrrrresz Name.__repr__..z]|[\da-zA-Z]{2})z7[\x01-\x1f\x21\x24-\x2A\x2D-\x3A\x3D\x3F-\x5B\x5D-\x7F]z3[\x01-\x21\x23-\x2A\x2D-\x3A\x3D\x3F-\x5B\x5D-\x7F]z7[\x01-\x1F\x21\x23-\x2A\x2D-\x3A\x3D\x3F-\x5B\x5D-\x7F]z[\x80-]|z ( (z!) ( (z)* (z$) )? )? z#([\da-zA-Z]{2})+r/ _NameOidMaprSrcCs||_d|_||_dS)Nr)_data_idx_attr_name_overrides)rarrkrrrrdsz_RFC4514NameParser.__init__rRrecCs|jt|jkSrf)rrHrrgrrr _has_datasz_RFC4514NameParser._has_dataz str | NonecCs|r|j|jSdSrf)rrrrgrrr_peeks z_RFC4514NameParser._peek)chr1cCs"||krt|jd7_dS)Nr,)rr\r)rarrrr _read_chars z_RFC4514NameParser._read_charcCs<|j|j|jd}|dkrt|}|jt|7_|S)N)pos)matchrrr\rGrH)rapatrr0rrr_read_res z_RFC4514NameParser._read_rercCsH|stgS|g}|r<|d||qtt|S)a' Parses the `data` string and converts it to a Name. According to RFC4514 section 2.1 the RDNSequence must be reversed when converting to string representation. So, when we parse it, we need to reverse again to get the RDNs on the correct order. r8)rr _parse_rdnrappendrrrrrrs   z_RFC4514NameParser.parserzcCs8|g}|dkr0|d||q t|S)Nr7) _parse_narrrrz)raZnasrrrrs    z_RFC4514NameParser._parse_rdnrPc Csz||j}Wn@tk rP||j}|j|t|}|dkrLtYn Xt|}|d| dkr||j }t |dd }n||j}t|}t||S)Nrlr3r,)r_OID_REr\ _DESCR_RErrY_NAME_TO_NAMEOIDrrr _HEXSTRING_RErA unhexlifyrC _STRING_RErOrP)raZ oid_valuenamerTrZ raw_valuerrrrs$      z_RFC4514NameParser._parse_naN)rrrrecompilerrZ_PAIRrNZ_LUTF1Z_SUTF1Z_TUTF1rIsys maxunicodeZ_UTFMBZ _LEADCHARZ _STRINGCHARZ _TRAILCHARVERBOSErrrdrrrrrrrrrrrrMisH     rM)1 __future__rrArrrr]Z cryptographyrZ"cryptography.hazmat.bindings._rustrrZcryptography.x509.oidrrEnumrZ_ASN1_TYPE_TO_ENUMZ COUNTRY_NAMErZJURISDICTION_COUNTRY_NAMEZ SERIAL_NUMBERZ DN_QUALIFIERZ EMAIL_ADDRESSrZDOMAIN_COMPONENTr"__annotations__Mappingr/r'rZ COMMON_NAMEZ LOCALITY_NAMEZSTATE_OR_PROVINCE_NAMEZORGANIZATION_NAMEZORGANIZATIONAL_UNIT_NAMEZSTREET_ADDRESSZUSER_IDr(itemsrrXrErOrPrzrrMrrrrsv     e5Z