diff options
author | Robey Pointer <robey@lag.net> | 2004-11-07 02:31:48 +0000 |
---|---|---|
committer | Robey Pointer <robey@lag.net> | 2004-11-07 02:31:48 +0000 |
commit | 2f3228dd88a81e037a43bd0f990e2558da853056 (patch) | |
tree | 2b93f5d6425462a6bb77beab929c647228aea143 /paramiko/kex_gex.py | |
parent | 5a1b5848aeca3b5941c18c0c0a78a13504e147aa (diff) | |
download | paramiko-2f3228dd88a81e037a43bd0f990e2558da853056.tar.gz |
[project @ Arch-1:robey@lag.net--2003-public%secsh--dev--1.0--patch-107]
fix kex_gex
fix kex_gex (group-exchange key exchange) to, *cough*, work again, and also
layout kex_group1 a little more sanely.
Diffstat (limited to 'paramiko/kex_gex.py')
-rw-r--r-- | paramiko/kex_gex.py | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/paramiko/kex_gex.py b/paramiko/kex_gex.py index 8f3a800f..c324211c 100644 --- a/paramiko/kex_gex.py +++ b/paramiko/kex_gex.py @@ -72,6 +72,10 @@ class KexGex (object): return self._parse_kexdh_gex_reply(m) raise SSHException('KexGex asked to handle packet type %d' % ptype) + + ### internals... + + def _generate_x(self): # generate an "x" (1 < x < (p-1)/2). q = (self.p - 1) // 2 @@ -82,7 +86,7 @@ class KexGex (object): while not (qhbyte & 0x80): qhbyte <<= 1 qmask >>= 1 - while 1: + while True: self.transport.randpool.stir() x_bytes = self.transport.randpool.get_bytes(bytes) x_bytes = chr(ord(x_bytes[0]) & qmask) + x_bytes[1:] @@ -152,8 +156,15 @@ class KexGex (object): hm = Message() hm.add(self.transport.remote_version, self.transport.local_version, self.transport.remote_kex_init, self.transport.local_kex_init, - key, self.min_bits, self.preferred_bits, self.max_bits, - self.p, self.g, self.e, self.f, K) + key) + hm.add_int(self.min_bits) + hm.add_int(self.preferred_bits) + hm.add_int(self.max_bits) + hm.add_mpint(self.p) + hm.add_mpint(self.g) + hm.add_mpint(self.e) + hm.add_mpint(self.f) + hm.add_mpint(K) H = SHA.new(str(hm)).digest() self.transport._set_K_H(K, H) # sign it @@ -178,8 +189,15 @@ class KexGex (object): hm = Message() hm.add(self.transport.local_version, self.transport.remote_version, self.transport.local_kex_init, self.transport.remote_kex_init, - host_key, self.min_bits, self.preferred_bits, self.max_bits, - self.p, self.g, self.e, self.f, K) + host_key) + hm.add_int(self.min_bits) + hm.add_int(self.preferred_bits) + hm.add_int(self.max_bits) + hm.add_mpint(self.p) + hm.add_mpint(self.g) + hm.add_mpint(self.e) + hm.add_mpint(self.f) + hm.add_mpint(K) self.transport._set_K_H(K, SHA.new(str(hm)).digest()) self.transport._verify_key(host_key, sig) self.transport._activate_outbound() |