o
    ™¨ÊhÉW  ã                   @   sb  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m	Z	 d dl
mZmZmZ d dlmZ d dl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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-d.„ Z'd/d0„ Z(d1d2„ Z)d3d4„ Z*d5d6„ Z+d7d8„ Z,d9d:„ Z-d;d<„ Z.e	j/j0d=e	j/j1d>e	j/j2d?e	j/j3d@e	j/j4dAe	j/j5dBe	j/j6dCe	j/j7dDiZ8dEdF„ Z9dGdH„ Z:dIdJ„ Z;dKdL„ Z<dMdN„ Z=ej>e(ej?e,ej@e&ejAe+ejBe+ejCe.ejDe'ejEe!ejFe)ejGe9ejHe9ejIeejJe%ejKe:ejLe;iZMejBe+ejDe'ejFe)ejNeejOeiZPejQe+ejReejSe iZTejUe=iZVejUe=iZWdS )Oé    )Úabsolute_importÚdivisionÚprint_functionN)ÚutilsÚx509)Ú_CRL_ENTRY_REASON_ENUM_TO_CODEÚ_DISTPOINT_TYPE_FULLNAMEÚ_DISTPOINT_TYPE_RELATIVENAME)Ú	_ASN1Type)ÚCRLEntryExtensionOIDÚExtensionOIDÚOCSPExtensionOIDc                 C   sD   |   |¡}| j || jj¡}| j || jj¡}|  || jjk¡ |S )a  
    Converts a python integer to an ASN1_INTEGER. The returned ASN1_INTEGER
    will not be garbage collected (to support adding them to structs that take
    ownership of the object). Be sure to register it for GC if it will be
    discarded after use.

    )Ú
_int_to_bnÚ_ffiÚgcÚ_libÚBN_freeÚBN_to_ASN1_INTEGERÚNULLÚopenssl_assert©ÚbackendÚxÚi© r   úb/var/www/html/env/lib/python3.10/site-packages/cryptography/hazmat/backends/openssl/encode_asn1.pyÚ_encode_asn1_int   s
   
r   c                 C   ó    t | |ƒ}| j || jj¡}|S ©N)r   r   r   r   ÚASN1_INTEGER_freer   r   r   r   Ú_encode_asn1_int_gc+   ó   
r    c                 C   s0   | j  ¡ }| j  ||t|ƒ¡}|  |dk¡ |S )z@
    Create an ASN1_OCTET_STRING from a Python byte string.
    é   )r   ÚASN1_OCTET_STRING_newÚASN1_OCTET_STRING_setÚlenr   )r   ÚdataÚsÚresr   r   r   Ú_encode_asn1_str1   s   
r)   c                 C   s<   | j  ¡ }| j  || d¡t| d¡ƒ¡}|  |dk¡ |S )z³
    Create an ASN1_UTF8STRING from a Python unicode string.
    This object will be an ASN1_STRING with UTF8 type in OpenSSL and
    can be decoded with ASN1_STRING_to_UTF8.
    Úutf8r"   )r   ÚASN1_UTF8STRING_newÚASN1_STRING_setÚencoder%   r   )r   Ústringr'   r(   r   r   r   Ú_encode_asn1_utf8_str;   s   
ÿr/   c                 C   r   r   )r)   r   r   r   ÚASN1_OCTET_STRING_free)r   r&   r'   r   r   r   Ú_encode_asn1_str_gcI   r!   r1   c                 C   ó   t | |jƒS r   )r    Ú
skip_certs)r   Úinhibit_any_policyr   r   r   Ú_encode_inhibit_any_policyO   ó   r5   c                 C   sh   | j  ¡ }|jD ])}d}|D ]"}t| |ƒ}| j || j j¡}| j  ||d|¡}|  |dk¡ d}qq|S )zP
    The X509_NAME created will not be gc'd. Use _encode_name_gc if needed.
    r   éÿÿÿÿr"   )	r   ÚX509_NAME_newÚrdnsÚ_encode_name_entryr   r   ÚX509_NAME_ENTRY_freeÚX509_NAME_add_entryr   )r   ÚnameÚsubjectÚrdnÚset_flagÚ	attributeÚ
