+
    Dfjz                    P   R t ^ RIt^ RIt^ RIHt ^ RIHt ^ RIHt ^ RI	H
t
 ^ RIHt ^ RIHt ]! R4      t]f   R	t]'       d3   ^ R
IHt ^ RIHt ^ RIHt ^ RIHtHtHt ]! 4       P7                  4       tMRtR t ! R R]P<                  4      t ! R R]P<                  4      t R# )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                 ,    \         '       g   R V n        V # )z$ed25519 not supported on this system)ED25519_SUPPORTEDskip)fs   &>/usr/lib/python3/dist-packages/twisted/conch/test/test_keys.pyskipWithoutEd25519r   $   s    7H    c                     a  ] tR t^*t o ]f   ]tR tR tR t	R t
R tR tR tR	 tR
 tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR t R t!R t"R t#R t$R  t%R! t&R" t'R# t(R$ t)R% t*R& t+R' t,R( t-R) t.R* t/]0R+ 4       t1R, t2R- t3R. t4R/ t5R0 t6]0R1 4       t7R2 t8R3 t9R4 t:]0R5 4       t;R6 t<R7 t=R8 t>R9 t?]0R: 4       t@R; tAR< tBR= tCR> tDR? tER@ tFRA tG]0RB 4       tH]0RC 4       tIRD tJRE tKRF tLRG tMRH tNRI tORJ tPRK tQRL tRRM tSRN tT]0RO 4       tURP tVRQ tWRR tXRS tYRT tZRU t[RV t\RW t]]0RX 4       t^]0RY 4       t_RZt`V taR# )[KeyTestsNc           	        \         P                  P                  \        P                  R ,          \        P                  R,          \        P                  R,          \        P                  R,          \        P                  R,          \        P                  R,          R7      P
                  V n        \         P                  P                  \        P                  R,          \        P                  R,          \        P                  R,          \        P                  R,          \        P                  R	,          R
7      P
                  V n	        \         P                  P                  \        P                  R	,          \        P                  R,          \        P                  R,          \        P                  R,          R7      P
                  V n        \         P                  P                  \        P                  R	,          \        P                  R,          \        P                  R,          \        P                  R,          R7      P
                  V n        \         P                  P                  \        P                  R	,          \        P                  R,          \        P                  R,          \        P                  R,          R7      P
                  V n        \"        '       d[   \         P                  P%                  \        P&                  R,          \        P&                  R,          R7      P
                  V n        RV n        RV n        V P/                  \0        RR 4       V P3                  4       V n        \7        V P4                  R4      ;_uu_ 4       pVP9                  \        P:                  4       RRR4       R#   + '       g   i     R# ; i)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                     R V ,          # )    )r!   s   &r   <lambda> KeyTests.setUp.<locals>.<lambda>h   s    !r   wbN)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   setUpKeyTests.setUp.   s   hh11ooc"ooc"ooc"ooc"ooc"ooc" 2 
 * 	 hh11ooc"ooc"ooc"ooc"ooc" 2 
 * 	 XX//$$S)$$S) //?((1	 0 

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

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

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

9n.CD{{}$,,%%GGG**+ &%%%s     O

O	c                F    \         P                  ! V P                  4       R # N)osunlinkrC   rG   s   &r   tearDownKeyTests.tearDownm   s    
		$,,r   c                
   V P                  \        P                  ! V P                  4      P	                  4       R4       V P                  \        P                  ! V P
                  4      P	                  4       R4       V P                  \        P                  ! V P                  4      P	                  4       R4       V P                  \        P                  ! V P                  4      P	                  4       R4       V P                  \        P                  ! V P                  4      P	                  4       R4       \        '       dA   V P                  \        P                  ! V P                  4      P	                  4       R4       R# R# )zE
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>   rN   s   &r   	test_sizeKeyTests.test_sizep   s     	$++.335t<$++.335t<$**-224c:$--0557=$--0557=TXXdoo6;;=sC r   c                .
   V P                  \        P                  P                  \        P
                  4      R4       V P                  \        P                  P                  \        P                  4      R4       V P                  \        P                  P                  \        P                  4      R4       V P                  \        P                  P                  \        P                  4      R4       V P                  \        P                  P                  \        P                  4      R4       V P                  \        P                  P                  \        P                  4      R4       V P                  \        P                  P                  \        P                  4      R4       V P                  \        P                  P                  \        P                  4      R4       V P                  \        P                  P                  \        P                  4      R4       V P                  \        P                  P                  \        P                  4      R4       V P                  \        P                  P                  \        P                  4      R4       V P                  \        P                  P                  \        P                   4      R4       V P                  \        P                  P                  \        P"                  4      R4       V P                  \        P                  P                  \        P$                  4      R4       V P                  \        P                  P                  \        P&                  4      R4       V P                  \        P                  P                  \        P(                  4      R4       V P                  \        P                  P                  \        P*                  4      R4       V P                  \        P                  P                  \        P,                  4      R4       V P                  \        P                  P                  \        P.                  4      R4       V P                  \        P                  P                  R4      R4       V P                  \        P                  P                  R4      R4       V P                  \        P                  P                  R	4      R
4       R
# )zG
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)rU   r   r-   _guessStringTyper   publicRSA_opensshpublicDSA_opensshpublicECDSA_opensshpublicSKECDSA_opensshpublicEd25519_opensshpublicSKEd25519_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_agentv3rN   s   &r   test__guessStringTypeKeyTests.test__guessStringType|   s   
 	HH%%g&?&?@BR	
 	HH%%g&?&?@BR	
 	HH%%g&A&ABDT	
 	HH%%g&C&CDFV	
 	HH%%g&C&CD	
 	HH%%g&E&EF	
 	HH%%g&@&@ACT	
 	HH%%g&D&DEGX	
 	HH%%g&@&@ACT	
 	HH%%g&D&DEGX	
 	HH%%g&B&BCEV	
 	HH%%g&F&FG	
 	HH%%g&H&HI	
 	2273H3HI<X2273H3HI<XHH%%g&<&<=}	
 	HH%%g&<&<=}	
 	HH%%g&@&@A9	
 	HH%%g&@&@A9	
 	HH%%&TU	
 	HH%%&TU	
 	22<@$Gr   c                "   V P                  \        P                  \        P                  P                  \
        P                  4       V P                  \        P                  \        P                  P                  \
        P                  4       R# )z-
OpenSSH certificates are not yet supported.
N)assertRaisesr   BadKeyErrorr-   
fromStringr   publicSKEd25519_cert_opensshpublicSKECDSA_cert_opensshrN   s   &r   test_OpenSSH_cert_not_supported(KeyTests.test_OpenSSH_cert_not_supported   s`     	HH00	

 	HH..	
r   c                b   \         P                  P                  \        P                  4      p\         P                  P                  \        P
                  4      pV P                  VP                  4       VP                  4       4       \         P                  P                  \        P                  4      p\         P                  P                  \        P                  4      pV P                  VP                  4       VP                  4       4       \         P                  P                  \        P                  4      p\         P                  P                  \        P                  4      pV P                  VP                  4       VP                  4       4       \        '       d   \         P                  P                  \        P                  4      p\         P                  P                  \        P                  4      pV P                  VP                  4       VP                  4       4       R# R# )zV
