Ë
    ojj ã                   ó>  — d Z ddlZddlZddlmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZ  ed	«      Ze€d
Zer2ddlmZ ddlmZ ddlmZ ddlmZmZmZ  e«       j7                  «       ZndZd„ Z G d„ dej<                  «      Z G d„ dej<                  «      Z y)z&
Tests for L{twisted.conch.ssh.keys}.
é    N)Údedent)Úkeydata)Ú	randbytes)ÚFilePath)ÚrequireModule)ÚunittestÚcryptographyz Cannot run without cryptography.)Údefault_backend)Úhashes)Úpadding)ÚcommonÚkeysÚsexpyFc                 ó    — t         sd| _        | S )Nz$ed25519 not supported on this system)ÚED25519_SUPPORTEDÚskip)Úfs    ú>/usr/lib/python3/dist-packages/twisted/conch/test/test_keys.pyÚskipWithoutEd25519r   $   s   € ÝØ7ˆŒØ€Hó    c                   ó`  — e Zd Ze€eZd„ Zd„ Zd„ Zd„ Z	d„ Z
d„ Zd„ Zd	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!d„ Z"d„ Z#d „ Z$d!„ Z%d"„ Z&d#„ Z'd$„ Z(d%„ Z)d&„ Z*e+d'„ «       Z,d(„ Z-d)„ Z.d*„ Z/d+„ Z0e+d,„ «       Z1d-„ Z2d.„ Z3d/„ Z4e+d0„ «       Z5d1„ Z6d2„ Z7d3„ Z8d4„ Z9e+d5„ «       Z:d6„ Z;d7„ Z<d8„ Z=d9„ Z>d:„ Z?d;„ Z@d<„ ZAe+d=„ «       ZBe+d>„ «       ZCd?„ ZDd@„ ZEdA„ ZFdB„ ZGdC„ ZHdD„ ZIdE„ ZJdF„ ZKdG„ ZLdH„ ZMdI„ ZNe+dJ„ «       ZOdK„ ZPdL„ ZQdM„ ZRdN„ ZSdO„ ZTdP„ ZUdQ„ ZVdR„ ZWe+dS„ «       ZXe+dT„ «       ZYy)UÚKeyTestsNc           	      óÆ  — t         j                  j                  t        j                  d   t        j                  d   t        j                  d   t        j                  d   t        j                  d   t        j                  d   ¬«      j
                  | _        t         j                  j                  t        j                  d   t        j                  d   t        j                  d   t        j                  d	   t        j                  d
   ¬«      j
                  | _	        t         j                  j                  t        j                  d
   t        j                  d   t        j                  d   t        j                  d   ¬«      j
                  | _        t         j                  j                  t        j                  d
   t        j                  d   t        j                  d   t        j                  d   ¬«      j
                  | _        t         j                  j                  t        j                  d
   t        j                  d   t        j                  d   t        j                  d   ¬«      j
                  | _        t"        rRt         j                  j%                  t        j&                  d   t        j&                  d   ¬«      j
                  | _        d| _        d| _        | j/                  t0        dd„ «       | j3                  «       | _        t7        | j4                  d«      5 }|j9                  t        j:                  «       d d d «       y # 1 sw Y   y xY w)NÚnÚeÚdÚpÚqÚu)r   r   r   r   r   r   ÚyÚgÚx)r    r   r   r!   r"   ÚprivateValueÚcurve)r"   r    r#   r$   ÚaÚk)r%   r&   s     ssh-rsa   ~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                 ó   — d| z  S )Nó   ÿ© )r"   s    r   ú<lambda>z KeyTests.setUp.<locals>.<lambda>h   s
   € ¸À!¹€ r   Úwb)r   ÚKeyÚ_fromRSAComponentsr   ÚRSADataÚ
_keyObjectÚrsaObjÚ_fromDSAComponentsÚDSADataÚdsaObjÚ_fromECComponentsÚECDatanistp256ÚecObjÚECDatanistp384ÚecObj384ÚECDatanistp521ÚecObj521r   Ú_fromEd25519ComponentsÚEd25519DataÚ
ed25519ObjÚrsaSignatureÚdsaSignatureÚpatchr   ÚmktempÚkeyFileÚopenÚwriteÚprivateRSA_lsh)Úselfr   s     r   ÚsetUpzKeyTests.setUp.   s£  € Ü—h‘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   Ì. MÍM c                 óB   — t        j                  | j                  «       y ©N)ÚosÚunlinkrC   ©rG   s    r   ÚtearDownzKeyTests.tearDownm   s   € Ü
�	‰	�$—,‘,Õr   c                 óî  — | j                  t        j                  | j                  «      j	                  «       d«       | j                  t        j                  | j
                  «      j	                  «       d«       | j                  t        j                  | j                  «      j	                  «       d«       | j                  t        j                  | j                  «      j	                  «       d«       | j                  t        j                  | j                  «      j	                  «       d«       t        r>| j                  t        j                  | j                  «      j	                  «       d«       yy)zU
        The L{keys.Key.size} method returns the size of key object in bits.
        é   é   é   i€  i	  N)ÚassertEqualr   r-   r1   Úsizer4   r7   r9   r;   r   r>   rM   s    r   Ú	test_sizezKeyTests.test_sizep   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                 óP	  — | j                  t        j                  j                  t        j
                  «      d«       | j                  t        j                  j                  t        j                  «      d«       | j                  t        j                  j                  t        j                  «      d«       t        r=| j                  t        j                  j                  t        j                  «      d«       | j                  t        j                  j                  t        j                  «      d«       | j                  t        j                  j                  t        j                  «      d«       | j                  t        j                  j                  t        j                  «      d«       | j                  t        j                  j                  t        j                  «      d«       | j                  t        j                  j                  t        j                  «      d«       | j                  t        j                  j                  t        j                  «      d«       t        r=| j                  t        j                  j                  t        j                   «      d«       | j                  t        j                  j                  t        j"                  «      d«       | j                  t        j                  j                  t        j$                  «      d«       | j                  t        j                  j                  t        j&                  «      d«       | j                  t        j                  j                  t        j(                  «      d«       | j                  t        j                  j                  t        j*                  «      d«       | j                  t        j                  j                  t        j,                  «      d«       | j                  t        j                  j                  d«      d«       | j                  t        j                  j                  d«      d«       | j                  t        j                  j                  d	«      d
«       y
)z_
        Test that the _guessStringType method guesses string types
        correctly.
        Úpublic_opensshÚprivate_opensshÚ
public_lshÚprivate_lshÚagentv3s      ssh-rsa   Úblobs      ssh-dss   s	   not a keyN)rS   r   r-   Ú_guessStringTyper   ÚpublicRSA_opensshÚpublicDSA_opensshÚpublicECDSA_opensshr   ÚpublicEd25519_opensshÚprivateRSA_opensshÚprivateRSA_openssh_newÚprivateDSA_opensshÚprivateDSA_openssh_newÚprivateECDSA_opensshÚprivateECDSA_openssh_newÚprivateEd25519_openssh_newÚpublicRSA_lshÚpublicDSA_lshrF   ÚprivateDSA_lshÚprivateRSA_agentv3ÚprivateDSA_agentv3rM   s    r   Útest__guessStringTypezKeyTests.test__guessStringType|   s@  € ð
 	×ÑÜ�H‰H×%Ñ%¤g×&?Ñ&?Ó@ÐBRô	
ð 	×ÑÜ�H‰H×%Ñ%¤g×&?Ñ&?Ó@ÐBRô	
ð 	×ÑÜ�H‰H×%Ñ%¤g×&AÑ&AÓBÐDTô	
õ Ø×ÑÜ—‘×)Ñ)¬'×*GÑ*GÓHØ ôð 	×ÑÜ�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Øô	
õ Ø×ÑÜ—‘×)Ñ)¬'×*LÑ*LÓMØ!ôð 	×ÑœŸ™×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                 óR  — t         j                  j                  t        j                  «      }t         j                  j                  t        j
                  «      }| j                  |j                  «       |j                  «       «       t         j                  j                  t        j                  «      }t         j                  j                  t        j                  «      }| j                  |j                  «       |j                  «       «       t         j                  j                  t        j                  «      }t         j                  j                  t        j                  «      }| j                  |j                  «       |j                  «       «       t        r‰t         j                  j                  t        j                  «      }t         j                  j                  t        j                  «      }| j                  |j                  «       |j                  «       «       yy)zn
        The L{keys.Key.public} method returns a public key for both
        public and private keys.
        N)r   r-   Ú
fromStringr   rb   r^   rS   Úpublicrd   r_   rf   r`   r   rh   ra   )	rG   ÚprivateRSAKeyÚpublicRSAKeyÚprivateDSAKeyÚpublicDSAKeyÚprivateECDSAKeyÚpublicECDSAKeyÚprivateEd25519KeyÚpublicEd25519Keys	            r   Útest_publiczKeyTests.test_public¿   sh  € ô Ÿ™×+Ñ+¬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                 óÚ  — t         j                  j                  t        j                  «      }t         j                  j                  t        j
                  «      }t         j                  j                  t        j                  «      }| j                  |j                  «       j                  «       «       | j                  |j                  «       «       | j                  |j                  «       j                  «       «       | j                  |j                  «       «       | j                  |j                  «       j                  «       «       | j                  |j                  «       «       t        rzt         j                  j                  t        j                  «      }| j                  |j                  «       j                  «       «       | j                  |j                  «       «       yy)zg
        The L{keys.Key.isPublic} method returns True for public keys
        otherwise False.
        N)r   r-   rp   r   rb   rd   rf   Ú
assertTruerq   ÚisPublicÚassertFalser   rh   )rG   ÚrsaKeyÚdsaKeyÚecdsaKeyÚ
ed25519Keys        r   Útest_isPubliczKeyTests.test_isPublic×   s<  € ô
 —‘×$Ñ$¤W×%?Ñ%?Ó@ˆÜ—‘×$Ñ$¤W×%?Ñ%?Ó@ˆÜ—8‘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                 óP   — | j                  |||«       | j                  |||«       y rJ   )Ú_testPublicFromStringÚ_testPrivateFromString)rG   rq   ÚprivateÚtypeÚdatas        r   Ú_testPublicPrivateFromStringz%KeyTests._testPublicPrivateFromStringë   s&   € Ø×"Ñ" 6¨4°Ô6Ø×#Ñ# G¨T°4Õ8r   c                 ó6  — t         j                  j                  |«      }| j                  |j	                  «       «       | j                  |j                  «       |«       |j                  «       j                  «       D ]  \  }}| j                  ||   |«       Œ y rJ   )	r   r-   rp   r|   r}   rS   rˆ   r‰   Úitems)rG   rq   rˆ   r‰   Ú	publicKeyr&   Úvs          r   r…   zKeyTests._testPublicFromStringï   sy   € Ü—H‘H×'Ñ'¨Ó/ˆ	Ø�‰˜	×*Ñ*Ó,Ô-Ø×Ñ˜Ÿ™Ó)¨4Ô0Ø—N‘NÓ$×*Ñ*Ó,ò 	)‰DˆAˆqØ×Ñ˜T !™W aÕ(ñ	)r   c                 ó6  — t         j                  j                  |«      }| j                  |j	                  «       «       | j                  |j                  «       |«       |j                  «       D ](  \  }}| j                  |j                  «       |   |«       Œ* y rJ   )	r   r-   rp   r~   r}   rS   rˆ   rŒ   r‰   )rG   r‡   rˆ   r‰   Ú
