ribaunt 0.2.2 → 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +113 -10
- package/demo/lib/ribaunt-solver.wasm +0 -0
- package/demo/lib/solver-worker.js +174 -0
- package/demo/lib/solver-worker.js.map +1 -0
- package/demo/lib/solver.js +135 -0
- package/demo/lib/solver.js.map +1 -0
- package/demo/lib/wasm-solver.js +296 -0
- package/demo/lib/wasm-solver.js.map +1 -0
- package/demo/lib/widget-browser.js +9 -0
- package/demo/lib/widget-browser.js.map +1 -0
- package/demo/lib/widget.js +942 -0
- package/demo/lib/widget.js.map +1 -0
- package/demo/lib/worker-client.js +128 -0
- package/demo/lib/worker-client.js.map +1 -0
- package/dist/cjs/index.d.ts +48 -3
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +196 -17
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/risk.d.ts +124 -0
- package/dist/cjs/risk.d.ts.map +1 -0
- package/dist/cjs/risk.js +213 -0
- package/dist/cjs/risk.js.map +1 -0
- package/dist/index.d.ts +48 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +193 -16
- package/dist/index.js.map +1 -1
- package/dist/ribaunt-solver.wasm +0 -0
- package/dist/risk.d.ts +124 -0
- package/dist/risk.d.ts.map +1 -0
- package/dist/risk.js +202 -0
- package/dist/risk.js.map +1 -0
- package/dist/solver-worker.d.ts.map +1 -1
- package/dist/solver-worker.js +166 -7
- package/dist/solver-worker.js.map +1 -1
- package/dist/solver.d.ts +1 -0
- package/dist/solver.d.ts.map +1 -1
- package/dist/solver.js +38 -3
- package/dist/solver.js.map +1 -1
- package/dist/wasm-solver.d.ts +29 -0
- package/dist/wasm-solver.d.ts.map +1 -0
- package/dist/wasm-solver.js +296 -0
- package/dist/wasm-solver.js.map +1 -0
- package/dist/widget-browser.d.ts +3 -2
- package/dist/widget-browser.d.ts.map +1 -1
- package/dist/widget-browser.js +1 -1
- package/dist/widget-browser.js.map +1 -1
- package/dist/widget-react.d.ts +4 -1
- package/dist/widget-react.d.ts.map +1 -1
- package/dist/widget-react.js +102 -14
- package/dist/widget-react.js.map +1 -1
- package/dist/widget.d.ts +42 -14
- package/dist/widget.d.ts.map +1 -1
- package/dist/widget.js +254 -12
- package/dist/widget.js.map +1 -1
- package/dist/worker-client.d.ts +7 -1
- package/dist/worker-client.d.ts.map +1 -1
- package/dist/worker-client.js +69 -19
- package/dist/worker-client.js.map +1 -1
- package/package.json +22 -9
- package/context7.json +0 -4
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript adapter for the WASM SHA-256 solver.
|
|
3
|
+
* Contains all WASM-specific implementation details and validates boundary values.
|
|
4
|
+
*/
|
|
5
|
+
let wasmInstance = null;
|
|
6
|
+
let wasmState = 'uninitialized';
|
|
7
|
+
let loadPromise = null;
|
|
8
|
+
let cachedChallenge = null;
|
|
9
|
+
let cachedPtr = 0;
|
|
10
|
+
let cachedLen = 0;
|
|
11
|
+
const VALID_HASH_RE = /^[a-f0-9]{64}$/;
|
|
12
|
+
const VALID_NONCE_RE = /^\d+$/;
|
|
13
|
+
const VALID_SHA256_HEX_RE = /^[a-f0-9]{64}$/i;
|
|
14
|
+
// Embedded SHA-256 of dist/ribaunt-solver.wasm for integrity verification.
|
|
15
|
+
// Recompute with `shasum -a 256 dist/ribaunt-solver.wasm` after rebuilding wasm.
|
|
16
|
+
const EMBEDDED_WASM_SHA256 = '774398452596d67491a6ee5bd6291c9665dc4fc1a83db15f14dbbb4058f74c3e';
|
|
17
|
+
function isValidHash(hash) {
|
|
18
|
+
return VALID_HASH_RE.test(hash);
|
|
19
|
+
}
|
|
20
|
+
function isValidNonce(nonce) {
|
|
21
|
+
return nonce.length > 0 && VALID_NONCE_RE.test(nonce);
|
|
22
|
+
}
|
|
23
|
+
function bytesToHex(bytes) {
|
|
24
|
+
return Array.from(bytes, (b) => b.toString(16).padStart(2, '0')).join('');
|
|
25
|
+
}
|
|
26
|
+
async function sha256Hex(bytes) {
|
|
27
|
+
const subtle = typeof crypto !== 'undefined' ? crypto.subtle : undefined;
|
|
28
|
+
if (subtle) {
|
|
29
|
+
const digest = await subtle.digest('SHA-256', bytes);
|
|
30
|
+
return bytesToHex(new Uint8Array(digest));
|
|
31
|
+
}
|
|
32
|
+
// Node fallback when Web Crypto is unavailable
|
|
33
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
34
|
+
const nodeCrypto = await import('node:crypto');
|
|
35
|
+
return nodeCrypto.createHash('sha256').update(bytes).digest('hex');
|
|
36
|
+
}
|
|
37
|
+
function getExpectedWasmSha256() {
|
|
38
|
+
const g = globalThis;
|
|
39
|
+
const fromGlobal = typeof g.__RIBAUNT_WASM_SHA256__ === 'string' ? g.__RIBAUNT_WASM_SHA256__.trim().toLowerCase() : '';
|
|
40
|
+
if (fromGlobal && VALID_SHA256_HEX_RE.test(fromGlobal))
|
|
41
|
+
return fromGlobal;
|
|
42
|
+
const proc = typeof process !== 'undefined' ? process : undefined;
|
|
43
|
+
const fromEnv = proc?.env?.RIBAUNT_WASM_SHA256?.trim().toLowerCase() ?? '';
|
|
44
|
+
if (fromEnv && VALID_SHA256_HEX_RE.test(fromEnv))
|
|
45
|
+
return fromEnv;
|
|
46
|
+
if (EMBEDDED_WASM_SHA256 && VALID_SHA256_HEX_RE.test(EMBEDDED_WASM_SHA256))
|
|
47
|
+
return EMBEDDED_WASM_SHA256.toLowerCase();
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
async function loadWasmBytes() {
|
|
51
|
+
const candidates = [];
|
|
52
|
+
try {
|
|
53
|
+
candidates.push(new URL('./ribaunt-solver.wasm', import.meta.url));
|
|
54
|
+
}
|
|
55
|
+
catch (_e) {
|
|
56
|
+
void _e;
|
|
57
|
+
}
|
|
58
|
+
try {
|
|
59
|
+
candidates.push(new URL('../dist/ribaunt-solver.wasm', import.meta.url));
|
|
60
|
+
}
|
|
61
|
+
catch (_e) {
|
|
62
|
+
void _e;
|
|
63
|
+
}
|
|
64
|
+
try {
|
|
65
|
+
candidates.push(new URL('./dist/ribaunt-solver.wasm', import.meta.url));
|
|
66
|
+
}
|
|
67
|
+
catch (_e) {
|
|
68
|
+
void _e;
|
|
69
|
+
}
|
|
70
|
+
// Browser / worker path: try fetch for each candidate
|
|
71
|
+
if (typeof fetch === 'function') {
|
|
72
|
+
for (const cand of candidates) {
|
|
73
|
+
try {
|
|
74
|
+
const res = await fetch(cand);
|
|
75
|
+
if (res.ok) {
|
|
76
|
+
const buf = await res.arrayBuffer();
|
|
77
|
+
if (buf.byteLength > 0)
|
|
78
|
+
return new Uint8Array(buf);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
catch (_e) {
|
|
82
|
+
void _e;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// Node.js fallback: try fs for candidates plus cwd
|
|
87
|
+
const fsCandidates = [...candidates];
|
|
88
|
+
try {
|
|
89
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
90
|
+
const pathMod = await import('node:path');
|
|
91
|
+
const cwd = typeof process !== 'undefined' ? process.cwd() : '';
|
|
92
|
+
if (cwd) {
|
|
93
|
+
fsCandidates.push(pathMod.resolve(cwd, 'dist/ribaunt-solver.wasm'));
|
|
94
|
+
fsCandidates.push(pathMod.resolve(cwd, 'dist/cjs/ribaunt-solver.wasm'));
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
catch (_e) {
|
|
98
|
+
void _e;
|
|
99
|
+
}
|
|
100
|
+
try {
|
|
101
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
102
|
+
const fs = await import('node:fs/promises');
|
|
103
|
+
for (const cand of fsCandidates) {
|
|
104
|
+
try {
|
|
105
|
+
const bytes = await fs.readFile(cand);
|
|
106
|
+
if (bytes && bytes.length > 0)
|
|
107
|
+
return bytes;
|
|
108
|
+
}
|
|
109
|
+
catch (_e) {
|
|
110
|
+
void _e;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
catch (_e) {
|
|
115
|
+
void _e;
|
|
116
|
+
}
|
|
117
|
+
throw new Error('WASM asset fetch failure');
|
|
118
|
+
}
|
|
119
|
+
async function instantiateWasm() {
|
|
120
|
+
if (typeof WebAssembly === 'undefined')
|
|
121
|
+
return false;
|
|
122
|
+
try {
|
|
123
|
+
const bytes = await loadWasmBytes();
|
|
124
|
+
const expectedSha256 = getExpectedWasmSha256();
|
|
125
|
+
if (!expectedSha256)
|
|
126
|
+
return false;
|
|
127
|
+
const actualSha256 = await sha256Hex(bytes);
|
|
128
|
+
if (actualSha256 !== expectedSha256)
|
|
129
|
+
return false;
|
|
130
|
+
const mod = await WebAssembly.compile(bytes);
|
|
131
|
+
const instance = await WebAssembly.instantiate(mod, {});
|
|
132
|
+
const exp = instance.exports;
|
|
133
|
+
if (!exp.memory || typeof exp.solve_batch !== 'function' || typeof exp.get_hash_ptr !== 'function' || typeof exp.alloc !== 'function') {
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
wasmInstance = instance;
|
|
137
|
+
wasmState = 'wasm-ready';
|
|
138
|
+
return true;
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
export async function ensureWasm() {
|
|
145
|
+
if (wasmState === 'wasm-ready')
|
|
146
|
+
return true;
|
|
147
|
+
if (wasmState === 'wasm-unavailable')
|
|
148
|
+
return false;
|
|
149
|
+
if (loadPromise)
|
|
150
|
+
return loadPromise;
|
|
151
|
+
loadPromise = (async () => {
|
|
152
|
+
const ok = await instantiateWasm();
|
|
153
|
+
wasmState = ok ? 'wasm-ready' : 'wasm-unavailable';
|
|
154
|
+
return ok;
|
|
155
|
+
})();
|
|
156
|
+
return loadPromise;
|
|
157
|
+
}
|
|
158
|
+
export function getWasmState() {
|
|
159
|
+
return wasmState;
|
|
160
|
+
}
|
|
161
|
+
export function resetWasmForTesting() {
|
|
162
|
+
wasmInstance = null;
|
|
163
|
+
wasmState = 'uninitialized';
|
|
164
|
+
loadPromise = null;
|
|
165
|
+
cachedChallenge = null;
|
|
166
|
+
cachedPtr = 0;
|
|
167
|
+
cachedLen = 0;
|
|
168
|
+
}
|
|
169
|
+
// For testing: allow injecting failure or mock
|
|
170
|
+
export function setWasmUnavailableForTesting() {
|
|
171
|
+
wasmState = 'wasm-unavailable';
|
|
172
|
+
wasmInstance = null;
|
|
173
|
+
loadPromise = Promise.resolve(false);
|
|
174
|
+
}
|
|
175
|
+
export function isWasmAvailable() {
|
|
176
|
+
return wasmState === 'wasm-ready';
|
|
177
|
+
}
|
|
178
|
+
export function resetWasmHeap() {
|
|
179
|
+
cachedChallenge = null;
|
|
180
|
+
cachedPtr = 0;
|
|
181
|
+
cachedLen = 0;
|
|
182
|
+
if (wasmInstance) {
|
|
183
|
+
try {
|
|
184
|
+
const exp = wasmInstance.exports;
|
|
185
|
+
exp.reset_heap?.();
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
// ignore
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Synchronous batch solver - must be called after ensureWasm() succeeds.
|
|
194
|
+
* Encodes challenge as UTF-8, allocates in WASM memory, calls solve_batch,
|
|
195
|
+
* validates and returns result.
|
|
196
|
+
*/
|
|
197
|
+
export function solveBatch(challenge, startNonce, batchSize, difficulty) {
|
|
198
|
+
if (wasmState !== 'wasm-ready' || !wasmInstance) {
|
|
199
|
+
throw new Error('WASM solver not initialized');
|
|
200
|
+
}
|
|
201
|
+
// Validate inputs
|
|
202
|
+
if (!Number.isInteger(difficulty) || difficulty < 1 || difficulty > 64) {
|
|
203
|
+
throw new Error('Invalid difficulty');
|
|
204
|
+
}
|
|
205
|
+
if (!Number.isInteger(batchSize) || batchSize <= 0 || batchSize > 16384) {
|
|
206
|
+
throw new Error('Invalid batchSize');
|
|
207
|
+
}
|
|
208
|
+
if (!Number.isInteger(startNonce) || startNonce < 0 || !Number.isFinite(startNonce)) {
|
|
209
|
+
throw new Error('Invalid startNonce');
|
|
210
|
+
}
|
|
211
|
+
if (typeof challenge !== 'string') {
|
|
212
|
+
throw new Error('Invalid challenge');
|
|
213
|
+
}
|
|
214
|
+
// Overflow guard before calling WASM (also checked inside)
|
|
215
|
+
if (startNonce > 0xffffffff - batchSize + 1) {
|
|
216
|
+
throw new Error('Nonce range exceeds u32');
|
|
217
|
+
}
|
|
218
|
+
// Also guard signed limit to avoid sentinel confusion (max 2^31-1 for v1); allow final batch where last nonce is 0x7fffffff
|
|
219
|
+
if (startNonce > 0x7fffffff || startNonce + batchSize > 0x7fffffff + 1) {
|
|
220
|
+
throw new Error('Nonce exceeds wasm signed limit');
|
|
221
|
+
}
|
|
222
|
+
const exp = wasmInstance.exports;
|
|
223
|
+
const mem = exp.memory;
|
|
224
|
+
let ptr;
|
|
225
|
+
let challengeLen;
|
|
226
|
+
if (cachedChallenge === challenge && cachedPtr !== 0) {
|
|
227
|
+
ptr = cachedPtr;
|
|
228
|
+
challengeLen = cachedLen;
|
|
229
|
+
}
|
|
230
|
+
else {
|
|
231
|
+
// Encode challenge as UTF-8 bytes
|
|
232
|
+
const encoder = new TextEncoder();
|
|
233
|
+
const challengeBytes = encoder.encode(challenge);
|
|
234
|
+
if (challengeBytes.length > 1014) {
|
|
235
|
+
throw new Error('Challenge too long for WASM solver');
|
|
236
|
+
}
|
|
237
|
+
const newPtr = exp.alloc(challengeBytes.length);
|
|
238
|
+
// Refresh view after possible growth
|
|
239
|
+
const memU8 = new Uint8Array(mem.buffer);
|
|
240
|
+
// Bounds check: ensure ptr + len within memory
|
|
241
|
+
if (newPtr < 0 || newPtr + challengeBytes.length > memU8.length) {
|
|
242
|
+
throw new Error('WASM memory allocation out of bounds');
|
|
243
|
+
}
|
|
244
|
+
memU8.set(challengeBytes, newPtr);
|
|
245
|
+
cachedChallenge = challenge;
|
|
246
|
+
cachedPtr = newPtr;
|
|
247
|
+
cachedLen = challengeBytes.length;
|
|
248
|
+
ptr = newPtr;
|
|
249
|
+
challengeLen = cachedLen;
|
|
250
|
+
}
|
|
251
|
+
let result;
|
|
252
|
+
try {
|
|
253
|
+
result = exp.solve_batch(ptr, challengeLen, startNonce >>> 0, batchSize, difficulty);
|
|
254
|
+
}
|
|
255
|
+
catch (e) {
|
|
256
|
+
throw new Error(`WASM solver trap: ${e instanceof Error ? e.message : String(e)}`, { cause: e });
|
|
257
|
+
}
|
|
258
|
+
if (result === -1) {
|
|
259
|
+
return { found: false };
|
|
260
|
+
}
|
|
261
|
+
if (result === -2) {
|
|
262
|
+
throw new Error('WASM solver overflow');
|
|
263
|
+
}
|
|
264
|
+
if (result < 0) {
|
|
265
|
+
throw new Error(`WASM solver internal error: ${result}`);
|
|
266
|
+
}
|
|
267
|
+
// Validate nonce
|
|
268
|
+
const nonceStr = String(result >>> 0);
|
|
269
|
+
if (!isValidNonce(nonceStr)) {
|
|
270
|
+
throw new Error('WASM returned invalid nonce');
|
|
271
|
+
}
|
|
272
|
+
// Read hash
|
|
273
|
+
const hashPtr = exp.get_hash_ptr();
|
|
274
|
+
const hashLen = 32;
|
|
275
|
+
const mem2 = new Uint8Array(mem.buffer);
|
|
276
|
+
if (hashPtr < 0 || hashPtr + hashLen > mem2.length) {
|
|
277
|
+
throw new Error('WASM hash pointer out of bounds');
|
|
278
|
+
}
|
|
279
|
+
const hashBytes = mem2.slice(hashPtr, hashPtr + hashLen);
|
|
280
|
+
const hashHex = Array.from(hashBytes).map(b => b.toString(16).padStart(2, '0')).join('');
|
|
281
|
+
if (!isValidHash(hashHex)) {
|
|
282
|
+
throw new Error('WASM returned invalid hash');
|
|
283
|
+
}
|
|
284
|
+
if (!hashHex.startsWith('0'.repeat(difficulty))) {
|
|
285
|
+
throw new Error('WASM returned hash that does not satisfy difficulty');
|
|
286
|
+
}
|
|
287
|
+
// Additional validation: ensure hash corresponds to challenge+nonce (defense in depth)
|
|
288
|
+
// We trust WASM but validate shape; deeper verification (re-hashing in JS) could be done
|
|
289
|
+
// but would duplicate work. We just validate invariants.
|
|
290
|
+
return { found: true, nonce: nonceStr, hash: hashHex };
|
|
291
|
+
}
|
|
292
|
+
// Re-export for worker to use TextEncoder check
|
|
293
|
+
export function isTextEncoderAvailable() {
|
|
294
|
+
return typeof TextEncoder !== 'undefined';
|
|
295
|
+
}
|
|
296
|
+
//# sourceMappingURL=wasm-solver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wasm-solver.js","sourceRoot":"","sources":["../src/wasm-solver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser-only entry point for the Ribaunt Widget
|
|
3
|
+
* This file only exports the web component, not the server-side functions
|
|
4
|
+
*/
|
|
5
|
+
export { RibauntWidget, WidgetError } from './widget.js';
|
|
6
|
+
export { calibrateBrowser, calibrateClient } from './solver.js';
|
|
7
|
+
// Auto-register the widget when imported
|
|
8
|
+
import './widget.js';
|
|
9
|
+
//# sourceMappingURL=widget-browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"widget-browser.js","sourceRoot":"","sources":["../src/widget-browser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AASzD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAA0B,MAAM,aAAa,CAAC;AAExF,yCAAyC;AACzC,OAAO,aAAa,CAAC"}
|