
    Yfj                    L   d Z ddlZddl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  ed	          Zed
Zer9ddlmZ ddlmZ ddlmZ ddlmZmZmZ  e                                            ZndZd Z G d dej                  Z G d dej                  Z dS )z&
Tests for L{twisted.conch.ssh.keys}.
    N)dedent)keydata)	randbytes)FilePath)requireModule)unittestcryptographyz Cannot run without cryptography.)default_backend)hashes)padding)commonkeyssexpyFc                 "    t           sd| _        | S )Nz$ed25519 not supported on this system)ED25519_SUPPORTEDskip)fs    N/var/www/html/env/lib/python3.11/site-packages/twisted/conch/test/test_keys.pyskipWithoutEd25519r   $   s     87H    c                      e Zd Ze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 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+d'             Z,d( Z-d) Z.d* Z/d+ Z0e+d,             Z1d- Z2d. Z3d/ Z4e+d0             Z5d1 Z6d2 Z7d3 Z8d4 Z9e+d5             Z:d6 Z;d7 Z<d8 Z=d9 Z>d: Z?d; Z@d< ZAe+d=             ZBe+d>             ZCd? ZDd@ ZEdA ZFdB ZGdC ZHdD ZIdE ZJdF ZKdG ZLdH ZMdI ZNe+dJ             ZOdK ZPdL ZQdM ZRdN ZSdO ZTdP ZUdQ ZVdR ZWe+dS             ZXe+dT             ZYdS )UKeyTestsNc           	      t   t           j                            t          j        d         t          j        d         t          j        d         t          j        d         t          j        d         t          j        d                   j        | _        t           j                            t          j        d         t          j        d         t          j        d         t          j        d	         t          j        d
                   j        | _	        t           j        
                    t          j        d
         t          j        d         t          j        d         t          j        d                   j        | _        t           j        
                    t          j        d
         t          j        d         t          j        d         t          j        d                   j        | _        t           j        
                    t          j        d
         t          j        d         t          j        d         t          j        d                   j        | _        t"          rKt           j                            t          j        d         t          j        d                   j        | _        d| _        d| _        |                     t0          dd            |                                 | _        t7          | j        d          5 }|                    t          j                   d d d            d S # 1 swxY w Y   d S )Nnedpqu)r   r   r   r   r   r   ygx)r    r   r   r!   r"   privateValuecurve)r"   r    r#   r$   ak)r%   r&   s     ssh-rsa   ~YWpu@1SOE/xG3Ud,'=QgxjIޯb@rΣzM1q5{wjKNCi}RTDJHl[|^nъaYBǾ79j.9p?N/)
>AµjUWԮBtyfˆkuNɓY.VL44`CǦ6Y% 4^rY .%HAs7      ssh-dss   (?;TFAE@4,d	ٮ[-nQfjrgp<secureRandomc                     d| z  S )N    )r"   s    r   <lambda>z KeyTests.setUp.<locals>.<lambda>h   s
    ! r   wb)r   Key_fromRSAComponentsr   RSAData
_keyObjectrsaObj_fromDSAComponentsDSADatadsaObj_fromECComponentsECDatanistp256ecObjECDatanistp384ecObj384ECDatanistp521ecObj521r   _fromEd25519ComponentsEd25519Data
ed25519ObjrsaSignaturedsaSignaturepatchr   mktempkeyFileopenwriteprivateRSA_lsh)selfr   s     r   setUpzKeyTests.setUp.   s   h11oc"oc"oc"oc"oc"oc" 2 
 
  	 h11oc"oc"oc"oc"oc" 2 
 
  	 X//$S)$S) /?(1	 0 
 

  	
 22$S)$S) /?(1	 3 
 

  	 22$S)$S) /?(1	 3 
 

  	  	"h==%c*g.A#.F >   O; 	  	
 	

9n.C.CDDD{{}}$,%% 	,GGG*+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s     L--L14L1c                 8    t          j        | j                   d S N)osunlinkrC   rG   s    r   tearDownzKeyTests.tearDownm   s    
	$,r   c                    |                      t          j        | j                                                  d           |                      t          j        | j                                                  d           |                      t          j        | j                                                  d           |                      t          j        | j                                                  d           |                      t          j        | j                                                  d           t          rA|                      t          j        | j
                                                  d           dS dS )zU
        The L{keys.Key.size} method returns the size of key object in bits.
                 i  i	  N)assertEqualr   r-   r1   sizer4   r7   r9   r;   r   r>   rM   s    r   	test_sizezKeyTests.test_sizep   s3    	$+..3355t<<<$+..3355t<<<$*--2244c:::$-005577===$-005577=== 	DTXdo66;;==sCCCCC	D 	Dr   c                 n	   |                      t          j                            t          j                  d           |                      t          j                            t          j                  d           |                      t          j                            t          j                  d           t          r=|                      t          j                            t          j	                  d           |                      t          j                            t          j
                  d           |                      t          j                            t          j                  d           |                      t          j                            t          j                  d           |                      t          j                            t          j                  d           |                      t          j                            t          j                  d           |                      t          j                            t          j                  d           t          r=|                      t          j                            t          j                  d           |                      t          j                            t          j                  d           |                      t          j                            t          j                  d           |                      t          j                            t          j                  d           |                      t          j                            t          j                  d           |                      t          j                            t          j                  d           |                      t          j                            t          j                  d           |                      t          j                            d          d           |                      t          j                            d          d           |                      t          j                            d	          d
           d
S )z_
        Test that the _guessStringType method guesses string types
        correctly.
        public_opensshprivate_openssh
public_lshprivate_lshagentv3s      ssh-rsa   blobs      ssh-dss   s	   not a keyN)rS   r   r-   _guessStringTyper   publicRSA_opensshpublicDSA_opensshpublicECDSA_opensshr   publicEd25519_opensshprivateRSA_opensshprivateRSA_openssh_newprivateDSA_opensshprivateDSA_openssh_newprivateECDSA_opensshprivateECDSA_openssh_newprivateEd25519_openssh_newpublicRSA_lshpublicDSA_lshrF   privateDSA_lshprivateRSA_agentv3privateDSA_agentv3rM   s    r   test__guessStringTypezKeyTests.test__guessStringType|   s   
 	H%%g&?@@BR	
 	
 	
 	H%%g&?@@BR	
 	
 	
 	H%%g&ABBDT	
 	
 	
  	))'*GHH    	H%%g&@AACT	
 	
 	
 	H%%g&DEEGX	
 	
 	
 	H%%g&@AACT	
 	
 	
 	H%%g&DEEGX	
 	
 	
 	H%%g&BCCEV	
 	
 	
 	H%%g&FGG	
 	
 	
  	))'*LMM!   	2273HII<XXX2273HII<XXXH%%g&<==}	
 	
 	
 	H%%g&<==}	
 	
 	
 	H%%g&@AA9	
 	
 	
 	H%%g&@AA9	
 	
 	
 	H%%&TUU	
 	
 	
 	H%%&TUU	
 	
 	
 	22<@@$GGGGGr   c                 x   t           j                            t          j                  }t           j                            t          j                  }|                     |                                |                                           t           j                            t          j                  }t           j                            t          j	                  }|                     |                                |                                           t           j                            t          j
                  }t           j                            t          j                  }|                     |                                |                                           t          rt           j                            t          j                  }t           j                            t          j                  }|                     |                                |                                           dS dS )zn
        The L{keys.Key.public} method returns a public key for both
        public and private keys.
        N)r   r-   
fromStringr   rb   r^   rS   publicrd   r_   rf   r`   r   rh   ra   )	rG   privateRSAKeypublicRSAKeyprivateDSAKeypublicDSAKeyprivateECDSAKeypublicECDSAKeyprivateEd25519KeypublicEd25519Keys	            r   test_publiczKeyTests.test_public   s    ++G,FGGx**7+DEE--//1D1D1F1FGGG++G,FGGx**7+DEE--//1D1D1F1FGGG(--g.JKK,,W-HII//11>3H3H3J3JKKK 	T $ 3 3G4V W W#x2273PQQ.55779I9P9P9R9RSSSSS	T 	Tr   c                 `   t           j                            t          j                  }t           j                            t          j                  }t           j                            t          j                  }|                     |                                	                                           | 
                    |	                                           |                     |                                	                                           | 
                    |	                                           |                     |                                	                                           | 
                    |	                                           t          rt           j                            t          j                  }|                     |                                	                                           | 
                    |	                                           dS dS )zg
        The L{keys.Key.isPublic} method returns True for public keys
        otherwise False.
        N)r   r-   rp   r   rb   rd   rf   
assertTruerq   isPublicassertFalser   rh   )rG   rsaKeydsaKeyecdsaKey
ed25519Keys        r   test_isPubliczKeyTests.test_isPublic   s   
 $$W%?@@$$W%?@@8&&w'CDD0022333**+++0022333**+++))2244555**,,--- 	4,,W-OPPJOOJ--//88::;;;Z002233333	4 	4r   c                 b    |                      |||           |                     |||           d S rJ   )_testPublicFromString_testPrivateFromString)rG   rq   privatetypedatas        r   _testPublicPrivateFromStringz%KeyTests._testPublicPrivateFromString   s8    ""64666##GT488888r   c                 r   t           j                            |          }|                     |                                           |                     |                                |           |                                                                D ]!\  }}|                     ||         |           "d S rJ   )	r   r-   rp   r|   r}   rS   r   r   items)rG   rq   r   r   	publicKeyr&   vs          r   r   zKeyTests._testPublicFromString   s    H''//		**,,---))4000NN$$**,, 	) 	)DAqT!Wa((((	) 	)r   c                 r   t           j                            |          }|                     |                                           |                     |                                |           |                                D ]3\  }}|                     |                                |         |           4d S rJ   )	r   r-   rp   r~   r}   rS   r   r   r   )rG   r   r   r   