privateKeyr&   rŽ   s          r   r†   zKeyTests._testPrivateFromStringö   sy   € Ü—X‘X×(Ñ(¨Ó1ˆ
Ø×Ñ˜×,Ñ,Ó.Ô/Ø×Ñ˜Ÿ™Ó*¨DÔ1Ø—J‘J“Lò 	6‰DˆAˆqØ×Ñ˜ZŸ_™_Ó.¨qÑ1°1Õ5ñ	6r   c                 óÖ  — | j                  t        j                  t        j                  dt        j                  «       | j                  t        j
                  t        j                  dt        j                  «       | j                  t        j                  j                  t        j                  d¬«      t        j                  j                  t        j                  «      «       | j                  t        j                  t        j                  dt        j                  «       t         r?| j                  t        j"                  t        j$                  dt        j&                  «       yy)zN
        Test that keys are correctly generated from OpenSSH strings.
        ÚECÚRSAó	   encrypted©Ú
passphraseÚDSAÚEd25519N)rŠ   r   r`   rf   r6   r^   rb   r/   rS   r   r-   rp   ÚprivateRSA_openssh_encryptedr_   rd   r3   r   ra   rh   r=   rM   s    r   Útest_fromOpenSSHzKeyTests.test_fromOpenSSHý   s
  € ð 	×)Ñ)Ü×'Ñ'Ü×(Ñ(ØÜ×"Ñ"ô		
ð 	×)Ñ)Ü×%Ñ%Ü×&Ñ&ØÜ�O‰Oô		
ð 	×ÑÜ�H‰H×ÑÜ×4Ñ4Àð  ó ô �H‰H×Ñ¤× :Ñ :Ó;ô		
ð 	×)Ñ)Ü×%Ñ%Ü×&Ñ&ØÜ�O‰Oô		
õ Ø×-Ñ-Ü×-Ñ-Ü×2Ñ2ØÜ×#Ñ#õ	ð r   c                 ó|   — d}| j                  t        j                  t        j                  j                  |d«       y)z.
        Tests for invalid key types.
        s   -----BEGIN FOO PRIVATE KEY-----
MIGkAgEBBDAtAi7I8j73WCX20qUM5hhHwHuFzYWYYILs2Sh8UZ+awNkARZ/Fu2LU
LLl5RtOQpbWgBwYFK4EEACKhZANiAATU17sA9P5FRwSknKcFsjjsk0+E3CeXPYX0
Tk/M0HK3PpWQWgrO8JdRHP9eFE9O/23P8BumwFt7F/AvPlCzVd35VfraFT0o4cCW
G0RqpQ+np31aKmeJshkcYALEchnU+tQ=
-----END EC PRIVATE KEY-----N)ÚassertRaisesr   ÚBadKeyErrorr-   Ú_fromString_PRIVATE_OPENSSH©rG   ÚbadKeys     r   Útest_fromOpenSSHErrorszKeyTests.test_fromOpenSSHErrors"  s2   € ð ˆð 	×ÑÜ×ÑœdŸh™h×BÑBÀFÈDõ	
r   c                 ó¦   — d}| j                  t        j                  j                  |«      t        j                  j                  |dz   «      «       y)zP
        If key strings have trailing whitespace, it should be ignored.
        ó›  -----BEGIN DSA PRIVATE KEY-----
MIIBuwIBAAKBgQDylESNuc61jq2yatCzZbenlr9llG+p9LhIpOLUbXhhHcwC6hrh
EZIdCKqTO0USLrGoP5uS9UHAUoeN62Z0KXXWTwOWGEQn/syyPzNJtnBorHpNUT9D
Qzwl1yUa53NNgEctpo4NoEFOx8PuU6iFLyvgHCjNn2MsuGuzkZm7sI9ZpQIVAJiR
9dPc08KLdpJyRxz8T74b4FQRAoGAGBc4Z5Y6R/HZi7AYM/iNOM8su6hrk8ypkBwR
a3Dbhzk97fuV3SF1SDrcQu4zF7c4CtH609N5nfZs2SUjLLGPWln83Ysb8qhh55Em
AcHXuROrHS/sDsnqu8FQp86MaudrqMExCOYyVPE7jaBWW+/JWFbKCxmgOCSdViUJ
esJpBFsCgYEA7+jtVvSt9yrwsS/YU1QGP5wRAiDYB+T5cK4HytzAqJKRdC5qS4zf
C7R0eKcDHHLMYO39aPnCwXjscisnInEhYGNblTDyPyiyNxAOXuC8x7luTmwzMbNJ
/ow0IqSj0VF72VJN9uSoPpFd4lLT0zN8v42RWja0M8ohWNf+YNJluPgCFE0PT4Vm
SUrCyZXsNh6VXwjs3gKQ
-----END DSA PRIVATE KEY-----ó   
N)rS   r   r-   rp   ©rG   ÚprivateDSADatas     r   Ú test_fromOpenSSH_with_whitespacez)KeyTests.test_fromOpenSSH_with_whitespace0  sB   € ð!ˆð 	×ÑÜ�H‰H×Ñ Ó/Ü�H‰H×Ñ °Ñ 6Ó7õ	
r   c                 ó*  — t         j                  j                  t        j                  d¬«      }| j                  |j                  «       d«       t         j                  j                  t        j                  dz   d¬«      }| j                  ||«       y)zž
        Newer versions of OpenSSH generate encrypted keys which have a longer
        IV than the older versions.  These newer keys are also loaded.
        s   testxpr•   r“   r¤   N)r   r-   rp   r   Ú privateRSA_openssh_encrypted_aesrS   rˆ   )rG   ÚkeyÚkey2s      r   Útest_fromNewerOpenSSHzKeyTests.test_fromNewerOpenSSHG  s{   € ô
 �h‰h×!Ñ!Ü×4Ñ4Àð "ó 
ˆð 	×Ñ˜Ÿ™› UÔ+Ü�x‰x×"Ñ"Ü×4Ñ4°uÑ<Èð #ó 
ˆð 	×Ñ˜˜dÕ#r   c                 ó¾  — t         j                  t         j                  ft         j                  t         j                  ft         j
                  t         j                  ft         j                  t         j                  ft         j                  t         j                  ffD ]Q  \  }}| j                  t        j                  j                  |«      t        j                  j                  |«      «       ŒS | j                  t        j                  j                  t         j                  d¬«      t        j                  j                  t         j                   d¬«      «       y)zý
        OpenSSH 6.5 introduced a newer "openssh-key-v1" private key format
        (made the default in OpenSSH 7.8).  Loading keys in this format
        produces identical results to loading the same keys in the old
        PEM-based format.
        r”   r•   N)r   rb   rc   rd   re   rf   rg   ÚprivateECDSA_openssh384ÚprivateECDSA_openssh384_newÚprivateECDSA_openssh521ÚprivateECDSA_openssh521_newrS   r   r-   rp   Ú privateRSA_openssh_encrypted_newr™   )rG   ÚoldÚnews      r   Útest_fromOpenSSH_v1_formatz#KeyTests.test_fromOpenSSH_v1_formatU  s  € ô ×'Ñ'¬×)GÑ)GÐHÜ×'Ñ'¬×)GÑ)GÐHÜ×)Ñ)¬7×+KÑ+KÐLÜ×,Ñ,¬g×.QÑ.QÐRÜ×,Ñ,¬g×.QÑ.QÐRð
ò 	Q‰HˆC�ð ×ÑœTŸX™X×0Ñ0°Ó5´t·x±x×7JÑ7JÈ3Ó7OÕPð	Qð 	×ÑÜ�H‰H×ÑÜ×8Ñ8À\ð  ó ô �H‰H×ÑÜ×4Ñ4Àð  ó õ		
r   c           	      óÀ   — d}| j                  t        j                  j                  |«      t        j                  j                  |j	                  dd«      «      «       y)zp
        Test that keys are correctly generated from OpenSSH strings with
        Windows line endings.
        r£   r¤   s   
N)rS   r   r-   rp   Úreplacer¥   s     r   Ú%test_fromOpenSSH_windows_line_endingsz.KeyTests.test_fromOpenSSH_windows_line_endingsm  sJ   € ð
!ˆð 	×ÑÜ�H‰H×Ñ Ó/Ü�H‰H×Ñ × 6Ñ 6°u¸gÓ FÓGõ	
r   c                 óâ   — t        j                  ddddgggg«      }| j                  t        j                  t        j
                  j                  dt        j                  |«      z   dz   ¬«       y)	za
        C{BadKeyError} exception is raised when public key has an unknown
        type.
        s
   public-keyó   bad-keyó   pó   2ó   {ó   })r‰   N)	r   Úpackrœ   r   r�   r-   rp   Úbase64Ú	b64encode©rG   Úsexps     r   Ú!test_fromLSHPublicUnsupportedTypez*KeyTests.test_fromLSHPublicUnsupportedTypeƒ  sd   € ô
 �z‰z˜M¨J¸¸t¸Ð+EÐFÐGÓHˆà×ÑÜ×ÑÜ�H‰H×ÑØœ×(Ñ(¨Ó.Ñ.°Ñ5ð 	õ 	
r   c                 ó®   — t        j                  ddddgggg«      }| j                  t        j                  t        j
                  j                  |«       y)zb
        C{BadKeyError} exception is raised when private key has an unknown
        type.
        s   private-keyrº   r»   r¼   N)r   r¿   rœ   r   r�   r-   rp   rÂ   s     r   Ú"test_fromLSHPrivateUnsupportedTypez+KeyTests.test_fromLSHPrivateUnsupportedType�  sJ   € ô
 �z‰z˜N¨Z¸$À¸Ð,FÐGÐHÓIˆà×ÑÜ×ÑÜ�H‰H×ÑØõ	
r   c                 ó€   — | j                  t        j                  t        j                  dt        j                  «       y)zR
        RSA public and private keys can be generated from a LSH strings.
        r“   N)rŠ   r   ri   rF   r/   rM   s    r   Útest_fromLSHRSAzKeyTests.test_fromLSHRSA�  ó.   € ð 	×)Ñ)Ü×!Ñ!Ü×"Ñ"ØÜ�O‰Oõ		
r   c                 ó€   — | j                  t        j                  t        j                  dt        j                  «       y)zH
        DSA public and private key can be generated from LSHs.
        r—   N)rŠ   r   rj   rk   r3   rM   s    r   Útest_fromLSHDSAzKeyTests.test_fromLSHDSA¨  rÉ   r   c                 ó2  — | j                  t        j                  dt        j                  «       | j                  t        j                  dt        j
                  «       | j                  t        j                  t        j                  j                  d«       y)zO
        Test that keys are correctly generated from Agent v3 strings.
        r“   r—   s$      ssh-foo               N)r†   r   rl   r/   rm   r3   rœ   r   r�   r-   rp   rM   s    r   Útest_fromAgentv3zKeyTests.test_fromAgentv3³  sc   € ð 	×#Ñ#¤G×$>Ñ$>ÀÄwÇÁÔWØ×#Ñ#¤G×$>Ñ$>ÀÄwÇÁÔWØ×ÑÜ×ÑÜ�H‰H×ÑØDõ	
r   c                 ó\  — t        j                  | j                  «      }|j                  ddj	                  «       ¬«      }| j                  t         j                  j                  |d¬«      |«       | j                  t         j                  t         j                  j                  |d¬«       y)zf
        L{keys.Key.fromString} applies Normalization Form KC to Unicode
        passphrases.
        Úopensshõ   verschlÃ¼sseltr•   õ   verschluÌˆsseltõ   unassigned ï¿¿N)	r   r-   r1   ÚtoStringÚencoderS   rp   rœ   ÚPassphraseNormalizationError©rG   rª   Úkey_datas      r   Ú*test_fromStringNormalizesUnicodePassphrasez3KeyTests.test_fromStringNormalizesUnicodePassphrase¿  s‹   € ô
 �h‰h�t—{‘{Ó#ˆØ—<‘< 	Ð6J×6QÑ6QÓ6S�<ÓTˆØ×ÑÜ�H‰H×Ñ Ð5JÐÓKÈSô	
ð
 	×ÑÜ×-Ñ-Ü�H‰H×ÑØØ*ð	 	õ 	
r   c                 ó”  — | j                  t        j                  t        j                  j                  d«       | j                  t        j                  t        j                  j                  dd«       | j                  t        j                  t        j                  j                  t
        j                  d¬«       | j                  t        j                  t        j                  j                  t        j                  | j                  «      j                  dd¬«      «       | j                  t        j                  t        j                  j                  d«       | j                  t        j                  t        j                  j                  dd	¬«       | j                  t        j                  t        j                  j                  d
d	¬«       | j                  t        j                  t        j                  j                  dd	¬«       | j                  t        j                  t        j                  j                  dd	¬«       y)zW
        keys.Key.fromString should raise BadKeyError when the key is invalid.
        r   Úbad_types   unencryptedr•   rÏ   r”   s   -----BEGIN RSA KEY-----
wA==
sÅ  -----BEGIN ENCRYPTED RSA KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: weird type

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

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

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

4Ed/a9OgJWHJsne7yOGWeWMzHYKsxuP9w1v0aYcp+puS75wvhHLiUnNwxz0KDi6n
T3YkKLBsoCWS68ApR2J9yeQ6R+EyS+UQDrO9nwqo3DB5BT3Ggt8S1wE7vjNLQD0H
g/SJnlqwsECNhh8aAx+Ag0m3ZKOZiRD5mCkcDQsZET7URSmFytDKOjhFn3u6ZFVB
sXrfpYc6TJtOQlHd/52JB6aAbjt6afSv955Z7enIi+5yEJ5y7oYQTaE5zrFMP7N5
9LbfJFlKXxEddy/DErRLxEjmC+t4svHesoJKc2jjjyNPiOoGGF3kJXea62vsjdNV
gMK5Eged3TBVIk2dv8rtJUvyFeCUtjQ1UJZIebScRR47KrbsIpCmU8I4/uHWm5hW
0mOwvdx1L/mqx/BHqVU9Dw2COhOdLbFxlFI92chkovkmNk4P48ziyVnpm7ME22sE
vfCMsyirdqB1mrL4CSM7FXONv+CgfBfeYVkYW8RfJac9U1L/O+JNn7yee414O/rS
hRYw4UdWnH6Gg6niklVKWNY0ZwUZC8zgm2iqy8YCYuneS37jC+OEKP+/s6HSKuqk
2bzcl3/TcZXNSM815hnFRpz0anuyAsvwPNRyvxG2/DacJHL1f6luV4B0o6W410yf
qXQx01DLo7nuyhJqoH3UGCyyXB+/QUs0mbG2PAEn3f5dVs31JMdbt+PrxURXXjKk
4cexpUcIpqqlfpIRe3RD0sDVbH4OXsGhi2kiTfPZu7mgyFxKopRbn1KwU1qKinfY
EU9O4PoTak/tPT+5jFNhaP+HrURoi/pU8EAUNSktl7xAkHYwkN/9Cm7DeBghgf3n
8+tyCGYDsB5utPD0/Xe9yx0Qhc/kMm4xIyQDyA937dk3mUvLC9vulnAP8I+Izim0
fZ182+D1bWwykoD0997mUHG/AUChWR01V1OLwRyPv2wUtiS8VNG76Y2aqKlgqP1P
V+IvIEqR4ERvSBVFzXNF8Y6j/sVxo8+aZw+d0L1Ns/R55deErGg3B8i/2EqGd3r+
0jps9BqFHHWW87n3VyEB3jWCMj8Vi2EJIfa/7pSaViFIQn8LiBLf+zxG5LTOToK5
xkN42fReDcqi3UNfKNGnv4dsplyTR2hyx65lsj4bRKDGLKOuB1y7iB0AGb0LtcAI
dcsVlcCeUquDXtqKvRnwfIMg+ZunyjqHBhj3qgRgbXbT6zjaSdNnih569aTg0Vup
VykzZ7+n/KVcGLmvX0NesdoI7TKbq4TnEIOynuG5Sf+2GpARO5bjcWKSZeN/Ybgk
gccf8Cqf6XWqiwlWd0B7BR3SymeHIaSymC45wmbgdstrbk7Ppa2Tp9AZku8M2Y7c
8mY9b+onK075/ypiwBm4L4GRNTFLnoNQJXx0OSl4FNRWsn6ztbD+jZhu8Seu10Jw
SEJVJ+gmTKdRLYORJKyqhDet6g7kAxs4EoJ25WsOnX5nNr00rit+NkMPA7xbJT+7
CfI51GQLw7pUPeO2WNt6yZO/YkzZrqvTj5FEwybkUyBv7L0gkqu9wjfDdUw0fVHE
xEm4DxjEoaIp8dW/JOzXQ2EF+WaSOgdYsw3Ac+rnnjnNptCdOEDGP6QBkt+oXj4P
-----END RSA PRIVATE KEY-----N)
rœ   r   r�   r-   rp   r   ri   ÚEncryptedKeyErrorr1   rÓ   rM   s    r   Útest_fromStringErrorszKeyTests.test_fromStringErrorsÒ  sÈ  € ð 	×Ñœ$×*Ñ*¬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                 óÞ  — | j                  t        j                  j                  | j                  «      t        j                  j                  t        j                  «      «       | j                  t        j                  t        j                  j                  | j                  d«       | j                  t        j                  t        j                  j                  | j                  d¬«       y)z5
        Test that fromFile works correctly.
        rÚ   Úunencryptedr•   N)
rS   r   r-   ÚfromFilerC   rp   r   rF   rœ   r�   rM   s    r   Útest_fromFilezKeyTests.test_fromFile{  s™   € ð 	×ÑÜ�H‰H×Ñ˜dŸl™lÓ+¬T¯X©X×-@Ñ-@Ä×AWÑAWÓ-Xô	
ð 	×Ñœ$×*Ñ*¬D¯H©H×,=Ñ,=¸t¿|¹|ÈZÔXØ×ÑÜ×ÑœdŸh™h×/Ñ/°·±È-ð 	õ 	
r   c                 ó¼   — t         j                  j                  dd¬«      j                  }t        j                  |«      }| j	                  |j                  |«       y)zJ
        Test that the PublicKey object is initialized correctly.
        é   é   ©r   r   N)r   r-   r.   r0   rS   )rG   Úobjrª   s      r   Ú	test_initzKeyTests.test_init‡  sD   € ô �h‰h×)Ñ)¨A°Ð)Ó3×>Ñ>ˆÜ�h‰h�s‹mˆØ×Ñ˜Ÿ™¨Õ-r   c                 ó
  — t        j                  | j                  «      }t        j                  | j                  «      }t        j                  t         j                  j                  dd¬«      j                  «      }t        j                  | j
                  «      }| j                  ||k(  «       | j                  ||k(  «       | j                  ||k(  «       | j                  |t        k(  «       | j                  |dk(  «       y)z?
        Test that Key objects are compared correctly.
        rã   rä   rå   N)	r   r-   r1   r.   r0   r4   r|   r~   Úobject©rG   Úrsa1Úrsa2Úrsa3Údsas        r   Ú
test_equalzKeyTests.test_equal�  sº   € ô �x‰x˜Ÿ™Ó$ˆÜ�x‰x˜Ÿ™Ó$ˆÜ�x‰xœŸ™×3Ñ3°a¸1Ð3Ó=×HÑHÓIˆÜ�h‰h�t—{‘{Ó#ˆØ�‰˜ ™Ô%Ø×Ñ˜ ™Ô&Ø×Ñ˜ ™Ô%Ø×Ñ˜¤™Ô(Ø×Ñ˜ ™Õ&r   c                 ó
  — t        j                  | j                  «      }t        j                  | j                  «      }t        j                  t         j                  j                  dd¬«      j                  «      }t        j                  | j
                  «      }| j                  ||k7  «       | j                  ||k7  «       | j                  ||k7  «       | j                  |t        k7  «       | j                  |dk7  «       y)zC
        Test that Key objects are not-compared correctly.
        rã   rä   rå   N)	r   r-   r1   r.   r0   r4   r~   r|   ré   rê   s        r   Útest_notEqualzKeyTests.test_notEqual�  s´   € ô �x‰x˜Ÿ™Ó$ˆÜ�x‰x˜Ÿ™Ó$ˆÜ�x‰xœŸ™×3Ñ3°a¸1Ð3Ó=×HÑHÓIˆÜ�h‰h�t—{‘{Ó#ˆØ×Ñ˜ ™Ô&Ø�‰˜ ™Ô%Ø�‰˜ ™Ô$Ø�‰˜¤™Ô'Ø�‰˜ ™Õ%r   c                 ón   — t        j                  d«      }| j                  t        |j                  «       y)zO
        The L{keys.Key.data} method raises RuntimeError for bad keys.
        r   N)r   r-   rœ   ÚRuntimeErrorr‰   rŸ   s     r   Útest_dataErrorzKeyTests.test_dataError«  s%   € ô —‘˜#“ˆØ×Ñœ,¨¯©Õ4r   c                 óø   — | j                  t        j                  | j                  «      j	                  «       d«       | j                  t        j                  | j
                  «      j	                  «       d«       y)z‚
        Test that the fingerprint method returns fingerprint in
        L{FingerprintFormats.MD5-HEX} format by default.
        ú/85:25:04:32:58:55:96:9f:57:ee:fb:a8:1a:ea:69:daú/63:15:b3:0e:e6:4f:50:de:91:48:3d:01:6b:b3:13:c1N)rS   r   r-   r1   Úfingerprintr4   rM   s    r   Útest_fingerprintdefaultz KeyTests.test_fingerprintdefault²  sZ   € ð
 	×ÑÜ�H‰H�T—[‘[Ó!×-Ñ-Ó/Ø=ô	
ð 	×ÑÜ�H‰H�T—[‘[Ó!×-Ñ-Ó/Ø=õ	
r   c                 ó\  — | j                  t        j                  | j                  «      j	                  t        j
                  j                  «      d«       | j                  t        j                  | j                  «      j	                  t        j
                  j                  «      d«       y)z‡
        fingerprint method generates key fingerprint in
        L{FingerprintFormats.MD5-HEX} format if explicitly specified.
        rö   r÷   N)rS   r   r-   r1   rø   ÚFingerprintFormatsÚMD5_HEXr4   rM   s    r   Útest_fingerprint_md5_hexz!KeyTests.test_fingerprint_md5_hexÀ  sv   € ð
 	×ÑÜ�H‰H�T—[‘[Ó!×-Ñ-¬d×.EÑ.E×.MÑ.MÓNØ=ô	
ð 	×ÑÜ�H‰H�T—[‘[Ó!×-Ñ-¬d×.EÑ.E×.MÑ.MÓNØ=õ	
r   c                 ó\  — | j                  t        j                  | j                  «      j	                  t        j
                  j                  «      d«       | j                  t        j                  | j                  «      j	                  t        j
                  j                  «      d«       y)z�
        fingerprint method generates key fingerprint in
        L{FingerprintFormats.SHA256-BASE64} format if explicitly specified.
        z,FBTCOoknq0mHy+kpfnY9tDdcAJuWtCpuQMaV3EsvbUI=z,Wz5o2YbKyxOEcJn1au/UaALSVruUzfz0vaLI1xiIGyY=N)rS   r   r-   r1   rø   rû   ÚSHA256_BASE64r4   rM   s    r   Útest_fingerprintsha256zKeyTests.test_fingerprintsha256Î  sv   € ð
 	×ÑÜ�H‰H�T—[‘[Ó!×-Ñ-¬d×.EÑ.E×.SÑ.SÓTØ:ô	
ð 	×ÑÜ�H‰H�T—[‘[Ó!×-Ñ-¬d×.EÑ.E×.SÑ.SÓTØ:õ	
r   c                 ó  — | j                  t        j                  «      5 }t        j                  | j                  «      j                  d«       ddd«       | j                  dj                  j                  d   «       y# 1 sw Y   Œ3xY w)zk
        A C{BadFingerPrintFormat} error is raised when unsupported
        formats are requested.
        zsha256-baseNz+Unsupported fingerprint format: sha256-baser   )	rœ   r   ÚBadFingerPrintFormatr-   r1   rø   rS   Ú	exceptionÚargs)rG   Úems     r   Útest_fingerprintBadFormatz"KeyTests.test_fingerprintBadFormatÜ  sl   € ð
 ×Ñœt×8Ñ8Ó9ð 	=¸RÜ�H‰H�T—[‘[Ó!×-Ñ-¨mÔ<÷	=à×ÑØ9¸2¿<¹<×;LÑ;LÈQÑ;Oõ	
÷	=ð 	=ús    /BÂB
c                 óš  — | j                  t        j                  | j                  «      j	                  «       d«       | j                  t        j                  | j                  «      j                  «       d«       | j                  t        j                  | j                  «      j	                  «       d«       | j                  t        j                  | j                  «      j                  «       d«       | j                  t        j                  | j                  «      j	                  «       d«       | j                  t        j                  | j                  «      j                  «       t        j                  d   «       t        rz| j                  t        j                  | j                  «      j	                  «       d«       | j                  t        j                  | j                  «      j                  «       d«       | j                  t        t        j                  d	«      j                  «       | j                  t        t        j                  d	«      j
                  «       | j                  t        t        j                  | «      j                  «       | j                  t        t        j                  | «      j
                  «       y	)
zS
        Test that the type method returns the correct type for an object.
        r“   ó   ssh-rsar—   ó   ssh-dssr’   r$   r˜   ó   ssh-ed25519N)rS   r   r-   r1   rˆ   ÚsshTyper4   r7   r   r6   r   r>   rœ   ró   rM   s    r   Ú	test_typezKeyTests.test_typeç  s¿  € ð 	×ÑœŸ™ $§+¡+Ó.×3Ñ3Ó5°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                 óÎ  — | j                  t        j                  | j                  «      j	                  «       g d¢«       | j                  t        j                  | j
                  «      j	                  «       dg«       | j                  t        j                  | j                  «      j	                  «       dg«       t        r>| j                  t        j                  | j                  «      j	                  «       dg«       | j                  t        t        j                  d«      j                  «       | j                  t        t        j                  | «      j                  «       y)z�
        L{keys.Key.supportedSignatureAlgorithms} returns the appropriate
        public key signature algorithms for each key type.
        )ó   rsa-sha2-512ó   rsa-sha2-256r  r	  s   ecdsa-sha2-nistp256r
  N)rS   r   r-   r1   ÚsupportedSignatureAlgorithmsr4   r7   r   r>   rœ   ró   rM   s    r   Ú!test_supportedSignatureAlgorithmsz*KeyTests.test_supportedSignatureAlgorithmsû  sú   € ð
 	×ÑÜ�H‰H�T—[‘[Ó!×>Ñ>Ó@Ú:ô	
ð 	×ÑÜ�H‰H�T—[‘[Ó!×>Ñ>Ó@À:À,ô	
ð 	×ÑÜ�H‰H�T—Z‘ZÓ ×=Ñ=Ó?Ø#Ð$ô	
õ Ø×ÑÜ—‘˜Ÿ™Ó)×FÑFÓHØÐ ôð 	×Ñœ,¬¯©°«×(SÑ(SÔTØ×Ñœ,¬¯©°«×(SÑ(SÕTr   c                 ó    — t        j                  d«      }| j                  t        j                  t        j
                  j                  |«       y)ze
        A C{BadKeyError} error is raised whey the blob has an unsupported
        key type.
        ó   ssh-badN)r   ÚNSrœ   r   r�   r-   rp   ©rG   ÚbadBlobs     r   Útest_fromBlobUnsupportedTypez%KeyTests.test_fromBlobUnsupportedType  s4   € ô
 —)‘)˜JÓ'ˆà×Ñœ$×*Ñ*¬D¯H©H×,?Ñ,?ÀÕIr   c                 óœ  — t         j                  d   t         j                  d   dœ}t        j                  d«      t        j                  |d   «      z   t        j                  |d   «      z   }t
        j                  j                  |«      }| j                  |j                  «       «       | j                  ||j                  «       «       y)zQ
        A public RSA key is correctly generated from a public key blob.
        r   r   rå   r  N)r   r/   r   r  ÚMPr   r-   rp   r|   r}   rS   r‰   )rG   ÚrsaPublicDataÚrsaBlobr   s       r   Útest_fromBlobRSAzKeyTests.test_fromBlobRSA  s¡   € ô
 —‘ Ñ%Ü—‘ Ñ%ñ
ˆô
 �I‰I�jÓ!Ü�i‰i˜ cÑ*Ó+ñ,ä�i‰i˜ cÑ*Ó+ñ,ð 	ô —‘×$Ñ$ WÓ-ˆà�‰˜Ÿ™Ó)Ô*Ø×Ñ˜¨¯©«Õ6r   c                 óH  — t         j                  d   t         j                  d   t         j                  d   t         j                  d   dœ}t        j                  d«      t        j                  |d   «      z   t        j                  |d   «      z   t        j                  |d   «      z   t        j                  |d   «      z   }t
        j                  j                  |«      }| j                  |j                  «       «       | j                  ||j                  «       «       y)zQ
        A public DSA key is correctly generated from a public key blob.
        r   r   r!   r    )r   r   r!   r    r	  N)r   r3   r   r  r  r   r-   rp   r|   r}   rS   r‰   )rG   ÚdsaPublicDataÚdsaBlobr€   s       r   Útest_fromBlobDSAzKeyTests.test_fromBlobDSA/  sé   € ô
 —‘ Ñ%Ü—‘ Ñ%Ü—‘ Ñ%Ü—‘ Ñ%ñ	
ˆô �I‰I�jÓ!Ü�i‰i˜ cÑ*Ó+ñ,ä�i‰i˜ cÑ*Ó+ñ,ô �i‰i˜ cÑ*Ó+ñ,ô �i‰i˜ cÑ*Ó+ñ	,ð 	ô —‘×$Ñ$ WÓ-ˆà�‰˜Ÿ™Ó)Ô*Ø×Ñ˜¨¯©«Õ6r   c                 ó*  — ddl m} t        j                  d   t        j                  d   t        j                  d   dœ}t	        j
                  |d   «      t	        j
                  |d   dd «      z   t	        j
                  d	|j                  |d   d
«      z   |j                  |d   d
«      z   «      z   }t        j                  j                  |«      }| j                  |j                  «       «       | j                  ||j                  «       «       y)zA
        Key.fromString generates ECDSA keys from blobs.
        r   ©Úutilsr"   r    r$   ©r"   r    r$   éøÿÿÿNó   é    )r	   r#  r   r6   r   r  Úint_to_bytesr   r-   rp   r|   r}   rS   r‰   )rG   r#  ÚecPublicDataÚecblobÚeckeys        r   Útest_fromBlobECDSAzKeyTests.test_fromBlobECDSAF  sö   € õ 	'ô ×'Ñ'¨Ñ,Ü×'Ñ'¨Ñ,Ü×+Ñ+¨GÑ4ñ
ˆô �I‰I�l 7Ñ+Ó,Ü�i‰i˜ WÑ-¨b¨cÐ2Ó3ñ4ä�i‰iØØ×$Ñ$ \°#Ñ%6¸Ó;ñ<à×$Ñ$ \°#Ñ%6¸Ó;ñ<óñð 	ô —‘×#Ñ# FÓ+ˆØ�‰˜Ÿ™Ó(Ô)Ø×Ñ˜ u§z¡z£|Õ4r   c                 óF  — dt         j                  d   i}t        j                  d«      t        j                  |d   «      z   }t        j
                  j                  |«      }| j                  |j                  «       «       | j                  ||j                  «       «       y)zU
        A public Ed25519 key is correctly generated from a public key blob.
        r%   r
  N)r   r=   r   r  r   r-   rp   r|   r}   rS   r‰   )rG   Úed25519PublicDataÚed25519Blobr‚   s       r   Útest_fromBlobEd25519zKeyTests.test_fromBlobEd25519`  s�   € ð ”×$Ñ$ SÑ)ð
