summaryrefslogtreecommitdiff
path: root/paramiko/dsskey.py
diff options
context:
space:
mode:
authorScott Maxwell <scott@codecobblers.com>2013-10-30 17:09:34 -0700
committerScott Maxwell <scott@codecobblers.com>2013-10-30 17:09:34 -0700
commit0e4ce3762a5b25c5d3eb89335495d3bb9054e3e7 (patch)
treea77bfec4e3a29e9827d4e75de932e34947536181 /paramiko/dsskey.py
parent339d73cc13765bea4dd5b683ca14b02c9baa589f (diff)
downloadparamiko-0e4ce3762a5b25c5d3eb89335495d3bb9054e3e7.tar.gz
Fix message sending
Create constants for byte messages, implement asbytes so many methods can take Message and key objects directly and split get_string into get_text and get_binary. Also, change int handling to use mpint with a flag whenever the int is greater than 32 bits.
Diffstat (limited to 'paramiko/dsskey.py')
-rw-r--r--paramiko/dsskey.py19
1 files changed, 11 insertions, 8 deletions
diff --git a/paramiko/dsskey.py b/paramiko/dsskey.py
index ff744888..715f9f60 100644
--- a/paramiko/dsskey.py
+++ b/paramiko/dsskey.py
@@ -56,7 +56,7 @@ class DSSKey (PKey):
else:
if msg is None:
raise SSHException('Key object may not be empty')
- if msg.get_string() != 'ssh-dss':
+ if msg.get_text() != 'ssh-dss':
raise SSHException('Invalid key')
self.p = msg.get_mpint()
self.q = msg.get_mpint()
@@ -64,14 +64,17 @@ class DSSKey (PKey):
self.y = msg.get_mpint()
self.size = util.bit_length(self.p)
- def __str__(self):
+ def asbytes(self):
m = Message()
m.add_string('ssh-dss')
m.add_mpint(self.p)
m.add_mpint(self.q)
m.add_mpint(self.g)
m.add_mpint(self.y)
- return str(m)
+ return m.asbytes()
+
+ def __str__(self):
+ return self.asbytes()
def __hash__(self):
h = hash(self.get_name())
@@ -114,14 +117,14 @@ class DSSKey (PKey):
return m
def verify_ssh_sig(self, data, msg):
- if len(str(msg)) == 40:
+ if len(msg.asbytes()) == 40:
# spies.com bug: signature has no header
- sig = str(msg)
+ sig = msg.asbytes()
else:
- kind = msg.get_string()
+ kind = msg.get_text()
if kind != 'ssh-dss':
return 0
- sig = msg.get_string()
+ sig = msg.get_binary()
# pull out (r, s) which are NOT encoded as mpints
sigR = util.inflate_long(sig[:20], 1)
@@ -140,7 +143,7 @@ class DSSKey (PKey):
b.encode(keylist)
except BERException:
raise SSHException('Unable to create ber encoding of key')
- return str(b)
+ return b.asbytes()
def write_private_key_file(self, filename, password=None):
self._write_private_key_file('DSA', filename, self._encode_key(), password)