privateKeyr&   r   s          r   r   zKeyTests._testPrivateFromString   s    X((11
,,..///**D111JJLL 	6 	6DAqZ__..q115555	6 	6r   c                    |                      t          j        t          j        dt          j                   |                      t          j        t          j        dt          j                   |                     t          j
                            t          j        d          t          j
                            t          j                             |                      t          j        t          j        dt          j                   t           r8|                      t          j        t          j        dt          j                   dS dS )zN
        Test that keys are correctly generated from OpenSSH strings.
        ECRSA	   encrypted
passphraseDSAEd25519N)r   r   r`   rf   r6   r^   rb   r/   rS   r   r-   rp   privateRSA_openssh_encryptedr_   rd   r3   r   ra   rh   r=   rM   s    r   test_fromOpenSSHzKeyTests.test_fromOpenSSH   s,    	))'("		
 	
 	
 	))%&O		
 	
 	
 	H4     H :;;		
 	
 	
 	))%&O		
 	
 	
  	---2#	    	 	r   c                 l    d}|                      t          j        t          j        j        |d           dS )z.
        Tests for invalid key types.
        s   -----BEGIN FOO PRIVATE KEY-----
MIGkAgEBBDAtAi7I8j73WCX20qUM5hhHwHuFzYWYYILs2Sh8UZ+awNkARZ/Fu2LU
LLl5RtOQpbWgBwYFK4EEACKhZANiAATU17sA9P5FRwSknKcFsjjsk0+E3CeXPYX0
Tk/M0HK3PpWQWgrO8JdRHP9eFE9O/23P8BumwFt7F/AvPlCzVd35VfraFT0o4cCW
G0RqpQ+np31aKmeJshkcYALEchnU+tQ=
-----END EC PRIVATE KEY-----N)assertRaisesr   BadKeyErrorr-   _fromString_PRIVATE_OPENSSHrG   badKeys     r   test_fromOpenSSHErrorszKeyTests.test_fromOpenSSHErrors"  s>      	dhBFD	
 	
 	
 	
 	
r   c                     d}|                      t          j                            |          t          j                            |dz                        dS )zP
        If key strings have trailing whitespace, it should be ignored.
          -----BEGIN DSA PRIVATE KEY-----
MIIBuwIBAAKBgQDylESNuc61jq2yatCzZbenlr9llG+p9LhIpOLUbXhhHcwC6hrh
EZIdCKqTO0USLrGoP5uS9UHAUoeN62Z0KXXWTwOWGEQn/syyPzNJtnBorHpNUT9D
Qzwl1yUa53NNgEctpo4NoEFOx8PuU6iFLyvgHCjNn2MsuGuzkZm7sI9ZpQIVAJiR
9dPc08KLdpJyRxz8T74b4FQRAoGAGBc4Z5Y6R/HZi7AYM/iNOM8su6hrk8ypkBwR
a3Dbhzk97fuV3SF1SDrcQu4zF7c4CtH609N5nfZs2SUjLLGPWln83Ysb8qhh55Em
AcHXuROrHS/sDsnqu8FQp86MaudrqMExCOYyVPE7jaBWW+/JWFbKCxmgOCSdViUJ
esJpBFsCgYEA7+jtVvSt9yrwsS/YU1QGP5wRAiDYB+T5cK4HytzAqJKRdC5qS4zf
C7R0eKcDHHLMYO39aPnCwXjscisnInEhYGNblTDyPyiyNxAOXuC8x7luTmwzMbNJ
/ow0IqSj0VF72VJN9uSoPpFd4lLT0zN8v42RWja0M8ohWNf+YNJluPgCFE0PT4Vm
SUrCyZXsNh6VXwjs3gKQ
-----END DSA PRIVATE KEY-----   
N)rS   r   r-   rp   rG   privateDSADatas     r    test_fromOpenSSH_with_whitespacez)KeyTests.test_fromOpenSSH_with_whitespace0  sX    ! 	H//H 677	
 	
 	
 	
 	
r   c                 4   t           j                            t          j        d          }|                     |                                d           t           j                            t          j        dz   d          }|                     ||           dS )z
        Newer versions of OpenSSH generate encrypted keys which have a longer
        IV than the older versions.  These newer keys are also loaded.
        s   testxpr   r   r   N)r   r-   rp   r    privateRSA_openssh_encrypted_aesrS   r   )rG   keykey2s      r   test_fromNewerOpenSSHzKeyTests.test_fromNewerOpenSSHG  s    
 h!!4 " 
 
 	U+++x""4u< # 
 
 	d#####r   c                 l   t           j        t           j        ft           j        t           j        ft           j        t           j        ft           j        t           j        ft           j	        t           j
        ffD ]U\  }}|                     t          j                            |          t          j                            |                     V|                     t          j                            t           j        d          t          j                            t           j        d                     dS )z
        OpenSSH 6.5 introduced a newer "openssh-key-v1" private key format
        (made the default in OpenSSH 7.8).  Loading keys in this format
        produces identical results to loading the same keys in the old
        PEM-based format.
        r   r   N)r   rb   rc   rd   re   rf   rg   privateECDSA_openssh384privateECDSA_openssh384_newprivateECDSA_openssh521privateECDSA_openssh521_newrS   r   r-   rp    privateRSA_openssh_encrypted_newr   )rG   oldnews      r   test_fromOpenSSH_v1_formatz#KeyTests.test_fromOpenSSH_v1_formatU  s    ')GH')GH)7+KL,g.QR,g.QR
 	Q 	QHC TX0055tx7J7J37O7OPPPPH8\     H4    		
 	
 	
 	
 	
r   c           	          d}|                      t          j                            |          t          j                            |                    dd                               dS )zp
        Test that keys are correctly generated from OpenSSH strings with
        Windows line endings.
        r   r   s   
N)rS   r   r-   rp   replacer   s     r   %test_fromOpenSSH_windows_line_endingsz.KeyTests.test_fromOpenSSH_windows_line_endingsm  sc    
! 	H//H 6 6ug F FGG	
 	
 	
 	
 	
r   c                     t          j        ddddgggg          }|                     t          j        t          j        j        dt          j        |          z   dz              dS )	za
        C{BadKeyError} exception is raised when public key has an unknown
        type.
        s
   public-key   bad-key   p   2   {   })r   N)	r   packr   r   r   r-   rp   base64	b64encoderG   sexps     r   !test_fromLSHPublicUnsupportedTypez*KeyTests.test_fromLSHPublicUnsupportedType  sq    
 zMJt+EFGHHH(...5 	 	
 	
 	
 	
 	
r   c                     t          j        ddddgggg          }|                     t          j        t          j        j        |           dS )zb
        C{BadKeyError} exception is raised when private key has an unknown
        type.
        s   private-keyr   r   r   N)r   r   r   r   r   r-   rp   r   s     r   "test_fromLSHPrivateUnsupportedTypez+KeyTests.test_fromLSHPrivateUnsupportedType  sW    
 zNZ$,FGHIIH	
 	
 	
 	
 	
r   c                 r    |                      t          j        t          j        dt          j                   dS )zR
        RSA public and private keys can be generated from a LSH strings.
        r   N)r   r   ri   rF   r/   rM   s    r   test_fromLSHRSAzKeyTests.test_fromLSHRSA  :     	))!"O		
 	
 	
 	
 	
r   c                 r    |                      t          j        t          j        dt          j                   dS )zH
        DSA public and private key can be generated from LSHs.
        r   N)r   r   rj   rk   r3   rM   s    r   test_fromLSHDSAzKeyTests.test_fromLSHDSA  r   r   c                    |                      t          j        dt          j                   |                      t          j        dt          j                   |                     t          j        t          j	        j
        d           dS )zO
        Test that keys are correctly generated from Agent v3 strings.
        r   r   s$      ssh-foo               N)r   r   rl   r/   rm   r3   r   r   r   r-   rp   rM   s    r   test_fromAgentv3zKeyTests.test_fromAgentv3  sq     	##G$>wWWW##G$>wWWWHD	
 	
 	
 	
 	
r   c                 X   t          j        | j                  }|                    dd                                          }|                     t           j                            |d          |           |                     t           j        t           j        j        |d           dS )zf
        L{keys.Key.fromString} applies Normalization Form KC to Unicode
        passphrases.
        openssh   verschlüsseltr      verschlüsselt   unassigned ￿N)	r   r-   r1   toStringencoderS   rp   r   PassphraseNormalizationErrorrG   r   key_datas      r   *test_fromStringNormalizesUnicodePassphrasez3KeyTests.test_fromStringNormalizesUnicodePassphrase  s    
 ht{##<<	6J6Q6Q6S6S<TTH5JKKS	
 	
 	

 	-H*	 	 	
 	
 	
 	
 	
r   c                    |                      t          j        t          j        j        d           |                      t          j        t          j        j        dd           |                      t          j        t          j        j        t
          j        d           |                      t          j        t          j        j        t          j        | j                  	                    dd                     |                      t          j        t          j        j        d           |                      t          j        t          j        j        dd	           |                      t          j        t          j        j        d
d	           |                      t          j        t          j        j        dd	           |                      t          j        t          j        j        dd	           dS )zW
        keys.Key.fromString should raise BadKeyError when the key is invalid.
        r   bad_types   unencryptedr   r   r   s   -----BEGIN RSA KEY-----
wA==
s  -----BEGIN ENCRYPTED RSA KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: weird type

4Ed/a9OgJWHJsne7yOGWeWMzHYKsxuP9w1v0aYcp+puS75wvhHLiUnNwxz0KDi6n
T3YkKLBsoCWS68ApR2J9yeQ6R+EyS+UQDrO9nwqo3DB5BT3Ggt8S1wE7vjNLQD0H
g/SJnlqwsECNhh8aAx+Ag0m3ZKOZiRD5mCkcDQsZET7URSmFytDKOjhFn3u6ZFVB
sXrfpYc6TJtOQlHd/52JB6aAbjt6afSv955Z7enIi+5yEJ5y7oYQTaE5zrFMP7N5
9LbfJFlKXxEddy/DErRLxEjmC+t4svHesoJKc2jjjyNPiOoGGF3kJXea62vsjdNV
gMK5Eged3TBVIk2dv8rtJUvyFeCUtjQ1UJZIebScRR47KrbsIpCmU8I4/uHWm5hW
0mOwvdx1L/mqx/BHqVU9Dw2COhOdLbFxlFI92chkovkmNk4P48ziyVnpm7ME22sE
vfCMsyirdqB1mrL4CSM7FXONv+CgfBfeYVkYW8RfJac9U1L/O+JNn7yee414O/rS
hRYw4UdWnH6Gg6niklVKWNY0ZwUZC8zgm2iqy8YCYuneS37jC+OEKP+/s6HSKuqk
2bzcl3/TcZXNSM815hnFRpz0anuyAsvwPNRyvxG2/DacJHL1f6luV4B0o6W410yf
qXQx01DLo7nuyhJqoH3UGCyyXB+/QUs0mbG2PAEn3f5dVs31JMdbt+PrxURXXjKk
4cexpUcIpqqlfpIRe3RD0sDVbH4OXsGhi2kiTfPZu7mgyFxKopRbn1KwU1qKinfY
EU9O4PoTak/tPT+5jFNhaP+HrURoi/pU8EAUNSktl7xAkHYwkN/9Cm7DeBghgf3n
8+tyCGYDsB5utPD0/Xe9yx0Qhc/kMm4xIyQDyA937dk3mUvLC9vulnAP8I+Izim0
fZ182+D1bWwykoD0997mUHG/AUChWR01V1OLwRyPv2wUtiS8VNG76Y2aqKlgqP1P
V+IvIEqR4ERvSBVFzXNF8Y6j/sVxo8+aZw+d0L1Ns/R55deErGg3B8i/2EqGd3r+
0jps9BqFHHWW87n3VyEB3jWCMj8Vi2EJIfa/7pSaViFIQn8LiBLf+zxG5LTOToK5
xkN42fReDcqi3UNfKNGnv4dsplyTR2hyx65lsj4bRKDGLKOuB1y7iB0AGb0LtcAI
dcsVlcCeUquDXtqKvRnwfIMg+ZunyjqHBhj3qgRgbXbT6zjaSdNnih569aTg0Vup
VykzZ7+n/KVcGLmvX0NesdoI7TKbq4TnEIOynuG5Sf+2GpARO5bjcWKSZeN/Ybgk
gccf8Cqf6XWqiwlWd0B7BR3SymeHIaSymC45wmbgdstrbk7Ppa2Tp9AZku8M2Y7c
8mY9b+onK075/ypiwBm4L4GRNTFLnoNQJXx0OSl4FNRWsn6ztbD+jZhu8Seu10Jw
SEJVJ+gmTKdRLYORJKyqhDet6g7kAxs4EoJ25WsOnX5nNr00rit+NkMPA7xbJT+7
CfI51GQLw7pUPeO2WNt6yZO/YkzZrqvTj5FEwybkUyBv7L0gkqu9wjfDdUw0fVHE
xEm4DxjEoaIp8dW/JOzXQ2EF+WaSOgdYsw3Ac+rnnjnNptCdOEDGP6QBkt+oXj4P
-----END RSA PRIVATE KEY-----	encrypteds  -----BEGIN ENCRYPTED RSA KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: FOO-123-BAR,01234567

4Ed/a9OgJWHJsne7yOGWeWMzHYKsxuP9w1v0aYcp+puS75wvhHLiUnNwxz0KDi6n
T3YkKLBsoCWS68ApR2J9yeQ6R+EyS+UQDrO9nwqo3DB5BT3Ggt8S1wE7vjNLQD0H
g/SJnlqwsECNhh8aAx+Ag0m3ZKOZiRD5mCkcDQsZET7URSmFytDKOjhFn3u6ZFVB
sXrfpYc6TJtOQlHd/52JB6aAbjt6afSv955Z7enIi+5yEJ5y7oYQTaE5zrFMP7N5
9LbfJFlKXxEddy/DErRLxEjmC+t4svHesoJKc2jjjyNPiOoGGF3kJXea62vsjdNV
gMK5Eged3TBVIk2dv8rtJUvyFeCUtjQ1UJZIebScRR47KrbsIpCmU8I4/uHWm5hW
0mOwvdx1L/mqx/BHqVU9Dw2COhOdLbFxlFI92chkovkmNk4P48ziyVnpm7ME22sE
vfCMsyirdqB1mrL4CSM7FXONv+CgfBfeYVkYW8RfJac9U1L/O+JNn7yee414O/rS
hRYw4UdWnH6Gg6niklVKWNY0ZwUZC8zgm2iqy8YCYuneS37jC+OEKP+/s6HSKuqk
2bzcl3/TcZXNSM815hnFRpz0anuyAsvwPNRyvxG2/DacJHL1f6luV4B0o6W410yf
qXQx01DLo7nuyhJqoH3UGCyyXB+/QUs0mbG2PAEn3f5dVs31JMdbt+PrxURXXjKk
4cexpUcIpqqlfpIRe3RD0sDVbH4OXsGhi2kiTfPZu7mgyFxKopRbn1KwU1qKinfY
EU9O4PoTak/tPT+5jFNhaP+HrURoi/pU8EAUNSktl7xAkHYwkN/9Cm7DeBghgf3n
8+tyCGYDsB5utPD0/Xe9yx0Qhc/kMm4xIyQDyA937dk3mUvLC9vulnAP8I+Izim0
fZ182+D1bWwykoD0997mUHG/AUChWR01V1OLwRyPv2wUtiS8VNG76Y2aqKlgqP1P
V+IvIEqR4ERvSBVFzXNF8Y6j/sVxo8+aZw+d0L1Ns/R55deErGg3B8i/2EqGd3r+
0jps9BqFHHWW87n3VyEB3jWCMj8Vi2EJIfa/7pSaViFIQn8LiBLf+zxG5LTOToK5
xkN42fReDcqi3UNfKNGnv4dsplyTR2hyx65lsj4bRKDGLKOuB1y7iB0AGb0LtcAI
dcsVlcCeUquDXtqKvRnwfIMg+ZunyjqHBhj3qgRgbXbT6zjaSdNnih569aTg0Vup
VykzZ7+n/KVcGLmvX0NesdoI7TKbq4TnEIOynuG5Sf+2GpARO5bjcWKSZeN/Ybgk
gccf8Cqf6XWqiwlWd0B7BR3SymeHIaSymC45wmbgdstrbk7Ppa2Tp9AZku8M2Y7c
8mY9b+onK075/ypiwBm4L4GRNTFLnoNQJXx0OSl4FNRWsn6ztbD+jZhu8Seu10Jw
SEJVJ+gmTKdRLYORJKyqhDet6g7kAxs4EoJ25WsOnX5nNr00rit+NkMPA7xbJT+7
CfI51GQLw7pUPeO2WNt6yZO/YkzZrqvTj5FEwybkUyBv7L0gkqu9wjfDdUw0fVHE
xEm4DxjEoaIp8dW/JOzXQ2EF+WaSOgdYsw3Ac+rnnjnNptCdOEDGP6QBkt+oXj4P
-----END RSA PRIVATE KEY-----s  -----BEGIN ENCRYPTED RSA KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,01234

4Ed/a9OgJWHJsne7yOGWeWMzHYKsxuP9w1v0aYcp+puS75wvhHLiUnNwxz0KDi6n
T3YkKLBsoCWS68ApR2J9yeQ6R+EyS+UQDrO9nwqo3DB5BT3Ggt8S1wE7vjNLQD0H
g/SJnlqwsECNhh8aAx+Ag0m3ZKOZiRD5mCkcDQsZET7URSmFytDKOjhFn3u6ZFVB
sXrfpYc6TJtOQlHd/52JB6aAbjt6afSv955Z7enIi+5yEJ5y7oYQTaE5zrFMP7N5
9LbfJFlKXxEddy/DErRLxEjmC+t4svHesoJKc2jjjyNPiOoGGF3kJXea62vsjdNV
gMK5Eged3TBVIk2dv8rtJUvyFeCUtjQ1UJZIebScRR47KrbsIpCmU8I4/uHWm5hW
0mOwvdx1L/mqx/BHqVU9Dw2COhOdLbFxlFI92chkovkmNk4P48ziyVnpm7ME22sE
vfCMsyirdqB1mrL4CSM7FXONv+CgfBfeYVkYW8RfJac9U1L/O+JNn7yee414O/rS
hRYw4UdWnH6Gg6niklVKWNY0ZwUZC8zgm2iqy8YCYuneS37jC+OEKP+/s6HSKuqk
2bzcl3/TcZXNSM815hnFRpz0anuyAsvwPNRyvxG2/DacJHL1f6luV4B0o6W410yf
qXQx01DLo7nuyhJqoH3UGCyyXB+/QUs0mbG2PAEn3f5dVs31JMdbt+PrxURXXjKk
4cexpUcIpqqlfpIRe3RD0sDVbH4OXsGhi2kiTfPZu7mgyFxKopRbn1KwU1qKinfY
EU9O4PoTak/tPT+5jFNhaP+HrURoi/pU8EAUNSktl7xAkHYwkN/9Cm7DeBghgf3n
8+tyCGYDsB5utPD0/Xe9yx0Qhc/kMm4xIyQDyA937dk3mUvLC9vulnAP8I+Izim0
fZ182+D1bWwykoD0997mUHG/AUChWR01V1OLwRyPv2wUtiS8VNG76Y2aqKlgqP1P
V+IvIEqR4ERvSBVFzXNF8Y6j/sVxo8+aZw+d0L1Ns/R55deErGg3B8i/2EqGd3r+
0jps9BqFHHWW87n3VyEB3jWCMj8Vi2EJIfa/7pSaViFIQn8LiBLf+zxG5LTOToK5
xkN42fReDcqi3UNfKNGnv4dsplyTR2hyx65lsj4bRKDGLKOuB1y7iB0AGb0LtcAI
dcsVlcCeUquDXtqKvRnwfIMg+ZunyjqHBhj3qgRgbXbT6zjaSdNnih569aTg0Vup
VykzZ7+n/KVcGLmvX0NesdoI7TKbq4TnEIOynuG5Sf+2GpARO5bjcWKSZeN/Ybgk
gccf8Cqf6XWqiwlWd0B7BR3SymeHIaSymC45wmbgdstrbk7Ppa2Tp9AZku8M2Y7c
8mY9b+onK075/ypiwBm4L4GRNTFLnoNQJXx0OSl4FNRWsn6ztbD+jZhu8Seu10Jw
SEJVJ+gmTKdRLYORJKyqhDet6g7kAxs4EoJ25WsOnX5nNr00rit+NkMPA7xbJT+7
CfI51GQLw7pUPeO2WNt6yZO/YkzZrqvTj5FEwybkUyBv7L0gkqu9wjfDdUw0fVHE
xEm4DxjEoaIp8dW/JOzXQ2EF+WaSOgdYsw3Ac+rnnjnNptCdOEDGP6QBkt+oXj4P
-----END RSA PRIVATE KEY-----s  -----BEGIN ENCRYPTED RSA KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,01234

4Ed/a9OgJWHJsne7yOGWeWMzHYKsxuP9w1v0aYcp+puS75wvhHLiUnNwxz0KDi6n
T3YkKLBsoCWS68ApR2J9yeQ6R+EyS+UQDrO9nwqo3DB5BT3Ggt8S1wE7vjNLQD0H
g/SJnlqwsECNhh8aAx+Ag0m3ZKOZiRD5mCkcDQsZET7URSmFytDKOjhFn3u6ZFVB
sXrfpYc6TJtOQlHd/52JB6aAbjt6afSv955Z7enIi+5yEJ5y7oYQTaE5zrFMP7N5
9LbfJFlKXxEddy/DErRLxEjmC+t4svHesoJKc2jjjyNPiOoGGF3kJXea62vsjdNV
gMK5Eged3TBVIk2dv8rtJUvyFeCUtjQ1UJZIebScRR47KrbsIpCmU8I4/uHWm5hW
0mOwvdx1L/mqx/BHqVU9Dw2COhOdLbFxlFI92chkovkmNk4P48ziyVnpm7ME22sE
vfCMsyirdqB1mrL4CSM7FXONv+CgfBfeYVkYW8RfJac9U1L/O+JNn7yee414O/rS
hRYw4UdWnH6Gg6niklVKWNY0ZwUZC8zgm2iqy8YCYuneS37jC+OEKP+/s6HSKuqk
2bzcl3/TcZXNSM815hnFRpz0anuyAsvwPNRyvxG2/DacJHL1f6luV4B0o6W410yf
qXQx01DLo7nuyhJqoH3UGCyyXB+/QUs0mbG2PAEn3f5dVs31JMdbt+PrxURXXjKk
4cexpUcIpqqlfpIRe3RD0sDVbH4OXsGhi2kiTfPZu7mgyFxKopRbn1KwU1qKinfY
EU9O4PoTak/tPT+5jFNhaP+HrURoi/pU8EAUNSktl7xAkHYwkN/9Cm7DeBghgf3n
8+tyCGYDsB5utPD0/Xe9yx0Qhc/kMm4xIyQDyA937dk3mUvLC9vulnAP8I+Izim0
fZ182+D1bWwykoD0997mUHG/AUChWR01V1OLwRyPv2wUtiS8VNG76Y2aqKlgqP1P
V+IvIEqR4ERvSBVFzXNF8Y6j/sVxo8+aZw+d0L1Ns/R55deErGg3B8i/2EqGd3r+
0jps9BqFHHWW87n3VyEB3jWCMj8Vi2EJIfa/7pSaViFIQn8LiBLf+zxG5LTOToK5
xkN42fReDcqi3UNfKNGnv4dsplyTR2hyx65lsj4bRKDGLKOuB1y7iB0AGb0LtcAI
dcsVlcCeUquDXtqKvRnwfIMg+ZunyjqHBhj3qgRgbXbT6zjaSdNnih569aTg0Vup
VykzZ7+n/KVcGLmvX0NesdoI7TKbq4TnEIOynuG5Sf+2GpARO5bjcWKSZeN/Ybgk
gccf8Cqf6XWqiwlWd0B7BR3SymeHIaSymC45wmbgdstrbk7Ppa2Tp9AZku8M2Y7c
8mY9b+onK075/ypiwBm4L4GRNTFLnoNQJXx0OSl4FNRWsn6ztbD+jZhu8Seu10Jw
SEJVJ+gmTKdRLYORJKyqhDet6g7kAxs4EoJ25WsOnX5nNr00rit+NkMPA7xbJT+7
CfI51GQLw7pUPeO2WNt6yZO/YkzZrqvTj5FEwybkUyBv7L0gkqu9wjfDdUw0fVHE
xEm4DxjEoaIp8dW/JOzXQ2EF+WaSOgdYsw3Ac+rnnjnNptCdOEDGP6QBkt+oXj4P
-----END RSA PRIVATE KEY-----N)
r   r   r   r-   rp   r   ri   EncryptedKeyErrorr1   r   rM   s    r   test_fromStringErrorszKeyTests.test_fromStringErrors  s    	$*DH,?EEE$*DH,?jQQQH!%	 	 	
 	
 	
 	"HHT[!!**9*NN	
 	
 	
 	dh13U	
 	
 	
 	H!< #C 	 "	
 "	
 "	
H 	H!< #C 	 "	
 "	
 "	
H 	H!< #C 	 "	
 "	
 "	
H 	H!< #C 	 "	
 "	
 "	
 "	
 "	
r   c                    |                      t          j                            | j                  t          j                            t          j                             |                     t          j	        t          j        j        | j        d           |                     t          j	        t          j        j        | j        d           dS )z5
        Test that fromFile works correctly.
        r   unencryptedr   N)
rS   r   r-   fromFilerC   rp   r   rF   r   r   rM   s    r   test_fromFilezKeyTests.test_fromFile{  s     	Hdl++TX-@-@AW-X-X	
 	
 	
 	$*DH,=t|ZXXXdh/- 	 	
 	
 	
 	
 	
r   c                     t           j                            dd          j        }t          j        |          }|                     |j        |           dS )zJ
        Test that the PublicKey object is initialized correctly.
              r   r   N)r   r-   r.   r0   rS   )rG   objr   s      r   	test_initzKeyTests.test_init  sL     h))A)33>hsmm-----r   c                    t          j        | j                  }t          j        | j                  }t          j        t           j                            dd          j                  }t          j        | j                  }|                     ||k               |                     ||k               |                     ||k               |                     |t          k               |                     |dk               dS )z?
        Test that Key objects are compared correctly.
        r   r   r   N)	r   r-   r1   r.   r0   r4   r|   r~   objectrG   rsa1rsa2rsa3dsas        r   
test_equalzKeyTests.test_equal  s     x$$x$$x33a13==HIIht{##%%%&&&%%%(((&&&&&r   c                    t          j        | j                  }t          j        | j                  }t          j        t           j                            dd          j                  }t          j        | j                  }|                     ||k               |                     ||k               |                     ||k               |                     |t          k               |                     |dk               dS )zC
        Test that Key objects are not-compared correctly.
        r   r   r   N)	r   r-   r1   r.   r0   r4   r~   r|   r   r   s        r   test_notEqualzKeyTests.test_notEqual  s     x$$x$$x33a13==HIIht{##&&&%%%$$$'''%%%%%r   c                 n    t          j        d          }|                     t          |j                   dS )zO
        The L{keys.Key.data} method raises RuntimeError for bad keys.
        r   N)r   r-   r   RuntimeErrorr   r   s     r   test_dataErrorzKeyTests.test_dataError  s/     #,44444r   c                    |                      t          j        | j                                                  d           |                      t          j        | j                                                  d           dS )z
        Test that the fingerprint method returns fingerprint in
        L{FingerprintFormats.MD5-HEX} format by default.
        /85:25:04:32:58:55:96:9f:57:ee:fb:a8:1a:ea:69:da/63:15:b3:0e:e6:4f:50:de:91:48:3d:01:6b:b3:13:c1N)rS   r   r-   r1   fingerprintr4   rM   s    r   test_fingerprintdefaultz KeyTests.test_fingerprintdefault  s|    
 	HT[!!--//=	
 	
 	
 	HT[!!--//=	
 	
 	
 	
 	
r   c                 B   |                      t          j        | j                                      t          j        j                  d           |                      t          j        | j                                      t          j        j                  d           dS )z
        fingerprint method generates key fingerprint in
        L{FingerprintFormats.MD5-HEX} format if explicitly specified.
        r   r   N)rS   r   r-   r1   r   FingerprintFormatsMD5_HEXr4   rM   s    r   test_fingerprint_md5_hexz!KeyTests.test_fingerprint_md5_hex  s    
 	HT[!!--d.E.MNN=	
 	
 	
 	HT[!!--d.E.MNN=	
 	
 	
 	
 	
r   c                 B   |                      t          j        | j                                      t          j        j                  d           |                      t          j        | j                                      t          j        j                  d           dS )z
        fingerprint method generates key fingerprint in
        L{FingerprintFormats.SHA256-BASE64} format if explicitly specified.
        z,FBTCOoknq0mHy+kpfnY9tDdcAJuWtCpuQMaV3EsvbUI=z,Wz5o2YbKyxOEcJn1au/UaALSVruUzfz0vaLI1xiIGyY=N)rS   r   r-   r1   r   r   SHA256_BASE64r4   rM   s    r   test_fingerprintsha256zKeyTests.test_fingerprintsha256  s    
 	HT[!!--d.E.STT:	
 	
 	
 	HT[!!--d.E.STT:	
 	
 	
 	
 	
r   c                    |                      t          j                  5 }t          j        | j                                      d           ddd           n# 1 swxY w Y   |                     d|j        j        d                    dS )zk
        A C{BadFingerPrintFormat} error is raised when unsupported
        formats are requested.
        zsha256-baseNz+Unsupported fingerprint format: sha256-baser   )	r   r   BadFingerPrintFormatr-   r1   r   rS   	exceptionargs)rG   ems     r   test_fingerprintBadFormatz"KeyTests.test_fingerprintBadFormat  s    
 t899 	=RHT[!!--m<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=92<;LQ;O	
 	
 	
 	
 	
s   -AA Ac                    |                      t          j        | j                                                  d           |                      t          j        | j                                                  d           |                      t          j        | j                                                  d           |                      t          j        | j                                                  d           |                      t          j        | j                                                  d           |                      t          j        | j                                                  t          j	        d                    t          r~|                      t          j        | j                                                  d           |                      t          j        | j                                                  d           |                     t          t          j        d	          j                   |                     t          t          j        d	          j                   |                     t          t          j        |           j                   |                     t          t          j        |           j                   d	S )
zS
        Test that the type method returns the correct type for an object.
        r      ssh-rsar      ssh-dssr   r$   r      ssh-ed25519N)rS   r   r-   r1   r   sshTyper4   r7   r   r6   r   r>   r   r   rM   s    r   	test_typezKeyTests.test_type  s    	$+..3355u===$+..6688*EEE$+..3355u===$+..6688*EEE$*--2244d;;;HTZ  ((**G,B7,K	
 	
 	
  	RTXdo66;;==yIIITXdo66>>@@.QQQ,(;<<<,(>???,(;<<<,(>?????r   c                    |                      t          j        | j                                                  g d           |                      t          j        | j                                                  dg           |                      t          j        | j                                                  dg           t          r@|                      t          j        | j                                                  dg           | 	                    t          t          j        d          j                   | 	                    t          t          j        |           j                   dS )z
        L{keys.Key.supportedSignatureAlgorithms} returns the appropriate
        public key signature algorithms for each key type.
        )   rsa-sha2-512   rsa-sha2-256r  r	  s   ecdsa-sha2-nistp256r
  N)rS   r   r-   r1   supportedSignatureAlgorithmsr4   r7   r   r>   r   r   rM   s    r   !test_supportedSignatureAlgorithmsz*KeyTests.test_supportedSignatureAlgorithms  sA   
 	HT[!!>>@@:::	
 	
 	
 	HT[!!>>@@:,	
 	
 	
 	HTZ  ==??#$	
 	
 	
  	))FFHH    	,(STTT,(STTTTTr   c                     t          j        d          }|                     t          j        t          j        j        |           dS )ze
        A C{BadKeyError} error is raised whey the blob has an unsupported
        key type.
           ssh-badN)r   NSr   r   r   r-   rp   rG   badBlobs     r   test_fromBlobUnsupportedTypez%KeyTests.test_fromBlobUnsupportedType  s9    
 )J''$*DH,?IIIIIr   c                    t           j        d         t           j        d         d}t          j        d          t          j        |d                   z   t          j        |d                   z   }t
          j                            |          }|                     |	                                           | 
                    ||                                           dS )zQ
        A public RSA key is correctly generated from a public key blob.
        r   r   r   r  N)r   r/   r   r  MPr   r-   rp   r|   r}   rS   r   )rG   rsaPublicDatarsaBlobr   s       r   test_fromBlobRSAzKeyTests.test_fromBlobRSA  s    
 %%
 

 Ij!!ic*++,ic*++, 	 $$W--))***66666r   c                 p   t           j        d         t           j        d         t           j        d         t           j        d         d}t          j        d          t          j        |d                   z   t          j        |d                   z   t          j        |d                   z   t          j        |d                   z   }t
          j                            |          }|                     |	                                           | 
                    ||                                           dS )zQ
        A public DSA key is correctly generated from a public key blob.
        r   r   r!   r    )r   r   r!   r    r	  N)r   r3   r   r  r  r   r-   rp   r|   r}   rS   r   )rG   dsaPublicDatadsaBlobr   s       r   test_fromBlobDSAzKeyTests.test_fromBlobDSA/  s   
 %%%%	
 
 Ij!!ic*++,ic*++, ic*++, ic*++	, 	 $$W--))***66666r   c                 r   ddl m} t          j        d         t          j        d         t          j        d         d}t	          j        |d                   t	          j        |d         dd                   z   t	          j        d	|                    |d         d
          z   |                    |d         d
          z             z   }t          j        	                    |          }| 
                    |                                           |                     ||                                           dS )zA
        Key.fromString generates ECDSA keys from blobs.
        r   utilsr"   r    r$   r"   r    r$   N       )r	   r#  r   r6   r   r  int_to_bytesr   r-   rp   r|   r}   rS   r   )rG   r#  ecPublicDataecblobeckeys        r   test_fromBlobECDSAzKeyTests.test_fromBlobECDSAF  s&    	'&&&&& ',',+G4
 
 Il7+,,iW-bcc2334i$$\#%6;;<$$\#%6;;<  	 ##F++(()))uzz||44444r   c                 h   dt           j        d         i}t          j        d          t          j        |d                   z   }t          j                            |          }|                     |                                           | 	                    ||
                                           dS )zU
        A public Ed25519 key is correctly generated from a public key blob.
        r%   r
  N)r   r=   r   r  r   r-   rp   r|   r}   rS   r   )rG   ed25519PublicDataed25519Blobr   s       r   test_fromBlobEd25519zKeyTests.test_fromBlobEd25519`  s     $S)
 i//&)<Mc<R2S2SSX((55

