summaryrefslogtreecommitdiff
path: root/static/src/assets/solvePow.js
diff options
context:
space:
mode:
Diffstat (limited to 'static/src/assets/solvePow.js')
-rw-r--r--static/src/assets/solvePow.js28
1 files changed, 28 insertions, 0 deletions
diff --git a/static/src/assets/solvePow.js b/static/src/assets/solvePow.js
new file mode 100644
index 0000000..900400c
--- /dev/null
+++ b/static/src/assets/solvePow.js
@@ -0,0 +1,28 @@
+const fromHexString = hexString =>
+ new Uint8Array(hexString.match(/.{1,2}/g).map(byte => parseInt(byte, 16)));
+
+const toHexString = bytes =>
+ bytes.reduce((str, byte) => str + byte.toString(16).padStart(2, '0'), '');
+
+onmessage = async (e) => {
+ const seed = fromHexString(e.data.seedHex);
+ const target = e.data.target;
+
+ const fullBuf = new ArrayBuffer(seed.byteLength*2);
+
+ const fullBufSeed = new Uint8Array(fullBuf, 0, seed.byteLength);
+ seed.forEach((v, i) => fullBufSeed[i] = v);
+
+ const randBuf = new Uint8Array(fullBuf, seed.byteLength);
+
+ while (true) {
+ crypto.getRandomValues(randBuf);
+ const digest = await crypto.subtle.digest('SHA-512', fullBuf);
+ const digestView = new DataView(digest);
+ if (digestView.getUint32(0) < target) {
+ postMessage(toHexString(randBuf));
+ return;
+ }
+ }
+
+};