The L{keys.Key.public} method returns a public key for both
public and private keys.
N)r   r-   rx   r   rg   ra   rU   publicri   rb   rk   rc   r   rm   re   )	rG   privateRSAKeypublicRSAKeyprivateDSAKeypublicDSAKeyprivateECDSAKeypublicECDSAKeyprivateEd25519KeypublicEd25519Keys	   &        r   test_publicKeyTests.test_public   sk    ++G,F,FGxx**7+D+DE--/1D1D1FG++G,F,FGxx**7+D+DE--/1D1D1FG((--g.J.JK,,W-H-HI//1>3H3H3JK $ 3 3G4V4V W#xx2273P3PQ.5579I9P9P9RS r   c                   \         P                  P                  \        P                  4      p\         P                  P                  \        P
                  4      p\         P                  P                  \        P                  4      pV P                  VP                  4       P                  4       4       V P                  VP                  4       4       V P                  VP                  4       P                  4       4       V P                  VP                  4       4       V P                  VP                  4       P                  4       4       V P                  VP                  4       4       \        '       d|   \         P                  P                  \        P                  4      pV P                  VP                  4       P                  4       4       V P                  VP                  4       4       R# R# )zO
The L{keys.Key.isPublic} method returns True for public keys
otherwise False.
N)r   r-   rx   r   rg   ri   rk   
assertTruer~   isPublicassertFalser   rm   )rG   rsaKeydsaKeyecdsaKey
ed25519Keys   &    r   test_isPublicKeyTests.test_isPublic   s?   
 $$W%?%?@$$W%?%?@88&&w'C'CD0023*+0023*+)2245**,-,,W-O-OPJOOJ--/88:;Z0023 r   c                N    V P                  WV4       V P                  W#V4       R # rK   )_testPublicFromString_testPrivateFromString)rG   r~   privatetypedatas   &&&&&r   _testPublicPrivateFromString%KeyTests._testPublicPrivateFromString   s"    ""66##G48r   c                L    V P                  WV4       V P                  V4       R # rK   )r   _testSKFromString)rG   r~   r   r   s   &&&&r   _testPublicSKFromString KeyTests._testPublicSKFromString  s     ""66v&r   c                @   \         P                  P                  V4      pV P                  VP	                  4       4       V P                  VP                  4       V4       VP                  4       P                  4        F  w  rVV P                  W5,          V4       K  	  R # rK   )	r   r-   rx   r   r   rU   r   r   items)rG   r~   r   r   	publicKeyr%   vs   &&&&   r   r   KeyTests._testPublicFromString  sp    HH''/		**,-)40NN$**,DATWa( -r   c                B   \         P                  P                  V4      pV P                  VP	                  4       4       V P                  VP                  4       V4       VP                  4        F,  w  rVV P                  VP                  4       V,          V4       K.  	  R # rK   )	r   r-   rx   r   r   rU   r   r   r   )rG   r   r   r   