++--...*JOO,=,=>>>>>r   c                     t          j        d          }|                     t          j        t          j        j        |           dS )zh
        C{BadKeyError} is raised when loading a private blob with an
        unsupported type.
        r  N)r   r  r   r   r   r-   _fromString_PRIVATE_BLOBr  s     r   #test_fromPrivateBlobUnsupportedTypez,KeyTests.test_fromPrivateBlobUnsupportedTypep  s9    
 )J''$*DH,MwWWWWWr   c                 d   t          j        d          t          j        t          j        d                   z   t          j        t          j        d                   z   t          j        t          j        d                   z   t          j        t          j        d                   z   t          j        t          j        d                   z   t          j        t          j        d                   z   }t
          j                            |          }|                     |	                                           | 
                    t          j        |                                           | 
                    |t
          j                            |                                                     dS )	zS
        A private RSA key is correctly generated from a private key blob.
        r  r   r   r   r   r   r   N)r   r  r  r   r/   r   r-   r2  r~   r}   rS   r   privateBlob)rG   r  r   s      r   test_fromPrivateBlobRSAz KeyTests.test_fromPrivateBlobRSAy  sL   
 Ij!!i,--.i,--. i,--. i,--	.
 i,--. i,--. 	 227;;**+++&++--888DH55f6H6H6J6JKK	
 	
 	
 	
 	
