a
     {a                     @   sJ  d dl Z d dlZe jd d dejd< d dlm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lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm Z! d dl"m#Z#m$Z$ G dd de%Z&G dd de%Z'G dd de(Z)dd Z*dd Z+dd Z,d d! Z-d"d# Z.d$d% Z/d&d' Z0G d(d) d)e%Z1G d*d+ d+e1Z2G d,d- d-e2Z3G d.d/ d/e2Z4G d0d1 d1e4Z5G d2d3 d3e4Z6G d4d5 d5e1Z7G d6d7 d7e%Z8G d8d9 d9e8Z9G d:d; d;e9Z:G d<d= d=e9Z;G d>d? d?e9Z<G d@dA dAe8Z=G dBdC dCe8Z>G dDdE dEe8Z?G dFdG dGe8Z@e&jAe3e&jBe5e&jCe6e&jDe7iZEe'jFe<e'jGe:e'jHe;e'jIe=e'jJe>e'jKe?e'jLe@iZMdHdI ZNdJdK ZOG dLdM dMe%ZPdNdO ZQdPdQ ZRdidRdSZSdjdTdUZTdVdW ZUdXdY ZVdZd[ ZWd\d] ZXd^d_ ZYd`da ZZdkdbdcZ[ddde Z\G dfdg dgeZ]e^dhkrFd dl_Z_e_`  dS )l    Nz
bin/python1ZPYTHONUNBUFFERED)gcd)reduce)packunpack)crc32)hashes)hmac)
algorithms)modes)Cipher)default_backend)
PBKDF2HMAC)TestCase)Credentials)generate_random_bytes)
get_string	get_bytesc                   @   s(   e Zd ZdZdZdZdZdZdZdZ	dS )	Enctype                     N)
__name__
__module____qualname__ZDES_CRCZDES_MD4ZDES_MD5DES3AES128AES256RC4 r#   r#   :/usr/lib/python3/dist-packages/samba/tests/krb5/kcrypto.pyr   D   s   r   c                   @   s4   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdS )	Cksumtyper   r   r                  r   ivN)r   r   r   CRC32ZMD4ZMD4_DESMD5ZMD5_DES	SHA1_DES3SHA1SHA1_AES128SHA1_AES256HMAC_MD5r#   r#   r#   r$   r%   N   s   r%   c                   @   s   e Zd ZdS )InvalidChecksumN)r   r   r   r#   r#   r#   r$   r2   [   s   r2   c                 C   s    |t | |  | }| t| S N)lenbytes)spadsizeZpadlenr#   r#   r$   _zeropad_   s    r8   c                 C   s,   t | t |ksJ tdd t| |D S )Nc                 S   s   g | ]\}}||A qS r#   r#   ).0xyr#   r#   r$   
<listcomp>h       z_xorbytes.<locals>.<listcomp>)r4   r5   zip)Zb1Zb2r#   r#   r$   	_xorbytese   s    r?   c                 C   s@   t | t |ksJ d}t| |D ]\}}|||A O }q"|dkS )Nr   )r4   r>   )Zmac1Zmac2resr:   r;   r#   r#   r$   
_mac_equalk   s
    rA   c                 C   s"   t | t }||  | S r3   )r   ZHashr   updatefinalize)stringalgo_clsZhash_ctxr#   r#   r$   SIMPLE_HASHu   s    
rF   c                 C   s$   t | | t }|| | S r3   )r	   ZHMACr   rB   rC   )keyrD   rE   Zhmac_ctxr#   r#   r$   	HMAC_HASH{   s    
rH   c                    sr   dd dd }t }| t| }dfddt|| D   fddtd	|D }t||S )
Nc                    s<   |d t  |d   t fddtt D S )Nr'   c                    s8   g | ]0}|   ? |  d   d > d@ B qS r   r'      r#   r9   inbytesZremainstrr#   r$   r<      s   z0_nfold.<locals>.rotate_right.<locals>.<listcomp>)r4   r5   range)rO   Znbitsr#   rM   r$   rotate_right   s    
z_nfold.<locals>.rotate_rightc                    sZ   t |  dd t| |D tdd D rH fddt D qtdd D S )Nc                 S   s   g | ]\}}|| qS r#   r#   )r9   abr#   r#   r$   r<      r=   z7_nfold.<locals>.add_ones_complement.<locals>.<listcomp>c                 s   s   | ]}|d @ V  qdS )i Nr#   r9   r:   r#   r#   r$   	<genexpr>   r=   z6_nfold.<locals>.add_ones_complement.<locals>.<genexpr>c                    s,   g | ]$}|  d   d? | d@  qS rI   r#   rK   nvr#   r$   r<      r=   c                 S   s   g | ]}|qS r#   r#   rT   r#   r#   r$   r<      r=   )r4   r>   anyrP   r5   )Zstr1Zstr2r#   rV   r$   add_ones_complement   s
    z#_nfold.<locals>.add_ones_complementr=   c                 3   s   | ]} d | V  qdS )   Nr#   rK   )rQ   rO   r#   r$   rU      r=   z_nfold.<locals>.<genexpr>c                 3   s   | ]} ||  V  qd S r3   r#   r9   p)bigstrrN   r#   r$   rU      r=   r   )r4   r   joinrP   r   )rO   rN   rZ   ZslenZlcmZslicesr#   )r^   rN   rQ   rO   r$   _nfold   s    "r`   c                 C   s   | dv S )N)s   s   s   s   s   s   s   s   s   s   s   s   s   s   s   s   r#   )keybytesr#   r#   r$   _is_weak_des_key   s    rb   c                   @   s   e Zd Zedd ZdS )_EnctypeProfilec                 C   s"   t || jkrtdt| j|S )NWrong seed length)r4   seedsize
