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

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

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

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

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