def __init__(self, msg=None, data=None, filename=None, password=None, vals=None, file_obj=None): self.p = None self.q = None self.g = None self.y = None self.x = None if file_obj is not None: self._from_private_key(file_obj, password) return if filename is not None: self._from_private_key_file(filename, password) return if (msg is None) and (data is not None): msg = Message(data) if vals is not None: self.p, self.q, self.g, self.y = vals else: if msg is None: raise SSHException('Key object may not be empty') if msg.get_text() != 'ssh-dss': raise SSHException('Invalid key') self.p = msg.get_mpint() self.q = msg.get_mpint() self.g = msg.get_mpint() self.y = msg.get_mpint() self.size = util.bit_length(self.p)
def __init__(self, data=None, privdata=None, filename=None, password=None, vals=None, file_obj=None): self.n = None self.e = None self.d = None self.p = None self.q = None self.__public_key = None self.__private_key = None self.__rsassa_pss_signer = None self.__rsassa_pss_verifier = None if file_obj is not None: self._from_private_key(file_obj, password) return if filename is not None: self._from_private_key_file(filename, password) return if vals is not None: self.e, self.n = vals else: if data is None: if privdata is None: raise SshException("Key object may not be empty") else: self._decode_key(privdata) else: i, v = sshtype.parseString(data) if v != "ssh-rsa": raise SshException("Invalid key") l, self.e = sshtype.parseMpint(data[i:]) i += l l, self.n = sshtype.parseMpint(data[i:]) self.size = util.bit_length(self.n)
def __init__(self, data=None, privdata=None, filename=None, password=None, vals=None, file_obj=None): self.n = None self.e = None self.d = None self.p = None self.q = None self.__public_key = None self.__public_key_bytes = None self.__private_key = None self.__rsassa_pss_signer = None self.__rsassa_pss_verifier = None if file_obj is not None: self._from_private_key(file_obj, password) return if filename is not None: self._from_private_key_file(filename, password) return if vals is not None: self.e, self.n = vals else: if data is None: if privdata is None: raise SshException('Key object may not be empty') else: self._decode_key(privdata) else: i, v = sshtype.parseString(data) if v != 'ssh-rsa': raise SshException('Invalid key') l, self.e = sshtype.parseMpint(data[i:]) i += l l, self.n = sshtype.parseMpint(data[i:]) self.size = util.bit_length(self.n)
def _decode_key(self, data): # private key file contains: # DSAPrivateKey = { version = 0, p, q, g, y, x } try: keylist = BER(data).decode() except BERException as e: raise SSHException('Unable to parse key file: ' + str(e)) if (type(keylist) is not list) or (len(keylist) < 6) or (keylist[0] != 0): raise SSHException('not a valid DSA private key file (bad ber encoding)') self.p = keylist[1] self.q = keylist[2] self.g = keylist[3] self.y = keylist[4] self.x = keylist[5] self.size = util.bit_length(self.p)
def _decode_key(self, data): # private key file contains: # DSAPrivateKey = { version = 0, p, q, g, y, x } try: keylist = BER(data).decode() except BERException as e: raise SSHException('Unable to parse key file: ' + str(e)) if (type(keylist) is not list) or (len(keylist) < 6) or (keylist[0] != 0): raise SSHException( 'not a valid DSA private key file (bad ber encoding)') self.p = keylist[1] self.q = keylist[2] self.g = keylist[3] self.y = keylist[4] self.x = keylist[5] self.size = util.bit_length(self.p)