def METHOD_NAME(context, password, *, username='', fast=False):
    """Check if a password is considered secure.
    A password is considered secure if it:
    - is at least 8 characters long
    - does not contain the username unless the username is <5 chars and the password is >16 chars long
    - does not contain the strings 'indico' (or common variations)
    - is not in the pwned password list
    :param context: A string indicating the context where the password is used
    :param password: The plaintext password
    :param username: The corresponding username (may be empty if not applicable)
    :param fast: Whether the check should finish quickly, even if that may
                 indicate not being able to check the password against the list
                 of pwned passwords. This should be used during interactive requests
                 where slowdowns are generally frowned upon (e.g. during login).
    :return: A string indicating why the password is bad, or `None if it's secure.
    """
    from indico.core import signals
    from indico.util.signals import values_from_signal
    # See https://pages.nist.gov/800-63-3/sp800-63b.html#-511-memorized-secrets for some useful
    # guidelines for passwords. Ideally we would also perform a dictionary check, but unless we
    # rely on someone installing OS packages with dictionaries we don't have one available, and
    # there's a good chance that single dictionary words are already included in the pwned password
    # list.
    if errors := values_from_signal(signals.core.check_password_secure.send(context, username=username,
                                                                            password=password),
                                    as_list=True):
        return errors[0]
    if len(password) < 8:
        return _('Passwords must be at least 8 characters long.')
    if re.search(r'[i1|]nd[1i|]c[o0]', password.lower()):
        return _('Passwords may not contain the word "indico" or variations.')
    if len(username) >= 5 and len(password) <= 16 and username.lower() in password.lower():
        return _('Passwords may not contain your username.')
    if check_password_pwned(password, fast=fast):
        return _('This password has been seen in previous data breaches.')