HEX
Server: Apache
System: Linux scp1.abinfocom.com 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User: confeduphaar (1010)
PHP: 8.1.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //usr/lib/python3/dist-packages/twisted/conch/test/__pycache__/test_keys.cpython-38.pyc
U


W[���@s�dZddlmZmZddlmZed�Zedkr4dZed�ZerXerXddl	m
Z
mZmZddl
Z
ddlZdd	lmZdd
lmZddlmZddlmZdd
lmZGdd�dej�ZGdd�dej�ZdS)z&
Tests for L{twisted.conch.ssh.keys}.
�)�absolute_import�division)�
requireModule�cryptographyNz Cannot run without cryptography.�pyasn1)�keys�common�sexpy)�keydata)�	randbytes)�unittest)�long)�FilePathc@s$eZdZedkreZedkr dZdd�Zdd�Zdd�Z	d	d
�Z
dd�Zd
d�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�Zd5d6�Z d7d8�Z!d9d:�Z"d;d<�Z#d=d>�Z$d?d@�Z%dAdB�Z&dCdD�Z'dEdF�Z(dGdH�Z)dIdJ�Z*dKdL�Z+dMdN�Z,dOdP�Z-dQdR�Z.dSdT�Z/dUdV�Z0dWdX�Z1dYdZ�Z2d[d\�Z3d]d^�Z4d_d`�Z5dadb�Z6dcdd�Z7dedf�Z8dgdh�Z9didj�Z:dkdl�Z;dmdn�Z<dodp�Z=dqdr�Z>dsdt�Z?dudv�Z@dwdx�ZAdydz�ZBd{d|�ZCd}d~�ZDdd��ZEd�d��ZFdS)��KeyTestsNzCannot run without PyASN1c	CsXtjjtjdtjdtjdtjdtjdtjdd�j|_tjjtjdtjdtjdtjd	tjd
d�j|_	tjj
tjd
tjdtjdtjd
d�j|_tjj
tj
d
tj
dtj
dtj
d
d�j|_tjj
tjd
tjdtjdtjd
d�j|_d|_d|_|�tddd��|��|_t|jd��}|�tj�W5QRXdS)N�n�e�d�p�q�u)rrrrrr�y�g�x)rrrrr�privateValue�curve)rrrrsssh-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<ZsecureRandomcSsd|S)N���)rrr�>/usr/lib/python3/dist-packages/twisted/conch/test/test_keys.py�<lambda>_�z KeyTests.setUp.<locals>.<lambda>�wb)r�Key�_fromRSAComponentsr
�RSAData�
_keyObject�rsaObjZ_fromDSAComponents�DSAData�dsaObjZ_fromECComponents�ECDatanistp256�ecObjZECDatanistp384�ecObj384ZECDatanistp521�ecObj521�rsaSignature�dsaSignatureZpatchr�mktemp�keyFile�open�write�privateRSA_lsh)�self�frrr�setUp)sR�
�
�
�
�
��
zKeyTests.setUpcCst�|j�dS�N)�os�unlinkr/�r3rrr�tearDowneszKeyTests.tearDowncCs||�t�|j���d�|�t�|j���d�|�t�|j���d�|�t�|j���d�|�t�|j���d�dS)zU
        The L{keys.Key.size} method returns the size of key object in bits.
        i��i�i	N)	�assertEqualrr!r%�sizer'r)r*r+r9rrr�	test_sizehs
zKeyTests.test_sizecCsH|�tj�tj�d�|�tj�tj�d�|�tj�tj�d�|�tj�tj�d�|�tj�tj	�d�|�tj�tj
�d�|�tj�tj�d�|�tj�tj�d�|�tj�tj
�d�|�tj�tj�d�|�tj�tj�d�|�tj�tj�d�|�tj�d�d�|�tj�d�d�|�tj�d	�d
�d
S)z_
        Test that the _guessStringType method guesses string types
        correctly.
        Zpublic_opensshZprivate_opensshZ
