U
    
W[  ã                   @   sŠ   d Z ddlZddlmZ ddlmZ ddlmZ edƒrNedƒrNddlm	Z	 ndZ	dd	l
mZ dd
lmZ ddlmZ G dd„ deƒZdS )z,
Tests for L{twisted.conch.openssh_compat}.
é    N)ÚTestCase)ÚFilePath)ÚrequireModuleZcryptographyZpyasn1)ÚOpenSSHFactory)ÚgetDHGeneratorAndPrime)Úkeydata)ÚMockOSc                   @   sZ   e Zd ZdZeeddƒdkr"dZnedkr.dZdd„ Zdd	„ Z	d
d„ Z
dd„ Zdd„ ZdS )ÚOpenSSHFactoryTestsz&
    Tests for L{OpenSSHFactory}.
    ÚgeteuidNzgeteuid/seteuid not availablez)Cannot run without cryptography or PyASN1c                 C   s  t ƒ | _t|  ¡ ƒ| _| j ¡  | jj| j_t|  ¡ ƒ| _| j ¡  | jj| j_	| j 
d¡ d¡ | j 
d¡ d¡ | j 
d¡ tj¡ | j 
d¡ tj¡ | j 
d¡ d¡ | j 
d¡ tj¡ | j 
d	¡ d
¡ tƒ | _|  td| jj¡ |  td| jj¡ d S )NZssh_host_foos   fooZbar_keyZssh_host_one_keyÚssh_host_two_keyZssh_host_three_keys   not a key contentzssh_host_one_key.pubZmodulis  
#    $OpenBSD: moduli,v 1.xx 2016/07/26 12:34:56 jhacker Exp $
# Time Type Tests Tries Size Generator Modulus
20030501000000 2 6 100 2047 2 FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AACAA68FFFFFFFFFFFFFFFF

ÚseteuidÚsetegid)r   Úfactoryr   ZmktempÚkeysDirÚmakedirsÚpathZdataRootZ	moduliDirZ
moduliRootÚchildZ
setContentr   ZprivateRSA_opensshZprivateDSA_opensshZpublicRSA_opensshr   ÚmockosÚpatchÚosr   r   )Úself© r   úH/usr/lib/python3/dist-packages/twisted/conch/test/test_openssh_compat.pyÚsetUp"   s2    

ÿÿÿÿzOpenSSHFactoryTests.setUpc                 C   s8   | j  ¡ }|  t|ƒd¡ | ¡ }|  t|ƒdg¡ dS )zw
        L{OpenSSHFactory.getPublicKeys} should return the available public keys
        in the data directory
        é   ó   ssh-rsaN)r   ZgetPublicKeysÚassertEqualÚlenÚkeysÚlist©r   r   ÚkeyTypesr   r   r   Útest_getPublicKeysC   s    
z&OpenSSHFactoryTests.test_getPublicKeysc                 C   s^   | j  ¡ }|  t|ƒd¡ | ¡ }|  t|ƒtddgƒ¡ |  | jjg ¡ |  | jjg ¡ dS )z…
        Will return the available private keys in the data directory, ignoring
        key files which failed to be loaded.
        é   r   ó   ssh-dssN)	r   ÚgetPrivateKeysr   r   r   Úsetr   ÚseteuidCallsÚsetegidCallsr    r   r   r   Útest_getPrivateKeysN   s    
z'OpenSSHFactoryTests.test_getPrivateKeysc                    s´   | j  d¡‰ ˆ  d¡ |  ˆ jd¡ tj‰‡ ‡fdd„}|  td|¡ | j ¡ }|  	t
|ƒd¡ | ¡ }|  	t|ƒtdd	gƒ¡ |  	| jjdt ¡ g¡ |  	| jjdt ¡ g¡ d
S )z
        L{OpenSSHFactory.getPrivateKeys} should switch to root if the keys
        aren't readable by the current user.
        r   r   éÿ  c                    s   ˆ   d¡ ˆ| ƒS )Nr*   )Úchmod)Zeuid©ZkeyFileZsavedSeteuidr   r   r   f   s    
z>OpenSSHFactoryTests.test_getPrivateKeysAsRoot.<locals>.seteuidr   r#   r   r$   N)r   r   r+   Z
addCleanupr   r   r   r   r%   r   r   r   r&   r   r'   r
   r(   Úgetegid)r   r   r   r!   r   r,   r   Útest_getPrivateKeysAsRoot[   s    

z-OpenSSHFactoryTests.test_getPrivateKeysAsRootc                 C   s$   | j  ¡ }|  |dtdƒgi¡ dS )zq
        L{OpenSSHFactory.getPrimes} should return the available primes
        in the moduli directory.
        i   s   diffie-hellman-group14-sha1N)r   Z	getPrimesr   r   )r   Zprimesr   r   r   Útest_getPrimesr   s
    
 ÿz"OpenSSHFactoryTests.test_getPrimes)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úgetattrr   Úskipr   r   r"   r)   r.   r/   r   r   r   r   r	      s   !r	   )r3   r   Ztwisted.trial.unittestr   Ztwisted.python.filepathr   Ztwisted.python.reflectr   Z$twisted.conch.openssh_compat.factoryr   Ztwisted.conch.ssh._kexr   Ztwisted.conch.testr   Ztwisted.test.test_processr   r	   r   r   r   r   Ú<module>   s   