o
    �õ±jæ0  ã                   @   sö  d dl mZ d dlT dZdZdZdZdZdZdZ	dZ
dZdZdZd	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%d
Z&dZ'dZ(dZ)dZ*dZ+e,Z-e,Z.e,Z/e0e/ƒZ1G dd„ de2ƒZ3G d d!„ d!e2ƒZ4e4Z5e4Z6e4Z7e0e7ƒZ8e4Z9e0e9ƒZ:e4Z;e4Z<e4Z=e0e4ƒZ>G d"d#„ d#e2ƒZ?G d$d%„ d%e2ƒZ@e0e@ƒZAG d&d'„ d'e2ƒZBG d(d)„ d)e2ƒZCG d*d+„ d+e2ƒZDe0eDƒZEG d,d-„ d-eFƒZGe0eGƒZHG d.d/„ d/e2ƒZIe0eIƒZJe0eCƒZKG d0d1„ d1e2ƒZLe0eLƒZMe,ZNe,ZOG d2d3„ d3eFƒZPe0ePƒZQG d4d5„ d5e jFƒZRG d6d7„ d7e2ƒZSe0eSƒZTG d8d9„ d9e2ƒZUe0eUƒZVe0eVƒZWG d:d;„ d;e2ƒZXe0eXƒZYeYZZG d<d=„ d=e2ƒZ[e0e[ƒZ\d[d?d@„Z]d\dAdB„Z^dCdD„ Z_d]dFdG„Z`e)fdHdI„Zaee B e"edJdEfdKdL„Zbd^dNdO„Zcd\dPdQ„Zdd_dSdT„Zed[dUdV„Zfd[dWdX„ZgdYdZ„ ZhdES )`é    )ÚGetLastError)Ú*é   é   é   é   é   é   é   é   é	   é
   é   é   é   é   é   é   é   é   é   é   é   é   i   i   é@   i   i   c                   @   s   e Zd ZdefdefgZdS )ÚFILETIMEÚdwLowDateTimeÚdwHighDateTimeN)Ú__name__Ú
__module__Ú__qualname__ÚDWORDÚ_fields_© r#   r#   ú–/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/minikerberos/common/windows/crypt32.pyr   ?   ó    þr   c                   @   s(   e Zd ZdefdefgZedd„ ƒZdS )ÚCRYPTOAPI_BLOBÚcbDataÚpbDatac                  C   s   t ƒ } d| _d | _| S ©Nr   )r&   r'   r(   )Útr#   r#   r$   Ú	get_emptyL   s   zCRYPTOAPI_BLOB.get_emptyN)r   r   r    r!   ÚLPBYTEr"   Ústaticmethodr+   r#   r#   r#   r$   r&   F   s    þr&   c                   @   ó   e Zd ZdefdefgZdS )ÚCRYPT_ALGORITHM_IDENTIFIERÚpszObjIdÚ
ParametersN)r   r   r    ÚLPSTRÚCRYPT_OBJID_BLOBr"   r#   r#   r#   r$   r/   ^   r%   r/   c                   @   ó"   e Zd ZdefdefdefgZdS )ÚCRYPT_ATTRIBUTEr0   ÚcValueÚrgValueN)r   r   r    r2   r!   ÚPCRYPT_ATTR_BLOBr"   r#   r#   r#   r$   r5   d   ó
    ýr5   c                   @   r.   )ÚCERT_PUBLIC_KEY_INFOÚ	AlgorithmÚ	PublicKeyN)r   r   r    r/   ÚCRYPT_BIT_BLOBr"   r#   r#   r#   r$   r:   l   r%   r:   c                   @   r4   )ÚCERT_EXTENSIONr0   Ú	fCriticalÚValueN)r   r   r    r2   ÚBOOLr3   r"   r#   r#   r#   r$   r>   r   r9   r>   c                   @   r.   )ÚCERT_ISSUER_SERIAL_NUMBERÚIssuerÚSerialNumberN)r   r   r    ÚCERT_NAME_BLOBÚCRYPT_INTEGER_BLOBr"   r#   r#   r#   r$   rB   y   r%   rB   c                   @   ó"   e Zd ZdefdefdefgZdS )ÚTMPUNION_CERT_IDÚIssuerSerialNumberÚKeyIdÚHashIdN)r   r   r    rB   ÚCRYPT_HASH_BLOBr"   r#   r#   r#   r$   rH   €   r9   rH   c                   @   r.   )ÚCERT_IDÚ
