%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /usr/lib/python3/dist-packages/twisted/conch/test/__pycache__/
Upload File :
Create Path :
Current File : //usr/lib/python3/dist-packages/twisted/conch/test/__pycache__/test_keys.cpython-312.pyc

�

Ϫ�fj��>�dZddlZddlZddlmZddlmZddlmZddl	m
Z
ddlmZddl
mZed	�Ze�d
Zer2ddlmZddlmZdd
lmZddlmZmZmZe�j7�ZndZd�ZGd�dej<�ZGd�dej<�Z y)z&
Tests for L{twisted.conch.ssh.keys}.
�N)�dedent)�keydata)�	randbytes)�FilePath)�
requireModule)�unittest�cryptographyz Cannot run without cryptography.)�default_backend)�hashes)�padding)�common�keys�sexpyFc� �tsd|_|S)Nz$ed25519 not supported on this system)�ED25519_SUPPORTED�skip)�fs �>/usr/lib/python3/dist-packages/twisted/conch/test/test_keys.py�skipWithoutEd25519r$s���7����H�c�`�eZdZe�eZd�Zd�Zd�Zd�Z	d�Z
d�Zd�Zd	�Z
d
�Zd�Zd�Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z d�Z!d�Z"d�Z#d �Z$d!�Z%d"�Z&d#�Z'd$�Z(d%�Z)d&�Z*e+d'��Z,d(�Z-d)�Z.d*�Z/d+�Z0e+d,��Z1d-�Z2d.�Z3d/�Z4e+d0��Z5d1�Z6d2�Z7d3�Z8d4�Z9e+d5��Z:d6�Z;d7�Z<d8�Z=d9�Z>d:�Z?d;�Z@d<�ZAe+d=��ZBe+d>��ZCd?�ZDd@�ZEdA�ZFdB�ZGdC�ZHdD�ZIdE�ZJdF�ZKdG�ZLdH�ZMdI�ZNe+dJ��ZOdK�ZPdL�ZQdM�ZRdN�ZSdO�ZTdP�ZUdQ�ZVdR�ZWe+dS��ZXe+dT��ZYy)U�KeyTestsNc	���tjjtjdtjdtjdtjdtjdtjd��j
|_tjjtjdtjdtjdtjd	tjd
��j
|_	tjjtjd
tjdtjdtjd
��j
|_tjjtjd
tjdtjdtjd
��j
|_tjjtjd
tjdtjdtjd
��j
|_t"rRtjj%tj&dtj&d��j
|_d|_d|_|j/t0dd��|j3�|_t7|j4d�5}|j9tj:�ddd�y#1swYyxYw)N�n�e�d�p�q�u)rrrrrr�y�g�x)r rrr!r"�privateValue�curve)r"r r#r$�a�k)r%r&sssh-rsa~Y��W�pu@�1�S�O�E�/x��G3��U��������d���,'=Qg�x�j�I�ޯb�@�rΣzM1q5�{wjKN��C��i����}�RT�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�s7ssh-dss(?��;�TFA���E@4,d�	ٮ�[�-�nQ�f���jrg�p<�secureRandomc��d|zS)N���)r"s r�<lambda>z KeyTests.setUp.<locals>.<lambda>hs
���!��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)�selfrs  r�setUpzKeyTests.setUp.s����h�h�1�1��o�o�c�"��o�o�c�"��o�o�c�"��o�o�c�"��o�o�c�"��o�o�c�"�
2�
��*�	
���h�h�1�1��o�o�c�"��o�o�c�"��o�o�c�"��o�o�c�"��o�o�c�"�2�
��*�
	
���X�X�/�/��$�$�S�)��$�$�S�)� �/�/��?��(�(��1�	0�
�
�*�	
�
����2�2��$�$�S�)��$�$�S�)� �/�/��?��(�(��1�	3�
�
�*�	
�
����2�2��$�$�S�)��$�$�S�)� �/�/��?��(�(��1�	3�
�
�*�	
�
��"�h�h�=�=��%�%�c�*�g�.A�.A�#�.F�>���j�
�O�
;�	
�� 
�	
��
	
�
�
�9�n�.C�D��{�{�}���
�$�,�,��
%�	,��
�G�G�G�*�*�+�	,�	,�	,�s�. M�M c�B�tj|j�y�N)�os�unlinkrC�rGs r�tearDownzKeyTests.tearDownms��
�	�	�$�,�,�rc���|jtj|j�j	�d�|jtj|j
�j	�d�|jtj|j�j	�d�|jtj|j�j	�d�|jtj|j�j	�d�tr>|jtj|j�j	�d�yy)zU
        The L{keys.Key.size} method returns the size of key object in bits.
        ���i�i	N)�assertEqualrr-r1�sizer4r7r9r;rr>rMs r�	test_sizezKeyTests.test_sizeps���	
������$�+�+�.�3�3�5�t�<�������$�+�+�.�3�3�5�t�<�������$�*�*�-�2�2�4�c�:�������$�-�-�0�5�5�7��=�������$�-�-�0�5�5�7��=�����T�X�X�d�o�o�6�;�;�=�s�C�rc�P	�|jtjjtj
�d�|jtjjtj�d�|jtjjtj�d�tr=|jtjjtj�d�|jtjjtj�d�|jtjjtj�d�|jtjjtj�d�|jtjjtj�d�|jtjjtj�d�|jtjjtj�d�tr=|jtjjtj �d�|jtjjtj"�d�|jtjjtj$�d�|jtjjtj&�d�|jtjjtj(�d�|jtjjtj*�d�|jtjjtj,�d�|jtjjd�d�|jtjjd�d�|jtjjd	�d
�y
)z_
        Test that the _guessStringType method guesses string types
        correctly.
        �public_openssh�private_openssh�
public_lsh�private_lsh�agentv3sssh-rsa�blobsssh-dsss	not a keyN)rSrr-�_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_agentv3rMs r�test__guessStringTypezKeyTests.test__guessStringType|s@��
	
����H�H�%�%�g�&?�&?�@�BR�	
�	
����H�H�%�%�g�&?�&?�@�BR�	
�	
����H�H�%�%�g�&A�&A�B�DT�	
��������)�)�'�*G�*G�H� �
�	
����H�H�%�%�g�&@�&@�A�CT�	
�	
����H�H�%�%�g�&D�&D�E�GX�	
�	
����H�H�%�%�g�&@�&@�A�CT�	
�	
����H�H�%�%�g�&D�&D�E�GX�	
�	
����H�H�%�%�g�&B�&B�C�EV�	
�	
����H�H�%�%�g�&F�&F�G��	
��������)�)�'�*L�*L�M�!�
�	
������2�2�7�3H�3H�I�<�X�������2�2�7�3H�3H�I�<�X�����H�H�%�%�g�&<�&<�=�}�	
�	
����H�H�%�%�g�&<�&<�=�}�	
�	
����H�H�%�%�g�&@�&@�A�9�	
�	
����H�H�%�%�g�&@�&@�A�9�	
�	
����H�H�%�%�&T�U��	
�	
����H�H�%�%�&T�U��	
�	
������2�2�<�@�$�Grc�R�tjjtj�}tjjtj
�}|j
|j�|j��tjjtj�}tjjtj�}|j
|j�|j��tjjtj�}tjjtj�}|j
|j�|j��tr�tjjtj�}tjjtj�}|j
|j�|j��yy)zn
        The L{keys.Key.public} method returns a public key for both
        public and private keys.
        N)rr-�
fromStringrrbr^rS�publicrdr_rfr`rrhra)	rG�
privateRSAKey�publicRSAKey�
privateDSAKey�publicDSAKey�privateECDSAKey�publicECDSAKey�privateEd25519Key�publicEd25519Keys	         r�test_publiczKeyTests.test_public�sh�����+�+�G�,F�,F�G�
��x�x�*�*�7�+D�+D�E������-�-�/��1D�1D�1F�G����+�+�G�,F�,F�G�
��x�x�*�*�7�+D�+D�E������-�-�/��1D�1D�1F�G��(�(�-�-�g�.J�.J�K�����,�,�W�-H�-H�I������/�/�1�>�3H�3H�3J�K�� $��� 3� 3�G�4V�4V� W��#�x�x�2�2�7�3P�3P�Q�����.�5�5�7�9I�9P�9P�9R�S�rc���tjjtj�}tjjtj
�}tjjtj�}|j|j�j��|j|j��|j|j�j��|j|j��|j|j�j��|j|j��trztjjtj�}|j|j�j��|j|j��yy)zg
        The L{keys.Key.isPublic} method returns True for public keys
        otherwise False.
        N)
