diff --git a/.prettierrc.cjs b/.prettierrc.cjs index 9d69897..4a6993a 100644 --- a/.prettierrc.cjs +++ b/.prettierrc.cjs @@ -1,4 +1,4 @@ -// Copyright 2017-2025 @polkadot/wasm-crypto authors & contributors +// Copyright 2017-2026 @pezkuwi/wasm-crypto authors & contributors // SPDX-License-Identifier: Apache-2.0 -module.exports = require('@polkadot/dev/config/prettier.cjs'); +module.exports = require('@pezkuwi/dev/config/prettier.cjs'); diff --git a/eslint.config.js b/eslint.config.js index b1fc231..907211b 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -10,7 +10,9 @@ export default [ 'mod.ts', '**/bytes.js', '**/build/**', - '**/build-*/**' + '**/build-*/**', + // compiled sources only; there is nothing here to lint + 'packages/scure-sr25519/lib/**' ] } ]; diff --git a/packages/wasm-bridge/src/wbg.ts b/packages/wasm-bridge/src/wbg.ts index fcaff9b..4fdcbff 100644 --- a/packages/wasm-bridge/src/wbg.ts +++ b/packages/wasm-bridge/src/wbg.ts @@ -179,24 +179,28 @@ export class Wbg { /** @internal - new: Uint8Array.subarray */ __wbg_subarray_a96e1fef17ed23cb = (idx: number, start: number, end: number): number => { const arr = this.#bridge.getObject(idx) as Uint8Array; + return this.#bridge.addObject(arr.subarray(start, end)); }; /** @internal - bizinikiwi wasm hash */ __wbg_subarray_7f7a652672800851 = (idx: number, start: number, end: number): number => { const arr = this.#bridge.getObject(idx) as Uint8Array; + return this.#bridge.addObject(arr.subarray(start, end)); }; /** @internal - new: Uint8Array.length */ __wbg_length_32ed9a279acd054c = (idx: number): number => { const arr = this.#bridge.getObject(idx) as Uint8Array; + return arr.length; }; /** @internal - bizinikiwi wasm hash */ __wbg_length_f0764416ba5bb237 = (idx: number): number => { const arr = this.#bridge.getObject(idx) as Uint8Array; + return arr.length; }; @@ -204,6 +208,7 @@ export class Wbg { __wbg_prototypesetcall_bdcdcc5842e4d77d = (destIdx: number, srcIdx: number, offset: number): void => { const dest = this.#bridge.getObject(destIdx) as Uint8Array; const src = this.#bridge.getObject(srcIdx) as Uint8Array; + dest.set(src, offset); }; @@ -223,12 +228,14 @@ export class Wbg { /** @internal - bizinikiwi wasm: buffer accessor */ __wbg_buffer_5d1b598a01b41a42 = (memIdx: number): number => { const mem = this.#bridge.getObject(memIdx) as WebAssembly.Memory; + return this.#bridge.addObject(mem.buffer); }; /** @internal - bizinikiwi wasm: Uint8Array constructor */ __wbg_new_ace717933ad7117f = (bufferIdx: number): number => { const buffer = this.#bridge.getObject(bufferIdx) as ArrayBuffer; + return this.#bridge.addObject(new Uint8Array(buffer)); }; @@ -236,6 +243,7 @@ export class Wbg { __wbg_set_74906aa30864df5a = (destIdx: number, srcIdx: number, offset: number): void => { const dest = this.#bridge.getObject(destIdx) as Uint8Array; const src = this.#bridge.getObject(srcIdx) as Uint8Array; + dest.set(src, offset); }; } diff --git a/packages/wasm-crypto/test/deno.ts b/packages/wasm-crypto/test/deno.ts index 91f9793..b69b1de 100644 --- a/packages/wasm-crypto/test/deno.ts +++ b/packages/wasm-crypto/test/deno.ts @@ -4,13 +4,16 @@ // This is a Deno file, so we can allow .ts imports /* eslint-disable import/extensions */ +// NOTE We don't use ts-expect-error here since the build folder may or may +// not exist (so the error may or may not be there) +// +// eslint-disable-next-line @typescript-eslint/ban-ts-comment // NOTE We don't use ts-expect-error here since the build folder may or may // not exist (so the error may or may not be there) // // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore This should only run against the compiled ouput, where this should exist import * as wasm from '../build-deno/mod.ts'; -// @ts-ignore Test file, types not needed import { initRun, tests } from './all/index.js'; type Tests = Record void>; diff --git a/packages/wasm-crypto/test/jest.spec.ts b/packages/wasm-crypto/test/jest.spec.ts index 2e6b2c6..e9857e1 100644 --- a/packages/wasm-crypto/test/jest.spec.ts +++ b/packages/wasm-crypto/test/jest.spec.ts @@ -3,13 +3,16 @@ /// +// NOTE We don't use ts-expect-error here since the build folder may or may +// not exist (so the error may or may not be there) +// +// eslint-disable-next-line @typescript-eslint/ban-ts-comment // NOTE We don't use ts-expect-error here since the build folder may or may // not exist (so the error may or may not be there) // // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore This should only run against the compiled ouput, where this should exist import * as wasm from '../build/index.js'; -// @ts-ignore Test file, types not needed import { initRun, tests } from './all/index.js'; describe('wasm-crypto', (): void => { diff --git a/scripts/pack-wasm-base.mjs b/scripts/pack-wasm-base.mjs index 467c552..50a9753 100755 --- a/scripts/pack-wasm-base.mjs +++ b/scripts/pack-wasm-base.mjs @@ -1,4 +1,4 @@ -// Copyright 2019-2025 @pezkuwi/wasm-crypto authors & contributors +// Copyright 2019-2026 @pezkuwi/wasm-crypto authors & contributors // SPDX-License-Identifier: Apache-2.0 import { zlibSync } from 'fflate/node'; diff --git a/test-bizinikiwi.mjs b/test-bizinikiwi.mjs deleted file mode 100644 index c677b5b..0000000 --- a/test-bizinikiwi.mjs +++ /dev/null @@ -1,222 +0,0 @@ -// Quick test of bizinikiwi WASM integration -import { createRequire } from 'module'; -import crypto from 'crypto'; - -// First let's test if the WASM bytes are correct -const require = createRequire(import.meta.url); -const { bytes, lenIn, lenOut } = require('./packages/wasm-crypto-wasm/src/cjs/bytes.js'); - -console.log('=== Testing Bizinikiwi WASM ==='); -console.log('Compressed size:', lenIn); -console.log('Uncompressed size:', lenOut); - -// Decompress and test -import zlib from 'zlib'; - -const compressed = Buffer.from(bytes, 'base64'); -console.log('Actual compressed bytes:', compressed.length); - -const wasmBytes = zlib.inflateSync(compressed); -console.log('Actual WASM bytes:', wasmBytes.length); - -// Test instantiation with the proper imports -const cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }); -let cachedUint8ArrayMemory = null; -let wasm = null; -let WASM_VECTOR_LEN = 0; - -function getUint8ArrayMemory() { - if (cachedUint8ArrayMemory === null || cachedUint8ArrayMemory.byteLength === 0) { - cachedUint8ArrayMemory = new Uint8Array(wasm.memory.buffer); - } - return cachedUint8ArrayMemory; -} - -function getStringFromWasm(ptr, len) { - ptr = ptr >>> 0; - return cachedTextDecoder.decode(getUint8ArrayMemory().subarray(ptr, ptr + len)); -} - -function getArrayU8FromWasm(ptr, len) { - ptr = ptr >>> 0; - return getUint8ArrayMemory().subarray(ptr / 1, ptr / 1 + len); -} - -function passArray8ToWasm(arg, malloc) { - const ptr = malloc(arg.length * 1, 1) >>> 0; - getUint8ArrayMemory().set(arg, ptr / 1); - WASM_VECTOR_LEN = arg.length; - return ptr; -} - -// Externref table helpers -function addToExternrefTable(obj) { - const idx = wasm.__externref_table_alloc(); - wasm.__wbindgen_externrefs.set(idx, obj); - return idx; -} - -function takeFromExternrefTable(idx) { - const value = wasm.__wbindgen_externrefs.get(idx); - wasm.__externref_table_dealloc(idx); - return value; -} - -function isLikeNone(x) { - return x === undefined || x === null; -} - -function handleError(f, args) { - try { - return f.apply(null, args); - } catch (e) { - const idx = addToExternrefTable(e); - wasm.__wbindgen_exn_store(idx); - } -} - -// WASM imports -const import0 = { - __wbg___wbindgen_is_function_0095a73b8b156f76: (arg0) => typeof(arg0) === 'function', - __wbg___wbindgen_is_object_5ae8e5880f2c1fbd: (arg0) => typeof(arg0) === 'object' && arg0 !== null, - __wbg___wbindgen_is_string_cd444516edc5b180: (arg0) => typeof(arg0) === 'string', - __wbg___wbindgen_is_undefined_9e4d92534c42d778: (arg0) => arg0 === undefined, - __wbg___wbindgen_throw_be289d5034ed271b: (arg0, arg1) => { throw new Error(getStringFromWasm(arg0, arg1)); }, - __wbg_call_389efe28435a9388: function() { return handleError((arg0, arg1) => arg0.call(arg1), arguments); }, - __wbg_call_4708e0c13bdc8e95: function() { return handleError((arg0, arg1, arg2) => arg0.call(arg1, arg2), arguments); }, - __wbg_crypto_86f2631e91b51511: (arg0) => arg0.crypto, - __wbg_getRandomValues_b3f15fcbfabb0f8b: function() { return handleError((arg0, arg1) => arg0.getRandomValues(arg1), arguments); }, - __wbg_length_32ed9a279acd054c: (arg0) => arg0.length, - __wbg_msCrypto_d562bbe83e0d4b91: (arg0) => arg0.msCrypto, - __wbg_new_no_args_1c7c842f08d00ebb: (arg0, arg1) => new Function(getStringFromWasm(arg0, arg1)), - __wbg_new_with_length_a2c39cbe88fd8ff1: (arg0) => new Uint8Array(arg0 >>> 0), - __wbg_node_e1f24f89a7336c2e: (arg0) => arg0.node, - __wbg_process_3975fd6c72f520aa: (arg0) => arg0.process, - __wbg_prototypesetcall_bdcdcc5842e4d77d: (arg0, arg1, arg2) => Uint8Array.prototype.set.call(getArrayU8FromWasm(arg0, arg1), arg2), - __wbg_randomFillSync_f8c153b79f285817: function() { return handleError((arg0, arg1) => arg0.randomFillSync(arg1), arguments); }, - __wbg_require_b74f47fc2d022fd6: function() { return handleError(() => module.require, arguments); }, - __wbg_static_accessor_GLOBAL_12837167ad935116: () => isLikeNone(global) ? 0 : addToExternrefTable(global), - __wbg_static_accessor_GLOBAL_THIS_e628e89ab3b1c95f: () => isLikeNone(globalThis) ? 0 : addToExternrefTable(globalThis), - __wbg_static_accessor_SELF_a621d3dfbb60d0ce: () => isLikeNone(typeof self === 'undefined' ? null : self) ? 0 : addToExternrefTable(self), - __wbg_static_accessor_WINDOW_f8727f0cf888e0bd: () => isLikeNone(typeof window === 'undefined' ? null : window) ? 0 : addToExternrefTable(window), - __wbg_subarray_a96e1fef17ed23cb: (arg0, arg1, arg2) => arg0.subarray(arg1 >>> 0, arg2 >>> 0), - __wbg_versions_4e31226f5e8dc909: (arg0) => arg0.versions, - __wbindgen_cast_0000000000000001: (arg0, arg1) => getArrayU8FromWasm(arg0, arg1), - __wbindgen_cast_0000000000000002: (arg0, arg1) => getStringFromWasm(arg0, arg1), - __wbindgen_init_externref_table: () => { - const table = wasm.__wbindgen_externrefs; - const offset = table.grow(4); - table.set(0, undefined); - table.set(offset + 0, undefined); - table.set(offset + 1, null); - table.set(offset + 2, true); - table.set(offset + 3, false); - }, -}; - -const imports = { - './pezkuwi_wasm_crypto_bg.js': import0, -}; - -console.log('\nInstantiating WASM...'); - -try { - const result = await WebAssembly.instantiate(wasmBytes, imports); - wasm = result.instance.exports; - - console.log('WASM exports:', Object.keys(wasm).slice(0, 10), '...'); - - // Initialize - if (wasm.__wbindgen_start) { - wasm.__wbindgen_start(); - console.log('Called __wbindgen_start'); - } - - // Test get_signing_context - console.log('\n--- Testing get_signing_context ---'); - const ret = wasm.get_signing_context(); - const signingContext = getStringFromWasm(ret[0], ret[1]); - wasm.__wbindgen_free(ret[0], ret[1], 1); - console.log('Signing context:', signingContext); - - if (signingContext === 'bizinikiwi') { - console.log('BIZINIKIWI CONTEXT CONFIRMED!'); - } else { - console.log('WARNING: Expected "bizinikiwi" but got:', signingContext); - } - - // Test sr25519_keypair_from_seed - console.log('\n--- Testing sr25519_keypair_from_seed ---'); - // Use a fixed seed for reproducible testing (normally derived from mnemonic) - const seed = new Uint8Array([ - 0x9d, 0x61, 0xb1, 0x9d, 0xef, 0xfd, 0x5a, 0x60, - 0xba, 0x84, 0x4a, 0xf4, 0x92, 0xec, 0x2c, 0xc4, - 0x44, 0x49, 0xc5, 0x69, 0x7b, 0x32, 0x69, 0x19, - 0x70, 0x3b, 0xac, 0x03, 0x1c, 0xae, 0x7f, 0x60 - ]); - console.log('Seed:', Buffer.from(seed).toString('hex')); - - const ptr0 = passArray8ToWasm(seed, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const kpRet = wasm.sr25519_keypair_from_seed(ptr0, len0); - - if (kpRet[3]) { - console.log('ERROR: keypair generation failed'); - console.log(takeFromExternrefTable(kpRet[2])); - } else { - const keypair = getArrayU8FromWasm(kpRet[0], kpRet[1]).slice(); - wasm.__wbindgen_free(kpRet[0], kpRet[1] * 1, 1); - - const secretKey = keypair.slice(0, 64); - const publicKey = keypair.slice(64, 96); - - console.log('Keypair length:', keypair.length); - console.log('Public key:', Buffer.from(publicKey).toString('hex')); - - // Test sr25519_sign - console.log('\n--- Testing sr25519_sign ---'); - const message = new TextEncoder().encode('test message'); - - const ptr1 = passArray8ToWasm(publicKey, wasm.__wbindgen_malloc); - const len1 = WASM_VECTOR_LEN; - const ptr2 = passArray8ToWasm(secretKey, wasm.__wbindgen_malloc); - const len2 = WASM_VECTOR_LEN; - const ptr3 = passArray8ToWasm(message, wasm.__wbindgen_malloc); - const len3 = WASM_VECTOR_LEN; - - const sigRet = wasm.sr25519_sign(ptr1, len1, ptr2, len2, ptr3, len3); - - if (sigRet[3]) { - console.log('ERROR: signing failed'); - console.log(takeFromExternrefTable(sigRet[2])); - } else { - const signature = getArrayU8FromWasm(sigRet[0], sigRet[1]).slice(); - wasm.__wbindgen_free(sigRet[0], sigRet[1] * 1, 1); - - console.log('Signature:', Buffer.from(signature).toString('hex').slice(0, 64) + '...'); - console.log('Signature length:', signature.length); - - // Test sr25519_verify - console.log('\n--- Testing sr25519_verify ---'); - const vPtr0 = passArray8ToWasm(signature, wasm.__wbindgen_malloc); - const vLen0 = WASM_VECTOR_LEN; - const vPtr1 = passArray8ToWasm(message, wasm.__wbindgen_malloc); - const vLen1 = WASM_VECTOR_LEN; - const vPtr2 = passArray8ToWasm(publicKey, wasm.__wbindgen_malloc); - const vLen2 = WASM_VECTOR_LEN; - - const verified = wasm.sr25519_verify(vPtr0, vLen0, vPtr1, vLen1, vPtr2, vLen2); - console.log('Verification result:', verified !== 0 ? 'SUCCESS' : 'FAILED'); - - if (verified !== 0) { - console.log('\n======================================='); - console.log('BIZINIKIWI WASM INTEGRATION WORKING!'); - console.log('======================================='); - } - } - } - -} catch (error) { - console.error('Error:', error.message); - console.error(error.stack); -} diff --git a/test-build.mjs b/test-build.mjs deleted file mode 100644 index a50b4cf..0000000 --- a/test-build.mjs +++ /dev/null @@ -1,62 +0,0 @@ -// Test the built package -import { createRequire } from 'module'; -const require = createRequire(import.meta.url); - -// Load the built bundle -const bundle = await import('./packages/wasm-crypto/build/bundle.js'); - -console.log('=== Testing Built Bundle ==='); -console.log('Available exports:', Object.keys(bundle)); - -// Wait for WASM to initialize -console.log('\nInitializing WASM...'); -const ready = await bundle.waitReady(); -console.log('WASM ready:', ready); - -if (ready) { - // Test signing context - console.log('\n--- Testing getSigningContext ---'); - const context = bundle.getSigningContext(); - console.log('Signing context:', context); - - if (context === 'bizinikiwi') { - console.log('BIZINIKIWI CONFIRMED!'); - } else { - console.log('WARNING: Expected "bizinikiwi" but got:', context); - } - - // Test sr25519KeypairFromSeed - console.log('\n--- Testing sr25519KeypairFromSeed ---'); - const seed = new Uint8Array([ - 0x9d, 0x61, 0xb1, 0x9d, 0xef, 0xfd, 0x5a, 0x60, - 0xba, 0x84, 0x4a, 0xf4, 0x92, 0xec, 0x2c, 0xc4, - 0x44, 0x49, 0xc5, 0x69, 0x7b, 0x32, 0x69, 0x19, - 0x70, 0x3b, 0xac, 0x03, 0x1c, 0xae, 0x7f, 0x60 - ]); - - const keypair = bundle.sr25519KeypairFromSeed(seed); - const secretKey = keypair.slice(0, 64); - const publicKey = keypair.slice(64, 96); - - console.log('Keypair length:', keypair.length); - console.log('Public key:', Buffer.from(publicKey).toString('hex')); - - // Test sr25519Sign - console.log('\n--- Testing sr25519Sign ---'); - const message = new TextEncoder().encode('test message'); - const signature = bundle.sr25519Sign(publicKey, secretKey, message); - console.log('Signature:', Buffer.from(signature).toString('hex').slice(0, 64) + '...'); - - // Test sr25519Verify - console.log('\n--- Testing sr25519Verify ---'); - const verified = bundle.sr25519Verify(signature, message, publicKey); - console.log('Verification:', verified ? 'SUCCESS' : 'FAILED'); - - if (verified) { - console.log('\n======================================='); - console.log('BIZINIKIWI WASM PACKAGE WORKING!'); - console.log('======================================='); - } -} else { - console.log('FAILED to initialize WASM'); -} diff --git a/test-direct.mjs b/test-direct.mjs deleted file mode 100644 index f46f0bf..0000000 --- a/test-direct.mjs +++ /dev/null @@ -1,238 +0,0 @@ -// Direct test without going through npm package resolution -import zlib from 'zlib'; - -// Load bytes directly from the source -const bytesModule = await import('./packages/wasm-crypto-wasm/src/cjs/bytes.js'); -const { bytes, lenIn, lenOut } = bytesModule; - -console.log('=== Testing Bizinikiwi WASM Directly ==='); -console.log('Compressed size:', lenIn); -console.log('Uncompressed size:', lenOut); - -// Decompress -const compressed = Buffer.from(bytes, 'base64'); -const wasmBytes = zlib.inflateSync(compressed); -console.log('WASM size:', wasmBytes.length); - -// Check import module name -const wasmStr = wasmBytes.toString('utf8', 0, 500); -const moduleNameMatch = wasmStr.match(/pezkuwi_wasm_crypto_bg\.js/); -if (moduleNameMatch) { - console.log('Import module: ./pezkuwi_wasm_crypto_bg.js (bizinikiwi WASM confirmed!)'); -} else { - console.log('Import module: NOT bizinikiwi WASM'); - process.exit(1); -} - -// WASM helpers -let wasm = null; -let cachedUint8ArrayMemory = null; -let cachedTextDecoder = null; -let WASM_VECTOR_LEN = 0; - -function getUint8ArrayMemory() { - if (cachedUint8ArrayMemory === null || cachedUint8ArrayMemory.byteLength === 0) { - cachedUint8ArrayMemory = new Uint8Array(wasm['memory'].buffer); - } - return cachedUint8ArrayMemory; -} - -function getStringFromWasm(ptr, len) { - if (!cachedTextDecoder) { - cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }); - cachedTextDecoder.decode(); - } - ptr = ptr >>> 0; - return cachedTextDecoder.decode(getUint8ArrayMemory().subarray(ptr, ptr + len)); -} - -function getArrayU8FromWasm(ptr, len) { - ptr = ptr >>> 0; - return getUint8ArrayMemory().subarray(ptr / 1, ptr / 1 + len); -} - -function passArray8ToWasm(arg, malloc) { - const ptr = malloc(arg.length * 1, 1) >>> 0; - getUint8ArrayMemory().set(arg, ptr / 1); - WASM_VECTOR_LEN = arg.length; - return ptr; -} - -function addToExternrefTable(obj) { - const idx = wasm['__externref_table_alloc'](); - wasm['__wbindgen_externrefs'].set(idx, obj); - return idx; -} - -function takeFromExternrefTable(idx) { - const value = wasm['__wbindgen_externrefs'].get(idx); - wasm['__externref_table_dealloc'](idx); - return value; -} - -function isLikeNone(x) { - return x === undefined || x === null; -} - -function handleError(f, args) { - try { - return f.apply(null, args); - } catch (e) { - const idx = addToExternrefTable(e); - wasm['__wbindgen_exn_store'](idx); - return undefined; - } -} - -// WASM imports -import crypto from 'crypto'; - -const import0 = { - __wbg___wbindgen_is_function_0095a73b8b156f76: (arg0) => typeof(arg0) === 'function', - __wbg___wbindgen_is_object_5ae8e5880f2c1fbd: (arg0) => typeof(arg0) === 'object' && arg0 !== null, - __wbg___wbindgen_is_string_cd444516edc5b180: (arg0) => typeof(arg0) === 'string', - __wbg___wbindgen_is_undefined_9e4d92534c42d778: (arg0) => arg0 === undefined, - __wbg___wbindgen_throw_be289d5034ed271b: (arg0, arg1) => { throw new Error(getStringFromWasm(arg0, arg1)); }, - __wbg_call_389efe28435a9388: function() { return handleError((arg0, arg1) => arg0.call(arg1), arguments); }, - __wbg_call_4708e0c13bdc8e95: function() { return handleError((arg0, arg1, arg2) => arg0.call(arg1, arg2), arguments); }, - __wbg_crypto_86f2631e91b51511: (arg0) => arg0.crypto, - __wbg_getRandomValues_b3f15fcbfabb0f8b: function() { return handleError((arg0, arg1) => arg0.getRandomValues(arg1), arguments); }, - __wbg_length_32ed9a279acd054c: (arg0) => arg0.length, - __wbg_msCrypto_d562bbe83e0d4b91: (arg0) => arg0.msCrypto, - __wbg_new_no_args_1c7c842f08d00ebb: (arg0, arg1) => new Function(getStringFromWasm(arg0, arg1)), - __wbg_new_with_length_a2c39cbe88fd8ff1: (arg0) => new Uint8Array(arg0 >>> 0), - __wbg_node_e1f24f89a7336c2e: (arg0) => arg0.node, - __wbg_process_3975fd6c72f520aa: (arg0) => arg0.process, - __wbg_prototypesetcall_bdcdcc5842e4d77d: (arg0, arg1, arg2) => Uint8Array.prototype.set.call(getArrayU8FromWasm(arg0, arg1), arg2), - __wbg_randomFillSync_f8c153b79f285817: function() { return handleError((arg0, arg1) => arg0.randomFillSync(arg1), arguments); }, - __wbg_require_b74f47fc2d022fd6: function() { return handleError(() => module.require, arguments); }, - __wbg_static_accessor_GLOBAL_12837167ad935116: () => isLikeNone(global) ? 0 : addToExternrefTable(global), - __wbg_static_accessor_GLOBAL_THIS_e628e89ab3b1c95f: () => isLikeNone(globalThis) ? 0 : addToExternrefTable(globalThis), - __wbg_static_accessor_SELF_a621d3dfbb60d0ce: () => isLikeNone(typeof self === 'undefined' ? null : self) ? 0 : addToExternrefTable(self), - __wbg_static_accessor_WINDOW_f8727f0cf888e0bd: () => isLikeNone(typeof window === 'undefined' ? null : window) ? 0 : addToExternrefTable(window), - __wbg_subarray_a96e1fef17ed23cb: (arg0, arg1, arg2) => arg0.subarray(arg1 >>> 0, arg2 >>> 0), - __wbg_versions_4e31226f5e8dc909: (arg0) => arg0.versions, - __wbindgen_cast_0000000000000001: (arg0, arg1) => getArrayU8FromWasm(arg0, arg1), - __wbindgen_cast_0000000000000002: (arg0, arg1) => getStringFromWasm(arg0, arg1), - __wbindgen_init_externref_table: () => { - const table = wasm['__wbindgen_externrefs']; - const offset = table.grow(4); - table.set(0, undefined); - table.set(offset + 0, undefined); - table.set(offset + 1, null); - table.set(offset + 2, true); - table.set(offset + 3, false); - }, -}; - -const imports = { - './pezkuwi_wasm_crypto_bg.js': import0, -}; - -console.log('\nInstantiating WASM...'); - -try { - const result = await WebAssembly.instantiate(wasmBytes, imports); - wasm = result.instance.exports; - - console.log('WASM initialized!'); - - // Initialize - if (wasm['__wbindgen_start']) { - wasm['__wbindgen_start'](); - console.log('Called __wbindgen_start'); - } - - // Test get_signing_context - console.log('\n--- Testing get_signing_context ---'); - const ret = wasm['get_signing_context'](); - const signingContext = getStringFromWasm(ret[0], ret[1]); - wasm['__wbindgen_free'](ret[0], ret[1], 1); - console.log('Signing context:', signingContext); - - if (signingContext === 'bizinikiwi') { - console.log('BIZINIKIWI CONTEXT CONFIRMED!'); - } else { - console.log('WARNING: Expected "bizinikiwi" but got:', signingContext); - process.exit(1); - } - - // Test sr25519_keypair_from_seed - console.log('\n--- Testing sr25519_keypair_from_seed ---'); - const seed = new Uint8Array([ - 0x9d, 0x61, 0xb1, 0x9d, 0xef, 0xfd, 0x5a, 0x60, - 0xba, 0x84, 0x4a, 0xf4, 0x92, 0xec, 0x2c, 0xc4, - 0x44, 0x49, 0xc5, 0x69, 0x7b, 0x32, 0x69, 0x19, - 0x70, 0x3b, 0xac, 0x03, 0x1c, 0xae, 0x7f, 0x60 - ]); - - const ptr0 = passArray8ToWasm(seed, wasm['__wbindgen_malloc']); - const len0 = WASM_VECTOR_LEN; - const kpRet = wasm['sr25519_keypair_from_seed'](ptr0, len0); - - if (kpRet[3]) { - console.log('ERROR: keypair generation failed'); - console.log(takeFromExternrefTable(kpRet[2])); - process.exit(1); - } - - const keypair = getArrayU8FromWasm(kpRet[0], kpRet[1]).slice(); - wasm['__wbindgen_free'](kpRet[0], kpRet[1] * 1, 1); - - const secretKey = keypair.slice(0, 64); - const publicKey = keypair.slice(64, 96); - - console.log('Keypair length:', keypair.length); - console.log('Public key:', Buffer.from(publicKey).toString('hex')); - - // Test sr25519_sign - console.log('\n--- Testing sr25519_sign ---'); - const message = new TextEncoder().encode('test message'); - - const ptr1 = passArray8ToWasm(publicKey, wasm['__wbindgen_malloc']); - const len1 = WASM_VECTOR_LEN; - const ptr2 = passArray8ToWasm(secretKey, wasm['__wbindgen_malloc']); - const len2 = WASM_VECTOR_LEN; - const ptr3 = passArray8ToWasm(message, wasm['__wbindgen_malloc']); - const len3 = WASM_VECTOR_LEN; - - const sigRet = wasm['sr25519_sign'](ptr1, len1, ptr2, len2, ptr3, len3); - - if (sigRet[3]) { - console.log('ERROR: signing failed'); - console.log(takeFromExternrefTable(sigRet[2])); - process.exit(1); - } - - const signature = getArrayU8FromWasm(sigRet[0], sigRet[1]).slice(); - wasm['__wbindgen_free'](sigRet[0], sigRet[1] * 1, 1); - - console.log('Signature:', Buffer.from(signature).toString('hex').slice(0, 64) + '...'); - console.log('Signature length:', signature.length); - - // Test sr25519_verify - console.log('\n--- Testing sr25519_verify ---'); - const vPtr0 = passArray8ToWasm(signature, wasm['__wbindgen_malloc']); - const vLen0 = WASM_VECTOR_LEN; - const vPtr1 = passArray8ToWasm(message, wasm['__wbindgen_malloc']); - const vLen1 = WASM_VECTOR_LEN; - const vPtr2 = passArray8ToWasm(publicKey, wasm['__wbindgen_malloc']); - const vLen2 = WASM_VECTOR_LEN; - - const verified = wasm['sr25519_verify'](vPtr0, vLen0, vPtr1, vLen1, vPtr2, vLen2); - console.log('Verification result:', verified !== 0 ? 'SUCCESS' : 'FAILED'); - - if (verified !== 0) { - console.log('\n========================================='); - console.log('BIZINIKIWI WASM BYTES.JS VERIFIED!'); - console.log('The npm package contains correct WASM'); - console.log('========================================='); - } else { - process.exit(1); - } - -} catch (error) { - console.error('Error:', error.message); - console.error(error.stack); - process.exit(1); -}