def _parse_response(self): response_length = unpack_int(self.socket.recv(4, socket.MSG_WAITALL))[0] if response_length == 1: raise ValueError("Agent failed") response = self.socket.recv(response_length, socket.MSG_WAITALL) status = ord(response[0]) if status != SSHAgent.SSH2_AGENT_SIGN_RESPONSE: raise ValueError("Invalid response from agent") _, remainder = unpack_int(response[1:]) _, remainder = unpack_string(remainder) response, _ = unpack_string(remainder) return response
def from_string(cls, key): """ Loads an RFC 4716 formatted public key. """ pubkey = cls() if key.startswith('ssh-'): pubkey.hashed = key.split()[1] else: pubkey.hashed = key pubkey.key_type, remainder = unpack_string(pubkey.blob) if pubkey.key_type == 'ssh-rsa': e, n = get_packed_mp_ints(remainder, 2) pubkey.instance = RSA.new_pub_key((e, n)) elif pubkey.key_type == 'ssh-dss': p, q, g, y = get_packed_mp_ints(remainder, 4) pubkey.instance = DSA.set_params(p, q, g) return pubkey