A wormhole address is not a key. A path under coin type 189189189 yields a 32-byte secret, and the address is poseidon(poseidon(salt || secret)). Funds leave only through a ZK proof of that secret. The extension needs the addresses to show a wallet's wormhole account; it has no use for the secrets. wormholeAddresses(mnemonic, password, account, branch, start, count) returns 32-byte account ids for m/44'/189189189'/<account>'/<branch>'/<index>', the mobile wallet's paths. The secrets and first hashes are derived and wiped inside WASM. The BIP39 seed is stretched once per call rather than once per address, since a gap-limit window is dozens of addresses and each stretch is 2048 PBKDF2 rounds. A call is capped at 1000 addresses, and indices must stay below 2^31. Pinned to the chain node's own vector (node/src/tests/data/quantus_key_test_data.rs): TEST_MNEMONIC at m/44'/189189189'/0'/0'/0' is TEST_WORMHOLE_ADDRESS, the same pair the mobile wallet's SDK tests. Checked in Rust and through the packed package's consumer test. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012uDUodEcRbBwNRi3UCmw8f
25 lines
710 B
JSON
25 lines
710 B
JSON
{
|
|
"author": "Quantus Network Developers <hello@quantus.com>",
|
|
"bugs": "https://git.lair.cafe/quantus/wasm/issues",
|
|
"description": "Quantus post-quantum crypto (ML-DSA, Poseidon2, HD derivation) for the browser",
|
|
"engines": {
|
|
"node": ">=18"
|
|
},
|
|
"homepage": "https://git.lair.cafe/quantus/wasm/src/branch/main/packages/quantus-crypto#readme",
|
|
"license": "Apache-2.0",
|
|
"name": "@quantus/crypto",
|
|
"repository": {
|
|
"directory": "packages/quantus-crypto",
|
|
"type": "git",
|
|
"url": "https://git.lair.cafe/quantus/wasm.git"
|
|
},
|
|
"sideEffects": false,
|
|
"type": "module",
|
|
"version": "0.2.0",
|
|
"main": "index.js",
|
|
"dependencies": {
|
|
"fflate": "^0.8.2",
|
|
"tslib": "^2.7.0"
|
|
}
|
|
}
|