rr-rprrbrdrf�
assertTruerq�isPublic�assertFalserrh)rG�rsaKey�dsaKey�ecdsaKey�
ed25519Keys     r�
test_isPubliczKeyTests.test_isPublic�s<��
���$�$�W�%?�%?�@�����$�$�W�%?�%?�@���8�8�&�&�w�'C�'C�D������
�
��0�0�2�3�������*�+�����
�
��0�0�2�3�������*�+�������)�2�2�4�5�����*�*�,�-�����,�,�W�-O�-O�P�J��O�O�J�-�-�/�8�8�:�;����Z�0�0�2�3�rc�P�|j|||�|j|||�yrJ)�_testPublicFromString�_testPrivateFromString)rGrq�private�type�datas     r�_testPublicPrivateFromStringz%KeyTests._testPublicPrivateFromString�s&���"�"�6�4��6��#�#�G�T�4�8rc�6�tjj|�}|j|j	��|j|j
�|�|j�j�D]\}}|j|||��yrJ)	rr-rpr|r}rSr�r��items)rGrqr�r��	publicKeyr&�vs       rr�zKeyTests._testPublicFromString�sy���H�H�'�'��/�	����	�*�*�,�-�������)�4�0��N�N�$�*�*�,�	)�D�A�q����T�!�W�a�(�	)rc�6�tjj|�}|j|j	��|j|j
�|�|j�D](\}}|j|j�||��*yrJ)	rr-rpr~r}rSr�r�r�)rGr�r�r��
privateKeyr&r�s       rr�zKeyTests._testPrivateFromString�sy���X�X�(�(��1�
�����,�,�.�/�������*�D�1��J�J�L�	6�D�A�q����Z�_�_�.�q�1�1�5�	6rc���|jtjtjdtj�|jtj
tjdtj�|jtjjtjd��tjjtj��|jtjtjdtj�t r?|jtj"tj$dtj&�yy)zN
        Test that keys are correctly generated from OpenSSH strings.
        �EC�RSA�	encrypted��
passphrase�DSA�Ed25519N)r�rr`rfr6r^rbr/rSrr-rp�privateRSA_openssh_encryptedr_rdr3rrarhr=rMs r�test_fromOpenSSHzKeyTests.test_fromOpenSSH�s
��	
�)�)��'�'��(�(���"�"�		
�	
�)�)��%�%��&�&���O�O�		
�	
����H�H����4�4��
 �
�
�H�H���� :� :�;�		
�	
�)�)��%�%��&�&���O�O�		
���-�-��-�-��2�2���#�#�	
�rc�|�d}|jtjtjj|d�y)z.
        Tests for invalid key types.
        s -----BEGIN FOO PRIVATE KEY-----
MIGkAgEBBDAtAi7I8j73WCX20qUM5hhHwHuFzYWYYILs2Sh8UZ+awNkARZ/Fu2LU
LLl5RtOQpbWgBwYFK4EEACKhZANiAATU17sA9P5FRwSknKcFsjjsk0+E3CeXPYX0
Tk/M0HK3PpWQWgrO8JdRHP9eFE9O/23P8BumwFt7F/AvPlCzVd35VfraFT0o4cCW
G0RqpQ+np31aKmeJshkcYALEchnU+tQ=
-----END EC PRIVATE KEY-----N)�assertRaisesr�BadKeyErrorr-�_fromString_PRIVATE_OPENSSH�rG�badKeys  r�test_fromOpenSSHErrorszKeyTests.test_fromOpenSSHErrors"s2�� ��	
������d�h�h�B�B�F�D�	
rc��d}|jtjj|�tjj|dz��y)zP
        If key strings have trailing whitespace, it should be ignored.
        �-----BEGIN DSA PRIVATE KEY-----
MIIBuwIBAAKBgQDylESNuc61jq2yatCzZbenlr9llG+p9LhIpOLUbXhhHcwC6hrh
EZIdCKqTO0USLrGoP5uS9UHAUoeN62Z0KXXWTwOWGEQn/syyPzNJtnBorHpNUT9D
Qzwl1yUa53NNgEctpo4NoEFOx8PuU6iFLyvgHCjNn2MsuGuzkZm7sI9ZpQIVAJiR
9dPc08KLdpJyRxz8T74b4FQRAoGAGBc4Z5Y6R/HZi7AYM/iNOM8su6hrk8ypkBwR
a3Dbhzk97fuV3SF1SDrcQu4zF7c4CtH609N5nfZs2SUjLLGPWln83Ysb8qhh55Em
AcHXuROrHS/sDsnqu8FQp86MaudrqMExCOYyVPE7jaBWW+/JWFbKCxmgOCSdViUJ
esJpBFsCgYEA7+jtVvSt9yrwsS/YU1QGP5wRAiDYB+T5cK4HytzAqJKRdC5qS4zf
C7R0eKcDHHLMYO39aPnCwXjscisnInEhYGNblTDyPyiyNxAOXuC8x7luTmwzMbNJ
/ow0IqSj0VF72VJN9uSoPpFd4lLT0zN8v42RWja0M8ohWNf+YNJluPgCFE0PT4Vm
SUrCyZXsNh6VXwjs3gKQ
-----END DSA PRIVATE KEY-----�
N)rSrr-rp�rG�privateDSADatas  r� test_fromOpenSSH_with_whitespacez)KeyTests.test_fromOpenSSH_with_whitespace0sB��!��	
����H�H����/��H�H����� 6�7�	
rc�*�tjjtjd��}|j|j
�d�tjjtjdzd��}|j||�y)z�
        Newer versions of OpenSSH generate encrypted keys which have a longer
        IV than the older versions.  These newer keys are also loaded.
        stestxpr�r�r�N)rr-rpr� privateRSA_openssh_encrypted_aesrSr�)rG�key�key2s   r�test_fromNewerOpenSSHzKeyTests.test_fromNewerOpenSSHGs{��
�h�h�!�!��4�4��"�
��	
�������U�+��x�x�"�"��4�4�u�<��#�
��	
����d�#rc��tjtjftjtjftj
tjftjtjftjtjffD]Q\}}|jtjj|�tjj|���S|jtjjtjd��tjjtj d���y)z�
        OpenSSH 6.5 introduced a newer "openssh-key-v1" private key format
        (made the default in OpenSSH 7.8).  Loading keys in this format
        produces identical results to loading the same keys in the old
        PEM-based format.
        r�r�N)rrbrcrdrerfrg�privateECDSA_openssh384�privateECDSA_openssh384_new�privateECDSA_openssh521�privateECDSA_openssh521_newrSrr-rp� privateRSA_openssh_encrypted_newr�)rG�old�news   r�test_fromOpenSSH_v1_formatz#KeyTests.test_fromOpenSSH_v1_formatUs���
'�
'��)G�)G�H�
�
'�
'��)G�)G�H�
�
)�
)�7�+K�+K�L�
�
,�
,�g�.Q�.Q�R�
�
,�
,�g�.Q�.Q�R�
�	Q�H�C��
���T�X�X�0�0��5�t�x�x�7J�7J�3�7O�P�	Q�	
����H�H����8�8�\�
 �
�
�H�H����4�4��
 �
�		
rc	��d}|jtjj|�tjj|j	dd���y)zp
        Test that keys are correctly generated from OpenSSH strings with
        Windows line endings.
        r�r�s
N)rSrr-rp�replacer�s  r�%test_fromOpenSSH_windows_line_endingsz.KeyTests.test_fromOpenSSH_windows_line_endingsmsJ��
!��	
����H�H����/��H�H���� 6� 6�u�g� F�G�	
rc���tjddddgggg�}|jtjtj
jdtj|�zdz��y)	za
        C{BadKeyError} exception is raised when public key has an unknown
        type.
        s
public-key�bad-key�p�2�{�})r�N)	r�packr�rr�r-rp�base64�	b64encode�rG�sexps  r�!test_fromLSHPublicUnsupportedTypez*KeyTests.test_fromLSHPublicUnsupportedType�sd��
�z�z�M�J��t��+E�F�G�H���������H�H�����(�(��.�.��5�	�	
rc��tjddddgggg�}|jtjtj
j|�y)zb
        C{BadKeyError} exception is raised when private key has an unknown
        type.
        sprivate-keyr�r�r�N)rr�r�rr�r-rpr�s  r�"test_fromLSHPrivateUnsupportedTypez+KeyTests.test_fromLSHPrivateUnsupportedType�sJ��
�z�z�N�Z�$���,F�G�H�I���������H�H����	
rc��|jtjtjdtj�y)zR
        RSA public and private keys can be generated from a LSH strings.
        r�N)r�rrirFr/rMs r�test_fromLSHRSAzKeyTests.test_fromLSHRSA��.��	
�)�)��!�!��"�"���O�O�		
rc��|jtjtjdtj�y)zH
        DSA public and private key can be generated from LSHs.
        r�N)r�rrjrkr3rMs r�test_fromLSHDSAzKeyTests.test_fromLSHDSA�r�rc�2�|jtjdtj�|jtjdtj
�|j
tjtjjd�y)zO
        Test that keys are correctly generated from Agent v3 strings.
        r�r�s$ssh-fooN)r�rrlr/rmr3r�rr�r-rprMs r�test_fromAgentv3zKeyTests.test_fromAgentv3�sc��	
�#�#�G�$>�$>��w���W��#�#�G�$>�$>��w���W��������H�H���D�	
rc�\�tj|j�}|jddj	���}|jtjj
|d��|�|jtjtjj|d��y)zf
        L{keys.Key.fromString} applies Normalization Form KC to Unicode
        passphrases.
        �openssh�verschlüsseltr��verschlüsselt�unassigned ￿N)	rr-r1�toString�encoderSrpr��PassphraseNormalizationError�rGr��key_datas   r�*test_fromStringNormalizesUnicodePassphrasez3KeyTests.test_fromStringNormalizesUnicodePassphrase�s���
�h�h�t�{�{�#���<�<�	�6J�6Q�6Q�6S�<�T������H�H����5J��K�S�	
�
	
����-�-��H�H����*�		�	
rc��|jtjtjjd�|jtjtjjdd�|jtjtjjt
jd��|jtjtjjtj|j�jdd���|jtjtjjd�|jtjtjjdd	��|jtjtjjd
d	��|jtjtjjdd	��|jtjtjjdd	��y
)zW
        keys.Key.fromString should raise BadKeyError when the key is invalid.
        r�bad_typesunencryptedr�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�rr�r-rprri�EncryptedKeyErrorr1r�rMs r�test_fromStringErrorszKeyTests.test_fromStringErrors�s���	
���$�*�*�D�H�H�,?�,?��E����$�*�*�D�H�H�,?�,?��j�Q��������H�H����!�!�%�		�	
�	
����"�"��H�H����H�H�T�[�[�!�*�*�9��*�N�	
�	
������d�h�h�1�1�3U�	
�	
�������H�H���
!�<#�C	�"	
�H	
�������H�H���
!�<#�C	�"	
�H	
�������H�H���
!�<#�C	�"	
�H	
�������H�H���
!�<#�C	�"	
rc���|jtjj|j�tjjtj��|jtjtjj|jd�|jtjtjj|jd��y)z5
        Test that fromFile works correctly.
        r��unencryptedr�N)
rSrr-�fromFilerCrprrFr�r�rMs r�
test_fromFilezKeyTests.test_fromFile{s���	
����H�H���d�l�l�+�T�X�X�-@�-@��AW�AW�-X�	
�	
���$�*�*�D�H�H�,=�,=�t�|�|�Z�X�������d�h�h�/�/����-�	�	
rc��tjjdd��j}tj|�}|j	|j|�y)zJ
        Test that the PublicKey object is initialized correctly.
        ���rrN)rr-r.r0rS)rG�objr�s   r�	test_initzKeyTests.test_init�sD���h�h�)�)�A��)�3�>�>���h�h�s�m���������-rc�
�tj|j�}tj|j�}tjtjjdd��j�}tj|j
�}|j
||k(�|j||k(�|j||k(�|j|tk(�|j|dk(�y)z?
        Test that Key objects are compared correctly.
        r�r�r�N)	rr-r1r.r0r4r|r~�object�rG�rsa1�rsa2�rsa3�dsas     r�
test_equalzKeyTests.test_equal�s����x�x����$���x�x����$���x�x����3�3�a�1�3�=�H�H�I���h�h�t�{�{�#��������%�������&�������%�������(�������&rc�
�tj|j�}tj|j�}tjtjjdd��j�}tj|j
�}|j
||k7�|j||k7�|j||k7�|j|tk7�|j|dk7�y)zC
        Test that Key objects are not-compared correctly.
        r�r�r�N)	rr-r1r.r0r4r~r|r�r�s     r�
test_notEqualzKeyTests.test_notEqual�s����x�x����$���x�x����$���x�x����3�3�a�1�3�=�H�H�I���h�h�t�{�{�#��������&�������%�������$�������'�������%rc�n�tjd�}|jt|j�y)zO
        The L{keys.Key.data} method raises RuntimeError for bad keys.
        rN)rr-r��RuntimeErrorr�r�s  r�test_dataErrorzKeyTests.test_dataError�s%�����#������,����4rc��|jtj|j�j	�d�|jtj|j
�j	�d�y)z�
        Test that the fingerprint method returns fingerprint in
        L{FingerprintFormats.MD5-HEX} format by default.
        �/85:25:04:32:58:55:96:9f:57:ee:fb:a8:1a:ea:69:da�/63:15:b3:0e:e6:4f:50:de:91:48:3d:01:6b:b3:13:c1N)rSrr-r1�fingerprintr4rMs r�test_fingerprintdefaultz KeyTests.test_fingerprintdefault�sZ��
	
����H�H�T�[�[�!�-�-�/�=�	
�	
����H�H�T�[�[�!�-�-�/�=�	
rc�\�|jtj|j�j	tj
j�d�|jtj|j�j	tj
j�d�y)z�
        fingerprint method generates key fingerprint in
        L{FingerprintFormats.MD5-HEX} format if explicitly specified.
        r�r�N)rSrr-r1r��FingerprintFormats�MD5_HEXr4rMs r�test_fingerprint_md5_hexz!KeyTests.test_fingerprint_md5_hex�sv��
	
����H�H�T�[�[�!�-�-�d�.E�.E�.M�.M�N�=�	
�	
����H�H�T�[�[�!�-�-�d�.E�.E�.M�.M�N�=�	
rc�\�|jtj|j�j	tj
j�d�|jtj|j�j	tj
j�d�y)z�
        fingerprint method generates key fingerprint in
        L{FingerprintFormats.SHA256-BASE64} format if explicitly specified.
        z,FBTCOoknq0mHy+kpfnY9tDdcAJuWtCpuQMaV3EsvbUI=z,Wz5o2YbKyxOEcJn1au/UaALSVruUzfz0vaLI1xiIGyY=N)rSrr-r1r�r��
SHA256_BASE64r4rMs r�test_fingerprintsha256zKeyTests.test_fingerprintsha256�sv��
	
����H�H�T�[�[�!�-�-�d�.E�.E�.S�.S�T�:�	
�	
����H�H�T�[�[�!�-�-�d�.E�.E�.S�.S�T�:�	
rc��|jtj�5}tj|j�jd�ddd�|j
djjd�y#1swY�3xYw)zk
        A C{BadFingerPrintFormat} error is raised when unsupported
        formats are requested.
        zsha256-baseNz+Unsupported fingerprint format: sha256-baser)	r�r�BadFingerPrintFormatr-r1r�rS�	exception�args)rG�ems  r�test_fingerprintBadFormatz"KeyTests.test_fingerprintBadFormat�sl��
�
�
�t�8�8�
9�	=�R��H�H�T�[�[�!�-�-�m�<�	=����9�2�<�<�;L�;L�Q�;O�	
�	=�	=�s�/B�B
c��|jtj|j�j	�d�|jtj|j�j�d�|jtj|j�j	�d�|jtj|j�j�d�|jtj|j�j	�d�|jtj|j�j�tjd�trz|jtj|j�j	�d�|jtj|j�j�d�|jttjd	�j�|jttjd	�j
�|jttj|�j�|jttj|�j
�y	)
zS
        Test that the type method returns the correct type for an object.
        r��ssh-rsar��ssh-dssr�r$r��ssh-ed25519N)rSrr-r1r��sshTyper4r7rr6rr>r�r�rMs r�	test_typezKeyTests.test_type�s���	
������$�+�+�.�3�3�5�u�=�������$�+�+�.�6�6�8�*�E�������$�+�+�.�3�3�5�u�=�������$�+�+�.�6�6�8�*�E�������$�*�*�-�2�2�4�d�;�����H�H�T�Z�Z� �(�(�*�G�,B�,B�7�,K�	
�����T�X�X�d�o�o�6�;�;�=�y�I����T�X�X�d�o�o�6�>�>�@�.�Q����,������(;�(;�<����,������(>�(>�?����,������(;�(;�<����,������(>�(>�?rc���|jtj|j�j	�gd��|jtj|j
�j	�dg�|jtj|j�j	�dg�tr>|jtj|j�j	�dg�|jttjd�j�|jttj|�j�y)z�
        L{keys.Key.supportedSignatureAlgorithms} returns the appropriate
        public key signature algorithms for each key type.
        )�rsa-sha2-512�rsa-sha2-256rr	secdsa-sha2-nistp256r
N)rSrr-r1�supportedSignatureAlgorithmsr4r7rr>r�r�rMs r�!test_supportedSignatureAlgorithmsz*KeyTests.test_supportedSignatureAlgorithms�s���
	
����H�H�T�[�[�!�>�>�@�:�	
�	
����H�H�T�[�[�!�>�>�@�:�,�	
�	
����H�H�T�Z�Z� �=�=�?�
#�$�	
�����������)�F�F�H�� �
�	
���,������(S�(S�T����,������(S�(S�Trc��tjd�}|jtjtj
j|�y)ze
        A C{BadKeyError} error is raised whey the blob has an unsupported
        key type.
        �ssh-badN)r
�NSr�rr�r-rp�rG�badBlobs  r�test_fromBlobUnsupportedTypez%KeyTests.test_fromBlobUnsupportedTypes4��
�)�)�J�'�����$�*�*�D�H�H�,?�,?��Irc��tjdtjdd�}tjd�tj|d�ztj|d�z}t
jj|�}|j|j��|j||j��y)zQ
        A public RSA key is correctly generated from a public key blob.
        rrr�rN)rr/r
r�MPrr-rpr|r}rSr�)rG�
rsaPublicData�rsaBlobrs    r�test_fromBlobRSAzKeyTests.test_fromBlobRSAs���
����%�����%�
�
�

�I�I�j�!��i�i�
�c�*�+�
,��i�i�
�c�*�+�
,�	����$�$�W�-��������)�*��������
�6rc�H�tjdtjdtjdtjdd�}tjd�tj|d�ztj|d�ztj|d�ztj|d�z}t
jj|�}|j|j��|j||j��y)zQ
        A public DSA key is correctly generated from a public key blob.
        rrr!r )rrr!r r	N)rr3r
rrrr-rpr|r}rSr�)rG�
dsaPublicData�dsaBlobr�s    r�test_fromBlobDSAzKeyTests.test_fromBlobDSA/s���
����%�����%�����%�����%�	
�
�
�I�I�j�!��i�i�
�c�*�+�
,��i�i�
�c�*�+�
,��i�i�
�c�*�+�
,��i�i�
�c�*�+�	
,�	����$�$�W�-��������)�*��������
�6rc�*�ddlm}tjdtjdtjdd�}t	j
|d�t	j
|ddd�zt	j
d	|j
|dd
�z|j
|dd
�z�z}tjj|�}|j|j��|j||j��y)zA
        Key.fromString generates ECDSA keys from blobs.
        r��utilsr"r r$�r"r r$���N�� )r	r#rr6r
r�int_to_bytesrr-rpr|r}rSr�)rGr#�ecPublicData�ecblob�eckeys     r�test_fromBlobECDSAzKeyTests.test_fromBlobECDSAFs���	'��'�'��,��'�'��,��+�+�G�4�
��
�I�I�l�7�+�,��i�i��W�-�b�c�2�3�
4��i�i���$�$�\�#�%6��;�<��$�$�\�#�%6��;�<��
�	����#�#�F�+��������(�)�����u�z�z�|�4rc�F�dtjdi}tjd�tj|d�z}tj
j
|�}|j|j��|j||j��y)zU
        A public Ed25519 key is correctly generated from a public key blob.
        r%r
N)rr=r
rrr-rpr|r}rSr�)rG�ed25519PublicData�ed25519Blobr�s    r�test_fromBlobEd25519zKeyTests.test_fromBlobEd25519`s���
��$�$�S�)�
���i�i��/�&�)�)�<M�c�<R�2S�S���X�X�(�(��5�
����
�+�+�-�.����*�J�O�O�,=�>rc��tjd�}|jtjtj
j|�y)zh
        C{BadKeyError} is raised when loading a private blob with an
        unsupported type.
        rN)r