ValueErrorKeyenctype)clsseedr#   r#   r$   random_to_key   s    z_EnctypeProfile.random_to_keyN)r   r   r   classmethodrk   r#   r#   r#   r$   rc      s   rc   c                   @   s<   e Zd Zedd Zedd Zedd Zedd Zd	S )
_SimplifiedEnctypec                 C   sL   t || j}d}t|| jk r8| ||}||7 }|}q| |d| j S )Nr=   r   )r`   	blocksizer4   re   basic_encryptrk   )ri   rG   Zconstant	plaintextZrndseed
ciphertextr#   r#   r$   derive   s    z_SimplifiedEnctype.derivec           	      C   st   |  |td|d}|  |td|d}|d u r:t| j}|t|| j }t|j|| j}| 	|||d | j
  S )N>iBU      )rr   r   get_random_bytesrn   r8   r7   rH   contentshashalgoro   macsize)	ri   rG   keyusagerp   
confounderkikebasic_plaintextr	   r#   r#   r$   encrypt   s    
z_SimplifiedEnctype.encryptc                 C   s   |  |td|d}|  |td|d}t|| j| j k rDtd|d | j  || j d   }}t|| j dkrtd| ||}t|j	|| j
}	|	d | j }
t||
std|| jd  S )Nrs   rt   ru   ciphertext too shortr   z,ciphertext does not meet padding requirementciphertext integrity failure)rr   r   r4   rn   ry   rf   r7   basic_decryptrH   rw   rx   rA   r2   )ri   rG   rz   rq   r|   r}   basic_ctextZmacr~   r	   Zexpmacr#   r#   r$   decrypt   s    "
z_SimplifiedEnctype.decryptc                 C   s<   t || j}|d t|| j   }| |d}| ||S )Ns   prf)rF   rx   r4   rn   rr   ro   )ri   rG   rD   ZhashvalZ	truncatedZkpr#   r#   r$   prf   s    z_SimplifiedEnctype.prfN)r   r   r   rl   rr   r   r   r   r#   r#   r#   r$   rm      s   


	
rm   c                   @   s\   e Zd ZejZdZdZdZdZ	dZ
ejZedd Zedd Zed	d
 Zedd ZdS )_DES3CBC      r'      c                 C   sd   dd }t |dkrtd||d d ||dd ||dd    }}}t| j|| | S )Nc                    s   dd  t dksJ  fddD } tfddtdD }tdd ||g D }t|r~t|d d	A g|d< |S )
Nc                 S   s*   | dM } t | d@ dd r"| S | dB S )Nr   r   r   )bincount)rS   r#   r#   r$   parity  s    z6_DES3CBC.random_to_key.<locals>.expand.<locals>.parityr&   c                    s   g | ]} |d @ qS )r   r#   r9   rS   )r   r#   r$   r<     r=   z:_DES3CBC.random_to_key.<locals>.expand.<locals>.<listcomp>c                 3   s"   | ]} | d @ |d  > V  qdS )r   Nr#   rK   )rj   r#   r$   rU     r=   z9_DES3CBC.random_to_key.<locals>.expand.<locals>.<genexpr>c                 S   s   g | ]}|qS r#   r#   r   r#   r#   r$   r<     r=      )r4   sumrP   r5   rb   )rj   Z
firstbytesZlastbytera   r#   )r   rj   r$   expand  s    z&_DES3CBC.random_to_key.<locals>.expandr   rd   r&   r)   )r4   rf   rg   rh   )ri   rj   r   k1k2Zk3r#   r#   r$   rk     s
    4z_DES3CBC.random_to_keyc                 C   s8   |d ur|dkrt d| t|| d}| |dS )Nr=   z%Invalid DES3 string-to-key parametersr      kerberos)rf   rk   r`   rr   )ri   rD   saltparamskr#   r#   r$   string_to_key&  s    z_DES3CBC.string_to_keyc                 C   sN   t |d dksJ t|j}ttd}t||t 	 }|