Ðô —i‘i Ó/´&·)±)Ð<MÈcÑ<RÓ2SÑSˆä—X‘X×(Ñ(¨Ó5ˆ
à�‰˜
×+Ñ+Ó-Ô.Ø×ÑÐ*¨J¯O©OÓ,=Õ>r   c                 ó    — t        j                  d«      }| j                  t        j                  t        j
                  j                  |«       y)zh
        C{BadKeyError} is raised when loading a private blob with an
        unsupported type.
        r  N)r   r  rœ   r   r�   r-   Ú_fromString_PRIVATE_BLOBr  s     r   Ú#test_fromPrivateBlobUnsupportedTypez,KeyTests.test_fromPrivateBlobUnsupportedTypep  s4   € ô
 —)‘)˜JÓ'ˆà×Ñœ$×*Ñ*¬D¯H©H×,MÑ,MÈwÕWr   c                 óT  — t        j                  d«      t        j                  t        j                  d   «      z   t        j                  t        j                  d   «      z   t        j                  t        j                  d   «      z   t        j                  t        j                  d   «      z   t        j                  t        j                  d   «      z   t        j                  t        j                  d   «      z   }t
        j                  j                  |«      }| j                  |j                  «       «       | j                  t        j                  |j                  «       «       | j                  |t
        j                  j                  |j                  «       «      «       y)	zS
        A private RSA key is correctly generated from a private key blob.
        r  r   r   r   r   r   r   N)r   r  r  r   r/   r   r-   r2  r~   r}   rS   r‰   ÚprivateBlob)rG   r  r   s      r   Útest_fromPrivateBlobRSAz KeyTests.test_fromPrivateBlobRSAy  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                 ó  — t        j                  d«      t        j                  t        j                  d   «      z   t        j                  t        j                  d   «      z   t        j                  t        j                  d   «      z   t        j                  t        j                  d   «      z   t        j                  t        j                  d   «      z   }t
        j                  j                  |«      }| j                  |j                  «       «       | j                  t        j                  |j                  «       «       | j                  |t
        j                  j                  |j                  «       «      «       y)zS
        A private DSA key is correctly generated from a private key blob.
        r	  r   r   r!   r    r"   N)r   r  r  r   r3   r   r-   r2  r~   r}   rS   r‰   r5  )rG   r  r€   s      r   Útest_fromPrivateBlobDSAz KeyTests.test_fromPrivateBlobDSA�  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                 ó®  — ddl m} ddlm} |j	                  t
        j                  d   t
        j                  d   |j                  «       ¬«      }t        j                  t
        j                  d   «      t        j                  t
        j                  d   dd	 «      z   t        j                  |j                  t        «       «      j                  |j                  j                  |j                  j                   «      «      z   t        j"                  t
        j                  d
   «      z   }t$        j&                  j)                  |«      }| j+                  |j-                  «       «       | j/                  t
        j                  |j1                  «       «       | j/                  |t$        j&                  j)                  |j3                  «       «      «       y	)zR
        A private EC key is correctly generated from a private key blob.
        r   ©Úserialization)Úecr"   r    r$  r$   r%  Nr#   )Úcryptography.hazmat.primitivesr;  Ú)cryptography.hazmat.primitives.asymmetricr<  ÚEllipticCurvePublicNumbersr   r6   Ú	SECP256R1r   r  Ú
