U
    *”}fY~  ã                    @   s¨  d dl mZmZmZ d dlZ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+d0d1„ Z,d2d3„ Z-d4d5„ Z.d6d7„ Z/d8d9„ Z0d:d;„ Z1d Z2d<Z3d=d>„ Z4ej5j6ej5j7ej5j8ej5j9ej5j:ej5j;ej5j<ej5j=d?œZ>d@dA„ Z?dBdC„ Z@dDdE„ ZAdFdG„ ZBdHdI„ ZCdJdK„ ZDdLdM„ ZEdNdO„ ZFej5jGej5j6ej5j7ej5j8ej5j9ej5j:ej5j;ej5jHej5j<ej5j=dPœ
ZIej5jGd ej5j6d<ej5j7dQej5j8dRej5j9dSej5j:dTej5j;dUej5jHdVej5j<dWej5j=dXi
ZJdYdZ„ ZKd[d\„ ZLd]d^„ ZMd_d`„ ZNdadb„ ZOdcdd„ ZPdedf„ ZQdgdh„ ZRdidj„ ZSdkdl„ ZTdmdn„ ZUdodp„ ZVejWe#ejXe$ejYe)ejZe+ej[e1ej\e%ej]e'ej^e(ej_e!ej`eAejaeBejbeejceCejde,ejee-ejfe0iZgejheEiZiejjeKejkeLejleMiZmejneejoeej\e%ejde,ej]e'ejpe/ejaeBiZqejreViZsejreViZtejueFiZvdS )qé    )Úabsolute_importÚdivisionÚprint_functionN)Ú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rX|d }| j  d|¡}| j |||d¡}|  |dk¡ | j  ||¡d d …  ¡ S )NéP   zchar[]é   r   )Ú_ffiÚnewÚ_libZOBJ_obj2txtÚopenssl_assertÚbufferÚdecode)ÚbackendÚobjZbuf_lenÚbufÚres© r   úT/tmp/pip-unpacked-wheel-x36vw73o/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   ZX509_NAME_ENTRY_get_objectr   r   r   ZX509_NAME_ENTRY_get_dataÚ_asn1_string_to_utf8r   r   Útyper   ZNameAttributeÚObjectIdentifier)r   Zx509_name_entryr   ÚdataÚvalueÚoidr"   r   r   r   Ú_decode_x509_name_entry0   s    


r'   c           	      C   s‚   | j  |¡}g }d}t|ƒD ]P}| j  ||¡}t| |ƒ}| j  |¡}||krZ| |h¡ n|d  |¡ |}qt 	dd„ |D ƒ¡S )Néÿÿÿÿc                 s   s   | ]}t  |¡V  qd S r    )r   ÚRelativeDistinguishedName)Ú.0Zrdnr   r   r   Ú	<genexpr>K   s     z$_decode_x509_name.<locals>.<genexpr>)
r   ZX509_NAME_entry_countÚrangeZX509_NAME_get_entryr'   Z Cryptography_X509_NAME_ENTRY_setÚappendÚaddr   ÚName)	r   Z	x509_nameÚcountÚ
attributesZprev_set_idÚxÚentryÚ	attributeZset_idr   r   r   Ú_decode_x509_name<   s    
r5   c                 C   sR   | j  |¡}g }t|ƒD ]4}| j  ||¡}|  || jjk¡ | t| |ƒ¡ q|S r    )	r   Zsk_GENERAL_NAME_numr,   Zsk_GENERAL_NAME_valuer   r   r   r-   Ú_decode_general_name)r   ÚgnsÚnumÚnamesÚiÚgnr   r   r   Ú_decode_general_namesN   s    r<   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rˆt| |jjƒ}t t |¡¡S |j | jjkrbt| |jjƒ}t|ƒ}|dksÀ|dkrNt |d |d … ¡}t ||d d … ¡}tt|ƒƒdd … }| d¡}|dkrt|ƒ}d||d … kr6t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 ¡‚d S )NÚutf8é   é    é   Ú0r(   Ú1zInvalid netmaskz/{}z{} is not a supported type)/r"   r   ZGEN_DNSÚ_asn1_string_to_bytesÚdZdNSNamer   r   ZDNSNameZ_init_without_validationZGEN_URIZuniformResourceIdentifierZUniformResourceIdentifierZGEN_RIDr   ZregisteredIDZRegisteredIDr#   Z	GEN_IPADDZ	iPAddressÚlenÚ	ipaddressÚ
ip_addressÚbinÚintÚfindÚ
ValueErrorÚ
ip_networkÚexplodedÚformatZ	IPAddressZGEN_DIRNAMEZDirectoryNamer5   ZdirectoryNameZ	GEN_EMAILZ
rfc822NameZ
RFC822NameZGEN_OTHERNAMEZ	otherNameÚtype_idÚ_asn1_to_derr%   Z	OtherNameZUnsupportedGeneralNameTypeZ_GENERAL_NAMESÚget)r   r;   r$   r&   Zdata_lenÚbaseÚnetmaskÚbitsÚprefixÚiprO   r%   r   r   r   r6   Y   s\     ÿþ



