Return (code_verifier, code_challenge) for S256 PKCE.
()
| 162 | |
| 163 | |
| 164 | def _generate_pkce() -> tuple[str, str]: |
| 165 | """Return (code_verifier, code_challenge) for S256 PKCE.""" |
| 166 | verifier = secrets.token_urlsafe(64) |
| 167 | digest = hashlib.sha256(verifier.encode("ascii")).digest() |
| 168 | challenge = base64.urlsafe_b64encode(digest).rstrip(b"=").decode("ascii") |
| 169 | return verifier, challenge |
| 170 | |
| 171 | |
| 172 | # --------------------------------------------------------------------------- |