BuildComplexityError builds the error message when password complexity checks fail
Generate a random password
IsComplexEnough return True if password meets complexity settings
IsPwned checks whether a password has been pwned NOTE: This func returns true if it encounters an error under the assumption that you ALWAYS want to check against HIBP, so not getting a response should block a password until it can be verified.
NewComplexity for preparation