demo / frontend /src /utils /crypto.ts
Pierre Andrews
Initial commit
f52d137
raw
history blame
852 Bytes
export const base64UrlEncode = (arrayBuffer: ArrayBuffer): string => {
const bytes = new Uint8Array(arrayBuffer);
let binary = "";
for (let i = 0; i < bytes.byteLength; i++)
binary += String.fromCharCode(bytes[i]);
return btoa(binary)
.replace(/\+/g, "-")
.replace(/\//g, "_")
.replace(/=+$/, "");
};
export const sha256 = async (input: string): Promise<string> => {
const encoder = new TextEncoder();
const data = encoder.encode(input);
const digest = await crypto.subtle.digest("SHA-256", data);
return base64UrlEncode(digest);
};
export const randomString = (size = 64): string => {
const charset =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~";
const values = crypto.getRandomValues(new Uint8Array(size));
return Array.from(values, (v) => charset[v % charset.length]).join("");
};