Your IP : 216.73.216.213


Current Path : /opt/alt/python37/lib64/python3.7/site-packages/twisted/conch/ssh/__pycache__/
Upload File :
Current File : //opt/alt/python37/lib64/python3.7/site-packages/twisted/conch/ssh/__pycache__/_kex.cpython-37.pyc

B

��d^� �	@s�dZddlmZmZddlmZmZmZmZddl	m
Z
mZmZddl
mZddlmZGdd�de�ZGd	d
�d
e�ZGdd�de�ZGd
d�de�Zee�Gdd�de��Zee�Gdd�de��Zee�Gdd�de��Zee�Gdd�de��Zee�Gdd�de��Zee�Gdd�de��Zee�Gdd�de��Zee�Gdd�de��Ze�e�e�e�e�e�e�e�d�Zd d!�Zd"d#�Z d$d%�Z!d&d'�Z"d(d)�Z#d*d+�Z$d,S)-z
SSH key exchange handling.
�)�absolute_import�division)�sha1�sha256�sha384�sha512)�	Attribute�implementer�	Interface)�error)�longc@s eZdZdZed�Zed�ZdS)�_IKexAlgorithmzB
    An L{_IKexAlgorithm} describes a key exchange algorithm.
    z�An L{int} giving the preference of the algorithm when negotiating key exchange. Algorithms with lower precedence values are more preferred.zqA callable hash algorithm constructor (e.g. C{hashlib.sha256}) suitable for use with this key exchange algorithm.N)�__name__�
__module__�__qualname__�__doc__r�
preference�
hashProcessor�rr�I/opt/alt/python37/lib64/python3.7/site-packages/twisted/conch/ssh/_kex.pyr
s
r
c@s eZdZdZed�Zed�ZdS)�_IFixedGroupKexAlgorithmzu
    An L{_IFixedGroupKexAlgorithm} describes a key exchange algorithm with a
    fixed prime / generator group.
    zdA L{long} giving the prime number used in Diffie-Hellman key exchange, or L{None} if not applicable.z�A L{long} giving the generator number used in Diffie-Hellman key exchange, or L{None} if not applicable. (This is not related to Python generator functions.)N)rrrrr�prime�	generatorrrrrr#s
rc@seZdZdZdS)�#_IEllipticCurveExchangeKexAlgorithmz�
    An L{_IEllipticCurveExchangeKexAlgorithm} describes a key exchange algorithm
    that uses an elliptic curve exchange between the client and server.
    N)rrrrrrrrr4src@seZdZdZdS)�_IGroupExchangeKexAlgorithmz�
    An L{_IGroupExchangeKexAlgorithm} describes a key exchange algorithm
    that uses group exchange between the client and server.

    A prime / generator group should be chosen at run time based on the
    requested size. See RFC 4419.
    N)rrrrrrrrr<src@seZdZdZdZeZdS)�_Curve25519SHA256z�
    Elliptic Curve Key Exchange using Curve25519 and SHA256. Defined in
    U{https://datatracker.ietf.org/doc/draft-ietf-curdle-ssh-curves/}.
    �N)rrrrrrrrrrrrGsrc@seZdZdZdZeZdS)�_Curve25519SHA256LibSSHzN
    As L{_Curve25519SHA256}, but with a pre-standardized algorithm name.
    �N)rrrrrrrrrrrrRsrc@seZdZdZdZeZdS)�_ECDH256zT
    Elliptic Curve Key Exchange with SHA-256 as HASH. Defined in
    RFC 5656.
    �N)rrrrrrrrrrrr\src@seZdZdZdZeZdS)�_ECDH384zT
    Elliptic Curve Key Exchange with SHA-384 as HASH. Defined in
    RFC 5656.
    �N)rrrrrrrrrrrr!gsr!c@seZdZdZdZeZdS)�_ECDH512zT
    Elliptic Curve Key Exchange with SHA-512 as HASH. Defined in
    RFC 5656.
    �N)rrrrrrrrrrrr#rsr#c@seZdZdZdZeZdS)�_DHGroupExchangeSHA256zc
    Diffie-Hellman Group and Key Exchange with SHA-256 as HASH. Defined in
    RFC 4419, 4.2.
    �N)rrrrrrrrrrrr%}sr%c@seZdZdZdZeZdS)�_DHGroupExchangeSHA1za
    Diffie-Hellman Group and Key Exchange with SHA-1 as HASH. Defined in
    RFC 4419, 4.1.
    �N)rrrrrrrrrrrr'�sr'c@s$eZdZdZdZeZed�ZdZ	dS)�_DHGroup14SHA1z�
    Diffie-Hellman key exchange with SHA-1 as HASH and Oakley Group 14
    (2048-bit MODP Group). Defined in RFC 4253, 8.2.
    �Ai32317006071311007300338913926423828248817941241140239112842009751400741706634354222619689417363569347117901737909704191754605873209195028853758986185622153212175412514901774520270235796078236248884246189477587641105928646099411723245426622522193230540919037680524235519125679715870117001058055877651038861847280257976054903569732561526167081339361799541336476559160368317896729073178384589680639671900977202194168647225871031411336429319536193471636533209717077448227988588565369208645296636077250268955505928362751121174096972998068410554359584866583291642136218231078990999448652468262416972035911852507045361090559rN)
