o
    �)%aþ}  ã                   @   s²  d dl Z d dlZd dlmZ d dlmZmZmZmZ d dl	m
Z
 d dlmZ d dlmZmZmZmZ dd„ Zd	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZG dd„ deƒZdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Z d#d$„ Z!d%d&„ Z"d'd(„ Z#d)d*„ Z$d+d,„ Z%d-d.„ Z&d/d0„ Z'd1d2„ Z(d3d4„ Z)d5d6„ Z*d7d8„ Z+d9d:„ Z,d Z-d;Z.d<d=„ Z/ej0j1ej0j2ej0j3ej0j4ej0j5ej0j6ej0j7ej0j8d>œZ9d?d@„ Z:dAdB„ Z;dCdD„ Z<dEdF„ Z=dGdH„ Z>dIdJ„ Z?dKdL„ Z@dMdN„ ZAej0jBej0j1ej0j2ej0j3ej0j4ej0j5ej0j6ej0jCej0j7ej0j8dOœ
ZDej0jBd ej0j1d;ej0j2dPej0j3dQej0j4dRej0j5dSej0j6dTej0jCdUej0j7dVej0j8dWi
ZEdXdY„ ZFdZd[„ ZGd\d]„ ZHd^d_„ ZId`da„ ZJdbdc„ ZKddde„ ZLdfdg„ ZMdheNfdidj„ZOdkdl„ ZPdmdn„ ZQdodp„ ZRi ejSe“ejTe“ejUe$“ejVe&“ejWe,“ejXe “ejYe"“ejZe#“ej[e“ej\e<“ej]e=“ej^e“ej_e>“ej`e'“ejae(“ejbe+“Zcejde@iZeejfeFejgeGejheHiZiejjeejkeejXe ej`e'ejYe"ejle*ej]e=iZmejneRiZoejneRiZpejqeAiZrdS )qé    N)Úx509)Ú	DERReaderÚINTEGERÚNULLÚSEQUENCE©Ú_TLS_FEATURE_TYPE_TO_ENUM)Ú_ASN1_TYPE_TO_ENUM)ÚCRLEntryExtensionOIDÚCertificatePoliciesOIDÚExtensionOIDÚOCSPExtensionOIDc                 C   s€   d}| j  d|¡}| j |||d¡}||d kr,|d }| j  d|¡}| j |||d¡}|  |dk¡ | j  ||¡d d …  ¡ S )NéP   zchar[]é   r   )Ú_ffiÚnewÚ_libÚOBJ_obj2txtÚopenssl_assertÚbufferÚdecode)ÚbackendÚobjÚbuf_lenÚbufÚres© r   úR/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/decode_asn1.pyÚ_obj2txt   s   	r   c                 C   sn   | j  |¡}|  || jjk¡ | j  |¡}|  || jjk¡ t| |ƒ}t| |ƒ}t|j	 }t
 t
 |¡||¡S ©N)r   ÚX509_NAME_ENTRY_get_objectr   r   r   ÚX509_NAME_ENTRY_get_dataÚ_asn1_string_to_utf8r   r	   Útyper   ÚNameAttributeÚObjectIdentifier)r   Úx509_name_entryr   ÚdataÚvalueÚoidr#   r   r   r   Ú_decode_x509_name_entry-   s   