rr�rr�r-�_fromString_PRIVATE_BLOBrs  r�#test_fromPrivateBlobUnsupportedTypez,KeyTests.test_fromPrivateBlobUnsupportedTypeps4��
�)�)�J�'�����$�*�*�D�H�H�,M�,M�w�Wrc�T�tjd�tjtjd�ztjtjd�ztjtjd�ztjtjd�ztjtjd�ztjtjd�z}t
jj|�}|j|j��|jtj|j��|j|t
jj|j���y)	zS
        A private RSA key is correctly generated from a private key blob.
        rrrrrrrN)
r
rrrr/rr-r2r~r}rSr��privateBlob)rGrrs   r�test_fromPrivateBlobRSAz KeyTests.test_fromPrivateBlobRSAys)��

�I�I�j�!��i�i�����,�-�
.��i�i�����,�-�
.��i�i�����,�-�
.��i�i�����,�-�	
.�
�i�i�����,�-�
.��i�i�����,�-�

.�	����2�2�7�;��������*�+�������&�+�+�-�8�����D�H�H�5�5�f�6H�6H�6J�K�	
rc��tjd�tjtjd�ztjtjd�ztjtjd�ztjtjd�ztjtjd�z}t
jj|�}|j|j��|jtj|j��|j|t
jj|j���y)zS
        A private DSA key is correctly generated from a private key blob.
        r	rrr!r r"N)