public_keyr
   Úpublic_bytesÚEncodingÚX962ÚPublicFormatÚUncompressedPointr  r   r-   r2  r~   r}   rS   r‰   r5  )rG   r;  r<  ÚpublicNumbersr*  r+  s         r   Útest_fromPrivateBlobECDSAz"KeyTests.test_fromPrivateBlobECDSA¤  s_  € õ 	AÝ@à×5Ñ5Ü×$Ñ$ SÑ)Ü×$Ñ$ SÑ)Ø—,‘,“.ð 6ó 
ˆô �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                 óD  — t        j                  d«      t        j                  t        j                  d   «      z   t        j                  t        j                  d   t        j                  d   z   «      z   }t        j
                  j                  |«      }| j                  |j                  «       «       | j                  t        j                  |j                  «       «       | j                  |t        j
                  j                  |j                  «       «      «       y)zW
        A private Ed25519 key is correctly generated from a private key blob.
        r
  r%   r&   N)r   r  r   r=   r   r-   r2  r~   r}   rS   r‰   r5  )rG   r/  r‚   s      r   Útest_fromPrivateBlobEd25519z$KeyTests.test_fromPrivateBlobEd25519Â  sÓ   € ô �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                 ó¬  — | j                  t        j                  | j                  «      j	                  «       t        j                  d«      t        j                  | j                  j                  «       j                  j                  «      z   t        j                  | j                  j                  «       j                  j                  «      z   «       y)zL
        Return the over-the-wire SSH format of the RSA public key.
        r  N)rS   r   r-   r1   r\   r   r  r  Úprivate_numbersÚpublic_numbersr   r   rM   s    r   Útest_blobRSAzKeyTests.test_blobRSAÕ  s�   € ð 	×ÑÜ�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                 ó(  — | j                   j                  «       j                  }| j                  t	        j
                  | j                   «      j                  «       t        j                  d«      t        j                  |j                  j                  «      z   t        j                  |j                  j                  «      z   t        j                  |j                  j                  «      z   t        j                  |j                  «      z   «       y)zL
        Return the over-the-wire SSH format of the DSA public key.
        r	  N)r4   rL  rM  rS   r   r-   r\   r   r  r  Úparameter_numbersr   r   r!   r    ©rG   rG  s     r   Útest_blobDSAzKeyTests.test_blobDSAà  s¿   € ð Ÿ™×3Ñ3Ó5×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                 óš  — ddl m} | j                  j                  j                  dz   dz  }| j                  t        j                  | j                  «      j                  «       t        j                  t        j                  d   «      t        j                  t        j                  d   dd «      z   t        j                  d|j                  | j                  j                  «       j                  j                   |«      z   |j                  | j                  j                  «       j                  j"                  |«      z   «      z   «       y)	zK
        Return the over-the-wire SSH format of the EC public key.
        r   r"  é   é   r$   r%  Nr&  )r	   r#  r7   r$   Úkey_sizerS   r   r-   r\   r   r  r   r6   r(  rL  rM  r"   r    )rG   r#  Ú
