From 557c0a0784b23ff16a312373fd6a74c190b56704 Mon Sep 17 00:00:00 2001 From: Nicholas Jitkoff Date: Mon, 13 Jun 2022 00:05:12 -0700 Subject: [PATCH] add hashstring --- docs/bitty.js | 19 +++++++++++++++++++ docs/render.html | 4 +--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/docs/bitty.js b/docs/bitty.js index b3d29fc..666be07 100644 --- a/docs/bitty.js +++ b/docs/bitty.js @@ -255,6 +255,24 @@ function decompressDataURL(dataURL, preamble, callback) { } } +async function hashString(string, base = 36) { + const arrayBuffer = await(new TextEncoder().encode(string)) + const hashAsArrayBuffer = await crypto.subtle.digest('SHA-256', arrayBuffer); + const uint8ViewOfHash = new Uint8Array(hashAsArrayBuffer); + const hashAsHex = Array.from(uint8ViewOfHash).map(b => b.toString(16).padStart(2, '0')).join(''); + if (base == 16) return hashAsHex; + + if (base == 36) { + const guid = BigInt("0x" + hashAsHex); + const asBase36 = guid.toString(36).toLowerCase(); + return asBase36; + } + + const hashAsBase64 = btoa(String.fromCharCode.apply(null, uint8ViewOfHash)); + hashAsBase64.replace(/=/g,'').replace(/[\+\/+]/g, "-").toLowerCase(); + return hashAsBase64; +} + function compressString(string, encoding = LZMA64_MARKER, callback) { if (encoding == LZMA64_MARKER) { loadScript("/js/lzma/lzma_worker-min.js", () => { @@ -382,6 +400,7 @@ export { decompressString, compressDataURL, decompressDataURL, + hashString, BASE64_MARKER, LZMA64_MARKER, GZIP64_MARKER, diff --git a/docs/render.html b/docs/render.html index 37037be..4c68f1a 100644 --- a/docs/render.html +++ b/docs/render.html @@ -1,3 +1 @@ - - -` +