r
rrrr3rr-r2r~r}rSr�r5)rGrr�s   r�test_fromPrivateBlobDSAz KeyTests.test_fromPrivateBlobDSA�s
��

�I�I�j�!��i�i�����,�-�
.��i�i�����,�-�
.��i�i�����,�-�
.��i�i�����,�-�	
.�
�i�i�����,�-�
.�	����2�2�7�;��������*�+�������&�+�+�-�8�����D�H�H�5�5�f�6H�6H�6J�K�	
rc��ddlm}ddlm}|j	t
jdt
jd|j���}tjt
jd�tjt
jddd	�ztj|jt��j|jj|jj ��ztj"t
jd
�z}t$j&j)|�}|j+|j-��|j/t
j|j1��|j/|t$j&j)|j3���y	)zR
        A private EC key is correctly generated from a private key blob.
        r��
serialization)�ecr"r r$r$r%Nr#)�cryptography.hazmat.primitivesr;�)cryptography.hazmat.primitives.asymmetricr<�EllipticCurvePublicNumbersrr6�	SECP256R1r
r�
public_keyr
�public_bytes�Encoding�X962�PublicFormat�UncompressedPointrrr-r2r~r}rSr�r5)rGr;r<�
publicNumbersr*r+s      r�test_fromPrivateBlobECDSAz"KeyTests.test_fromPrivateBlobECDSA�s_��	A�@��5�5��$�$�S�)��$�$�S�)��,�,�.�6�
�
�
�I�I�g�,�,�W�5�6��i�i��.�.�w�7���<�=�
>��i�i��(�(��):�;�H�H�!�*�*�/�/�!�.�.�@�@���
��i�i��.�.�~�>�?�
@�	����1�1�&�9��������)�*�����/�/�����>�������� A� A�%�BS�BS�BU� V�Wrc�D�tjd�tjtjd�ztjtjdtjdz�z}tj
j
|�}|j|j��|jtj|j��|j|tj
j
|j���y)zW
        A private Ed25519 key is correctly generated from a private key blob.
        r
r%r&N)r
rrr=rr-r2r~r}rSr�r5)rGr/r�s   r�test_fromPrivateBlobEd25519z$KeyTests.test_fromPrivateBlobEd25519�s���
�I�I�n�%��i�i��+�+�C�0�1�
2��i�i��+�+�C�0�7�3F�3F�s�3K�K�L�
M�	��X�X�6�6�{�C�
�����,�,�.�/�����,�,�j�o�o�.?�@��������9�9�*�:P�:P�:R�S�	
rc��|jtj|j�j	�tjd�tj|jj�jj�ztj|jj�jj�z�y)zL
        Return the over-the-wire SSH format of the RSA public key.
        rN)rSrr-r1r\r
