+
    üÐ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   ~Y£×ýWÆpu@Ø1¡SóOÚEô/xñšáG3ÙÖUŒÙ‹�ŠÁ‘ØdÉç²É,'=QgçxµjÛIÀÞ¯b×@ÊrÎ£zM1q5Þú{wjKNˆËCå‰Ãùi–‘ÛÊ}ÛRTùDJHÏló[‚¢�“ýŽÎ|û^nÔíâÑŠ·aY›B�¤Ç¾7µ9j¤.‡÷ðÚ×Òù9pý?òN›Ï/)
>AÂµjùUWÔ®‡Bæ™t¢y�˜¢ªfË†åkãÎàuë“NˆÉ“YÃ.V±L44`CÇ¦6¯úY’ú¤%Õ 4^¹rYº ù.‰%H¾ƒA–s7      ssh-dss   (?Çë†;ÕTFA´ßÄE@4,d¼	Ù®Ý[í-‚nQŒf›èájrg„p<Ú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£  € Ü—h‘h×1Ñ1Ü�o‰o˜cÕ"Ü�o‰o˜cÕ"Ü�o‰o˜cÕ"Ü�o‰o˜cÕ"Ü�o‰o˜cÕ"Ü�o‰o˜cÕ"ð 2ó 
÷ ‰*ð 	Œô —h‘h×1Ñ1Ü�o‰o˜cÕ"Ü�o‰o˜cÕ"Ü�o‰o˜cÕ"Ü�o‰o˜cÕ"Ü�o‰o˜cÕ"ð 2ó 
÷ ‰*ð 	Œô —X‘X×/Ñ/Ü×$Ñ$ SÕ)Ü×$Ñ$ SÕ)Ü ×/Ñ/°Õ?Ü×(Ñ(¨Õ1ð	 0ó 
÷
 ‰*ð 	Œ
ô Ÿ™×2Ñ2Ü×$Ñ$ SÕ)Ü×$Ñ$ SÕ)Ü ×/Ñ/°Õ?Ü×(Ñ(¨Õ1ð	 3ó 
÷
 ‰*ð 	Œô Ÿ™×2Ñ2Ü×$Ñ$ SÕ)Ü×$Ñ$ SÕ)Ü ×/Ñ/°Õ?Ü×(Ñ(¨Õ1ð	 3ó 
÷
 ‰*ð 	Œ÷ ÓÜ"Ÿh™h×=Ñ=Ü×%Ñ% cÕ*¬g×.AÑ.AÀ#Õ.Fð >ó ç‰jð ŒOð;ð 	Ôð ð 	Ôð
 	�
‰
”9˜nÑ.CÔDØ—{‘{“}ˆŒÜ�$—,‘, ×%Ô%¨Ø�G‰G”G×*Ñ*Ô+÷ &×%×%Ò%ú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Ó5°tÔ<Ø×ÑœŸš $§+¡+Ó.×3Ñ3Ó5°tÔ<Ø×ÑœŸš $§*¡*Ó-×2Ñ2Ó4°cÔ:Ø×ÑœŸš $§-¡-Ó0×5Ñ5Ó7¸Ô=Ø×ÑœŸš $§-¡-Ó0×5Ñ5Ó7¸Ô=ßÓØ×ÑœTŸXšX d§o¡oÓ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�  € ð
 	×ÑÜ�H‰H×%Ñ%¤g×&?Ñ&?Ó@ÐBRô	
ð 	×ÑÜ�H‰H×%Ñ%¤g×&?Ñ&?Ó@ÐBRô	
ð 	×ÑÜ�H‰H×%Ñ%¤g×&AÑ&AÓBÐDTô	
ð 	×ÑÜ�H‰H×%Ñ%¤g×&CÑ&CÓDÐFVô	
ð 	×ÑÜ�H‰H×%Ñ%¤g×&CÑ&CÓDØô	
ð 	×ÑÜ�H‰H×%Ñ%¤g×&EÑ&EÓFØô	
ð 	×ÑÜ�H‰H×%Ñ%¤g×&@Ñ&@ÓAÐCTô	
ð 	×ÑÜ�H‰H×%Ñ%¤g×&DÑ&DÓEÐGXô	
ð 	×ÑÜ�H‰H×%Ñ%¤g×&@Ñ&@ÓAÐCTô	
ð 	×ÑÜ�H‰H×%Ñ%¤g×&DÑ&DÓEÐGXô	
ð 	×ÑÜ�H‰H×%Ñ%¤g×&BÑ&BÓCÐEVô	
ð 	×ÑÜ�H‰H×%Ñ%¤g×&FÑ&FÓGØô	
ð 	×ÑÜ�H‰H×%Ñ%¤g×&HÑ&HÓIØô	
ð 	×ÑœŸ™×2Ñ2´7×3HÑ3HÓIÈ<ÔXØ×ÑœŸ™×2Ñ2´7×3HÑ3HÓIÈ<ÔXØ×ÑÜ�H‰H×%Ñ%¤g×&<Ñ&<Ó=¸}ô	
ð 	×ÑÜ�H‰H×%Ñ%¤g×&<Ñ&<Ó=¸}ô	
ð 	×ÑÜ�H‰H×%Ñ%¤g×&@Ñ&@ÓAÀ9ô	
ð 	×ÑÜ�H‰H×%Ñ%¤g×&@Ñ&@ÓAÀ9ô	
ð 	×ÑÜ�H‰H×%Ñ%Ð&TÓUØô	
ð 	×ÑÜ�H‰H×%Ñ%Ð&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`   € ð 	×ÑÜ×ÑÜ�H‰H×ÑÜ×0Ñ0ô	
ð
 	×ÑÜ×ÑÜ�H‰H×ÑÜ×.Ñ.ö	
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ˆÜ—x‘x×*Ñ*¬7×+DÑ+DÓEˆØ×Ñ˜×-Ñ-Ó/°×1DÑ1DÓ1FÔGäŸ™×+Ñ+¬G×,FÑ,FÓGˆÜ—x‘x×*Ñ*¬7×+DÑ+DÓEˆØ×Ñ˜×-Ñ-Ó/°×1DÑ1DÓ1FÔGäŸ(™(×-Ñ-¬g×.JÑ.JÓKˆÜŸ™×,Ñ,¬W×-HÑ-HÓIˆØ×Ñ˜×/Ñ/Ó1°>×3HÑ3HÓ3JÔKçÓÜ $§¡× 3Ñ 3´G×4VÑ4VÓ WÐÜ#Ÿx™x×2Ñ2´7×3PÑ3PÓQÐØ×ÑÐ.×5Ñ5Ó7Ð9I×9PÑ9PÓ9RÖ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×%?Ñ%?Ó@ˆÜ—8‘8×&Ñ&¤w×'CÑ'CÓDˆØ�‰˜Ÿ™›×0Ñ0Ó2Ô3Ø×Ñ˜Ÿ™Ó*Ô+Ø�‰˜Ÿ™›×0Ñ0Ó2Ô3Ø×Ñ˜Ÿ™Ó*Ô+Ø�‰˜Ÿ™Ó)×2Ñ2Ó4Ô5Ø×Ñ˜×*Ñ*Ó,Ô-çÓÜŸ™×,Ñ,¬W×-OÑ-OÓPˆJØ�O‰O˜J×-Ñ-Ó/×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Ø×#Ñ# G°4Ö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   € Ü—H‘H×'Ñ'¨Ó/ˆ	Ø�‰˜	×*Ñ*Ó,Ô-Ø×Ñ˜Ÿ™Ó)¨4Ô0Ø—N‘NÓ$×*Ñ*Ö,‰DˆAØ×Ñ˜T�W aÖ(ó -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   € Ü—X‘X×(Ñ(¨Ó1ˆ
Ø×Ñ˜×,Ñ,Ó.Ô/Ø×Ñ˜Ÿ™Ó*¨DÔ1Ø—J‘J–L‰DˆAØ×Ñ˜ZŸ_™_Ó.¨qÕ1°1Ö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&   € Ü—H‘H×'Ñ'¨Ó/ˆ	Ø�‰˜	Ÿ™Ö&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  € ð 	×)Ñ)Ü×'Ñ'Ü×(Ñ(ØÜ×"Ñ"ô		
ð 	×)Ñ)Ü×%Ñ%Ü×&Ñ&ØÜ�O‰Oô		
ð 	×ÑÜ�H‰H×ÑÜ×4Ñ4Àð  ó ô �H‰H×Ñ¤× :Ñ :Ó;ô		
ð 	×)Ñ)Ü×%Ñ%Ü×&Ñ&ØÜ�O‰Oô		
ð 	×$Ñ$Ü×)Ñ)ØÜ×$Ñ$ô	
÷ ÓØ×(Ñ(Ü×/Ñ/ØÜ×%Ñ%ôð ×-Ñ-Ü×-Ñ-Ü×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   € ð ˆð 	×ÑÜ×ÑœdŸh™h×BÑBÀFÈDö	
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   € ð!ˆð 	×ÑÜ�H‰H×Ñ Ó/Ü�H‰H×Ñ °Õ 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   € ô
 �h‰h×!Ñ!Ü×4Ñ4Àð "ó 
ˆð 	×Ñ˜Ÿ™› UÔ+Ü�x‰x×"Ñ"Ü×4Ñ4°uÕ<Èð #ó 
ˆð 	×Ñ˜Ö#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ó
‰HˆCð ×ÑœTŸX™X×0Ñ0°Ó5´t·x±x×7JÑ7JÈ3Ó7OÖPñ
ð 	×ÑÜ�H‰H×ÑÜ×8Ñ8À\ð  ó ô �H‰H×ÑÜ×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   € ð
!ˆð 	×ÑÜ�H‰H×Ñ Ó/Ü�H‰H×Ñ × 6Ñ 6°u¸gÓ 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   € ô
 �zŠz˜M¨J¸¸t¸Ð+EÐFÐGÓHˆà×ÑÜ×ÑÜ�H‰H×ÑØœ×(Ò(¨Ó.Õ.°Õ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   € ô
 �zŠz˜N¨Z¸$À¸Ð,FÐGÐHÓIˆà×ÑÜ×ÑÜ�H‰H×ÑØö	
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Å  ó.   € ð 	×)Ñ)Ü×!Ñ!Ü×"Ñ"ØÜ�O‰Oö		
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Ø×ÑÜ×ÑÜ�H‰H×ÑØ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_fromStringNormalizesUnicodePassphraseÚ3KeyTests.test_fromStringNormalizesUnicodePassphraseç  s‹   € ô
 �hŠh�t—{‘{Ó#ˆØ—<‘< 	Ð6J×6QÑ6QÓ6S�<ÓTˆØ×ÑÜ�H‰H×Ñ Ð5JÐÓKÈSô	
ð
 	×ÑÜ×-Ñ-Ü�H‰H×ÑØØ*ð	 	ö 	
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È  € ð 	×Ñœ$×*Ñ*¬D¯H©H×,?Ñ,?ÀÔEà×Ñœ$×*Ñ*¬D¯H©H×,?Ñ,?ÀÀjÔQà×ÑÜ×ÑÜ�H‰H×ÑÜ×!Ñ!Ø%ð	 	ô 	
ð 	×ÑÜ×"Ñ"Ü�H‰H×ÑÜ�HŠH�T—[‘[Ó!×*Ñ*¨9ÀÐ*ÓNô	
ð 	×ÑÜ×ÑœdŸh™h×1Ñ1Ð3Uô	
ð 	×ÑÜ×ÑÜ�H‰H×Ñð!ð< #ðC 	ô "	
ðH 	×ÑÜ×ÑÜ�H‰H×Ñð!ð< #ðC 	ô "	
ðH 	×ÑÜ×ÑÜ�H‰H×Ñð!ð< #ðC 	ô "	
ðH 	×ÑÜ×ÑÜ�H‰H×Ñð!ð< #ð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™   € ð 	×ÑÜ�H‰H×Ñ˜dŸl™lÓ+¬T¯X©X×-@Ñ-@Ä×AWÑAWÓ-Xô	
ð 	×Ñœ$×*Ñ*¬D¯H©H×,=Ñ,=¸t¿|¹|ÈZÔXØ×ÑÜ×ÑœdŸh™h×/Ñ/°·±È-ð 	ö 	
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   € ô �h‰h×)Ñ)¨A°Ð)Ó3×>Ñ>ˆÜ�hŠh�s‹mˆØ×Ñ˜Ÿ™¨Ö-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´   € ô �xŠx˜Ÿ™Ó$ˆÜ�xŠx˜Ÿ™Ó$ˆÜ�xŠxœŸ™×3Ñ3°a¸1Ð3Ó=×HÑHÓIˆÜ�hŠh�t—{‘{Ó#ˆØ�‰˜™Ô%Ø×Ñ˜™Ô&Ø×Ñ˜™Ô%Ø×Ñ˜¤™Ô(Ø×Ñ˜ ™Ö&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®   € ô �xŠx˜Ÿ™Ó$ˆÜ�xŠx˜Ÿ™Ó$ˆÜ�xŠxœŸ™×3Ñ3°a¸1Ð3Ó=×HÑHÓIˆÜ�hŠh�t—{‘{Ó#ˆØ×Ñ˜™Ô&Ø�‰˜™Ô%Ø�‰˜™Ô$Ø�‰˜¤™Ô'Ø�‰˜ ™Ö%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   € ð
 	×ÑÜ�HŠH�T—[‘[Ó!×-Ñ-Ó/Ø=ô	
ð 	×ÑÜ�HŠH�T—[‘[Ó!×-Ñ-Ó/Ø=ö	
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   € ð
 	×ÑÜ�HŠH�T—[‘[Ó!×-Ñ-¬d×.EÑ.E×.MÑ.MÓNØ=ô	
ð 	×ÑÜ�HŠH�T—[‘[Ó!×-Ñ-¬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   € ð
 	×ÑÜ�HŠH�T—[‘[Ó!×-Ñ-¬d×.EÑ.E×.SÑ.SÓTØ:ô	
ð 	×ÑÜ�HŠH�T—[‘[Ó!×-Ñ-¬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Ô9¸RÜ�HŠH�T—[‘[Ó!×-Ñ-¨mÔ<÷ :à×ÑØ9¸2¿<¹<×;LÑ;LÈQÕ;Oö	
÷ :×9ús   ¨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Ó5°uÔ=Ø×ÑœŸš $§+¡+Ó.×6Ñ6Ó8¸*ÔEØ×ÑœŸš $§+¡+Ó.×3Ñ3Ó5°uÔ=Ø×ÑœŸš $§+¡+Ó.×6Ñ6Ó8¸*ÔEØ×ÑœŸš $§*¡*Ó-×2Ñ2Ó4°dÔ;Ø×ÑÜ�HŠH�T—Z‘ZÓ ×(Ñ(Ó*¬G×,BÑ,BÀ7Õ,Kô	
÷ ÓØ×ÑœTŸXšX d§o¡oÓ6×;Ñ;Ó=¸yÔIØ×ÑœTŸXšX d§o¡oÓ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  € ð
 	×ÑÜ�HŠH�T—[‘[Ó!×>Ñ>Ó@Ú:ô	
ð 	×ÑÜ�HŠH�T—[‘[Ó!×>Ñ>Ó@À:À,ô	
ð 	×ÑÜ�HŠH�T—Z‘ZÓ ×=Ñ=Ó?Ø#Ð$ô	
ð 	×ÑÜ�H‰H×ÑÜ×-Ñ-óç*Ñ*Ó,Ø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Ó'ˆà×Ñœ$×*Ñ*¬D¯H©H×,?Ñ,?ÀÖ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£   € ð
 ”—‘ Õ%Ø”—‘ Õ%ð
ˆô
 �IŠI�jÓ!Ü�iŠi˜ cÕ*Ó+õ,ä�iŠi˜ 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ï   € ð
 ”—‘ Õ%Ø”—‘ Õ%Ø”—‘ Õ%Ø”—‘ Õ%ð	
ˆô �IŠI�jÓ!Ü�iŠi˜ cÕ*Ó+õ,ä�iŠi˜ cÕ*Ó+õ,ô �iŠi˜ cÕ*Ó+õ,ô �iŠi˜ 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ð
ˆô �IŠI�l 7Õ+Ó,Ü�iŠi˜ WÕ-¨b¨cÐ2Ó3õ4ä�iŠiØØ×$Ñ$ \°#Õ%6¸Ó;õ<à×$Ñ$ \°#Õ%6¸Ó;õ<óõð 	ô —‘×#Ñ# FÓ+ˆØ�‰˜Ÿ™Ó(Ô)Ø×Ñ˜§z¡z£|Ö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ð
ˆô �IŠI”g×.Ñ.¨wÕ7Ó8Ü�iŠiœ×0Ñ0°Õ9¸"¸#Ð>Ó?õ@ä�iŠiØØ×$Ñ$ ^°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Õ)ð
Ðô —i’i Ó/´&·)²)Ð<MÈcÕ<RÓ2SÕSˆä—X‘X×(Ñ(¨Ó5ˆ
à�‰˜
×+Ñ+Ó-Ô.Ø×ÑÐ*¯O©OÓ,=Ö>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Õ+ð
Ðô Ÿ	š	Ð"?Ó@Ä6Ç9Â9Ø Õ$óD
õ 
ˆô —x‘x×*Ñ*¨=Ó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Ó'ˆà×Ñœ$×*Ñ*¬D¯H©H×,MÑ,MÈwÖ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)  € ô
 �IŠI�jÓ!Ü�iŠiœŸ™¨Õ,Ó-õ.ä�iŠiœŸ™¨Õ,Ó-õ.ô �iŠiœŸ™¨Õ,Ó-õ.ô �iŠiœŸ™¨Õ,Ó-õ	.ô
 �iŠiœŸ™¨Õ,Ó-õ.ô �iŠiœŸ™¨Õ,Ó-õ.ð 	ô —‘×2Ñ2°7Ó;ˆà×Ñ˜Ÿ™Ó*Ô+Ø×ÑœŸ™¨&¯+©+«-Ô8Ø×ÑØ”D—H‘H×5Ñ5°f×6HÑ6HÓ6JÓ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  € ô
 �IŠI�jÓ!Ü�iŠiœŸ™¨Õ,Ó-õ.ä�iŠiœŸ™¨Õ,Ó-õ.ô �iŠiœŸ™¨Õ,Ó-õ.ô �iŠiœŸ™¨Õ,Ó-õ	.ô
 �iŠiœŸ™¨Õ,Ó-õ.ð 	ô —‘×2Ñ2°7Ó;ˆà×Ñ˜Ÿ™Ó*Ô+Ø×ÑœŸ™¨&¯+©+«-Ô8Ø×ÑØ”D—H‘H×5Ñ5°f×6HÑ6HÓ6JÓ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ó 
ˆô �IŠI”g×,Ñ,¨WÕ5Ó6Ü�iŠiœ×.Ñ.¨wÕ7¸¸Ð<Ó=õ>ä�iŠiØ×(Ñ(¬Ó):Ó;×HÑHØ!×*Ñ*×/Ñ/Ø!×.Ñ.×@Ñ@óóõô �iŠiœ×.Ñ.¨~Õ>Ó?õ@ð 	ô —‘×1Ñ1°&Ó9ˆà×Ñ˜Ÿ™Ó)Ô*Ø×Ñœ×/Ñ/°·±³Ô>Ø×Ñ˜¤§¡× AÑ AÀ%×BSÑBSÓBUÓ 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Ó   € ô �IŠI�nÓ%Ü�iŠiœ×+Ñ+¨CÕ0Ó1õ2ä�iŠiœ×+Ñ+¨CÕ0´7×3FÑ3FÀsÕ3KÕKÓLõMð 	ô —X‘X×6Ñ6°{ÓCˆ
à×Ñ˜×,Ñ,Ó.Ô/Ø×Ñœ×,Ñ,¨j¯o©oÓ.?Ô@Ø×ÑØœŸ™×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�   € ð 	×ÑÜ�HŠH�T—[‘[Ó!×&Ñ&Ó(Ü�IŠI�jÓ!Ü�iŠi˜Ÿ™×3Ñ3Ó5×DÑD×FÑFÓGõHä�iŠi˜Ÿ™×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ˆà×ÑÜ�HŠH�T—[‘[Ó!×&Ñ&Ó(Ü�IŠI�jÓ!Ü�iŠi˜×7Ñ7×9Ñ9Ó:õ;ä�iŠi˜×7Ñ7×9Ñ9Ó:õ;ô �iŠi˜×7Ñ7×9Ñ9Ó:õ;ô �iŠi˜Ÿ™Ó(õ	)ö	
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ÿ   € õ 	'à—j‘j×&Ñ&×/Ñ/°!Õ3¸Õ9ˆ
Ø×ÑÜ�HŠH�T—Z‘ZÓ ×%Ñ%Ó'Ü�IŠI”g×,Ñ,¨WÕ5Ó6Ü�iŠiœ×.Ñ.¨wÕ7¸¸Ð<Ó=õ>ä�iŠiØØ×$Ñ$Ø—J‘J×.Ñ.Ó0×?Ñ?×AÑAÀ:óõð ×$Ñ$Ø—J‘J×.Ñ.Ó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à—o‘o×0Ñ0Ó2×?Ñ?Ø×"Ñ"×&Ñ&¨×(BÑ(B×(FÑ(Fó
ˆð 	×ÑÜ�HŠH�T—_‘_Ó%×*Ñ*Ó,Ü�IŠI�nÓ%¬¯	ª	°+Ó(>Õ>ö	
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ß   € ð
 —+‘+×-Ñ-Ó/ˆØ×ÑÜ�HŠH�T—[‘[Ó!×-Ñ-Ó/Ü�IŠI�jÓ!Ü�iŠi˜×.Ñ.×0Ñ0Ó1õ2ä�iŠi˜×.Ñ.×0Ñ0Ó1õ2ô �iŠi˜Ÿ	™	Ó"õ#ô �iŠi˜Ÿ™Ó%õ	&ô
 �iŠi˜Ÿ	™	Ó"õ#ô �iŠi˜Ÿ	™	Ó"õ#ö		
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ˆà×ÑÜ�HŠH�T—[‘[Ó!×-Ñ-Ó/Ü�IŠI�jÓ!Ü�iŠi˜×7Ñ7×9Ñ9Ó:õ;ä�iŠi˜×7Ñ7×9Ñ9Ó:õ;ô �iŠi˜×7Ñ7×9Ñ9Ó:õ;ô �iŠi˜Ÿ™Ó(õ	)ô
 �iŠi˜Ÿ™×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à×ÑÜ�HŠH�T—Z‘ZÓ ×,Ñ,Ó.Ü�IŠI”g×,Ñ,¨WÕ5Ó6Ü�iŠiœ×.Ñ.¨wÕ7¸¸Ð<Ó=õ>ä�iŠiØ—
‘
×%Ñ%Ó'×4Ñ4Ø!×*Ñ*×/Ñ/Ø!×.Ñ.×@Ñ@óóõô �iŠi˜Ÿ
™
×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à—o‘o×0Ñ0Ó2×?Ñ?Ø×"Ñ"×&Ñ&¨×(BÑ(B×(FÑ(Fó
ˆð —‘×4Ñ4Ø×"Ñ"×&Ñ&Ø×'Ñ'×+Ñ+Ø×&Ñ&Ó(ó
ˆð 	×ÑÜ�HŠH�T—_‘_Ó%×1Ñ1Ó3Ü�IŠI�nÓ%Ü�iŠi˜Ó$õ%ä�iŠi˜Õ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Ø   € ô �h‰h×!Ñ!¤'×"<Ñ"<Ó=ˆØ×Ñ˜Ÿ™ iÓ0×6Ñ6Ó8¼'×:TÑ:TÔUØ�‰Ø�L‰L˜¨|ˆLÓ<×AÑAÀ+ÓNÐQRÑRô	
ð 	×ÑØ�J‰J‹L×!Ñ! )Ó,¬g×.GÑ.GÈÈÐ.Lô	
ð 	×ÑØ�J‰J‹L×!Ñ! )°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æ  óÔ   € ô �h‰h×!Ñ!¤'×"<Ñ"<Ó=ˆØ—|‘| I°t�|Ó<ˆØŸ<™<¨	¸4ÈK˜<ÓXÐØ×ÑØ2°L×4KÑ4KÓ4MÈaÕ4Pô	
ð 	×ÑØ2Ð4D×4OÑ4OÓ4QÐRSÕ4Tô	
ð 	×Ñ˜œdŸh™h×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©   € ô �h‰h×!Ñ!¤'×"8Ñ"8Ó9ˆØ×Ñ˜Ÿ™ iÓ0×6Ñ6Ó8¼'×:TÑ:TÔUØ×ÑØ�J‰J‹L×!Ñ! )°ZÐ!Ó@Ü×%Ñ%ô	
ð 	×ÑØ�J‰J‹L×!Ñ! )Ó,¬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�   € ô �h‰h×!Ñ!¤'×">Ñ">Ó?ˆØ×ÑØ�J‰J‹L×!Ñ! )°ZÐ!Ó@Ü×'Ñ'ô	
ð 	×ÑØ�J‰J‹L×!Ñ! )Ó,¬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Ô   € ô �h‰h×!Ñ!¤'×">Ñ">Ó?ˆØ—|‘| I°t�|Ó<ˆØŸ<™<¨	¸4ÈK˜<ÓXÐØ×ÑØ2°L×4KÑ4KÓ4MÈaÕ4Pô	
ð 	×ÑØ2Ð4D×4OÑ4OÓ4QÐRSÕ4Tô	
ð 	×Ñ˜œdŸh™h×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ë   € ô
 �h‰h×!Ñ!¤'×"DÑ"DÓEˆØ—|‘| IÓ.ˆØŸ<™<¨	¸k˜<ÓJÐØ×ÑØ2°L×4KÑ4KÓ4MÈaÕ4Pô	
ð 	×ÑØ2Ð4D×4OÑ4OÓ4QÐRSÕ4Tô	
ð 	×Ñ˜œdŸh™h×1Ñ1°,Ó?Ô@Ø×ÑØ”—‘×$Ñ$Ð%5À+Ð$ÓNô	
ð 	×Ñ˜§|¡|°IÀt |Ó'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   € ô �h‰h×!Ñ!¤'×"DÑ"DÓEˆØ×Ñœ* c§l¡l°IÀuÐÖ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   € ô �h‰h×!Ñ!¤'×"<Ñ"<Ó=ˆØ×Ñ˜Ÿ™ eÓ,¬g×.DÑ.DÔEØ×Ñ˜Ÿ™›×.Ñ.¨uÓ5´w×7LÑ7LÖ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  ó=   € ô �h‰h×!Ñ!¤'×"<Ñ"<Ó=ˆØ×Ñ˜Ÿ™ iÓ0´'×2LÑ2LÖ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_toStringNormalizesUnicodePassphraseÚ1KeyTests.test_toStringNormalizesUnicodePassphrases  s†   € ô
 �hŠh�t—{‘{Ó#ˆØ—<‘< 	Ð6K�<ÓLˆØ×ÑÜ�H‰H×Ñ Ð5I×5PÑ5PÓ5RÐÓSØô	
ð 	×ÑÜ×-Ñ-Ø�L‰LØØ*ð	 	ö 	
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/   € ð
 	×Ñœ$×*Ñ*¬D¯HªH°T·[±[Ó,A×,JÑ,JÈJÖ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Ò   € ð ˆÜ�h‰h×!Ñ!¤'×"<Ñ"<Ó=ˆØ—H‘H˜T“Nˆ	Ø�‰˜Ÿ
™
›×+Ñ+¨IÓ<Ô=Ø�‰˜Ÿ
™
 9Ó3Ô4ä#)§<¢<°	Ó#:Ñ ˆØ×Ñ˜¨
Ô3Ø×ÑØ�N‰N×%Ñ%Ó'×.Ñ.Ü—’˜YÓ'¨Õ*¨D´'×2BÒ2BÓ2DÄfÇkÂkÃmóö	
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   ó×   € ð ˆÜ�h‰h×!Ñ!¤'×"<Ñ"<Ó=ˆØ—H‘H˜T°�HÓAˆ	Ø�‰˜Ÿ
™
›×+Ñ+¨IÓ<Ô=Ø�‰˜Ÿ
™
 9Ó3Ô4ä#)§<¢<°	Ó#:Ñ ˆØ×Ñ˜¨Ô8Ø×ÑØ�N‰N×%Ñ%Ó'×.Ñ.Ü—’˜YÓ'¨Õ*¨D´'×2BÒ2BÓ2DÄfÇmÂmÃoóö	
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   € ð ˆÜ�h‰h×!Ñ!¤'×"<Ñ"<Ó=ˆØ—H‘H˜T“Nˆ	Ø�‰˜Ÿ
™
›×+Ñ+¨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  € ð ˆÜ�h‰h×!Ñ!¤'×">Ñ">Ó?ˆØ—H‘H˜T“Nˆ	ä—‘×$Ñ$¤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   € ð
 ˆÜ�h‰h×!Ñ!¤'×"DÑ"DÓEˆØ—H‘H˜T“Nˆ	Ø�‰˜Ÿ
™
›×+Ñ+¨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Œ   € ô �h‰h×!Ñ!¤'×"<Ñ"<Ó=ˆØ×ÑÜ×+Ñ+Ø�H‰HØØ$ð	 	ô 	
ô �h‰h×!Ñ!¤'×">Ñ">Ó?ˆØ×ÑÜ×+Ñ+Ø�H‰HØØ$ð	 	ö 	
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   € ô �h‰h×!Ñ!¤'×";Ñ";Ó<ˆØ�‰˜Ÿ
™
 4×#4Ñ#4°cÓ:Ô;Ø×Ñ˜Ÿ™ D×$5Ñ$5°tÓ<Ô=Ø×Ñ˜Ÿ™ D×$5Ñ$5°sÓ;Ö<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   € ô
 �h‰h×!Ñ!¤'×";Ñ";Ó<ˆØ�‰˜Ÿ
™
 4×#4Ñ#4°S°TÐ#:¸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ò.5ò49ð6 ñ?ó ð?ò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   