r*   c           	      C   s‚   | j  |¡}g }d}t|ƒD ](}| j  ||¡}t| |ƒ}| j  |¡}||kr-| |h¡ n|d  |¡ |}qt 	dd„ |D ƒ¡S )Néÿÿÿÿc                 s   s   � | ]}t  |¡V  qd S r   )r   ÚRelativeDistinguishedName)Ú.0Úrdnr   r   r   Ú	<genexpr>H   s   € z$_decode_x509_name.<locals>.<genexpr>)
r   ÚX509_NAME_entry_countÚrangeÚX509_NAME_get_entryr*   ÚX509_NAME_ENTRY_setÚappendÚaddr   ÚName)	r   Ú	x509_nameÚcountÚ
attributesÚprev_set_idÚxÚentryÚ	attributeÚset_idr   r   r   Ú_decode_x509_name9   s   
r?   c                 C   sR   | j  |¡}g }t|ƒD ]}| j  ||¡}|  || jjk¡ | t| |ƒ¡ q|S r   )	r   Úsk_GENERAL_NAME_numr1   Úsk_GENERAL_NAME_valuer   r   r   r4   Ú_decode_general_name)r   ÚgnsÚnumÚnamesÚiÚgnr   r   r   Ú_decode_general_namesK   s   rH   c                 C   s  |j | jjkrt| |jjƒ d¡}tj 	|¡S |j | jj
kr.t| |jjƒ d¡}tj 	|¡S |j | jjkrDt| |jjƒ}t t |¡¡S |j | jjkr­t| |jjƒ}t|ƒ}|dks^|dkr£t |d |d … ¡}t ||d d … ¡}tt|ƒƒdd … }| d¡}|dkr‹t|ƒ}d||d … v r—tdƒ‚t |jd	 |¡ ¡}	nt |¡}	t |	¡S |j | jjkr¾t  t!| |jj"ƒ¡S |j | jj#krÕt| |jj$ƒ d¡}tj% 	|¡S |j | jj&krõt| |jj'j(ƒ}
t)| |jj'j*ƒ}t +t |
¡|¡S t ,d
 tj- .|j |j ¡¡|j ¡‚)NÚutf8é   é    é   Ú0r+   Ú1zInvalid netmaskz/{}z{} is not a supported type)/r#   r   ÚGEN_DNSÚ_asn1_string_to_bytesÚdÚdNSNamer   r   ÚDNSNameÚ_init_without_validationÚGEN_URIÚuniformResourceIdentifierÚUniformResourceIdentifierÚGEN_RIDr   ÚregisteredIDÚRegisteredIDr%   Ú	GEN_IPADDÚ	iPAddressÚlenÚ	ipaddressÚ
ip_addressÚbinÚintÚfindÚ
ValueErrorÚ
ip_networkÚexplodedÚformatÚ	IPAddressÚGEN_DIRNAMEÚDirectoryNamer?   ÚdirectoryNameÚ	GEN_EMAILÚ
rfc822NameÚ
RFC822NameÚGEN_OTHERNAMEÚ	otherNameÚtype_idÚ_asn1_to_derr(   Ú	OtherNameÚUnsupportedGeneralNameTypeÚ_GENERAL_NAMESÚget)r   rG   r'   r)   Údata_lenÚbaseÚnetmaskÚbitsÚprefixÚiprp   r(   r   r   r   rB   V   sZ   ÿþ


ÿÿürB   c                 C   s   t  ¡ S r   )r   ÚOCSPNoCheck©r   Úextr   r   r   Ú_decode_ocsp_no_check¤   s   r   c                 C   ó0   | j  d|¡}| j  || jj¡}t t| |ƒ¡S ©NzASN1_INTEGER *)r   ÚcastÚgcr   ÚASN1_INTEGER_freer   Ú	CRLNumberÚ_asn1_integer_to_int©r   r~   Úasn1_intr   r   r   Ú_decode_crl_number¨   ó   r‰   c                 C   r€   r�   )r   r‚   rƒ   r   r„   r   ÚDeltaCRLIndicatorr†   r‡   r   r   r   Ú_decode_delta_crl_indicator®   rŠ   rŒ   c                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú_X509ExtensionParserc                 C   s   || _ || _|| _|| _d S r   )Ú	ext_countÚget_extÚhandlersÚ_backend)Úselfr   rŽ   r�   r�   r   r   r   Ú__init__µ   s   
z_X509ExtensionParser.__init__c                 C   sb  g }t ƒ }t|  |¡ƒD �]}|  ||¡}| j || jjjk¡ | jj 	|¡}|dk}t
 t| j| jj |¡ƒ¡}||v rFt
 d |¡|¡‚|tjkr�| jj |¡}	t| j|	ƒ}
t|
ƒ t¡}g }| ¡ ss| | t¡ ¡ ¡ | ¡ ret
 dd„ |D ƒ¡}| t
 |||¡¡ | |¡ q|tjkrº| jj |¡}	tt| j|	ƒƒ}| t¡  ¡  | t
 ||t
 !¡ ¡¡ | |¡ qz| j"| }W n9 t#yú   | jj |¡}	| j |	| jjjk¡ | jj $|	j%|	j&¡d d … }t
 '||¡}| t
 |||¡¡ Y n,w | jj (|¡}|| jjjk�r| j )¡  t*d |¡ƒ‚|| j|ƒ}| t
 |||¡¡ | |¡ qt
 +|¡S )Nr   zDuplicate {} extension foundc                 S   s   g | ]}t | ‘qS r   r   )r-   r;   r   r   r   Ú
