--- /dev/null
+import sys
+from _typeshed import ReadableBuffer
+from typing import Callable
+
+from paramiko.message import Message
+from paramiko.transport import Transport
+
+if sys.version_info >= (3, 0):
+ from hashlib import _Hash
+else:
+ from hashlib import _hash as _Hash
+
+c_MSG_KEXDH_GEX_REQUEST_OLD: bytes
+c_MSG_KEXDH_GEX_GROUP: bytes
+c_MSG_KEXDH_GEX_INIT: bytes
+c_MSG_KEXDH_GEX_REPLY: bytes
+c_MSG_KEXDH_GEX_REQUEST: bytes
+
+class KexGex:
+ name: str
+ min_bits: int
+ max_bits: int
+ preferred_bits: int
+ hash_algo: Callable[[ReadableBuffer], _Hash] = ...
+ transport: Transport
+ p: int | None
+ q: int | None
+ g: int | None
+ x: int | None
+ e: int | None
+ f: int | None
+ old_style: bool
+ def __init__(self, transport: Transport) -> None: ...
+ def start_kex(self, _test_old_style: bool = ...) -> None: ...
+ def parse_next(self, ptype: int, m: Message) -> None: ...
+
+class KexGexSHA256(KexGex):
+ name: str
+ hash_algo: Callable[[ReadableBuffer], _Hash] = ...