docs: def restore(path, password_file=None):
      """
      Retrieves a file from the atk vault and restores it to its original
      location, re-encrypting it if it has changed.
  
      :param path: path to original file
      """
      vault = VaultLib(get_vault_password(password_file))
      atk_path = os.path.join(ATK_VAULT, path)
  
      # Load stored data
      with open(os.path.join(atk_path, 'encrypted'), 'rb') as f:
          old_data = f.read()
      with open(os.path.join(atk_path, 'hash'), 'rb') as f:
          old_hash = f.read()
  
      # Load new data
      with open(path, 'rb') as f:
          new_data = f.read()
          new_hash = hashlib.sha1(new_data).hexdigest()
  
      # Determine whether to re-encrypt
      if old_hash != new_hash:
          new_data = vault.encrypt(new_data)
      else:
          new_data = old_data
  
      # Update file
      with open(path, 'wb') as f:
          f.write(new_data)
  
      # Clean atk vault
      os.remove(os.path.join(atk_path, 'encrypted'))
      os.remove(os.path.join(atk_path, 'hash'))