<listcomp>Û   s    z._X509ExtensionParser.parse.<locals>.<listcomp>z/The {} extension is invalid and can't be parsed),Úsetr1   rŽ   r�   r‘   r   r   r   r   ÚX509_EXTENSION_get_criticalr   r%   r   ÚX509_EXTENSION_get_objectÚDuplicateExtensionrf   r   ÚTLS_FEATUREÚX509_EXTENSION_get_datarP   r   Úread_single_elementr   Úis_emptyr4   Úread_elementr   Ú
as_integerÚ
TLSFeatureÚ	Extensionr5   ÚPRECERT_POISONÚcheck_emptyÚPrecertPoisonr�   ÚKeyErrorr   r'   ÚlengthÚUnrecognizedExtensionÚX509V3_EXT_d2iÚ_consume_errorsrc   Ú
Extensions)r’   Úx509_objÚ
extensionsÚ	seen_oidsrF   r~   ÚcritÚcriticalr)   r'   Ú
data_bytesÚfeaturesÚparsedr(   ÚreaderÚhandlerÚderÚunrecognizedÚext_datar   r   r   Úparse»   sx   þÿ
ÿ
ÿÿ

ÿ
ú
þ
z_X509ExtensionParser.parseN)Ú__name__Ú
__module__Ú__qualname__r“   r·   r   r   r   r   r�   ´   s    r�   c                 C   s2  | j  d|¡}| j  || jj¡}| j |¡}g }t|ƒD ]w}d }| j ||¡}t 	t
| |jƒ¡}|j| j jkrŠ| j |j¡}g }t|ƒD ]E}	| j |j|	¡}
t 	t
| |
jƒ¡}|tjkrv| j  |
jjj|
jjj¡d d …  d¡}| |¡ qD|tjks}J ‚t| |
jjƒ}| |¡ qD| t ||¡¡ qt |¡S )Nz"Cryptography_STACK_OF_POLICYINFO *Úascii)r   r‚   rƒ   r   ÚCERTIFICATEPOLICIES_freeÚsk_POLICYINFO_numr1   Úsk_POLICYINFO_valuer   r%   r   ÚpolicyidÚ
qualifiersr   Úsk_POLICYQUALINFO_numÚsk_POLICYQUALINFO_valueÚpqualidr   ÚCPS_QUALIFIERr   rQ   Úcpsurir'   r¥   r   r4   ÚCPS_USER_NOTICEÚ_decode_user_noticeÚ
usernoticeÚPolicyInformationÚCertificatePolicies)r   ÚcprD   Úcertificate_policiesrF   rÀ   Úpir)   ÚqnumÚjÚpqirÃ   rÅ   Úuser_noticer   r   r   Ú_decode_certificate_policies  s<   
ÿþþÿ
rÒ   c           
      C   sž   d }d }|j | jjkrt| |j ƒ}|j| jjkrIt| |jjƒ}| j |jj¡}g }t	|ƒD ]}| j 
