o
    .jL*                     @  s  U d dl mZ d dlZd dlZd dlZd dlmZmZmZmZm	Z	m
Z
 d dlmZ ddlmZ g dZded	< d
Zded< d<ddZe	ZeZdZdZdZdZedZedZG dd dejZG dd dejZG dd dejZ G dd dejZ!G dd  d ejZ"G d!d" d"ejZ#G d#d$ d$ejZ$G d%d& d&ejZ%dZ&dZ'dZ(ej)d'krz	ej*d(d)d*Z&W n e+y   dZ&Y nw e&j,Z'eeege'_-ee%e'_.e&j/Z(ee%ge(_-ee(_.d=d-d.Z0d>d0d1Z1d?d4d5Z2d@d7d8Z3dAd:d;Z4dZ5dS )B    )annotationsN)POINTERc_char_pc_int32c_ubytec_uint32c_void_p)enum_certificates   )root_der_certificates)ROOTMYCAz	list[str]WINDOWS_STORESz1.3.6.1.5.5.7.3.1strSERVER_AUTH_OIDreturnlist[bytes]c               	   C  s   g } t  }tD ]7}z,t|D ]%\}}}|sqt|ts t|vr q|dkr3||v r)q|| | | qW q ty>   Y qw t	t
 D ]}||vrT|| | | qD| S )Nx509_asn)setr   r	   
isinstanceboolr   addappendPermissionError_os_trusted_subset_ccadb_root_certificates)certificatesseensystem_store
cert_bytesencoding_typetrust r#   I/home/thesage/.local/lib/python3.10/site-packages/wassima/_os/_windows.pyr      s2   

	

r   i  z9SOFTWARE\Microsoft\SystemCertificates\AuthRoot\AutoUpdate
EncodedCtls   1.3.6.1.4.1.311.10.11.906082B060105050703010604551D2500c                   @      e Zd ZdefdeeffZdS )_CRYPT_BLOBcbDatapbDataN)__name__
__module____qualname___DWORDr   r   _fields_r#   r#   r#   r$   r)   ]   s    
r)   c                   @  r(   )
_CTL_USAGEcUsageIdentifierrgpszUsageIdentifierN)r,   r-   r.   r/   r   r   r0   r#   r#   r#   r$   r1   f   s    
r1   c                   @  s   e Zd ZdefdeffZdS )	_FILETIMEdwLowDateTimedwHighDateTimeN)r,   r-   r.   r/   r0   r#   r#   r#   r$   r4   n       r4   c                   @  s   e Zd ZdefdeffZdS )_CRYPT_ALGORITHM_IDENTIFIERpszObjId
ParametersN)r,   r-   r.   r   r)   r0   r#   r#   r#   r$   r8   v   r7   r8   c                   @  &   e Zd ZdefdefdeeffZdS )_CRYPT_ATTRIBUTEr9   cValuergValueN)r,   r-   r.   r   r/   r   r)   r0   r#   r#   r#   r$   r<   ~   
    
r<   c                   @  r;   )
_CTL_ENTRYSubjectIdentifier
cAttributergAttributeN)r,   r-   r.   r)   r/   r   r<   r0   r#   r#   r#   r$   r@      r?   r@   c                   @  sV   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e	fd
efde
ffZdS )	_CTL_INFO	dwVersionSubjectUsageListIdentifierSequenceNumber
ThisUpdate
NextUpdateSubjectAlgorithm	cCTLEntry
rgCTLEntry
cExtensionrgExtensionN)r,   r-   r.   r/   r1   r)   r4   r8   r   r@   r   r0   r#   r#   r#   r$   rD      s    
rD   c                	   @  sL   e Zd ZdefdeefdefdeefdefdefdeefdeffZd	S )
_CTL_CONTEXTdwMsgAndCertEncodingTypepbCtlEncodedcbCtlEncodedpCtlInfo
hCertStore	hCryptMsgpbCtlContentcbCtlContentN)	r,   r-   r.   r/   r   r   rD   r   r0   r#   r#   r#   r$   rP      s    


rP   win32crypt32T)use_last_errordatabytesc                 C  s6   z
t j| dd W S  ty   t |   Y S w )zASHA-1 digest used purely as an identity/join key against the CTL.F)usedforsecurity)hashlibsha1digest	TypeError)r\   r#   r#   r$   _sha1   s
   rc   bytes | Nonec               	   C  s   t jdkrdS ddl} z	| | jt}W n
 ty   Y dS w z<z
| |t\}}W n ty:   Y W | 	| dS w t
|ttfrT|dd dkrTt|W | 	| S W | 	| dS | 	| w )ztRead the trusted-root CTL blob from the registry. Returns the raw
    (DER / PKCS#7-signed) bytes if available.
    rY   Nr   r
      0)sysplatformwinregOpenKeyHKEY_LOCAL_MACHINE_AUTHROOT_AUTOUPDATE_KEYOSErrorQueryValueEx_AUTHROOT_CTL_VALUECloseKeyr   r]   	bytearray)rh   keyr\   _r#   r#   r$   _read_authroot_encoded_ctl   s(   
rs   entryr   c                 C  s   | j }| j}|r
|sdS t|D ]5}|| }|jtkrqt|jD ]!}|j| }|jrB|jrBt	
|j|j}t|v s>t|v rB  dS q! dS dS )zDReturn True if a CTL entry is trusted for TLS server authentication.TF)rB   rC   ranger9   _EKU_PROP_OIDr=   r>   r*   r+   ctypes	string_at_SERVER_AUTH_OID_DER_ANY_EKU_OID_DER)rt   countattrsjattrkblobrawr#   r#   r$   _entry_allows_server_auth   s"   

r   
set[bytes]c                  C  s   t  } tdu stdu s| st S tt| t| }|st S t }z4|jjj}|j}t	|j
D ]}|| }t|s9q.|j}|jrM|jrM|t|j|j q.W t| |S t| w )zUSHA-1 thumbprints of the roots the AuthRoot CTL trusts for TLS server authentication.N)rs   _CertCreateCTLContext_CertFreeCTLContextr   _ENCODING_TYPESlencontentsrT   rM   ru   rL   r   rA   r*   r+   r   rw   rx   )encodedctlthumbprintsinfoentriesirt   r   r#   r#   r$   _authroot_ctl_thumbprints   s,   

r   
candidatesc                   s(   | sg S t    sg S  fdd| D S )zIGuarantees every added certificate is one the OS's trust list recognizes!c                   s   g | ]
}t | v r|qS r#   )rc   ).0dertrustedr#   r$   
<listcomp>  s    z&_os_trusted_subset.<locals>.<listcomp>)r   )r   r#   r   r$   r     s   r   )r   r   )r\   r]   r   r]   )r   rd   )rt   r@   r   r   )r   r   )r   r   r   r   )6
__future__r   rw   r_   rf   r   r   r   r   r   r   sslr	   _embedr   r   r   __annotations__r   r/   _BOOLr   rk   rn   rv   r]   fromhexry   rz   	Structurer)   r1   r4   r8   r<   r@   rD   rP   _crypt32r   r   rg   WinDLLrl   CertCreateCTLContextargtypesrestypeCertFreeCTLContextrc   rs   r   r   r   __all__r#   r#   r#   r$   <module>   s^     
/

			