privateKeyr%   r   s   &&&&   r   r   KeyTests._testPrivateFromString  sr    XX((1
,,./*D1JJLDAZ__.q115 !r   c                z    \         P                  P                  V4      pV P                  VP                  4       R # rK   )r   r-   rx   r   _sk)rG   r~   r   s   && r   r   KeyTests._testSKFromString  s&    HH''/		&r   c                   V P                  \        P                  \        P                  R\        P                  4       V P                  \        P
                  \        P                  R\        P                  4       V P                  \        P                  P                  \        P                  RR7      \        P                  P                  \        P                  4      4       V P                  \        P                  \        P                  R\        P                  4       V P!                  \        P"                  R\        P$                  4       \&        '       dp   V P!                  \        P(                  R\        P*                  4       V P                  \        P,                  \        P.                  R\        P0                  4       R# R# )z>
Test that keys are correctly generated from OpenSSH strings.
ECRSA	   encrypted
passphraseDSAEd25519N)r   r   rc   rk   r6   ra   rg   r/   rU   r   r-   rx   privateRSA_openssh_encryptedrb   ri   r3   r   rd   SKECDatanistp256r   rf   SKEd25519Datare   rm   r=   rN   s   &r   test_fromOpenSSHKeyTests.test_fromOpenSSH  sW    	))''((""		
 	))%%&&OO		
 	HH44    HH : :;		
 	))%%&&OO		
 	$$))$$	
 ((//%% ----22##	 r   c                ~    RpV P                  \        P                  \        P                  P                  VR4       R# )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)rv   r   rw   r-   _fromString_PRIVATE_OPENSSHrG   badKeys   & r   test_fromOpenSSHErrorsKeyTests.test_fromOpenSSHErrorsJ  s2      	dhhBBFD	
r   c                    RpV P                  \        P                  P                  V4      \        P                  P                  VR,           4      4       R# )z@
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)rU   r   r-   rx   rG   privateDSADatas   & r    test_fromOpenSSH_with_whitespace)KeyTests.test_fromOpenSSH_with_whitespaceX  sB    ! 	HH/HH 67	
r   c                2   \         P                  P                  \        P                  RR7      pV P                  VP                  4       R4       \         P                  P                  \        P                  R,           RR7      pV P                  W4       R# )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-   rx   r    privateRSA_openssh_encrypted_aesrU   r   )rG   keykey2s   &  r   test_fromNewerOpenSSHKeyTests.test_fromNewerOpenSSHo  sy    
 hh!!44 " 
 	U+xx""44u< # 
 	#r   c                   \         P                  \         P                  3\         P                  \         P                  3\         P
                  \         P                  3\         P                  \         P                  3\         P                  \         P                  33 FQ  w  rV P                  \        P                  P                  V4      \        P                  P                  V4      4       KS  	  V P                  \        P                  P                  \         P                  RR7      \        P                  P                  \         P                   RR7      4       R# )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   rg   rh   ri   rj   rk   rl   privateECDSA_openssh384privateECDSA_openssh384_newprivateECDSA_openssh521privateECDSA_openssh521_newrU   r   r-   rx    privateRSA_openssh_encrypted_newr   )rG   oldnews   &  r   test_fromOpenSSH_v1_format#KeyTests.test_fromOpenSSH_v1_format}  s     '')G)GH'')G)GH))7+K+KL,,g.Q.QR,,g.Q.QR
HC TXX005txx7J7J37OP
 	HH88\    HH44   		
r   c           	         RpV P                  \        P                  P                  V4      \        P                  P                  VP	                  RR4      4      4       R# )zX
Test that keys are correctly generated from OpenSSH strings with
Windows line endings.
r   r   s   
N)rU   r   r-   rx   replacer   s   & r   %test_fromOpenSSH_windows_line_endings.KeyTests.test_fromOpenSSH_windows_line_endings  sJ    
! 	HH/HH 6 6ug FG	
r   c                    \         P                  ! RRRR....4      pV P                  \        P                  \        P
                  P                  R\        P                  ! V4      ,           R,           R7       R# )	zI
C{BadKeyError} exception is raised when public key has an unknown
type.
s
   public-key   bad-key   p   2   {   })r   N)	r   packrv   r   rw   r-   rx   base64	b64encoderG   sexps   & r   !test_fromLSHPublicUnsupportedType*KeyTests.test_fromLSHPublicUnsupportedType  sd    
 zzMJt+EFGHHH((..5 	 	
r   c                    \         P                  ! RRRR....4      pV P                  \        P                  \        P
                  P                  V4       R# )zJ
C{BadKeyError} exception is raised when private key has an unknown
type.
s   private-keyr   r   r   N)r   r   rv   r   rw   r-   rx   r   s   & r   "test_fromLSHPrivateUnsupportedType+KeyTests.test_fromLSHPrivateUnsupportedType  sJ    
 zzNZ$,FGHIHH	
r   c                    V P                  \        P                  \        P                  R\        P                  4       R# )zB
RSA public and private keys can be generated from a LSH strings.
r   N)r   r   rn   rF   r/   rN   s   &r   test_fromLSHRSAKeyTests.test_fromLSHRSA  .     	))!!""OO		
r   c                    V P                  \        P                  \        P                  R\        P                  4       R# )z8
DSA public and private key can be generated from LSHs.
r   N)r   r   ro   rp   r3   rN   s   &r   test_fromLSHDSAKeyTests.test_fromLSHDSA  r   r   c                4   V P                  \        P                  R\        P                  4       V P                  \        P                  R\        P
                  4       V P                  \        P                  \        P                  P                  R4       R# )z?
Test that keys are correctly generated from Agent v3 strings.
r   r   Ns$      ssh-foo               )r   r   rq   r/   rr   r3   rv   r   rw   r-   rx   rN   s   &r   test_fromAgentv3KeyTests.test_fromAgentv3  sc     	##G$>$>wW##G$>$>wWHHD	
r   c                `   \         P                  ! V P                  4      pVP                  RRP	                  4       R7      pV P                  \         P                  P                  VRR7      V4       V P                  \         P                  \         P                  P                  VRR7       R# )zN
L{keys.Key.fromString} applies Normalization Form KC to Unicode
passphrases.
openssh   verschlüsseltr      verschlüsselt   unassigned ￿N)	r   r-   r1   toStringencoderU   rx   rv   PassphraseNormalizationErrorrG   r   key_datas   &  r   *test_fromStringNormalizesUnicodePassphrase3KeyTests.test_fromStringNormalizesUnicodePassphrase  s    
 hht{{#<<	6J6Q6Q6S<THH5JKS	

 	--HH*	 	 	
r   c           	        V P                  \        P                  \        P                  P                  R4       V P                  \        P                  \        P                  P                  RR4       V P                  \        P                  \        P                  P                  \
        P                  RR7       V P                  \        P                  \        P                  P                  \        P                  ! V P                  4      P                  RRR7      4       V P                  \        P                  \        P                  P                  R4       V P                  \        P                  \        P                  P                  RR	R7       V P                  \        P                  \        P                  P                  R
R	R7       V P                  \        P                  \        P                  P                  RR	R7       V P                  \        P                  \        P                  P                  RR	R7       R# )zG
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)
rv   r   rw   r-   rx   r   rn   EncryptedKeyErrorr1   r   rN   s   &r   test_fromStringErrorsKeyTests.test_fromStringErrors  s    	$**DHH,?,?E$**DHH,?,?jQHH!!%	 	 	
 	""HHHHT[[!**9*N	
 	dhh113U	
 	HH!< #C 	 "	
H 	HH!< #C 	 "	
H 	HH!< #C 	 "	
H 	HH!< #C 	 "	
r   c                   V P                  \        P                  P                  V P                  4      \        P                  P                  \        P                  4      4       V P                  \        P                  \        P                  P                  V P                  R4       V P                  \        P                  \        P                  P                  V P                  RR7       R# )z%
Test that fromFile works correctly.
r   unencryptedr   N)
rU   r   r-   fromFilerC   rx   r   rF   rv   rw   rN   s   &r   test_fromFileKeyTests.test_fromFile  s     	HHdll+TXX-@-@AWAW-X	
 	$**DHH,=,=t||ZXdhh//- 	 	
r   c                    \         P                  P                  ^^R7      P                  p\         P                  ! V4      pV P	                  VP                  V4       R# )z:
Test that the PublicKey object is initialized correctly.
r   r   N)r   r-   r.   r0   rU   )rG   objr   s   &  r   	test_initKeyTests.test_init  sD     hh))A)3>>hhsm-r   c                   \         P                  ! V P                  4      p\         P                  ! V P                  4      p\         P                  ! \         P                  P                  ^^R7      P                  4      p\         P                  ! V P
                  4      pV P                  W8H  4       V P                  W8H  4       V P                  W8H  4       V P                  V\        8H  4       V P                  VR8H  4       R# )z/
Test that Key objects are compared correctly.
r
  N)	r   r-   r1   r.   r0   r4   r   r   objectrG   rsa1rsa2rsa3dsas   &    r   
test_equalKeyTests.test_equal  s     xx$xx$xx33a13=HHIhht{{#%&%(&r   c                   \         P                  ! V P                  4      p\         P                  ! V P                  4      p\         P                  ! \         P                  P                  ^^R7      P                  4      p\         P                  ! V P
                  4      pV P                  W8g  4       V P                  W8g  4       V P                  W8g  4       V P                  V\        8g  4       V P                  VR8g  4       R# )z3
Test that Key objects are not-compared correctly.
r
  N)	r   r-   r1   r.   r0   r4   r   r   r  r  s   &    r   test_notEqualKeyTests.test_notEqual  s     xx$xx$xx33a13=HHIhht{{#&%$'%r   c                r    \         P                  ! R4      pV P                  \        VP                  4       R# )z?
The L{keys.Key.data} method raises RuntimeError for bad keys.
r   N)r   r-   rv   RuntimeErrorr   r   s   & r   test_dataErrorKeyTests.test_dataError  s%     #,4r   c                    V P                  \        P                  ! V P                  4      P	                  4       R4       V P                  \        P                  ! V P
                  4      P	                  4       R4       R# )zj
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)rU   r   r-   r1   fingerprintr4   rN   s   &r   test_fingerprintdefault KeyTests.test_fingerprintdefault  sZ    
 	HHT[[!--/=	
 	HHT[[!--/=	
r   c                b   V P                  \        P                  ! V P                  4      P	                  \        P
                  P                  4      R4       V P                  \        P                  ! V P                  4      P	                  \        P
                  P                  4      R4       R# )zo
fingerprint method generates key fingerprint in
L{FingerprintFormats.MD5-HEX} format if explicitly specified.
r  r   N)rU   r   r-   r1   r!  FingerprintFormatsMD5_HEXr4   rN   s   &r   test_fingerprint_md5_hex!KeyTests.test_fingerprint_md5_hex  sv    
 	HHT[[!--d.E.E.M.MN=	
 	HHT[[!--d.E.E.M.MN=	
r   c                b   V P                  \        P                  ! V P                  4      P	                  \        P
                  P                  4      R4       V P                  \        P                  ! V P                  4      P	                  \        P
                  P                  4      R4       R# )zu
fingerprint method generates key fingerprint in
L{FingerprintFormats.SHA256-BASE64} format if explicitly specified.
z,FBTCOoknq0mHy+kpfnY9tDdcAJuWtCpuQMaV3EsvbUI=z,Wz5o2YbKyxOEcJn1au/UaALSVruUzfz0vaLI1xiIGyY=N)rU   r   r-   r1   r!  r%  SHA256_BASE64r4   rN   s   &r   test_fingerprintsha256KeyTests.test_fingerprintsha256  sv    
 	HHT[[!--d.E.E.S.ST:	
 	HHT[[!--d.E.E.S.ST:	
r   c                D   V P                  \        P                  4      ;_uu_ 4       p\        P                  ! V P                  4      P                  R4       RRR4       V P                  RXP                  P                  ^ ,          4       R#   + '       g   i     L?; i)zS
A C{BadFingerPrintFormat} error is raised when unsupported
formats are requested.
zsha256-baseNz+Unsupported fingerprint format: sha256-base)	rv   r   BadFingerPrintFormatr-   r1   r!  rU   	exceptionargs)rG   ems   & r   test_fingerprintBadFormat"KeyTests.test_fingerprintBadFormat  sh    
 t8899RHHT[[!--m< :92<<;L;LQ;O	
 :9s   0BB	c                   V P                  \        P                  ! V P                  4      P	                  4       R4       V P                  \        P                  ! V P                  4      P                  4       R4       V P                  \        P                  ! V P                  4      P	                  4       R4       V P                  \        P                  ! V P                  4      P                  4       R4       V P                  \        P                  ! V P                  4      P	                  4       R4       V P                  \        P                  ! V P                  4      P                  4       \        P                  R,          4       \        '       d}   V P                  \        P                  ! V P                  4      P	                  4       R4       V P                  \        P                  ! V P                  4      P                  4       R4       V P                  \        \        P                  ! R	4      P                  4       V P                  \        \        P                  ! R	4      P
                  4       V P                  \        \        P                  ! V 4      P                  4       V P                  \        \        P                  ! V 4      P
                  4       R	# )
zC
Test that the type method returns the correct type for an object.
r      ssh-rsar      ssh-dssr   r#   r      ssh-ed25519N)rU   r   r-   r1   r   sshTyper4   r7   r   r6   r   r>   rv   r  rN   s   &r   	test_typeKeyTests.test_type  s    	$++.335u=$++.668*E$++.335u=$++.668*E$**-224d;HHTZZ ((*G,B,B7,K	
 TXXdoo6;;=yITXXdoo6>>@.Q,(;(;<,(>(>?,(;(;<,(>(>?r   c                   V P                  \        P                  ! V P                  4      P	                  4       . RO4       V P                  \        P                  ! V P
                  4      P	                  4       R.4       V P                  \        P                  ! V P                  4      P	                  4       R.4       V P                  \        P                  P                  \        P                  4      P	                  4       R.4       \        '       d   V P                  \        P                  ! V P                  4      P	                  4       R.4       V P                  \        P                  P                  \        P                  4      P	                  4       R.4       V P                  \        \        P                  ! R4      P                  4       V P                  \        \        P                  ! V 4      P                  4       R# )zu
L{keys.Key.supportedSignatureAlgorithms} returns the appropriate
public key signature algorithms for each key type.
r6  s   ecdsa-sha2-nistp256s"   sk-ecdsa-sha2-nistp256@openssh.comr7     sk-ssh-ed25519@openssh.comN)   rsa-sha2-512   rsa-sha2-256r5  )rU   r   r-   r1   supportedSignatureAlgorithmsr4   r7   rx   r   rd   r   r>   rf   rv   r  rN   s   &r   !test_supportedSignatureAlgorithms*KeyTests.test_supportedSignatureAlgorithms#  sq   
 	HHT[[!>>@:	
 	HHT[[!>>@:,	
 	HHTZZ ==?#$	
 	HH--**,23		
 )FFH  ##33..0./	 	,(S(ST,(S(STr   c                    \         P                  ! R4      pV P                  \        P                  \        P
                  P                  V4       R# )zM
A C{BadKeyError} error is raised whey the blob has an unsupported
key type.
   ssh-badN)r   NSrv   r   rw   r-   rx   rG   badBlobs   & r   test_fromBlobUnsupportedType%KeyTests.test_fromBlobUnsupportedTypeG  s4    
 ))J'$**DHH,?,?Ir   c                   R\         P                  R,          R\         P                  R,          /p\        P                  ! R4      \        P                  ! VR,          4      ,           \        P                  ! VR,          4      ,           p\
        P                  P                  V4      pV P                  VP                  4       4       V P                  WP                  4       4       R# )zA
A public RSA key is correctly generated from a public key blob.
r   r   r5  N)r   r/   r   rD  MPr   r-   rx   r   r   rU   r   )rG   rsaPublicDatarsaBlobr   s   &   r   test_fromBlobRSAKeyTests.test_fromBlobRSAP  s    
 %%

 IIj!iic*+,iic*+, 	 $$W-)*6r   c           	        R\         P                  R,          R\         P                  R,          R\         P                  R,          R\         P                  R,          /p\        P                  ! R4      \        P                  ! VR,          4      ,           \        P                  ! VR,          4      ,           \        P                  ! VR,          4      ,           \        P                  ! VR,          4      ,           p\
        P                  P                  V4      pV P                  VP                  4       4       V P                  WP                  4       4       R# )zA
A public DSA key is correctly generated from a public key blob.
r   r   r    r   r6  N)r   r3   r   rD  rJ  r   r-   rx   r   r   rU   r   )rG   dsaPublicDatadsaBlobr   s   &   r   test_fromBlobDSAKeyTests.test_fromBlobDSAc  s    
 %%%%	
 IIj!iic*+,iic*+, iic*+, iic*+	, 	 $$W-)*6r   c                   ^ RI Hp R\        P                  R,          R\        P                  R,          R\        P                  R,          /p\        P
                  ! VR,          4      \        P
                  ! VR,          RR 4      ,           \        P
                  ! RVP                  VR,          ^ 4      ,           VP                  VR,          ^ 4      ,           4      ,           p\        P                  P                  V4      pV P                  VP                  4       4       V P                  W$P                  4       4       R# )z1
Key.fromString generates ECDSA keys from blobs.
utilsr!   r   r#   N   )r   rV  r   r6   r   rD  int_to_bytesr   r-   rx   r   r   rU   r   )rG   rV  ecPublicDataecblobeckeys   &    r   test_fromBlobECDSAKeyTests.test_fromBlobECDSAz  s     	' '','',W++G4
 IIl7+,iiW-bc234ii$$\#%6;<$$\#%6;< 	 ##F+()zz|4r   c                   ^ RI Hp R\        P                  R,          R\        P                  R,          R\        P                  R,          /p\        P
                  ! \        P                  R,          4      \        P
                  ! \        P                  R,          RR 4      ,           \        P
                  ! RVP                  VR,          ^ 4      ,           VP                  VR,          ^ 4      ,           4      ,           p\        P                  P                  V4      pV P                  VP                  4       4       V P                  VP                  4       V P                  W$P                  4       4       R# )z3
It can load public SK-ECDSA key from blob format.
rU  r!   r   r#   NrW  rX  )r   rV  r   r   r   rD  rY  r   r-   rx   r   r   r   rU   r   )rG   rV  skEcPublicDataskEcblobskEckeys   &    r   test_fromBlobSKECDSAKeyTests.test_fromBlobSKECDSA  s    	' ))#.))#.W--g6
 IIg..w78ii009"#>?@ii$$^C%8"=>$$^C%8"=> 	 ((%%h/((*+$8r   c                b   R\         P                  R,          /p\        P                  ! R4      \        P                  ! VR,          4      ,           p\        P
                  P                  V4      pV P                  VP                  4       4       V P                  WP                  4       4       R# )zE
A public Ed25519 key is correctly generated from a public key blob.
r$   r7  N)r   r=   r   rD  r   r-   rx   r   r   rU   r   )rG   ed25519PublicDataed25519Blobr   s   &   r   test_fromBlobEd25519KeyTests.test_fromBlobEd25519  s     $$S)
 ii/&))<Mc<R2SSXX((5

++-.*OO,=>r   c                   R\         P                  R,          /p\        P                  ! R4      \        P                  ! VR,          4      ,           p\        P
                  P                  V4      pV P                  VP                  4       4       V P                  VP                  4       V P                  WP                  4       4       R# )zH
A public SK-Ed25519 key is correctly generated from a public key blob.
r$   r<  N)r   r   r   rD  r   r-   rx   r   r   r   rU   r   )rG   skEd25519PublicDataskEd25519BlobskEd25519Keys   &   r   test_fromBlobSKEd25519KeyTests.test_fromBlobSKEd25519  s    
 &&s+
 		"?@699$D
 
 xx**=9--/0((),.?.?.ABr   c                    \         P                  ! R4      pV P                  \        P                  \        P
                  P                  V4       R# )zP
C{BadKeyError} is raised when loading a private blob with an
unsupported type.
rC  N)r   rD  rv   r   rw   r-   _fromString_PRIVATE_BLOBrE  s   & r   #test_fromPrivateBlobUnsupportedType,KeyTests.test_fromPrivateBlobUnsupportedType  s4    
 ))J'$**DHH,M,MwWr   c                   \         P                  ! R4      \         P                  ! \        P                  R,          4      ,           \         P                  ! \        P                  R,          4      ,           \         P                  ! \        P                  R,          4      ,           \         P                  ! \        P                  R,          4      ,           \         P                  ! \        P                  R,          4      ,           \         P                  ! \        P                  R,          4      ,           p\
        P                  P                  V4      pV P                  VP                  4       4       V P                  \        P                  VP                  4       4       V P                  V\
        P                  P                  VP                  4       4      4       R# )	zC
A private RSA key is correctly generated from a private key blob.
r5  r   r   r   r   r   r   N)r   rD  rJ  r   r/   r   r-   rq  r   r   rU   r   privateBlob)rG   rL  r   s   &  r   test_fromPrivateBlobRSA KeyTests.test_fromPrivateBlobRSA  s)   
 IIj!ii,-.ii,-. ii,-. ii,-	.
 ii,-. ii,-. 	 227;*+&++-8DHH55f6H6H6JK	
r   c                d   \         P                  ! R4      \         P                  ! \        P                  R,          4      ,           \         P                  ! \        P                  R,          4      ,           \         P                  ! \        P                  R,          4      ,           \         P                  ! \        P                  R,          4      ,           \         P                  ! \        P                  R,          4      ,           p\
        P                  P                  V4      pV P                  VP                  4       4       V P                  \        P                  VP                  4       4       V P                  V\
        P                  P                  VP                  4       4      4       R# )zC
A private DSA key is correctly generated from a private key blob.
r6  r   r   r    r   r!   N)r   rD  rJ  r   r3   r   r-   rq  r   r   rU   r   ru  )rG   rQ  r   s   &  r   test_fromPrivateBlobDSA KeyTests.test_fromPrivateBlobDSA  s   
 IIj!ii,-.ii,-. ii,-. ii,-	.
 ii,-. 	 227;*+&++-8DHH55f6H6H6JK	
r   c                   ^ RI Hp ^ RIHp VP	                  \
        P                  R,          \
        P                  R,          VP                  4       R7      p\        P                  ! \
        P                  R,          4      \        P                  ! \
        P                  R,          R	R 4      ,           \        P                  ! VP                  \        4       4      P                  VP                  P                  VP                  P                   4      4      ,           \        P"                  ! \
        P                  R,          4      ,           p\$        P&                  P)                  V4      pV P+                  VP-                  4       4       V P/                  \
        P                  VP1                  4       4       V P/                  V\$        P&                  P)                  VP3                  4       4      4       R# )
zB
A private EC key is correctly generated from a private key blob.
serialization)ecr!   r   )r!   r   r#   r#   Nr"   rX  )cryptography.hazmat.primitivesr}  )cryptography.hazmat.primitives.asymmetricr~  EllipticCurvePublicNumbersr   r6   	SECP256R1r   rD  
public_keyr	   public_bytesEncodingX962PublicFormatUncompressedPointrJ  r   r-   rq  r   r   rU   r   ru  )rG   r}  r~  publicNumbersr[  r\  s   &     r   test_fromPrivateBlobECDSA"KeyTests.test_fromPrivateBlobECDSA  s_    	A@55$$S)$$S),,. 6 
 IIg,,W56ii..w7<=>ii(():;HH!**//!..@@ ii..~>?@ 	 11&9)*//> A A%BSBSBU VWr   c                |   \         P                  ! R4      \         P                  ! \        P                  R,          4      ,           \         P                  ! \        P                  R,          \        P                  R,          ,           4      ,           p\        P
                  P                  V4      pV P                  VP                  4       4       V P                  \        P                  VP                  4       4       V P                  V\        P
                  P                  VP                  4       4      4       R# )zG
A private Ed25519 key is correctly generated from a private key blob.
r7  r$   r%   N)r   rD  r   r=   r   r-   rq  r   r   rU   r   ru  )rG   rg  r   s   &  r   test_fromPrivateBlobEd25519$KeyTests.test_fromPrivateBlobEd25519#  s     IIn%ii++C012ii++C073F3Fs3KKLM 	 XX66{C
,,./,,joo.?@99*:P:P:RS	
r   c                   V P                  \        P                  ! V P                  4      P	                  4       \
        P                  ! R4      \
        P                  ! V P                  P                  4       P                  P                  4      ,           \
        P                  ! V P                  P                  4       P                  P                  4      ,           4       R# )z<