|}|S Nr'   r   )r4   ciphers	TripleDESrw   r   CBCr5   r   r   	encryptorrB   )ri   rG   rp   algocbcr   rq   r#   r#   r$   ro   -  s    
z_DES3CBC.basic_encryptc                 C   sN   t |d dksJ t|j}ttd}t||t 	 }|
|}|S r   )r4   r   r   rw   r   r   r5   r   r   	decryptorrB   )ri   rG   rq   r   r   r   rp   r#   r#   r$   r   6  s    
z_DES3CBC.basic_decryptN)r   r   r   r   r   rh   keysizere   rn   r7   ry   r   r.   rx   rl   rk   r   ro   r   r#   r#   r#   r$   r     s   


r   c                   @   sB   e Zd ZdZdZdZejZe	dd Z
e	dd Ze	dd	 Zd
S )_AESEnctyper   r   r(   c           	      C   sR   t d|p
d\}t|}tt | j||t d}||}| |}| |dS )Nz>Ls      )	algorithmZlengthr   
iterationsZbackendr   )	r   r   r   r   r.   re   r   rr   rk   )	ri   rD   r   r   r   ZpwbytesZkdfrj   Ztkeyr#   r#   r$   r   G  s    

z_AESEnctype.string_to_keyc                    s   t |dksJ t|j}ttd}t||t   fdd}|t	|d}t |dkrt |d pld}|d d |dd   |dd d |  }|S )Nr   c                    s      }|| }|S r3   )r   rB   )rp   r   rq   aes_ctxr#   r$   aes_encrypt\  s    
z._AESEnctype.basic_encrypt.<locals>.aes_encryptii)
r4   r   AESrw   r   r   r5   r   r   r8   )ri   rG   rp   r   r   r   ctextlastlenr#   r   r$   ro   T  s    ,z_AESEnctype.basic_encryptc                    s  t dksJ t|j}ttd}t||t   fdd}t dkrX|S fddt	dt dD }t |d }td}d}	|d d	 D ]}
|	t
||
|7 }	|
}q||d	 }
t
|
d | |d }|
|d  }|	t
||d | |7 }	|	| S )
Nr   c                    s      }|| }|S r3   )r   rB   )rq   r   rp   r   r#   r$   aes_decryptq  s    
z._AESEnctype.basic_decrypt.<locals>.aes_decryptc                    s   g | ]} ||d   qS )r   r#   r\   )rq   r#   r$   r<   y  r=   z-_AESEnctype.basic_decrypt.<locals>.<listcomp>r   r=   r   )r4   r   r   rw   r   r   r5   r   r   rP   r?   )ri   rG   rq   r   r   r   Zcblocksr   Zprev_cblockrp   rS   ZlastplaintextZomittedr#   )r   rq   r$   r   i  s&    z_AESEnctype.basic_decryptN)r   r   r   rn   r7   ry   r   r.   rx   rl   r   ro   r   r#   r#   r#   r$   r   @  s   

r   c                   @   s   e Zd ZejZdZdZdS )
_AES128CTSr   N)r   r   r   r   r    rh   r   re   r#   r#   r#   r$   r     s   r   c                   @   s   e Zd ZejZdZdZdS )
_AES256CTS    N)r   r   r   r   r!   rh   r   re   r#   r#   r#   r$   r     s   r   c                   @   sV   e Zd ZejZdZdZedd Z	e
dd Ze
dd Ze
dd	 Ze
d
d ZdS )_RC4r   c                 C   s(   ddd}| |v r||  n| }t d|S )Nr'   r[   )r   r   <i)r   )rz   tableZmsusager#   r#   r$   	usage_str  s    
z_RC4.usage_strc                 C   s4   t |}t }|  || | }t| j|S r3   )r   r   Zset_anonymousZset_passwordZget_nt_hashrg   rh   )ri   rD   r   r   Z
utf8stringtmpZnthashr#   r#   r$   r     s    
z_RC4.string_to_keyc           
      C   st   |d u rt d}t|j| |tj}t||| tj}t||tj}tt|d t	 
 }||| }	||	 S )Nr'   )rv   rH   rw   r   r   r,   r   r   ARC4r   r   rB   )
