o
    "gIF                     @   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/ZJd0ZKd#ZLd1ZMd0ZNd2ZOeBeCB eDB eEB eFB eGB eHB eIB eJB ZPed3ZQed4ZRd5eSd6ed7ed8efd9d:ZTeQjUZUe8e9feU_VeTeU_WeQjXZXeee!ee
feX_Ve eX_YeTeX_WeQjZZZe eeeee$feZ_VeeZ_YeQj[Z[eeefe[_Ve#e[_YeTe[_WeQj\Z\ee#ee e)ee
e1fe\_Vee\_YeTe\_WeQj]Z]e	e0e4e6fe]_Vee]_YeQj^Z^e efe^_Vee^_YeTe^_WeQj_Z_e0fe__VeQj`Z`e#fe`_VeQjaZaefea_VeRjbZbeeeeeee
feb_Veeb_Y	dMd;ejcd<edee d=efdB d8dfd>d?Zgd;ejcd@edB dAe dBe
dCe)d=efdB dDehd8dfdEdFZid;ejcdGedee dAe dBe
dCe)d=efdB dDehd8dfdHdIZje jkdJejcd8ejld fdKdLZmd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  |st d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@ rat}n| jt j@ rjt}nd}zt| d|||
||d W n5 t jy } z(| jdd}|rzt| ||||
||d W n t jy   |dw  W Y d}~nd}~ww W t|d |rt| dS dS t|d |rt| w w )z9Verify the cert_chain from the server using Windows APIs.z#Peer sent no certificates to verifyNr   r   )chain_flagsT)binary_form) sslSSLCertVerificationError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VERIFY_CRL_CHECK_CHAIN!CERT_CHAIN_REVOCATION_CHECK_CHAINVERIFY_CRL_CHECK_LEAF$CERT_CHAIN_REVOCATION_CHECK_END_CERT_get_and_verify_cert_chain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|   ecustom_ca_certsr(   r(   r)   _verify_peercerts_implC  s   	



	




r   hChainEnginer   pPeerCertContextr   r|   c              	   C   sl  d }zt t }t||d |||d | |j}t }	t|	|	_t|	_d|	_	| j
du r,t|	_	|r3t||	_t }
tt |	t|
_| jtjkrK|
 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   Fi   zCertificate chain policy error z#xz [])&r   PCERT_CHAIN_CONTEXTCertGetCertificateChaincontentsrT   r   r3   AUTHTYPE_SERVERrU   rV   check_hostname$SECURITY_FLAG_IGNORE_CERT_CN_INVALIDr
   rW   rX   r   r	   rZ   verify_moder~   	CERT_NONErY   (CERT_CHAIN_POLICY_VERIFY_MODE_NONE_FLAGSr[    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   )n
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_FLAG*CERT_CHAIN_POLICY_IGNORE_INVALID_NAME_FLAG)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   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>   sx   00

	


	
\
Z
4 