Return the over-the-wire SSH format of the RSA public key.
r5  N)rU   r   r-   r1   r_   r   rD  rJ  private_numberspublic_numbersr   r   rN   s   &r   test_blobRSAKeyTests.test_blobRSA6  s     	HHT[[!&&(IIj!ii335DDFFGHii335DDFFGH	
r   c                V   V P                   P                  4       P                  pV P                  \        P
                  ! V P                   4      P                  4       \        P                  ! R4      \        P                  ! VP                  P                  4      ,           \        P                  ! VP                  P                  4      ,           \        P                  ! VP                  P                  4      ,           \        P                  ! VP                  4      ,           4       R# )z<
Return the over-the-wire SSH format of the DSA public key.
r6  N)r4   r  r  rU   r   r-   r_   r   rD  rJ  parameter_numbersr   r   r    r   rG   r  s   & r   test_blobDSAKeyTests.test_blobDSAA  s     335DDHHT[[!&&(IIj!ii7799:;ii7799:; ii7799:; ii(	)	
r   c                   ^ RI Hp V P                  P                  P                  ^,           ^,          pV P                  \        P                  ! V P                  4      P                  4       \        P                  ! \        P                  R,          4      \        P                  ! \        P                  R,          RR 4      ,           \        P                  ! RVP                  V P                  P                  4       P                  P                   V4      ,           VP                  V P                  P                  4       P                  P"                  V4      ,           4      ,           4       R# )z;
Return the over-the-wire SSH format of the EC public key.
rU  r#   NrW  rX  )r   rV  r7   r#   key_sizerU   r   r-   r_   r   rD  r   r6   rY  r  r  r!   r   )rG   rV  
byteLengths   &  r   test_blobECKeyTests.test_blobECP  s     	'jj&&//!39
HHTZZ %%'IIg,,W56ii..w7<=>ii$$JJ..0??AA: $$JJ..0??AA:	
	
r   c                   ^ RI Hp V P                  P                  4       P	                  VP
                  P                  VP                  P                  4      pV P                  \        P                  ! V P                  4      P                  4       \        P                  ! R4      \        P                  ! V4      ,           4       R# )z@
Return the over-the-wire SSH format of the Ed25519 public key.
r|  r7  N)r  r}  r>   r  r  r  Rawr  rU   r   r-   r_   r   rD  )rG   r}  publicBytess   &  r   test_blobEd25519KeyTests.test_blobEd25519f  s    
 	Aoo002??""&&(B(B(F(F
 	HHT__%**,IIn%		+(>>	
r   c                r    \         P                  ! R4      pV P                  \        VP                  4       R# )z`
C{RuntimeError} is raised when the blob is requested for a Key
which is not wrapping anything.
N)r   r-   rv   r  r_   r   s   & r   test_blobNoKeyKeyTests.test_blobNoKeyv  s%    
 $,4r   c                   V P                   P                  4       pV P                  \        P                  ! V P                   4      P                  4       \        P                  ! R4      \        P                  ! VP                  P                  4      ,           \        P                  ! VP                  P                  4      ,           \        P                  ! VP                  4      ,           \        P                  ! VP                  4      ,           \        P                  ! VP                  4      ,           \        P                  ! VP                  4      ,           4       R# )zV
L{keys.Key.privateBlob} returns the SSH protocol-level format of an
RSA private key.
r5  N)r1   r  rU   r   r-   ru  r   rD  rJ  r  r   r   r   iqmpr   r   )rG   numberss   & r   test_privateBlobRSAKeyTests.test_privateBlobRSA  s    
 ++--/HHT[[!--/IIj!ii..0012ii..0012 ii		"# ii%	&
 ii		"# ii		"#		
r   c                   V P                   P                  4       P                  pV P                  \        P
                  ! V P                   4      P                  4       \        P                  ! R4      \        P                  ! VP                  P                  4      ,           \        P                  ! VP                  P                  4      ,           \        P                  ! VP                  P                  4      ,           \        P                  ! VP                  4      ,           \        P                  ! V P                   P                  4       P                  4      ,           4       R# )zU
L{keys.Key.privateBlob} returns the SSH protocol-level format of a DSA
private key.
r6  N)r4   r  r  rU   r   r-   ru  r   rD  rJ  r  r   r   r    r   r!   r  s   & r   test_privateBlobDSAKeyTests.test_privateBlobDSA  s    
 335DDHHT[[!--/IIj!ii7799:;ii7799:; ii7799:; ii(	)
 ii3357789	
r   c           
        ^ RI Hp V P                  \        P                  ! V P
                  4      P                  4       \        P                  ! \        P                  R,          4      \        P                  ! \        P                  R,          RR 4      ,           \        P                  ! V P
                  P                  4       P                  VP                  P                  VP                  P                   4      4      ,           \        P"                  ! V P
                  P%                  4       P&                  4      ,           4       R# )zR
L{keys.Key.privateBlob} returns the SSH ptotocol-level format of EC
private key.
r|  r#   NrX  )r  r}  rU   r   r-   r7   ru  r   rD  r   r6   r  r  r  r  r  r  rJ  r  private_value)rG   r}  s   & r   test_privateBlobECKeyTests.test_privateBlobEC  s    
 	AHHTZZ ,,.IIg,,W56ii..w7<=>ii

%%'44!**//!..@@ ii

224BBCD	
r   c                x   ^ RI Hp V P                  P                  4       P	                  VP
                  P                  VP                  P                  4      pV P                  P                  VP
                  P                  VP                  P                  VP                  4       4      pV P                  \        P                  ! V P                  4      P                  4       \        P                   ! R4      \        P                   ! V4      ,           \        P                   ! W2,           4      ,           4       R# )zZ
L{keys.Key.privateBlob} returns the SSH protocol-level format of an
Ed25519 private key.
r|  r7  N)r  r}  r>   r  r  r  r  r  private_bytesPrivateFormatNoEncryptionrU   r   r-   ru  r   rD  )rG   r}  r  privateBytess   &   r   test_privateBlobEd25519 KeyTests.test_privateBlobEd25519  s     	Aoo002??""&&(B(B(F(F
 44""&&''++&&(
 	HHT__%113IIn%ii$%ii234	
r   c                r    \         P                  ! R4      pV P                  \        VP                  4       R# )zF
Raises L{RuntimeError} if the underlying key object does not exists.
N)r   r-   rv   r  ru  r   s   & r   test_privateBlobNoKeyObject$KeyTests.test_privateBlobNoKeyObject  s'     $,(:(:;r   c                @   \         P                  P                  \        P                  4      pV P                  VP                  R4      P                  4       \        P                  4       V P                  VP                  RRR7      P                  R4      ^ 8  4       V P                  VP                  4       P                  R4      \        P                  RR 4       V P                  VP                  4       P                  RRR7      \        P                  4       R# )	z?
L{keys.Key.toString} serializes an RSA key in OpenSSH format.
r   r   r   s   DEK-InfoN   commentcommentrX  )r   r-   rx   r   rq   rU   r   striprg   r   findr~   ra   rG   r   s   & r   test_toOpenSSHRSAKeyTests.test_toOpenSSHRSA  s     hh!!'"<"<=i0668':T:TULL|L<AA+NQRR	
 	JJL!!),g.G.G.L	
 	JJL!!)Z!@%%	
r   c                
   \         P                  P                  \        P                  4      pVP                  RRR7      pVP                  RRRR7      pV P                  RVP                  4       ^ ,          4       V P                  RVP                  4       ^ ,          4       V P                  V\         P                  P                  V4      4       V P                  V\         P                  P                  VRR7      4       R# )	zD
L{keys.Key.toString} serializes an RSA key in OpenSSH's v1 format.
r   v1subtyper   r  r   #   -----BEGIN OPENSSH PRIVATE KEY-----r   N)r   r-   rx   r   rg   r   rU   
splitlinesrG   r   new_key_datanew_enc_key_datas   &   r   test_toOpenSSHRSA_v1_format$KeyTests.test_toOpenSSHRSA_v1_format       hh!!'"<"<=||It|<<<	4K<X2L4K4K4Ma4P	
 	24D4O4O4QRS4T	
 	dhh11,?@$$%5+$N	
r   c                   \         P                  P                  \        P                  4      pV P                  VP                  R4      P                  4       \        P                  4       V P                  VP                  4       P                  RRR7      \        P                  4       V P                  VP                  4       P                  R4      \        P                  RR 4       R# )z>
L{keys.Key.toString} serializes a DSA key in OpenSSH format.
r   r  r  NrX  )r   r-   rx   r   rp   rU   r   r  ri   r~   rb   r  s   & r   test_toOpenSSHDSAKeyTests.test_toOpenSSHDSA  s     hh!!'"8"89i0668':T:TUJJL!!)Z!@%%	
 	JJL!!),g.G.G.L	