byteLengths      r   Útest_blobECzKeyTests.test_blobECï  sÿ   € õ 	'à—j‘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                 ó€  — ddl m} | j                  j                  «       j	                  |j
                  j                  |j                  j                  «      }| j                  t        j                  | j                  «      j                  «       t        j                  d«      t        j                  |«      z   «       y)zP
        Return the over-the-wire SSH format of the Ed25519 public key.
        r   r:  r
  N)r=  r;  r>   rA  rB  rC  ÚRawrE  rS   r   r-   r\   r   r  )rG   r;  ÚpublicBytess      r   Útest_blobEd25519zKeyTests.test_blobEd25519  s…   € õ
 	Aà—o‘o×0Ñ0Ó2×?Ñ?Ø×"Ñ"×&Ñ&¨×(BÑ(B×(FÑ(Fó
ˆð 	×ÑÜ�H‰H�T—_‘_Ó%×*Ñ*Ó,Ü�I‰I�nÓ%¬¯	©	°+Ó(>Ñ>õ	
r   c                 ón   — t        j                  d«      }| j                  t        |j                  «       y)zx
        C{RuntimeError} is raised when the blob is requested for a Key
        which is not wrapping anything.
        N)r   r-   rœ   ró   r\   rŸ   s     r   Útest_blobNoKeyzKeyTests.test_blobNoKey  s%   € ô
 —‘˜$“ˆà×Ñœ,¨¯©Õ4r   c                 ó€  — | j                   j                  «       }| j                  t        j                  | j                   «      j                  «       t        j                  d«      t        j                  |j                  j                  «      z   t        j                  |j                  j                  «      z   t        j                  |j                  «      z   t        j                  |j                  «      z   t        j                  |j                  «      z   t        j                  |j                  «      z   «       y)zn
        L{keys.Key.privateBlob} returns the SSH protocol-level format of an
        RSA private key.
        r  N)r1   rL  rS   r   r-   r5  r   r  r  rM  r   r   r   Úiqmpr   r   )rG   Únumberss     r   Útest_privateBlobRSAzKeyTests.test_privateBlobRSA  sß   € ð
 —+‘+×-Ñ-Ó/ˆØ×ÑÜ�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                 ó˜  — | j                   j                  «       j                  }| j                  t	        j
                  | j                   «      j                  «       t        j                  d«      t        j                  |j                  j                  «      z   t        j                  |j                  j                  «      z   t        j                  |j                  j                  «      z   t        j                  |j                  «      z   t        j                  | j                   j                  «       j                  «      z   «       y)zm
        L{keys.Key.privateBlob} returns the SSH protocol-level format of a DSA
        private key.
        r	  N)r4   rL  rM  rS   r   r-   r5  r   r  r  rP  r   r   r!   r    r"   rQ  s     r   Útest_privateBlobDSAzKeyTests.test_privateBlobDSA/  så   € ð
 Ÿ™×3Ñ3Ó5×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           
      ób  — ddl m} | j                  t        j                  | j
                  «      j                  «       t        j                  t        j                  d   «      t        j                  t        j                  d   dd «      z   t        j                  | j
                  j                  «       j                  |j                  j                  |j                  j                   «      «      z   t        j"                  | j
                  j%                  «       j&                  «      z   «       y)zj
        L{keys.Key.privateBlob} returns the SSH ptotocol-level format of EC
        private key.
        r   r:  r$   r%  N)r=  r;  rS   r   r-   r7   r5  r   r  r   r6   rA  rB  rC  rD  rE  rF  r  rL  Úprivate_value)rG   r;  s     r   Útest_privateBlobECzKeyTests.test_privateBlobEC@  sÚ   € õ
 	Aà×ÑÜ�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  — ddl m} | j                  j                  «       j	                  |j
                  j                  |j                  j                  «      }| j                  j                  |j
                  j                  |j                  j                  |j                  «       «      }| j                  t        j                  | j                  «      j                  «       t        j                   d«      t        j                   |«      z   t        j                   ||z   «      z   «       y)zr
        L{keys.Key.privateBlob} returns the SSH protocol-level format of an
        Ed25519 private key.
        r   r:  r
  N)r=  r;  r>   rA  rB  rC  rZ  rE  Úprivate_bytesÚPrivateFormatÚNoEncryptionrS   r   r-   r5  r   r  )rG   r;  r[  ÚprivateBytess       r   Útest_privateBlobEd25519z KeyTests.test_privateBlobEd25519T  sÞ   € õ 	Aà—o‘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                 ón   — t        j                  d«      }| j                  t        |j                  «       y)zV
        Raises L{RuntimeError} if the underlying key object does not exists.
        N)r   r-   rœ   ró   r5  rŸ   s     r   Útest_privateBlobNoKeyObjectz$KeyTests.test_privateBlobNoKeyObjectl  s'   € ô —‘˜$“ˆà×Ñœ,¨×(:Ñ(:Õ;r   c                 ó>  — t         j                  j                  t        j                  «      }| j                  |j                  d«      j                  «       t        j                  «       | j                  |j                  dd¬«      j                  d«      dkD  «       | j                  |j                  «       j                  d«      t        j                  dd «       | j                  |j                  «       j                  dd¬	«      t        j                  «       y)
zO
        L{keys.Key.toString} serializes an RSA key in OpenSSH format.
        rÏ   r”   r•   s   DEK-Infor   Nr%  ó   comment©Úcomment)r   r-   rp   r   rl   rS   rÓ   Ústriprb   r|   Úfindrq   r^   ©rG   rª   s     r   Útest_toOpenSSHRSAzKeyTests.test_toOpenSSHRSAt  sØ   € ô �h‰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                 óø  — t         j                  j                  t        j                  «      }|j                  dd¬«      }|j                  ddd¬«      }| j                  d|j                  «       d   «       | j                  d|j                  «       d   «       | j                  |t         j                  j                  |«      «       | j                  |t         j                  j                  |d¬«      «       y	)
zT
        L{keys.Key.toString} serializes an RSA key in OpenSSH's v1 format.
        rÏ   Úv1©ÚsubtyperÛ   ©r{  r–   ó#   -----BEGIN OPENSSH PRIVATE KEY-----r   r•   N)r   r-   rp   r   rb   rÓ   rS   Ú
splitlines©rG   rª   Únew_key_dataÚnew_enc_key_datas       r   Útest_toOpenSSHRSA_v1_formatz$KeyTests.test_toOpenSSHRSA_v1_format…  óÔ   € ô �h‰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                 óÖ  — t         j                  j                  t        j                  «      }| j                  |j                  d«      j                  «       t        j                  «       | j                  |j                  «       j                  dd¬«      t        j                  «       | j                  |j                  «       j                  d«      t        j                  dd «       y)zN
        L{keys.Key.toString} serializes a DSA key in OpenSSH format.
        rÏ   rq  rr  Nr%  )r   r-   rp   r   rk   rS   rÓ   rt  rd   rq   r_   rv  s     r   Útest_toOpenSSHDSAzKeyTests.test_toOpenSSHDSA—  s©   € ô �h‰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                 óø  — t         j                  j                  t        j                  «      }|j                  dd¬«      }|j                  ddd¬«      }| j                  d|j                  «       d   «       | j                  d|j                  «       d   «       | j                  |t         j                  j                  |«      «       | j                  |t         j                  j                  |d¬«      «       y	)