name_entryr(   r   r   r   Ú_encode_nameS   s   


ÿÿ÷
rC   c                 C   r   r   )rC   r   r   r   ÚX509_NAME_free)r   Ú
attributesr>   r   r   r   Ú_encode_name_gcg   r!   rF   c                 C   s>   | j  ¡ }|D ]}t| |ƒ}| j  ||¡}|  |dk¡ q|S )z:
    The sk_X509_NAME_ENTRY created will not be gc'd.
    r"   )r   Úsk_X509_NAME_ENTRY_new_nullr:   Úsk_X509_NAME_ENTRY_pushr   )r   rE   ÚstackrA   rB   r(   r   r   r   Ú_encode_sk_name_entrym   s   

rJ   c                 C   sX   |j tju r|j d¡}n|j d¡}t| |jjƒ}| j 	| j
j||j j|t|ƒ¡}|S )NÚ	utf_16_ber*   )Ú_typer
   Ú	BMPStringÚvaluer-   Ú_txt2obj_gcÚoidÚdotted_stringr   ÚX509_NAME_ENTRY_create_by_OBJr   r   r%   )r   rA   rN   ÚobjrB   r   r   r   r:   y   s   ÿr:   c                 C   r2   r   )r    Ú
crl_number©r   Úextr   r   r   Ú&_encode_crl_number_delta_crl_indicator‡   r6   rW   c                 C   sT   | j  ¡ }|  || jjk¡ | j || j j¡}| j  |t|j	 ¡}|  |dk¡ |S ©Nr"   )
r   ÚASN1_ENUMERATED_newr   r   r   r   ÚASN1_ENUMERATED_freeÚASN1_ENUMERATED_setr   Úreason)r   Ú
crl_reasonÚasn1enumr(   r   r   r   Ú_encode_crl_reason‹   s   

ÿr_   c                 C   sF   | j  | jjt |j ¡ ¡¡}|  || jjk¡ | j 	|| j j
¡}|S r   )r   ÚASN1_GENERALIZEDTIME_setr   r   ÚcalendarÚtimegmÚinvalidity_dateÚ	timetupler   r   ÚASN1_GENERALIZEDTIME_free)r   rc   Útimer   r   r   Ú_encode_invalidity_date—   s   
ÿÿrg   c                 C   sŒ  | j  ¡ }|  || jjk¡ | j || j j¡}|D ]ª}| j  ¡ }|  || jjk¡ | j  ||¡}|  |dk¡ t	| |j
jƒ}||_|jrÃ| j  ¡ }|  || jjk¡ |jD ]j}| j  ¡ }	|  |	| jjk¡ | j  ||	¡}|  |dk¡ t|tjƒrŒt	| tjjƒ|	_t| | d¡ƒ|	j_qUt|tjƒs”J ‚t	| tjjƒ|	_| j  ¡ }
|  |
| jjk¡ |
|	j_|jr¸t | |jƒ|
_!t"| |j#ƒ|
_$qU||_%q|S )Nr"   Úascii)&r   Úsk_POLICYINFO_new_nullr   r   r   r   Úsk_POLICYINFO_freeÚPOLICYINFO_newÚsk_POLICYINFO_pushÚ_txt2objÚpolicy_identifierrQ   ÚpolicyidÚpolicy_qualifiersÚsk_POLICYQUALINFO_new_nullÚPOLICYQUALINFO_newÚsk_POLICYQUALINFO_pushÚ
isinstanceÚsixÚ	text_typer   ÚOID_CPS_QUALIFIERÚpqualidr)   r-   ÚdÚcpsuriÚ
UserNoticeÚOID_CPS_USER_NOTICEÚUSERNOTICE_newÚ
usernoticeÚexplicit_textr/   ÚexptextÚ_encode_notice_referenceÚnotice_referenceÚ	noticerefÚ
qualifiers)r   Úcertificate_policiesÚcpÚpolicy_infoÚpir(   rP   ÚpqisÚ	qualifierÚpqiÚunr   r   r   Ú_encode_certificate_policies£   sV   




ÿ
þÿ
ÿÿ€r�   c                 C   s€   |d u r| j jS | j ¡ }|  || j jk¡ t| |jƒ|_| j ¡ }||_|j	D ]}t
| |ƒ}| j ||¡}|  |dk¡ q(|S rX   )r   r   r   ÚNOTICEREF_newr   r/   ÚorganizationÚsk_ASN1_INTEGER_new_nullÚ	noticenosÚnotice_numbersr   Úsk_ASN1_INTEGER_push)r   ÚnoticeÚnrÚnotice_stackÚnumberÚnumr(   r   r   r   r�   Ô   s   



r�   c                 C   s.   |  d¡}| j |d¡}|  || jjk¡ |S )z_
    Converts a Python string with an ASN.1 object ID in dotted form to a
    ASN1_OBJECT.
    rh   r"   )r-   r   ÚOBJ_txt2objr   r   r   ©r   r=   rS   r   r   r   rm   ç   s   