rr�private_numbers�public_numbersrrrMs r�test_blobRSAzKeyTests.test_blobRSA�s���	
����H�H�T�[�[�!�&�&�(��I�I�j�!��i�i����3�3�5�D�D�F�F�G�
H��i�i����3�3�5�D�D�F�F�G�
H�	
rc�(�|jj�j}|jt	j
|j�j
�tjd�tj|jj�ztj|jj�ztj|jj�ztj|j�z�y)zL
        Return the over-the-wire SSH format of the DSA public key.
        r	N)r4rLrMrSrr-r\r
rr�parameter_numbersrrr!r �rGrGs  r�test_blobDSAzKeyTests.test_blobDSA�s������3�3�5�D�D�
�����H�H�T�[�[�!�&�&�(��I�I�j�!��i�i�
�7�7�9�9�:�
;��i�i�
�7�7�9�9�:�
;��i�i�
�7�7�9�9�:�
;��i�i�
���(�	
)�	
rc��ddlm}|jjjdzdz}|jt
j|j�j�tjtjd�tjtjddd�ztjd|j|jj�jj |�z|j|jj�jj"|�z�z�y)	zK
        Return the over-the-wire SSH format of the EC public key.
        rr"��r$r%Nr&)r	r#r7r$�key_sizerSrr-r\r
rrr6r(rLrMr"r )rGr#�
byteLengths   r�test_blobECzKeyTests.test_blobEC�s���	'��j�j�&�&�/�/�!�3��9�
�����H�H�T�Z�Z� �%�%�'��I�I�g�,�,�W�5�6��i�i��.�.�w�7���<�=�
>��i�i���$�$��J�J�.�.�0�?�?�A�A�:����$�$��J�J�.�.�0�?�?�A�A�:��	��

�
	
rc��ddlm}|jj�j	|j
j|jj�}|jtj|j�j�tjd�tj|�z�y)zP
        Return the over-the-wire SSH format of the Ed25519 public key.
        rr:r
N)r=r;r>rArBrC�RawrErSrr-r\r
r)rGr;�publicBytess   r�test_blobEd25519zKeyTests.test_blobEd25519s���
	A��o�o�0�0�2�?�?��"�"�&�&�
�(B�(B�(F�(F�
��	
����H�H�T�_�_�%�*�*�,��I�I�n�%��	�	�+�(>�>�	
rc�n�tjd�}|jt|j�y)zx
        C{RuntimeError} is raised when the blob is requested for a Key
        which is not wrapping anything.
        N)rr-r�r�r\r�s  r�test_blobNoKeyzKeyTests.test_blobNoKeys%��
���$������,����4rc��|jj�}|jtj|j�j�t
jd�t
j|jj�zt
j|jj�zt
j|j�zt
j|j�zt
j|j�zt
j|j�z�y)zn
        L{keys.Key.privateBlob} returns the SSH protocol-level format of an
        RSA private key.
        rN)r1rLrSrr-r5r
rrrMrrr�iqmprr)rG�numberss  r�test_privateBlobRSAzKeyTests.test_privateBlobRSAs���
�+�+�-�-�/������H�H�T�[�[�!�-�-�/��I�I�j�!��i�i��.�.�0�0�1�
2��i�i��.�.�0�0�1�
2��i�i��	�	�"�
#��i�i����%�	
&�
�i�i��	�	�"�
#��i�i��	�	�"�

#�		
rc��|jj�j}|jt	j
|j�j
�tjd�tj|jj�ztj|jj�ztj|jj�ztj|j�ztj|jj�j�z�y)zm
        L{keys.Key.privateBlob} returns the SSH protocol-level format of a DSA
        private key.
        r	N)r4rLrMrSrr-r5r
rrrPrrr!r r"rQs  r�test_privateBlobDSAzKeyTests.test_privateBlobDSA/s���
���3�3�5�D�D�
�����H�H�T�[�[�!�-�-�/��I�I�j�!��i�i�
�7�7�9�9�:�
;��i�i�
�7�7�9�9�:�
;��i�i�
�7�7�9�9�:�
;��i�i�
���(�	
)�
�i�i����3�3�5�7�7�8�
9�	
rc
�b�ddlm}|jtj|j
�j
�tjtjd�tjtjddd�ztj|j
j�j|jj|jj ��ztj"|j
j%�j&�z�y)zj
        L{keys.Key.privateBlob} returns the SSH ptotocol-level format of EC
        private key.
        rr:r$r%N)r=r;rSrr-r7r5r
rrr6rArBrCrDrErFrrL�
private_value)rGr;s  r�test_privateBlobECzKeyTests.test_privateBlobEC@s���
	A�����H�H�T�Z�Z� �,�,�.��I�I�g�,�,�W�5�6��i�i��.�.�w�7���<�=�
>��i�i��
�
�%�%�'�4�4�!�*�*�/�/�!�.�.�@�@���
��i�i��
�
�2�2�4�B�B�C�
D�	
rc�X�ddlm}|jj�j	|j
j|jj�}|jj|j
j|jj|j��}|jtj|j�j�tj d�tj |�ztj ||z�z�y)zr
        L{keys.Key.privateBlob} returns the SSH protocol-level format of an
        Ed25519 private key.
        rr:r
N)r=r;r>rArBrCrZrE�
private_bytes�
PrivateFormat�NoEncryptionrSrr-r5r
r)rGr;r[�privateBytess    r�test_privateBlobEd25519z KeyTests.test_privateBlobEd25519Ts���	A��o�o�0�0�2�?�?��"�"�&�&�
�(B�(B�(F�(F�
�����4�4��"�"�&�&��'�'�+�+��&�&�(�
��	
����H�H�T�_�_�%�1�1�3��I�I�n�%��i�i��$�
%��i�i��{�2�3�
4�	
rc�n�tjd�}|jt|j�y)zV
        Raises L{RuntimeError} if the underlying key object does not exists.
        N)rr-r�r�r5r�s  r�test_privateBlobNoKeyObjectz$KeyTests.test_privateBlobNoKeyObjectls'�����$������,��(:�(:�;rc�>�tjjtj�}|j|j
d�j�tj�|j|j
dd��jd�dkD�|j|j�j
d�tjdd�|j|j�j
dd�	�tj�y)
zO
        L{keys.Key.toString} serializes an RSA key in OpenSSH format.
        r�r�r�sDEK-InforNr%�comment��comment)
rr-rprrlrSr��striprbr|�findrqr^�rGr�s  r�test_toOpenSSHRSAzKeyTests.test_toOpenSSHRSAts����h�h�!�!�'�"<�"<�=��������i�0�6�6�8�'�:T�:T�U�����L�L��|�L�<�A�A�+�N�QR�R�	
�	
����J�J�L�!�!�)�,�g�.G�.G���.L�	
�	
����J�J�L�!�!�)�Z�!�@��%�%�	
rc��tjjtj�}|jdd��}|jddd��}|j
d|j�d�|j
d|j�d�|j
|tjj|��|j
|tjj|d���y	)
zT
        L{keys.Key.toString} serializes an RSA key in OpenSSH's v1 format.
        r��v1��subtyper��r{r��#-----BEGIN OPENSSH PRIVATE KEY-----rr�N)rr-rprrbr�rS�
splitlines�rGr��new_key_data�new_enc_key_datas    r�test_toOpenSSHRSA_v1_formatz$KeyTests.test_toOpenSSHRSA_v1_format������h�h�!�!�'�"<�"<�=���|�|�I�t�|�<���<�<�	�4�K�<�X�����2�L�4K�4K�4M�a�4P�	
�	
���2�4D�4O�4O�4Q�RS�4T�	
�	
����d�h�h�1�1�,�?�@��������$�$�%5�+�$�N�	
rc���tjjtj�}|j|j
d�j�tj�|j|j�j
dd��tj�|j|j�j
d�tjdd�y)zN
        L{keys.Key.toString} serializes a DSA key in OpenSSH format.
        r�rqrrNr%)rr-rprrkrSr�rtrdrqr_rvs  r�test_toOpenSSHDSAzKeyTests.test_toOpenSSHDSA�s����h�h�!�!�'�"8�"8�9��������i�0�6�6�8�'�:T�:T�U�����J�J�L�!�!�)�Z�!�@��%�%�	