r   c                    t          j        d          t          j        t          j        d                   z   t          j        t          j        d                   z   t          j        t          j        d                   z   t          j        t          j        d                   z   t          j        t          j        d                   z   }t
          j                            |          }|                     |	                                           | 
                    t          j        |                                           | 
                    |t
          j                            |                                                     dS )zS
        A private DSA key is correctly generated from a private key blob.
        r	  r   r   r!   r    r"   N)r   r  r  r   r3   r   r-   r2  r~   r}   rS   r   r5  )rG   r  r   s      r   test_fromPrivateBlobDSAz KeyTests.test_fromPrivateBlobDSA  s1   
 Ij!!i,--.i,--. i,--. i,--	.
 i,--. 	 227;;**+++&++--888DH55f6H6H6J6JKK	
 	
 	
 	
 	
r   c                    ddl m} ddlm} |                    t
          j        d         t
          j        d         |                                          }t          j	        t
          j        d                   t          j	        t
          j        d         dd	                   z   t          j	        |
                    t                                                    |j        j        |j        j                            z   t          j        t
          j        d
                   z   }t$          j                            |          }|                     |                                           |                     t
          j        |                                           |                     |t$          j                            |                                                     d	S )zR
        A private EC key is correctly generated from a private key blob.
        r   serialization)ecr"   r    r$  r$   r%  Nr#   )cryptography.hazmat.primitivesr;  )cryptography.hazmat.primitives.asymmetricr<  EllipticCurvePublicNumbersr   r6   	SECP256R1r   r  
