from _typeshed import Incomplete

CODE_VERIFIER_PATTERN: Incomplete
CODE_CHALLENGE_PATTERN: Incomplete

def create_s256_code_challenge(code_verifier): ...
def compare_plain_code_challenge(code_verifier, code_challenge): ...
def compare_s256_code_challenge(code_verifier, code_challenge): ...

class CodeChallenge:
    DEFAULT_CODE_CHALLENGE_METHOD: str
    SUPPORTED_CODE_CHALLENGE_METHOD: Incomplete
    CODE_CHALLENGE_METHODS: Incomplete
    required: Incomplete
    def __init__(self, required: bool = True) -> None: ...
    def __call__(self, grant) -> None: ...
    def validate_code_challenge(self, grant) -> None: ...
    def validate_code_verifier(self, grant) -> None: ...
    def get_authorization_code_challenge(self, authorization_code): ...
    def get_authorization_code_challenge_method(self, authorization_code): ...