|jj|¡}t| |ƒ}	| |	¡ q-t ||¡}t ||¡S r   )Úexptextr   r   r"   Ú	noticerefÚorganizationr   Úsk_ASN1_INTEGER_numÚ	noticenosr1   Úsk_ASN1_INTEGER_valuer†   r4   r   ÚNoticeReferenceÚ
UserNotice)
r   ÚunÚexplicit_textÚnotice_referencerÕ   rD   Únotice_numbersrF   rˆ   Ú
notice_numr   r   r   rÇ   &  s    ÿ
rÇ   c                 C   sB   | j  d|¡}| j  || jj¡}|jdk}t| |jƒ}t 	||¡S )NzBASIC_CONSTRAINTS *éÿ   )
r   r‚   rƒ   r   ÚBASIC_CONSTRAINTS_freeÚcaÚ_asn1_integer_to_int_or_noneÚpathlenr   ÚBasicConstraints)r   Úbc_stÚbasic_constraintsrâ   Úpath_lengthr   r   r   Ú_decode_basic_constraints>  s   ÿ
ÿré   c                 C   s@   | j  d|¡}| j  || jj¡}t | j  |j|j	¡d d … ¡S ©NzASN1_OCTET_STRING *)
r   r‚   rƒ   r   ÚASN1_OCTET_STRING_freer   ÚSubjectKeyIdentifierr   r'   r¥   ©r   Úasn1_stringr   r   r   Ú_decode_subject_key_identifierN  s   ÿÿrï   c                 C   sˆ   | j  d|¡}| j  || jj¡}d }d }|j| j jkr*| j  |jj|jj	¡d d … }|j
| j jkr7t| |j
ƒ}t| |jƒ}t |||¡S )NzAUTHORITY_KEYID *)r   r‚   rƒ   r   ÚAUTHORITY_KEYID_freeÚkeyidr   r   r'   r¥   ÚissuerrH   rã   Úserialr   ÚAuthorityKeyIdentifier)r   ÚakidÚkey_identifierÚauthority_cert_issuerÚauthority_cert_serial_numberr   r   r   Ú _decode_authority_key_identifierX  s$   ÿþÿÿrù   c                    s¬   ˆ j  d|¡}ˆ j  |‡ fdd„¡}ˆ j |¡}g }t|ƒD ]5}ˆ j ||¡}ˆ  |jˆ j j	k¡ t
 tˆ |jƒ¡}ˆ  |jˆ j j	k¡ tˆ |jƒ}| t
 ||¡¡ q|S )Nz*Cryptography_STACK_OF_ACCESS_DESCRIPTION *c                    s   ˆ j  | ˆ j ˆ j jd¡¡S )NÚACCESS_DESCRIPTION_free)r   Úsk_ACCESS_DESCRIPTION_pop_freer   Ú	addressofÚ_original_lib)r;   ©r   r   r   Ú<lambda>s  s    ÿþz,_decode_information_access.<locals>.<lambda>)r   r‚   rƒ   r   Úsk_ACCESS_DESCRIPTION_numr1   Úsk_ACCESS_DESCRIPTION_valuer   Úmethodr   r   r%   r   ÚlocationrB   r4   ÚAccessDescription)r   ÚiarD   Úaccess_descriptionsrF   Úadr)   rG   r   rþ   r   Ú_decode_information_accesso  s   
þ	r  c                 C   ó   t | |ƒ}t |¡S r   )r  r   ÚAuthorityInformationAccess©r   Úaiar  r   r   r   Ú$_decode_authority_information_access‡  ó   

r  c                 C   r	  r   )r  r   ÚSubjectInformationAccessr  r   r   r   Ú"_decode_subject_information_accessŒ  r  r  c                 C   sÀ   | j  d|¡}| j  || jj¡}| jj}||dƒdk}||dƒdk}||dƒdk}||dƒdk}||dƒdk}||dƒdk}||dƒdk}	||d	ƒdk}
||d
ƒdk}t |||||||	|
|¡	S )NzASN1_BIT_STRING *r   r   rL   é   é   é   é   é   rJ   )r   r‚   rƒ   r   ÚASN1_BIT_STRING_freeÚASN1_BIT_STRING_get_bitr   ÚKeyUsage)r   Ú
bit_stringÚget_bitÚdigital_signatureÚcontent_commitmentÚkey_enciphermentÚdata_enciphermentÚkey_agreementÚkey_cert_signÚcrl_signÚencipher_onlyÚdecipher_onlyr   r   r   Ú_decode_key_usage‘  s.   ÷r$  c                 C   s.   | j  d|¡}| j  || jj¡}t| |ƒ}|S ©NzGENERAL_NAMES *)r   r‚   rƒ   r   ÚGENERAL_NAMES_freerH   ©r   rC   Úgeneral_namesr   r   r   Ú_decode_general_names_extension«  s   
r)  c                 C   ó   t  t| |ƒ¡S r   )r   ÚSubjectAlternativeNamer)  r}   r   r   r   Ú_decode_subject_alt_name²  ó   ÿr,  c                 C   r*  r   )r   ÚIssuerAlternativeNamer)  r}   r   r   r   Ú_decode_issuer_alt_name¸  r-  r/  c                 C   sF   | j  d|¡}| j  || jj¡}t| |jƒ}t| |jƒ}tj	||d�S )NzNAME_CONSTRAINTS *)Úpermitted_subtreesÚexcluded_subtrees)
r   r‚   rƒ   r   ÚNAME_CONSTRAINTS_freeÚ_decode_general_subtreesÚpermittedSubtreesÚexcludedSubtreesr   ÚNameConstraints)r   ÚncÚ	permittedÚexcludedr   r   r   Ú_decode_name_constraints¾  s   ÿr:  c                 C   sh   || j jkrd S | j |¡}g }t|ƒD ]}| j ||¡}|  || j jk¡ t| |jƒ}| 	|¡ q|S r   )
r   r   r   Úsk_GENERAL_SUBTREE_numr1   Úsk_GENERAL_SUBTREE_valuer   rB   rw   r4   )r   Ústack_subtreesrD   ÚsubtreesrF   r   Únamer   r   r   r3  È  s   r3  c           	   	   C   s¦   | j  d|¡}| j  || jj¡}|j| j jkr t| |jƒ\}}nd }d }|jdk}|j	dk}|j
dk}|jdk}|j| j jkrFt| |jƒ}nd }t |||||||¡S )NzISSUING_DIST_POINT *rà   )r   r‚   rƒ   r   ÚISSUING_DIST_POINT_freeÚ	distpointr   Ú_decode_distpointÚonlyuserÚonlyCAÚindirectCRLÚonlyattrÚonlysomereasonsÚ_decode_reasonsr   ÚIssuingDistributionPoint)	r   ÚidpÚ	full_nameÚrelative_nameÚ	only_userÚonly_caÚindirect_crlÚ	only_attrÚonly_some_reasonsr   r   r   Ú_decode_issuing_dist_pointØ  s,   



