code: def generate_key_bytes(hashclass, salt, key, nbytes):
      
      keydata = ''
      digest = ''
      if len(salt) > 8:
          salt = salt[:8]
      while nbytes > 0:
          hash_obj = hashclass.new()
          if len(digest) > 0:
              hash_obj.update(digest)
          hash_obj.update(key)
          hash_obj.update(salt)
          digest = hash_obj.digest()
          size = min(nbytes, len(digest))
          keydata += digest[:size]
          nbytes -= size
      return keydata
docs: Given a password, passphrase, or other human-source key, scramble it
      through a secure hash into some keyworthy bytes.  This specific algorithm
      is used for encrypting/decrypting private key files.
  
      @param hashclass: class from L{Crypto.Hash} that can be used as a secure
          hashing function (like C{MD5} or C{SHA}).
      @type hashclass: L{Crypto.Hash}
      @param salt: data to salt the hash with.
      @type salt: string
      @param key: human-entered password or passphrase.
      @type key: string
      @param nbytes: number of bytes to generate.
      @type nbytes: int
      @return: key data
      @rtype: string