dwIdChoiceÚDUMMYUNIONNAMEN)r   r   r    r!   rH   r"   r#   r#   r#   r$   rM   ˆ   r%   rM   c                   @   sX   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gZdS )Ú	CERT_INFOÚ	dwVersionrD   ÚSignatureAlgorithmrC   Ú	NotBeforeÚNotAfterÚSubjectÚSubjectPublicKeyInfoÚIssuerUniqueIdÚSubjectUniqueIdÚ
cExtensionÚrgExtensionN)r   r   r    r!   rF   r/   rE   r   r:   r=   ÚPCERT_EXTENSIONr"   r#   r#   r#   r$   rP   ‘   s    ôrP   c                   @   r.   )ÚCMSG_SIGNER_ENCODE_INFO_UNIONÚ
hCryptProvÚ
hNCryptKeyN©r   r   r    Ú
HCRYPTPROVÚNCRYPT_KEY_HANDLEr"   r#   r#   r#   r$   r\   ¦   r%   r\   c                   @   r.   )rO   r]   r^   Nr_   r#   r#   r#   r$   rO   ­   r%   rO   c                   @   sR   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gZ
dS )ÚCMSG_SIGNER_ENCODE_INFOÚcbSizeÚ	pCertInforO   Ú	dwKeySpecÚHashAlgorithmÚpvHashAuxInfoÚ	cAuthAttrÚ
rgAuthAttrÚcUnauthAttrÚrgUnauthAttrÚSignerIdN)r   r   r    r!   Ú
PCERT_INFOÚLPVOIDr/   ÚPVOIDÚPCRYPT_ATTRIBUTErM   r"   r#   r#   r#   r$   rb   ²   s    õrb   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g	Zd
S )ÚCMSG_SIGNED_ENCODE_INFOrc   ÚcSignersÚ	rgSignersÚcCertEncodedÚrgCertEncodedÚcCrlEncodedÚrgCrlEncodedÚcAttrCertEncodedÚrgAttrCertEncodedN)r   r   r    r!   ÚPCMSG_SIGNER_ENCODE_INFOÚ
PCERT_BLOBÚ	PCRL_BLOBr"   r#   r#   r#   r$   rq   Æ   s    ÷rq   c                   @   s.   e Zd ZdefdefdefdefdefgZdS )ÚCERT_CONTEXTÚdwCertEncodingTypeÚpbCertEncodedÚcbCertEncodedrd   Ú
hCertStoreN)r   r   r    r!   r,   rm   Ú
HCERTSTOREr"   r#   r#   r#   r$   r}   Ö   s    ûr}   c                   @   rG   )ÚCMSG_STREAM_INFOÚ	cbContentÚpfnStreamOutputÚpvArgN)r   r   r    r!   ro   r"   r#   r#   r#   r$   rƒ   â   r9   rƒ   ÚMYc                 C   s,   t jj}ttg|_t|_t|_	|d | ƒ}|S ©N)
ÚwindllÚcrypt32ÚCertOpenSystemStoreWro   ÚLPWSTRÚargtypesr‚   ÚrestypeÚRaiseIfZeroÚerrcheck)ÚsubSystemProtocolÚ_CertOpenSystemStoreÚhandler#   r#   r$   ÚCertOpenSystemStoreì   ó   

r”   c                 C   s,   t jj}ttg|_t|_t|_	|| |ƒ} | S rˆ   )
r‰   rŠ   ÚCertCloseStorer‚   r!   r�   rA   rŽ   r�   r�   )r“   ÚdwFlagsÚ_CertCloseStorer#   r#   r$   r–   ÷   r•   r–   c                 C   s"   t jj}tg|_t|_|| ƒ d S rˆ   )r‰   rŠ   ÚCertFreeCertificateContextÚPCCERT_CONTEXTr�   rA   rŽ   )r“   Ú_CertFreeCertificateContextr#   r#   r$   r™     s   r™   Nc                 C   s&   t jj}ttg|_t|_|| |ƒ} | S rˆ   )r‰   rŠ   ÚCertEnumCertificatesInStorer‚   rš   r�   rŽ   )r“   Úprev_cert_handleÚ_CertEnumCertificatesInStorer#   r#   r$   rœ     s
   