ùrR  c                 C   sD   | j  d|¡}| j  || jj¡}t| |jƒ}t| |jƒ}t 	||¡S )NzPOLICY_CONSTRAINTS *)
r   r‚   rƒ   r   ÚPOLICY_CONSTRAINTS_freerã   ÚrequireExplicitPolicyÚinhibitPolicyMappingr   ÚPolicyConstraints)r   ÚpcÚrequire_explicit_policyÚinhibit_policy_mappingr   r   r   Ú_decode_policy_constraintsõ  s   ÿÿÿrZ  c                 C   s‚   | j  d|¡}| j  || jj¡}| j |¡}g }t|ƒD ]}| j ||¡}|  || j j	k¡ t
 t| |ƒ¡}| |¡ qt
 |¡S )Nz#Cryptography_STACK_OF_ASN1_OBJECT *)r   r‚   rƒ   r   Úsk_ASN1_OBJECT_freeÚsk_ASN1_OBJECT_numr1   Úsk_ASN1_OBJECT_valuer   r   r   r%   r   r4   ÚExtendedKeyUsage)r   ÚskrD   ÚekusrF   r   r)   r   r   r   Ú_decode_extended_key_usage  s   
ra  r   c           
   	   C   sÈ   | j  d|¡}| j  || jj¡}| j |¡}g }t|ƒD ]E}d }d }d }d }| j ||¡}	|	j| j j	kr:t
| |	jƒ}|	j| j j	krGt| |	jƒ}|	j| j j	krVt| |	jƒ\}}| t ||||¡¡ q|S )Nz"Cryptography_STACK_OF_DIST_POINT *)r   r‚   rƒ   r   ÚCRL_DIST_POINTS_freeÚsk_DIST_POINT_numr1   Úsk_DIST_POINT_valueÚreasonsr   rH  Ú	CRLissuerrH   rA  rB  r4   r   ÚDistributionPoint)
r   ÚcdpsrD   Údist_pointsrF   rK  rL  Ú
crl_issuerre  Úcdpr   r   r   Ú_decode_dist_points  s0   ÿÿÿrl  )r   rL   r  r  r  r  r  rJ   c                 C   s6   g }t  ¡ D ]\}}| j ||¡r| |¡ qt|ƒS r   )Ú_REASON_BIT_MAPPINGÚitemsr   r  r4   Ú	frozenset)r   re  Úenum_reasonsÚbit_positionÚreasonr   r   r   rH  P  s   
€rH  c           	      C   sŠ   |j tkrt| |jjƒ}|d fS |jj}| j |¡}tƒ }t	|ƒD ]}| j 
||¡}|  || jjk¡ | t| |ƒ¡ q!t |¡}d |fS r   )r#   Ú_DISTPOINT_TYPE_FULLNAMErH   r?  ÚfullnameÚrelativenamer   Úsk_X509_NAME_ENTRY_numr•   r1   Úsk_X509_NAME_ENTRY_valuer   r   r   r5   r*   r   r,   )	r   rA  rK  ÚrnsÚrnumr9   rF   ÚrnrL  r   r   r   rB  Z  s   
	