r   c                
   \         P                  P                  \        P                  4      pVP                  RRR7      pVP                  RRRR7      pV P                  RVP                  4       ^ ,          4       V P                  RVP                  4       ^ ,          4       V P                  V\         P                  P                  V4      4       V P                  V\         P                  P                  VRR7      4       R# )	zC
L{keys.Key.toString} serializes a DSA key in OpenSSH's v1 format.
r   r  r  r   r  r  r   N)r   r-   rx   r   ri   r   rU   r  r  s   &   r   test_toOpenSSHDSA_v1_format$KeyTests.test_toOpenSSHDSA_v1_format  r  r   c                ^   \         P                  P                  \        P                  4      pV P                  VP                  4       P                  RRR7      \        P                  4       V P                  VP                  4       P                  R4      \        P                  RR 4       R# )zA
L{keys.Key.toString} serializes an ECDSA key in OpenSSH format.
r   r  r  NrX  )	r   r-   rx   r   rk   rU   r~   r   rc   r  s   & r   test_toOpenSSHECDSAKeyTests.test_toOpenSSHECDSA  s     hh!!'">">?JJL!!)Z!@''	
 	JJL!!),g.I.I#2.N	
r   c                
   \         P                  P                  \        P                  4      pVP                  RRR7      pVP                  RRRR7      pV P                  RVP                  4       ^ ,          4       V P                  RVP                  4       ^ ,          4       V P                  V\         P                  P                  V4      4       V P                  V\         P                  P                  VRR7      4       R# )	zF
