o
    zqf<D                     @   s\  d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZmZmZm	Z	m
Z
mZmZmZmZmZ d dlmZmZmZmZmZmZmZmZmZmZ d dlmZmZ ddlmZ eZeZ eZ!G d	d
 d
eZ"ee"Z#ee#Z$G dd deZ%ee%Z&G dd deZ'G dd deZ(eree( Z)nee(Z)G dd deZ*G dd deZ+ee+Z,G dd deZ-ee-Z.G dd deZ/ee/Z0ee0Z1G dd deZ2G dd deZ3ee3Z4G dd deZ5ee5Z6G dd  d eZ7ee7Z8eeZ9dZ:d!Z;d"Z<d#Z=dZ>ed$Z?d%Z@d&ZAd'ZBd(ZCd)ZDd*ZEd+ZFd,ZGd-ZHd.ZId/ZJd#ZKd0ZLd1ZMd2ZNeBeCB eDB eEB eFB eGB eHB eIB eJB ZOed3ZPed4ZQd5eRd6ed7ed8efd9d:ZSePjTZTe8e9feT_UeSeT_VePjWZWeee!ee
feW_Ue eW_XeSeW_VePjYZYe eeeee$feY_UeeY_XePjZZZeeefeZ_Ue#eZ_XeSeZ_VePj[Z[ee#ee e)ee
e1fe[_Uee[_XeSe[_VePj\Z\e	e0e4e6fe\_Uee\_XePj]Z]e efe]_Uee]_XeSe]_VePj^Z^e0fe^_UePj_Z_e#fe__UePj`Z`efe`_UeQjaZaeeeeeee
fea_Ueea_X	dMd;ejbd<eced d=eedB d8dfd>d?Zfd;ejbd@edB dAe dBe
dCe)d=eedB dDegd8dfdEdFZhd;ejbdGeced dAe dBe
dCe)d=eedB dDegd8dfdHdIZie jjdJejbd8ejkd fdKdLZldS )N    N)WinDLLWinError)
POINTER	Structurec_char_pc_ulongc_void_p	c_wchar_pcastcreate_unicode_bufferpointersizeof)
BOOLDWORDHANDLELONGLPCSTRLPCVOIDLPCWSTR
LPFILETIMELPSTRLPWSTR)TYPE_CHECKINGAny   )_set_ssl_context_verify_modec                   @   s.   e Zd ZdefdefdefdefdeffZdS )CERT_CONTEXTdwCertEncodingTypepbCertEncodedcbCertEncoded	pCertInfo
hCertStoreN)__name__
__module____qualname__r   r	   
HCERTSTORE_fields_ r(   r(   ^/root/parts/websockify/install/lib/python3.10/site-packages/pip/_vendor/truststore/_windows.pyr   '       r   c                   @   s    e Zd ZdefdeeffZdS )CERT_ENHKEY_USAGEcUsageIdentifierrgpszUsageIdentifierN)r#   r$   r%   r   r   r   r'   r(   r(   r(   r)   r+   5   s    
r+   c                   @   s   e Zd ZdefdeffZdS )CERT_USAGE_MATCHdwTypeUsageN)r#   r$   r%   r   r+   r'   r(   r(   r(   r)   r.   ?       r.   c                
   @   sF   e Zd Zdefdefdefdefdefdefdefdefd	eff	Zd
S )CERT_CHAIN_PARAcbSizeRequestedUsageRequestedIssuancePolicydwUrlRetrievalTimeoutfCheckRevocationFreshnessTimedwRevocationFreshnessTimepftCacheResyncpStrongSignParadwStrongSignFlagsN)	r#   r$   r%   r   r.   r   r   r	   r'   r(   r(   r(   r)   r2   F   s    r2   c                   @   s   e Zd ZdefdeffZdS )CERT_TRUST_STATUSdwErrorStatusdwInfoStatusN)r#   r$   r%   r   r'   r(   r(   r(   r)   r<   Z   r1   r<   c                   @   s:   e Zd ZdefdefdefdefdefdefdeffZ	dS )	CERT_CHAIN_ELEMENTr3   pCertContextTrustStatuspRevocationInfopIssuanceUsagepApplicationUsagepwszExtendedErrorInfoN)
r#   r$   r%   r   PCERT_CONTEXTr<   r	   PCERT_ENHKEY_USAGEr   r'   r(   r(   r(   r)   r?   a   s    r?   c                   @   s>   e Zd ZdefdefdefdeefdefdefdeffZ	dS )	CERT_SIMPLE_CHAINr3   rA   cElement
rgpElementpTrustListInfofHasRevocationFreshnessTimer8   N)
r#   r$   r%   r   r<   r   PCERT_CHAIN_ELEMENTr	   r   r'   r(   r(   r(   r)   rH   p   s    
rH   c                	   @   sD   e Zd ZdefdefdefdeefdefdefdefdeffZ	d	S )
CERT_CHAIN_CONTEXTr3   rA   cChainrgpChaincLowerQualityChainContextrgpLowerQualityChainContextrL   r8   N)
r#   r$   r%   r   r<   r   PCERT_SIMPLE_CHAINr	   r   r'   r(   r(   r(   r)   rN      s    
rN   c                   @   s(   e Zd ZdefdefdefdeffZdS ) SSL_EXTRA_CERT_CHAIN_POLICY_PARAr3   
dwAuthType	fdwCheckspwszServerNameN)r#   r$   r%   r   r   r'   r(   r(   r(   r)   rT      s    rT   c                   @   s"   e Zd ZdefdefdeffZdS )CERT_CHAIN_POLICY_PARAr3   dwFlagspvExtraPolicyParaN)r#   r$   r%   r   r	   r'   r(   r(   r(   r)   rX      s
    rX   c                   @   s.   e Zd ZdefdefdefdefdeffZdS )CERT_CHAIN_POLICY_STATUSr3   dwErrorlChainIndexlElementIndexpvExtraPolicyStatusN)r#   r$   r%   r   r   r	   r'   r(   r(   r(   r)   r[      r*   r[   c                   @   s^   e Zd Zdefdefdefdefdefdefdefdefd	efd
