ultisuite-client/lib/auth/pkce.ts
2026-05-25 13:52:40 +02:00

27 lines
785 B
TypeScript

function base64UrlEncode(buffer: ArrayBuffer) {
const bytes = new Uint8Array(buffer)
let binary = ""
for (const b of bytes) {
binary += String.fromCharCode(b)
}
return btoa(binary).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "")
}
export function randomString(byteLength = 32) {
const bytes = new Uint8Array(byteLength)
crypto.getRandomValues(bytes)
return base64UrlEncode(bytes.buffer)
}
export async function sha256Base64Url(input: string) {
const data = new TextEncoder().encode(input)
const digest = await crypto.subtle.digest("SHA-256", data)
return base64UrlEncode(digest)
}
export async function createPkcePair() {
const verifier = randomString(32)
const challenge = await sha256Base64Url(verifier)
return { verifier, challenge }
}