o
    j                     @   s   d dl mZ d dlmZ d dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlmZ d dlmZmZ d dlmZ d dlmZ d dlmZ d d	lmZ d
d Zdd ZdddZG dd dZdd Zdd Zdd ZdS )    )pack)long_to_bytesN)x509)hashesserialization)rsa)default_backend)PEM)pkcs12c                  C   s>   t j t jj} t j dddt jjd}| | }t| d S )NiA     )yearmonthdaytzinfoi )datetimenowtimezoneutcinttotal_seconds)dt_nowcsharp_epochdelta r   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/impacket/examples/ntlmrelayx/utils/shadow_credentials.pygetTicksNow   s   r   c                   C   s
   t  jS )N)uuiduuid4bytesr   r   r   r   getDeviceId   s   
r      c                 C   s   t jd|d d}tttjj| g}tjtj	j
}t ||| t |tjdd |tjdd jtjdd ddd|t }||fS )	Ni  )public_exponentkey_sizebackendr   )daysiB  T)capath_length)critical)r   generate_private_keyr   NameNameAttributeNameOIDCOMMON_NAMEr   r   r   r   CertificateBuildersubject_nameissuer_name
public_keyserial_numberrandom_serial_numbernot_valid_before	timedeltanot_valid_afteradd_extensionBasicConstraintssignr   SHA256)subjectkSizekeyr.   r   certr   r   r   createSelfSignedX509Certificate"   sB   r>   c                   @   s@   e Zd Zedd Zdd Zdd Zdd Zd	d
 Zdd Z	dS )KeyCredentialc                 C   sv   t d| j}t|   j}t dt|}t|   j}t dt|}t ddd }d| | | | | | S )Nz<Ir      s   RSA1)r   r"   r   r0   public_numberselenn)r0   r;   exponentexponentSizemodulusmodulusSizepaddingr   r   r   raw_public_keyC   s   zKeyCredential.raw_public_keyc                 C   s   |  || _d| jf| _dtddf| _dtddf| _d|f| _dtd	dd
f| _dtd|f| _d| _	t
t| j d| _d S )N      z<Br      r         z<BBr@   	   z<Qi   zutf-8)rJ   _KeyCredential__publicKey_KeyCredential__rawKeyMaterialr   _KeyCredential__usage_KeyCredential__source_KeyCredential__deviceId_KeyCredential__customKeyInfo_KeyCredential__creationTime_KeyCredential__versionbase64	b64encodehashlibsha256digestdecode_KeyCredential__sha256)selfr<   deviceIdcurrentTimer   r   r   __init__P   s   
"zKeyCredential.__init__c                 C   s   d dd |D S )N    c                 S   s,   g | ]}t d t|d |d |d  qS )z<HBr   r   )r   rC   ).0fieldr   r   r   
<listcomp>^   s   , z,KeyCredential.__packData.<locals>.<listcomp>)join)r`   fieldsr   r   r   
__packData]   s   zKeyCredential.__packDatac                 C   s   t | jd | _d| jfS )Nz===r   )rY   	b64decoder_   _KeyCredential__identifier)r`   r   r   r   __getKeyIdentifier`   s   
z KeyCredential.__getKeyIdentifierc                 C   s   t | }d|fS )Nr@   )r[   r\   r]   )r`   binaryPropertiescomputed_hashr   r   r   __getKeyHashd   s   zKeyCredential.__getKeyHashc                 C   sR   t d| j}| | j| j| j| j| j| jg}| | 	 | 
|g}|| | S )Nz<L)r   rX   _KeyCredential__packDatarR   rS   rT   rU   rV   rW    _KeyCredential__getKeyIdentifier_KeyCredential__getKeyHash)r`   versionrn   
binaryDatar   r   r   
dumpBinaryh   s   
zKeyCredential.dumpBinaryN)
__name__
__module____qualname__staticmethodrJ   rc   rq   rr   rs   rv   r   r   r   r   r?   B   s    
r?   c                 C   s&   t | d}dt| d ||f S )NzUTF-8z
B:%d:%s:%sr@   )binasciihexlifyr^   rC   )ru   ownerhexdatar   r   r   toDNWithBinary2Stringz   s   r   c              	   C   s   t tj|dkrtjtj|stjtj|dd tjd|| d t	|
 d}t|d d}|| W d    d S 1 sFw   Y  d S )Nr   Texist_okrd   )namer<   r=   casencryption_algorithmz.pfxwb)rC   ospathdirnameexistsmakedirsr
   serialize_key_and_certificatesr   BestAvailableEncryptionencodeopenwrite)certificater<   path_to_filepasswordpfx_datafr   r   r   	exportPFX~   s   "r   c                 C   s   t tj|dkrtjtj|stjtj|dd | tjj	}t
|d d}|| W d    n1 s=w   Y  |jtjj	tjjt d}t
|d d}|| W d    d S 1 shw   Y  d S )Nr   Tr   z	_cert.pemr   )encodingformatr   z	_priv.pem)rC   r   r   r   r   r   public_bytesr   Encodingr	   r   r   private_bytesPrivateFormatTraditionalOpenSSLNoEncryption)r   r<   path_to_filescert_pemr   privpemr   r   r   	exportPEM   s   "r   )r    )structr   Cryptodome.Util.numberr   rY   r   r   timer[   r{   r   cryptographyr   cryptography.hazmat.primitivesr   r   )cryptography.hazmat.primitives.asymmetricr   cryptography.hazmat.backendsr   Cryptodome.IOr	   ,cryptography.hazmat.primitives.serializationr
   r   r   r>   r?   r   r   r   r   r   r   r   <module>   s,    
 8