�	
����J�J�L�!�!�)�,�g�.G�.G���.L�	
rc��tjjtj�}|jdd��}|jddd��}|j
d|j�d�|j
d|j�d�|j
|tjj|��|j
|tjj|d���y	)
zS
        L{keys.Key.toString} serializes a DSA key in OpenSSH's v1 format.
        r�ryrzr�r|r}rr�N)rr-rprrdr�rSr~rs    r�test_toOpenSSHDSA_v1_formatz$KeyTests.test_toOpenSSHDSA_v1_format�r�rc�\�tjjtj�}|j|j
�jdd��tj�|j|j
�jd�tjdd�y)zQ
        L{keys.Key.toString} serializes an ECDSA key in OpenSSH format.
        r�rqrrNr%)	rr-rprrfrSrqr�r`rvs  r�test_toOpenSSHECDSAzKeyTests.test_toOpenSSHECDSA�s����h�h�!�!�'�">�">�?������J�J�L�!�!�)�Z�!�@��'�'�	
�	
����J�J�L�!�!�)�,�g�.I�.I�#�2�.N�	
rc��tjjtj�}|jdd��}|jddd��}|j
d|j�d�|j
d|j�d�|j
|tjj|��|j
|tjj|d���y	)
zV
        L{keys.Key.toString} serializes an ECDSA key in OpenSSH's v1 format.
        r�ryrzr�r|r}rr�N)rr-rprrfr�rSr~rs    r�test_toOpenSSHECDSA_v1_formatz&KeyTests.test_toOpenSSHECDSA_v1_format�s����h�h�!�!�'�">�">�?���|�|�I�t�|�<���<�<�	�4�K�<�X�����2�L�4K�4K�4M�a�4P�	
�	
���2�4D�4O�4O�4Q�RS�4T�	
�	
����d�h�h�1�1�,�?�@��������$�$�%5�+�$�N�	
rc�8�tjjtj�}|jd�}|jdd��}|j
d|j�d�|j
d|j�d�|j
|tjj|��|j
|tjj|d���|j
||jdd���y)	zX
        L{keys.Key.toString} serializes an Ed25519 key in OpenSSH's v1 format.
        r�r�r�r}rryrzN)rr-rprrhr�rSr~rs    r�test_toOpenSSHEd25519zKeyTests.test_toOpenSSHEd25519�s���
�h�h�!�!�'�"D�"D�E���|�|�I�.���<�<�	�k�<�J�����2�L�4K�4K�4M�a�4P�	
�	
���2�4D�4O�4O�4Q�RS�4T�	
�	
����d�h�h�1�1�,�?�@��������$�$�%5�+�$�N�	
�	
����s�|�|�I�t�|�'L�Mrc��tjjtj�}|jt|jdd��y)z�
        L{keys.Key.toString} refuses to serialize an Ed25519 key in
        OpenSSH's old PEM format, as no encoding of Ed25519 is defined for
        that format.
        r��PEMrzN)rr-rprrhr��
ValueErrorr�rvs  r� test_toOpenSSHEd25519_PEM_formatz)KeyTests.test_toOpenSSHEd25519_PEM_format�s9���h�h�!�!�'�"D�"D�E�����*�c�l�l�I�u��Mrc�6�tjjtj�}|j|j
d�tj�|j|j�j
d�tj�y)zK
        L{keys.Key.toString} serializes an RSA key in LSH format.
        �lshN)
rr-rprrbrSr�rFrqrirvs  r�
test_toLSHRSAzKeyTests.test_toLSHRSA��d���h�h�!�!�'�"<�"<�=��������e�,�g�.D�.D�E��������.�.�u�5�w�7L�7L�Mrc�6�tjjtj�}|j|j
d�tj�|j|j�j
d�tj�y)zJ
        L{keys.Key.toString} serializes a DSA key in LSH format.
        r�N)
rr-rprrdrSr�rkrqrjrvs  r�
test_toLSHDSAzKeyTests.test_toLSHDSA�r�rc��tjjtj�}|j|j
d�tj�y)zP
        L{keys.Key.toString} serializes an RSA key in Agent v3 format.
        r[N)rr-rprrbrSr�rlrvs  r�test_toAgentv3RSAzKeyTests.test_toAgentv3RSA�=���h�h�!�!�'�"<�"<�=��������i�0�'�2L�2L�Mrc��tjjtj�}|j|j
d�tj�y)zO
        L{keys.Key.toString} serializes a DSA key in Agent v3 format.
        r[N)rr-rprrdrSr�rmrvs  r�test_toAgentv3DSAzKeyTests.test_toAgentv3DSAr�rc�@�tj|j�}|jdd��}|j	tjj|dj
���|�|jtj|jdd��y)zd
        L{keys.Key.toString} applies Normalization Form KC to Unicode
        passphrases.
        r�r�r�r�r�N)	rr-r1r�rSrpr�r�r�r�s   r�(test_toStringNormalizesUnicodePassphrasez1KeyTests.test_toStringNormalizesUnicodePassphrases���
�h�h�t�{�{�#���<�<�	�6K�<�L������H�H����5I�5P�5P�5R��S��	
�	
����-�-��L�L��*�		�	
rc��|jtjtj|j�j
d�y)zm
        L{keys.Key.toString} raises L{keys.BadKeyError} when passed an invalid
        format type.
        r�N)r�rr�r-r1r�rMs r�test_toStringErrorszKeyTests.test_toStringErrors&s/��
	
���$�*�*�D�H�H�T�[�[�,A�,J�,J�J�Wrc	�b�d}tjjtj�}|j|�}|j
|j�j||��|j
|j||��tj|�\}}|j|d�|j|jj�jtj|�d|tj �t#j$���y)zR
        Signed data can be verified using RSA (with SHA-1, the default).
        �	some-datarrN)rr-rprrb�signr|rq�verifyr
�getNSrS�assertIsNoner0rAr�PKCS1v15r�SHA1�rGr�r��	signature�
signatureTypes     r�test_signAndVerifyRSAzKeyTests.test_signAndVerifyRSA-s������h�h�!�!�'�"<�"<�=���H�H�T�N�	�����
�
��+�+�I�t�<�=�����
�
�9�d�3�4�#)�<�<�	�#:� �
�y�����
�3�����N�N�%�%�'�.�.����Y�'��*�D�'�2B�2B�2D�f�k�k�m�
�	
rc	�f�d}tjjtj�}|j|d��}|j
|j�j||��|j
|j||��tj|�\}}|j|d�|j|jj�jtj|�d|tj �t#j$���y)zE
        Signed data can be verified using RSA with SHA-256.
        r�r�r�rN)rr-rprrbr�r|rqr�r
r�rSr�r0rArr�r�SHA256r�s     r�test_signAndVerifyRSASHA256z$KeyTests.test_signAndVerifyRSASHA256?�������h�h�!�!�'�"<�"<�=���H�H�T��H�A�	�����
�
��+�+�I�t�<�=�����
�
�9�d�3�4�#)�<�<�	�#:� �
�y������8�����N�N�%�%�'�.�.����Y�'��*�D�'�2B�2B�2D�f�m�m�o�
�	
rc	�f�d}tjjtj�}|j|d��}|j
|j�j||��|j
|j||��tj|�\}}|j|d�|j|jj�jtj|�d|tj �t#j$���y)zE
        Signed data can be verified using RSA with SHA-512.
        r�rr�rN)rr-rprrbr�r|rqr�r
r�rSr�r0rArr�r�SHA512r�s     r�test_signAndVerifyRSASHA512z$KeyTests.test_signAndVerifyRSASHA512Qr�rc�$�d}tjjtj�}|j|�}|j
|j�j||��|j
|j||��y)z8
        Signed data can be verified using DSA.
        r�N)	rr-rprrdr�r|rqr��rGr�r�r�s    r�test_signAndVerifyDSAzKeyTests.test_signAndVerifyDSAcsf�����h�h�!�!�'�"<�"<�=���H�H�T�N�	�����
�
��+�+�I�t�<�=�����
�
�9�d�3�4rc�\�d}tjjtj�}|j|�}tjjtj�}|j|�}tjjtj�}|j|�}|j|j�j||��|j|j||��|j|j�j||��|j|j||��|j|j�j||��|j|j||��y)z7
        Signed data can be verified using EC.
        r�N)rr-rprrfr�r�r�r|rqr�)rGr�r�r��key384�signature384�key521�signature521s        r�test_signAndVerifyECzKeyTests.test_signAndVerifyECms"�����h�h�!�!�'�">�">�?���H�H�T�N�	����$�$�W�%D�%D�E���{�{�4�(�����$�$�W�%D�%D�E���{�{�4�(������
�
��+�+�I�t�<�=�����
�
�9�d�3�4�����
�
��.�.�|�T�B�C�����
�
�l�D�9�:�����
�
��.�.�|�T�B�C�����
�
�l�D�9�:rc�$�d}tjjtj�}|j|�}|j
|j�j||��|j
|j||��y)z<
        Signed data can be verified using Ed25519.
        r�N)	rr-rprrhr�r|rqr�r�s    r�test_signAndVerifyEd25519z"KeyTests.test_signAndVerifyEd25519�sf��
���h�h�!�!�'�"D�"D�E���H�H�T�N�	�����
�
��+�+�I�t�<�=�����
�
�9�d�3�4rc�l�tjjtj�}|jtj|jdd��tjjtj�}|jtj|jdd��y)z�
        L{keys.Key.sign} raises L{keys.BadSignatureAlgorithmError} when
        asked to sign with a public key algorithm that doesn't make sense
        with the given key.
        s	some datar	r�N)	rr-rprrbr��BadSignatureAlgorithmErrorr�rfrvs  r�test_signWithWrongAlgorithmz$KeyTests.test_signWithWrongAlgorithm�s����h�h�!�!�'�"<�"<�=������+�+��H�H��$�		�	
��h�h�!�!�'�">�">�?������+�+��H�H��$�		�	
rc�`�tjjtj�}|j|j
|jd��|j|j
|jd��|j|j
|jd��y)zC
        A known-good RSA signature verifies successfully.
        r�aN)