rm   c                 C   r   r   )rm   r   r   r   ÚASN1_OBJECT_freerš   r   r   r   rO   ò   r!   rO   c                 C   s
   | j  ¡ S r   )r   ÚASN1_NULL_newrU   r   r   r   Ú_encode_ocsp_nocheckø   s   
r�   c                 C   sb  | j j}| j  ¡ }| j || j j¡}||d|jƒ}|  |dk¡ ||d|jƒ}|  |dk¡ ||d|j	ƒ}|  |dk¡ ||d|j
ƒ}|  |dk¡ ||d|jƒ}|  |dk¡ ||d|jƒ}|  |dk¡ ||d|jƒ}|  |dk¡ |jr•||d|jƒ}|  |dk¡ ||d	|jƒ}|  |dk¡ |S ||ddƒ}|  |dk¡ ||d	dƒ}|  |dk¡ |S )
Nr   r"   é   é   é   é   é   é   é   )r   ÚASN1_BIT_STRING_set_bitÚASN1_BIT_STRING_newr   r   ÚASN1_BIT_STRING_freeÚdigital_signaturer   Úcontent_commitmentÚkey_enciphermentÚdata_enciphermentÚkey_agreementÚkey_cert_signÚcrl_signÚencipher_onlyÚdecipher_only)r   Ú	key_usageÚset_bitÚkur(   r   r   r   Ú_encode_key_usageý   s8   
ûr´   c                 C   sz   | j  ¡ }|  || jjk¡ | j || j j¡}|jd ur#t| |jƒ|_	|j
d ur/t| |j
ƒ|_|jd ur;t| |jƒ|_|S r   )r   ÚAUTHORITY_KEYID_newr   r   r   r   ÚAUTHORITY_KEYID_freeÚkey_identifierr)   ÚkeyidÚauthority_cert_issuerÚ_encode_general_namesÚissuerÚauthority_cert_serial_numberr   Úserial)r   Úauthority_keyidÚakidr   r   r   Ú _encode_authority_key_identifier  s"   

þ
ÿ
ÿrÀ   c                 C   sN   | j  ¡ }| j || j j¡}|jrdnd|_|jr%|jd ur%t| |jƒ|_|S )Néÿ   r   )	r   ÚBASIC_CONSTRAINTS_newr   r   ÚBASIC_CONSTRAINTS_freeÚcaÚpath_lengthr   Úpathlen)r   Úbasic_constraintsÚconstraintsr   r   r   Ú_encode_basic_constraints4  s   
ÿÿrÉ   c                 C   sˆ   | j  ¡ }|  || jjk¡ | j || j j¡}|D ](}| j  ¡ }t| |j	j
ƒ}t| |jƒ}||_||_| j  ||¡}|  |dk¡ q|S rX   )r   Úsk_ACCESS_DESCRIPTION_new_nullr   r   r   r   Úsk_ACCESS_DESCRIPTION_freeÚACCESS_DESCRIPTION_newrm   Úaccess_methodrQ   Ú_encode_general_nameÚaccess_locationÚmethodÚlocationÚsk_ACCESS_DESCRIPTION_push)r   Úauthority_info_accessÚaiaÚaccess_descriptionÚadrÐ   Úgnr(   r   r   r   Ú$_encode_authority_information_accessB  s    
ÿ
ÿrØ   c                 C   sP   | j  ¡ }|  || jjk¡ |D ]}t| |ƒ}| j  ||¡}|  |dk¡ q|S )Nr   )r   ÚGENERAL_NAMES_newr   r   r   rÎ   Úsk_GENERAL_NAME_push)r   ÚnamesÚgeneral_namesr=   r×   r(   r   r   r   rº   V  s   

rº   c                 C   r   r   )rº   r   r   r   ÚGENERAL_NAMES_free)r   ÚsanrÜ   r   r   r   Ú_encode_alt_namea  s
   