zS
        L{keys.Key.toString} serializes a DSA key in OpenSSH's v1 format.
        rÏ   ry  rz  rÛ   r|  r}  r   r•   N)r   r-   rp   r   rd   rÓ   rS   r~  r  s       r   Útest_toOpenSSHDSA_v1_formatz$KeyTests.test_toOpenSSHDSA_v1_format¥  rƒ  r   c                 ó\  — t         j                  j                  t        j                  «      }| j                  |j                  «       j                  dd¬«      t        j                  «       | j                  |j                  «       j                  d«      t        j                  dd «       y)zQ
        L{keys.Key.toString} serializes an ECDSA key in OpenSSH format.
        rÏ   rq  rr  Nr%  )	r   r-   rp   r   rf   rS   rq   rÓ   r`   rv  s     r   Útest_toOpenSSHECDSAzKeyTests.test_toOpenSSHECDSA·  s�   € ô �h‰h×!Ñ!¤'×">Ñ">Ó?ˆØ×ÑØ�J‰J‹L×!Ñ! )°ZÐ!Ó@Ü×'Ñ'ô	
ð 	×ÑØ�J‰J‹L×!Ñ! )Ó,¬g×.IÑ.IÈ#È2Ð.Nõ	
r   c                 óø  — t         j                  j                  t        j                  «      }|j                  dd¬«      }|j                  ddd¬«      }| j                  d|j                  «       d   «       | j                  d|j                  «       d   «       | j                  |t         j                  j                  |«      «       | j                  |t         j                  j                  |d¬«      «       y	)
zV
        L{keys.Key.toString} serializes an ECDSA key in OpenSSH's v1 format.
        rÏ   ry  rz  rÛ   r|  r}  r   r•   N)r   r-   rp   r   rf   rÓ   rS   r~  r  s       r   Útest_toOpenSSHECDSA_v1_formatz&KeyTests.test_toOpenSSHECDSA_v1_formatÄ  sÔ   € ô �h‰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                 ó8  — t         j                  j                  t        j                  «      }|j                  d«      }|j                  dd¬«      }| j                  d|j                  «       d   «       | j                  d|j                  «       d   «       | j                  |t         j                  j                  |«      «       | j                  |t         j                  j                  |d¬«      «       | j                  ||j                  dd¬«      «       y)	zX
        L{keys.Key.toString} serializes an Ed25519 key in OpenSSH's v1 format.
        rÏ   rÛ   r•   r}  r   ry  rz  N)r   r-   rp   r   rh   rÓ   rS   r~  r  s       r   Útest_toOpenSSHEd25519zKeyTests.test_toOpenSSHEd25519Ö  sí   € ô
 �h‰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ô	
ð 	×Ñ˜ s§|¡|°IÀt |Ó'LÕMr   c                 ó¤   — t         j                  j                  t        j                  «      }| j                  t        |j                  dd¬«       y)z­
        L{keys.Key.toString} refuses to serialize an Ed25519 key in
        OpenSSH's old PEM format, as no encoding of Ed25519 is defined for
        that format.
        rÏ   ÚPEMrz  N)r   r-   rp   r   rh   rœ   Ú
ValueErrorrÓ   rv  s     r   Ú test_toOpenSSHEd25519_PEM_formatz)KeyTests.test_toOpenSSHEd25519_PEM_formatê  s9   € ô �h‰h×!Ñ!¤'×"DÑ"DÓEˆØ×Ñœ* c§l¡l°IÀuÐÕMr   c                 ó6  — t         j                  j                  t        j                  «      }| j                  |j                  d«      t        j                  «       | j                  |j                  «       j                  d«      t        j                  «       y)zK
        L{keys.Key.toString} serializes an RSA key in LSH format.
        ÚlshN)
r   r-   rp   r   rb   rS   rÓ   rF   rq   ri   rv  s     r   Útest_toLSHRSAzKeyTests.test_toLSHRSAô  ód   € ô �h‰h×!Ñ!¤'×"<Ñ"<Ó=ˆØ×Ñ˜Ÿ™ eÓ,¬g×.DÑ.DÔEØ×Ñ˜Ÿ™›×.Ñ.¨uÓ5´w×7LÑ7LÕMr   c                 ó6  — t         j                  j                  t        j                  «      }| j                  |j                  d«      t        j                  «       | j                  |j                  «       j                  d«      t        j                  «       y)zJ
        L{keys.Key.toString} serializes a DSA key in LSH format.
        r“  N)
r   r-   rp   r   rd   rS   rÓ   rk   rq   rj   rv  s     r   Útest_toLSHDSAzKeyTests.test_toLSHDSAü  r•  r   c                 ó¼   — t         j                  j                  t        j                  «      }| j                  |j                  d«      t        j                  «       y)zP
        L{keys.Key.toString} serializes an RSA key in Agent v3 format.
        r[   N)r   r-   rp   r   rb   rS   rÓ   rl   rv  s     r   Útest_toAgentv3RSAzKeyTests.test_toAgentv3RSA  ó=   € ô �h‰h×!Ñ!¤'×"<Ñ"<Ó=ˆØ×Ñ˜Ÿ™ iÓ0´'×2LÑ2LÕMr   c                 ó¼   — t         j                  j                  t        j                  «      }| j                  |j                  d«      t        j                  «       y)zO
        L{keys.Key.toString} serializes a DSA key in Agent v3 format.
        r[   N)r   r-   rp   r   rd   rS   rÓ   rm   rv  s     r   Útest_toAgentv3DSAzKeyTests.test_toAgentv3DSA  rš  r   c                 ó@  — t        j                  | j                  «      }|j                  dd¬«      }| j	                  t         j                  j                  |dj                  «       ¬«      |«       | j                  t         j                  |j                  dd¬«       y)zd
        L{keys.Key.toString} applies Normalization Form KC to Unicode
        passphrases.
        rÏ   rÑ   r•   rÐ   rÒ   N)	r   r-   r1   rÓ   rS   rp   rÔ   rœ   rÕ   rÖ   s      r   Ú(test_toStringNormalizesUnicodePassphrasez1KeyTests.test_toStringNormalizesUnicodePassphrase  s†   € ô
 �h‰h�t—{‘{Ó#ˆØ—<‘< 	Ð6K�<ÓLˆØ×ÑÜ�H‰H×Ñ Ð5I×5PÑ5PÓ5RÐÓSØô	
ð 	×ÑÜ×-Ñ-Ø�L‰LØØ*ð	 	õ 	
r   c                 ó”   — | j                  t        j                  t        j                  | j                  «      j
                  d«       y)zm
        L{keys.Key.toString} raises L{keys.BadKeyError} when passed an invalid
        format type.
        rÚ   N)rœ   r   r�   r-   r1   rÓ   rM   s    r   Útest_toStringErrorszKeyTests.test_toStringErrors&  s/   € ð
 	×Ñœ$×*Ñ*¬D¯H©H°T·[±[Ó,A×,JÑ,JÈJÕWr   c           	      ób  — d}t         j                  j                  t        j                  «      }|j                  |«      }| j                  |j                  «       j                  ||«      «       | j                  |j                  ||«      «       t        j                  |«      \  }}| j                  |d«       | j                  |j                  j                  «       j                  t        j                  |«      d   |t        j                   «       t#        j$                  «       «      «       y)zR
        Signed data can be verified using RSA (with SHA-1, the default).
        ó	   some-datar  r   N)r   r-   rp   r   rb   Úsignr|   rq   Úverifyr   ÚgetNSrS   ÚassertIsNoner0   rA  r   ÚPKCS1v15r   ÚSHA1©rG   r‰   rª   Ú	signatureÚsignatureTypes        r   Útest_signAndVerifyRSAzKeyTests.test_signAndVerifyRSA-  sØ   € ð ˆÜ�h‰h×!Ñ!¤'×"<Ñ"<Ó=ˆØ—H‘H˜T“Nˆ	Ø�‰˜Ÿ
™
›×+Ñ+¨I°tÓ<Ô=Ø�‰˜Ÿ
™
 9¨dÓ3Ô4ä#)§<¡<°	Ó#:Ñ ˆ�yØ×Ñ˜¨
Ô3Ø×ÑØ�N‰N×%Ñ%Ó'×.Ñ.Ü—‘˜YÓ'¨Ñ*¨D´'×2BÑ2BÓ2DÄfÇkÁkÃmóõ	
r   c           	      óf  — d}t         j                  j                  t        j                  «      }|j                  |d¬«      }| j                  |j                  «       j                  ||«      «       | j                  |j                  ||«      «       t        j                  |«      \  }}| j                  |d«       | j                  |j                  j                  «       j                  t        j                  |«      d   |t        j                   «       t#        j$                  «       «      «       y)zE
        Signed data can be verified using RSA with SHA-256.
        r¢  r  ©r«  r   N)r   r-   rp   r   rb   r£  r|   rq   r¤  r   r¥  rS   r¦  r0   rA  r   r§  r   ÚSHA256r©  s        r   Útest_signAndVerifyRSASHA256z$KeyTests.test_signAndVerifyRSASHA256?  óÝ   € ð ˆÜ�h‰h×!Ñ!¤'×"<Ñ"<Ó=ˆØ—H‘H˜T°�HÓAˆ	Ø�‰˜Ÿ
™
›×+Ñ+¨I°tÓ<Ô=Ø�‰˜Ÿ
™
 9¨dÓ3Ô4ä#)§<¡<°	Ó#:Ñ ˆ�yØ×Ñ˜¨Ô8Ø×ÑØ�N‰N×%Ñ%Ó'×.Ñ.Ü—‘˜YÓ'¨Ñ*¨D´'×2BÑ2BÓ2DÄfÇmÁmÃoóõ	
r   c           	      óf  — d}t         j                  j                  t        j                  «      }|j                  |d¬«      }| j                  |j                  «       j                  ||«      «       | j                  |j                  ||«      «       t        j                  |«      \  }}| j                  |d«       | j                  |j                  j                  «       j                  t        j                  |«      d   |t        j                   «       t#        j$                  «       «      «       y)zE
        Signed data can be verified using RSA with SHA-512.
        r¢  r  r®  r   N)r   r-   rp   r   rb   r£  r|   rq   r¤  r   r¥  rS   r¦  r0   rA  r   r§  r   ÚSHA512r©  s        r   Útest_signAndVerifyRSASHA512z$KeyTests.test_signAndVerifyRSASHA512Q  r±  r   c                 ó$  — d}t         j                  j                  t        j                  «      }|j                  |«      }| j                  |j                  «       j                  ||«      «       | j                  |j                  ||«      «       y)z8
        Signed data can be verified using DSA.
        r¢  N)	r   r-   rp   r   rd   r£  r|   rq   r¤  ©rG   r‰   rª   rª  s       r   Útest_signAndVerifyDSAzKeyTests.test_signAndVerifyDSAc  sf   € ð ˆÜ�h‰h×!Ñ!¤'×"<Ñ"<Ó=ˆØ—H‘H˜T“Nˆ	Ø�‰˜Ÿ
™
›×+Ñ+¨I°tÓ<Ô=Ø�‰˜Ÿ
™
 9¨dÓ3Õ4r   c                 ó\  — d}t         j                  j                  t        j                  «      }|j                  |«      }t         j                  j                  t        j                  «      }|j                  |«      }t         j                  j                  t        j                  «      }|j                  |«      }| j                  |j                  «       j                  ||«      «       | j                  |j                  ||«      «       | j                  |j                  «       j                  ||«      «       | j                  |j                  ||«      «       | j                  |j                  «       j                  ||«      «       | j                  |j                  ||«      «       y)z7
        Signed data can be verified using EC.
        r¢  N)r   r-   rp   r   rf   r£  r®   r°   r|   rq   r¤  )rG   r‰   rª   rª  Úkey384Úsignature384Úkey521Úsignature521s           r   Útest_signAndVerifyECzKeyTests.test_signAndVerifyECm  s"  € ð ˆÜ�h‰h×!Ñ!¤'×">Ñ">Ó?ˆØ—H‘H˜T“Nˆ	ä—‘×$Ñ$¤W×%DÑ%DÓEˆØ—{‘{ 4Ó(ˆä—‘×$Ñ$¤W×%DÑ%DÓEˆØ—{‘{ 4Ó(ˆà�‰˜Ÿ
™
›×+Ñ+¨I°tÓ<Ô=Ø�‰˜Ÿ
™
 9¨dÓ3Ô4Ø�‰˜Ÿ™›×.Ñ.¨|¸TÓBÔCØ�‰˜Ÿ™ l°DÓ9Ô:Ø�‰˜Ÿ™›×.Ñ.¨|¸TÓBÔCØ�‰˜Ÿ™ l°DÓ9Õ:r   c                 ó$  — d}t         j                  j                  t        j                  «      }|j                  |«      }| j                  |j                  «       j                  ||«      «       | j                  |j                  ||«      «       y)z<
        Signed data can be verified using Ed25519.
        r¢  N)	r   r-   rp   r   rh   r£  r|   rq   r¤  r¶  s       r   Útest_signAndVerifyEd25519z"KeyTests.test_signAndVerifyEd25519‚  sf   € ð
 ˆÜ�h‰h×!Ñ!¤'×"DÑ"DÓEˆØ—H‘H˜T“Nˆ	Ø�‰˜Ÿ
™
›×+Ñ+¨I°tÓ<Ô=Ø�‰˜Ÿ
™
 9¨dÓ3Õ4r   c                 ól  — t         j                  j                  t        j                  «      }| j                  t         j                  |j                  dd¬«       t         j                  j                  t        j                  «      }| j                  t         j                  |j                  dd¬«       y)z·
        L{keys.Key.sign} raises L{keys.BadSignatureAlgorithmError} when
        asked to sign with a public key algorithm that doesn't make sense
        with the given key.
        s	   some datar	  r®  N)	r   r-   rp   r   rb   rœ   ÚBadSignatureAlgorithmErrorr£  rf   rv  s     r   Útest_signWithWrongAlgorithmz$KeyTests.test_signWithWrongAlgorithm�  sŒ   € ô �h‰h×!Ñ!¤'×"<Ñ"<Ó=ˆØ×ÑÜ×+Ñ+Ø�H‰HØØ$ð	 	ô 	
ô �h‰h×!Ñ!¤'×">Ñ">Ó?ˆØ×ÑÜ×+Ñ+Ø�H‰HØØ$ð	 	õ 	
r   c                 ó`  — t         j                  j                  t        j                  «      }| j                  |j                  | j                  d«      «       | j                  |j                  | j                  d«      «       | j                  |j                  | j                  d«      «       y)zC
        A known-good RSA signature verifies successfully.
        r   ó   aN)