public_keyr
   public_bytesEncodingX962PublicFormatUncompressedPointr  r   r-   r2  r~   r}   rS   r   r5  )rG   r;  r<  publicNumbersr*  r+  s         r   test_fromPrivateBlobECDSAz"KeyTests.test_fromPrivateBlobECDSA  s    	A@@@@@@@@@@@55$S)$S),,.. 6 
 
 Ig,W566i.w7<==>i(():):;;HH!*/!.@   i.~>??@ 	 11&99))***/>>> A A%BSBSBUBU V VWWWWWr   c                 b   t          j        d          t          j        t          j        d                   z   t          j        t          j        d         t          j        d         z             z   }t          j                            |          }|                     |                                           | 	                    t          j        |
                                           | 	                    |t          j                            |                                                     dS )zW
        A private Ed25519 key is correctly generated from a private key blob.
        r
  r%   r&   N)r   r  r   r=   r   r-   r2  r~   r}   rS   r   r5  )rG   r/  r   s      r   test_fromPrivateBlobEd25519z$KeyTests.test_fromPrivateBlobEd25519  s     In%%i+C0112i+C073Fs3KKLLM 	 X66{CC
,,..///,joo.?.?@@@99*:P:P:R:RSS	
 	
 	
 	
 	
r   c                    |                      t          j        | j                                                  t          j        d          t          j        | j                                        j	        j
                  z   t          j        | j                                        j	        j                  z              dS )zL
        Return the over-the-wire SSH format of the RSA public key.
        r  N)rS   r   r-   r1   r\   r   r  r  private_numberspublic_numbersr   r   rM   s    r   test_blobRSAzKeyTests.test_blobRSA  s     	HT[!!&&((Ij!!i3355DFGGHi3355DFGGH	
 	
 	
 	
 	
r   c                    | j                                         j        }|                     t	          j        | j                                                   t          j        d          t          j	        |j
        j                  z   t          j	        |j
        j                  z   t          j	        |j
        j                  z   t          j	        |j                  z              dS )zL
        Return the over-the-wire SSH format of the DSA public key.
        r	  N)r4   rL  rM  rS   r   r-   r\   r   r  r  parameter_numbersr   r   r!   r    rG   rG  s     r   test_blobDSAzKeyTests.test_blobDSA  s     3355DHT[!!&&((Ij!!i79::;i79::; i79::; i((	)	
 	
 	
 	
 	
r   c                 f   ddl m} | j        j        j        dz   dz  }|                     t          j        | j                                                  t          j
        t          j        d                   t          j
        t          j        d         dd                   z   t          j
        d|                    | j                                        j        j        |          z   |                    | j                                        j        j        |          z             z              dS )	zK
        Return the over-the-wire SSH format of the EC public key.
        r   r"        r$   r%  Nr&  )r	   r#  r7   r$   key_sizerS   r   r-   r\   r   r  r   r6   r(  rL  rM  r"   r    )rG   r#  
byteLengths      r   test_blobECzKeyTests.test_blobEC  s    	'&&&&&j&/!39
HTZ  %%''Ig,W566i.w7<==>i$$J..00?A:  $$J..00?A: 	 
	
 	
 	
 	
 	
