ox 1.0.5 → 1.1.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 +50 -0
- package/dist/core/Base64.d.ts +10 -21
- package/dist/core/Base64.d.ts.map +1 -1
- package/dist/core/Base64.js +8 -127
- package/dist/core/Base64.js.map +1 -1
- package/dist/core/BinaryStateTree.d.ts.map +1 -1
- package/dist/core/BinaryStateTree.js +2 -2
- package/dist/core/BinaryStateTree.js.map +1 -1
- package/dist/core/Bls.d.ts.map +1 -1
- package/dist/core/Bls.js +19 -44
- package/dist/core/Bls.js.map +1 -1
- package/dist/core/Ed25519.d.ts.map +1 -1
- package/dist/core/Ed25519.js +7 -6
- package/dist/core/Ed25519.js.map +1 -1
- package/dist/core/Engine.d.ts +124 -0
- package/dist/core/Engine.d.ts.map +1 -0
- package/dist/core/Engine.js +180 -0
- package/dist/core/Engine.js.map +1 -0
- package/dist/core/Hash.d.ts +4 -4
- package/dist/core/Hash.d.ts.map +1 -1
- package/dist/core/Hash.js +9 -12
- package/dist/core/Hash.js.map +1 -1
- package/dist/core/Keystore.d.ts.map +1 -1
- package/dist/core/Keystore.js +15 -10
- package/dist/core/Keystore.js.map +1 -1
- package/dist/core/Mnemonic.d.ts.map +1 -1
- package/dist/core/Mnemonic.js +3 -2
- package/dist/core/Mnemonic.js.map +1 -1
- package/dist/core/P256.d.ts.map +1 -1
- package/dist/core/P256.js +8 -9
- package/dist/core/P256.js.map +1 -1
- package/dist/core/Secp256k1.d.ts.map +1 -1
- package/dist/core/Secp256k1.js +8 -9
- package/dist/core/Secp256k1.js.map +1 -1
- package/dist/core/WebCryptoP256.d.ts.map +1 -1
- package/dist/core/WebCryptoP256.js +2 -2
- package/dist/core/WebCryptoP256.js.map +1 -1
- package/dist/core/X25519.d.ts.map +1 -1
- package/dist/core/X25519.js +4 -3
- package/dist/core/X25519.js.map +1 -1
- package/dist/core/internal/bls.d.ts +12 -0
- package/dist/core/internal/bls.d.ts.map +1 -0
- package/dist/core/internal/bls.js +79 -0
- package/dist/core/internal/bls.js.map +1 -0
- package/dist/core/internal/codec/base64.d.ts +84 -0
- package/dist/core/internal/codec/base64.d.ts.map +1 -0
- package/dist/core/internal/codec/base64.js +177 -0
- package/dist/core/internal/codec/base64.js.map +1 -0
- package/dist/core/internal/codec/hex.d.ts +49 -4
- package/dist/core/internal/codec/hex.d.ts.map +1 -1
- package/dist/core/internal/codec/hex.js +109 -35
- package/dist/core/internal/codec/hex.js.map +1 -1
- package/dist/core/internal/curves.d.ts +17 -0
- package/dist/core/internal/curves.d.ts.map +1 -0
- package/dist/core/internal/curves.js +17 -0
- package/dist/core/internal/curves.js.map +1 -0
- package/dist/core/internal/ed25519.d.ts +14 -0
- package/dist/core/internal/ed25519.d.ts.map +1 -0
- package/dist/core/internal/ed25519.js +29 -0
- package/dist/core/internal/ed25519.js.map +1 -0
- package/dist/core/internal/engine.d.ts +278 -0
- package/dist/core/internal/engine.d.ts.map +1 -0
- package/dist/core/internal/engine.js +131 -0
- package/dist/core/internal/engine.js.map +1 -0
- package/dist/core/internal/hash.d.ts +12 -0
- package/dist/core/internal/hash.d.ts.map +1 -0
- package/dist/core/internal/hash.js +30 -0
- package/dist/core/internal/hash.js.map +1 -0
- package/dist/core/internal/keystore.d.ts +14 -0
- package/dist/core/internal/keystore.d.ts.map +1 -0
- package/dist/core/internal/keystore.js +32 -0
- package/dist/core/internal/keystore.js.map +1 -0
- package/dist/core/internal/mnemonic.d.ts +4 -0
- package/dist/core/internal/mnemonic.d.ts.map +1 -0
- package/dist/core/internal/mnemonic.js +14 -0
- package/dist/core/internal/mnemonic.js.map +1 -0
- package/dist/core/internal/p256.d.ts +14 -0
- package/dist/core/internal/p256.d.ts.map +1 -0
- package/dist/core/internal/p256.js +36 -0
- package/dist/core/internal/p256.js.map +1 -0
- package/dist/core/internal/secp256k1.d.ts +14 -0
- package/dist/core/internal/secp256k1.d.ts.map +1 -0
- package/dist/core/internal/secp256k1.js +36 -0
- package/dist/core/internal/secp256k1.js.map +1 -0
- package/dist/core/internal/x25519.d.ts +8 -0
- package/dist/core/internal/x25519.d.ts.map +1 -0
- package/dist/core/internal/x25519.js +20 -0
- package/dist/core/internal/x25519.js.map +1 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.docs.d.ts +2 -0
- package/dist/index.docs.d.ts.map +1 -1
- package/dist/index.docs.js +2 -0
- package/dist/index.docs.js.map +1 -1
- package/dist/index.js +35 -0
- package/dist/index.js.map +1 -1
- package/dist/node/Engine.d.ts +55 -0
- package/dist/node/Engine.d.ts.map +1 -0
- package/dist/node/Engine.js +51 -0
- package/dist/node/Engine.js.map +1 -0
- package/dist/node/Hash.d.ts +39 -0
- package/dist/node/Hash.d.ts.map +1 -0
- package/dist/node/Hash.js +37 -0
- package/dist/node/Hash.js.map +1 -0
- package/dist/node/index.d.ts +39 -0
- package/dist/node/index.d.ts.map +1 -0
- package/dist/node/index.js +39 -0
- package/dist/node/index.js.map +1 -0
- package/dist/tempo/VirtualMaster.d.ts +2 -0
- package/dist/tempo/VirtualMaster.d.ts.map +1 -1
- package/dist/tempo/VirtualMaster.js +19 -5
- package/dist/tempo/VirtualMaster.js.map +1 -1
- package/dist/tempo/internal/mine.wasm.d.ts +2 -4
- package/dist/tempo/internal/mine.wasm.d.ts.map +1 -1
- package/dist/tempo/internal/mine.wasm.js +7 -12
- package/dist/tempo/internal/mine.wasm.js.map +1 -1
- package/dist/tempo/internal/virtualMasterPool.js +4 -1
- package/dist/tempo/internal/virtualMasterPool.js.map +1 -1
- package/dist/wasm/Engine.d.ts +62 -0
- package/dist/wasm/Engine.d.ts.map +1 -0
- package/dist/wasm/Engine.js +57 -0
- package/dist/wasm/Engine.js.map +1 -0
- package/dist/wasm/Hash.d.ts +49 -0
- package/dist/wasm/Hash.d.ts.map +1 -0
- package/dist/wasm/Hash.js +70 -0
- package/dist/wasm/Hash.js.map +1 -0
- package/dist/wasm/index.d.ts +46 -0
- package/dist/wasm/index.d.ts.map +1 -0
- package/dist/wasm/index.js +46 -0
- package/dist/wasm/index.js.map +1 -0
- package/dist/wasm/internal/hash.d.ts +9 -0
- package/dist/wasm/internal/hash.d.ts.map +1 -0
- package/dist/wasm/internal/hash.js +26 -0
- package/dist/wasm/internal/hash.js.map +1 -0
- package/dist/wasm/internal/hashes.wasm.d.ts +5 -0
- package/dist/wasm/internal/hashes.wasm.d.ts.map +1 -0
- package/dist/wasm/internal/hashes.wasm.js +12 -0
- package/dist/wasm/internal/hashes.wasm.js.map +1 -0
- package/dist/wasm/internal/instantiate.d.ts +56 -0
- package/dist/wasm/internal/instantiate.d.ts.map +1 -0
- package/dist/wasm/internal/instantiate.js +92 -0
- package/dist/wasm/internal/instantiate.js.map +1 -0
- package/dist/zod/TypedData.d.ts +12 -12
- package/package.json +36 -1
- package/src/core/Base64.ts +19 -166
- package/src/core/BinaryStateTree.ts +2 -3
- package/src/core/Bls.ts +27 -77
- package/src/core/Ed25519.ts +7 -7
- package/src/core/Engine.ts +235 -0
- package/src/core/Hash.ts +9 -12
- package/src/core/Keystore.ts +17 -17
- package/src/core/Mnemonic.ts +3 -6
- package/src/core/P256.ts +15 -24
- package/src/core/Rlp_tx.bench.ts +2 -4
- package/src/core/Secp256k1.ts +9 -14
- package/src/core/TxEnvelopeEip1559.bench.ts +0 -5
- package/src/core/WebCryptoP256.ts +2 -2
- package/src/core/X25519.ts +4 -3
- package/src/core/_test/AbiParameters.adversarial.fuzz.ts +1 -2
- package/src/core/_test/AbiParameters.fuzz.ts +1 -2
- package/src/core/_test/Base.fuzz.ts +1 -2
- package/src/core/_test/Cbor.fuzz.ts +1 -2
- package/src/core/_test/Engine.fuzz.ts +293 -0
- package/src/core/_test/Engine.test-d.ts +84 -0
- package/src/core/_test/Engine.test.ts +523 -0
- package/src/core/_test/Hash.vectors.test.ts +56 -0
- package/src/core/_test/Hex.fuzz.ts +1 -2
- package/src/core/_test/Rlp.fuzz.ts +1 -2
- package/src/core/_test/Signature.fuzz.ts +1 -2
- package/src/core/_test/curves.test.ts +7 -0
- package/src/core/_test/index.test.ts +1 -0
- package/src/core/internal/bls.ts +121 -0
- package/src/core/internal/codec/_test/base64.conformance.ts +156 -0
- package/src/core/internal/codec/_test/hex.conformance.ts +204 -0
- package/src/core/internal/codec/_test/hex.fuzz.ts +234 -0
- package/src/core/internal/codec/_test/hex.test.ts +124 -0
- package/src/core/internal/codec/base64.ts +222 -0
- package/src/core/internal/codec/hex.ts +115 -34
- package/src/core/internal/curves.ts +18 -0
- package/src/core/internal/ed25519.ts +64 -0
- package/src/core/internal/engine.ts +410 -0
- package/src/core/internal/hash.ts +48 -0
- package/src/core/internal/keystore.ts +107 -0
- package/src/core/internal/mnemonic.ts +18 -0
- package/src/core/internal/p256.ts +91 -0
- package/src/core/internal/secp256k1.ts +91 -0
- package/src/core/internal/x25519.ts +40 -0
- package/src/index.docs.ts +2 -0
- package/src/index.ts +36 -0
- package/src/node/Engine.ts +69 -0
- package/src/node/Hash.ts +56 -0
- package/src/node/_test/Engine.test.ts +62 -0
- package/src/node/_test/Hash.test-d.ts +26 -0
- package/src/node/_test/Hash.test.ts +102 -0
- package/src/node/index.ts +40 -0
- package/src/tempo/VirtualMaster.test.ts +75 -0
- package/src/tempo/VirtualMaster.ts +28 -6
- package/src/tempo/internal/mine.wasm.ts +7 -13
- package/src/tempo/internal/virtualMasterPool.ts +4 -1
- package/src/tsconfig.json +2 -1
- package/src/version.ts +1 -1
- package/src/wasm/Engine.ts +76 -0
- package/src/wasm/Hash.bench.ts +60 -0
- package/src/wasm/Hash.ts +109 -0
- package/src/wasm/_test/Engine.test.ts +62 -0
- package/src/wasm/_test/Hash.browser.test.ts +50 -0
- package/src/wasm/_test/Hash.fuzz.ts +188 -0
- package/src/wasm/_test/Hash.test-d.ts +28 -0
- package/src/wasm/_test/Hash.test.ts +211 -0
- package/src/wasm/_test/Hash.vectors.test.ts +117 -0
- package/src/wasm/_test/Runtime.test.ts +21 -0
- package/src/wasm/_test/runtime.wasm.ts +11 -0
- package/src/wasm/index.ts +47 -0
- package/src/wasm/internal/hash.ts +50 -0
- package/src/wasm/internal/hashes.wasm.ts +14 -0
- package/src/wasm/internal/instantiate.ts +135 -0
- package/src/tempo/internal/mine.c +0 -182
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// Generated by `pnpm wasm:build --target=runtime-test`. Do not edit.
|
|
2
|
+
//
|
|
3
|
+
// Compiled from wasm/test/ox_rt.c, wasm/src/ox_rt.c
|
|
4
|
+
// with wasi-sdk 25.0 + binaryen 123.
|
|
5
|
+
//
|
|
6
|
+
// `pnpm wasm:check` rebuilds this file and fails if the bytes differ, so any
|
|
7
|
+
// change to the C or to `wasm/targets.ts` must be followed by `pnpm wasm:build`.
|
|
8
|
+
|
|
9
|
+
/** Base64-encoded WASM binary. */
|
|
10
|
+
export const wasmBase64 =
|
|
11
|
+
'AGFzbQEAAAABFQRgAAF/YAF/AX9gAn9/AX9gAn9/AAMGBQABAgADBQQBAQICBggBfwFBkIgECwcjBAZtZW1vcnkCAANydW4AAAloZWFwX2Jhc2UAAwR6ZXJvAAQKghEFhQoBBX8jAEEQayIEJAAgBELAgomaxKiRo8cANwAIIAQgBCkACDcAAEEQIQICQCAELQAAQcAARw0AIAQtAAFBwQBHDQAgBC0AAkHCAEcNACAELQADQcMARw0AIAQtAARBxABHDQAgBC0ABUHFAEcNACAELQAGQcYARw0AIAQtAAdBxwBHDQBBAyECQRAQASEDQRAQASEAIANFDQAgAEUNACADQQE6AAAgAEGAAToAACADQQI6AAEgAEGBAToAASADQQM6AAIgAEGCAToAAkEEIQIgA0EEOgADIABBgwE6AAMgA0EFOgAEIABBhAE6AAQgA0EGOgAFIABBhQE6AAUgA0EHOgAGIABBhgE6AAYgA0EIOgAHIABBhwE6AAcgA0EJOgAIIABBiAE6AAggA0EKOgAJIABBiQE6AAkgA0ELOgAKIABBigE6AAogA0EMOgALIABBiwE6AAsgA0ENOgAMIABBjAE6AAwgA0EOOgANIABBjQE6AA0gA0EPOgAOIABBjgE6AA4gA0EQOgAPIABBjwE6AA8gA0EgEAIiAUUNACABIANGDQBBBSECIAEtAABBAUcNACAALQAAQYABRwRAQQYhAgwBCyABLQABQQJHDQAgAC0AAUGBAUcEQEEGIQIMAQsgAS0AAkEDRw0AIAAtAAJBggFHBEBBBiECDAELIAEtAANBBEcNACAALQADQYMBRwRAQQYhAgwBCyABLQAEQQVHDQBBBiECIAAtAARBhAFHDQAgAS0ABUEGRwRAQQUhAgwBCyAALQAFQYUBRw0AIAEtAAZBB0cEQEEFIQIMAQsgAC0ABkGGAUcNACABLQAHQQhHBEBBBSECDAELIAAtAAdBhwFHDQAgAS0ACEEJRwRAQQUhAgwBCyAALQAIQYgBRw0AIAEtAAlBCkcEQEEFIQIMAQsgAC0ACUGJAUcNACABLQAKQQtHBEBBBSECDAELIAAtAApBigFHDQAgAS0AC0EMRwRAQQUhAgwBCyAALQALQYsBRw0AIAEtAAxBDUcEQEEFIQIMAQsgAC0ADEGMAUcNACABLQANQQ5HBEBBBSECDAELIAAtAA1BjQFHDQAgAS0ADkEPRwRAQQUhAgwBCyAALQAOQY4BRw0AQQUhAiABLQAPQRBHDQBBBiECIAAtAA9BjwFHDQBBCCECQQgQASIARQRAQQchAgwBCyAAQvDjy5/Pvr37dzcAACAAQRgQAiAARw0AQQkhAiAALQAAQfABRw0AIAAtAAFB8QFHDQAgAC0AAkHyAUcNACAALQADQfMBRw0AIAAtAARB9AFHDQAgAC0ABUH1AUcNACAALQAGQfYBRw0AIAAtAAdB9wFHDQAgAEEEEAIgAEcEQEEKIQIMAQtBCyECIAAtAABB8AFHDQAgAC0AAUHxAUcNACAALQACQfIBRw0AIAAtAANB8wFHDQBBAEEIEAJFBEBBDCECDAELIAFBfxACBEBBDiECDAELQQ8hAiABLQAAQQFHDQAgAS0AAUECRw0AIAEtAAJBA0cNACABLQADQQRHDQAgAS0ABEEFRw0AIAEtAAVBBkcNACABLQAGQQdHDQAgAS0AB0EIRw0AIAEtAAhBCUcNACABLQAJQQpHDQAgAS0ACkELRw0AIAEtAAtBDEcNACABLQAMQQ1HDQAgAS0ADUEORw0AIAEtAA5BD0cNAEEPQQAgAS0AD0EQRxshAgsgBEEQaiQAIAILbQEEf0GACCgCACIBRQRAQYAIQZCIBDYCAEGQiAQhAQsCQCABQWxLDQAgAUETakFwcSIBIABBf3NLDQAgACABaiIDPwAiAkEQdEsgAkH//wNNcQ0AIAFBBGsgADYCAEGACCADNgIAIAEhBAsgBAvSBAEFfwJAIABFBEAgAUUNAUGACCgCACIARQRAQYAIQZCIBDYCAEGQiAQhAAsgAEFsSw0BIABBE2pBcHEiACABQX9zSw0BIAAgAWoiAz8AIgJBEHRLIAJB//8DTXENASAAQQRrIAE2AgBBgAggAzYCACAADwsgAUUEQEEADwsgAEEEayIEKAIAIgMgAU8EQCAEIAE2AgAgACADQX9zSwRAIAAPC0GACCgCACAAIANqRwRAIAAPC0GACCAAIAFqNgIAIAAPCwJAIAAgA0F/c00EQEGACCgCACICIAAgA2pHDQEgAUF/cyAASQ0CIAAgAWoiAz8AIgJBEHRLIAJB//8DTXENAiAEIAE2AgBBgAggAzYCACAADwtBgAgoAgAhAgsgAkUEQEGACEGQiAQ2AgBBkIgEIQILIAJBbEsEQEEADwsgAkETakFwcSICIAFBf3NLBEBBAA8LPwAiBkH//wNNIAEgAmoiBCAGQRB0S3ENACACQQRrIAE2AgBBgAggBDYCACACRQ0AIANFBEAgAg8LAkAgA0EHcSIFRQRAIAIhASADIQQMAQsgA0F4cSEEIAIhAQNAIAEgAC0AADoAACABQQFqIQEgAEEBaiEAIAVBAWsiBQ0ACwsgA0EISQRAIAIPCwNAIAEgAC0AADoAACABIAAtAAE6AAEgASAALQACOgACIAEgAC0AAzoAAyABIAAtAAQ6AAQgASAALQAFOgAFIAEgAC0ABjoABiABIAAtAAc6AAcgAUEIaiEBIABBCGohACACIQUgBEEIayIEDQALCyAFCyIBAX9BgAgoAgAiAEUEQEGACEGQiAQ2AgBBkIgEIQALIAALkwEBAn8CQCABRQ0AAkAgAUEHcSIDRQRAIAEhAgwBCyABQXhxIQIDQCAAQQA6AAAgAEEBaiEAIANBAWsiAw0ACwsgAUEISQ0AA0AgAEEAOgAAIABBADoAASAAQQA6AAIgAEEAOgADIABBADoABCAAQQA6AAUgAEEAOgAGIABBADoAByAAQQhqIQAgAkEIayICDQALCws='
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/** @entrypointCategory WASM */
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* WASM implementations of ox's hash primitives, compiled from C.
|
|
5
|
+
*
|
|
6
|
+
* Load it and hand the result to {@link ox#Engine.set}. WASM must be compiled
|
|
7
|
+
* asynchronously, so the `await` lives here -- every call afterwards is
|
|
8
|
+
* synchronous.
|
|
9
|
+
*
|
|
10
|
+
* :::note
|
|
11
|
+
* Performance varies by primitive, input size, runtime, and processor. Run
|
|
12
|
+
* `pnpm bench:engines` to compare the available implementations on your target
|
|
13
|
+
* machine.
|
|
14
|
+
* :::
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```ts twoslash
|
|
18
|
+
* // @noErrors
|
|
19
|
+
* import { Hash } from 'ox'
|
|
20
|
+
* import { Engine } from 'ox/wasm'
|
|
21
|
+
*
|
|
22
|
+
* await Engine.load()
|
|
23
|
+
*
|
|
24
|
+
* Hash.keccak256('0xdeadbeef')
|
|
25
|
+
* ```
|
|
26
|
+
*
|
|
27
|
+
* @category Crypto
|
|
28
|
+
*/
|
|
29
|
+
export * as Engine from './Engine.js'
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* WASM implementations of Ox's supported hash primitives.
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```ts twoslash
|
|
36
|
+
* // @noErrors
|
|
37
|
+
* import { Engine, Hash } from 'ox'
|
|
38
|
+
* import * as WasmHash from 'ox/wasm/Hash'
|
|
39
|
+
*
|
|
40
|
+
* Engine.set(await WasmHash.create())
|
|
41
|
+
*
|
|
42
|
+
* Hash.keccak256('0xdeadbeef')
|
|
43
|
+
* ```
|
|
44
|
+
*
|
|
45
|
+
* @category Crypto
|
|
46
|
+
*/
|
|
47
|
+
export * as Hash from './Hash.js'
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { hmacSha256ScratchSize } from './hashes.wasm.js'
|
|
2
|
+
import type { Module } from './instantiate.js'
|
|
3
|
+
|
|
4
|
+
/** WASM exports used by the HMAC-SHA256 loader. @internal */
|
|
5
|
+
export type Exports = {
|
|
6
|
+
hmac_sha256(
|
|
7
|
+
key: number,
|
|
8
|
+
keyLength: number,
|
|
9
|
+
message: number,
|
|
10
|
+
messageLength: number,
|
|
11
|
+
out: number,
|
|
12
|
+
scratch: number,
|
|
13
|
+
): void
|
|
14
|
+
zero(ptr: number, length: number): void
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/** Calls HMAC-SHA256 and clears its complete linear-memory region. @internal */
|
|
18
|
+
export function hmacSha256(
|
|
19
|
+
module: Module<Exports>,
|
|
20
|
+
key: Uint8Array,
|
|
21
|
+
message: Uint8Array,
|
|
22
|
+
): Uint8Array {
|
|
23
|
+
const keyLength = key.length
|
|
24
|
+
const messageLength = message.length
|
|
25
|
+
const out = 32
|
|
26
|
+
const messagePtr = module.heapBase
|
|
27
|
+
const keyPtr = messagePtr + messageLength
|
|
28
|
+
const outPtr = keyPtr + keyLength
|
|
29
|
+
const scratchPtr = Math.ceil((outPtr + out) / 4) * 4
|
|
30
|
+
const end = scratchPtr + hmacSha256ScratchSize
|
|
31
|
+
module.reserve(end - messagePtr)
|
|
32
|
+
const view = module.view()
|
|
33
|
+
try {
|
|
34
|
+
view.set(message, messagePtr)
|
|
35
|
+
view.set(key, keyPtr)
|
|
36
|
+
module.exports.hmac_sha256(
|
|
37
|
+
keyPtr,
|
|
38
|
+
keyLength,
|
|
39
|
+
messagePtr,
|
|
40
|
+
messageLength,
|
|
41
|
+
outPtr,
|
|
42
|
+
scratchPtr,
|
|
43
|
+
)
|
|
44
|
+
return module.view().slice(outPtr, outPtr + out)
|
|
45
|
+
} finally {
|
|
46
|
+
// Clear every byte this call owns, including HMAC working state when
|
|
47
|
+
// copying, hashing, or copying the digest back out throws.
|
|
48
|
+
module.exports.zero(messagePtr, end - messagePtr)
|
|
49
|
+
}
|
|
50
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// Generated by `pnpm wasm:build --target=hashes`. Do not edit.
|
|
2
|
+
//
|
|
3
|
+
// Compiled from wasm/src/hashes.c, wasm/src/ox_rt.c
|
|
4
|
+
// with wasi-sdk 25.0 + binaryen 123.
|
|
5
|
+
//
|
|
6
|
+
// `pnpm wasm:check` rebuilds this file and fails if the bytes differ, so any
|
|
7
|
+
// change to the C or to `wasm/targets.ts` must be followed by `pnpm wasm:build`.
|
|
8
|
+
|
|
9
|
+
/** Base64-encoded WASM binary. */
|
|
10
|
+
export const wasmBase64 =
|
|
11
|
+
'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dnNqNgIAIAFBBGoiAUHAAUcNAAsgACgCACINIQkgACgCBCIOIQEgACgCCCIPIQUgACgCDCIQIQwgACgCHCIRIQogACgCGCISIQggACgCFCITIQMgACgCECIUIQYDQCAFIQQgASEFIAIgC2ooAgAgC0HgCWooAgAgCiAGIgdBGncgB0EVd3MgB0EHd3NqIAdBf3MgCHEgAyAHcXJqamoiBiAJIgFBHncgAUETd3MgAUEKd3MgASAEIAVzcSAEIAVxc2pqIQkgBiAMaiEGIAQhDCAIIQogAyEIIAchAyALQQRqIgtBgAJHDQALIAAgCiARajYCHCAAIAggEmo2AhggACADIBNqNgIUIAAgBiAUajYCECAAIAQgEGo2AgwgACAFIA9qNgIIIAAgASAOajYCBCAAIAkgDWo2AgALkgkBBn8jAEHgAmsiAyQAIANCADcD0AIgA0IANwPIAiADQgA3A8ACIANCADcDuAIgA0IANwOwAiADQgA3A6gCIANCADcDoAIgA0IANwOYAiADQgA3A5ACIANCADcDiAIgA0IANwOAAiADQgA3A/gBIANCADcD8AEgA0IANwPoASADQgA3A+ABIANCADcD2AEgA0IANwPQASADQgA3A8gBIANCADcDwAEgA0IANwO4ASADQgA3A7ABIANCADcDqAEgA0IANwOgASADQgA3A5gBIANCADcDkAEgAUGIAU8EQANAIAMgAykDkAEgACAGaiIEKQAAhTcDkAEgAyADKQOYASAEKQAIhTcDmAEgAyADKQOgASAEQRBqKQAAhTcDoAEgAyADKQOoASAEQRhqKQAAhTcDqAEgAyADKQOwASAEQSBqKQAAhTcDsAEgAyADKQO4ASAEQShqKQAAhTcDuAEgAyADKQPAASAEQTBqKQAAhTcDwAEgAyADKQPIASAEQThqKQAAhTcDyAEgAyADKQPQASAEQUBrKQAAhTcD0AEgAyADKQPYASAEQcgAaikAAIU3A9gBIAMgAykD4AEgBEHQAGopAACFNwPgASADIAMpA+gBIARB2ABqKQAAhTcD6AEgAyADKQPwASAEQeAAaikAAIU3A/ABIAMgAykD+AEgBEHoAGopAACFNwP4ASADIAMpA4ACIARB8ABqKQAAhTcDgAIgAyADKQOIAiAEQfgAaikAAIU3A4gCIAMgAykDkAIgBEGAAWopAACF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'
|
|
12
|
+
|
|
13
|
+
/** Constant shared with the module's C source. */
|
|
14
|
+
export const hmacSha256ScratchSize = 608
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import * as Errors from '../../core/Errors.js'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Shared WASM instantiation and memory plumbing.
|
|
5
|
+
*
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/** An instantiated WASM module, with helpers for moving bytes across. */
|
|
10
|
+
export type Module<exports extends Record<string, unknown>> = {
|
|
11
|
+
/** The module's exported functions. */
|
|
12
|
+
exports: exports
|
|
13
|
+
/** Address of the first byte we may write to. */
|
|
14
|
+
heapBase: number
|
|
15
|
+
/**
|
|
16
|
+
* Grows linear memory so `bytes` are available above `heapBase`.
|
|
17
|
+
*
|
|
18
|
+
* @throws {@link MemoryError} when the runtime refuses to grow.
|
|
19
|
+
*/
|
|
20
|
+
reserve(bytes: number): void
|
|
21
|
+
/**
|
|
22
|
+
* A view over the module's current memory.
|
|
23
|
+
*
|
|
24
|
+
* Must be called after {@link Module.reserve} and again after anything that
|
|
25
|
+
* could grow memory: `WebAssembly.Memory.grow` detaches the previous
|
|
26
|
+
* `ArrayBuffer`, which silently turns any retained view into a zero-length one.
|
|
27
|
+
*/
|
|
28
|
+
view(): Uint8Array
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const pageSize = 65_536
|
|
32
|
+
|
|
33
|
+
function decode(base64: string): Uint8Array {
|
|
34
|
+
// `Uint8Array.fromBase64` where available, then Node/Bun, then browsers and
|
|
35
|
+
// edge runtimes.
|
|
36
|
+
const fromBase64 = (
|
|
37
|
+
Uint8Array as unknown as {
|
|
38
|
+
fromBase64?: ((value: string) => Uint8Array) | undefined
|
|
39
|
+
}
|
|
40
|
+
).fromBase64
|
|
41
|
+
if (fromBase64) return fromBase64(base64)
|
|
42
|
+
if (typeof Buffer !== 'undefined')
|
|
43
|
+
return new Uint8Array(Buffer.from(base64, 'base64'))
|
|
44
|
+
const binary = atob(base64)
|
|
45
|
+
const bytes = new Uint8Array(binary.length)
|
|
46
|
+
for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i)
|
|
47
|
+
return bytes
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Instantiates a base64-encoded WASM module.
|
|
52
|
+
*
|
|
53
|
+
* Always asynchronous: browsers refuse to compile modules larger than a few
|
|
54
|
+
* kilobytes synchronously on the main thread, so there is no synchronous path to
|
|
55
|
+
* fall back to. Callers await this once and then call the module synchronously.
|
|
56
|
+
*
|
|
57
|
+
* @internal
|
|
58
|
+
*/
|
|
59
|
+
export async function instantiate<exports extends Record<string, unknown>>(
|
|
60
|
+
base64: string,
|
|
61
|
+
): Promise<Module<exports>> {
|
|
62
|
+
const { instance } = await WebAssembly.instantiate(decode(base64), {})
|
|
63
|
+
const exports = instance.exports as {
|
|
64
|
+
heap_base(): number
|
|
65
|
+
memory: WebAssembly.Memory
|
|
66
|
+
} & exports
|
|
67
|
+
|
|
68
|
+
const { memory } = exports
|
|
69
|
+
const heapBase = exports.heap_base()
|
|
70
|
+
|
|
71
|
+
let cached = new Uint8Array(memory.buffer)
|
|
72
|
+
|
|
73
|
+
return {
|
|
74
|
+
exports,
|
|
75
|
+
heapBase,
|
|
76
|
+
reserve(bytes) {
|
|
77
|
+
const required = heapBase + bytes
|
|
78
|
+
if (memory.buffer.byteLength >= required) return
|
|
79
|
+
const pages = Math.ceil((required - memory.buffer.byteLength) / pageSize)
|
|
80
|
+
try {
|
|
81
|
+
memory.grow(pages)
|
|
82
|
+
} catch (cause) {
|
|
83
|
+
throw new MemoryError({ bytes: required, cause: cause as Error })
|
|
84
|
+
}
|
|
85
|
+
cached = new Uint8Array(memory.buffer)
|
|
86
|
+
},
|
|
87
|
+
view() {
|
|
88
|
+
// `grow` detaches the old buffer, so compare identity rather than trusting
|
|
89
|
+
// the cached view.
|
|
90
|
+
if (cached.buffer !== memory.buffer)
|
|
91
|
+
cached = new Uint8Array(memory.buffer)
|
|
92
|
+
return cached
|
|
93
|
+
},
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Memoizes a loader so concurrent callers compile the module once.
|
|
99
|
+
*
|
|
100
|
+
* The promise is memoized rather than its result, so a second call made while
|
|
101
|
+
* the first is still compiling awaits the same compilation. A rejected attempt
|
|
102
|
+
* is discarded, so a later call can try again.
|
|
103
|
+
*
|
|
104
|
+
* @internal
|
|
105
|
+
*/
|
|
106
|
+
export function memoize<value>(
|
|
107
|
+
load: () => Promise<value>,
|
|
108
|
+
): () => Promise<value> {
|
|
109
|
+
let cached: Promise<value> | undefined
|
|
110
|
+
return () => {
|
|
111
|
+
// Only success is memoized. Compilation can fail for reasons that pass --
|
|
112
|
+
// a runtime briefly out of memory, say -- and caching the rejection would
|
|
113
|
+
// make one bad moment permanent for the life of the process.
|
|
114
|
+
cached ??= load().catch((error) => {
|
|
115
|
+
cached = undefined
|
|
116
|
+
throw error
|
|
117
|
+
})
|
|
118
|
+
return cached
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/** Thrown when a WASM module cannot grow its memory to the required size. */
|
|
123
|
+
export class MemoryError extends Errors.BaseError<Error> {
|
|
124
|
+
override readonly name = 'Wasm.MemoryError'
|
|
125
|
+
|
|
126
|
+
constructor({ bytes, cause }: { bytes: number; cause: Error }) {
|
|
127
|
+
super('WASM memory could not be grown to the required size.', {
|
|
128
|
+
cause,
|
|
129
|
+
metaMessages: [
|
|
130
|
+
`Required: ${bytes} bytes`,
|
|
131
|
+
'The input may be too large for this runtime. Reset the engine slot with `Engine.reset` to fall back to the default implementation.',
|
|
132
|
+
],
|
|
133
|
+
})
|
|
134
|
+
}
|
|
135
|
+
}
|
|
@@ -1,182 +0,0 @@
|
|
|
1
|
-
// TIP-1022 salt mining — isomorphic WASM (Node + browser).
|
|
2
|
-
// Specialized single-block keccak256 for 52-byte input.
|
|
3
|
-
//
|
|
4
|
-
// Memory layout at offset 1024:
|
|
5
|
-
// [0..19] address (set by JS)
|
|
6
|
-
// [20..51] salt (set by JS, incremented in-place)
|
|
7
|
-
// [52..83] hash out (written on match)
|
|
8
|
-
|
|
9
|
-
typedef unsigned char uint8_t;
|
|
10
|
-
typedef unsigned int uint32_t;
|
|
11
|
-
typedef unsigned long long uint64_t;
|
|
12
|
-
|
|
13
|
-
#define DATA_OFFSET 1024
|
|
14
|
-
|
|
15
|
-
// ---------------------------------------------------------------------------
|
|
16
|
-
// Keccak-f[1600] — fully unrolled, native uint64_t → wasm i64.
|
|
17
|
-
// Based on XKCP / hash-wasm structure.
|
|
18
|
-
// ---------------------------------------------------------------------------
|
|
19
|
-
|
|
20
|
-
#define ROTL64(x, n) (((x) << (n)) | ((x) >> (64 - (n))))
|
|
21
|
-
|
|
22
|
-
static const uint64_t RC[24] = {
|
|
23
|
-
0x0000000000000001ULL, 0x0000000000008082ULL, 0x800000000000808aULL,
|
|
24
|
-
0x8000000080008000ULL, 0x000000000000808bULL, 0x0000000080000001ULL,
|
|
25
|
-
0x8000000080008081ULL, 0x8000000000008009ULL, 0x000000000000008aULL,
|
|
26
|
-
0x0000000000000088ULL, 0x0000000080008009ULL, 0x000000008000000aULL,
|
|
27
|
-
0x000000008000808bULL, 0x800000000000008bULL, 0x8000000000008089ULL,
|
|
28
|
-
0x8000000000008003ULL, 0x8000000000008002ULL, 0x8000000000000080ULL,
|
|
29
|
-
0x000000000000800aULL, 0x800000008000000aULL, 0x8000000080008081ULL,
|
|
30
|
-
0x8000000000008080ULL, 0x0000000080000001ULL, 0x8000000080008008ULL,
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
// Theta — fully unrolled column parity + diffusion
|
|
34
|
-
#define XORED(i) (A[(i)] ^ A[(i)+5] ^ A[(i)+10] ^ A[(i)+15] ^ A[(i)+20])
|
|
35
|
-
|
|
36
|
-
static inline void theta(uint64_t *A) {
|
|
37
|
-
uint64_t D[5];
|
|
38
|
-
D[0] = ROTL64(XORED(1), 1) ^ XORED(4);
|
|
39
|
-
D[1] = ROTL64(XORED(2), 1) ^ XORED(0);
|
|
40
|
-
D[2] = ROTL64(XORED(3), 1) ^ XORED(1);
|
|
41
|
-
D[3] = ROTL64(XORED(4), 1) ^ XORED(2);
|
|
42
|
-
D[4] = ROTL64(XORED(0), 1) ^ XORED(3);
|
|
43
|
-
A[ 0]^=D[0]; A[ 1]^=D[1]; A[ 2]^=D[2]; A[ 3]^=D[3]; A[ 4]^=D[4];
|
|
44
|
-
A[ 5]^=D[0]; A[ 6]^=D[1]; A[ 7]^=D[2]; A[ 8]^=D[3]; A[ 9]^=D[4];
|
|
45
|
-
A[10]^=D[0]; A[11]^=D[1]; A[12]^=D[2]; A[13]^=D[3]; A[14]^=D[4];
|
|
46
|
-
A[15]^=D[0]; A[16]^=D[1]; A[17]^=D[2]; A[18]^=D[3]; A[19]^=D[4];
|
|
47
|
-
A[20]^=D[0]; A[21]^=D[1]; A[22]^=D[2]; A[23]^=D[3]; A[24]^=D[4];
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
// Rho — explicit per-lane rotations with compile-time constants
|
|
51
|
-
static inline void rho(uint64_t *A) {
|
|
52
|
-
A[ 1] = ROTL64(A[ 1], 1); A[ 2] = ROTL64(A[ 2], 62);
|
|
53
|
-
A[ 3] = ROTL64(A[ 3], 28); A[ 4] = ROTL64(A[ 4], 27);
|
|
54
|
-
A[ 5] = ROTL64(A[ 5], 36); A[ 6] = ROTL64(A[ 6], 44);
|
|
55
|
-
A[ 7] = ROTL64(A[ 7], 6); A[ 8] = ROTL64(A[ 8], 55);
|
|
56
|
-
A[ 9] = ROTL64(A[ 9], 20); A[10] = ROTL64(A[10], 3);
|
|
57
|
-
A[11] = ROTL64(A[11], 10); A[12] = ROTL64(A[12], 43);
|
|
58
|
-
A[13] = ROTL64(A[13], 25); A[14] = ROTL64(A[14], 39);
|
|
59
|
-
A[15] = ROTL64(A[15], 41); A[16] = ROTL64(A[16], 45);
|
|
60
|
-
A[17] = ROTL64(A[17], 15); A[18] = ROTL64(A[18], 21);
|
|
61
|
-
A[19] = ROTL64(A[19], 8); A[20] = ROTL64(A[20], 18);
|
|
62
|
-
A[21] = ROTL64(A[21], 2); A[22] = ROTL64(A[22], 61);
|
|
63
|
-
A[23] = ROTL64(A[23], 56); A[24] = ROTL64(A[24], 14);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
// Pi — single-temporary rotation chain (no scratch buffer)
|
|
67
|
-
static inline void pi(uint64_t *A) {
|
|
68
|
-
uint64_t A1 = A[1];
|
|
69
|
-
A[ 1]=A[ 6]; A[ 6]=A[ 9]; A[ 9]=A[22]; A[22]=A[14]; A[14]=A[20];
|
|
70
|
-
A[20]=A[ 2]; A[ 2]=A[12]; A[12]=A[13]; A[13]=A[19]; A[19]=A[23];
|
|
71
|
-
A[23]=A[15]; A[15]=A[ 4]; A[ 4]=A[24]; A[24]=A[21]; A[21]=A[ 8];
|
|
72
|
-
A[ 8]=A[16]; A[16]=A[ 5]; A[ 5]=A[ 3]; A[ 3]=A[18]; A[18]=A[17];
|
|
73
|
-
A[17]=A[11]; A[11]=A[ 7]; A[ 7]=A[10]; A[10]=A1;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
// Chi — unrolled nonlinear step
|
|
77
|
-
#define CHI_ROW(i) { \
|
|
78
|
-
uint64_t a0 = A[(i)], a1 = A[(i)+1]; \
|
|
79
|
-
A[(i) ] ^= ~a1 & A[(i)+2]; \
|
|
80
|
-
A[(i)+1] ^= ~A[(i)+2] & A[(i)+3]; \
|
|
81
|
-
A[(i)+2] ^= ~A[(i)+3] & A[(i)+4]; \
|
|
82
|
-
A[(i)+3] ^= ~A[(i)+4] & a0; \
|
|
83
|
-
A[(i)+4] ^= ~a0 & a1; \
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
static inline void chi(uint64_t *A) {
|
|
87
|
-
CHI_ROW(0); CHI_ROW(5); CHI_ROW(10); CHI_ROW(15); CHI_ROW(20);
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
static void keccak_f1600(uint64_t *A) {
|
|
91
|
-
for (int r = 0; r < 24; r++) {
|
|
92
|
-
theta(A); rho(A); pi(A); chi(A);
|
|
93
|
-
A[0] ^= RC[r];
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
// ---------------------------------------------------------------------------
|
|
98
|
-
// Helpers
|
|
99
|
-
// ---------------------------------------------------------------------------
|
|
100
|
-
|
|
101
|
-
static inline uint64_t load64_le(const uint8_t *p) {
|
|
102
|
-
return (uint64_t)p[0] | ((uint64_t)p[1] << 8) |
|
|
103
|
-
((uint64_t)p[2] <<16)| ((uint64_t)p[3] << 24) |
|
|
104
|
-
((uint64_t)p[4] <<32)| ((uint64_t)p[5] << 40) |
|
|
105
|
-
((uint64_t)p[6] <<48)| ((uint64_t)p[7] << 56);
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
static inline void store64_le(uint8_t *p, uint64_t v) {
|
|
109
|
-
p[0]=(uint8_t)v; p[1]=(uint8_t)(v>>8); p[2]=(uint8_t)(v>>16); p[3]=(uint8_t)(v>>24);
|
|
110
|
-
p[4]=(uint8_t)(v>>32); p[5]=(uint8_t)(v>>40); p[6]=(uint8_t)(v>>48); p[7]=(uint8_t)(v>>56);
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
static inline uint32_t load32_le(const uint8_t *p) {
|
|
114
|
-
return (uint32_t)p[0] | ((uint32_t)p[1]<<8) | ((uint32_t)p[2]<<16) | ((uint32_t)p[3]<<24);
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
// ---------------------------------------------------------------------------
|
|
118
|
-
// Mining entry point
|
|
119
|
-
// ---------------------------------------------------------------------------
|
|
120
|
-
|
|
121
|
-
__attribute__((export_name("mine")))
|
|
122
|
-
int mine(int count) {
|
|
123
|
-
uint8_t *mem = (uint8_t *)DATA_OFFSET;
|
|
124
|
-
uint8_t *addr = mem; // 20 bytes
|
|
125
|
-
uint8_t *salt = mem + 20; // 32 bytes
|
|
126
|
-
uint8_t *hout = mem + 52; // 32 bytes
|
|
127
|
-
|
|
128
|
-
// Pre-build base state for 52-byte keccak256 (one block, rate=136).
|
|
129
|
-
// Block = [address(20) | salt(32) | 0x01 | zeros | 0x80]
|
|
130
|
-
// Only lanes 0..6 are non-zero from the message, plus padding in lanes 6 & 16.
|
|
131
|
-
uint64_t base[25];
|
|
132
|
-
for (int i = 0; i < 25; i++) base[i] = 0;
|
|
133
|
-
|
|
134
|
-
// Load address into lanes 0..2 (bytes 0..23, only 0..19 used)
|
|
135
|
-
uint8_t buf[24];
|
|
136
|
-
for (int i = 0; i < 20; i++) buf[i] = addr[i];
|
|
137
|
-
for (int i = 20; i < 24; i++) buf[i] = 0;
|
|
138
|
-
base[0] = load64_le(buf);
|
|
139
|
-
base[1] = load64_le(buf + 8);
|
|
140
|
-
base[2] = load64_le(buf + 16);
|
|
141
|
-
|
|
142
|
-
// Keccak padding: byte 52 = 0x01, byte 135 = 0x80
|
|
143
|
-
// Lane 6 (bytes 48..55): byte 52 = lane offset 4 → bit 32
|
|
144
|
-
base[6] = (uint64_t)0x01 << 32;
|
|
145
|
-
// Lane 16 (bytes 128..135): byte 135 = lane offset 7 → bit 56
|
|
146
|
-
base[16] = (uint64_t)0x80 << 56;
|
|
147
|
-
|
|
148
|
-
for (int iter = 0; iter < count; iter++) {
|
|
149
|
-
// Copy base, XOR salt.
|
|
150
|
-
// Salt occupies bytes 20..51 → lanes 2..6.
|
|
151
|
-
uint64_t A[25];
|
|
152
|
-
for (int i = 0; i < 25; i++) A[i] = base[i];
|
|
153
|
-
|
|
154
|
-
// Lane 2 (bytes 16..23): upper 4 bytes = salt[0..3]
|
|
155
|
-
A[2] ^= (uint64_t)load32_le(salt) << 32;
|
|
156
|
-
// Lane 3 (bytes 24..31): salt[4..11]
|
|
157
|
-
A[3] ^= load64_le(salt + 4);
|
|
158
|
-
// Lane 4 (bytes 32..39): salt[12..19]
|
|
159
|
-
A[4] ^= load64_le(salt + 12);
|
|
160
|
-
// Lane 5 (bytes 40..47): salt[20..27]
|
|
161
|
-
A[5] ^= load64_le(salt + 20);
|
|
162
|
-
// Lane 6 (bytes 48..55): lower 4 bytes = salt[28..31]
|
|
163
|
-
A[6] ^= (uint64_t)load32_le(salt + 28);
|
|
164
|
-
|
|
165
|
-
keccak_f1600(A);
|
|
166
|
-
|
|
167
|
-
// PoW check: first 4 bytes = low 32 bits of lane 0 must be zero.
|
|
168
|
-
if ((uint32_t)A[0] == 0) {
|
|
169
|
-
for (int i = 0; i < 4; i++)
|
|
170
|
-
store64_le(hout + i * 8, A[i]);
|
|
171
|
-
return 1;
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
// Increment big-endian salt.
|
|
175
|
-
for (int i = 31; i >= 0; i--) {
|
|
176
|
-
if (salt[i] < 0xFF) { salt[i]++; break; }
|
|
177
|
-
salt[i] = 0;
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
return 0;
|
|
182
|
-
}
|