public_lshZprivate_lsh�agentv3sssh-rsa�blobsssh-dsss	not a keyN)r=rr!Z_guessStringTyper
�publicRSA_openssh�publicDSA_openssh�publicECDSA_openssh�privateRSA_openssh�privateDSA_openssh�privateECDSA_openssh�
publicRSA_lsh�
publicDSA_lshr2�privateDSA_lsh�privateRSA_agentv3�privateDSA_agentv3r9rrr�test__guessStringTypetsv���
��
��
������
��
��
��
���zKeyTests.test__guessStringTypecCs�tj�tj�}tj�tj�}|�|��|���tj�tj�}tj�tj	�}|�|��|���tj�tj
�}tj�tj�}|�|��|���dS)zn
        The L{keys.Key.public} method returns a public key for both
        public and private keys.
        N)rr!�
fromStringr
rErBr=�publicrFrCrGrD)r3Z
privateRSAKeyZpublicRSAKeyZ
privateDSAKeyZpublicDSAKeyZprivateECDSAKeyZpublicECDSAKeyrrr�test_public�szKeyTests.test_publiccCs�tj�tj�}tj�tj�}tj�tj�}|�|���	��|�
|�	��|�|���	��|�
|�	��|�|���	��|�
|�	��dS)zg
        The L{keys.Key.isPublic} method returns True for public keys
        otherwise False.
        N)rr!rNr
rErFrG�
assertTruerO�isPublic�assertFalse)r3�rsaKey�dsaKeyZecdsaKeyrrr�
test_isPublic�szKeyTests.test_isPubliccCs |�|||�|�|||�dSr6)�_testPublicFromString�_testPrivateFromString)r3rO�private�type�datarrr�_testPublicPrivateFromString�sz%KeyTests._testPublicPrivateFromStringcCsTtj�|�}|�|���|�|��|�|����D]\}}|�|||�q6dSr6)	rr!rNrQrRr=rZr[�items)r3rOrZr[Z	publicKey�k�vrrrrW�s
zKeyTests._testPublicFromStringcCsTtj�|�}|�|���|�|��|�|��D]\}}|�|��||�q2dSr6)	rr!rNrSrRr=rZr]r[)r3rYrZr[Z
privateKeyr^r_rrrrX�s
zKeyTests._testPrivateFromStringcCs�|�tjtjdtj�|�tjtjdtj�|�t	j
jtjdd�t	j
�tj��|�t	j
�tj
�t	j
�tj��|�tjtjdtj�dS)zN
        Test that keys are correctly generated from OpenSSH strings.
        �EC�RSA�	encrypted�Z
passphrase�DSAN)r\r
rDrGr(rBrEr#r=rr!rN�privateRSA_openssh_encryptedZprivateRSA_openssh_alternaterCrFr&r9rrr�test_fromOpenSSH�s4��
��
���zKeyTests.test_fromOpenSSHcCsd}|�tjtjj|d�dS)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!Z_fromString_PRIVATE_OPENSSH�r3ZbadKeyrrr�test_fromOpenSSHErrors�s�zKeyTests.test_fromOpenSSHErrorscCs(d}|�tj�|�tj�|d��dS)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)r=rr!rN�r3ZprivateDSADatarrr� test_fromOpenSSH_with_whitespace�s�z)KeyTests.test_fromOpenSSH_with_whitespacecCsHtjjtjdd�}|�|��d�tjjtjddd�}|�||�dS)z�
        Newer versions of OpenSSH generate encrypted keys which have a longer
        IV than the older versions.  These newer keys are also loaded.
        stestxprcrarlN)rr!rNr
Z privateRSA_openssh_encrypted_aesr=rZ)r3�keyZkey2rrr�test_fromNewerOpenSSHs
��zKeyTests.test_fromNewerOpenSSHc	Cs,d}|�tj�|�tj�|�dd���dS)zp
        Test that keys are correctly generated from OpenSSH strings with Windows
        line endings.
        rkrls
N)r=rr!rN�replacermrrr�%test_fromOpenSSH_windows_line_endingss

�z.KeyTests.test_fromOpenSSH_windows_line_endingscCs@t�ddddgggg�}|jtjtjjdt�|�dd�dS)	za
        C{BadKeyError} exception is raised when public key has an unknown
        type.
        s