ri   rG   rz   rp   r{   r|   cksumr}   r   r   r#   r#   r$   r     s    z_RC4.encryptc                 C   s   t |dk rtd|d d |dd   }}t|j| |tj}t||tj}tt	|d t
  }||}	t||	tj}
t||
}|s|dkrt|jtddtj}t||	tj}
t||
}|std|	dd  S )Nr   r   r   	   r   r'   r   )r4   rf   rH   rw   r   r   r,   r   r   r   r   r   rB   rA   r   r2   )ri   rG   rz   rq   r   r   r|   r}   r   r~   Z	exp_cksumokr#   r#   r$   r     s$    


z_RC4.decryptc                 C   s   t |j|tjS r3   )rH   rw   r   r.   )ri   rG   rD   r#   r#   r$   r     s    z_RC4.prfN)r   r   r   r   r"   rh   r   re   staticmethodr   rl   r   r   r   r   r#   r#   r#   r$   r     s   



r   c                   @   s   e Zd Zedd ZdS )_ChecksumProfilec                 C   s$   |  |||}t||s tdd S )Nzchecksum verification failure)checksumrA   r2   )ri   rG   rz   textr   Zexpectedr#   r#   r$   verify  s    
z_ChecksumProfile.verifyN)r   r   r   rl   r   r#   r#   r#   r$   r     s   r   c                       s8   e Zd Zedd Ze fddZedd Z  ZS )_SimplifiedChecksumc                 C   s6   | j |td|d}t|j|| j j}|d | j S )Nrs      )encrr   r   rH   rw   rx   ry   )ri   rG   rz   r   Zkcr	   r#   r#   r$   r     s    z_SimplifiedChecksum.checksumc                    s0   |j | jj krtdtt| |||| d S NzWrong key type for checksum)rh   r   rf   superr   r   ri   rG   rz   r   r   	__class__r#   r$   r     s    z_SimplifiedChecksum.verifyc                 C   s   | j S r3   )ry   ri   r#   r#   r$   checksum_len  s    z _SimplifiedChecksum.checksum_lenr   r   r   rl   r   r   r   __classcell__r#   r#   r   r$   r     s   
r   c                   @   s   e Zd ZdZeZdS )_SHA1AES128r(   N)r   r   r   ry   r   r   r#   r#   r#   r$   r     s   r   c                   @   s   e Zd ZdZeZdS )_SHA1AES256r(   N)r   r   r   ry   r   r   r#   r#   r#   r$   r     s   r   c                   @   s   e Zd ZdZeZdS )	_SHA1DES3r   N)r   r   r   ry   r   r   r#   r#   r#   r$   r     s   r   c                       s8   e Zd Zedd Ze fddZedd Z  ZS )_HMACMD5c                 C   s4   t |jdtj}tt|| tj}t ||tjS )Ns   signaturekey )rH   rw   r   r,   rF   r   r   )ri   rG   rz   r   ZksignZmd5hashr#   r#   r$   r     s    z_HMACMD5.checksumc                    s.   |j tjkrtdtt| |||| d S r   )rh   r   r"   rf   r   r   r   r   r   r#   r$   r     s    z_HMACMD5.verifyc                 C   s   t jjS r3   r   r,   digest_sizer   r#   r#   r$   r     s    z_HMACMD5.checksum_lenr   r#   r#   r   r$   r     s   
r   c                   @   s$   e Zd Zedd Zedd ZdS )_MD5c                 C   s   t |tjS r3   )rF   r   r,   ri   rG   rz   r   r#   r#   r$   r   #  s    z_MD5.checksumc                 C   s   t jjS r3   r   r   r#   r#   r$   r   (  s    z_MD5.checksum_lenNr   r   r   rl   r   r   r#   r#   r#   r$   r   "  s   
r   c                   @   s$   e Zd Zedd Zedd ZdS )_SHA1c                 C   s   t |tjS r3   )rF   r   r.   r   r#   r#   r$   r   .  s    z_SHA1.checksumc                 C   s   t jjS r3   )r   r.   r   r   r#   r#   r$   r   3  s    z_SHA1.checksum_lenNr   r#   r#   r#   r$   r   -  s   
r   c                   @   s$   e Zd Zedd Zedd ZdS )_CRC32c                 C   s   t |d d@ }td|S )Nl    z<I)r   r   r   r#   r#   r$   r   9  s    z_CRC32.checksumc                 C   s   dS )N   r#   r   r#   r#   r$   r   ?  s    z_CRC32.checksum_lenNr   r#   r#   r#   r$   r   8  s   
r   c                 C   s   | t vrtd|  t |  S )NzInvalid enctype %d)_enctype_tablerf   )rh   r#   r#   r$   _get_enctype_profileW  s    r   c                 C   s   | t vrtd|  t |  S )NzInvalid cksumtype %d)_checksum_tablerf   )	cksumtyper#   r#   r$   _get_checksum_profile]  s    r   c                   @   s   e Zd Zdd ZdS )rg   c                 C   s.   t |}t||jkrtd|| _|| _d S )NzWrong key length)r   r4   r   rf   rh   rw   )selfrh   rw   er#   r#   r$   __init__d  s
    zKey.__init__N)r   r   r   r   r#   r#   r#   r$   rg   c  s   rg   c                 C   s   t | }|jS r3   )r   re   )rh   r   r#   r#   r$   re   l  s    re   c                 C   s(   t | }t||jkrtd||S )NzWrong crypto seed length)r   r4   re   rf   rk   )rh   rj   r   r#   r#   r$   rk   q  s    rk   c                 C   s   t | }||||S r3   )r   r   )rh   rD   r   r   r   r#   r#   r$   r   x  s    r   c                 C   s   t | j}|| |||S r3   )r   rh   r   )rG   rz   rp   r{   r   r#   r#   r$   r   }  s    
