Ship the whole wasm-crypto again, not just sr25519

7.5.15-7.5.18 shipped a wasm built from a separate sr25519-only module
(4 exports) and replaced every other function in bundle.ts with a stub
that throws "not yet implemented": ed25519 pair/sign/verify, sr25519
agree and hard/soft derivation, VRF, and all of secp256k1. Because the
wasm still initialised, isReady() was true and @pezkuwi/util-crypto
called those stubs instead of falling back to JS, so ed25519 and
ethereum accounts and any // derivation failed at runtime wherever the
package is used. bip39Generate threw as well, and bip39ToSeed hashed with
SHA-256 where BIP39 specifies SHA-512.

The Rust in packages/wasm-crypto/src/rs already implemented all of it,
with sr25519 under the "bizinikiwi" context. This builds that crate and
binds it again:

- bundle.ts: the withWasm bindings for every ext_* export, as in
  b61206c; getSigningContext() kept, returning "bizinikiwi".
- wasm-bridge: wasm-bindgen 0.2.90 passes an alignment to
  __wbindgen_malloc/__wbindgen_free (without it Rust aborts with
  `unreachable`); __wbindgen_memory returns a heap index; the two-argument
  getRandomValues import takes the crypto object and a Uint8Array by heap
  index, not a pointer and length.
- build-wasm.sh: source rust-version.sh relative to the script; strip the
  `import * as wbg` line newer wasm2js emits and call asmFunc({ wbg }),
  which is the shape its output expects.
- pack-wasm-base.mjs: also write build/bytes.js. The package exports
  ./bytes from there for ESM, and it was still the old sr25519-only wasm.
  The committed src copies are now empty placeholders, so a build that
  skips the wasm step fails instead of shipping a stale binary.
- Tests: the sr25519 known-signature vectors were substrate-context
  vectors; they are replaced by vectors signed by 7.5.18, plus a test that
  the same seed yields the same public key. A rename had changed the
  substrate-bip39 vector's password to "Bizinikiwi"; it is "Substrate".

Compatibility with 7.5.18, measured in separate processes:
mnemonic -> mini secret -> public key is identical for every phrase with
an empty or ASCII password (12/12). It differs when the BIP39 password has
characters NFKD changes: 7.5.18 normalised it, while the Rust crate and
util-crypto's JS path do not, so this returns to the canonical result.

Rust 43/43, JS 55/55, wasm and asm.js runners pass. With this build in
place, pezkuwi-extension's suite goes from 19 failing to 3 (the 3 left
are unrelated sorting tests).

All wasm packages move to 7.5.19 and pin each other at 7.5.19.
This commit is contained in:
Kurdistan Tech Ministry authored and SatoshiQaziMuhammed committed 2026-10-07 08:23:53 +04:00
1 parent c3b5de65ae
commit f1eee23fdf
27 files changed
+353 -666

No files matched your search