public-key�bad-key�p�2�{�})r[N)	r	�packrgrrhr!rN�base64Zencodestring�r3Zsexprrr�!test_fromLSHPublicUnsupportedType/s�z*KeyTests.test_fromLSHPublicUnsupportedTypecCs0t�ddddgggg�}|�tjtjj|�dS)zb
        C{BadKeyError} exception is raised when private key has an unknown
        type.
        sprivate-keyrsrtruN)r	rxrgrrhr!rNrzrrr�"test_fromLSHPrivateUnsupportedType<s�z+KeyTests.test_fromLSHPrivateUnsupportedTypecCs|�tjtjdtj�dS)zR
        RSA public and private keys can be generated from a LSH strings.
        raN)r\r
rHr2r#r9rrr�test_fromLSHRSAIs�zKeyTests.test_fromLSHRSAcCs|�tjtjdtj�dS)zH
        DSA public and private key can be generated from LSHs.
        rdN)r\r
rIrJr&r9rrr�test_fromLSHDSAUs�zKeyTests.test_fromLSHDSAcCs<|�tjdtj�|�tjdtj�|�tjtj	j
d�dS)zO
        Test that keys are correctly generated from Agent v3 strings.
        rards$ssh-fooN)rXr
rKr#rLr&rgrrhr!rNr9rrr�test_fromAgentv3as
�
��zKeyTests.test_fromAgentv3cCs�|�tjtjjd�|�tjtjjdd�|jtjtjjtjdd�|�tjtjjt�|j��	dd��|�tjtjjd�|jtjtjjdd	d�|jtjtjjd
d	d�|jtjtjjdd	d�|jtjtjjdd	d�d
S)zW
        keys.Key.fromString should raise BadKeyError when the key is invalid.
        r�bad_typesunencryptedrc�opensshrbs-----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-----Z	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)
rgrrhr!rNr
rHZEncryptedKeyErrorr%�toStringr9rrr�test_fromStringErrorsmsL�����!�!�!�zKeyTests.test_fromStringErrorscCsV|�tj�|j�tj�tj��|�tj	tjj|jd�|jtj	tjj|jdd�dS)z5
        Test that fromFile works correctly.
        r�ZunencryptedrcN)
r=rr!ZfromFiler/rNr
r2rgrhr9rrr�
test_fromFiles���zKeyTests.test_fromFilecCs6tjjtd�td�d�j}t�|�}|�|j|�dS)zJ
        Test that the PublicKey object is initialized correctly.
        ���rrN)rr!r"r
r$r=)r3�objrorrr�	test_inits
zKeyTests.test_initcCs�t�|j�}t�|j�}t�tjjtd�td�d�j�}t�|j�}|�||k�|�||k�|�||k�|�|t	k�|�|dk�dS)z?
        Test that Key objects are compared correctly.
        r�r�r�N)
rr!r%r"r
r$r'rQrS�object�r3Zrsa1Zrsa2Zrsa3Zdsarrr�
test_equals�zKeyTests.test_equalcCs�t�|j�}t�|j�}t�tjjtd�td�d�j�}t�|j�}|�||k�|�||k�|�||k�|�|t	k�|�|dk�dS)zC
        Test that Key objects are not-compared correctly.
        r�r�r�N)