r   c                 C   s   t | j}|| ||S r3   )r   rh   r   )rG   rz   rq   r   r#   r#   r$   r     s    
r   c                 C   s   t | j}|| |S r3   )r   rh   r   )rG   rD   r   r#   r#   r$   r     s    
r   c                 C   s   t | }||||S r3   )r   r   )r   rG   rz   r   cr#   r#   r$   make_checksum  s    r   c                 C   s   t | }||||| d S r3   )r   r   )r   rG   rz   r   r   r   r#   r#   r$   verify_checksum  s    r   c                 C   s   t | }| S r3   )r   r   )r   r   r#   r#   r$   r     s    r   c                 C   sB   d}d}t ||k r6|t| t|g| 7 }|d7 }q|d | S )Nr=   r   )r4   r   r5   )rG   ZpepperZlnoutr   r#   r#   r$   prfplus  s    
r   c                 C   s:   |d u r| j }t|}|tt| ||jt|||jS r3   )rh   r   rk   r?   r   re   )Zkey1Zkey2Zpepper1Zpepper2rh   r   r#   r#   r$   cf2  s    r   c                 C   s
   t | S r3   )r5   fromhex)Zhexstrr#   r#   r$   h  s    r   c                   @   sx  e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Z d<d= Z!d>d? Z"d@dA Z#dBdC Z$dDdE Z%dFdG Z&dHdI Z'dJdK Z(dLdM Z)dNdO Z*dPdQ Z+dRdS Z,dTdU Z-dVdW Z.dXdY Z/dZd[ Z0d\S )]