efdefdefdeffZdS )CERT_CHAIN_ENGINE_CONFIGr3   hRestrictedRoothRestrictedTrusthRestrictedOthercAdditionalStorerghAdditionalStorerY   r6   MaximumCachedCertificatesCycleDetectionModulushExclusiveRoothExclusiveTrustedPeopledwExclusiveFlagsN)r#   r$   r%   r   r&   r	   r'   r(   r(   r(   r)   r`      s    r`   i   s   Memory   s   1.3.6.1.5.5.7.3.1i   i             @          i   i   i @     i   i   zcrypt32.dllzkernel32.dllresult_argsreturnc                 C   s   | st  |S Nr   )rs   rt   ru   r(   r(   r)   _handle_win_error   s   rx   ssl_context
cert_chainserver_hostnamec                 C   s^  d}t tdddd}z|dd D ]}t|ttB |t|td q|d }tttB |t|}t }d|_	t
d t|_t }||_t }	||	_t|	|	_t|	}
| jtj@ rZt}n| jtj@ rct}nd}zt| d|||
||d W n tjy   | jdd}|rt| ||||
||d n Y nw W t|d |rt| dS dS t|d |rt| w w )z9Verify the cert_chain from the server using Windows APIs.Nr   r   )chain_flagsT)binary_form) CertOpenStoreCERT_STORE_PROV_MEMORY CertAddEncodedCertificateToStoreX509_ASN_ENCODINGPKCS_7_ASN_ENCODINGlenCERT_STORE_ADD_USE_EXISTINGCertCreateCertificateContextr+   r,   r   OID_PKIX_KP_SERVER_AUTHr-   r.   r0   r2   r4   r   r3   r   verify_flagssslVERIFY_CRL_CHECK_CHAIN!CERT_CHAIN_REVOCATION_CHECK_CHAINVERIFY_CRL_CHECK_LEAF$CERT_CHAIN_REVOCATION_CHECK_END_CERT_get_and_verify_cert_chainSSLCertVerificationErrorget_ca_certs_verify_using_custom_ca_certsCertCloseStoreCertFreeCertificateContext)ry   rz   r{   r@   hIntermediateCertStore
cert_bytes	leaf_certcert_enhkey_usagecert_usage_matchchain_params
pChainParar|   custom_ca_certsr(   r(   r)   _verify_peercerts_implB  s   


	



r   hChainEnginer   pPeerCertContextr   r|   c              	   C   sp  d }zt t }t||d |||d | |j}t }	t|	|	_t|	_d|	_	|r+t
||	_t }
tt |	t|
_| jtjkrC|
 jtO  _| jsM|
 jtO  _t|