L{keys.Key.toString} serializes an ECDSA key in OpenSSH's v1 format.
r   r  r  r   r  r  r   N)r   r-   rx   r   rk   r   rU   r  r  s   &   r   test_toOpenSSHECDSA_v1_format&KeyTests.test_toOpenSSHECDSA_v1_format%  s     hh!!'">">?||It|<<<	4K<X2L4K4K4Ma4P	
 	24D4O4O4QRS4T	
 	dhh11,?@$$%5+$N	
r   c                H   \         P                  P                  \        P                  4      pVP                  R4      pVP                  RRR7      pV P                  RVP                  4       ^ ,          4       V P                  RVP                  4       ^ ,          4       V P                  V\         P                  P                  V4      4       V P                  V\         P                  P                  VRR7      4       V P                  W!P                  RRR7      4       R# )zH
L{keys.Key.toString} serializes an Ed25519 key in OpenSSH's v1 format.
r   r   r   r  r  r  N)r   r-   rx   r   rm   r   rU   r  r  s   &   r   test_toOpenSSHEd25519KeyTests.test_toOpenSSHEd255197  s    
 hh!!'"D"DE||I.<<	k<J2L4K4K4Ma4P	
 	24D4O4O4QRS4T	
 	dhh11,?@$$%5+$N	
 	||It|'LMr   c                    \         P                  P                  \        P                  4      pV P                  \        VP                  RRR7       R# )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   PEMr  N)r   r-   rx   r   rm   rv   
