CoolFace
Datasetpublic

basant307/AI_Governance_Project

sourceHugging Faceapache-2.0updated 2mo agoView on Hugging Face
0likes48downloads
index.browser.js73 linesDownload Raw Back to dist
1let crypto;2crypto = globalThis.crypto; // web browsers3/**4 * Creates an array of length `size` of random bytes5 * @param size6 * @returns Array of random ints (0 to 255)7 */8async function getRandomValues(size) {9    return (await crypto).getRandomValues(new Uint8Array(size));10}11/** Generate cryptographically strong random string12 * @param size The desired length of the string13 * @returns The random string14 */15async function random(size) {16    const mask = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._~";17    let result = "";18    const randomUints = await getRandomValues(size);19    for (let i = 0; i < size; i++) {20        // cap the value of the randomIndex to mask.length - 121        const randomIndex = randomUints[i] % mask.length;22        result += mask[randomIndex];23    }24    return result;25}26/** Generate a PKCE challenge verifier27 * @param length Length of the verifier28 * @returns A random verifier `length` characters long29 */30async function generateVerifier(length) {31    return await random(length);32}33/** Generate a PKCE code challenge from a code verifier34 * @param code_verifier35 * @returns The base64 url encoded code challenge36 */37export async function generateChallenge(code_verifier) {38    const buffer = await (await crypto).subtle.digest("SHA-256", new TextEncoder().encode(code_verifier));39    // Generate base64url string40    // btoa is deprecated in Node.js but is used here for web browser compatibility41    // (which has no good replacement yet, see also https://github.com/whatwg/html/issues/6811)42    return btoa(String.fromCharCode(...new Uint8Array(buffer)))43        .replace(/\//g, '_')44        .replace(/\+/g, '-')45        .replace(/=/g, '');46}47/** Generate a PKCE challenge pair48 * @param length Length of the verifer (between 43-128). Defaults to 43.49 * @returns PKCE challenge pair50 */51export default async function pkceChallenge(length) {52    if (!length)53        length = 43;54    if (length < 43 || length > 128) {55        throw `Expected a length between 43 and 128. Received ${length}.`;56    }57    const verifier = await generateVerifier(length);58    const challenge = await generateChallenge(verifier);59    return {60        code_verifier: verifier,61        code_challenge: challenge,62    };63}64/** Verify that a code_verifier produces the expected code challenge65 * @param code_verifier66 * @param expectedChallenge The code challenge to verify67 * @returns True if challenges are equal. False otherwise.68 */69export async function verifyChallenge(code_verifier, expectedChallenge) {70    const actualChallenge = await generateChallenge(code_verifier);71    return actualChallenge === expectedChallenge;72}73 
basant307/AI_Governance_Project · CoolFace