rB  c                 C   r	  r   )rl  r   ÚCRLDistributionPoints©r   rh  ri  r   r   r   Ú_decode_crl_distribution_pointss  r  r}  c                 C   r	  r   )rl  r   ÚFreshestCRLr|  r   r   r   Ú_decode_freshest_crlx  r  r  c                 C   ó4   | j  d|¡}| j  || jj¡}t| |ƒ}t |¡S r�   )r   r‚   rƒ   r   r„   r†   r   ÚInhibitAnyPolicy)r   rˆ   Ú
skip_certsr   r   r   Ú_decode_inhibit_any_policy}  ó   

rƒ  c                 C   sj   ddl m} | j d|¡}| j || jj¡}g }t| j |¡ƒD ]}| j 	||¡}| 
|| ||ƒ¡ q |S )Nr   )Ú_SignedCertificateTimestampzCryptography_STACK_OF_SCT *)Ú)cryptography.hazmat.backends.openssl.x509r…  r   r‚   rƒ   r   ÚSCT_LIST_freer1   Ú
sk_SCT_numÚsk_SCT_valuer4   )r   Ú	asn1_sctsr…  ÚsctsrF   Úsctr   r   r   Ú_decode_scts„  s   r�  c                 C   r*  r   )r   Ú)PrecertificateSignedCertificateTimestampsr�  ©r   rŠ  r   r   r   Ú-_decode_precert_signed_certificate_timestamps”  r-  r�  c                 C   r*  r   )r   ÚSignedCertificateTimestampsr�  r�  r   r   r   Ú%_decode_signed_certificate_timestampsš  ó   r’  )
r   r   rL   r  r  r  r  rJ   é	   é
   rL   r  r  r  r  rJ   r”  r•  c                 C   sZ   | j  d|¡}| j  || jj¡}| j |¡}zt t| ¡W S  t	y,   t
d |¡ƒ‚w )NzASN1_ENUMERATED *zUnsupported reason code: {})r   r‚   rƒ   r   ÚASN1_ENUMERATED_freeÚASN1_ENUMERATED_getr   Ú	CRLReasonÚ_CRL_ENTRY_REASON_CODE_TO_ENUMr¤   rc   rf   )r   ÚenumÚcoder   r   r   Ú_decode_crl_reasonÆ  s   ÿrœ  c                 C   r€   )NzASN1_GENERALIZEDTIME *)r   r‚   rƒ   r   ÚASN1_GENERALIZEDTIME_freer   ÚInvalidityDateÚ_parse_asn1_generalized_time)r   Úinv_dateÚgeneralized_timer   r   r   Ú_decode_invalidity_dateÑ  s   ÿÿr¢  c                 C   r€  r%  )r   r‚   rƒ   r   r&  rH   r   ÚCertificateIssuerr'  r   r   r   Ú_decode_cert_issuerÛ  r„  r¤  c                    sn   ˆ j  d¡}ˆ j ||¡}ˆ  |dk¡ ˆ  |d ˆ j jk¡ ˆ j  |‡ fdd„¡}ˆ j  |d |¡d d … S )Núunsigned char **r   c                    ó   ˆ j  | d ¡S ©Nr   ©r   ÚOPENSSL_free©r   rþ   r   r   rÿ   è  ó    z_asn1_to_der.<locals>.<lambda>)r   r   r   Úi2d_ASN1_TYPEr   r   rƒ   r   )r   Ú	asn1_typer   r   r   rþ   r   rq   â  s   ÿrq   c                 C   s@   | j  || jj¡}|  || jjk¡ | j || j j¡}|  |¡S r   )r   ÚASN1_INTEGER_to_BNr   r   r   rƒ   ÚBN_freeÚ
_bn_to_int)r   rˆ   Úbnr   r   r   r†   í  s   
r†   c                 C   s   || j jkrd S t| |ƒS r   )r   r   r†   )r   rˆ   r   r   r   rã   ô  s   
rã   c                 C   s   | j  |j|j¡d d … S r   )r   r   r'   r¥   rí   r   r   r   rP   û  s   rP   c                 C   s   t | |ƒ d¡S )Nr»   )rP   r   rí   r   r   r   Ú_asn1_string_to_asciiÿ  r“  r²  Úreturnc                    s~   ˆ j  d¡}ˆ j ||¡}|dkrtd |j¡ƒ‚ˆ  |d ˆ j jk¡ ˆ j  	|‡ fdd„¡}ˆ j  
|d |¡d d …  d¡S )Nr¥  r+   z&Unsupported ASN1 string type. Type: {}r   c                    r¦  r§  r¨  rª  rþ   r   r   rÿ     r«  z&_asn1_string_to_utf8.<locals>.<lambda>rI   )r   r   r   ÚASN1_STRING_to_UTF8rc   rf   r#   r   r   rƒ   r   r   )r   rî   r   r   r   rþ   r   r"     s   
ÿÿ r"   c                 C   s`   |   || jjk¡ | j || jj¡}|| jjkr"td t| |ƒ¡ƒ‚| j || jj	¡}t
| |ƒS )Nz1Couldn't parse ASN.1 time as generalizedtime {!r})r   r   r   r   ÚASN1_TIME_to_generalizedtimerc   rf   rP   rƒ   r�  rŸ  )r   Ú	asn1_timer¡  r   r   r   Ú_parse_asn1_time  s   ÿÿÿÿ
r·  c                 C   s"   t | | j d|¡ƒ}tj |d¡S )NzASN1_STRING *z%Y%m%d%H%M%SZ)r²  r   r‚   ÚdatetimeÚstrptime)r   r¡  Útimer   r   r   rŸ  $  s   ÿrŸ  c                 C   s0   | j  d|¡}| j  || jj¡}t t| |ƒ¡S rê   )r   r‚   rƒ   r   rë   r   Ú	OCSPNoncerP   )r   Únoncer   r   r   Ú_decode_nonce+  rŠ   r½  )sr¸  r^   Úcryptographyr   Úcryptography.hazmat._derr   r   r   r   Úcryptography.x509.extensionsr   Úcryptography.x509.namer	   Úcryptography.x509.oidr
   r   r   r   r   r*   r?   rH   rB   r   r‰   rŒ   Úobjectr�   rÒ   rÇ   ré   rï   rù   r  r  r  r$  r)  r,  r/  r:  r3  rR  rZ  ra  rs  Ú_DISTPOINT_TYPE_RELATIVENAMErl  ÚReasonFlagsÚkey_compromiseÚca_compromiseÚaffiliation_changedÚ