ÿÿür6   c                 C   s   t  ¡ S r    )r   ZOCSPNoCheck©r   Úextr   r   r   Ú_decode_ocsp_no_check§   s    rY   c                 C   s0   | j  d|¡}| j  || jj¡}t t| |ƒ¡S ©NzASN1_INTEGER *)r   ÚcastÚgcr   ÚASN1_INTEGER_freer   Z	CRLNumberÚ_asn1_integer_to_int©r   rX   Úasn1_intr   r   r   Ú_decode_crl_number«   s    ra   c                 C   s0   | j  d|¡}| j  || jj¡}t t| |ƒ¡S rZ   )r   r[   r\   r   r]   r   ZDeltaCRLIndicatorr^   r_   r   r   r   Ú_decode_delta_crl_indicator±   s    rb   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   rd   re   rf   r   r   r   Ú__init__¸   s    z_X509ExtensionParser.__init__c                 C   sf  g }t ƒ }t|  |¡ƒD ]@}|  ||¡}| j || jjjk¡ | jj 	|¡}|dk}t
 t| j| jj |¡ƒ¡}||krŒt
 d |¡|¡‚|tjkr| jj |¡}	t| j|	ƒ}
t|
ƒ t¡}g }| ¡ sâ| | t¡ ¡ ¡ qÄt
 dd„ |D ƒ¡}| t
 |||¡¡ | |¡ qn\|tjkrt| jj |¡}	tt| j|	ƒƒ}| t¡  ¡  | t
 ||t
 !¡ ¡¡ | |¡ qz| j"| }W nv t#k
rø   | jj |¡}	| j |	| jjjk¡ | jj $|	j%|	j&¡d d … }t
 '||¡}| t
 |||¡¡ Y nXX | jj (|¡}|| jjjkr0| j )¡  t*d |¡ƒ‚|| j|ƒ}| t
 |||¡¡ | |¡ qt
 +|¡S )Nr   zDuplicate {} extension foundc                 S   s   g | ]}t | ‘qS r   r
   )r*   r2   r   r   r   Ú
<listcomp>Þ   s     z._X509ExtensionParser.parse.<locals>.<listcomp>z/The {} extension is invalid and can't be parsed),Úsetr,   rd   re   rg   r   r   r   r   ZX509_EXTENSION_get_criticalr   r#   r   ZX509_EXTENSION_get_objectZDuplicateExtensionrN   r   ZTLS_FEATUREZX509_EXTENSION_get_datarC   r   Zread_single_elementr	   Zis_emptyr-   Zread_elementr   Z
as_integerZ
TLSFeatureÚ	Extensionr.   ZPRECERT_POISONZcheck_emptyZPrecertPoisonrf   ÚKeyErrorr   r$   ÚlengthZUnrecognizedExtensionZX509V3_EXT_d2iZ_consume_errorsrK   Z
Extensions)rh   Zx509_objÚ
extensionsZ	seen_oidsr:   rX   ÚcritÚcriticalr&   r$   Z
data_bytesÚfeaturesÚparsedr%   ÚreaderÚhandlerZderZunrecognizedZext_datar   r   r   Úparse¾   sx    þÿ ÿÿ
ÿ