|
_t |
}t }t||_t |}tt||| |j}|rtd}tttB d |d|t|d }|dkrd|dd|j d}n|j ! }t"|}||_#||_$|d W |rt%|j d S d S |rt%|j w w )Nr   i   zCertificate chain policy error z#xz [])&r   PCERT_CHAIN_CONTEXTCertGetCertificateChaincontentsrT   r   r3   AUTHTYPE_SERVERrU   rV   r
   rW   rX   r   r	   rZ   verify_moder   	CERT_NONErY   (CERT_CHAIN_POLICY_VERIFY_MODE_NONE_FLAGScheck_hostname*CERT_CHAIN_POLICY_IGNORE_INVALID_NAME_FLAGr[    CertVerifyCertificateChainPolicyCERT_CHAIN_POLICY_SSLr\   r   FormatMessageWFORMAT_MESSAGE_FROM_SYSTEMFORMAT_MESSAGE_IGNORE_INSERTSr^   valuestripr   verify_messageverify_codeCertFreeCertificateChain)ry   r   r   r   r   r{   r|   ppChainContextpChainContext ssl_extra_cert_chain_policy_parachain_policypPolicyParapolicy_statuspPolicyStatus
error_codeerror_message_buferror_message_charserror_messageerrr(   r(   r)   r     s   	






r   r   c              	   C   s   d }t tdd dd }zF|D ]}	t|ttB |	t|	td  qt }
t|
|
_	||
_
t|
}tt }t|| |j}t| |||||| W |rJt| t|d d S |rWt| t|d w )Nr   )r~   r   r   r   r   r   r   r`   r   r3   rh   r   HCERTCHAINENGINE CertCreateCertificateChainEnginer   r   CertFreeCertificateChainEnginer   )ry   r   r   r   r   r{   r|   r   hRootCertStorer   cert_chain_engine_configpConfigphChainEnginer(   r(   r)   r     sJ   	


r   ctxc              	   c   sP    | j }| j}d| _ t| tj zd V  W || _ t| | d S || _ t| | w )NF)r   r   r   r   r   )r   r   r   r(   r(   r)   _configure_context   s   r   rw   )m
contextlibr   typingctypesr   r   r   r   r   r   r	   r
   r   r   r   r   ctypes.wintypesr   r   r   r   r   r   r   r   r   r   r   r   _ssl_constantsr   r   r&   HCRYPTPROV_LEGACYr   rF   PCCERT_CONTEXTr+   rG   r.   r2   PCERT_CHAIN_PARAr<   r?   rM   rH   rS   rN   r   PCCERT_CHAIN_CONTEXTrT   rX   PCERT_CHAIN_POLICY_PARAr[   PCERT_CHAIN_POLICY_STATUSr`   PCERT_CHAIN_ENGINE_CONFIGPHCERTCHAINENGINEr   r   r   r   USAGE_MATCH_TYPE_ORr   r   r   1CERT_CHAIN_POLICY_IGNORE_ALL_NOT_TIME_VALID_FLAGS7CERT_CHAIN_POLICY_IGNORE_INVALID_BASIC_CONSTRAINTS_FLAG'CERT_CHAIN_POLICY_ALLOW_UNKNOWN_CA_FLAGr   )CERT_CHAIN_POLICY_IGNORE_WRONG_USAGE_FLAG,CERT_CHAIN_POLICY_IGNORE_INVALID_POLICY_FLAG.CERT_CHAIN_POLICY_IGNORE_ALL_REV_UNKNOWN_FLAGS%CERT_CHAIN_POLICY_ALLOW_TESTROOT_FLAG%CERT_CHAIN_POLICY_TRUST_TESTROOT_FLAGr   r   r   r   r   wincryptkernel32boolrx   r   argtypeserrcheckr~   restyper   r   r   r   r   r   r   r   r   
SSLContextlistbytesstrr   intr   r   contextmanagerIteratorr   r(   r(   r(   r)   <module>   sv   00

	


	
R
X
4 