ox 1.1.2 → 1.3.0
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/CHANGELOG.md +61 -0
- package/dist/core/AbiFunction.d.ts +1 -1
- package/dist/core/AbiFunction.d.ts.map +1 -1
- package/dist/core/AbiFunction.js +6 -2
- package/dist/core/AbiFunction.js.map +1 -1
- package/dist/core/AbiParameters.d.ts +1 -1
- package/dist/core/AbiParameters.d.ts.map +1 -1
- package/dist/core/AbiParameters.js +1 -13
- package/dist/core/AbiParameters.js.map +1 -1
- package/dist/core/AesGcm.d.ts +36 -1
- package/dist/core/AesGcm.d.ts.map +1 -1
- package/dist/core/AesGcm.js +44 -0
- package/dist/core/AesGcm.js.map +1 -1
- package/dist/core/Ed25519.d.ts +46 -1
- package/dist/core/Ed25519.d.ts.map +1 -1
- package/dist/core/Ed25519.js +43 -0
- package/dist/core/Ed25519.js.map +1 -1
- package/dist/core/Engine.d.ts +1 -1
- package/dist/core/Engine.d.ts.map +1 -1
- package/dist/core/Engine.js.map +1 -1
- package/dist/core/Hash.d.ts +200 -1
- package/dist/core/Hash.d.ts.map +1 -1
- package/dist/core/Hash.js +207 -0
- package/dist/core/Hash.js.map +1 -1
- package/dist/core/Hex.d.ts.map +1 -1
- package/dist/core/Hex.js +1 -4
- package/dist/core/Hex.js.map +1 -1
- package/dist/core/Rlp.d.ts +32 -0
- package/dist/core/Rlp.d.ts.map +1 -1
- package/dist/core/Rlp.js +146 -0
- package/dist/core/Rlp.js.map +1 -1
- package/dist/core/Secp256k1.d.ts +46 -1
- package/dist/core/Secp256k1.d.ts.map +1 -1
- package/dist/core/Secp256k1.js +48 -0
- package/dist/core/Secp256k1.js.map +1 -1
- package/dist/core/WebAuthn.d.ts +224 -0
- package/dist/core/WebAuthn.d.ts.map +1 -0
- package/dist/core/WebAuthn.js +343 -0
- package/dist/core/WebAuthn.js.map +1 -0
- package/dist/core/WebAuthnP256.d.ts +46 -50
- package/dist/core/WebAuthnP256.d.ts.map +1 -1
- package/dist/core/WebAuthnP256.js +44 -50
- package/dist/core/WebAuthnP256.js.map +1 -1
- package/dist/core/internal/abiParameters.d.ts +7 -87
- package/dist/core/internal/abiParameters.d.ts.map +1 -1
- package/dist/core/internal/abiParameters.js +339 -194
- package/dist/core/internal/abiParameters.js.map +1 -1
- package/dist/core/internal/engine.d.ts +35 -2
- package/dist/core/internal/engine.d.ts.map +1 -1
- package/dist/core/internal/engine.js +12 -1
- package/dist/core/internal/engine.js.map +1 -1
- package/dist/core/internal/hash.d.ts +10 -0
- package/dist/core/internal/hash.d.ts.map +1 -1
- package/dist/core/internal/hash.js +26 -1
- package/dist/core/internal/hash.js.map +1 -1
- package/dist/index.d.ts +23 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23 -14
- package/dist/index.js.map +1 -1
- package/dist/node/Engine.d.ts +1 -1
- package/dist/node/Engine.d.ts.map +1 -1
- package/dist/node/Engine.js.map +1 -1
- package/dist/node/Hash.d.ts +6 -4
- package/dist/node/Hash.d.ts.map +1 -1
- package/dist/node/Hash.js +35 -3
- package/dist/node/Hash.js.map +1 -1
- package/dist/tempo/AuthorizationTempo.d.ts +6 -6
- package/dist/tempo/AuthorizationTempo.js +6 -6
- package/dist/tempo/KeyAuthorization.d.ts +3 -8
- package/dist/tempo/KeyAuthorization.d.ts.map +1 -1
- package/dist/tempo/KeyAuthorization.js +3 -8
- package/dist/tempo/KeyAuthorization.js.map +1 -1
- package/dist/tempo/SignatureEnvelope.d.ts +8 -8
- package/dist/tempo/SignatureEnvelope.js +8 -8
- package/dist/trusted-setups/Paths.d.ts +1 -0
- package/dist/trusted-setups/Paths.d.ts.map +1 -1
- package/dist/trusted-setups/Paths.js +1 -0
- package/dist/trusted-setups/Paths.js.map +1 -1
- package/dist/trusted-setups/Setups.d.ts +35 -0
- package/dist/trusted-setups/Setups.d.ts.map +1 -0
- package/dist/trusted-setups/Setups.js +29 -0
- package/dist/trusted-setups/Setups.js.map +1 -0
- package/dist/trusted-setups/index.d.ts +20 -0
- package/dist/trusted-setups/index.d.ts.map +1 -1
- package/dist/trusted-setups/index.js +20 -0
- package/dist/trusted-setups/index.js.map +1 -1
- package/dist/trusted-setups/internal/paths.d.ts.map +1 -1
- package/dist/trusted-setups/internal/paths.js +1 -1
- package/dist/trusted-setups/internal/paths.js.map +1 -1
- package/dist/trusted-setups/internal/setups/mainnet.d.ts +7 -0
- package/dist/trusted-setups/internal/setups/mainnet.d.ts.map +1 -0
- package/dist/trusted-setups/internal/setups/mainnet.js +11 -0
- package/dist/trusted-setups/internal/setups/mainnet.js.map +1 -0
- package/dist/wasm/Engine.d.ts +4 -3
- package/dist/wasm/Engine.d.ts.map +1 -1
- package/dist/wasm/Engine.js +5 -5
- package/dist/wasm/Engine.js.map +1 -1
- package/dist/wasm/Hash.d.ts +1 -1
- package/dist/wasm/Hash.d.ts.map +1 -1
- package/dist/wasm/Hash.js +5 -0
- package/dist/wasm/Hash.js.map +1 -1
- package/dist/wasm/Keystore.d.ts +23 -9
- package/dist/wasm/Keystore.d.ts.map +1 -1
- package/dist/wasm/Keystore.js +30 -13
- package/dist/wasm/Keystore.js.map +1 -1
- package/dist/wasm/Kzg.d.ts +112 -0
- package/dist/wasm/Kzg.d.ts.map +1 -0
- package/dist/wasm/Kzg.js +333 -0
- package/dist/wasm/Kzg.js.map +1 -0
- package/dist/wasm/Secp256k1.d.ts +55 -0
- package/dist/wasm/Secp256k1.d.ts.map +1 -0
- package/dist/wasm/Secp256k1.js +181 -0
- package/dist/wasm/Secp256k1.js.map +1 -0
- package/dist/wasm/index.d.ts +44 -1
- package/dist/wasm/index.d.ts.map +1 -1
- package/dist/wasm/index.js +44 -1
- package/dist/wasm/index.js.map +1 -1
- package/dist/wasm/internal/blake3.d.ts +10 -1
- package/dist/wasm/internal/blake3.d.ts.map +1 -1
- package/dist/wasm/internal/blake3.js +12 -1
- package/dist/wasm/internal/blake3.js.map +1 -1
- package/dist/wasm/internal/blake3.wasm.d.ts +3 -1
- package/dist/wasm/internal/blake3.wasm.d.ts.map +1 -1
- package/dist/wasm/internal/blake3.wasm.js +3 -1
- package/dist/wasm/internal/blake3.wasm.js.map +1 -1
- package/dist/wasm/internal/hash.d.ts +9 -0
- package/dist/wasm/internal/hash.d.ts.map +1 -1
- package/dist/wasm/internal/hash.js +13 -1
- package/dist/wasm/internal/hash.js.map +1 -1
- package/dist/wasm/internal/hashState.d.ts +25 -0
- package/dist/wasm/internal/hashState.d.ts.map +1 -0
- package/dist/wasm/internal/hashState.js +105 -0
- package/dist/wasm/internal/hashState.js.map +1 -0
- package/dist/wasm/internal/hashes.d.ts +12 -1
- package/dist/wasm/internal/hashes.d.ts.map +1 -1
- package/dist/wasm/internal/hashes.js +18 -1
- package/dist/wasm/internal/hashes.js.map +1 -1
- package/dist/wasm/internal/hashes.wasm.d.ts +11 -3
- package/dist/wasm/internal/hashes.wasm.d.ts.map +1 -1
- package/dist/wasm/internal/hashes.wasm.js +11 -3
- package/dist/wasm/internal/hashes.wasm.js.map +1 -1
- package/dist/wasm/internal/instantiate.d.ts +12 -0
- package/dist/wasm/internal/instantiate.d.ts.map +1 -1
- package/dist/wasm/internal/instantiate.js +23 -7
- package/dist/wasm/internal/instantiate.js.map +1 -1
- package/dist/wasm/internal/keystore.d.ts +10 -0
- package/dist/wasm/internal/keystore.d.ts.map +1 -0
- package/dist/wasm/internal/keystore.js +10 -0
- package/dist/wasm/internal/keystore.js.map +1 -0
- package/dist/wasm/internal/kzg.d.ts +17 -0
- package/dist/wasm/internal/kzg.d.ts.map +1 -0
- package/dist/wasm/internal/kzg.js +8 -0
- package/dist/wasm/internal/kzg.js.map +1 -0
- package/dist/wasm/internal/kzg.wasm.d.ts +3 -0
- package/dist/wasm/internal/kzg.wasm.d.ts.map +1 -0
- package/dist/wasm/internal/kzg.wasm.js +10 -0
- package/dist/wasm/internal/kzg.wasm.js.map +1 -0
- package/dist/wasm/internal/scrypt.d.ts +16 -0
- package/dist/wasm/internal/scrypt.d.ts.map +1 -0
- package/dist/wasm/internal/scrypt.js +78 -0
- package/dist/wasm/internal/scrypt.js.map +1 -0
- package/dist/wasm/internal/scrypt.wasm.d.ts +7 -0
- package/dist/wasm/internal/scrypt.wasm.d.ts.map +1 -0
- package/dist/wasm/internal/scrypt.wasm.js +14 -0
- package/dist/wasm/internal/scrypt.wasm.js.map +1 -0
- package/dist/wasm/internal/secp256k1.d.ts +16 -0
- package/dist/wasm/internal/secp256k1.d.ts.map +1 -0
- package/dist/wasm/internal/secp256k1.js +20 -0
- package/dist/wasm/internal/secp256k1.js.map +1 -0
- package/dist/wasm/internal/secp256k1.wasm.d.ts +3 -0
- package/dist/wasm/internal/secp256k1.wasm.d.ts.map +1 -0
- package/dist/wasm/internal/secp256k1.wasm.js +10 -0
- package/dist/wasm/internal/secp256k1.wasm.js.map +1 -0
- package/dist/webauthn/Authentication.d.ts +2 -0
- package/dist/webauthn/Authentication.d.ts.map +1 -1
- package/dist/webauthn/Authentication.js +2 -1
- package/dist/webauthn/Authentication.js.map +1 -1
- package/dist/webauthn/Registration.d.ts.map +1 -1
- package/dist/webauthn/Registration.js +2 -1
- package/dist/webauthn/Registration.js.map +1 -1
- package/dist/webauthn/Types.d.ts +27 -6
- package/dist/webauthn/Types.d.ts.map +1 -1
- package/dist/webauthn/internal/utils.d.ts.map +1 -1
- package/dist/webauthn/internal/utils.js +35 -9
- package/dist/webauthn/internal/utils.js.map +1 -1
- package/dist/zod/TypedData.d.ts +2 -2
- package/package.json +27 -2
- package/src/benchmarks/Ox.bench.ts +6 -0
- package/src/benchmarks/OxNode.bench.ts +8 -0
- package/src/benchmarks/OxV0.bench.ts +4 -0
- package/src/benchmarks/OxWasm.bench.ts +22 -0
- package/src/core/AbiFunction.ts +5 -5
- package/src/core/AbiParameters.ts +8 -20
- package/src/core/AesGcm.ts +86 -1
- package/src/core/Ed25519.ts +87 -1
- package/src/core/Engine.ts +1 -0
- package/src/core/Hash.ts +321 -1
- package/src/core/Hex.ts +1 -4
- package/src/core/Rlp.ts +172 -5
- package/src/core/Secp256k1.ts +92 -1
- package/src/core/WebAuthn.ts +579 -0
- package/src/core/WebAuthnP256.ts +47 -50
- package/src/core/_test/AbiFunction.test.ts +9 -0
- package/src/core/_test/AbiParameters.differential.fuzz.ts +156 -0
- package/src/core/_test/AbiParameters.encode.test.ts +22 -0
- package/src/core/_test/AbiParameters.fuzz.ts +4 -0
- package/src/core/_test/AesGcm.test.ts +76 -0
- package/src/core/_test/Block.test.ts +9 -2
- package/src/core/_test/Ed25519.test-d.ts +13 -1
- package/src/core/_test/Ed25519.test.ts +120 -1
- package/src/core/_test/Engine.test-d.ts +9 -0
- package/src/core/_test/Engine.test.ts +1 -1
- package/src/core/_test/Hash.test-d.ts +41 -0
- package/src/core/_test/Hash.test.ts +278 -1
- package/src/core/_test/Hash.vectors.test.ts +1 -2
- package/src/core/_test/Hex.test.ts +2 -0
- package/src/core/_test/Rlp.test-d.ts +18 -0
- package/src/core/_test/Rlp.test.ts +109 -0
- package/src/core/_test/Secp256k1.test-d.ts +14 -0
- package/src/core/_test/Secp256k1.test.ts +91 -1
- package/src/core/_test/Transaction.test.ts +11 -2
- package/src/core/_test/WebAuthn.test-d.ts +142 -0
- package/src/core/_test/WebAuthn.test.ts +766 -0
- package/src/core/_test/index.test.ts +1 -0
- package/src/core/internal/abiParameters.ts +466 -326
- package/src/core/internal/engine.ts +47 -2
- package/src/core/internal/hash.ts +53 -1
- package/src/index.ts +24 -14
- package/src/node/Engine.ts +1 -0
- package/src/node/Hash.ts +43 -6
- package/src/node/_test/Engine.test-d.ts +1 -0
- package/src/node/_test/Engine.test.ts +2 -0
- package/src/node/_test/Hash.test-d.ts +11 -0
- package/src/node/_test/Hash.test.ts +46 -0
- package/src/tempo/AuthorizationTempo.ts +6 -6
- package/src/tempo/KeyAuthorization.ts +3 -8
- package/src/tempo/SignatureEnvelope.ts +8 -8
- package/src/trusted-setups/Paths.ts +1 -0
- package/src/trusted-setups/README.md +39 -0
- package/src/trusted-setups/Setups.ts +46 -0
- package/src/trusted-setups/_test/Paths.test.ts +16 -0
- package/src/trusted-setups/_test/Setups.test-d.ts +7 -0
- package/src/trusted-setups/_test/Setups.test.ts +43 -0
- package/src/trusted-setups/_test/index.test.ts +1 -0
- package/src/trusted-setups/index.ts +21 -0
- package/src/trusted-setups/internal/paths.ts +4 -1
- package/src/trusted-setups/internal/setups/mainnet.source.json +7 -0
- package/src/trusted-setups/internal/setups/mainnet.ts +16 -0
- package/src/version.ts +1 -1
- package/src/wasm/Engine.ts +9 -6
- package/src/wasm/Hash.ts +10 -0
- package/src/wasm/Keystore.bench.ts +26 -0
- package/src/wasm/Keystore.ts +32 -14
- package/src/wasm/Kzg.bench.ts +63 -0
- package/src/wasm/Kzg.ts +518 -0
- package/src/wasm/Secp256k1.bench.ts +79 -0
- package/src/wasm/Secp256k1.ts +248 -0
- package/src/wasm/_test/Engine.test-d.ts +2 -0
- package/src/wasm/_test/Engine.test.ts +5 -0
- package/src/wasm/_test/Hash.browser.test.ts +31 -0
- package/src/wasm/_test/Hash.test-d.ts +17 -0
- package/src/wasm/_test/Hash.test.ts +252 -3
- package/src/wasm/_test/Keystore.browser.test.ts +31 -0
- package/src/wasm/_test/Keystore.fuzz.ts +50 -0
- package/src/wasm/_test/Keystore.test-d.ts +10 -1
- package/src/wasm/_test/Keystore.test.ts +289 -4
- package/src/wasm/_test/Kzg.test-d.ts +19 -0
- package/src/wasm/_test/Kzg.test.ts +220 -0
- package/src/wasm/_test/Runtime.test.ts +9 -0
- package/src/wasm/_test/Secp256k1.test-d.ts +35 -0
- package/src/wasm/_test/Secp256k1.test.ts +354 -0
- package/src/wasm/index.ts +46 -1
- package/src/wasm/internal/blake3.ts +23 -2
- package/src/wasm/internal/blake3.wasm.ts +4 -1
- package/src/wasm/internal/hash.ts +27 -1
- package/src/wasm/internal/hashState.ts +154 -0
- package/src/wasm/internal/hashes.ts +56 -15
- package/src/wasm/internal/hashes.wasm.ts +15 -3
- package/src/wasm/internal/instantiate.ts +29 -9
- package/src/wasm/internal/keystore.ts +19 -0
- package/src/wasm/internal/kzg.ts +50 -0
- package/src/wasm/internal/kzg.wasm.ts +11 -0
- package/src/wasm/internal/scrypt.ts +131 -0
- package/src/wasm/internal/scrypt.wasm.ts +17 -0
- package/src/wasm/internal/secp256k1.ts +62 -0
- package/src/wasm/internal/secp256k1.wasm.ts +11 -0
- package/src/webauthn/Authentication.ts +4 -0
- package/src/webauthn/Registration.ts +2 -0
- package/src/webauthn/Types.ts +32 -2
- package/src/webauthn/_test/Authentication.test.ts +123 -1
- package/src/webauthn/_test/Registration.test.ts +26 -6
- package/src/webauthn/_test/WebAuthn.browser.test.ts +28 -0
- package/src/webauthn/internal/utils.ts +41 -8
- package/wasm/vendor/c-kzg-4844/LICENSE +201 -0
- package/wasm/vendor/c-kzg-4844/blst/LICENSE +201 -0
- package/src/trusted-setups/internal/setups/mainnet.txt +0 -4163
package/dist/wasm/Kzg.js
ADDED
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
import * as Errors from '../core/Errors.js';
|
|
2
|
+
import * as Hex from '../core/Hex.js';
|
|
3
|
+
export * from '../core/Kzg.js';
|
|
4
|
+
const blobSize = 131_072;
|
|
5
|
+
const cellSize = 2_048;
|
|
6
|
+
const cellsPerBlob = 128;
|
|
7
|
+
const commitmentSize = 48;
|
|
8
|
+
const g1Points = 4_096;
|
|
9
|
+
const g2Points = 65;
|
|
10
|
+
const proofSize = 48;
|
|
11
|
+
/**
|
|
12
|
+
* Creates an independently owned WASM implementation of [`Kzg.Kzg`](/api/Kzg).
|
|
13
|
+
*
|
|
14
|
+
* The factory compiles the c-kzg artifact once per JavaScript realm. Every call
|
|
15
|
+
* instantiates separate WASM memory and trusted-setup state. Call `dispose` when
|
|
16
|
+
* the instance is no longer needed.
|
|
17
|
+
*
|
|
18
|
+
* Operations on an instance are synchronous and run to completion. JavaScript
|
|
19
|
+
* workers do not share an instance, so create one in each worker that needs KZG.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```ts twoslash
|
|
23
|
+
* // @noErrors
|
|
24
|
+
* import { Setups } from 'ox/trusted-setups'
|
|
25
|
+
* import { Kzg } from 'ox/wasm'
|
|
26
|
+
*
|
|
27
|
+
* const kzg = await Kzg.create({
|
|
28
|
+
* trustedSetup: Setups.mainnet
|
|
29
|
+
* })
|
|
30
|
+
* // Pass `kzg` anywhere that accepts `Kzg.Kzg`.
|
|
31
|
+
*
|
|
32
|
+
* kzg.dispose()
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* @param options - Trusted setup and precomputation options.
|
|
36
|
+
* @returns An initialized KZG implementation with explicit disposal.
|
|
37
|
+
*/
|
|
38
|
+
export async function create(options) {
|
|
39
|
+
const { trustedSetup } = options;
|
|
40
|
+
const precompute = options.precompute ?? 0;
|
|
41
|
+
if (!Number.isInteger(precompute) || precompute < 0 || precompute > 8)
|
|
42
|
+
throw new InvalidPrecomputeError({ precompute });
|
|
43
|
+
const setup = {
|
|
44
|
+
g1Lagrange: normalizePoints(trustedSetup.g1_lagrange, g1Points, commitmentSize, 'g1_lagrange'),
|
|
45
|
+
g1Monomial: normalizePoints(trustedSetup.g1_monomial, g1Points, commitmentSize, 'g1_monomial'),
|
|
46
|
+
g2Monomial: normalizePoints(trustedSetup.g2_monomial, g2Points, 96, 'g2_monomial'),
|
|
47
|
+
};
|
|
48
|
+
const { instantiate } = await import('./internal/kzg.js');
|
|
49
|
+
let module = await instantiate();
|
|
50
|
+
const getModule = () => {
|
|
51
|
+
if (!module)
|
|
52
|
+
throw new DisposedError();
|
|
53
|
+
return module;
|
|
54
|
+
};
|
|
55
|
+
try {
|
|
56
|
+
const initialized = getModule();
|
|
57
|
+
withBuffers(initialized, [setup.g1Monomial, setup.g1Lagrange, setup.g2Monomial], [], ([g1Monomial, g1Lagrange, g2Monomial]) => {
|
|
58
|
+
assertReturn(initialized.exports.kzg_initialize(g1Monomial, g1Lagrange, g2Monomial, precompute), 'initialize');
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
module?.exports.kzg_dispose();
|
|
63
|
+
module = undefined;
|
|
64
|
+
throw error;
|
|
65
|
+
}
|
|
66
|
+
const instance = {
|
|
67
|
+
blobToKzgCommitment(blob) {
|
|
68
|
+
assertBytes(blob, blobSize, 'blob');
|
|
69
|
+
return withBuffers(getModule(), [blob], [commitmentSize], ([blob], [out]) => {
|
|
70
|
+
const module = getModule();
|
|
71
|
+
assertReturn(module.exports.kzg_blob_to_kzg_commitment(out, blob), 'blobToKzgCommitment');
|
|
72
|
+
})[0];
|
|
73
|
+
},
|
|
74
|
+
computeCells(blob) {
|
|
75
|
+
assertBytes(blob, blobSize, 'blob');
|
|
76
|
+
const bytes = withBuffers(getModule(), [blob], [cellsPerBlob * cellSize], ([blob], [cells]) => {
|
|
77
|
+
const module = getModule();
|
|
78
|
+
assertReturn(module.exports.kzg_compute_cells(cells, blob), 'computeCells');
|
|
79
|
+
})[0];
|
|
80
|
+
return split(bytes, cellSize);
|
|
81
|
+
},
|
|
82
|
+
computeCellsAndKzgProofs(blob) {
|
|
83
|
+
assertBytes(blob, blobSize, 'blob');
|
|
84
|
+
const [cells, proofs] = withBuffers(getModule(), [blob], [cellsPerBlob * cellSize, cellsPerBlob * proofSize], ([blob], [cells, proofs]) => {
|
|
85
|
+
const module = getModule();
|
|
86
|
+
assertReturn(module.exports.kzg_compute_cells_and_kzg_proofs(cells, proofs, blob), 'computeCellsAndKzgProofs');
|
|
87
|
+
});
|
|
88
|
+
return {
|
|
89
|
+
cells: split(cells, cellSize),
|
|
90
|
+
proofs: split(proofs, proofSize),
|
|
91
|
+
};
|
|
92
|
+
},
|
|
93
|
+
dispose() {
|
|
94
|
+
if (!module)
|
|
95
|
+
return;
|
|
96
|
+
const initialized = module;
|
|
97
|
+
module = undefined;
|
|
98
|
+
initialized.exports.kzg_dispose();
|
|
99
|
+
},
|
|
100
|
+
recoverCellsAndKzgProofs(cellIndices, cells) {
|
|
101
|
+
if (cellIndices.length !== cells.length)
|
|
102
|
+
throw new InvalidInputError({
|
|
103
|
+
message: '`cellIndices` and `cells` must have the same length.',
|
|
104
|
+
});
|
|
105
|
+
if (cells.length < 64 || cells.length > cellsPerBlob)
|
|
106
|
+
throw new InvalidInputError({
|
|
107
|
+
message: '`cells` must contain between 64 and 128 cells.',
|
|
108
|
+
});
|
|
109
|
+
assertCellIndices(cellIndices, true);
|
|
110
|
+
for (const cell of cells)
|
|
111
|
+
assertBytes(cell, cellSize, 'cell');
|
|
112
|
+
const values = cellIndices
|
|
113
|
+
.map((index, i) => ({ cell: cells[i], index }))
|
|
114
|
+
.sort((a, b) => a.index - b.index);
|
|
115
|
+
const indices = values.map(({ index }) => index);
|
|
116
|
+
const sortedCells = values.map(({ cell }) => cell);
|
|
117
|
+
const [recoveredCells, proofs] = withBuffers(getModule(), [encodeIndices(indices), concat(sortedCells)], [cellsPerBlob * cellSize, cellsPerBlob * proofSize], ([indices, cells], [recoveredCells, proofs]) => {
|
|
118
|
+
const module = getModule();
|
|
119
|
+
assertReturn(module.exports.kzg_recover_cells_and_kzg_proofs(recoveredCells, proofs, indices, cells, values.length), 'recoverCellsAndKzgProofs');
|
|
120
|
+
});
|
|
121
|
+
return {
|
|
122
|
+
cells: split(recoveredCells, cellSize),
|
|
123
|
+
proofs: split(proofs, proofSize),
|
|
124
|
+
};
|
|
125
|
+
},
|
|
126
|
+
verifyCellKzgProofBatch(commitments, cellIndices, cells, proofs) {
|
|
127
|
+
const count = commitments.length;
|
|
128
|
+
if (count === 0 ||
|
|
129
|
+
cellIndices.length !== count ||
|
|
130
|
+
cells.length !== count ||
|
|
131
|
+
proofs.length !== count)
|
|
132
|
+
throw new InvalidInputError({
|
|
133
|
+
message: '`commitments`, `cellIndices`, `cells`, and `proofs` must have the same non-zero length.',
|
|
134
|
+
});
|
|
135
|
+
assertCellIndices(cellIndices, false);
|
|
136
|
+
for (const commitment of commitments)
|
|
137
|
+
assertBytes(commitment, commitmentSize, 'commitment');
|
|
138
|
+
for (const cell of cells)
|
|
139
|
+
assertBytes(cell, cellSize, 'cell');
|
|
140
|
+
for (const proof of proofs)
|
|
141
|
+
assertBytes(proof, proofSize, 'proof');
|
|
142
|
+
return (withBuffers(getModule(), [
|
|
143
|
+
concat(commitments),
|
|
144
|
+
encodeIndices(cellIndices),
|
|
145
|
+
concat(cells),
|
|
146
|
+
concat(proofs),
|
|
147
|
+
], [4], ([commitments, indices, cells, proofs], [verified]) => {
|
|
148
|
+
const module = getModule();
|
|
149
|
+
assertReturn(module.exports.kzg_verify_cell_kzg_proof_batch(verified, commitments, indices, cells, proofs, count), 'verifyCellKzgProofBatch');
|
|
150
|
+
})[0][0] === 1);
|
|
151
|
+
},
|
|
152
|
+
};
|
|
153
|
+
return instance;
|
|
154
|
+
}
|
|
155
|
+
function assertBytes(value, size, name) {
|
|
156
|
+
if (!(value instanceof Uint8Array) || value.length !== size)
|
|
157
|
+
throw new InvalidInputError({
|
|
158
|
+
message: `\`${name}\` must contain exactly ${size} bytes.`,
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
function assertCellIndices(indices, unique) {
|
|
162
|
+
const seen = new Set();
|
|
163
|
+
for (const index of indices) {
|
|
164
|
+
if (!Number.isInteger(index) || index < 0 || index >= cellsPerBlob)
|
|
165
|
+
throw new InvalidInputError({
|
|
166
|
+
message: '`cellIndices` must contain integers from 0 through 127.',
|
|
167
|
+
});
|
|
168
|
+
if (unique && seen.has(index))
|
|
169
|
+
throw new InvalidInputError({
|
|
170
|
+
message: '`cellIndices` must not contain duplicate indices.',
|
|
171
|
+
});
|
|
172
|
+
seen.add(index);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
function assertReturn(value, operation) {
|
|
176
|
+
if (value === 0)
|
|
177
|
+
return;
|
|
178
|
+
if (value === 1)
|
|
179
|
+
throw operation === 'initialize'
|
|
180
|
+
? new InvalidTrustedSetupError()
|
|
181
|
+
: new InvalidInputError({ message: `c-kzg rejected \`${operation}\`.` });
|
|
182
|
+
if (value === 3)
|
|
183
|
+
throw new MemoryError();
|
|
184
|
+
throw new WasmError({ operation });
|
|
185
|
+
}
|
|
186
|
+
function concat(values) {
|
|
187
|
+
const size = values.reduce((size, value) => size + value.length, 0);
|
|
188
|
+
const result = new Uint8Array(size);
|
|
189
|
+
let offset = 0;
|
|
190
|
+
for (const value of values) {
|
|
191
|
+
result.set(value, offset);
|
|
192
|
+
offset += value.length;
|
|
193
|
+
}
|
|
194
|
+
return result;
|
|
195
|
+
}
|
|
196
|
+
function encodeIndices(indices) {
|
|
197
|
+
const bytes = new Uint8Array(indices.length * 8);
|
|
198
|
+
const view = new DataView(bytes.buffer);
|
|
199
|
+
for (let i = 0; i < indices.length; i++)
|
|
200
|
+
view.setBigUint64(i * 8, BigInt(indices[i]), true);
|
|
201
|
+
return bytes;
|
|
202
|
+
}
|
|
203
|
+
function normalizePoints(value, count, size, name) {
|
|
204
|
+
const expected = count * size;
|
|
205
|
+
if (value instanceof Uint8Array) {
|
|
206
|
+
if (value.length !== expected)
|
|
207
|
+
throw new InvalidTrustedSetupError({
|
|
208
|
+
message: `\`${name}\` must contain exactly ${expected} bytes.`,
|
|
209
|
+
});
|
|
210
|
+
return Uint8Array.from(value);
|
|
211
|
+
}
|
|
212
|
+
if (!Array.isArray(value) || value.length !== count)
|
|
213
|
+
throw new InvalidTrustedSetupError({
|
|
214
|
+
message: `\`${name}\` must contain exactly ${count} points.`,
|
|
215
|
+
});
|
|
216
|
+
const result = new Uint8Array(expected);
|
|
217
|
+
for (let i = 0; i < value.length; i++) {
|
|
218
|
+
const point = value[i];
|
|
219
|
+
try {
|
|
220
|
+
const bytes = Hex.toBytes(point);
|
|
221
|
+
if (bytes.length !== size)
|
|
222
|
+
throw new Error();
|
|
223
|
+
result.set(bytes, i * size);
|
|
224
|
+
}
|
|
225
|
+
catch {
|
|
226
|
+
throw new InvalidTrustedSetupError({
|
|
227
|
+
message: `\`${name}[${i}]\` must be a ${size}-byte hex value.`,
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
return result;
|
|
232
|
+
}
|
|
233
|
+
function split(value, size) {
|
|
234
|
+
const result = [];
|
|
235
|
+
for (let offset = 0; offset < value.length; offset += size)
|
|
236
|
+
result.push(value.slice(offset, offset + size));
|
|
237
|
+
return result;
|
|
238
|
+
}
|
|
239
|
+
function withBuffers(module, inputs, outputs, call) {
|
|
240
|
+
const inputPointers = [];
|
|
241
|
+
const outputPointers = [];
|
|
242
|
+
try {
|
|
243
|
+
for (const input of inputs)
|
|
244
|
+
inputPointers.push(allocate(module, input.length));
|
|
245
|
+
for (const size of outputs)
|
|
246
|
+
outputPointers.push(allocate(module, size));
|
|
247
|
+
const view = module.view();
|
|
248
|
+
for (let i = 0; i < inputs.length; i++)
|
|
249
|
+
view.set(inputs[i], inputPointers[i]);
|
|
250
|
+
call(inputPointers, outputPointers);
|
|
251
|
+
return outputs.map((size, i) => module.view().slice(outputPointers[i], outputPointers[i] + size));
|
|
252
|
+
}
|
|
253
|
+
catch (cause) {
|
|
254
|
+
if (cause instanceof Errors.BaseError)
|
|
255
|
+
throw cause;
|
|
256
|
+
throw new WasmError({ cause: cause });
|
|
257
|
+
}
|
|
258
|
+
finally {
|
|
259
|
+
for (let i = 0; i < inputs.length; i++) {
|
|
260
|
+
const pointer = inputPointers[i];
|
|
261
|
+
if (!pointer)
|
|
262
|
+
continue;
|
|
263
|
+
module.exports.zero(pointer, inputs[i].length);
|
|
264
|
+
module.exports.dealloc(pointer);
|
|
265
|
+
}
|
|
266
|
+
for (let i = 0; i < outputs.length; i++) {
|
|
267
|
+
const pointer = outputPointers[i];
|
|
268
|
+
if (!pointer)
|
|
269
|
+
continue;
|
|
270
|
+
module.exports.zero(pointer, outputs[i]);
|
|
271
|
+
module.exports.dealloc(pointer);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
function allocate(module, size) {
|
|
276
|
+
const pointer = module.exports.alloc(size);
|
|
277
|
+
if (!pointer)
|
|
278
|
+
throw new MemoryError();
|
|
279
|
+
return pointer;
|
|
280
|
+
}
|
|
281
|
+
/** Thrown when an operation is called after its KZG instance was disposed. */
|
|
282
|
+
export class DisposedError extends Errors.BaseError {
|
|
283
|
+
name = 'Kzg.DisposedError';
|
|
284
|
+
constructor() {
|
|
285
|
+
super('KZG instance has been disposed.');
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
/** Thrown when a KZG operation receives malformed input. */
|
|
289
|
+
export class InvalidInputError extends Errors.BaseError {
|
|
290
|
+
name = 'Kzg.InvalidInputError';
|
|
291
|
+
constructor({ message }) {
|
|
292
|
+
super(message);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
/** Thrown when `precompute` is outside the supported memory bound. */
|
|
296
|
+
export class InvalidPrecomputeError extends Errors.BaseError {
|
|
297
|
+
name = 'Kzg.InvalidPrecomputeError';
|
|
298
|
+
constructor({ precompute }) {
|
|
299
|
+
super(`\`precompute\` must be an integer from 0 through 8. Got ${precompute}.`);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
/** Thrown when c-kzg rejects the trusted setup. */
|
|
303
|
+
export class InvalidTrustedSetupError extends Errors.BaseError {
|
|
304
|
+
name = 'Kzg.InvalidTrustedSetupError';
|
|
305
|
+
constructor(options = {}) {
|
|
306
|
+
super(options.message ?? 'c-kzg rejected the trusted setup.');
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
/** Thrown when the KZG artifact reaches its 128 MiB memory limit. */
|
|
310
|
+
export class MemoryError extends Errors.BaseError {
|
|
311
|
+
name = 'Kzg.MemoryError';
|
|
312
|
+
constructor() {
|
|
313
|
+
super('KZG WASM memory limit was exceeded.', {
|
|
314
|
+
metaMessages: [
|
|
315
|
+
'The artifact grows memory on demand up to 128 MiB.',
|
|
316
|
+
'Use a smaller `precompute` value or batch fewer proofs.',
|
|
317
|
+
],
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
/** Thrown when the KZG artifact traps or reports an internal error. */
|
|
322
|
+
export class WasmError extends Errors.BaseError {
|
|
323
|
+
name = 'Kzg.WasmError';
|
|
324
|
+
constructor(options = {}) {
|
|
325
|
+
super('KZG WASM operation failed.', {
|
|
326
|
+
cause: options.cause,
|
|
327
|
+
metaMessages: options.operation
|
|
328
|
+
? [`Operation: ${options.operation}`]
|
|
329
|
+
: undefined,
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
//# sourceMappingURL=Kzg.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Kzg.js","sourceRoot":"","sources":["../../src/wasm/Kzg.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type * as Engine from '../core/Engine.js';
|
|
2
|
+
import * as Errors from '../core/Errors.js';
|
|
3
|
+
import * as internal from './internal/instantiate.js';
|
|
4
|
+
export * from '../core/Secp256k1.js';
|
|
5
|
+
export { MemoryError } from './internal/instantiate.js';
|
|
6
|
+
/**
|
|
7
|
+
* Compiles WASM implementations of deterministic
|
|
8
|
+
* [`Secp256k1`](/api/Secp256k1) primitives, without installing them.
|
|
9
|
+
*
|
|
10
|
+
* Random key generation remains on Ox's host-backed default implementation.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```ts twoslash
|
|
14
|
+
* // @noErrors
|
|
15
|
+
* import { Engine } from 'ox'
|
|
16
|
+
* import { Secp256k1 } from 'ox/wasm'
|
|
17
|
+
*
|
|
18
|
+
* await Engine.install({ Secp256k1: Secp256k1.engine() })
|
|
19
|
+
*
|
|
20
|
+
* Secp256k1.getPublicKey({ privateKey: '0x...' })
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* @returns The WASM implementation of the deterministic `Secp256k1` primitives.
|
|
24
|
+
*/
|
|
25
|
+
export declare function engine(): Promise<engine.ReturnType>;
|
|
26
|
+
export declare namespace engine {
|
|
27
|
+
/** Every `Secp256k1` primitive this module implements. */
|
|
28
|
+
type ReturnType = {
|
|
29
|
+
[key in 'getPublicKey' | 'getSharedSecret' | 'recoverPublicKey' | 'sign' | 'verify']-?: NonNullable<Engine.Ecdsa[key]>;
|
|
30
|
+
};
|
|
31
|
+
type ErrorType = InvalidInputError | internal.MemoryError | Errors.GlobalErrorType;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Thrown when libsecp256k1 rejects a key or recovered signature.
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```ts twoslash
|
|
38
|
+
* import { Secp256k1 } from 'ox/wasm'
|
|
39
|
+
*
|
|
40
|
+
* try {
|
|
41
|
+
* const engine = await Secp256k1.engine()
|
|
42
|
+
* engine.getPublicKey(new Uint8Array(32))
|
|
43
|
+
* } catch (error) {
|
|
44
|
+
* if (error instanceof Secp256k1.InvalidInputError)
|
|
45
|
+
* console.error(error.message)
|
|
46
|
+
* }
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
export declare class InvalidInputError extends Errors.BaseError {
|
|
50
|
+
readonly name = "Secp256k1.InvalidInputError";
|
|
51
|
+
constructor({ operation }: {
|
|
52
|
+
operation: string;
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=Secp256k1.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Secp256k1.d.ts","sourceRoot":"","sources":["../../src/wasm/Secp256k1.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAC3C,OAAO,KAAK,QAAQ,MAAM,2BAA2B,CAAA;AAGrD,cAAc,sBAAsB,CAAA;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AASvD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAoJzD;AAED,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC;IAC9B,0DAA0D;IAC1D,KAAK,UAAU,GAAG;SACf,GAAG,IACA,cAAc,GACd,iBAAiB,GACjB,kBAAkB,GAClB,MAAM,GACN,QAAQ,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;KAChD,CAAA;IAED,KAAK,SAAS,GACV,iBAAiB,GACjB,QAAQ,CAAC,WAAW,GACpB,MAAM,CAAC,eAAe,CAAA;CAC3B;AA0BD;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,iBAAkB,SAAQ,MAAM,CAAC,SAAS;IACrD,SAAkB,IAAI,iCAAgC;gBAE1C,EAAE,SAAS,EAAE,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE;CAGjD"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import * as Errors from '../core/Errors.js';
|
|
2
|
+
import * as secp256k1 from './internal/secp256k1.js';
|
|
3
|
+
export * from '../core/Secp256k1.js';
|
|
4
|
+
export { MemoryError } from './internal/instantiate.js';
|
|
5
|
+
const privateKeySize = 32;
|
|
6
|
+
const publicKeySize = 65;
|
|
7
|
+
const sharedSecretSize = 33;
|
|
8
|
+
const compactSignatureSize = 64;
|
|
9
|
+
const recoveredSignatureSize = 65;
|
|
10
|
+
const maxRawMessageSize = 8192;
|
|
11
|
+
/**
|
|
12
|
+
* Compiles WASM implementations of deterministic
|
|
13
|
+
* [`Secp256k1`](/api/Secp256k1) primitives, without installing them.
|
|
14
|
+
*
|
|
15
|
+
* Random key generation remains on Ox's host-backed default implementation.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```ts twoslash
|
|
19
|
+
* // @noErrors
|
|
20
|
+
* import { Engine } from 'ox'
|
|
21
|
+
* import { Secp256k1 } from 'ox/wasm'
|
|
22
|
+
*
|
|
23
|
+
* await Engine.install({ Secp256k1: Secp256k1.engine() })
|
|
24
|
+
*
|
|
25
|
+
* Secp256k1.getPublicKey({ privateKey: '0x...' })
|
|
26
|
+
* ```
|
|
27
|
+
*
|
|
28
|
+
* @returns The WASM implementation of the deterministic `Secp256k1` primitives.
|
|
29
|
+
*/
|
|
30
|
+
export async function engine() {
|
|
31
|
+
const module = await secp256k1.load();
|
|
32
|
+
return {
|
|
33
|
+
getPublicKey(privateKey) {
|
|
34
|
+
assertLength(privateKey, privateKeySize, 'private key');
|
|
35
|
+
const size = privateKeySize + publicKeySize;
|
|
36
|
+
module.reserve(size);
|
|
37
|
+
const privateKeyPtr = module.heapBase;
|
|
38
|
+
const publicKeyPtr = privateKeyPtr + privateKeySize;
|
|
39
|
+
try {
|
|
40
|
+
module.view().set(privateKey, privateKeyPtr);
|
|
41
|
+
if (module.exports.secp256k1_get_public_key(privateKeyPtr, publicKeyPtr) !== 1)
|
|
42
|
+
throw new InvalidInputError({ operation: 'getPublicKey' });
|
|
43
|
+
return module.view().slice(publicKeyPtr, publicKeyPtr + publicKeySize);
|
|
44
|
+
}
|
|
45
|
+
finally {
|
|
46
|
+
module.exports.zero(privateKeyPtr, size);
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
getSharedSecret(privateKey, publicKey) {
|
|
50
|
+
assertLength(privateKey, privateKeySize, 'private key');
|
|
51
|
+
assertPublicKeyLength(publicKey);
|
|
52
|
+
const size = privateKeySize + publicKey.length + sharedSecretSize;
|
|
53
|
+
module.reserve(size);
|
|
54
|
+
const privateKeyPtr = module.heapBase;
|
|
55
|
+
const publicKeyPtr = privateKeyPtr + privateKeySize;
|
|
56
|
+
const sharedSecretPtr = publicKeyPtr + publicKey.length;
|
|
57
|
+
try {
|
|
58
|
+
const memory = module.view();
|
|
59
|
+
memory.set(privateKey, privateKeyPtr);
|
|
60
|
+
memory.set(publicKey, publicKeyPtr);
|
|
61
|
+
if (module.exports.secp256k1_get_shared_secret(privateKeyPtr, publicKeyPtr, publicKey.length, sharedSecretPtr) !== 1)
|
|
62
|
+
throw new InvalidInputError({ operation: 'getSharedSecret' });
|
|
63
|
+
return module
|
|
64
|
+
.view()
|
|
65
|
+
.slice(sharedSecretPtr, sharedSecretPtr + sharedSecretSize);
|
|
66
|
+
}
|
|
67
|
+
finally {
|
|
68
|
+
module.exports.zero(privateKeyPtr, size);
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
recoverPublicKey(signature, payload) {
|
|
72
|
+
assertLength(signature, recoveredSignatureSize, 'signature');
|
|
73
|
+
assertRawMessageLength(payload);
|
|
74
|
+
const size = recoveredSignatureSize + payload.length + publicKeySize;
|
|
75
|
+
module.reserve(size);
|
|
76
|
+
const signaturePtr = module.heapBase;
|
|
77
|
+
const payloadPtr = signaturePtr + recoveredSignatureSize;
|
|
78
|
+
const publicKeyPtr = payloadPtr + payload.length;
|
|
79
|
+
try {
|
|
80
|
+
const memory = module.view();
|
|
81
|
+
memory.set(signature, signaturePtr);
|
|
82
|
+
memory.set(payload, payloadPtr);
|
|
83
|
+
if (module.exports.secp256k1_recover_public_key(signaturePtr, payloadPtr, payload.length, publicKeyPtr) !== 1)
|
|
84
|
+
throw new InvalidInputError({ operation: 'recoverPublicKey' });
|
|
85
|
+
return module.view().slice(publicKeyPtr, publicKeyPtr + publicKeySize);
|
|
86
|
+
}
|
|
87
|
+
finally {
|
|
88
|
+
module.exports.zero(signaturePtr, size);
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
sign(payload, privateKey, options) {
|
|
92
|
+
assertLength(privateKey, privateKeySize, 'private key');
|
|
93
|
+
if (!options.prehash)
|
|
94
|
+
assertRawMessageLength(payload);
|
|
95
|
+
const entropy = options.extraEntropy === true
|
|
96
|
+
? crypto.getRandomValues(new Uint8Array(privateKeySize))
|
|
97
|
+
: options.extraEntropy === false
|
|
98
|
+
? undefined
|
|
99
|
+
: options.extraEntropy;
|
|
100
|
+
const entropySize = entropy?.length ?? 0;
|
|
101
|
+
const size = payload.length + privateKeySize + entropySize + recoveredSignatureSize;
|
|
102
|
+
module.reserve(size);
|
|
103
|
+
const payloadPtr = module.heapBase;
|
|
104
|
+
const privateKeyPtr = payloadPtr + payload.length;
|
|
105
|
+
const entropyPtr = entropy ? privateKeyPtr + privateKeySize : 0;
|
|
106
|
+
const signaturePtr = privateKeyPtr + privateKeySize + entropySize;
|
|
107
|
+
try {
|
|
108
|
+
const memory = module.view();
|
|
109
|
+
memory.set(payload, payloadPtr);
|
|
110
|
+
memory.set(privateKey, privateKeyPtr);
|
|
111
|
+
if (entropy)
|
|
112
|
+
memory.set(entropy, entropyPtr);
|
|
113
|
+
if (module.exports.secp256k1_sign(payloadPtr, payload.length, privateKeyPtr, entropyPtr, entropySize, Number(options.prehash), signaturePtr) !== 1)
|
|
114
|
+
throw new InvalidInputError({ operation: 'sign' });
|
|
115
|
+
return module
|
|
116
|
+
.view()
|
|
117
|
+
.slice(signaturePtr, signaturePtr + recoveredSignatureSize);
|
|
118
|
+
}
|
|
119
|
+
finally {
|
|
120
|
+
module.exports.zero(payloadPtr, size);
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
verify(signature, payload, publicKey, options) {
|
|
124
|
+
assertLength(signature, compactSignatureSize, 'signature');
|
|
125
|
+
assertPublicKeyLength(publicKey);
|
|
126
|
+
if (!options.prehash && payload.length > maxRawMessageSize)
|
|
127
|
+
return false;
|
|
128
|
+
const size = compactSignatureSize + payload.length + publicKey.length;
|
|
129
|
+
module.reserve(size);
|
|
130
|
+
const signaturePtr = module.heapBase;
|
|
131
|
+
const payloadPtr = signaturePtr + compactSignatureSize;
|
|
132
|
+
const publicKeyPtr = payloadPtr + payload.length;
|
|
133
|
+
try {
|
|
134
|
+
const memory = module.view();
|
|
135
|
+
memory.set(signature, signaturePtr);
|
|
136
|
+
memory.set(payload, payloadPtr);
|
|
137
|
+
memory.set(publicKey, publicKeyPtr);
|
|
138
|
+
return (module.exports.secp256k1_verify(signaturePtr, payloadPtr, payload.length, publicKeyPtr, publicKey.length, Number(options.prehash)) === 1);
|
|
139
|
+
}
|
|
140
|
+
finally {
|
|
141
|
+
module.exports.zero(signaturePtr, size);
|
|
142
|
+
}
|
|
143
|
+
},
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
function assertLength(value, length, name) {
|
|
147
|
+
if (value.length !== length)
|
|
148
|
+
throw new RangeError(`Secp256k1 ${name} must be ${length} bytes, got ${value.length}`);
|
|
149
|
+
}
|
|
150
|
+
function assertPublicKeyLength(publicKey) {
|
|
151
|
+
if (publicKey.length !== sharedSecretSize &&
|
|
152
|
+
publicKey.length !== publicKeySize)
|
|
153
|
+
throw new RangeError(`Secp256k1 public key must be 33 or 65 bytes, got ${publicKey.length}`);
|
|
154
|
+
}
|
|
155
|
+
function assertRawMessageLength(payload) {
|
|
156
|
+
if (payload.length > maxRawMessageSize)
|
|
157
|
+
throw new RangeError(`Secp256k1 unhashed payload must not exceed ${maxRawMessageSize} bytes, got ${payload.length}`);
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Thrown when libsecp256k1 rejects a key or recovered signature.
|
|
161
|
+
*
|
|
162
|
+
* @example
|
|
163
|
+
* ```ts twoslash
|
|
164
|
+
* import { Secp256k1 } from 'ox/wasm'
|
|
165
|
+
*
|
|
166
|
+
* try {
|
|
167
|
+
* const engine = await Secp256k1.engine()
|
|
168
|
+
* engine.getPublicKey(new Uint8Array(32))
|
|
169
|
+
* } catch (error) {
|
|
170
|
+
* if (error instanceof Secp256k1.InvalidInputError)
|
|
171
|
+
* console.error(error.message)
|
|
172
|
+
* }
|
|
173
|
+
* ```
|
|
174
|
+
*/
|
|
175
|
+
export class InvalidInputError extends Errors.BaseError {
|
|
176
|
+
name = 'Secp256k1.InvalidInputError';
|
|
177
|
+
constructor({ operation }) {
|
|
178
|
+
super(`WASM secp256k1 ${operation} received invalid input.`);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=Secp256k1.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Secp256k1.js","sourceRoot":"","sources":["../../src/wasm/Secp256k1.ts"],"names":[],"mappings":"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"}
|
package/dist/wasm/index.d.ts
CHANGED
|
@@ -60,7 +60,8 @@ export * as Ed25519 from './Ed25519.js';
|
|
|
60
60
|
*/
|
|
61
61
|
export * as Hash from './Hash.js';
|
|
62
62
|
/**
|
|
63
|
-
* WASM
|
|
63
|
+
* WASM implementations of Ox's synchronous PBKDF2-HMAC-SHA256 and scrypt
|
|
64
|
+
* primitives.
|
|
64
65
|
*
|
|
65
66
|
* @example
|
|
66
67
|
* ```ts twoslash
|
|
@@ -76,6 +77,28 @@ export * as Hash from './Hash.js';
|
|
|
76
77
|
* @category Crypto
|
|
77
78
|
*/
|
|
78
79
|
export * as Keystore from './Keystore.js';
|
|
80
|
+
/**
|
|
81
|
+
* WASM implementation of Ox's KZG interface, backed by c-kzg-4844.
|
|
82
|
+
*
|
|
83
|
+
* This module is not installed into [`Engine`](/api/Engine). Create an explicit
|
|
84
|
+
* instance, pass it anywhere that accepts `Kzg.Kzg`, and dispose it when done.
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* ```ts twoslash
|
|
88
|
+
* // @noErrors
|
|
89
|
+
* import { Setups } from 'ox/trusted-setups'
|
|
90
|
+
* import { Kzg } from 'ox/wasm'
|
|
91
|
+
*
|
|
92
|
+
* const kzg = await Kzg.create({
|
|
93
|
+
* trustedSetup: Setups.mainnet
|
|
94
|
+
* })
|
|
95
|
+
*
|
|
96
|
+
* kzg.dispose()
|
|
97
|
+
* ```
|
|
98
|
+
*
|
|
99
|
+
* @category Crypto
|
|
100
|
+
*/
|
|
101
|
+
export * as Kzg from './Kzg.js';
|
|
79
102
|
/**
|
|
80
103
|
* WASM implementation of Ox's BIP-39 seed derivation.
|
|
81
104
|
*
|
|
@@ -95,6 +118,26 @@ export * as Keystore from './Keystore.js';
|
|
|
95
118
|
* @category Crypto
|
|
96
119
|
*/
|
|
97
120
|
export * as Mnemonic from './Mnemonic.js';
|
|
121
|
+
/**
|
|
122
|
+
* WASM implementations of deterministic Secp256k1 primitives.
|
|
123
|
+
*
|
|
124
|
+
* This provider is opt-in because its embedded libsecp256k1 artifact is larger
|
|
125
|
+
* than the modules installed by [`Engine.install`](/api/Engine/install).
|
|
126
|
+
*
|
|
127
|
+
* @example
|
|
128
|
+
* ```ts twoslash
|
|
129
|
+
* // @noErrors
|
|
130
|
+
* import { Engine } from 'ox'
|
|
131
|
+
* import { Secp256k1 } from 'ox/wasm'
|
|
132
|
+
*
|
|
133
|
+
* await Engine.install({ Secp256k1: Secp256k1.engine() })
|
|
134
|
+
*
|
|
135
|
+
* Secp256k1.getPublicKey({ privateKey: '0x...' })
|
|
136
|
+
* ```
|
|
137
|
+
*
|
|
138
|
+
* @category Crypto
|
|
139
|
+
*/
|
|
140
|
+
export * as Secp256k1 from './Secp256k1.js';
|
|
98
141
|
/**
|
|
99
142
|
* WASM implementations of Ox's supported X25519 primitives.
|
|
100
143
|
*
|