ÿrß   c                 C   r2   r   )r1   Údigest)r   Úskir   r   r   Ú_encode_subject_key_identifieri  r6   râ   c                 C   s’  t |tjƒrD| j ¡ }|  || jjk¡ | jj|_	| j 
¡ }|  || jjk¡ |j d¡}| j ||t|ƒ¡}|  |dk¡ ||j_|S t |tjƒrx| j ¡ }|  || jjk¡ | jj|_	| j |jj d¡d¡}|  || jjk¡ ||j_|S t |tjƒr�| j ¡ }|  || jjk¡ t| |jƒ}| jj|_	||j_|S t |tjƒrõ| j ¡ }|  || jjk¡ t |jtjƒrÈ|jjjt  d|jj! d¡ }nt |jtj"ƒrá|jjjt  dd> |jj! d¡ }n|jj}t#| |ƒ}	| jj$|_	|	|j_%|S t |tj&ƒ�rl| j ¡ }|  || jjk¡ | j '¡ }
|  |
| jjk¡ | j |j(j d¡d¡}|  || jjk¡ | j )d|j¡}| j )d	¡}||d
< | j *| jj|t|jƒ¡}|| jjk�r[|  +¡  t,dƒ‚||
_(||
_| jj-|_	|
|j_.|S t |tj/ƒ�r—| j ¡ }|  || jjk¡ |j d¡}t#| |ƒ}| jj0|_	||j_1|S t |tj2ƒ�rÂ| j ¡ }|  || jjk¡ |j d¡}t#| |ƒ}| jj3|_	||j_4|S t,d 5|¡ƒ‚)Nr*   r"   rh   l        r    é€   é   zunsigned char[]zunsigned char **r   zInvalid ASN.1 dataz"{0} is an unknown GeneralName type)6rt   r   ÚDNSNamer   ÚGENERAL_NAME_newr   r   r   ÚGEN_DNSÚtypeÚASN1_IA5STRING_newrN   r-   r,   r%   ry   ÚdNSNameÚRegisteredIDÚGEN_RIDr™   rQ   ÚregisteredIDÚDirectoryNamerC   ÚGEN_DIRNAMEÚdirectoryNameÚ	IPAddressÚ	ipaddressÚIPv4NetworkÚnetwork_addressÚpackedr   Úint_to_bytesÚnum_addressesÚIPv6Networkr)   Ú	GEN_IPADDÚ	iPAddressÚ	OtherNameÚOTHERNAME_newÚtype_idÚnewÚd2i_ASN1_TYPEÚ_consume_errorsÚ
ValueErrorÚGEN_OTHERNAMEÚ	otherNameÚ
RFC822NameÚ	GEN_EMAILÚ
rfc822NameÚUniformResourceIdentifierÚGEN_URIÚuniformResourceIdentifierÚformat)r   r=   r×   Úia5rN   r(   rS   Údir_namerõ   ÚipaddrÚ
other_namerý   r&   Údata_ptr_ptrÚasn1_strr   r   r   rÎ   m  s°   


P±

ÿGº

AÀ
ÿÿÿÿ

/Ò

ÿÿ
é


ò


üÿrÎ   c                 C   sR   | j  ¡ }| j || j j¡}|D ]}t| |jƒ}| j  ||¡}|  |dk¡ q|S rX   )	r   Úsk_ASN1_OBJECT_new_nullr   r   Úsk_ASN1_OBJECT_freerm   rQ   Úsk_ASN1_OBJECT_pushr   )r   Úextended_key_usageÚekurP   rS   r(   r   r   r   Ú_encode_extended_key_usageÎ  s   
r  r"   rž   rŸ   r    r¡   r¢   r£   r¤   c           
      C   s^  | j  ¡ }| j || j j¡}|D ]œ}| j  ¡ }|  || jjk¡ |jrK| j  	¡ }|  || jjk¡ ||_|jD ]}| j  