rr!r%r"r
r$r'rSrQr�r�rrr�
test_notEqual)s�zKeyTests.test_notEqualcCst�d�}|�t|j�dS)zO
        The L{keys.Key.data} method raises RuntimeError for bad keys.
        rN)rr!rg�RuntimeErrorr[rirrr�test_dataError9s
zKeyTests.test_dataErrorcCs4|�t�|j���d�|�t�|j���d�dS)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)r=rr!r%�fingerprintr'r9rrr�test_fingerprintdefaultAs��z KeyTests.test_fingerprintdefaultcCs@|�t�|j��tjj�d�|�t�|j��tjj�d�dS)z�
        fingerprint method generates key fingerprint in
        L{FingerprintFormats.MD5-HEX} format if explicitly specified.
        r�r�N)r=rr!r%r��FingerprintFormatsZMD5_HEXr'r9rrr�test_fingerprint_md5_hexLs����z!KeyTests.test_fingerprint_md5_hexcCs@|�t�|j��tjj�d�|�t�|j��tjj�d�dS)z�
        fingerprint method generates key fingerprint in
        L{FingerprintFormats.SHA256-BASE64} format if explicitly specified.
        z,FBTCOoknq0mHy+kpfnY9tDdcAJuWtCpuQMaV3EsvbUI=z,Wz5o2YbKyxOEcJn1au/UaALSVruUzfz0vaLI1xiIGyY=N)r=rr!r%r�r�Z
SHA256_BASE64r'r9rrr�test_fingerprintsha256[s����zKeyTests.test_fingerprintsha256c	CsB|�tj��}t�|j��d�W5QRX|�d|jjd�dS)zk
        A C{BadFingerPrintFormat} error is raised when unsupported
        formats are requested.
        zsha256-basez+Unsupported fingerprint format: sha256-baserN)	rgrZBadFingerPrintFormatr!r%r�r=Z	exception�args)r3Zemrrr�test_fingerprintBadFormatjs

