From be5542c05e46b500e47b94bc8a6254cae8335a8b Mon Sep 17 00:00:00 2001 From: "Jeremy T. Bouse" Date: Sun, 29 May 2011 08:16:54 -0400 Subject: Imported Upstream version 1.7.7.1 --- docs/paramiko.dsskey-pysrc.html | 195 ++++++++++++++++++++-------------------- 1 file changed, 98 insertions(+), 97 deletions(-) (limited to 'docs/paramiko.dsskey-pysrc.html') diff --git a/docs/paramiko.dsskey-pysrc.html b/docs/paramiko.dsskey-pysrc.html index 6a254ac..6e96318 100644 --- a/docs/paramiko.dsskey-pysrc.html +++ b/docs/paramiko.dsskey-pysrc.html @@ -151,27 +151,48 @@ paramiko.RSAKey.get_name" class="py-name" href="#" onclick="return doclink('link
91 - def can_sign(self):
92 return self.x is not None
93 -
94 - def sign_ssh_data(self, rpool, data): +
94 - def sign_ssh_data(self, rng, data):
95 digest = SHA.new(data).digest() 96 dss = DSA.construct((long(self.y), long(self.g), long(self.p), long(self.q), long(self.x))) 97 # generate a suitable k 98 qsize = len(util.deflate_long(self.q, 0)) 99 while True: -100 k = util.inflate_long(rpool.get_bytes(qsize), 1) +100 k = util.inflate_long(rng.read(qsize), 1) 101 if (k > 2) and (k < self.q): 102 break -103 r, s = dss.sign(util.inflate_long(digest, 1), k) -104 m = Message() -105 m.add_string('ssh-dss') +103 r, s = dss.sign(util.inflate_long(digest, 1), k) +104 m = Message() +105 m.add_string('ssh-dss') 106 # apparently, in rare cases, r or s may be shorter than 20 bytes! -107 rstr = util.deflate_long(r, 0) -108 sstr = util.deflate_long(s, 0) +107 rstr = util.deflate_long(r, 0) +108 sstr = util.deflate_long(s, 0) 109 if len(rstr) < 20: 110 rstr = '\x00' * (20 - len(rstr)) + rstr 111 if len(sstr) < 20: 112 sstr = '\x00' * (20 - len(sstr)) + sstr -113 m.add_string(rstr + sstr) +113 m.add_string(rstr + sstr) 114 return m
115
116 - def verify_ssh_sig(self, data, msg): @@ -179,28 +200,28 @@ paramiko.rng.StrongLockingRandomPool.get_bytes" class="py-name" href="#" onclick 118 # spies.com bug: signature has no header 119 sig = str(msg) 120 else: -121 kind = msg.get_string() +121 kind = msg.get_string() 122 if kind != 'ssh-dss': 123 return 0 -124 sig = msg.get_string() +124 sig = msg.get_string() 125 126 # pull out (r, s) which are NOT encoded as mpints -127 sigR = util.inflate_long(sig[:20], 1) -128 sigS = util.inflate_long(sig[20:], 1) -129 sigM = util.inflate_long(SHA.new(data).digest(), 1) +127 sigR = util.inflate_long(sig[:20], 1) +128 sigS = util.inflate_long(sig[20:], 1) +129 sigM = util.inflate_long(SHA.new(data).digest(), 1) 130 131 dss = DSA.construct((long(self.y), long(self.g), long(self.p), long(self.q))) 132 return dss.verify(sigM, (sigR, sigS))
133
134 - def _encode_key(self):
135 if self.x is None: -136 raise SSHException('Not enough key information') +136 raise SSHException('Not enough key information') 137 keylist = [ 0, self.p, self.q, self.g, self.y, self.x ] 138 try: -139 b = BER() -140 b.encode(keylist) -141 except BERException: -142 raise SSHException('Unable to create ber encoding of key') +139 b = BER() +140 b.encode(keylist) +141 except BERException: +142 raise SSHException('Unable to create ber encoding of key') 143 return str(b)
144
145 - def write_private_key_file(self, filename, password=None): @@ -222,85 +243,65 @@ paramiko.rng.StrongLockingRandomPool.get_bytes" class="py-name" href="#" onclick 161 @return: new private key 162 @rtype: L{DSSKey} 163 """ -164 randpool.stir() -165 dsa = DSA.generate(bits, randpool.get_bytes, progress_func) -166 key = DSSKey(vals=(dsa.p, dsa.q, dsa.g, dsa.y)) -167 key.x = dsa.x -168 return key -
169 generate = staticmethod(generate) +164 dsa = DSA.generate(bits, rng.read, progress_func) +165 key = DSSKey(vals=(dsa.p, dsa.q, dsa.g, dsa.y)) +166 key.x = dsa.x +167 return key +
168 generate = staticmethod(generate) +169 170 -171 -172 ### internals... +171 ### internals... +172 173 -174 -
175 - def _from_private_key_file(self, filename, password): -
176 data = self._read_private_key_file('DSA', filename, password) -177 self._decode_key(data) -
178 -
179 - def _from_private_key(self, file_obj, password): -
180 data = self._read_private_key('DSA', file_obj, password) -181 self._decode_key(data) -
182 -
183 - def _decode_key(self, data): -
184 # private key file contains: -185 # DSAPrivateKey = { version = 0, p, q, g, y, x } -186 try: -187 keylist = BER(data).decode() -188 except BERException, x: -189 raise SSHException('Unable to parse key file: ' + str(x)) -190 if (type(keylist) is not list) or (len(keylist) < 6) or (keylist[0] != 0): -191 raise SSHException('not a valid DSA private key file (bad ber encoding)') -192 self.p = keylist[1] -193 self.q = keylist[2] -194 self.g = keylist[3] -195 self.y = keylist[4] -196 self.x = keylist[5] -197 self.size = util.bit_length(self.p) -
198