|t| d¡}|  |dk¡ q7|jrj| j  ¡ }|  || jjk¡ t|_t| |jƒ|j_||_|jr”| j  ¡ }|  || jjk¡ t|_t| |jƒ}	|  |	| jjk¡ |	|j_||_|jržt| |jƒ|_| j  ||¡}|  |dk¡ q|S rX   )r   Úsk_DIST_POINT_new_nullr   r   Úsk_DIST_POINT_freeÚDIST_POINT_newr   r   Úreasonsr¦   r¥   Ú_CRLREASONFLAGSÚ	full_nameÚDIST_POINT_NAME_newr   rè   rº   r=   ÚfullnameÚ	distpointÚrelative_namer	   rJ   ÚrelativenameÚ
crl_issuerÚ	CRLissuerÚsk_DIST_POINT_push)
r   ÚcdpsÚcdpÚpointÚdpÚbitmaskr\   r(   Údpnr!  r   r   r   Ú_encode_cdps_freshest_crlå  sB   




ÿ

r+  c                 C   sV   | j  ¡ }|  || jjk¡ | j || j j¡}t| |jƒ}||_	t| |j
ƒ}||_|S r   )r   ÚNAME_CONSTRAINTS_newr   r   r   r   ÚNAME_CONSTRAINTS_freeÚ_encode_general_subtreeÚpermitted_subtreesÚpermittedSubtreesÚexcluded_subtreesÚexcludedSubtrees)r   Úname_constraintsÚncÚ	permittedÚexcludedr   r   r   Ú_encode_name_constraints  s   
ÿÿr7  c                 C   sb   | j  ¡ }|  || jjk¡ | j || j j¡}|jd ur#t| |jƒ|_	|j
d ur/t| |j
ƒ|_|S r   )r   ÚPOLICY_CONSTRAINTS_newr   r   r   r   ÚPOLICY_CONSTRAINTS_freeÚrequire_explicit_policyr   ÚrequireExplicitPolicyÚinhibit_policy_mappingÚinhibitPolicyMapping)r   Úpolicy_constraintsÚpcr   r   r   Ú_encode_policy_constraints  s   

ÿ
ÿr@  c                 C   sX   |d u r| j jS | j ¡ }|D ]}| j ¡ }t| |ƒ|_| j ||¡}|dks)J ‚q|S rX   )r   r   r   Úsk_GENERAL_SUBTREE_new_nullÚGENERAL_SUBTREE_newrÎ   ÚbaseÚsk_GENERAL_SUBTREE_push)r   ÚsubtreesÚgeneral_subtreesr=   Úgsr(   r   r   r   r.  0  s   

r.  c                 C   r2   r   )r1   Únonce)r   rH  r   r   r   Ú_encode_nonce>  r6   rI  )XÚ
__future__r   r   r   ra   rò   ru   Úcryptographyr   r   Ú0cryptography.hazmat.backends.openssl.decode_asn1r   r   r	   Úcryptography.x509.namer
   Úcryptography.x509.oidr   r   r   r   r    r)   r/   r1   r5   rC   rF   rJ   r:   rW   r_   rg   r�   r�   rm   rO   r�   r´   rÀ   rÉ   rØ   rº   rß   râ   rÎ   r  ÚReasonFlagsÚkey_compromiseÚca_compromiseÚaffiliation_changedÚ
supersededÚcessation_of_operationÚcertificate_holdÚprivilege_withdrawnÚaa_compromiser  r+  r7  r@  r.  rI  ÚBASIC_CONSTRAINTSÚSUBJECT_KEY_IDENTIFIERÚ	KEY_USAGEÚSUBJECT_ALTERNATIVE_NAMEÚISSUER_ALTERNATIVE_NAMEÚEXTENDED_KEY_USAGEÚAUTHORITY_KEY_IDENTIFIERÚCERTIFICATE_POLICIESÚAUTHORITY_INFORMATION_ACCESSÚCRL_DISTRIBUTION_POINTSÚFRESHEST_CRLÚINHIBIT_ANY_POLICYÚOCSP_NO_CHECKÚNAME_CONSTRAINTSÚPOLICY_CONSTRAINTSÚ_EXTENSION_ENCODE_HANDLERSÚ
CRL_NUMBERÚDELTA_CRL_INDICATORÚ_CRL_EXTENSION_ENCODE_HANDLERSÚCERTIFICATE_ISSUERÚ
CRL_REASONÚINVALIDITY_DATEÚ$_CRL_ENTRY_EXTENSION_ENCODE_HANDLERSÚNONCEÚ'_OCSP_REQUEST_EXTENSION_ENCODE_HANDLERSÚ)_OCSP_BASICRESP_EXTENSION_ENCODE_HANDLERSr   r   r   r   Ú<module>   s¢   
1 aø*ïùýÿÿ