def remove_passphrase(current_passphrase: Optional[str]) -> bool: """ Removes the user's keyring passphrase. The keyring will be re-encrypted to the default passphrase. """ success = False if not Keychain.has_master_passphrase() or using_default_passphrase(): print("Passphrase is not currently set") success = False else: # Try the default passphrase first if using_default_passphrase(): current_passphrase = default_passphrase() # Prompt for the current passphrase, if necessary if not current_passphrase: try: current_passphrase = obtain_current_passphrase( "Current Passphrase: ") except Exception as e: print(f"Unable to confirm current passphrase: {e}") success = False if current_passphrase: try: Keychain.remove_master_passphrase(current_passphrase) success = True except Exception as e: print(f"Unable to remove passphrase: {e}") success = False return success
def set_or_update_passphrase(passphrase: Optional[str], current_passphrase: Optional[str]) -> bool: # Prompt for the current passphrase, if necessary if Keychain.has_master_passphrase(): # Try the default passphrase first if using_default_passphrase(): current_passphrase = default_passphrase() if not current_passphrase: try: current_passphrase = obtain_current_passphrase( "Current Passphrase: ") except Exception as e: print(f"Unable to confirm current passphrase: {e}") sys.exit(1) success = False new_passphrase = passphrase try: # Prompt for the new passphrase, if necessary if not new_passphrase: new_passphrase = prompt_for_new_passphrase() if new_passphrase == current_passphrase: raise ValueError("passphrase is unchanged") Keychain.set_master_passphrase(current_passphrase=current_passphrase, new_passphrase=new_passphrase) success = True except Exception as e: print(f"Unable to set or update passphrase: {e}") success = False return success
def get_symmetric_key(salt: bytes) -> bytes: from chia.util.keychain import obtain_current_passphrase try: passphrase = obtain_current_passphrase(use_passphrase_cache=True) except Exception as e: print(f"Unable to unlock the keyring: {e}") sys.exit(1) return FileKeyring.symmetric_key_from_passphrase(passphrase, salt)
def get_current_passphrase() -> Optional[str]: if not Keychain.has_master_passphrase(): return None current_passphrase = None if using_default_passphrase(): current_passphrase = default_passphrase() else: try: current_passphrase = obtain_current_passphrase() except Exception as e: print(f"Unable to confirm current passphrase: {e}") raise e return current_passphrase