rrrrrrrrrrrrrrr)�s

r))scurve25519-sha256scurve25519-sha256@libssh.orgs$diffie-hellman-group-exchange-sha256s"diffie-hellman-group-exchange-sha1sdiffie-hellman-group14-sha1secdh-sha2-nistp256secdh-sha2-nistp384secdh-sha2-nistp521cCs |tkrt�d|f��t|S)aY
    Get a description of a named key exchange algorithm.

    @param kexAlgorithm: The key exchange algorithm name.
    @type kexAlgorithm: L{bytes}

    @return: A description of the key exchange algorithm named by
        C{kexAlgorithm}.
    @rtype: L{_IKexAlgorithm}

    @raises ConchError: if the key exchange algorithm is not found.
    z&Unsupported key exchange algorithm: %s)�_kexAlgorithmsrZ
ConchError)�kexAlgorithmrrr�getKex�s
r-cCst�t|��S)a
    Returns C{True} if C{kexAlgorithm} is an elliptic curve.

    @param kexAlgorithm: The key exchange algorithm name.
    @type kexAlgorithm: C{str}

    @return: C{True} if C{kexAlgorithm} is an elliptic curve,
        otherwise C{False}.
    @rtype: C{bool}
    )r�
providedByr-)r,rrr�isEllipticCurve�sr/cCst�t|��S)a+
    Returns C{True} if C{kexAlgorithm} has a fixed prime / generator group.

    @param kexAlgorithm: The key exchange algorithm name.
    @type kexAlgorithm: L{bytes}

    @return: C{True} if C{kexAlgorithm} has a fixed prime / generator group,
        otherwise C{False}.
    @rtype: L{bool}
    )rr.r-)r,rrr�isFixedGroup�sr0cCst|�}|jS)a
    Get the hash algorithm callable to use in key exchange.

    @param kexAlgorithm: The key exchange algorithm name.
    @type kexAlgorithm: L{bytes}

    @return: A callable hash algorithm constructor (e.g. C{hashlib.sha256}).
    @rtype: C{callable}
    )r-r)r,�kexrrr�getHashProcessor�s
r2cCst|�}|j|jfS)z�
    Get the generator and the prime to use in key exchange.

    @param kexAlgorithm: The key exchange algorithm name.
    @type kexAlgorithm: L{bytes}

    @return: A L{tuple} containing L{long} generator and L{long} prime.
    @rtype: L{tuple}
    )r-rr)r,r1rrr�getDHGeneratorAndPrime�s
r3cs�ddlm}ddlm}ddlm}|�}t���xbt��D]V}|�	d�rl|�
dd�}|�|��||�}n|�	d�r�|�
�}nd}|s<��|�q<Wt��fd	d
�d�S)z�
    Get a list of supported key exchange algorithm names in order of
    preference.

    @return: A C{list} of supported key exchange algorithm names.
    @rtype: C{list} of L{bytes}
    r)�default_backend)�ec)�_curveTablesecdhsecdsascurve25519-sha256Tcs
�|jS)N)r)r,)�
kexAlgorithmsrr�<lambda>&�z*getSupportedKeyExchanges.<locals>.<lambda>)�key)Zcryptography.hazmat.backendsr4Z)cryptography.hazmat.primitives.asymmetricr5Ztwisted.conch.ssh.keysr6r+�copy�list�
startswith�replaceZ+elliptic_curve_exchange_algorithm_supportedZECDHZx25519_supported�pop�sorted)r4r5r6ZbackendZkeyAlgorithmZkeyAlgorithmDsaZ	supportedr)r7r�getSupportedKeyExchangess$


rAN)%r�
__future__rr�hashlibrrrrZzope.interfacerr	r
Z
twisted.conchrZtwisted.python.compatrr
rrr�objectrrrr!r#r%r'r)r+r-r/r0r2r3rArrrr�<module>sN