�z"KeyTests.test_fingerprintBadFormatcCs�|�t�|j���d�|�t�|j���d�|�t�|j���d�|�t�|j���d�|�t�|j���d�|�t�|j���tj	d�|�
tt�d�j�|�
tt�d�j�|�
tt�|�j�|�
tt�|�j�dS)zS
        Test that the type method returns the correct type for an object.
        ra�ssh-rsard�ssh-dssr`rN)r=rr!r%rZZsshTyper'r)r
r(rgr�r9rrr�	test_typeus�zKeyTests.test_typecCs"t�d�}|�tjtjj|�dS)ze
        A C{BadKeyError} error is raised whey the blob has an unsupported
        key type.
        �ssh-badN)r�NSrgrrhr!rN�r3ZbadBlobrrr�test_fromBlobUnsupportedType�s

�z%KeyTests.test_fromBlobUnsupportedTypecCsjtjdtjdd�}t�d�t�|d�t�|d�}tj�|�}|�|�	��|�
||���dS)zQ
        A public RSA key is correctly generated from a public key blob.
        rrr�r�N)r
r#rr��MPrr!rNrQrRr=r[)r3Z
rsaPublicData�rsaBlobrTrrr�test_fromBlobRSA�s����zKeyTests.test_fromBlobRSAcCs�tjdtjdtjdtjdd�}t�d�t�|d�t�|d�t�|d�t�|d�}tj�|�}|�|�	��|�
||���dS)zQ
        A public DSA key is correctly generated from a public key blob.
        rrrr)rrrrr�N)r
r&rr�r�rr!rNrQrRr=r[)r3Z
dsaPublicData�dsaBlobrUrrr�test_fromBlobDSA�s$������zKeyTests.test_fromBlobDSAcCs�ddlm}tjdtjdtjdd�}t�|d�t�|ddd��t�d	|�|dd
�|�|dd
��}tj�	|�}|�
|���|�||�
��dS)zA
        Key.fromString generates ECDSA keys from blobs.
        r��utilsrrr)rrr���N�� )rr�r
r(rr��int_to_bytesrr!rNrQrRr=r[)r3r�ZecPublicData�ecblob�eckeyrrr�test_fromBlobECDSA�s"�����zKeyTests.test_fromBlobECDSAcCs"t�d�}|�tjtjj|�dS)zh
        C{BadKeyError} is raised when loading a private blob with an
        unsupported type.
        r�N)rr�rgrrhr!�_fromString_PRIVATE_BLOBr�rrr�#test_fromPrivateBlobUnsupportedType�s
�z,KeyTests.test_fromPrivateBlobUnsupportedTypecCs�t�d�t�tjd�t�tjd�t�tjd�t�tjd�t�tjd�t�tjd�}tj�|�}|�|�	��|�
tj|���dS)	zS
        A private RSA key is correctly generated from a private key blob.
        r�rrrrrrN)rr�r�r
r#rr!r�rSrRr=r[)r3r�rTrrr�test_fromPrivateBlobRSA�s"�������
z KeyTests.test_fromPrivateBlobRSAcCs�t�d�t�tjd�t�tjd�t�tjd�t�tjd�t�tjd�}tj�|�}|�|�	��|�
tj|���dS)zS
        A private DSA key is correctly generated from a private key blob.
        r�rrrrrN)rr�r�r
r&rr!r�rSrRr=r[)r3r�rUrrr�test_fromPrivateBlobDSA�s������	z KeyTests.test_fromPrivateBlobDSAcCspt�tjd�t�tjd�t�tjd�t�tjd�}tj�|�}|�|�	��|�
tj|���dS)zR
        A private EC key is correctly generated from a private key blob.
        rrrrN)rr�r
r(r�rr!r�rSrRr=r[)r3r�r�rrr�test_fromPrivateBlobECDSAs����z"KeyTests.test_fromPrivateBlobECDSAcCsJ|�t�|j���t�d�t�|j��j	j
�t�|j��j	j��dS)zL
        Return the over-the-wire SSH format of the RSA public key.
        r�N)r=rr!r%rArr�r��private_numbers�public_numbersrrr9rrr�test_blobRSAs���zKeyTests.test_blobRSAcCsd|j��j}|�t�|j���t�d�t�	|j
j�t�	|j
j�t�	|j
j
�t�	|j��dS)zL
        Return the over-the-wire SSH format of the DSA public key.
        r�N)r'r�r�r=rr!rArr�r��parameter_numbersrrrr�r3Z
publicNumbersrrr�test_blobDSA s���
��zKeyTests.test_blobDSAcCs�ddlm}|jjjdd}|�t�|j���t	�
tjd�t	�
tjddd��t	�
d|�
|j��jj|�|�
|j��jj|���dS)	zK
        Return the over-the-wire SSH format of the EC public key.
        rr���rr�Nr�)rr�r)rZkey_sizer=rr!rArr�r
r(r�r�r�rr)r3r�Z
byteLengthrrr�test_blobEC0s(�������zKeyTests.test_blobECcCst�d�}|�t|j�dS)zx
        C{RuntimeError} is raised when the blob is requested for a Key
        which is not wrapping anything.
        N)rr!rgr�rArirrr�test_blobNoKeyCs
zKeyTests.test_blobNoKeycCs�ddlm}|j��}|�|j|j�}|�t�	|j��
�t�d�t�
|j��jj�t�
|j��jj�t�
|j��j�t�
|�t�
|j��j�t�
|j��j��dS)zn
        L{keys.Key.privateBlob} returns the SSH protocol-level format of an
        RSA private key.
        r)�rsar�N)Z)cryptography.hazmat.primitives.asymmetricr�r%r�Zrsa_crt_iqmprrr=rr!�privateBlobrr�r�r�rrr)r3r�Znumbersrrrr�test_privateBlobRSAMs&
�������zKeyTests.test_privateBlobRSAcCsv|j��j}|�t�|j���t�d�t�	|j
j�t�	|j
j�t�	|j
j
�t�	|j�t�	|j��j��dS)zm
        L{keys.Key.privateBlob} returns the SSH protocol-level format of a DSA
        private key.
        r�N)r'r�r�r=rr!r�rr�r�r�rrrrrr�rrr�test_privateBlobDSAas���
���zKeyTests.test_privateBlobDSAcCsb|�t�|j���t�tjd�t�	|j�
�jj�t�	|j�
�jj
�t�	|j�
�j��dS)zj
        L{keys.Key.privateBlob} returns the SSH ptotocol-level format of EC
        private key.
        rN)r=rr!r)r�rr�r
r(r�r�r�rrZ
private_valuer9rrr�test_privateBlobECss����zKeyTests.test_privateBlobECcCst�d�}|�t|j�dS)zV
        Raises L{RuntimeError} if the underlying key object does not exists.
        N)rr!rgr�r�rirrr�test_privateBlobNoKeyObject�s
z$KeyTests.test_privateBlobNoKeyObjectcCsvtj�tj�}|�|�d�tj�|�|�dd�tj�|�|�	��d�tj
dd��|�|�	��dd�tj
�dS)zO
        L{keys.Key.toString} serializes an RSA key in OpenSSH format.
        r�rbNr��comment)rr!rNr
rKr=r�rErerOrB�r3rorrr�test_toOpenSSHRSA�s���zKeyTests.test_toOpenSSHRSAcCs`tj�tj�}|�|�d�tj�|�|���dd�tj	�|�|���d�tj	dd��dS)zN
        L{keys.Key.toString} serializes a DSA key in OpenSSH format.
        r�r�Nr�)