ÿÿz_X509ExtensionParser.parseN)Ú__name__Ú
__module__Ú__qualname__ri   rv   r   r   r   r   rc   ·   s   rc   c                 C   s4  | j  d|¡}| j  || jj¡}| j |¡}g }t|ƒD ]ð}d }| j ||¡}t 	t
| |jƒ¡}|j| j jkr| j |j¡}g }t|ƒD ]Š}	| j |j|	¡}
t 	t
| |
jƒ¡}|tjkrî| j  |
jjj|
jjj¡d d …  d¡}| |¡ qŠ|tjksüt‚t| |
jjƒ}| |¡ qŠ| t ||¡¡ q8t |¡S )Nz"Cryptography_STACK_OF_POLICYINFO *Úascii) r   r[   r\   r   ZCERTIFICATEPOLICIES_freeZsk_POLICYINFO_numr,   Zsk_POLICYINFO_valuer   r#   r   ZpolicyidÚ
qualifiersr   Zsk_POLICYQUALINFO_numZsk_POLICYQUALINFO_valueÚpqualidr   ZCPS_QUALIFIERr   rD   Úcpsurir$   rn   r   r-   ZCPS_USER_NOTICEÚAssertionErrorÚ_decode_user_noticeZ
usernoticeZPolicyInformationZCertificatePolicies)r   Úcpr8   Zcertificate_policiesr:   r{   Úpir&   ZqnumÚjZpqir|   r}   Z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r’t| |jjƒ}| j |jj¡}g }t	|ƒD ]*}| j 
|jj|¡}t| |ƒ}	| |	¡ qZt ||¡}t ||¡S r    )Zexptextr   r   r!   Z	noticerefÚorganizationr   Zsk_ASN1_INTEGER_numZ	noticenosr,   Zsk_ASN1_INTEGER_valuer^   r-   r   ZNoticeReferenceZ
UserNotice)
r   ZunZexplicit_textZnotice_referencer„   r8   Znotice_numbersr:   r`   Z
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   ZBASIC_CONSTRAINTS_freeÚcaÚ_asn1_integer_to_int_or_noneÚpathlenr   ZBasicConstraints)r   Zbc_stZbasic_constraintsr†   Zpath_lengthr   r   r   Ú_decode_basic_constraintsA  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   ZSubjectKeyIdentifierr   r$   rn   ©r   Úasn1_stringr   r   r   Ú_decode_subject_key_identifierQ  s     ÿÿrŽ   c                 C   sˆ   | j  d|¡}| j  || jj¡}d }d }|j| j jkrT| j  |jj|jj	¡d d … }|j
| j jkrnt| |j
ƒ}t| |jƒ}t |||¡S )NzAUTHORITY_KEYID *)r   r[   r\   r   ZAUTHORITY_KEYID_freeZkeyidr   r   r$   rn   Zissuerr<   r‡   Úserialr   ZAuthorityKeyIdentifier)r   ZakidZkey_identifierZauthority_cert_issuerZauthority_cert_serial_numberr   r   r   Ú _decode_authority_key_identifier[  s(     ÿ ÿ  ÿr   c                    s¬   ˆ j  d|¡}ˆ j  |‡ fdd„¡}ˆ j |¡}g }t|ƒD ]j}ˆ 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 )NZACCESS_DESCRIPTION_free)r   Zsk_ACCESS_DESCRIPTION_pop_freer   Ú	addressofZ_original_lib)r2   ©r   r   r   Ú<lambda>v  s    ÿþz,_decode_information_access.<locals>.<lambda>)r   r[   r\   r   Zsk_ACCESS_DESCRIPTION_numr,   Zsk_ACCESS_DESCRIPTION_valuer   Úmethodr   r   r#   r   Úlocationr6   r-   ZAccessDescription)r   Úiar8   Úaccess_descriptionsr:   Úadr&   r;   r   r’   r   Ú_decode_information_accessr  s    
þ	r™   c                 C   s   t | |ƒ}t |¡S r    )r™   r   ZAuthorityInformationAccess©r   Zaiar—   r   r   r   Ú$_decode_authority_information_accessŠ  s    
r›   c                 C   s   t | |ƒ}t |¡S r    )r™   r   ZSubjectInformationAccessrš   r   r   r   Ú"_decode_subject_information_access  s    
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   r@   é   é   é   é   é   r>   )r   r[   r\   r   ZASN1_BIT_STRING_freeÚASN1_BIT_STRING_get_bitr   ZKeyUsage)r   Z
bit_stringZget_bitZdigital_signatureZcontent_commitmentZkey_enciphermentZdata_enciphermentZkey_agreementZkey_cert_signZcrl_signZencipher_onlyZ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_freer<   ©r   r7   Zgeneral_namesr   r   r   Ú_decode_general_names_extension®  s    
r§   c                 C   s   t  t| |ƒ¡S r    )r   ZSubjectAlternativeNamer§   rW   r   r   r   Ú_decode_subject_alt_nameµ  s    ÿr¨   c                 C   s   t  t| |ƒ¡S r    )r   ZIssuerAlternativeNamer§   rW   r   r   r   Ú_decode_issuer_alt_name»  s    ÿr©   c                 C   sF   | j  d|¡}| j  || jj¡}t| |jƒ}t| |jƒ}tj	||dS )NzNAME_CONSTRAINTS *)Zpermitted_subtreesZexcluded_subtrees)
r   r[   r\   r   ZNAME_CONSTRAINTS_freeÚ_decode_general_subtreesZpermittedSubtreesZexcludedSubtreesr   ZNameConstraints)r   ZncZ	permittedZ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   Zsk_GENERAL_SUBTREE_numr,   Zsk_GENERAL_SUBTREE_valuer   r6   rR   r-   )r   Zstack_subtreesr8   Zsubtreesr:   r   Únamer   r   r   rª   Ë  s    rª   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rŒt| |jƒ}nd }t |||||||¡S )NzISSUING_DIST_POINT *r…   )r   r[   r\   r   ZISSUING_DIST_POINT_freeÚ	distpointr   Ú_decode_distpointZonlyuserZonlyCAZindirectCRLZonlyattrZonlysomereasonsÚ_decode_reasonsr   ZIssuingDistributionPoint)	r   ZidpÚ	full_nameÚrelative_nameZ	only_userZonly_caZindirect_crlZ	only_attrZonly_some_reasonsr   r   r   Ú_decode_issuing_dist_pointÛ  s,    



ùr²   c                 C   sD   | j  d|¡}| j  || jj¡}t| |jƒ}t| |jƒ}t 	||¡S )NzPOLICY_CONSTRAINTS *)
r   r[   r\   r   ZPOLICY_CONSTRAINTS_freer‡   ZrequireExplicitPolicyZinhibitPolicyMappingr   ZPolicyConstraints)r   ZpcZrequire_explicit_policyZinhibit_policy_mappingr   r   r   Ú_decode_policy_constraintsø  s     ÿ ÿ ÿr³   c                 C   s‚   | j  d|¡}| j  || jj¡}| j |¡}g }t|ƒD ]>}| j ||¡}|  || j j	k¡ t
 t| |ƒ¡}| |¡ q8t
 |¡S )Nz#Cryptography_STACK_OF_ASN1_OBJECT *)r   r[   r\   r   Zsk_ASN1_OBJECT_freeZsk_ASN1_OBJECT_numr,   Zsk_ASN1_OBJECT_valuer   r   r   r#   r   r-   ZExtendedKeyUsage)r   Úskr8   Zekusr:   r   r&   r   r   r   Ú_decode_extended_key_usage  s    rµ   r   c           
   	   C   sÈ   | j  d|¡}| j  || jj¡}| j |¡}g }t|ƒD ]Š}d }d }d }d }| j ||¡}	|	j| j j	krtt
| |	jƒ}|	j| j j	krŽt| |	jƒ}|	j| j j	kr¬t| |	jƒ\}}| t ||||¡¡ q8|S )Nz"Cryptography_STACK_OF_DIST_POINT *)r   r[   r\   r   ZCRL_DIST_POINTS_freeZsk_DIST_POINT_numr,   Zsk_DIST_POINT_valueÚreasonsr   r¯   Z	CRLissuerr<   r­   r®   r-   r   ZDistributionPoint)
r   Úcdpsr8   Údist_pointsr:   r°   r±   Z
crl_issuerr¶   Zcdpr   r   r   Ú_decode_dist_points  s8     ÿ   ÿÿr¹   )r   r@   r   rž   rŸ   r    r¡   r>   c                 C   s8   g }t  t¡D ] \}}| j ||¡r| |¡ qt|ƒS r    )ÚsixÚ	iteritemsÚ_REASON_BIT_MAPPINGr   r¢   r-   Ú	frozenset)r   r¶   Zenum_reasonsZbit_positionÚreasonr   r   r   r¯   S  s
    r¯   c           	      C   sŠ   |j tkr t| |jjƒ}|d fS |jj}| j |¡}tƒ }t	|ƒD ]4}| j 
||¡}|  || jjk¡ | t| |ƒ¡ qBt |¡}d |fS r    )r"   Ú_DISTPOINT_TYPE_FULLNAMEr<   r¬   ÚfullnameZrelativenamer   Zsk_X509_NAME_ENTRY_numrk   r,   Zsk_X509_NAME_ENTRY_valuer   r   r   r.   r'   r   r)   )	r   r­   r°   ZrnsZrnumr1   r:   Zrnr±   r   r   r   r®   ]  s    
	
r®   c                 C   s   t | |ƒ}t |¡S r    )r¹   r   ZCRLDistributionPoints©r   r·   r¸   r   r   r   Ú_decode_crl_distribution_pointsv  s    
rÂ   c                 C   s   t | |ƒ}t |¡S r    )r¹   r   ZFreshestCRLrÁ   r   r   r   Ú_decode_freshest_crl{  s    
rÃ   c                 C   s4   | j  d|¡}| j  || jj¡}t| |ƒ}t |¡S rZ   )r   r[   r\   r   r]   r^   r   ZInhibitAnyPolicy)r   r`   Z
skip_certsr   r   r   Ú_decode_inhibit_any_policy€  s    
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 *)Z)cryptography.hazmat.backends.openssl.x509rÅ   r   r[   r\   r   ZSCT_LIST_freer,   Z
sk_SCT_numZsk_SCT_valuer-   )r   Ú	asn1_sctsrÅ   Zsctsr:   Zsctr   r   r   Ú_decode_scts‡  s    rÇ   c                 C   s   t  t| |ƒ¡S r    )r   Z)PrecertificateSignedCertificateTimestampsrÇ   ©r   rÆ   r   r   r   Ú-_decode_precert_signed_certificate_timestamps—  s    ÿrÉ   c                 C   s   t  t| |ƒ¡S r    )r   ZSignedCertificateTimestampsrÇ   rÈ   r   r   r   Ú%_decode_signed_certificate_timestamps  s    rÊ   )
r   r   r@   r   rž   rŸ   r    r>   é	   é
   r@   r   rž   rŸ   r    r>   rË   rÌ   c                 C   sd   | j  d|¡}| j  || jj¡}| j |¡}zt t| ¡W S  t	k