KcrytoTestzkcrypto Test case.c                 C   sZ   t d}t d}d}d}t d}ttj|}| t||||| | t|||| d S )N 9062430C8CDA3388922E6D6A509F5B7AZ 94B491F481485B9A0678CD3C4EA386ADr   s	   9 bytesssZJ68FB9679601F45C78857B2BF820FD6E53ECA8D42FD4B1D7024A09205ABB7CD2EC26C355D2F)r   rg   r   r    assertEqualr   r   r   kbZconfrz   plainZctxtr   r#   r#   r$   test_aes128_crypr  s    zKcrytoTest.test_aes128_cryprc                 C   sZ   t d}t d}d}d}t d}ttj|}| t||||| | t|||| d S )NZ@F1C795E9248A09338D82C3F8D5B567040B0110736845041347235B1404231398Z E45CA518B42E266AD98E165E706FFB60r      30 bytes bytes bytes bytes bytZtD1137A4D634CFECE924DBC3BF6790648BD5CFF7DE0E7B99460211D0DAEF3D79A295C688858F3B34B9CBD6EEBAE81DAF6B734D4D498B6714F1C1D)r   rg   r   r!   r   r   r   r   r#   r#   r$   test_aes256_crypt  s    zKcrytoTest.test_aes256_cryptc                 C   s:   t d}d}d}t d}ttj|}ttj|||| d S )Nr   r   s%   eight nine ten eleven twelve thirteenZ01A4B088D45628F6946614E3)r   rg   r   r    r   r%   r/   r   r   rz   r   r   r   r#   r#   r$   test_aes128_checksum  s    zKcrytoTest.test_aes128_checksumc                 C   s:   t d}d}d}t d}ttj|}ttj|||| d S )NZ@B1AE4CD8462AFF1677053CC9279AAC30B796FB81CE21474DD3DDBCFEA4EC76D7r   s   fourteenZE08739E3279E2903EC8E3836)r   rg   r   r!   r   r%   r0   r   r#   r#   r$   test_aes256_checksum  s    zKcrytoTest.test_aes256_checksumc                 C   s:   d}d}t d}t d}ttj|||}| |j| d S )N   password   ATHENA.MIT.EDUraeburnZ00000002Z C651BF29E2300AC27FA469D693BDDA13)r   r   r   r    r   rw   r   rD   r   r   r   r   r#   r#   r$   test_aes128_string_to_key  s    z$KcrytoTest.test_aes128_string_to_keyc                 C   s:   d}d}t d}t d}ttj|||}| |j| d S )Ns@   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXs   pass phrase equals block sizeZ000004B0Z@89ADEE3608DB8BC71F1BFBFE459486B05618B70CBAE22092534E56C553BA4B34)r   r   r   r!   r   rw   r   r#   r#   r$   test_aes256_string_to_key  s    z$KcrytoTest.test_aes256_string_to_keyc                 C   s,   t d}ttjdd}| t|d| d S )NZ 77B39A37A868920F2A51F9DD150C5717   key1s   a)r   r   r   r    r   r   r   r   r   r#   r#   r$   test_aes128_prf  s    zKcrytoTest.test_aes128_prfc                 C   s,   t d}ttjdd}| t|d| d S )NZ 0D674DD0F9A6806525A4D92E828BD15A   key2s   b)r   r   r   r!   r   r   r   r#   r#   r$   test_aes256_prf   s    zKcrytoTest.test_aes256_prfc                 C   sD   t d}ttjdd}ttjdd}t||dd}| |j| d S )NZ 97DF97E4B798B29EB31ED7280287A92Ar   r      a   b)r   r   r   r    r   r   rw   r   r   r   r   r   r#   r#   r$   test_aes128_cf2  s
    zKcrytoTest.test_aes128_cf2c                 C   sD   t d}ttjdd}ttjdd}t||dd}| |j| d S )NZ@4D6CA4E629785C1F01BAF55E2E548566B9617AE3A96868C337CB93B5E72B1C7Br   r   r   r   )r   r   r   r!   r   r   rw   r   r#   r#   r$   test_aes256_cf2  s
    zKcrytoTest.test_aes256_cf2c                 C   s`   t d}t d}d}d}t d}ttj|}| t||||| | t|||t|d d S )NZ00DD52094E0F41CECCB5BE510A764B35176E3981332F1E598Z94690A17B2DA3C9Br   s   13 bytes byteZX839A17081ECBAFBCDC91B88C6955DD3C4514023CF177B77BF0D0177A16F705E849CB7781D76A316B193F8D30r'   )r   rg   r   r   r   r   r   r8   r   r#   r#   r$   test_des3_crypt  s    zKcrytoTest.test_des3_cryptc                 C   s0   d}d}t d}ttj||}| |j| d S )Nr   r   Z0850BB51358548CD05E86768C313E3BFEF7511937DCF72C3E)r   r   r   r   r   rw   )r   rD   r   r   r   r#   r#   r$   test_des3_string_to_key#  s
    z"KcrytoTest.test_des3_string_to_keyc                 C   s:   t d}d}d}t d}ttj|}ttj|||| d S )NZ07A25DF8992296DCEDA0E135BC4046E2375B3C14C98FBC162r   s	   six sevenZ(0EEFC9C3E049AABC1BA5C401677D9AB699082BB4)r   rg   r   r   r   r%   r-   r   r#   r#   r$   test_des3_checksum+  s    zKcrytoTest.test_des3_checksumc                 C   sD   t d}ttjdd}ttjdd}t||dd}| |j| d S )NZ0E58F9EB643862C13AD38E529313462A7F73E62834FE54A01r   r   r   r   )r   r   r   r   r   r   rw   r   r#   r#   r$   test_des3_cf24  s
    zKcrytoTest.test_des3_cf2c                 C   sZ   t d}t d}d}d}t d}ttj|}| t||||| | t|||| d S )NZ 68F263DB3FCE15D031C9EAB02D67107AZ37245E73A45FBF72r   r   Zl95F9047C3AD75891C2E9B04B16566DC8B6EB9CE4231AFB2542EF87A7B5A0F260A99F0460508DE0CECC632D07C354124E46C5D2234EB8)r   rg   r   r"   r   r   r   r   r#   r#   r$   test_rc4_crypt<  s    zKcrytoTest.test_rc4_cryptc                 C   s,   d}t d}ttj|d }| |j| d S )Ns   fooZ AC8E657F83DF82BEEA5D43BDAF7800CC)r   r   r   r"   r   rw   )r   rD   r   r   r#   r#   r$   test_rc4_string_to_keyH  s    z!KcrytoTest.test_rc4_string_to_keyc                 C   s:   t d}d}d}t d}ttj|}ttj|||| d S )NZ F7D3A155AF5E238A0B7A871A96BA2AB2   "   seventeen eighteen nineteen twentyZ EB38CC97E2230F59DA4117DC5859D7EC)r   rg   r   r"   r   r%   r1   r   r#   r#   r$   test_rc4_checksumO  s    zKcrytoTest.test_rc4_checksumc                 C   sD   t d}ttjdd}ttjdd}t||dd}| |j| d S )NZ 24D7F6B6BAE4E5C00D2082C5EBAB3672r   r   r   r   )r   r   r   r"   r   r   rw   r   r#   r#   r$   test_rc4_cf2X  s
    zKcrytoTest.test_rc4_cf2c                 C   s6   d}d}t |||}d}td}ttj|||| d S )Ns   pwds   bytesr  Z 9d9588cdef3a8cefc9d2c208d978f60c)r   r   r   r%   r,   r   etypeZusageZpwr   rG   r   r   r#   r#   r$   _test_md5_unkeyed_checksum`  s    z%KcrytoTest._test_md5_unkeyed_checksumc                 C   s   |  tjdS N(   r  r   r   r   r#   r#   r$   'test_md5_unkeyed_checksum_des3_usage_40i  s    z2KcrytoTest.test_md5_unkeyed_checksum_des3_usage_40c                 C   s   |  tjdS N2   r  r  r#   r#   r$   'test_md5_unkeyed_checksum_des3_usage_50l  s    z2KcrytoTest.test_md5_unkeyed_checksum_des3_usage_50c                 C   s   |  tjdS r  r  r   r"   r  r#   r#   r$   &test_md5_unkeyed_checksum_rc4_usage_40o  s    z1KcrytoTest.test_md5_unkeyed_checksum_rc4_usage_40c                 C   s   |  tjdS r  r  r  r#   r#   r$   &test_md5_unkeyed_checksum_rc4_usage_50r  s    z1KcrytoTest.test_md5_unkeyed_checksum_rc4_usage_50c                 C   s   |  tjdS r  r  r   r    r  r#   r#   r$   )test_md5_unkeyed_checksum_aes128_usage_40u  s    z4KcrytoTest.test_md5_unkeyed_checksum_aes128_usage_40c                 C   s   |  tjdS r  r  r  r#   r#   r$   )test_md5_unkeyed_checksum_aes128_usage_50x  s    z4KcrytoTest.test_md5_unkeyed_checksum_aes128_usage_50c                 C   s   |  tjdS r  r  r   r!   r  r#   r#   r$   )test_md5_unkeyed_checksum_aes256_usage_40{  s    z4KcrytoTest.test_md5_unkeyed_checksum_aes256_usage_40c                 C   s   |  tjdS r  r  r  r#   r#   r$   )test_md5_unkeyed_checksum_aes256_usage_50~  s    z4KcrytoTest.test_md5_unkeyed_checksum_aes256_usage_50c                 C   s6   d}d}t |||}d}td}ttj|||| d S )Nr      salts"   twenty nineteen eighteen seventeenZ(381c870d8875d1913555de19af5c885fd27b7da9)r   r   r   r%   r.   r  r#   r#   r$   _test_sha1_unkeyed_checksum  s    z&KcrytoTest._test_sha1_unkeyed_checksumc                 C   s   |  tjdS r  r   r   r   r  r#   r#   r$   (test_sha1_unkeyed_checksum_des3_usage_40  s    z3KcrytoTest.test_sha1_unkeyed_checksum_des3_usage_40c                 C   s   |  tjdS r  r!  r  r#   r#   r$   (test_sha1_unkeyed_checksum_des3_usage_50  s    z3KcrytoTest.test_sha1_unkeyed_checksum_des3_usage_50c                 C   s   |  tjdS r  r   r   r"   r  r#   r#   r$   'test_sha1_unkeyed_checksum_rc4_usage_40  s    z2KcrytoTest.test_sha1_unkeyed_checksum_rc4_usage_40c                 C   s   |  tjdS r  r$  r  r#   r#   r$   'test_sha1_unkeyed_checksum_rc4_usage_50  s    z2KcrytoTest.test_sha1_unkeyed_checksum_rc4_usage_50c                 C   s   |  tjdS r  r   r   r    r  r#   r#   r$   *test_sha1_unkeyed_checksum_aes128_usage_40  s    z5KcrytoTest.test_sha1_unkeyed_checksum_aes128_usage_40c                 C   s   |  tjdS r  r'  r  r#   r#   r$   *test_sha1_unkeyed_checksum_aes128_usage_50  s    z5KcrytoTest.test_sha1_unkeyed_checksum_aes128_usage_50c                 C   s   |  tjdS r  r   r   r!   r  r#   r#   r$   *test_sha1_unkeyed_checksum_aes256_usage_40  s    z5KcrytoTest.test_sha1_unkeyed_checksum_aes256_usage_40c                 C   s   |  tjdS r  r*  r  r#   r#   r$   *test_sha1_unkeyed_checksum_aes256_usage_50  s    z5KcrytoTest.test_sha1_unkeyed_checksum_aes256_usage_50c                 C   s6   d}d}t |||}d}td}ttj|||| d S )Nr   r  s$   africa america asia australia europeZce595a53)r   r   r   r%   r+   r  r#   r#   r$   _test_crc32_unkeyed_checksum  s    z'KcrytoTest._test_crc32_unkeyed_checksumc                 C   s   |  tjdS r  r-  r   r   r  r#   r#   r$   )test_crc32_unkeyed_checksum_des3_usage_40  s    z4KcrytoTest.test_crc32_unkeyed_checksum_des3_usage_40c                 C   s   |  tjdS r  r.  r  r#   r#   r$   )test_crc32_unkeyed_checksum_des3_usage_50  s    z4KcrytoTest.test_crc32_unkeyed_checksum_des3_usage_50c                 C   s   |  tjdS r  r-  r   r"   r  r#   r#   r$   (test_crc32_unkeyed_checksum_rc4_usage_40  s    z3KcrytoTest.test_crc32_unkeyed_checksum_rc4_usage_40c                 C   s   |  tjdS r  r1  r  r#   r#   r$   (test_crc32_unkeyed_checksum_rc4_usage_50  s    z3KcrytoTest.test_crc32_unkeyed_checksum_rc4_usage_50c                 C   s   |  tjdS r  r-  r   r    r  r#   r#   r$   +test_crc32_unkeyed_checksum_aes128_usage_40  s    z6KcrytoTest.test_crc32_unkeyed_checksum_aes128_usage_40c                 C   s   |  tjdS r  r4  r  r#   r#   r$   +test_crc32_unkeyed_checksum_aes128_usage_50  s    z6KcrytoTest.test_crc32_unkeyed_checksum_aes128_usage_50c                 C   s   |  tjdS r  r-  r   r!   r  r#   r#   r$   +test_crc32_unkeyed_checksum_aes256_usage_40  s    z6KcrytoTest.test_crc32_unkeyed_checksum_aes256_usage_40c                 C   s   |  tjdS r  r7  r  r#   r#   r$   +test_crc32_unkeyed_checksum_aes256_usage_50  s    z6KcrytoTest.test_crc32_unkeyed_checksum_aes256_usage_50N)1r   r   r   __doc__r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r	  r
  r  r  r  r  r  r  r  r  r  r   r"  r#  r%  r&  r(  r)  r+  r,  r-  r/  r0  r2  r3  r5  r6  r8  r9  r#   r#   r#   r$   r     s\   	
	
						r   __main__)N)N)N)asysospathinsertenvironZmathr   	functoolsr   Zstructr   r   Zbinasciir   Zcryptography.hazmat.primitivesr   r	   Z&cryptography.hazmat.primitives.ciphersr
   r   r   Z+cryptography.hazmat.primitives.ciphers.baser   Zcryptography.hazmat.backendsr   Z)cryptography.hazmat.primitives.kdf.pbkdf2r   Zsamba.testsr   Zsamba.credentialsr   Zsambar   rv   Zsamba.compatr   r   objectr   r%   rf   r2   r8   r?   rA   rF   rH   r`   rb   rc   rm   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r   r-   r/   r0   r1   r,   r.   r+   r   r   r   rg   re   rk   r   r   r   r   r   r   r   r   r   r   r   r   Zunittestmainr#   r#   r#   r$   <module>-   s   


!?:OA		




  