r   r-   rp   r   r^   r|   r¤  r?   r~   r@   rv  s     r   Útest_verifyRSAzKeyTests.test_verifyRSA¢  óy   € ô �h‰h×!Ñ!¤'×";Ñ";Ó<ˆØ�‰˜Ÿ
™
 4×#4Ñ#4°cÓ:Ô;Ø×Ñ˜Ÿ™ D×$5Ñ$5°tÓ<Ô=Ø×Ñ˜Ÿ™ D×$5Ñ$5°sÓ;Õ<r   c                 ó`  — t         j                  j                  t        j                  «      }| j                  |j                  | j                  d«      «       | j                  |j                  | j                  d«      «       | j                  |j                  | j                  d«      «       y)zC
        A known-good DSA signature verifies successfully.
        r   rÄ  N)
r   r-   rp   r   r_   r|   r¤  r@   r~   r?   rv  s     r   Útest_verifyDSAzKeyTests.test_verifyDSA«  rÆ  r   c                 óº   — t         j                  j                  t        j                  «      }| j                  |j                  | j                  dd d«      «       y)z€
        Some commercial SSH servers send DSA keys as 2 20-byte numbers;
        they are still verified as valid keys.
        iØÿÿÿNr   )r   r-   rp   r   r_   r|   r¤  r@   rv  s     r   Útest_verifyDSANoPrefixzKeyTests.test_verifyDSANoPrefix´  sB   € ô
 �h‰h×!Ñ!¤'×";Ñ";Ó<ˆØ�‰˜Ÿ
™
 4×#4Ñ#4°S°TÐ#:¸CÓ@ÕAr   c                 ót   — | j                  t        t        j                  | j                  «      «      d«       y)zn
        The repr of a L{keys.Key} contains all of the RSA components for an RSA
        private key.
        a\  <RSA Private Key (2048 bits)
attr d:
	21:4c:08:66:a2:28:d5:b4:fb:8e:0f:72:1b:85:09:
	00:b9:f2:4e:37:f0:1c:57:4b:e3:51:7f:9e:23:a7:
	e4:3a:98:55:1b:ea:8b:7a:98:1e:bc:d8:ba:b1:f9:
	89:12:18:60:ac:e8:cc:0b:4e:09:5a:40:6a:ba:2f:
	99:f8:b3:24:60:84:b9:ce:69:95:9a:f9:e2:fc:1f:
	51:4d:27:15:db:2b:27:ad:ef:b4:69:ac:be:7d:10:
	eb:86:47:70:73:b4:00:87:95:15:3b:37:f9:e7:14:
	e7:80:bb:68:1e:1b:e6:dd:bb:73:63:b9:67:e6:b2:
	27:7f:cf:cf:30:9b:c2:98:fd:d9:18:36:2f:36:2e:
	f1:3d:81:7a:9f:e1:03:2d:47:db:34:51:62:39:dd:
	4f:e9:ac:a8:8b:d9:d6:f3:84:c4:17:b9:71:9d:06:
	08:42:78:4d:bb:c5:2a:f4:c3:58:cd:55:2b:ed:be:
	33:5f:04:ea:7b:e6:04:24:63:f2:2d:d7:3d:1b:6c:
	d5:9c:63:43:2f:92:88:8d:3e:6e:da:18:37:d8:0f:
	25:67:89:1d:b9:46:34:5e:c9:ce:c4:8b:ed:92:5a:
	33:07:0f:df:86:08:f9:92:e9:db:eb:38:08:36:c9:
	cd:cd:0a:01:48:5b:39:3e:7a:ca:c6:80:a9:dc:d4:
	39
attr e:
	01:00:01
attr n:
	00:d5:6a:ac:78:23:d6:d6:1b:ec:25:a1:50:c4:77:
	63:50:84:45:01:55:42:14:2a:2a:e0:d0:60:ee:d4:
	e9:a3:ad:4a:fa:39:06:5e:84:55:75:5f:00:36:bf:
	6f:aa:2a:3f:83:26:37:c1:69:2e:5b:fd:f0:f3:d2:
	7d:d6:98:cd:3a:40:78:d5:ca:a8:18:c0:11:93:24:
	09:0c:81:4c:8f:f7:9c:ed:13:16:6a:a4:04:e9:49:
	77:c3:e4:55:64:b3:79:68:9e:2c:08:eb:ac:e8:04:
	2d:21:77:05:a7:8e:ef:53:30:0d:a5:e5:bb:3d:6a:
	e2:09:36:6f:fd:34:d3:7d:6f:46:ff:87:da:a9:29:
	27:aa:ff:ad:f5:85:e6:3e:1a:b8:7a:1d:4a:b1:ea:
	c0:5a:f7:30:df:1f:c2:a4:e4:ef:3f:91:49:96:40:
	d5:19:77:2d:37:c3:5e:ec:9d:a6:3a:44:a5:c2:a4:
	29:dd:d5:ba:9c:3d:45:b3:c6:2c:18:64:d5:ba:3d:
	df:ab:7f:cd:42:ac:a7:f1:18:0b:a0:58:15:62:0b:
	a4:2a:6e:43:c3:e4:04:9f:35:a3:47:8e:46:ed:33:
	a5:65:bd:bc:3b:29:6e:02:0b:57:df:74:e8:13:b4:
	37:35:7e:83:5f:20:26:60:a6:dc:ad:8b:c6:6c:79:
	98:f7
attr p:
	00:d9:70:06:d8:e2:bc:d4:78:91:50:94:d4:c1:1b:
	89:38:6c:46:64:5a:51:a0:9a:07:3d:48:8f:03:51:
	cc:6b:12:8e:7d:1a:b1:65:e7:71:75:39:e0:32:05:
	75:8d:18:4c:af:93:b1:49:b1:66:5f:78:62:7a:d1:
	0c:ca:e6:4d:43:b3:9c:f4:6b:7d:e6:0c:98:dc:cf:
	21:62:8e:d5:2e:12:de:04:ae:d7:24:6e:83:31:a2:
	15:a2:44:3d:22:a9:62:26:22:b9:b2:ed:54:0a:9d:
	08:83:a7:07:0d:ff:19:18:8e:d8:ab:1d:da:48:9c:
	31:68:11:a1:66:6d:e3:d8:1d
attr q:
	00:fb:44:17:8b:a4:36:be:1e:37:1d:a7:f6:61:6c:
	04:c4:aa:dd:78:3e:07:8c:1e:33:02:ae:03:14:87:
	83:7a:e5:9e:7d:08:67:a8:f2:aa:bf:12:70:cf:72:
	a9:a7:c7:0b:1d:88:d5:20:fd:9c:63:ca:47:30:55:
	4e:8b:c4:cf:f4:7f:16:a4:92:12:74:a1:09:c2:c4:
	6e:9c:8c:33:ef:a5:e5:f7:e0:2b:ad:4f:5c:11:aa:
	1a:84:37:5b:fd:7a:ea:c3:cd:7c:b0:c8:e4:1f:54:
	63:b5:c7:af:df:f4:09:a7:fc:c7:25:fc:5c:e9:91:
	d7:92:c5:98:1e:56:d3:b1:23
attr u:
	00:85:4b:1b:7a:9b:12:10:37:9e:1f:ad:5e:da:fe:
	c6:96:fe:df:35:6b:b9:34:e2:16:97:92:26:09:bd:
	bd:70:20:03:a7:35:bd:2d:1b:a0:d2:07:47:2b:d4:
	de:a8:a8:07:07:1b:b8:04:20:a7:27:41:3c:6c:39:
	39:e9:41:ce:e7:17:1d:d1:4c:5c:bc:3d:d2:26:26:
	fe:6a:d6:fd:48:72:ae:46:fa:7b:c3:d3:19:60:44:
	1d:a5:13:a7:80:f5:63:29:d4:7a:5d:06:07:16:5d:
	f6:8b:3d:cb:64:3a:e2:84:5a:4d:8c:06:2d:2d:9d:
	1c:eb:83:4c:78:3d:79:54:ce>N)rS   Úreprr   r-   r1   rM   s    r   Útest_reprPrivateRSAzKeyTests.test_reprPrivateRSA¼  s.   € ð
 	×ÑÜ”—‘˜$Ÿ+™+Ó&Ó'ðF!õI	