r   c                 `   ddl m} | j                                                            |j        j        |j        j                  }|                     t          j
        | j                                                  t          j        d          t          j        |          z              dS )zP
        Return the over-the-wire SSH format of the Ed25519 public key.
        r   r:  r
  N)r=  r;  r>   rA  rB  rC  RawrE  rS   r   r-   r\   r   r  )rG   r;  publicBytess      r   test_blobEd25519zKeyTests.test_blobEd25519  s    
 	A@@@@@o0022??"&(B(F
 
 	HT_%%**,,In%%	+(>(>>	
 	
 	
 	
 	
r   c                 n    t          j        d          }|                     t          |j                   dS )zx
        C{RuntimeError} is raised when the blob is requested for a Key
        which is not wrapping anything.
        N)r   r-   r   r   r\   r   s     r   test_blobNoKeyzKeyTests.test_blobNoKey  s/    
 $,44444r   c                 &   | j                                         }|                     t          j        | j                                                   t          j        d          t          j        |j	        j
                  z   t          j        |j	        j                  z   t          j        |j                  z   t          j        |j                  z   t          j        |j                  z   t          j        |j                  z              dS )zn
        L{keys.Key.privateBlob} returns the SSH protocol-level format of an
        RSA private key.
        r  N)r1   rL  rS   r   r-   r5  r   r  r  rM  r   r   r   iqmpr   r   )rG   numberss     r   test_privateBlobRSAzKeyTests.test_privateBlobRSA  s    
 +--//HT[!!--//Ij!!i.0112i.0112 i	""# i%%	&
 i	""# i	""#		
 		
 		
 		
 		
r   c                 4   | j                                         j        }|                     t	          j        | j                                                   t          j        d          t          j	        |j
        j                  z   t          j	        |j
        j                  z   t          j	        |j
        j                  z   t          j	        |j                  z   t          j	        | j                                         j                  z              dS )zm
        L{keys.Key.privateBlob} returns the SSH protocol-level format of a DSA
        private key.
        r	  N)r4   rL  rM  rS   r   r-   r5  r   r  r  rP  r   r   r!   r    r"   rQ  s     r   test_privateBlobDSAzKeyTests.test_privateBlobDSA/  s    
 3355DHT[!!--//Ij!!i79::;i79::; i79::; i((	)
 i33557889	
 	
 	
 	
 	
r   c           
      8   ddl m} |                     t          j        | j                                                  t          j        t          j
        d                   t          j        t          j
        d         dd                   z   t          j        | j                                                            |j        j        |j        j                            z   t          j        | j                                        j                  z              dS )zj
        L{keys.Key.privateBlob} returns the SSH ptotocol-level format of EC
        private key.
        r   r:  r$   r%  N)r=  r;  rS   r   r-   r7   r5  r   r  r   r6   rA  rB  rC  rD  rE  rF  r  rL  private_value)rG   r;  s     r   test_privateBlobECzKeyTests.test_privateBlobEC@  s    
 	A@@@@@HTZ  ,,..Ig,W566i.w7<==>i
%%''44!*/!.@   i
2244BCCD	
 	
 	
 	
 	
r   c                    ddl m} | j                                                            |j        j        |j        j                  }| j                            |j        j        |j	        j        |
                                          }|                     t          j        | j                                                  t          j        d          t          j        |          z   t          j        ||z             z              dS )zr
        L{keys.Key.privateBlob} returns the SSH protocol-level format of an
        Ed25519 private key.
        r   r:  r
  N)r=  r;  r>   rA  rB  rC  rZ  rE  private_bytesPrivateFormatNoEncryptionrS   r   r-   r5  r   r  )rG   r;  r[  privateBytess       r   test_privateBlobEd25519z KeyTests.test_privateBlobEd25519T  s     	A@@@@@o0022??"&(B(F
 
 44"&'+&&((
 
 	HT_%%1133In%%i$$%i{2334	
 	
 	
 	
 	
r   c                 n    t          j        d          }|                     t          |j                   dS )zV
        Raises L{RuntimeError} if the underlying key object does not exists.
        N)r   r-   r   r   r5  r   s     r   test_privateBlobNoKeyObjectz$KeyTests.test_privateBlobNoKeyObjectl  s0     $,(:;;;;;r   c                    t           j                            t          j                  }|                     |                    d                                          t          j                   | 	                    |                    dd          
                    d          dk               |                     |                                                    d          t          j        dd                    |                     |                                                    dd	          t          j                   dS )
zO
        L{keys.Key.toString} serializes an RSA key in OpenSSH format.
        r   r   r   s   DEK-Infor   Nr%     commentcomment)r   r-   rp   r   rl   rS   r   striprb   r|   findrq   r^   rG   r   s     r   test_toOpenSSHRSAzKeyTests.test_toOpenSSHRSAt  s    h!!'"<==i006688':TUUULL|L<<AA+NNQRR	
 	
 	
 	JJLL!!),,g.G.L	
 	
 	
 	JJLL!!)Z!@@%	
 	
 	
 	
 	
r   c                 >   t           j                            t          j                  }|                    dd          }|                    ddd          }|                     d|                                d                    |                     d|                                d                    |                     |t           j                            |                     |                     |t           j                            |d                     d	S )
zT
        L{keys.Key.toString} serializes an RSA key in OpenSSH's v1 format.
        r   v1subtyper   r{  r   #   -----BEGIN OPENSSH PRIVATE KEY-----r   r   N)r   r-   rp   r   rb   r   rS   
splitlinesrG   r   new_key_datanew_enc_key_datas       r   test_toOpenSSHRSA_v1_formatz$KeyTests.test_toOpenSSHRSA_v1_format      h!!'"<==||It|<<<<	4K<XX2L4K4K4M4Ma4P	
 	
 	
 	24D4O4O4Q4QRS4T	
 	
 	
 	dh11,??@@@$$%5+$NN	
 	
 	
 	
 	
r   c                 
   t           j                            t          j                  }|                     |                    d                                          t          j                   |                     |	                                                    dd          t          j
                   |                     |	                                                    d          t          j
        dd                    dS )zN
        L{keys.Key.toString} serializes a DSA key in OpenSSH format.
        r   rq  rr  Nr%  )r   r-   rp   r   rk   rS   r   rt  rd   rq   r_   rv  s     r   test_toOpenSSHDSAzKeyTests.test_toOpenSSHDSA  s     h!!'"899i006688':TUUUJJLL!!)Z!@@%	
 	
 	
 	JJLL!!),,g.G.L	
 	
 	
 	
 	
r   c                 >   t           j                            t          j                  }|                    dd          }|                    ddd          }|                     d|                                d                    |                     d|                                d                    |                     |t           j                            |                     |                     |t           j                            |d                     d	S )
zS
        L{keys.Key.toString} serializes a DSA key in OpenSSH's v1 format.
        r   ry  rz  r   r|  r}  r   r   N)r   r-   rp   r   rd   r   rS   r~  r  s       r   test_toOpenSSHDSA_v1_formatz$KeyTests.test_toOpenSSHDSA_v1_format  r  r   c                    t           j                            t          j                  }|                     |                                                    dd          t          j                   |                     |                                                    d          t          j        dd                    dS )zQ
        L{keys.Key.toString} serializes an ECDSA key in OpenSSH format.
        r   rq  rr  Nr%  )	r   r-   rp   r   rf   rS   rq   r   r`   rv  s     r   test_toOpenSSHECDSAzKeyTests.test_toOpenSSHECDSA  s     h!!'">??JJLL!!)Z!@@'	
 	
 	
 	JJLL!!),,g.I#2#.N	
 	
 	
 	
 	
r   c                 >   t           j                            t          j                  }|                    dd          }|                    ddd          }|                     d|                                d                    |                     d|                                d                    |                     |t           j                            |                     |                     |t           j                            |d                     d	S )
zV
        L{keys.Key.toString} serializes an ECDSA key in OpenSSH's v1 format.
        r   ry  rz  r   r|  r}  r   r   N)r   r-   rp   r   rf   r   rS   r~  r  s       r   test_toOpenSSHECDSA_v1_formatz&KeyTests.test_toOpenSSHECDSA_v1_format  s    h!!'">??||It|<<<<	4K<XX2L4K4K4M4Ma4P	
 	
 	
 	24D4O4O4Q4QRS4T	
 	
 	
 	dh11,??@@@$$%5+$NN	
 	
 	
 	
 	
r   c                    t           j                            t          j                  }|                    d          }|                    dd          }|                     d|                                d                    |                     d|                                d                    |                     |t           j                            |                     |                     |t           j                            |d                     |                     ||                    dd                     dS )	zX
        L{keys.Key.toString} serializes an Ed25519 key in OpenSSH's v1 format.
        r   r   r   r}  r   ry  rz  N)r   r-   rp   r   rh   r   rS   r~  r  s       r   test_toOpenSSHEd25519zKeyTests.test_toOpenSSHEd25519  s,   
 h!!'"DEE||I..<<	k<JJ2L4K4K4M4Ma4P	
 	
 	
 	24D4O4O4Q4QRS4T	
 	
 	
 	dh11,??@@@$$%5+$NN	
 	
 	
 	s||It|'L'LMMMMMr   c                     t           j                            t          j                  }|                     t          |j        dd           dS )z
        L{keys.Key.toString} refuses to serialize an Ed25519 key in
        OpenSSH's old PEM format, as no encoding of Ed25519 is defined for
        that format.
        r   PEMrz  N)r   r-   rp   r   rh   r   
ValueErrorr   rv  s     r    test_toOpenSSHEd25519_PEM_formatz)KeyTests.test_toOpenSSHEd25519_PEM_format  sA     h!!'"DEE*clIuMMMMMr   c                 H   t           j                            t          j                  }|                     |                    d          t          j                   |                     |                                                    d          t          j	                   dS )zK
        L{keys.Key.toString} serializes an RSA key in LSH format.
        lshN)
r   r-   rp   r   rb   rS   r   rF   rq   ri   rv  s     r   test_toLSHRSAzKeyTests.test_toLSHRSA  v     h!!'"<==e,,g.DEEE..u55w7LMMMMMr   c                 H   t           j                            t          j                  }|                     |                    d          t          j                   |                     |                                                    d          t          j	                   dS )zJ
        L{keys.Key.toString} serializes a DSA key in LSH format.
        r  N)
r   r-   rp   r   rd   rS   r   rk   rq   rj   rv  s     r   test_toLSHDSAzKeyTests.test_toLSHDSA  r  r   c                     t           j                            t          j                  }|                     |                    d          t          j                   dS )zP
        L{keys.Key.toString} serializes an RSA key in Agent v3 format.
        r[   N)r   r-   rp   r   rb   rS   r   rl   rv  s     r   test_toAgentv3RSAzKeyTests.test_toAgentv3RSA  G     h!!'"<==i00'2LMMMMMr   c                     t           j                            t          j                  }|                     |                    d          t          j                   dS )zO
        L{keys.Key.toString} serializes a DSA key in Agent v3 format.
        r[   N)r   r-   rp   r   rd   rS   r   rm   rv  s     r   test_toAgentv3DSAzKeyTests.test_toAgentv3DSA  r  r   c                 D   t          j        | j                  }|                    dd          }|                     t           j                            |d                                          |           |                     t           j        |j        dd           dS )zd
        L{keys.Key.toString} applies Normalization Form KC to Unicode
        passphrases.
        r   r   r   r   r   N)	r   r-   r1   r   rS   rp   r   r   r   r   s      r   (test_toStringNormalizesUnicodePassphrasez1KeyTests.test_toStringNormalizesUnicodePassphrase  s    
 ht{##<<	6K<LLH5I5P5P5R5RSS	
 	
 	
 	-L*	 	 	
 	
 	
 	
 	
r   c                     |                      t          j        t          j        | j                  j        d           dS )zm
        L{keys.Key.toString} raises L{keys.BadKeyError} when passed an invalid
        format type.
        r   N)r   r   r   r-   r1   r   rM   s    r   test_toStringErrorszKeyTests.test_toStringErrors&  s4    
 	$*DHT[,A,A,JJWWWWWr   c           	         d}t           j                            t          j                  }|                    |          }|                     |                                                    ||                     |                     |                    ||                     t          j
        |          \  }}|                     |d           |                     |j                                                            t          j
        |          d         |t          j                    t#          j                                         dS )zR
        Signed data can be verified using RSA (with SHA-1, the default).
        	   some-datar  r   N)r   r-   rp   r   rb   signr|   rq   verifyr   getNSrS   assertIsNoner0   rA  r   PKCS1v15r   SHA1rG   r   r   	signaturesignatureTypes        r   test_signAndVerifyRSAzKeyTests.test_signAndVerifyRSA-  s    h!!'"<==HHTNN	