r^   t
d |¡ƒ‚Y nX d S )NzASN1_ENUMERATED *zUnsupported reason code: {})r   r[   r\   r   ZASN1_ENUMERATED_freeZASN1_ENUMERATED_getr   Z	CRLReasonÚ_CRL_ENTRY_REASON_CODE_TO_ENUMrm   rK   rN   )r   ÚenumÚcoder   r   r   Ú_decode_crl_reasonÉ  s    rÐ   c                 C   s0   | j  d|¡}| j  || jj¡}t t| |ƒ¡S )NzASN1_GENERALIZEDTIME *)r   r[   r\   r   ÚASN1_GENERALIZEDTIME_freer   ZInvalidityDateÚ_parse_asn1_generalized_time)r   Zinv_dateÚgeneralized_timer   r   r   Ú_decode_invalidity_dateÔ  s     ÿÿrÔ   c                 C   s4   | j  d|¡}| j  || jj¡}t| |ƒ}t |¡S r¤   )r   r[   r\   r   r¥   r<   r   ZCertificateIssuerr¦   r   r   r   Ú_decode_cert_issuerÞ  s    
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                    s   ˆ j  | d ¡S ©Nr   ©r   ZOPENSSL_free©r   r’   r   r   r“   ë  ó    z_asn1_to_der.<locals>.<lambda>)r   r   r   Zi2d_ASN1_TYPEr   r   r\   r   )r   Z	asn1_typer   r   r   r’   r   rP   å  s     
ÿrP   c                 C   s@   | j  || jj¡}|  || jjk¡ | j || j j¡}|  |¡S r    )r   ZASN1_INTEGER_to_BNr   r   r   r\   ZBN_freeZ
_bn_to_int)r   r`   Zbnr   r   r   r^   ð  s    r^   c                 C   s   || j jkrd S t| |ƒS d 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$   rn   rŒ   r   r   r   rC   þ  s    rC   c                 C   s   t | |ƒ d¡S )Nrz   )rC   r   rŒ   r   r   r   Ú_asn1_string_to_ascii  s    rÛ   c                    s~   ˆ j  d¡}ˆ j ||¡}|dkr2t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                    s   ˆ j  | d ¡S r×   rØ   rÙ   r’   r   r   r“     rÚ   z&_asn1_string_to_utf8.<locals>.<lambda>r=   )r   r   r   ZASN1_STRING_to_UTF8rK   rN   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rDtd t| |ƒ¡ƒ‚| j || jj	¡}t
| |ƒS )Nz1Couldn't parse ASN.1 time as generalizedtime {!r})r   r   r   r   ZASN1_TIME_to_generalizedtimerK   rN   rC   r\   rÑ   rÒ   )r   Z	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   Z	OCSPNoncerC   )r   Únoncer   r   r   Ú_decode_nonce.  s    rá   )wÚ
__future__r   r   r   rÝ   rF   rº   Zcryptographyr   Zcryptography.hazmat._derr   r   r   r	   Zcryptography.x509.extensionsr   Zcryptography.x509.namer   Zcryptography.x509.oidr   r   r   r   r   r'   r5   r<   r6   rY   ra   rb   Úobjectrc   rƒ   r   r‰   rŽ   r   r™   r›   rœ   r£   r§   r¨   r©   r«   rª   r²   r³   rµ   r¿   Z_DISTPOINT_TYPE_RELATIVENAMEr¹   ZReasonFlagsZkey_compromiseZca_compromiseZaffiliation_changedZ
supersededZcessation_of_operationZcertificate_holdZprivilege_withdrawnZaa_compromiser¼   r¯   r®   rÂ   rÃ   rÄ   rÇ   rÉ   rÊ   ÚunspecifiedZremove_from_crlrÍ   Z_CRL_ENTRY_REASON_ENUM_TO_CODErÐ   rÔ   rÕ   rP   r^   r‡   rC   rÛ   r!   rÜ   rÒ   rá   ZBASIC_CONSTRAINTSZSUBJECT_KEY_IDENTIFIERZ	KEY_USAGEZSUBJECT_ALTERNATIVE_NAMEZEXTENDED_KEY_USAGEZAUTHORITY_KEY_IDENTIFIERZAUTHORITY_INFORMATION_ACCESSZSUBJECT_INFORMATION_ACCESSZCERTIFICATE_POLICIESZCRL_DISTRIBUTION_POINTSZFRESHEST_CRLZOCSP_NO_CHECKZINHIBIT_ANY_POLICYZISSUER_ALTERNATIVE_NAMEZNAME_CONSTRAINTSZPOLICY_CONSTRAINTSZ_EXTENSION_HANDLERS_BASEZ%PRECERT_SIGNED_CERTIFICATE_TIMESTAMPSZ_EXTENSION_HANDLERS_SCTZ
CRL_REASONZINVALIDITY_DATEZCERTIFICATE_ISSUERZ_REVOKED_EXTENSION_HANDLERSZ
CRL_NUMBERZDELTA_CRL_INDICATORZISSUING_DISTRIBUTION_POINTZ_CRL_EXTENSION_HANDLERSZNONCEZ_OCSP_REQ_EXTENSION_HANDLERSZ"_OCSP_BASICRESP_EXTENSION_HANDLERSZSIGNED_CERTIFICATE_TIMESTAMPSZ'_OCSP_SINGLERESP_EXTENSION_HANDLERS_SCTr   r   r   r   Ú<module>   sJ  NQ!

-ø
ö          ö
              ìþ   ý      ÷ ÿ ÿþ