rr!rNr
rJr=r�rFrOrCr�rrr�test_toOpenSSHDSA�s��zKeyTests.test_toOpenSSHDSAcCsLtj�tj�}|�|���dd�tj�|�|���d�tjdd��dS)zP
        L{keys.Key.toString} serializes a ECDSA key in OpenSSH format.
        r�r�Nr�)	rr!rNr
rGr=rOr�rDr�rrr�test_toOpenSSHECDSA�s��zKeyTests.test_toOpenSSHECDSAcCs>tj�tj�}|�|�d�tj�|�|���d�tj	�dS)zK
        L{keys.Key.toString} serializes an RSA key in LSH format.
        �lshN)
rr!rNr
rEr=r�r2rOrHr�rrr�
test_toLSHRSA�s
�zKeyTests.test_toLSHRSAcCs>tj�tj�}|�|�d�tj�|�|���d�tj	�dS)zJ
        L{keys.Key.toString} serializes a DSA key in LSH format.
        r�N)
rr!rNr
rFr=r�rJrOrIr�rrr�
test_toLSHDSA�s
�zKeyTests.test_toLSHDSAcCs&tj�tj�}|�|�d�tj�dS)zP
        L{keys.Key.toString} serializes an RSA key in Agent v3 format.
        r@N)rr!rNr
rEr=r�rKr�rrr�test_toAgentv3RSA�szKeyTests.test_toAgentv3RSAcCs&tj�tj�}|�|�d�tj�dS)zO
        L{keys.Key.toString} serializes a DSA key in Agent v3 format.
        r@N)rr!rNr
rFr=r�rLr�rrr�test_toAgentv3DSA�szKeyTests.test_toAgentv3DSAcCs|�tjt�|j�jd�dS)zm
        L{keys.Key.toString} raises L{keys.BadKeyError} when passed an invalid
        format type.
        r�N)rgrrhr!r%r�r9rrr�test_toStringErrors�s�zKeyTests.test_toStringErrorscCsHd}tj�tj�}|�|�}|�|���||��|�|�||��dS)z8
        Signed data can be verified using RSA.
        �	some-dataN)	rr!rNr
rE�signrQrO�verify�r3r[ro�	signaturerrr�test_signAndVerifyRSA�s

zKeyTests.test_signAndVerifyRSAcCsHd}tj�tj�}|�|�}|�|���||��|�|�||��dS)z8
        Signed data can be verified using DSA.
        r�N)	rr!rNr
rFr�rQrOr�r�rrr�test_signAndVerifyDSA�s

zKeyTests.test_signAndVerifyDSAcCs�d}tj�tj�}|�|�}tj�tj�}|�|�}tj�tj�}|�|�}|�|�	��
||��|�|�
||��|�|�	��
||��|�|�
||��|�|�	��
||��|�|�
||��dS)z7
        Signed data can be verified using EC.
        r�N)rr!rNr
rGr�ZprivateECDSA_openssh384ZprivateECDSA_openssh521rQrOr�)r3r[ror�Zkey384Zsignature384Zkey521Zsignature521rrr�test_signAndVerifyEC�s


zKeyTests.test_signAndVerifyECcCsNtj�tj�}|�|�|jd��|�|�|jd��|�|�|j	d��dS)zC
        A known-good RSA signature verifies successfully.
        r�aN)