ValueErrorr   r  s   & r    test_toOpenSSHEd25519_PEM_format)KeyTests.test_toOpenSSHEd25519_PEM_formatK  s9     hh!!'"D"DE*cllIuMr   c                8   \         P                  P                  \        P                  4      pV P                  VP                  R4      \        P                  4       V P                  VP                  4       P                  R4      \        P                  4       R# )z;
L{keys.Key.toString} serializes an RSA key in LSH format.
lshN)
r   r-   rx   r   rg   rU   r   rF   r~   rn   r  s   & r   test_toLSHRSAKeyTests.test_toLSHRSAU  d     hh!!'"<"<=e,g.D.DE..u5w7L7LMr   c                8   \         P                  P                  \        P                  4      pV P                  VP                  R4      \        P                  4       V P                  VP                  4       P                  R4      \        P                  4       R# )z:
L{keys.Key.toString} serializes a DSA key in LSH format.
r  N)
r   r-   rx   r   ri   rU   r   rp   r~   ro   r  s   & r   test_toLSHDSAKeyTests.test_toLSHDSA]  r  r   c                    \         P                  P                  \        P                  4      pV P                  VP                  R4      \        P                  4       R# )z@
L{keys.Key.toString} serializes an RSA key in Agent v3 format.
r^   N)r   r-   rx   r   rg   rU   r   rq   r  s   & r   test_toAgentv3RSAKeyTests.test_toAgentv3RSAe  =     hh!!'"<"<=i0'2L2LMr   c                    \         P                  P                  \        P                  4      pV P                  VP                  R4      \        P                  4       R# )z?
L{keys.Key.toString} serializes a DSA key in Agent v3 format.
r^   N)r   r-   rx   r   ri   rU   r   rr   r  s   & r   test_toAgentv3DSAKeyTests.test_toAgentv3DSAl  r  r   c                D   \         P                  ! V P                  4      pVP                  RRR7      pV P	                  \         P                  P                  VRP                  4       R7      V4       V P                  \         P                  VP                  RRR7       R# )zL
L{keys.Key.toString} applies Normalization Form KC to Unicode
passphrases.
r   r   r   r   r   N)	r   r-   r1   r   rU   rx   r   rv   r   r   s   &  r   (test_toStringNormalizesUnicodePassphrase1KeyTests.test_toStringNormalizesUnicodePassphrases  s    
 hht{{#<<	6K<LHH5I5P5P5RS	
 	--LL*	 	 	
r   c                    V P                  \        P                  \        P                  ! V P                  4      P
                  R4       R# )zU
L{keys.Key.toString} raises L{keys.BadKeyError} when passed an invalid
format type.
r   N)rv   r   rw   r-   r1   r   rN   s   &r   test_toStringErrorsKeyTests.test_toStringErrors  s/    
 	$**DHHT[[,A,J,JJWr   c           	     n   Rp\         P                  P                  \        P                  4      pVP                  V4      pV P                  VP                  4       P                  W14      4       V P                  VP                  W14      4       \        P                  ! V4      w  rCV P                  VR4       V P                  VP                  P                  4       P                  \        P                  ! V4      ^ ,          V\        P                   ! 4       \"        P$                  ! 4       4      4       R# )zB
Signed data can be verified using RSA (with SHA-1, the default).
	   some-datar5  N)r   r-   rx   r   rg   signr   r~   verifyr   getNSrU   assertIsNoner0   r  r   PKCS1v15r
   SHA1rG   r   r   	signaturesignatureTypes   &    r   test_signAndVerifyRSAKeyTests.test_signAndVerifyRSA  s     hh!!'"<"<=HHTN	

++I<=

934#)<<	#: 
3NN%%'..Y'*D'2B2B2Dfkkm	
r   c           	     r   Rp\         P                  P                  \        P                  4      pVP                  VRR7      pV P                  VP                  4       P                  W14      4       V P                  VP                  W14      4       \        P                  ! V4      w  rCV P                  VR4       V P                  VP                  P                  4       P                  \        P                  ! V4      ^ ,          V\        P                   ! 4       \"        P$                  ! 4       4      4       R# )z5
Signed data can be verified using RSA with SHA-256.
r  r>  r  N)r   r-   rx   r   rg   r  r   r~   r  r   r  rU   r   r0   r  r   r  r
   SHA256r  s   &    r   test_signAndVerifyRSASHA256$KeyTests.test_signAndVerifyRSASHA256       hh!!'"<"<=HHTHA	

++I<=

934#)<<	#: 8NN%%'..Y'*D'2B2B2Dfmmo	
r   c           	     r   Rp\         P                  P                  \        P                  4      pVP                  VRR7      pV P                  VP                  4       P                  W14      4       V P                  VP                  W14      4       \        P                  ! V4      w  rCV P                  VR4       V P                  VP                  P                  4       P                  \        P                  ! V4      ^ ,          V\        P                   ! 4       \"        P$                  ! 4       4      4       R# )z5
Signed data can be verified using RSA with SHA-512.
r  r=  r	  N)r   r-   rx   r   rg   r  r   r~   r  r   r  rU   r   r0   r  r   r  r
   SHA512r  s   &    r   test_signAndVerifyRSASHA512$KeyTests.test_signAndVerifyRSASHA512  r  r   c                "   Rp\         P                  P                  \        P                  4      pVP                  V4      pV P                  VP                  4       P                  W14      4       V P                  VP                  W14      4       R# )z(
Signed data can be verified using DSA.
r  N)	r   r-   rx   r   ri   r  r   r~   r  rG   r   r   r  s   &   r   test_signAndVerifyDSAKeyTests.test_signAndVerifyDSA  sb     hh!!'"<"<=HHTN	

++I<=

934r   c                R   Rp\         P                  P                  \        P                  4      pVP                  V4      p\         P                  P                  \        P                  4      pVP                  V4      p\         P                  P                  \        P                  4      pVP                  V4      pV P                  VP                  4       P                  W14      4       V P                  VP                  W14      4       V P                  VP                  4       P                  WQ4      4       V P                  VP                  WQ4      4       V P                  VP                  4       P                  Wq4      4       V P                  VP                  Wq4      4       R# )z'
Signed data can be verified using EC.
r  N)r   r-   rx   r   rk   r  r   r   r   r~   r  )rG   r   r   r  key384signature384key521signature521s   &       r   test_signAndVerifyECKeyTests.test_signAndVerifyEC  s    hh!!'">">?HHTN	$$W%D%DE{{4($$W%D%DE{{4(