supersededÚcessation_of_operationÚcertificate_holdÚprivilege_withdrawnÚaa_compromiserm  rH  rB  r}  r  rƒ  r�  r�  r’  ÚunspecifiedÚremove_from_crlr™  Ú_CRL_ENTRY_REASON_ENUM_TO_CODErœ  r¢  r¤  rq   r†   rã   rP   r²  Ústrr"   r·  rŸ  r½  ÚBASIC_CONSTRAINTSÚSUBJECT_KEY_IDENTIFIERÚ	KEY_USAGEÚSUBJECT_ALTERNATIVE_NAMEÚEXTENDED_KEY_USAGEÚAUTHORITY_KEY_IDENTIFIERÚAUTHORITY_INFORMATION_ACCESSÚSUBJECT_INFORMATION_ACCESSÚCERTIFICATE_POLICIESÚCRL_DISTRIBUTION_POINTSÚFRESHEST_CRLÚOCSP_NO_CHECKÚINHIBIT_ANY_POLICYÚISSUER_ALTERNATIVE_NAMEÚNAME_CONSTRAINTSÚPOLICY_CONSTRAINTSÚ_EXTENSION_HANDLERS_BASEÚ%PRECERT_SIGNED_CERTIFICATE_TIMESTAMPSÚ_EXTENSION_HANDLERS_SCTÚ
CRL_REASONÚINVALIDITY_DATEÚCERTIFICATE_ISSUERÚ_REVOKED_EXTENSION_HANDLERSÚ
CRL_NUMBERÚDELTA_CRL_INDICATORÚISSUING_DISTRIBUTION_POINTÚ_CRL_EXTENSION_HANDLERSÚNONCEÚ_OCSP_REQ_EXTENSION_HANDLERSÚ"_OCSP_BASICRESP_EXTENSION_HANDLERSÚSIGNED_CERTIFICATE_TIMESTAMPSÚ'_OCSP_SINGLERESP_EXTENSION_HANDLERS_SCTr   r   r   r   Ú<module>   s"  NQ!

-ø
öö
ÿþýüûúø
õóòñðïîíìþý÷ÿÿþ