rœ   c                 C   sf   t jj}ttttttg|_	t
|_t|_tdƒ}t
dƒ}tdƒ}|| |d t|ƒt|ƒt|ƒƒ |||fS r)   )r‰   rŠ   Ú!CryptAcquireCertificatePrivateKeyrš   r!   ro   Ú PHCRYPTPROV_OR_NCRYPT_KEY_HANDLEÚLPDWORDÚLPBOOLr�   rA   rŽ   r�   r�   ÚHANDLEÚbyref)r“   r—   Ú"_CryptAcquireCertificatePrivateKeyre   ÚfCallerFreeProvOrNCryptKeyÚhprovr#   r#   r$   rŸ     s   
rŸ   s   1.3.6.1.5.2.3.1c                 C   sT   t jj}ttttttg|_t|_	t
|_t|tƒrt |¡}||||t| ƒ||ƒ}|S rˆ   )r‰   rŠ   ÚCryptMsgOpenToEncoder!   ÚPCMSG_SIGNED_ENCODE_INFOr2   ÚPCMSG_STREAM_INFOr�   Ú	HCRYPTMSGrŽ   r�   r�   Ú
isinstanceÚstrÚctypesÚcreate_string_bufferr¤   )ÚMsgEncodeInfoÚdwMsgEncodingTyper—   Ú	dwMsgTypeÚInnerContentObjIDÚ
StreamInfoÚ_CryptMsgOpenToEncodeÚresr#   r#   r$   r¨   !  s   

r¨   Tc                 C   sL   t jj}ttttg|_t|_t	|_
t|ƒ}t |t|ƒ¡}|| |||ƒ}|S rˆ   )r‰   rŠ   ÚCryptMsgUpdater«   ro   r!   rA   r�   rŽ   r�   r�   Úlenr®   r¯   )Ú	hCryptMsgÚdataÚfFinalÚ_CryptMsgUpdateÚdlenr¶   r#   r#   r$   r·   -  s   r·   c                 C   sx   t jj}tttttg|_t|_	tdƒ}|| ||d t
|ƒƒ}t |j¡}|| ||t
|ƒt
|ƒƒ}|dkr9t tƒ ¡‚|jS )Nr   T)r‰   rŠ   ÚCryptMsgGetParamr«   r!   ro   r¡   r�   rA   rŽ   r¤   r®   r¯   ÚvalueÚWinErrorr   Úraw)r¹   ÚptypeÚdwIndexÚ_CryptMsgGetParamr½   r¶   rº   r#   r#   r$   r¾   9  s   r¾   Fc                 C   s@   ddl m} | j}t |j|j¡}|du r| |¡S | |¡jS )Nr   )ÚCertificateF)	Úasn1crypto.x509rÅ   Úcontentsr®   Ú	string_atr   r€   ÚloadÚnative)ÚpccertrÊ   rÅ   ÚcctxÚ	cert_datar#   r#   r$   Úget_certJ  s   
rÎ   c                 C   s�   t | ƒ}d }	 t||ƒ}t|ƒdu rn't|dƒ}d|v r5d|d v r4|d d }t|tƒr0|g}t|ƒ ntdƒ qt|ƒdu rFt|ƒ d S d S )NTFÚtbs_certificateÚsubjectú!)	r”   rœ   ÚboolrÎ   r¬   r­   ÚprintÚinputr™   )Úcertstore_nameÚchandleÚhcertÚcertificaterÐ   r#   r#   r$   Úlist_certstoreR  s&   


€ñÿrÙ   c                 C   sˆ   t |ƒ}d }	 t||ƒ}t|ƒdu rtd| |f ƒ‚t|ƒ}|jjd }t|tƒr:|D ]}|| kr8|||f  S q+n	|| krC|||fS q)NTFz/Couldnt find certificate for %s in certstore %sÚcommon_name)	r”   rœ   rÒ   Ú	ExceptionrÎ   rÐ   rÊ   r¬   Úlist)rÚ   rÕ   rÖ   r×   rØ   rÐ   Úser#   r#   r$   Úfind_cert_by_cnh  s"   

ÿÿ
ôrÞ   c                 C   sú   t | ƒ\}}}tƒ }d|_t ¡ |_tƒ }t t¡|_	| j
j|_||_||_||_d |_d|_d |_d|_d |_tƒ }| j
j|_| j
j|_tƒ }t t¡|_	d|_t |¡|_d|_t |¡|_d|_d |_ d|_!d |_"t#|ƒ}	t$|	|dƒ t%|	t&ƒ}
|
S )Ns   1.3.14.3.2.26r   r   T)'rŸ   r/   r0   r&   r+   r1   rb   r®   Úsizeofrc   rÇ   rd   rO   re   rf   rg   rh   ri   rj   rk   Ú	CERT_BLOBr€   r'   r   r(   rq   rr   Úpointerrs   rt   ru   rv   rw   rx   ry   r¨   r·   r¾   ÚCMSG_CONTENT_PARAM)r×   rº   r§   ÚkeyspecÚto_freeÚhashalgoÚSignersrÅ   r°   Úhmsgr¶   r#   r#   r$   Ú
pkcs7_sign{  s@   




rè   )r‡   )r   rˆ   )T)F)ir®   r   Ú#minikerberos.common.windows.definesÚ	CMSG_DATAÚCMSG_SIGNEDÚCMSG_ENVELOPEDÚCMSG_SIGNED_AND_ENVELOPEDÚCMSG_HASHEDÚCMSG_TYPE_PARAMrâ   ÚCMSG_BARE_CONTENT_PARAMÚCMSG_INNER_CONTENT_TYPE_PARAMÚCMSG_SIGNER_COUNT_PARAMÚCMSG_SIGNER_INFO_PARAMÚCMSG_SIGNER_CERT_INFO_PARAMÚ CMSG_SIGNER_HASH_ALGORITHM_PARAMÚCMSG_SIGNER_AUTH_ATTR_PARAMÚCMSG_SIGNER_UNAUTH_ATTR_PARAMÚCMSG_CERT_COUNT_PARAMÚCMSG_CERT_PARAMÚCMSG_CRL_COUNT_PARAMÚCMSG_CRL_PARAMÚCMSG_ENVELOPE_ALGORITHM_PARAMÚCMSG_RECIPIENT_COUNT_PARAMÚCMSG_RECIPIENT_INDEX_PARAMÚCMSG_RECIPIENT_INFO_PARAMÚCMSG_HASH_ALGORITHM_PARAMÚCMSG_HASH_DATA_PARAMÚCMSG_COMPUTED_HASH_PARAMÚCMSG_ENCRYPT_PARAMÚX509_ASN_ENCODINGÚX509_NDR_ENCODINGÚPKCS_7_ASN_ENCODINGÚPKCS_7_NDR_ENCODINGÚ"CMSG_CMS_ENCAPSULATED_CONTENT_FLAGÚCRYPT_ACQUIRE_CACHE_FLAGÚ CRYPT_ACQUIRE_USE_PROV_INFO_FLAGÚCRYPT_ACQUIRE_COMPARE_KEY_FLAGÚCRYPT_ACQUIRE_NO_HEALINGÚCRYPT_ACQUIRE_SILENT_FLAGÚ#CRYPT_ACQUIRE_NCRYPT_KEY_FLAGS_MASKÚ#CRYPT_ACQUIRE_ALLOW_NCRYPT_KEY_FLAGÚ$CRYPT_ACQUIRE_PREFER_NCRYPT_KEY_FLAGÚ"CRYPT_ACQUIRE_ONLY_NCRYPT_KEY_FLAGr£   r«   r‚   ÚHCRYPTPROV_OR_NCRYPT_KEY_HANDLEÚPOINTERr    Ú	Structurer   r&   rF   rE   ÚCRL_BLOBr|   rà   r{   r=   r3   rL   r8   r/   r5   rp   r:   r>   rB   ÚPCERT_ISSUER_SERIAL_NUMBERÚUnionrH   ÚPTMPUNION_CERT_IDrM   ÚPCERT_IDr[   rP   rm   r`   ra   r\   ÚPCMSG_SIGNER_ENCODE_INFO_UNIONrO   rb   rz   rq   r©   ÚPPCMSG_SIGNED_ENCODE_INFOr}   ÚPCERT_CONTEXTrš   rƒ   rª   r”   r–   r™   rœ   rŸ   r¨   r·   r¾   rÎ   rÙ   rÞ   rè   r#   r#   r#   r$   Ú<module>   sÈ   