++It<<===

9d33444#)<	#:#: y
333N%%''..Y''*D'2B2D2Dfkmm 	
 	
 	
 	
 	
r   c           	         d}t           j                            t          j                  }|                    |d          }|                     |                                                    ||                     |                     |                    ||                     t          j
        |          \  }}|                     |d           |                     |j                                                            t          j
        |          d         |t          j                    t#          j                                         dS )zE
        Signed data can be verified using RSA with SHA-256.
        r  r  r  r   N)r   r-   rp   r   rb   r  r|   rq   r  r   r  rS   r  r0   rA  r   r  r   SHA256r  s        r   test_signAndVerifyRSASHA256z$KeyTests.test_signAndVerifyRSASHA256?      h!!'"<==HHTHAA	

++It<<===

9d33444#)<	#:#: y888N%%''..Y''*D'2B2D2Dfmoo 	
 	
 	
 	
 	
r   c           	         d}t           j                            t          j                  }|                    |d          }|                     |                                                    ||                     |                     |                    ||                     t          j
        |          \  }}|                     |d           |                     |j                                                            t          j
        |          d         |t          j                    t#          j                                         dS )zE
        Signed data can be verified using RSA with SHA-512.
        r  r  r  r   N)r   r-   rp   r   rb   r  r|   rq   r  r   r  rS   r  r0   rA  r   r  r   SHA512r  s        r   test_signAndVerifyRSASHA512z$KeyTests.test_signAndVerifyRSASHA512Q  r  r   c                 N   d}t           j                            t          j                  }|                    |          }|                     |                                                    ||                     |                     |                    ||                     dS )z8
        Signed data can be verified using DSA.
        r  N)	r   r-   rp   r   rd   r  r|   rq   r  rG   r   r   r  s       r   test_signAndVerifyDSAzKeyTests.test_signAndVerifyDSAc  s     h!!'"<==HHTNN	

++It<<===

9d3344444r   c                    d}t           j                            t          j                  }|                    |          }t           j                            t          j                  }|                    |          }t           j                            t          j                  }|                    |          }|                     |	                                
                    ||                     |                     |
                    ||                     |                     |	                                
                    ||                     |                     |
                    ||                     |                     |	                                
                    ||                     |                     |
                    ||                     dS )z7
        Signed data can be verified using EC.
        r  N)r   r-   rp   r   rf   r  r   r   r|   rq   r  )rG   r   r   r  key384signature384key521signature521s           r   test_signAndVerifyECzKeyTests.test_signAndVerifyECm  sf    h!!'">??HHTNN	$$W%DEE{{4(($$W%DEE{{4((

++It<<===

9d33444..|TBBCCClD99:::..|TBBCCClD99:::::r   c                 N   d}t           j                            t          j                  }|                    |          }|                     |                                                    ||                     |                     |                    ||                     dS )z<
        Signed data can be verified using Ed25519.
        r  N)	r   r-   rp   r   rh   r  r|   rq   r  r  s       r   test_signAndVerifyEd25519z"KeyTests.test_signAndVerifyEd25519  s    
 h!!'"DEEHHTNN	

++It<<===

9d3344444r   c                 J   t           j                            t          j                  }|                     t           j        |j        dd           t           j                            t          j                  }|                     t           j        |j        dd           dS )z
        L{keys.Key.sign} raises L{keys.BadSignatureAlgorithmError} when
        asked to sign with a public key algorithm that doesn't make sense
        with the given key.
        s	   some datar	  r  N)	r   r-   rp   r   rb   r   BadSignatureAlgorithmErrorr  rf   rv  s     r   test_signWithWrongAlgorithmz$KeyTests.test_signWithWrongAlgorithm  s     h!!'"<==+H$	 	 	
 	
 	
 h!!'">??+H$	 	 	
 	
 	
 	
 	
r   c                 l   t           j                            t          j                  }|                     |                    | j        d                     |                     |                    | j        d                     |                     |                    | j	        d                     dS )zC
        A known-good RSA signature verifies successfully.
        r      aN)
r   r-   rp   r   r^   r|   r  r?   r~   r@   rv  s     r   test_verifyRSAzKeyTests.test_verifyRSA       h!!'";<<

4#4c::;;;D$5t<<===D$5s;;<<<<<r   c                 l   t           j                            t          j                  }|                     |                    | j        d                     |                     |                    | j        d                     |                     |                    | j	        d                     dS )zC
        A known-good DSA signature verifies successfully.
        r   r  N)
r   r-   rp   r   r_   r|   r  r@   r~   r?   rv  s     r   test_verifyDSAzKeyTests.test_verifyDSA  r  r   c                     t           j                            t          j                  }|                     |                    | j        dd         d                     dS )z
        Some commercial SSH servers send DSA keys as 2 20-byte numbers;
        they are still verified as valid keys.
        iNr   )r   r-   rp   r   r_   r|   r  r@   rv  s     r   test_verifyDSANoPrefixzKeyTests.test_verifyDSANoPrefix  sN    
 h!!'";<<

4#4STT#:C@@AAAAAr   c                 z    |                      t          t          j        | j                            d           dS )zn
        The repr of a L{keys.Key} contains all of the RSA components for an RSA
        private key.
        a\  <RSA Private Key (2048 bits)
attr d:
	21:4c:08:66:a2:28:d5:b4:fb:8e:0f:72:1b:85:09:
	00:b9:f2:4e:37:f0:1c:57:4b:e3:51:7f:9e:23:a7:
	e4:3a:98:55:1b:ea:8b:7a:98:1e:bc:d8:ba:b1:f9:
	89:12:18:60:ac:e8:cc:0b:4e:09:5a:40:6a:ba:2f:
	99:f8:b3:24:60:84:b9:ce:69:95:9a:f9:e2:fc:1f:
	51:4d:27:15:db:2b:27:ad:ef:b4:69:ac:be:7d:10:
	eb:86:47:70:73:b4:00:87:95:15:3b:37:f9:e7:14:
	e7:80:bb:68:1e:1b:e6:dd:bb:73:63:b9:67:e6:b2:
	27:7f:cf:cf:30:9b:c2:98:fd:d9:18:36:2f:36:2e:
	f1:3d:81:7a:9f:e1:03:2d:47:db:34:51:62:39:dd:
	4f:e9:ac:a8:8b:d9:d6:f3:84:c4:17:b9:71:9d:06:
	08:42:78:4d:bb:c5:2a:f4:c3:58:cd:55:2b:ed:be:
	33:5f:04:ea:7b:e6:04:24:63:f2:2d:d7:3d:1b:6c:
	d5:9c:63:43:2f:92:88:8d:3e:6e:da:18:37:d8:0f:
	25:67:89:1d:b9:46:34:5e:c9:ce:c4:8b:ed:92:5a:
	33:07:0f:df:86:08:f9:92:e9:db:eb:38:08:36:c9:
	cd:cd:0a:01:48:5b:39:3e:7a:ca:c6:80:a9:dc:d4:
	39
attr e:
	01:00:01
attr n:
	00:d5:6a:ac:78:23:d6:d6:1b:ec:25:a1:50:c4:77:
	63:50:84:45:01:55:42:14:2a:2a:e0:d0:60:ee:d4:
	e9:a3:ad:4a:fa:39:06:5e:84:55:75:5f:00:36:bf:
	6f:aa:2a:3f:83:26:37:c1:69:2e:5b:fd:f0:f3:d2:
	7d:d6:98:cd:3a:40:78:d5:ca:a8:18:c0:11:93:24:
	09:0c:81:4c:8f:f7:9c:ed:13:16:6a:a4:04:e9:49:
	77:c3:e4:55:64:b3:79:68:9e:2c:08:eb:ac:e8:04:
	2d:21:77:05:a7:8e:ef:53:30:0d:a5:e5:bb:3d:6a:
	e2:09:36:6f:fd:34:d3:7d:6f:46:ff:87:da:a9:29:
	27:aa:ff:ad:f5:85:e6:3e:1a:b8:7a:1d:4a:b1:ea:
	c0:5a:f7:30:df:1f:c2:a4:e4:ef:3f:91:49:96:40:
	d5:19:77:2d:37:c3:5e:ec:9d:a6:3a:44:a5:c2:a4:
	29:dd:d5:ba:9c:3d:45:b3:c6:2c:18:64:d5:ba:3d:
	df:ab:7f:cd:42:ac:a7:f1:18:0b:a0:58:15:62:0b:
	a4:2a:6e:43:c3:e4:04:9f:35:a3:47:8e:46:ed:33:
	a5:65:bd:bc:3b:29:6e:02:0b:57:df:74:e8:13:b4:
	37:35:7e:83:5f:20:26:60:a6:dc:ad:8b:c6:6c:79:
	98:f7
attr p:
	00:d9:70:06:d8:e2:bc:d4:78:91:50:94:d4:c1:1b:
	89:38:6c:46:64:5a:51:a0:9a:07:3d:48:8f:03:51:
	cc:6b:12:8e:7d:1a:b1:65:e7:71:75:39:e0:32:05:
	75:8d:18:4c:af:93:b1:49:b1:66:5f:78:62:7a:d1:
	0c:ca:e6:4d:43:b3:9c:f4:6b:7d:e6:0c:98:dc:cf:
	21:62:8e:d5:2e:12:de:04:ae:d7:24:6e:83:31:a2:
	15:a2:44:3d:22:a9:62:26:22:b9:b2:ed:54:0a:9d:
	08:83:a7:07:0d:ff:19:18:8e:d8:ab:1d:da:48:9c:
	31:68:11:a1:66:6d:e3:d8:1d