rr!rNr
rBrQr�r,rSr-r�rrr�test_verifyRSAszKeyTests.test_verifyRSAcCsNtj�tj�}|�|�|jd��|�|�|jd��|�|�|j	d��dS)zC
        A known-good DSA signature verifies successfully.
        rr�N)
rr!rNr
rCrQr�r-rSr,r�rrr�test_verifyDSAszKeyTests.test_verifyDSAcCs.tj�tj�}|�|�|jdd�d��dS)z�
        Some commercial SSH servers send DSA keys as 2 20-byte numbers;
        they are still verified as valid keys.
        i���Nr)rr!rNr
rCrQr�r-r�rrr�test_verifyDSANoPrefixszKeyTests.test_verifyDSANoPrefixcCs|�tt�|j��d�dS)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)r=�reprrr!r%r9rrr�test_reprPrivateRSA%s�zKeyTests.test_reprPrivateRSAcCs |�tt�|j����d�dS)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)r=r�rr!r%rOr9rrr�test_reprPublicRSAts�zKeyTests.test_reprPublicRSAcCs |�tt�|j����d�dS)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:
	76282513020392096317118503144964731774299773481750550543382904345687059013883
y:
	81543197864602852632265664769441647534344375894314319681061137159310646683104>
N)r=r�rr!r)rOr9rrr�test_reprPublicECDSA�s�zKeyTests.test_reprPublicECDSAcCs|�tt�|j��d�dS)zm
        The repr of a L{keys.Key} contains all the OpenSSH format for an ECDSA
        private key.
        aE<Elliptic Curve Private Key (256 bits)
curve:
	ecdsa-sha2-nistp256
privateValue:
	34638743477210341700964008455655698253555655678826059678074967909361042656500
x:
	76282513020392096317118503144964731774299773481750550543382904345687059013883
y:
	81543197864602852632265664769441647534344375894314319681061137159310646683104>
N)r=r�rr!r)r9rrr�test_reprPrivateECDSA�s�zKeyTests.test_reprPrivateECDSA)G�__name__�
__module__�__qualname__r�skipCryptography�skiprr5r:r?rMrPrVr\rWrXrfrjrnrprrr{r|r}r~rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrr!s�<'

	

	

	

	Orc@s4eZdZdZedkreZdd�Zdd�Zdd�Z	dS)	�PersistentRSAKeyTestsz1
    Tests for L{keys._getPersistentRSAKey}.
    NcCsFt|���}|�d�}tj|dd�}|�|��d�|�|���dS)z�
        L{keys._getPersistentRSAKey} will put the key in
        C{directory}/C{filename}, with the key length of C{keySize}.
        �	mykey.pem��ZkeySizeN)	rr.�childr�_getPersistentRSAKeyr=r>rQ�exists�r3�tempDirr/rorrr�test_providedArguments�s

z,PersistentRSAKeyTests.test_providedArgumentscCs|t|���}|�d�}tj|dd�}|�|��d�|�|���|�	�}tj|dd�}|�|��d�|�|�	�|�dS)zm
        L{keys._getPersistentRSAKey} will not regenerate the key if the key
        already exists.
        r�r�r�r;N)
rr.r�rr�r=r>rQr�Z
getContent)r3r�r/roZ
keyContentrrr�test_noRegeneration�s
z)PersistentRSAKeyTests.test_noRegenerationcCs>t|���}|�d�}tj|dd�}d|_|�|��d�dS)z
        If the key generated by L{keys.getPersistentRSAKey} is set to None
        the key size should then become 0.
        r�r�r�Nr)rr.r�rr�r$r=r>r�rrr�test_keySizeZero�s

z&PersistentRSAKeyTests.test_keySizeZero)
r�r�r��__doc__rr�r�r�r�r�rrrrr��s
r�)r�Z
__future__rrZtwisted.python.reflectrrr�rZtwisted.conch.sshrrr	ryr7Ztwisted.conch.testr
Ztwisted.pythonrZ
twisted.trialrZtwisted.python.compatr
Ztwisted.python.filepathrZTestCaserr�rrrr�<module>s4