++I<=

934..|BCl9:..|BCl9:r   c                "   Rp\         P                  P                  \        P                  4      pVP                  V4      pV P                  VP                  4       P                  W14      4       V P                  VP                  W14      4       R# )z,
Signed data can be verified using Ed25519.
r  N)	r   r-   rx   r   rm   r  r   r~   r  r  s   &   r   test_signAndVerifyEd25519"KeyTests.test_signAndVerifyEd25519  sb    
 hh!!'"D"DEHHTN	

++I<=

934r   c                n   \         P                  P                  \        P                  4      pV P                  \         P                  VP                  RRR7       \         P                  P                  \        P                  4      pV P                  \         P                  VP                  RRR7       R# )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 datar6  r	  N)	r   r-   rx   r   rg   rv   BadSignatureAlgorithmErrorr  rk   r  s   & r   test_signWithWrongAlgorithm$KeyTests.test_signWithWrongAlgorithm  s     hh!!'"<"<=++HH$	 	 	
 hh!!'">">?++HH$	 	 	
r   c                b   \         P                  P                  \        P                  4      pV P                  VP                  V P                  R4      4       V P                  VP                  V P                  R4      4       V P                  VP                  V P                  R4      4       R# )z3
A known-good RSA signature verifies successfully.
r      aN)
r   r-   rx   r   ra   r   r  r?   r   r@   r  s   & r   test_verifyRSAKeyTests.test_verifyRSA  y     hh!!'";";<

4#4#4c:;D$5$5t<=D$5$5s;<r   c                b   \         P                  P                  \        P                  4      pV P                  VP                  V P                  R4      4       V P                  VP                  V P                  R4      4       V P                  VP                  V P                  R4      4       R# )z3
A known-good DSA signature verifies successfully.
r   r%  N)
r   r-   rx   r   rb   r   r  r@   r   r?   r  s   & r   test_verifyDSAKeyTests.test_verifyDSA  r(  r   c                    \         P                  P                  \        P                  4      pV P                  VP                  V P                  RR R4      4       R# )zh
Some commercial SSH servers send DSA keys as 2 20-byte numbers;
they are still verified as valid keys.
Nr   i)r   r-   rx   r   rb   r   r  r@   r  s   & r   test_verifyDSANoPrefixKeyTests.test_verifyDSANoPrefix  sB    
 hh!!'";";<

4#4#4ST#:C@Ar   c                x    V P                  \        \        P                  ! V P                  4      4      R4       R# )zV
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)rU   reprr   r-   r1   rN   s   &r   test_reprPrivateRSAKeyTests.test_reprPrivateRSA  s.    
 	$++&'F!I	
r   c                    V P                  \        \        P                  ! V P                  4      P                  4       4      R4       R# )zU
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)rU   r0  r   r-   r1   r~   rN   s   &r   test_reprPublicRSAKeyTests.test_reprPublicRSAm  s5    
 	$++&--/0	
r   c                    V P                  \        \        P                  ! V P                  4      P                  4       4      \        R4      P                  ! R/ \        P                  B 4       R# )zT
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)   )
rU   r0  r   r-   r7   r~   r   formatr   r6   rN   s   &r   test_reprPublicECDSAKeyTests.test_reprPublicECDSA  s^    
 	$**%,,./
 f
 
/ --
/	
r   c                    V P                  \        \        P                  ! V P                  4      4      \        R4      P                  ! R/ \        P                  B 4       R# )zU
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)   )	rU   r0  r   r-   r7   r   r7  r   r6   rN   s   &r   test_reprPrivateECDSAKeyTests.test_reprPrivateECDSA  sU    
 	$**%&
 f / --/	
r   c                    V P                  \        \        P                  ! V P                  4      P                  4       4      \        R4      4       R# )zV
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)rU   r0  r   r-   r>   r~   r   rN   s   &r   test_reprPublicEd25519KeyTests.test_reprPublicEd25519  s=     	$//*1134
	
r   c                    V P                  \        \        P                  ! V P                  4      4      \        R4      4       R# )zW
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)rU   r0  r   r-   r>   r   rN   s   &r   test_reprPrivateEd25519 KeyTests.test_reprPrivateEd25519  s4     	$//*+		
r   )	r4   r@   r7   r9   r;   r>   rC   r1   r?   )b__name__
__module____qualname____firstlineno__r   skipCryptographyr   rH   rO   rW   rs   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+  r2  r9  r@  rG  rM  rR  r]  rc  r   rh  rn  rr  rv  ry  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r"  r&  r*  r-  r1  r4  r8  r;  r>  rA  __static_attributes____classdictcell____classdict__s   @r   r   r   *   sk    =,~ 
DFHP
T04(9')6'/b

.$
0
,

	
	



&g
R

.'&5


	
@("UHJ7&7.5496 ? ?C$X
,
*X< 
 
$	


, 
 
5
"
"
( 
 
.<
"
$

$

$ N N& N NNNNN
(X
$
$
$5;* 5 5
*==BN
`
>
(
, 
 
" 
 
r   r   c                   B   a  ] tR tRt o Rt]f   ]tR tR t	R t
RtV tR# )PersistentRSAKeyTestsi  z)
Tests for L{keys._getPersistentRSAKey}.
Nc                   \        V P                  4       4      pVP                  R4      p\        P                  ! VRR7      pV P                  VP                  4       R4       V P                  VP                  4       4       R# )zo
L{keys._getPersistentRSAKey} will put the key in
C{directory}/C{filename}, with the key length of C{keySize}.
	mykey.pemrS   keySizeN)	r   rB   childr   _getPersistentRSAKeyrU   rV   r   existsrG   tempDirrC   r   s   &   r   test_providedArguments,PersistentRSAKeyTests.test_providedArguments  s]    
 4;;=)--,''>T*()r   c                   \        V P                  4       4      pVP                  R4      p\        P                  ! VRR7      pV P                  VP                  4       R4       V P                  VP                  4       4       VP                  4       p\        P                  ! VRR7      pV P                  VP                  4       R4       V P                  VP                  4       V4       R# )zU
L{keys._getPersistentRSAKey} will not regenerate the key if the key
already exists.
rO  rS   rP  rR   N)
r   rB   rR  r   rS  rU   rV   r   rT  
getContent)rG   rV  rC   r   
keyContents   &    r   test_noRegeneration)PersistentRSAKeyTests.test_noRegeneration  s    
 4;;=)--,''>T*()'')
 ''>T*++-z:r   c                    \        V P                  4       4      pVP                  R4      p\        P                  ! VRR7      pRVn        V P                  VP                  4       ^ 4       R# )zg
If the key generated by L{keys.getPersistentRSAKey} is set to None
the key size should then become 0.
rO  rS   rP  N)r   rB   rR  r   rS  r0   rU   rV   rU  s   &   r   test_keySizeZero&PersistentRSAKeyTests.test_keySizeZero  sQ    
 4;;=)--,''>Q'r   r)   )rC  rD  rE  rF  __doc__r   rG  r   rW  r\  r_  rH  rI  rJ  s   @r   rM  rM    s+      
*;&
( 
(r   rM  )!ra  r   rL   textwrapr   twisted.conch.testr   twisted.pythonr   twisted.python.filepathr   twisted.python.reflectr   twisted.trialr   r   rG  cryptography.hazmat.backendsr	   r  r
   r  r   twisted.conch.sshr   r   r   ed25519_supportedr   r   TestCaser   rM  r)   r   r   <module>rl     s   
  	  & $ , 0 "^,9 <5A55');;=r
x   r
j51(H-- 1(r   