attr q:
	00:fb:44:17:8b:a4:36:be:1e:37:1d:a7:f6:61:6c:
	04:c4:aa:dd:78:3e:07:8c:1e:33:02:ae:03:14:87:
	83:7a:e5:9e:7d:08:67:a8:f2:aa:bf:12:70:cf:72:
	a9:a7:c7:0b:1d:88:d5:20:fd:9c:63:ca:47:30:55:
	4e:8b:c4:cf:f4:7f:16:a4:92:12:74:a1:09:c2:c4:
	6e:9c:8c:33:ef:a5:e5:f7:e0:2b:ad:4f:5c:11:aa:
	1a:84:37:5b:fd:7a:ea:c3:cd:7c:b0:c8:e4:1f:54:
	63:b5:c7:af:df:f4:09:a7:fc:c7:25:fc:5c:e9:91:
	d7:92:c5:98:1e:56:d3:b1:23
attr u:
	00:85:4b:1b:7a:9b:12:10:37:9e:1f:ad:5e:da:fe:
	c6:96:fe:df:35:6b:b9:34:e2:16:97:92:26:09:bd:
	bd:70:20:03:a7:35:bd:2d:1b:a0:d2:07:47:2b:d4:
	de:a8:a8:07:07:1b:b8:04:20:a7:27:41:3c:6c:39:
	39:e9:41:ce:e7:17:1d:d1:4c:5c:bc:3d:d2:26:26:
	fe:6a:d6:fd:48:72:ae:46:fa:7b:c3:d3:19:60:44:
	1d:a5:13:a7:80:f5:63:29:d4:7a:5d:06:07:16:5d:
	f6:8b:3d:cb:64:3a:e2:84:5a:4d:8c:06:2d:2d:9d:
	1c:eb:83:4c:78:3d:79:54:ce>N)rS   reprr   r-   r1   rM   s    r   test_reprPrivateRSAzKeyTests.test_reprPrivateRSA  sH    
 	$+&&''F!I	
 I	
 I	
 I	
 I	
r   c                     |                      t          t          j        | j                                                            d           dS )zm
        The repr of a L{keys.Key} contains all of the RSA components for an RSA
        public key.
        a\  <RSA Public Key (2048 bits)
attr e:
	01:00:01
attr n:
	00:d5:6a:ac:78:23:d6:d6:1b:ec:25:a1:50:c4:77:
	63:50:84:45:01:55:42:14:2a:2a:e0:d0:60:ee:d4:
	e9:a3:ad:4a:fa:39:06:5e:84:55:75:5f:00:36:bf:
	6f:aa:2a:3f:83:26:37:c1:69:2e:5b:fd:f0:f3:d2:
	7d:d6:98:cd:3a:40:78:d5:ca:a8:18:c0:11:93:24:
	09:0c:81:4c:8f:f7:9c:ed:13:16:6a:a4:04:e9:49:
	77:c3:e4:55:64:b3:79:68:9e:2c:08:eb:ac:e8:04:
	2d:21:77:05:a7:8e:ef:53:30:0d:a5:e5:bb:3d:6a:
	e2:09:36:6f:fd:34:d3:7d:6f:46:ff:87:da:a9:29:
	27:aa:ff:ad:f5:85:e6:3e:1a:b8:7a:1d:4a:b1:ea:
	c0:5a:f7:30:df:1f:c2:a4:e4:ef:3f:91:49:96:40:
	d5:19:77:2d:37:c3:5e:ec:9d:a6:3a:44:a5:c2:a4:
	29:dd:d5:ba:9c:3d:45:b3:c6:2c:18:64:d5:ba:3d:
	df:ab:7f:cd:42:ac:a7:f1:18:0b:a0:58:15:62:0b:
	a4:2a:6e:43:c3:e4:04:9f:35:a3:47:8e:46:ed:33:
	a5:65:bd:bc:3b:29:6e:02:0b:57:df:74:e8:13:b4:
	37:35:7e:83:5f:20:26:60:a6:dc:ad:8b:c6:6c:79:
	98:f7>N)rS   r  r   r-   r1   rq   rM   s    r   test_reprPublicRSAzKeyTests.test_reprPublicRSA  sN    
 	$+&&--//00	
 	
 	
 	
 	
r   c                     |                      t          t          j        | j                                                             t          d          j        di t          j	                   dS )zl
        The repr of a L{keys.Key} contains all the OpenSSH format for an ECDSA
        public key.
        z                <Elliptic Curve Public Key (256 bits)
                curve:
                	ecdsa-sha2-nistp256
                x:
                	{x}
                y:
                	{y}>
                Nr*   )
rS   r  r   r-   r7   rq   r   formatr   r6   rM   s    r   test_reprPublicECDSAzKeyTests.test_reprPublicECDSA+  s    
 	$*%%,,..//
F
 
 
/ 
/ -
/ 
/	
 	
 	
 	
 	
r   c                     |                      t          t          j        | j                             t          d          j        di t          j                   dS )zm
        The repr of a L{keys.Key} contains all the OpenSSH format for an ECDSA
        private key.
        a                  <Elliptic Curve Private Key (256 bits)
                curve:
                	ecdsa-sha2-nistp256
                privateValue:
                	{privateValue}
                x:
                	{x}
                y:
                	{y}>
                Nr*   )	rS   r  r   r-   r7   r   r  r   r6   rM   s    r   test_reprPrivateECDSAzKeyTests.test_reprPrivateECDSA?  st    
 	$*%%&&F
  / / -/ /	
 	
 	
 	
 	
r   c                     |                      t          t          j        | j                                                            t          d                     dS )zn
        The repr of a L{keys.Key} contains all the OpenSSH format for an
        Ed25519 public key.
        z                <Ed25519 Public Key (256 bits)
                attr a:
                	f1:16:d1:15:4a:1e:15:0e:19:5e:19:46:b5:f2:44:
                	0d:b2:52:a0:ae:2a:6b:23:13:73:45:fd:40:d9:57:
                	7b:8b>N)rS   r  r   r-   r>   rq   r   rM   s    r   test_reprPublicEd25519zKeyTests.test_reprPublicEd25519U  s[     	$/**113344 
	
 
	
 
	
 
	
 
	
r   c                     |                      t          t          j        | j                            t          d                     dS )zo
        The repr of a L{keys.Key} contains all the OpenSSH format for an
        Ed25519 private key.
        a                  <Ed25519 Private Key (256 bits)
                attr a:
                	f1:16:d1:15:4a:1e:15:0e:19:5e:19:46:b5:f2:44:
                	0d:b2:52:a0:ae:2a:6b:23:13:73:45:fd:40:d9:57:
                	7b:8b
                attr k:
                	37:2f:25:da:8d:d4:a8:9a:78:7c:61:f0:98:01:c6:
                	f4:5e:6d:67:05:69:31:37:4c:69:0d:05:55:bb:c9:
                	44:58>N)rS   r  r   r-   r>   r   rM   s    r   test_reprPrivateEd25519z KeyTests.test_reprPrivateEd25519g  sO     	$/**++	 	
 	
 	
 	
 	
r   )Z__name__
__module____qualname__r	   skipCryptographyr   rH   rN   rU   rn   rz   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  r3  r6  r8  rH  rJ  rN  rR  rX  r\  r^  rb  rd  rg  rm  ro  rw  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   *   s       =, =, =,~     
D 
D 
DAH AH AHFT T T04 4 4(9 9 9) ) )6 6 6# # #J
 
 

 
 
.$ $ $
 
 
0
 
 
,
 
 

 
 
	
 	
 	
	
 	
 	


 

 


 
 
&g
 g
 g
R

 

 

. . .' ' '& & &5 5 5
 
 

 
 

 
 
	
 	
 	
@ @ @(U U U0J J J7 7 7&7 7 7.5 5 54 ? ? ?X X X
 
 
,
 
 
*X X X< 
 
 
$	
 	
 	

 
 

 
 
, 
 
 
5 5 5
 
 
"
 
 
"
 
 
( 
 
 
.< < <
 
 
"
 
 
$
 
 

 
 
$
 
 

 
 
$ N N N& N N NN N NN N NN N NN N N
 
 
(X X X
 
 
$
 
 
$
 
 
$5 5 5; ; ;* 5 5 5
 
 
*= = == = =B B BN
 N
 N
`
 
 
>
 
 
(
 
 
, 
 
 
" 
 
 
 
 
r   r   c                   ,    e Zd ZdZeeZd Zd Zd Z	dS )PersistentRSAKeyTestsz1
    Tests for L{keys._getPersistentRSAKey}.
    Nc                 <   t          |                                           }|                    d          }t          j        |d          }|                     |                                d           |                     |                                           dS )z
        L{keys._getPersistentRSAKey} will put the key in
        C{directory}/C{filename}, with the key length of C{keySize}.
        	mykey.pemrQ   keySizeN)	r   rB   childr   _getPersistentRSAKeyrS   rT   r|   existsrG   tempDirrC   r   s       r   test_providedArgumentsz,PersistentRSAKeyTests.test_providedArguments  s    
 4;;==))--,,'>>>T***(()))))r   c                 0   t          |                                           }|                    d          }t          j        |d          }|                     |                                d           |                     |                                           |	                                }t          j        |d          }|                     |                                d           |                     |	                                |           dS )zm
        L{keys._getPersistentRSAKey} will not regenerate the key if the key
        already exists.
        r  rQ   r  rP   N)
r   rB   r  r   r  rS   rT   r|   r  
getContent)rG   r  rC   r   
keyContents        r   test_noRegenerationz)PersistentRSAKeyTests.test_noRegeneration  s    
 4;;==))--,,'>>>T***(()))''))
 '>>>T***++--z:::::r   c                     t          |                                           }|                    d          }t          j        |d          }d|_        |                     |                                d           dS )z
        If the key generated by L{keys.getPersistentRSAKey} is set to None
        the key size should then become 0.
        r  rQ   r  Nr   )r   rB   r  r   r  r0   rS   rT   r  s       r   test_keySizeZeroz&PersistentRSAKeyTests.test_keySizeZero  sj    
 4;;==))--,,'>>>Q'''''r   )
r  r  r  __doc__r	   r  r   r  r  r  r*   r   r   r  r  ~  sX          
* 
* 
*; ; ;&
( 
( 
( 
( 
(r   r  )!r  r   rK   textwrapr   twisted.conch.testr   twisted.pythonr   twisted.python.filepathr   twisted.python.reflectr   twisted.trialr   r	   r  cryptography.hazmat.backendsr
   r=  r   r>  r   twisted.conch.sshr   r   r   ed25519_supportedr   r   TestCaser   r  r*   r   r   <module>r     s   
  				       & & & & & & $ $ $ $ $ $ , , , , , , 0 0 0 0 0 0 " " " " " "}^,,9  	<<<<<<555555AAAAAA5555555555'));;==  Q
 Q
 Q
 Q
 Q
x  Q
 Q
 Q
h21( 1( 1( 1( 1(H- 1( 1( 1( 1( 1(r   