rr-rprr^r|r�r?r~r@rvs  r�test_verifyRSAzKeyTests.test_verifyRSA��y���h�h�!�!�'�";�";�<������
�
�4�#4�#4�c�:�;�������D�$5�$5�t�<�=�������D�$5�$5�s�;�<rc�`�tjjtj�}|j|j
|jd��|j|j
|jd��|j|j
|jd��y)zC
        A known-good DSA signature verifies successfully.
        rr�N)
rr-rprr_r|r�r@r~r?rvs  r�test_verifyDSAzKeyTests.test_verifyDSA�r�rc��tjjtj�}|j|j
|jddd��y)z�
        Some commercial SSH servers send DSA keys as 2 20-byte numbers;
        they are still verified as valid keys.
        i���Nr)rr-rprr_r|r�r@rvs  r�test_verifyDSANoPrefixzKeyTests.test_verifyDSANoPrefix�sB��
�h�h�!�!�'�";�";�<������
�
�4�#4�#4�S�T�#:�C�@�Arc�t�|jttj|j��d�y)zn
        The repr of a L{keys.Key} contains all of the RSA components for an RSA
        private key.
        a\<RSA Private Key (2048 bits)
attr d:
	21:4c:08:66:a2:28:d5:b4:fb:8e:0f:72:1b:85:09:
	00:b9:f2:4e:37:f0:1c:57:4b:e3:51:7f:9e:23:a7:
	e4:3a:98:55:1b:ea:8b:7a:98:1e:bc:d8:ba:b1:f9:
	89:12:18:60:ac:e8:cc:0b:4e:09:5a:40:6a:ba:2f:
	99:f8:b3:24:60:84:b9:ce:69:95:9a:f9:e2:fc:1f:
	51:4d:27:15:db:2b:27:ad:ef:b4:69:ac:be:7d:10:
	eb:86:47:70:73:b4:00:87:95:15:3b:37:f9:e7:14:
	e7:80:bb:68:1e:1b:e6:dd:bb:73:63:b9:67:e6:b2:
	27:7f:cf:cf:30:9b:c2:98:fd:d9:18:36:2f:36:2e:
	f1:3d:81:7a:9f:e1:03:2d:47:db:34:51:62:39:dd:
	4f:e9:ac:a8:8b:d9:d6:f3:84:c4:17:b9:71:9d:06:
	08:42:78:4d:bb:c5:2a:f4:c3:58:cd:55:2b:ed:be:
	33:5f:04:ea:7b:e6:04:24:63:f2:2d:d7:3d:1b:6c:
	d5:9c:63:43:2f:92:88:8d:3e:6e:da:18:37:d8:0f:
	25:67:89:1d:b9:46:34:5e:c9:ce:c4:8b:ed:92:5a:
	33:07:0f:df:86:08:f9:92:e9:db:eb:38:08:36:c9:
	cd:cd:0a:01:48:5b:39:3e:7a:ca:c6:80:a9:dc:d4:
	39
attr e:
	01:00:01
attr n:
	00:d5:6a:ac:78:23:d6:d6:1b:ec:25:a1:50:c4:77:
	63:50:84:45:01:55:42:14:2a:2a:e0:d0:60:ee:d4:
	e9:a3:ad:4a:fa:39:06:5e:84:55:75:5f:00:36:bf:
	6f:aa:2a:3f:83:26:37:c1:69:2e:5b:fd:f0:f3:d2:
	7d:d6:98:cd:3a:40:78:d5:ca:a8:18:c0:11:93:24:
	09:0c:81:4c:8f:f7:9c:ed:13:16:6a:a4:04:e9:49:
	77:c3:e4:55:64:b3:79:68:9e:2c:08:eb:ac:e8:04:
	2d:21:77:05:a7:8e:ef:53:30:0d:a5:e5:bb:3d:6a:
	e2:09:36:6f:fd:34:d3:7d:6f:46:ff:87:da:a9:29:
	27:aa:ff:ad:f5:85:e6:3e:1a:b8:7a:1d:4a:b1:ea:
	c0:5a:f7:30:df:1f:c2:a4:e4:ef:3f:91:49:96:40:
	d5:19:77:2d:37:c3:5e:ec:9d:a6:3a:44:a5:c2:a4:
	29:dd:d5:ba:9c:3d:45:b3:c6:2c:18:64:d5:ba:3d:
	df:ab:7f:cd:42:ac:a7:f1:18:0b:a0:58:15:62:0b:
	a4:2a:6e:43:c3:e4:04:9f:35:a3:47:8e:46:ed:33:
	a5:65:bd:bc:3b:29:6e:02:0b:57:df:74:e8:13:b4:
	37:35:7e:83:5f:20:26:60:a6:dc:ad:8b:c6:6c:79:
	98:f7
attr p:
	00:d9:70:06:d8:e2:bc:d4:78:91:50:94:d4:c1:1b:
	89:38:6c:46:64:5a:51:a0:9a:07:3d:48:8f:03:51:
	cc:6b:12:8e:7d:1a:b1:65:e7:71:75:39:e0:32:05:
	75:8d:18:4c:af:93:b1:49:b1:66:5f:78:62:7a:d1:
	0c:ca:e6:4d:43:b3:9c:f4:6b:7d:e6:0c:98:dc:cf:
	21:62:8e:d5:2e:12:de:04:ae:d7:24:6e:83:31:a2:
	15:a2:44:3d:22:a9:62:26:22:b9:b2:ed:54:0a:9d:
	08:83:a7:07:0d:ff:19:18:8e:d8:ab:1d:da:48:9c:
	31:68:11:a1:66:6d:e3:d8:1d
attr q:
	00:fb:44:17:8b:a4:36:be:1e:37:1d:a7:f6:61:6c:
	04:c4:aa:dd:78:3e:07:8c:1e:33:02:ae:03:14:87:
	83:7a:e5:9e:7d:08:67:a8:f2:aa:bf:12:70:cf:72:
	a9:a7:c7:0b:1d:88:d5:20:fd:9c:63:ca:47:30:55:
	4e:8b:c4:cf:f4:7f:16:a4:92:12:74:a1:09:c2:c4:
	6e:9c:8c:33:ef:a5:e5:f7:e0:2b:ad:4f:5c:11:aa:
	1a:84:37:5b:fd:7a:ea:c3:cd:7c:b0:c8:e4:1f:54:
	63:b5:c7:af:df:f4:09:a7:fc:c7:25:fc:5c:e9:91:
	d7:92:c5:98:1e:56:d3:b1:23
attr u:
	00:85:4b:1b:7a:9b:12:10:37:9e:1f:ad:5e:da:fe:
	c6:96:fe:df:35:6b:b9:34:e2:16:97:92:26:09:bd:
	bd:70:20:03:a7:35:bd:2d:1b:a0:d2:07:47:2b:d4:
	de:a8:a8:07:07:1b:b8:04:20:a7:27:41:3c:6c:39:
	39:e9:41:ce:e7:17:1d:d1:4c:5c:bc:3d:d2:26:26:
	fe:6a:d6:fd:48:72:ae:46:fa:7b:c3:d3:19:60:44:
	1d:a5:13:a7:80:f5:63:29:d4:7a:5d:06:07:16:5d:
	f6:8b:3d:cb:64:3a:e2:84:5a:4d:8c:06:2d:2d:9d:
	1c:eb:83:4c:78:3d:79:54:ce>N)rS�reprrr-r1rMs r�test_reprPrivateRSAzKeyTests.test_reprPrivateRSA�s.��
	