+16 -16
View File
@@ -661,12 +661,12 @@ __metadata:
languageName: node
linkType: hard
"@pezkuwi/wasm-bridge@npm:7.5.13, @pezkuwi/wasm-bridge@workspace:packages/wasm-bridge":
"@pezkuwi/wasm-bridge@npm:7.5.19, @pezkuwi/wasm-bridge@workspace:packages/wasm-bridge":
version: 0.0.0-use.local
resolution: "@pezkuwi/wasm-bridge@workspace:packages/wasm-bridge"
dependencies:
"@pezkuwi/util": "npm:^14.0.1"
"@pezkuwi/wasm-util": "npm:7.5.13"
"@pezkuwi/wasm-util": "npm:7.5.19"
"@pezkuwi/x-randomvalues": "npm:^14.0.1"
tslib: "npm:^2.7.0"
peerDependencies:
@@ -675,7 +675,7 @@ __metadata:
languageName: unknown
linkType: soft
"@pezkuwi/wasm-crypto-asmjs@npm:7.5.13, @pezkuwi/wasm-crypto-asmjs@workspace:packages/wasm-crypto-asmjs":
"@pezkuwi/wasm-crypto-asmjs@npm:7.5.19, @pezkuwi/wasm-crypto-asmjs@workspace:packages/wasm-crypto-asmjs":
version: 0.0.0-use.local
resolution: "@pezkuwi/wasm-crypto-asmjs@workspace:packages/wasm-crypto-asmjs"
dependencies:
@@ -686,15 +686,15 @@ __metadata:
languageName: unknown
linkType: soft
"@pezkuwi/wasm-crypto-init@npm:7.5.13, @pezkuwi/wasm-crypto-init@workspace:packages/wasm-crypto-init":
"@pezkuwi/wasm-crypto-init@npm:7.5.19, @pezkuwi/wasm-crypto-init@workspace:packages/wasm-crypto-init":
version: 0.0.0-use.local
resolution: "@pezkuwi/wasm-crypto-init@workspace:packages/wasm-crypto-init"
dependencies:
"@pezkuwi/util": "npm:^14.0.1"
"@pezkuwi/wasm-bridge": "npm:7.5.13"
"@pezkuwi/wasm-crypto-asmjs": "npm:7.5.13"
"@pezkuwi/wasm-crypto-wasm": "npm:7.5.14"
"@pezkuwi/wasm-util": "npm:7.5.13"
"@pezkuwi/wasm-bridge": "npm:7.5.19"
"@pezkuwi/wasm-crypto-asmjs": "npm:7.5.19"
"@pezkuwi/wasm-crypto-wasm": "npm:7.5.19"
"@pezkuwi/wasm-util": "npm:7.5.19"
"@pezkuwi/x-randomvalues": "npm:^14.0.1"
tslib: "npm:^2.7.0"
peerDependencies:
@@ -703,12 +703,12 @@ __metadata:
languageName: unknown
linkType: soft
"@pezkuwi/wasm-crypto-wasm@npm:7.5.14, @pezkuwi/wasm-crypto-wasm@workspace:packages/wasm-crypto-wasm":
"@pezkuwi/wasm-crypto-wasm@npm:7.5.19, @pezkuwi/wasm-crypto-wasm@workspace:packages/wasm-crypto-wasm":
version: 0.0.0-use.local
resolution: "@pezkuwi/wasm-crypto-wasm@workspace:packages/wasm-crypto-wasm"
dependencies:
"@pezkuwi/util": "npm:^14.0.1"
"@pezkuwi/wasm-util": "npm:7.5.13"
"@pezkuwi/wasm-util": "npm:7.5.19"
tslib: "npm:^2.7.0"
peerDependencies:
"@pezkuwi/util": "*"
@@ -721,11 +721,11 @@ __metadata:
dependencies:
"@noble/hashes": "npm:^1.3.3"
"@pezkuwi/util": "npm:^14.0.1"
"@pezkuwi/wasm-bridge": "npm:7.5.13"
"@pezkuwi/wasm-crypto-asmjs": "npm:7.5.13"
"@pezkuwi/wasm-crypto-init": "npm:7.5.13"
"@pezkuwi/wasm-crypto-wasm": "npm:7.5.14"
"@pezkuwi/wasm-util": "npm:7.5.13"
"@pezkuwi/wasm-bridge": "npm:7.5.19"
"@pezkuwi/wasm-crypto-asmjs": "npm:7.5.19"
"@pezkuwi/wasm-crypto-init": "npm:7.5.19"
"@pezkuwi/wasm-crypto-wasm": "npm:7.5.19"
"@pezkuwi/wasm-util": "npm:7.5.19"
"@pezkuwi/x-randomvalues": "npm:^14.0.1"
tslib: "npm:^2.7.0"
peerDependencies:
@@ -734,7 +734,7 @@ __metadata:
languageName: unknown
linkType: soft
"@pezkuwi/wasm-util@npm:7.5.13, @pezkuwi/wasm-util@workspace:packages/wasm-util":
"@pezkuwi/wasm-util@npm:7.5.19, @pezkuwi/wasm-util@workspace:packages/wasm-util":
version: 0.0.0-use.local
resolution: "@pezkuwi/wasm-util@workspace:packages/wasm-util"
dependencies: