o
    j0                     @   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   









