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: //lib/python3/dist-packages/twisted/conch/ssh/__pycache__/_kex.cpython-38.pyc
U


W[��@szdZddlmZmZddlmZmZmZmZddl	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��Ze�e�e�e�e�e�d�Zdd�Zdd�Zd d!�Zd"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�8/usr/lib/python3/dist-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.
    Nrrrrrr<src@seZdZdZdZeZdS)�_ECDH256zT
    Elliptic Curve Key Exchange with SHA-256 as HASH. Defined in
    RFC 5656.
    �N�rrrrrrrrrrrrGsrc@seZdZdZdZeZdS)�_ECDH384zT
    Elliptic Curve Key Exchange with SHA-384 as HASH. Defined in
    RFC 5656.
    �N)rrrrrrrrrrrrRsrc@seZdZdZdZeZdS)�_ECDH512zT
    Elliptic Curve Key Exchange with SHA-512 as HASH. Defined in
    RFC 5656.
    �N)rrrrrrrrrrrr!]sr!c@seZdZdZdZeZdS)�_DHGroupExchangeSHA256zc
    Diffie-Hellman Group and Key Exchange with SHA-256 as HASH. Defined in
    RFC 4419, 4.2.
    �Nrrrrrr#hsr#c@seZdZdZdZeZdS)�_DHGroupExchangeSHA1za
    Diffie-Hellman Group and Key Exchange with SHA-1 as HASH. Defined in
    RFC 4419, 4.1.
    �N)rrrrrrrrrrrr%tsr%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.
    �Ai32317006071311007300338913926423828248817941241140239112842009751400741706634354222619689417363569347117901737909704191754605873209195028853758986185622153212175412514901774520270235796078236248884246189477587641105928646099411723245426622522193230540919037680524235519125679715870117001058055877651038861847280257976054903569732561526167081339361799541336476559160368317896729073178384589680639671900977202194168647225871031411336429319536193471636533209717077448227988588565369208645296636077250268955505928362751121174096972998068410554359584866583291642136218231078990999448652468262416972035911852507045361090559r N)
rrrrrrrrrrrrrrr'�s

r')s$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�sr/cCst|�}|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+Zkexrrr�getHashProcessor�s
r1cCst|�}|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,rrr0rrr�getDHGeneratorAndPrime�s
r2cs�ddlm}ddlm}ddlm}|�}t���t��D]<}|�	d�r:|�
dd�}|�|��||�}|s:��
|�q:t��fdd�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)�_curveTablesecdhsecdsacs
�|jS)N)rr*�Z
kexAlgorithmsrr�<lambda>�z*getSupportedKeyExchanges.<locals>.<lambda>)�key)Zcryptography.hazmat.backendsr3Z)cryptography.hazmat.primitives.asymmetricr4Ztwisted.conch.ssh.keysr5r)�copy�list�
startswith�replaceZ+elliptic_curve_exchange_algorithm_supportedZECDH�pop�sorted)r3r4r5ZbackendZkeyAlgorithmZkeyAlgorithmDsaZ	supportedrr6r�getSupportedKeyExchanges�s$
�
�r@N)#rZ
__future__rrZhashlibrrrrZzope.interfacerr	r
Z
twisted.conchrZtwisted.python.compatrr
rrr�objectrrr!r#r%r'r)r,r.r/r1r2r@rrrr�<module>sD


