o
    ïT·jIF  ã                   @   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r�e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(   úV/home/dinkstrade/pdmp-scanner/venv/lib/python3.10/site-packages/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�}|r£zt| ||||
||d� W n t jy¢   |d‚w ‚ W Y d}~nd}~ww W t|dƒ |r½t|ƒ dS dS t|dƒ |rËt|ƒ 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 }zªt 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}|r¡tdƒ}tttB d |d|t|ƒd ƒ}|dkrŽd|d›d|j› d�}n|j  !¡ }t "|¡}||_#||_$|d ‚W |r«t%|jƒ d S d S |rµt%|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_FLAGSÚ7CERT_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 