r   c                 ó�   — | j                  t        t        j                  | j                  «      j                  «       «      d«       y)zm
        The repr of a L{keys.Key} contains all of the RSA components for an RSA
        public key.
        a\  <RSA Public Key (2048 bits)
attr e:
	01:00:01
attr n:
	00:d5:6a:ac:78:23:d6:d6:1b:ec:25:a1:50:c4:77:
	63:50:84:45:01:55:42:14:2a:2a:e0:d0:60:ee:d4:
	e9:a3:ad:4a:fa:39:06:5e:84:55:75:5f:00:36:bf:
	6f:aa:2a:3f:83:26:37:c1:69:2e:5b:fd:f0:f3:d2:
	7d:d6:98:cd:3a:40:78:d5:ca:a8:18:c0:11:93:24:
	09:0c:81:4c:8f:f7:9c:ed:13:16:6a:a4:04:e9:49:
	77:c3:e4:55:64:b3:79:68:9e:2c:08:eb:ac:e8:04:
	2d:21:77:05:a7:8e:ef:53:30:0d:a5:e5:bb:3d:6a:
	e2:09:36:6f:fd:34:d3:7d:6f:46:ff:87:da:a9:29:
	27:aa:ff:ad:f5:85:e6:3e:1a:b8:7a:1d:4a:b1:ea:
	c0:5a:f7:30:df:1f:c2:a4:e4:ef:3f:91:49:96:40:
	d5:19:77:2d:37:c3:5e:ec:9d:a6:3a:44:a5:c2:a4:
	29:dd:d5:ba:9c:3d:45:b3:c6:2c:18:64:d5:ba:3d:
	df:ab:7f:cd:42:ac:a7:f1:18:0b:a0:58:15:62:0b:
	a4:2a:6e:43:c3:e4:04:9f:35:a3:47:8e:46:ed:33:
	a5:65:bd:bc:3b:29:6e:02:0b:57:df:74:e8:13:b4:
	37:35:7e:83:5f:20:26:60:a6:dc:ad:8b:c6:6c:79:
	98:f7>N)rS   rÌ  r   r-   r1   rq   rM   s    r   Útest_reprPublicRSAzKeyTests.test_reprPublicRSA  s5   € ð
 	×ÑÜ”—‘˜$Ÿ+™+Ó&×-Ñ-Ó/Ó0ðõ	
r   c                 óÞ   — | j                  t        t        j                  | j                  «      j                  «       «       t        d«      j                  di t        j                  ¤Ž«       y)zl
        The repr of a L{keys.Key} contains all the OpenSSH format for an ECDSA
        public key.
        zÓ                <Elliptic Curve Public Key (256 bits)
                curve:
                	ecdsa-sha2-nistp256
                x:
                	{x}
                y:
                	{y}>
                Nr*   )
rS   rÌ  r   r-   r7   rq   r   Úformatr   r6   rM   s    r   Útest_reprPublicECDSAzKeyTests.test_reprPublicECDSA+  s]   € ð
 	×ÑÜ”—‘˜$Ÿ*™*Ó%×,Ñ,Ó.Ó/ð
ŒFðó
÷ ‰fñ
/ô ×-Ñ-ñ
/õ	
r   c                 óÂ   — | j                  t        t        j                  | j                  «      «       t        d«      j                  di t        j                  ¤Ž«       y)zm
        The repr of a L{keys.Key} contains all the OpenSSH format for an ECDSA
        private key.
        a                  <Elliptic Curve Private Key (256 bits)
                curve:
                	ecdsa-sha2-nistp256
                privateValue:
                	{privateValue}
                x:
                	{x}
                y:
                	{y}>
                Nr*   )	rS   rÌ  r   r-   r7   r   rÑ  r   r6   rM   s    r   Útest_reprPrivateECDSAzKeyTests.test_reprPrivateECDSA?  sT   € ð
 	×ÑÜ”—‘˜$Ÿ*™*Ó%Ó&ðŒFð
ó÷ ‰fñ/ô ×-Ñ-ñ/õ	
r   c                 ó¢   — | j                  t        t        j                  | j                  «      j                  «       «      t        d«      «       y)zn
        The repr of a L{keys.Key} contains all the OpenSSH format for an
        Ed25519 public key.
        zÜ                <Ed25519 Public Key (256 bits)
                attr a:
                	f1:16:d1:15:4a:1e:15:0e:19:5e:19:46:b5:f2:44:
                	0d:b2:52:a0:ae:2a:6b:23:13:73:45:fd:40:d9:57:
                	7b:8b>N)rS   rÌ  r   r-   r>   rq   r   rM   s    r   Útest_reprPublicEd25519zKeyTests.test_reprPublicEd25519U  s=   € ð 	×ÑÜ”—‘˜$Ÿ/™/Ó*×1Ñ1Ó3Ó4Üðóõ
	
r   c                 ó†   — | j                  t        t        j                  | j                  «      «      t        d«      «       y)zo
        The repr of a L{keys.Key} contains all the OpenSSH format for an
        Ed25519 private key.
        aŠ                  <Ed25519 Private Key (256 bits)
                attr a:
                	f1:16:d1:15:4a:1e:15:0e:19:5e:19:46:b5:f2:44:
                	0d:b2:52:a0:ae:2a:6b:23:13:73:45:fd:40:d9:57:
                	7b:8b
                attr k:
                	37:2f:25:da:8d:d4:a8:9a:78:7c:61:f0:98:01:c6:
                	f4:5e:6d:67:05:69:31:37:4c:69:0d:05:55:bb:c9:
                	44:58>N)rS   rÌ  r   r-   r>   r   rM   s    r   Útest_reprPrivateEd25519z KeyTests.test_reprPrivateEd25519g  s4   € ð 	×ÑÜ”—‘˜$Ÿ/™/Ó*Ó+Üð	óõ	
r   )ZÚ__name__Ú
__module__Ú__qualname__r	   ÚskipCryptographyr   rH   rN   rU   rn   rz   rƒ   rŠ   r…   r†   rš   r¡   r§   r¬   rµ   r¸   rÄ   rÆ   rÈ   rË   rÍ   rØ   rÝ   rá   rç   rï   rñ   rô   rù   rý   r   r  r  r  r  r  r   r,  r   r0  r3  r6  r8  rH  rJ  rN  rR  rX  r\  r^  rb  rd  rg  rm  ro  rw  r‚  r…  r‡  r‰  r‹  r�  r‘  r”  r—  r™  rœ  rž  r   r¬  r°  r´  r·  r½  r¿  rÂ  rÅ  rÈ  rÊ  rÍ  rÏ  rÒ  rÔ  rÖ  rØ  r*   r   r   r   r   *   sM  „ ØÐØˆò=,ò~ ò
DòAHòFTò04ò(9ò)ò6ò#òJ
ò
ò.$ò
ò0
ò,
ò
ò	
ò	
ò

ò
ò&g
òR

ò.ò'ò&ò5ò
ò
ò
ò	
ò@ò(Uò0Jò7ò&7ò.5ð4 ñ?ó ð?òXò
ò,
ò*Xð< ñ
ó ð
ò$	
ò
ò
ð, ñ
ó ð
ò5ò
ò"
ò"
ð( ñ
ó ð
ò.<ò
ò"
ò$
ò
ò$
ò
ð$ ñNó ðNð& ñNó ðNòNòNòNòNò
ò(Xò
ò$
ò$
ò$5ò;ð* ñ5ó ð5ò
ò*=ò=òBòN
ò`
ò>
ò(
ð, ñ
ó ð
ð" ñ
ó ñ
r   r   c                   ó*   — e Zd ZdZe€eZd„ Zd„ Zd„ Z	y)ÚPersistentRSAKeyTestsz1
    Tests for L{keys._getPersistentRSAKey}.
    Nc                 ó  — t        | j                  «       «      }|j                  d«      }t        j                  |d¬«      }| j                  |j                  «       d«       | j                  |j                  «       «       y)z‡
        L{keys._getPersistentRSAKey} will put the key in
        C{directory}/C{filename}, with the key length of C{keySize}.
        ú	mykey.pemrQ   ©ÚkeySizeN)	r   rB   Úchildr   Ú_getPersistentRSAKeyrS   rT   r|   Úexists©rG   ÚtempDirrC   rª   s       r   Útest_providedArgumentsz,PersistentRSAKeyTests.test_providedArguments†  s]   € ô
 ˜4Ÿ;™;›=Ó)ˆØ—-‘- Ó,ˆä×'Ñ'¨¸Ô>ˆØ×Ñ˜Ÿ™› TÔ*Ø�‰˜Ÿ™Ó(Õ)r   c                 óÒ  — t        | j                  «       «      }|j                  d«      }t        j                  |d¬«      }| j                  |j                  «       d«       | j                  |j                  «       «       |j                  «       }t        j                  |d¬«      }| j                  |j                  «       d«       | j                  |j                  «       |«       y)zm
        L{keys._getPersistentRSAKey} will not regenerate the key if the key
        already exists.
        rà  rQ   rá  rP   N)
r   rB   rã  r   rä  rS   rT   r|   rå  Ú
getContent)rG   rç  rC   rª   Ú
keyContents        r   Útest_noRegenerationz)PersistentRSAKeyTests.test_noRegeneration’  s®   € ô
 ˜4Ÿ;™;›=Ó)ˆØ—-‘- Ó,ˆä×'Ñ'¨¸Ô>ˆØ×Ñ˜Ÿ™› TÔ*Ø�‰˜Ÿ™Ó(Ô)Ø×'Ñ'Ó)ˆ
ô ×'Ñ'¨¸Ô>ˆØ×Ñ˜Ÿ™› TÔ*Ø×Ñ˜×+Ñ+Ó-¨zÕ:r   c                 óÔ   — t        | j                  «       «      }|j                  d«      }t        j                  |d¬«      }d|_        | j                  |j                  «       d«       y)z
        If the key generated by L{keys.getPersistentRSAKey} is set to None
        the key size should then become 0.
        rà  rQ   rá  Nr   )r   rB   rã  r   rä  r0   rS   rT   ræ  s       r   Útest_keySizeZeroz&PersistentRSAKeyTests.test_keySizeZero¥  sQ   € ô
 ˜4Ÿ;™;›=Ó)ˆØ—-‘- Ó,ˆä×'Ñ'¨¸Ô>ˆØˆŒØ×Ñ˜Ÿ™› QÕ'r   )
rÙ  rÚ  rÛ  Ú__doc__r	   rÜ  r   rè  rì  rî  r*   r   r   rÞ  rÞ  ~  s#   „ ñð ÐØˆò
*ò;ó&
(r   rÞ  )!rï  rÀ   rK   Útextwrapr   Útwisted.conch.testr   Útwisted.pythonr   Útwisted.python.filepathr   Útwisted.python.reflectr   Útwisted.trialr   r	   rÜ  Úcryptography.hazmat.backendsr
   r=  r   r>  r   Útwisted.conch.sshr   r   r   Úed25519_supportedr   r   ÚTestCaser   rÞ  r*   r   r   ú<module>rú     s’   ðñó
 Û 	Ý å &Ý $Ý ,Ý 0Ý "á˜^Ó,€ØÐØ9Ðñ Ý<Ý5ÝAç5Ñ5á'Ó)×;Ñ;Ó=ÑàÐòôQ
ˆx× Ñ ô Q
ôh21(˜H×-Ñ-õ 1(r   