�������$�+�+�&�'�F
!�I	
rc��|jttj|j�j��d�y)zm
        The repr of a L{keys.Key} contains all of the RSA components for an RSA
        public key.
        a\<RSA Public Key (2048 bits)
attr e:
	01:00:01
attr n:
	00:d5:6a:ac:78:23:d6:d6:1b:ec:25:a1:50:c4:77:
	63:50:84:45:01:55:42:14:2a:2a:e0:d0:60:ee:d4:
	e9:a3:ad:4a:fa:39:06:5e:84:55:75:5f:00:36:bf:
	6f:aa:2a:3f:83:26:37:c1:69:2e:5b:fd:f0:f3:d2:
	7d:d6:98:cd:3a:40:78:d5:ca:a8:18:c0:11:93:24:
	09:0c:81:4c:8f:f7:9c:ed:13:16:6a:a4:04:e9:49:
	77:c3:e4:55:64:b3:79:68:9e:2c:08:eb:ac:e8:04:
	2d:21:77:05:a7:8e:ef:53:30:0d:a5:e5:bb:3d:6a:
	e2:09:36:6f:fd:34:d3:7d:6f:46:ff:87:da:a9:29:
	27:aa:ff:ad:f5:85:e6:3e:1a:b8:7a:1d:4a:b1:ea:
	c0:5a:f7:30:df:1f:c2:a4:e4:ef:3f:91:49:96:40:
	d5:19:77:2d:37:c3:5e:ec:9d:a6:3a:44:a5:c2:a4:
	29:dd:d5:ba:9c:3d:45:b3:c6:2c:18:64:d5:ba:3d:
	df:ab:7f:cd:42:ac:a7:f1:18:0b:a0:58:15:62:0b:
	a4:2a:6e:43:c3:e4:04:9f:35:a3:47:8e:46:ed:33:
	a5:65:bd:bc:3b:29:6e:02:0b:57:df:74:e8:13:b4:
	37:35:7e:83:5f:20:26:60:a6:dc:ad:8b:c6:6c:79:
	98:f7>N)rSr�rr-r1rqrMs r�test_reprPublicRSAzKeyTests.test_reprPublicRSAs5��
	
�������$�+�+�&�-�-�/�0�
�	
rc���|jttj|j�j��t
d�jditj���y)zl
        The repr of a L{keys.Key} contains all the OpenSSH format for an ECDSA
        public key.
        z�                <Elliptic Curve Public Key (256 bits)
                curve:
                	ecdsa-sha2-nistp256
                x:
                	{x}
                y:
                	{y}>
                Nr*)
rSr�rr-r7rqr�formatrr6rMs r�test_reprPublicECDSAzKeyTests.test_reprPublicECDSA+s]��
	
�������$�*�*�%�,�,�.�/�

�F��

��f�

/��-�-�

/�
	
rc���|jttj|j��td�jditj���y)zm
        The repr of a L{keys.Key} contains all the OpenSSH format for an ECDSA
        private key.
        a                <Elliptic Curve Private Key (256 bits)
                curve:
                	ecdsa-sha2-nistp256
                privateValue:
                	{privateValue}
                x:
                	{x}
                y:
                	{y}>
                Nr*)	rSr�rr-r7rr�rr6rMs r�test_reprPrivateECDSAzKeyTests.test_reprPrivateECDSA?sT��
	
�������$�*�*�%�&�
�F�
�
��f�
/��-�-�
/�	
rc��|jttj|j�j��t
d��y)zn
        The repr of a L{keys.Key} contains all the OpenSSH format for an
        Ed25519 public key.
        z�                <Ed25519 Public Key (256 bits)
                attr a:
                	f1:16:d1:15:4a:1e:15:0e:19:5e:19:46:b5:f2:44:
                	0d:b2:52:a0:ae:2a:6b:23:13:73:45:fd:40:d9:57:
                	7b:8b>N)rSr�rr-r>rqrrMs r�test_reprPublicEd25519zKeyTests.test_reprPublicEd25519Us=��	
�������$�/�/�*�1�1�3�4���
�
	
rc��|jttj|j��td��y)zo
        The repr of a L{keys.Key} contains all the OpenSSH format for an
        Ed25519 private key.
        a�                <Ed25519 Private Key (256 bits)
                attr a:
                	f1:16:d1:15:4a:1e:15:0e:19:5e:19:46:b5:f2:44:
                	0d:b2:52:a0:ae:2a:6b:23:13:73:45:fd:40:d9:57:
                	7b:8b
                attr k:
                	37:2f:25:da:8d:d4:a8:9a:78:7c:61:f0:98:01:c6:
                	f4:5e:6d:67:05:69:31:37:4c:69:0d:05:55:bb:c9:
                	44:58>N)rSr�rr-r>rrMs r�test_reprPrivateEd25519z KeyTests.test_reprPrivateEd25519gs4��	
�������$�/�/�*�+��	�
�	
r)Z�__name__�
__module__�__qualname__r	�skipCryptographyrrHrNrUrnrzr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrrr r,rr0r3r6r8rHrJrNrRrXr\r^rbrdrgrmrorwr�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*rrrr*sM������=,�~ �
D�AH�FT�04�(9�)�6�#�J
�
�.$�
�0
�,
�
�	
�	
�

�
�&g
�R

�.�'�&�5�
�
�
�	
�@�(U�0J�7�&7�.5�4�
?��
?�X�
�,
�*X�<�
��
�$	
�

�
�,�

��

�5�
�"
�"
�(�
��
�.<�
�"
�$
�
�$
�
�$�N��N�&�N��N�N�N�N�N�
�(X�
�$
�$
�$5�;�*�5��5�
�*=�=�B�N
�`
�>
�(
�,�
��
�"�
��
rrc�*�eZdZdZe�eZd�Zd�Zd�Z	y)�PersistentRSAKeyTestsz1
    Tests for L{keys._getPersistentRSAKey}.
    Nc��t|j��}|jd�}tj|d��}|j|j
�d�|j|j��y)z�
        L{keys._getPersistentRSAKey} will put the key in
        C{directory}/C{filename}, with the key length of C{keySize}.
        �	mykey.pemrQ��keySizeN)	rrB�childr�_getPersistentRSAKeyrSrTr|�exists�rG�tempDirrCr�s    r�test_providedArgumentsz,PersistentRSAKeyTests.test_providedArguments�s]��
�4�;�;�=�)���-�-��,���'�'���>���������T�*�������(�)rc���t|j��}|jd�}tj|d��}|j|j
�d�|j|j��|j�}tj|d��}|j|j
�d�|j|j�|�y)zm
        L{keys._getPersistentRSAKey} will not regenerate the key if the key
        already exists.
        r�rQr�rPN)
rrBr�rr�rSrTr|r��
getContent)rGr�rCr��
keyContents     r�test_noRegenerationz)PersistentRSAKeyTests.test_noRegeneration�s���
�4�;�;�=�)���-�-��,���'�'���>���������T�*�������(�)��'�'�)�
��'�'���>���������T�*�����+�+�-�z�:rc���t|j��}|jd�}tj|d��}d|_|j
|j�d�y)z
        If the key generated by L{keys.getPersistentRSAKey} is set to None
        the key size should then become 0.
        r�rQr�Nr)rrBr�rr�r0rSrTr�s    r�test_keySizeZeroz&PersistentRSAKeyTests.test_keySizeZero�sQ��
�4�;�;�=�)���-�-��,���'�'���>������������Q�'r)
r�r�r��__doc__r	r�rr�r�r�r*rrr�r�~s#�������
*�;�&
(rr�)!r�r�rK�textwrapr�twisted.conch.testr�twisted.pythonr�twisted.python.filepathr�twisted.python.reflectr�
twisted.trialrr	r��cryptography.hazmat.backendsr
r=rr>r�twisted.conch.sshr
rr�ed25519_supportedrr�TestCaserr�r*rr�<module>r�s����
�	��&�$�,�0�"��^�,����9���<�5�A�5�5�'�)�;�;�=����
�Q
�x� � �Q
�h21(�H�-�-�1(r

Zerion Mini Shell 1.0