ox 1.1.0 → 1.2.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 +54 -0
- package/dist/core/Engine.d.ts +43 -11
- package/dist/core/Engine.d.ts.map +1 -1
- package/dist/core/Engine.js +40 -10
- package/dist/core/Engine.js.map +1 -1
- package/dist/core/Hash.d.ts +36 -0
- package/dist/core/Hash.d.ts.map +1 -1
- package/dist/core/Hash.js +35 -0
- package/dist/core/Hash.js.map +1 -1
- package/dist/core/internal/engine.d.ts +8 -8
- package/dist/core/internal/engine.d.ts.map +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -2
- package/dist/index.js.map +1 -1
- package/dist/node/Ed25519.d.ts +33 -0
- package/dist/node/Ed25519.d.ts.map +1 -0
- package/dist/node/Ed25519.js +67 -0
- package/dist/node/Ed25519.js.map +1 -0
- package/dist/node/Engine.d.ts +29 -16
- package/dist/node/Engine.d.ts.map +1 -1
- package/dist/node/Engine.js +38 -14
- package/dist/node/Engine.js.map +1 -1
- package/dist/node/Hash.d.ts +17 -19
- package/dist/node/Hash.d.ts.map +1 -1
- package/dist/node/Hash.js +17 -19
- package/dist/node/Hash.js.map +1 -1
- package/dist/node/Keystore.d.ts +36 -0
- package/dist/node/Keystore.d.ts.map +1 -0
- package/dist/node/Keystore.js +72 -0
- package/dist/node/Keystore.js.map +1 -0
- package/dist/node/Mnemonic.d.ts +35 -0
- package/dist/node/Mnemonic.d.ts.map +1 -0
- package/dist/node/Mnemonic.js +46 -0
- package/dist/node/Mnemonic.js.map +1 -0
- package/dist/node/P256.d.ts +32 -0
- package/dist/node/P256.d.ts.map +1 -0
- package/dist/node/P256.js +34 -0
- package/dist/node/P256.js.map +1 -0
- package/dist/node/X25519.d.ts +31 -0
- package/dist/node/X25519.d.ts.map +1 -0
- package/dist/node/X25519.js +71 -0
- package/dist/node/X25519.js.map +1 -0
- package/dist/node/index.d.ts +95 -8
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.js +95 -8
- package/dist/node/index.js.map +1 -1
- 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/Ed25519.d.ts +35 -0
- package/dist/wasm/Ed25519.d.ts.map +1 -0
- package/dist/wasm/Ed25519.js +88 -0
- package/dist/wasm/Ed25519.js.map +1 -0
- package/dist/wasm/Engine.d.ts +36 -26
- package/dist/wasm/Engine.d.ts.map +1 -1
- package/dist/wasm/Engine.js +44 -25
- package/dist/wasm/Engine.js.map +1 -1
- package/dist/wasm/Hash.d.ts +13 -19
- package/dist/wasm/Hash.d.ts.map +1 -1
- package/dist/wasm/Hash.js +21 -27
- package/dist/wasm/Hash.js.map +1 -1
- package/dist/wasm/Keystore.d.ts +51 -0
- package/dist/wasm/Keystore.d.ts.map +1 -0
- package/dist/wasm/Keystore.js +51 -0
- package/dist/wasm/Keystore.js.map +1 -0
- 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/Mnemonic.d.ts +33 -0
- package/dist/wasm/Mnemonic.d.ts.map +1 -0
- package/dist/wasm/Mnemonic.js +30 -0
- package/dist/wasm/Mnemonic.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/X25519.d.ts +33 -0
- package/dist/wasm/X25519.d.ts.map +1 -0
- package/dist/wasm/X25519.js +53 -0
- package/dist/wasm/X25519.js.map +1 -0
- package/dist/wasm/index.d.ts +124 -12
- package/dist/wasm/index.d.ts.map +1 -1
- package/dist/wasm/index.js +124 -12
- package/dist/wasm/index.js.map +1 -1
- package/dist/wasm/internal/blake3.d.ts +11 -0
- package/dist/wasm/internal/blake3.d.ts.map +1 -0
- package/dist/wasm/internal/blake3.js +31 -0
- package/dist/wasm/internal/blake3.js.map +1 -0
- package/dist/wasm/internal/blake3.wasm.d.ts +3 -0
- package/dist/wasm/internal/blake3.wasm.d.ts.map +1 -0
- package/dist/wasm/internal/blake3.wasm.js +10 -0
- package/dist/wasm/internal/blake3.wasm.js.map +1 -0
- package/dist/wasm/internal/crypto25519.d.ts +16 -0
- package/dist/wasm/internal/crypto25519.d.ts.map +1 -0
- package/dist/wasm/internal/crypto25519.js +5 -0
- package/dist/wasm/internal/crypto25519.js.map +1 -0
- package/dist/wasm/internal/crypto25519.wasm.d.ts +3 -0
- package/dist/wasm/internal/crypto25519.wasm.d.ts.map +1 -0
- package/dist/wasm/internal/crypto25519.wasm.js +10 -0
- package/dist/wasm/internal/crypto25519.wasm.js.map +1 -0
- package/dist/wasm/internal/ed25519.d.ts +4 -0
- package/dist/wasm/internal/ed25519.d.ts.map +1 -0
- package/dist/wasm/internal/ed25519.js +21 -0
- package/dist/wasm/internal/ed25519.js.map +1 -0
- package/dist/wasm/internal/hashes.d.ts +12 -0
- package/dist/wasm/internal/hashes.d.ts.map +1 -0
- package/dist/wasm/internal/hashes.js +8 -0
- package/dist/wasm/internal/hashes.js.map +1 -0
- package/dist/wasm/internal/hashes.wasm.d.ts +4 -2
- package/dist/wasm/internal/hashes.wasm.d.ts.map +1 -1
- package/dist/wasm/internal/hashes.wasm.js +4 -2
- 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/mnemonic.d.ts +4 -0
- package/dist/wasm/internal/mnemonic.d.ts.map +1 -0
- package/dist/wasm/internal/mnemonic.js +45 -0
- package/dist/wasm/internal/mnemonic.js.map +1 -0
- package/dist/wasm/internal/pbkdf2.d.ts +12 -0
- package/dist/wasm/internal/pbkdf2.d.ts.map +1 -0
- package/dist/wasm/internal/pbkdf2.js +51 -0
- package/dist/wasm/internal/pbkdf2.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/wasm/internal/x25519.d.ts +4 -0
- package/dist/wasm/internal/x25519.d.ts.map +1 -0
- package/dist/wasm/internal/x25519.js +21 -0
- package/dist/wasm/internal/x25519.js.map +1 -0
- package/package.json +64 -2
- package/src/core/Engine.ts +84 -11
- package/src/core/Hash.ts +59 -0
- package/src/core/_test/Block.test.ts +9 -2
- package/src/core/_test/Engine.test-d.ts +56 -0
- package/src/core/_test/Engine.test.ts +95 -0
- package/src/core/_test/Hash.test-d.ts +18 -0
- package/src/core/_test/Hash.test.ts +100 -1
- package/src/core/_test/Hash.vectors.test.ts +7 -0
- package/src/core/_test/Transaction.test.ts +11 -2
- package/src/core/internal/engine.ts +8 -8
- package/src/index.ts +5 -2
- package/src/node/Ed25519.ts +87 -0
- package/src/node/Engine.ts +79 -23
- package/src/node/Hash.ts +25 -30
- package/src/node/Keystore.ts +103 -0
- package/src/node/Mnemonic.ts +68 -0
- package/src/node/P256.ts +48 -0
- package/src/node/X25519.ts +93 -0
- package/src/node/_test/Curves.fuzz.ts +76 -0
- package/src/node/_test/Ed25519.test-d.ts +35 -0
- package/src/node/_test/Ed25519.test.ts +220 -0
- package/src/node/_test/Engine.test-d.ts +28 -0
- package/src/node/_test/Engine.test.ts +62 -22
- package/src/node/_test/Hash.test-d.ts +16 -9
- package/src/node/_test/Hash.test.ts +10 -11
- package/src/node/_test/Keystore.fuzz.ts +58 -0
- package/src/node/_test/Keystore.test-d.ts +43 -0
- package/src/node/_test/Keystore.test.ts +198 -0
- package/src/node/_test/Mnemonic.fuzz.ts +31 -0
- package/src/node/_test/Mnemonic.test-d.ts +21 -0
- package/src/node/_test/Mnemonic.test.ts +98 -0
- package/src/node/_test/P256.test-d.ts +29 -0
- package/src/node/_test/P256.test.ts +102 -0
- package/src/node/_test/X25519.test-d.ts +28 -0
- package/src/node/_test/X25519.test.ts +239 -0
- package/src/node/index.ts +100 -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/Ed25519.ts +114 -0
- package/src/wasm/Engine.ts +78 -31
- package/src/wasm/Hash.bench.ts +2 -2
- package/src/wasm/Hash.ts +29 -50
- package/src/wasm/Keystore.bench.ts +26 -0
- package/src/wasm/Keystore.ts +66 -0
- package/src/wasm/Kzg.bench.ts +63 -0
- package/src/wasm/Kzg.ts +518 -0
- package/src/wasm/Mnemonic.ts +44 -0
- package/src/wasm/Secp256k1.bench.ts +79 -0
- package/src/wasm/Secp256k1.ts +248 -0
- package/src/wasm/X25519.ts +70 -0
- package/src/wasm/_test/Crypto25519.conformance.ts +57 -0
- package/src/wasm/_test/Crypto25519.fuzz.ts +187 -0
- package/src/wasm/_test/Ed25519.test-d.ts +28 -0
- package/src/wasm/_test/Ed25519.test.ts +168 -0
- package/src/wasm/_test/Ed25519.vectors.test.ts +73 -0
- package/src/wasm/_test/Engine.test-d.ts +29 -0
- package/src/wasm/_test/Engine.test.ts +59 -25
- package/src/wasm/_test/Hash.browser.test.ts +14 -7
- package/src/wasm/_test/Hash.fuzz.ts +58 -23
- package/src/wasm/_test/Hash.test-d.ts +16 -10
- package/src/wasm/_test/Hash.test.ts +148 -48
- package/src/wasm/_test/Hash.vectors.test.ts +15 -8
- package/src/wasm/_test/Keystore.browser.test.ts +73 -0
- package/src/wasm/_test/Keystore.fuzz.ts +163 -0
- package/src/wasm/_test/Keystore.test-d.ts +42 -0
- package/src/wasm/_test/Keystore.test.ts +477 -0
- package/src/wasm/_test/Keystore.vectors.test.ts +21 -0
- package/src/wasm/_test/Kzg.test-d.ts +19 -0
- package/src/wasm/_test/Kzg.test.ts +220 -0
- package/src/wasm/_test/Mnemonic.test-d.ts +17 -0
- package/src/wasm/_test/Mnemonic.test.ts +110 -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/_test/X25519.test-d.ts +21 -0
- package/src/wasm/_test/X25519.test.ts +194 -0
- package/src/wasm/_test/fixtures.ts +4 -0
- package/src/wasm/index.ts +130 -12
- package/src/wasm/internal/blake3.ts +45 -0
- package/src/wasm/internal/blake3.wasm.ts +11 -0
- package/src/wasm/internal/crypto25519.ts +43 -0
- package/src/wasm/internal/crypto25519.wasm.ts +11 -0
- package/src/wasm/internal/ed25519.ts +31 -0
- package/src/wasm/internal/hashes.ts +29 -0
- package/src/wasm/internal/hashes.wasm.ts +5 -2
- 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/mnemonic.ts +56 -0
- package/src/wasm/internal/pbkdf2.ts +86 -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/wasm/internal/x25519.ts +29 -0
- 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
|
@@ -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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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type * as Engine from '../core/Engine.js';
|
|
2
|
+
import type * as Errors from '../core/Errors.js';
|
|
3
|
+
import * as internal from './internal/instantiate.js';
|
|
4
|
+
export * from '../core/X25519.js';
|
|
5
|
+
export { MemoryError } from './internal/instantiate.js';
|
|
6
|
+
/**
|
|
7
|
+
* Compiles WASM implementations of selected [`X25519`](/api/X25519)
|
|
8
|
+
* primitives, without installing them.
|
|
9
|
+
*
|
|
10
|
+
* Random key generation remains on Ox's default implementation.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```ts twoslash
|
|
14
|
+
* // @noErrors
|
|
15
|
+
* import { Engine } from 'ox'
|
|
16
|
+
* import { X25519 } from 'ox/wasm'
|
|
17
|
+
*
|
|
18
|
+
* await Engine.install({ X25519: X25519.engine() })
|
|
19
|
+
*
|
|
20
|
+
* X25519.getPublicKey({ privateKey: '0x...' })
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* @returns The WASM implementation of part of the `X25519` slot.
|
|
24
|
+
*/
|
|
25
|
+
export declare function engine(): Promise<engine.ReturnType>;
|
|
26
|
+
export declare namespace engine {
|
|
27
|
+
/** Every `X25519` primitive this module implements. */
|
|
28
|
+
type ReturnType = {
|
|
29
|
+
[key in 'getPublicKey' | 'getSharedSecret']-?: NonNullable<Engine.Ecdh[key]>;
|
|
30
|
+
};
|
|
31
|
+
type ErrorType = internal.MemoryError | Errors.GlobalErrorType;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=X25519.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"X25519.d.ts","sourceRoot":"","sources":["../../src/wasm/X25519.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAEhD,OAAO,KAAK,QAAQ,MAAM,2BAA2B,CAAA;AAGrD,cAAc,mBAAmB,CAAA;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAIvD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAuBzD;AAED,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC;IAC9B,uDAAuD;IACvD,KAAK,UAAU,GAAG;SACf,GAAG,IAAI,cAAc,GAAG,iBAAiB,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAC7E,CAAA;IAED,KAAK,SAAS,GAAG,QAAQ,CAAC,WAAW,GAAG,MAAM,CAAC,eAAe,CAAA;CAC/D"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import * as crypto25519 from './internal/crypto25519.js';
|
|
2
|
+
import * as x25519 from './internal/x25519.js';
|
|
3
|
+
export * from '../core/X25519.js';
|
|
4
|
+
export { MemoryError } from './internal/instantiate.js';
|
|
5
|
+
const keySize = 32;
|
|
6
|
+
/**
|
|
7
|
+
* Compiles WASM implementations of selected [`X25519`](/api/X25519)
|
|
8
|
+
* primitives, without installing them.
|
|
9
|
+
*
|
|
10
|
+
* Random key generation remains on Ox's default implementation.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```ts twoslash
|
|
14
|
+
* // @noErrors
|
|
15
|
+
* import { Engine } from 'ox'
|
|
16
|
+
* import { X25519 } from 'ox/wasm'
|
|
17
|
+
*
|
|
18
|
+
* await Engine.install({ X25519: X25519.engine() })
|
|
19
|
+
*
|
|
20
|
+
* X25519.getPublicKey({ privateKey: '0x...' })
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* @returns The WASM implementation of part of the `X25519` slot.
|
|
24
|
+
*/
|
|
25
|
+
export async function engine() {
|
|
26
|
+
const module = await crypto25519.load();
|
|
27
|
+
return {
|
|
28
|
+
getPublicKey(privateKey) {
|
|
29
|
+
assertLength(privateKey, 'private');
|
|
30
|
+
module.reserve(keySize * 2);
|
|
31
|
+
const privateKeyPtr = module.heapBase;
|
|
32
|
+
const publicKeyPtr = privateKeyPtr + keySize;
|
|
33
|
+
try {
|
|
34
|
+
module.view().set(privateKey, privateKeyPtr);
|
|
35
|
+
module.exports.x25519_get_public_key(privateKeyPtr, publicKeyPtr);
|
|
36
|
+
return module.view().slice(publicKeyPtr, publicKeyPtr + keySize);
|
|
37
|
+
}
|
|
38
|
+
finally {
|
|
39
|
+
module.exports.zero(privateKeyPtr, keySize * 2);
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
getSharedSecret(privateKey, publicKey) {
|
|
43
|
+
assertLength(privateKey, 'private');
|
|
44
|
+
assertLength(publicKey, 'public');
|
|
45
|
+
return x25519.getSharedSecret(module, privateKey, publicKey);
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
function assertLength(key, type) {
|
|
50
|
+
if (key.length !== keySize)
|
|
51
|
+
throw new RangeError(`X25519 ${type} key must be ${keySize} bytes, got ${key.length}`);
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=X25519.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"X25519.js","sourceRoot":"","sources":["../../src/wasm/X25519.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,WAAW,MAAM,2BAA2B,CAAA;AAExD,OAAO,KAAK,MAAM,MAAM,sBAAsB,CAAA;AAE9C,cAAc,mBAAmB,CAAA;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAEvD,MAAM,OAAO,GAAG,EAAE,CAAA;AAElB;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM;IAC1B,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,CAAA;IAEvC,OAAO;QACL,YAAY,CAAC,UAAU;YACrB,YAAY,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;YACnC,MAAM,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC,CAAA;YAC3B,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAA;YACrC,MAAM,YAAY,GAAG,aAAa,GAAG,OAAO,CAAA;YAC5C,IAAI,CAAC;gBACH,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,UAAU,EAAE,aAAa,CAAC,CAAA;gBAC5C,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,aAAa,EAAE,YAAY,CAAC,CAAA;gBACjE,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,CAAA;YAClE,CAAC;oBAAS,CAAC;gBACT,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,GAAG,CAAC,CAAC,CAAA;YACjD,CAAC;QACH,CAAC;QACD,eAAe,CAAC,UAAU,EAAE,SAAS;YACnC,YAAY,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;YACnC,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;YACjC,OAAO,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,CAAA;QAC9D,CAAC;KACF,CAAA;AACH,CAAC;AAWD,SAAS,YAAY,CAAC,GAAe,EAAE,IAA0B;IAC/D,IAAI,GAAG,CAAC,MAAM,KAAK,OAAO;QACxB,MAAM,IAAI,UAAU,CAClB,UAAU,IAAI,gBAAgB,OAAO,eAAe,GAAG,CAAC,MAAM,EAAE,CACjE,CAAA;AACL,CAAC"}
|
package/dist/wasm/index.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/** @entrypointCategory WASM */
|
|
2
2
|
/**
|
|
3
|
-
* WASM implementations of
|
|
3
|
+
* WASM implementations of Ox's supported cryptographic primitives, compiled
|
|
4
|
+
* from C.
|
|
4
5
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* synchronous.
|
|
6
|
+
* Install it during startup. WASM must be compiled asynchronously, so the
|
|
7
|
+
* `await` lives there. Every cryptographic call afterwards is synchronous.
|
|
8
8
|
*
|
|
9
9
|
* :::note
|
|
10
10
|
* Performance varies by primitive, input size, runtime, and processor. Run
|
|
@@ -15,32 +15,144 @@
|
|
|
15
15
|
* @example
|
|
16
16
|
* ```ts twoslash
|
|
17
17
|
* // @noErrors
|
|
18
|
-
* import { Hash } from 'ox'
|
|
19
|
-
* import { Engine } from 'ox/wasm'
|
|
18
|
+
* import { Engine, Hash } from 'ox/wasm'
|
|
20
19
|
*
|
|
21
|
-
* await Engine.
|
|
20
|
+
* await Engine.install()
|
|
22
21
|
*
|
|
23
|
-
* Hash.
|
|
22
|
+
* Hash.sha256('0xdeadbeef')
|
|
24
23
|
* ```
|
|
25
24
|
*
|
|
26
25
|
* @category Crypto
|
|
27
26
|
*/
|
|
28
27
|
export * as Engine from './Engine.js';
|
|
28
|
+
/**
|
|
29
|
+
* WASM implementations of Ox's supported Ed25519 primitives.
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```ts twoslash
|
|
33
|
+
* // @noErrors
|
|
34
|
+
* import { Engine } from 'ox'
|
|
35
|
+
* import { Ed25519 } from 'ox/wasm'
|
|
36
|
+
*
|
|
37
|
+
* await Engine.install({ Ed25519: Ed25519.engine() })
|
|
38
|
+
*
|
|
39
|
+
* Ed25519.getPublicKey({ privateKey: '0x...' })
|
|
40
|
+
* ```
|
|
41
|
+
*
|
|
42
|
+
* @category Crypto
|
|
43
|
+
*/
|
|
44
|
+
export * as Ed25519 from './Ed25519.js';
|
|
29
45
|
/**
|
|
30
46
|
* WASM implementations of Ox's supported hash primitives.
|
|
31
47
|
*
|
|
32
48
|
* @example
|
|
33
49
|
* ```ts twoslash
|
|
34
50
|
* // @noErrors
|
|
35
|
-
* import { Engine
|
|
36
|
-
* import
|
|
51
|
+
* import { Engine } from 'ox'
|
|
52
|
+
* import { Hash } from 'ox/wasm'
|
|
37
53
|
*
|
|
38
|
-
* Engine.
|
|
54
|
+
* await Engine.install({ Hash: Hash.engine() })
|
|
39
55
|
*
|
|
40
|
-
* Hash.
|
|
56
|
+
* Hash.sha256('0xdeadbeef')
|
|
41
57
|
* ```
|
|
42
58
|
*
|
|
43
59
|
* @category Crypto
|
|
44
60
|
*/
|
|
45
61
|
export * as Hash from './Hash.js';
|
|
62
|
+
/**
|
|
63
|
+
* WASM implementations of Ox's synchronous PBKDF2-HMAC-SHA256 and scrypt
|
|
64
|
+
* primitives.
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* ```ts twoslash
|
|
68
|
+
* // @noErrors
|
|
69
|
+
* import { Engine } from 'ox'
|
|
70
|
+
* import { Keystore } from 'ox/wasm'
|
|
71
|
+
*
|
|
72
|
+
* await Engine.install({ Keystore: Keystore.engine() })
|
|
73
|
+
*
|
|
74
|
+
* Keystore.pbkdf2({ password: 'testpassword' })
|
|
75
|
+
* ```
|
|
76
|
+
*
|
|
77
|
+
* @category Crypto
|
|
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';
|
|
102
|
+
/**
|
|
103
|
+
* WASM implementation of Ox's BIP-39 seed derivation.
|
|
104
|
+
*
|
|
105
|
+
* @example
|
|
106
|
+
* ```ts twoslash
|
|
107
|
+
* // @noErrors
|
|
108
|
+
* import { Engine } from 'ox'
|
|
109
|
+
* import { Mnemonic } from 'ox/wasm'
|
|
110
|
+
*
|
|
111
|
+
* await Engine.install({ Mnemonic: Mnemonic.engine() })
|
|
112
|
+
*
|
|
113
|
+
* Mnemonic.toSeed(
|
|
114
|
+
* 'test test test test test test test test test test test junk'
|
|
115
|
+
* )
|
|
116
|
+
* ```
|
|
117
|
+
*
|
|
118
|
+
* @category Crypto
|
|
119
|
+
*/
|
|
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';
|
|
141
|
+
/**
|
|
142
|
+
* WASM implementations of Ox's supported X25519 primitives.
|
|
143
|
+
*
|
|
144
|
+
* @example
|
|
145
|
+
* ```ts twoslash
|
|
146
|
+
* // @noErrors
|
|
147
|
+
* import { Engine } from 'ox'
|
|
148
|
+
* import { X25519 } from 'ox/wasm'
|
|
149
|
+
*
|
|
150
|
+
* await Engine.install({ X25519: X25519.engine() })
|
|
151
|
+
*
|
|
152
|
+
* X25519.getPublicKey({ privateKey: '0x...' })
|
|
153
|
+
* ```
|
|
154
|
+
*
|
|
155
|
+
* @category Crypto
|
|
156
|
+
*/
|
|
157
|
+
export * as X25519 from './X25519.js';
|
|
46
158
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/wasm/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/wasm/index.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAE/B
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/wasm/index.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAE/B;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAErC;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AAEvC;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAEjC;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAEzC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAE/B;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAEzC;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAE3C;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA"}
|
package/dist/wasm/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/** @entrypointCategory WASM */
|
|
2
2
|
/**
|
|
3
|
-
* WASM implementations of
|
|
3
|
+
* WASM implementations of Ox's supported cryptographic primitives, compiled
|
|
4
|
+
* from C.
|
|
4
5
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* synchronous.
|
|
6
|
+
* Install it during startup. WASM must be compiled asynchronously, so the
|
|
7
|
+
* `await` lives there. Every cryptographic call afterwards is synchronous.
|
|
8
8
|
*
|
|
9
9
|
* :::note
|
|
10
10
|
* Performance varies by primitive, input size, runtime, and processor. Run
|
|
@@ -15,32 +15,144 @@
|
|
|
15
15
|
* @example
|
|
16
16
|
* ```ts twoslash
|
|
17
17
|
* // @noErrors
|
|
18
|
-
* import { Hash } from 'ox'
|
|
19
|
-
* import { Engine } from 'ox/wasm'
|
|
18
|
+
* import { Engine, Hash } from 'ox/wasm'
|
|
20
19
|
*
|
|
21
|
-
* await Engine.
|
|
20
|
+
* await Engine.install()
|
|
22
21
|
*
|
|
23
|
-
* Hash.
|
|
22
|
+
* Hash.sha256('0xdeadbeef')
|
|
24
23
|
* ```
|
|
25
24
|
*
|
|
26
25
|
* @category Crypto
|
|
27
26
|
*/
|
|
28
27
|
export * as Engine from './Engine.js';
|
|
28
|
+
/**
|
|
29
|
+
* WASM implementations of Ox's supported Ed25519 primitives.
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```ts twoslash
|
|
33
|
+
* // @noErrors
|
|
34
|
+
* import { Engine } from 'ox'
|
|
35
|
+
* import { Ed25519 } from 'ox/wasm'
|
|
36
|
+
*
|
|
37
|
+
* await Engine.install({ Ed25519: Ed25519.engine() })
|
|
38
|
+
*
|
|
39
|
+
* Ed25519.getPublicKey({ privateKey: '0x...' })
|
|
40
|
+
* ```
|
|
41
|
+
*
|
|
42
|
+
* @category Crypto
|
|
43
|
+
*/
|
|
44
|
+
export * as Ed25519 from './Ed25519.js';
|
|
29
45
|
/**
|
|
30
46
|
* WASM implementations of Ox's supported hash primitives.
|
|
31
47
|
*
|
|
32
48
|
* @example
|
|
33
49
|
* ```ts twoslash
|
|
34
50
|
* // @noErrors
|
|
35
|
-
* import { Engine
|
|
36
|
-
* import
|
|
51
|
+
* import { Engine } from 'ox'
|
|
52
|
+
* import { Hash } from 'ox/wasm'
|
|
37
53
|
*
|
|
38
|
-
* Engine.
|
|
54
|
+
* await Engine.install({ Hash: Hash.engine() })
|
|
39
55
|
*
|
|
40
|
-
* Hash.
|
|
56
|
+
* Hash.sha256('0xdeadbeef')
|
|
41
57
|
* ```
|
|
42
58
|
*
|
|
43
59
|
* @category Crypto
|
|
44
60
|
*/
|
|
45
61
|
export * as Hash from './Hash.js';
|
|
62
|
+
/**
|
|
63
|
+
* WASM implementations of Ox's synchronous PBKDF2-HMAC-SHA256 and scrypt
|
|
64
|
+
* primitives.
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* ```ts twoslash
|
|
68
|
+
* // @noErrors
|
|
69
|
+
* import { Engine } from 'ox'
|
|
70
|
+
* import { Keystore } from 'ox/wasm'
|
|
71
|
+
*
|
|
72
|
+
* await Engine.install({ Keystore: Keystore.engine() })
|
|
73
|
+
*
|
|
74
|
+
* Keystore.pbkdf2({ password: 'testpassword' })
|
|
75
|
+
* ```
|
|
76
|
+
*
|
|
77
|
+
* @category Crypto
|
|
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';
|
|
102
|
+
/**
|
|
103
|
+
* WASM implementation of Ox's BIP-39 seed derivation.
|
|
104
|
+
*
|
|
105
|
+
* @example
|
|
106
|
+
* ```ts twoslash
|
|
107
|
+
* // @noErrors
|
|
108
|
+
* import { Engine } from 'ox'
|
|
109
|
+
* import { Mnemonic } from 'ox/wasm'
|
|
110
|
+
*
|
|
111
|
+
* await Engine.install({ Mnemonic: Mnemonic.engine() })
|
|
112
|
+
*
|
|
113
|
+
* Mnemonic.toSeed(
|
|
114
|
+
* 'test test test test test test test test test test test junk'
|
|
115
|
+
* )
|
|
116
|
+
* ```
|
|
117
|
+
*
|
|
118
|
+
* @category Crypto
|
|
119
|
+
*/
|
|
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';
|
|
141
|
+
/**
|
|
142
|
+
* WASM implementations of Ox's supported X25519 primitives.
|
|
143
|
+
*
|
|
144
|
+
* @example
|
|
145
|
+
* ```ts twoslash
|
|
146
|
+
* // @noErrors
|
|
147
|
+
* import { Engine } from 'ox'
|
|
148
|
+
* import { X25519 } from 'ox/wasm'
|
|
149
|
+
*
|
|
150
|
+
* await Engine.install({ X25519: X25519.engine() })
|
|
151
|
+
*
|
|
152
|
+
* X25519.getPublicKey({ privateKey: '0x...' })
|
|
153
|
+
* ```
|
|
154
|
+
*
|
|
155
|
+
* @category Crypto
|
|
156
|
+
*/
|
|
157
|
+
export * as X25519 from './X25519.js';
|
|
46
158
|
//# sourceMappingURL=index.js.map
|
package/dist/wasm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/wasm/index.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAE/B
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/wasm/index.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAE/B;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAErC;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AAEvC;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAEjC;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAEzC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAE/B;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAEzC;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAE3C;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as internal from './instantiate.js';
|
|
2
|
+
/** Exports supplied by the dedicated portable BLAKE3 artifact. @internal */
|
|
3
|
+
export type Exports = {
|
|
4
|
+
blake3_hash(input: number, length: number, out: number): void;
|
|
5
|
+
zero(ptr: number, length: number): void;
|
|
6
|
+
};
|
|
7
|
+
/** Returns the one memoized BLAKE3 instance shared by its providers. */
|
|
8
|
+
export declare function load(): Promise<internal.Module<Exports>>;
|
|
9
|
+
/** Hashes an input through a loaded BLAKE3 module. @internal */
|
|
10
|
+
export declare function hash(module: internal.Module<Exports>, input: Uint8Array): Uint8Array;
|
|
11
|
+
//# sourceMappingURL=blake3.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blake3.d.ts","sourceRoot":"","sources":["../../../src/wasm/internal/blake3.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAA;AAK5C,4EAA4E;AAC5E,MAAM,MAAM,OAAO,GAAG;IACpB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7D,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CACxC,CAAA;AAMD,wEAAwE;AACxE,wBAAgB,IAAI,sCAEnB;AAED,gEAAgE;AAChE,wBAAgB,IAAI,CAClB,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAChC,KAAK,EAAE,UAAU,GAChB,UAAU,CAmBZ"}
|