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,177 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base64 codec tiers, and the tables they share.
|
|
3
|
+
*
|
|
4
|
+
* Split out of the public `Base64` module for the same reason the hex codec is:
|
|
5
|
+
* a runtime selects one tier at import, so the others are unreachable from a
|
|
6
|
+
* test unless they can be called directly. Keeping them here lets the
|
|
7
|
+
* conformance suite compare every tier a runtime can execute, without widening
|
|
8
|
+
* `Base64`'s public surface.
|
|
9
|
+
*
|
|
10
|
+
* @internal
|
|
11
|
+
*/
|
|
12
|
+
import * as Errors from '../../Errors.js';
|
|
13
|
+
import { decoder } from './utf8.js';
|
|
14
|
+
// Standard Base64 alphabet (RFC 4648 section 4) and URL-safe alphabet (section 5).
|
|
15
|
+
const stdAlphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
|
|
16
|
+
// Char-code -> 6-bit integer lookup. Sentinel `0xff` = invalid character.
|
|
17
|
+
// Standard alphabet plus URL-safe `-`/`_` (decoders are alphabet-agnostic).
|
|
18
|
+
const characterToInteger = /*#__PURE__*/ (() => {
|
|
19
|
+
const table = new Uint8Array(256).fill(0xff);
|
|
20
|
+
for (let i = 0; i < stdAlphabet.length; i++)
|
|
21
|
+
table[stdAlphabet.charCodeAt(i)] = i;
|
|
22
|
+
// URL-safe alternates: `-` for `+` (62), `_` for `/` (63).
|
|
23
|
+
table[45 /* '-' */] = 62;
|
|
24
|
+
table[95 /* '_' */] = 63;
|
|
25
|
+
return table;
|
|
26
|
+
})();
|
|
27
|
+
// Integer -> char-code table for the standard alphabet, indexed by 6-bit value.
|
|
28
|
+
const integerToCharacter = /*#__PURE__*/ (() => {
|
|
29
|
+
const table = new Uint8Array(64);
|
|
30
|
+
for (let i = 0; i < stdAlphabet.length; i++)
|
|
31
|
+
table[i] = stdAlphabet.charCodeAt(i);
|
|
32
|
+
return table;
|
|
33
|
+
})();
|
|
34
|
+
// Native fast-path detection. `Uint8Array.prototype.toBase64` ships in
|
|
35
|
+
// Chromium 145, Safari 18.2+, Firefox 133+ and Bun, but not in Node 24.
|
|
36
|
+
//
|
|
37
|
+
// Only encoding delegates to it; see `toBytes` for why decoding cannot.
|
|
38
|
+
const nativeToBase64 = Uint8Array.prototype.toBase64;
|
|
39
|
+
/**
|
|
40
|
+
* Encodes via `Uint8Array.prototype.toBase64`, where the runtime has it.
|
|
41
|
+
* `undefined` otherwise, so the conformance suite can ask whether this tier
|
|
42
|
+
* exists rather than inferring it from the runtime.
|
|
43
|
+
*
|
|
44
|
+
* @internal
|
|
45
|
+
*/
|
|
46
|
+
export const fromBytesNative = nativeToBase64 &&
|
|
47
|
+
((value, options = {}) => {
|
|
48
|
+
const { pad = true, url = false } = options;
|
|
49
|
+
// `omitPadding` governs both alphabets, so `base64url` is padded here too
|
|
50
|
+
// when asked. Appending padding on top of that double-pads it.
|
|
51
|
+
return nativeToBase64.call(value, {
|
|
52
|
+
alphabet: url ? 'base64url' : 'base64',
|
|
53
|
+
omitPadding: !pad,
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
/**
|
|
57
|
+
* Encodes in plain JavaScript, for runtimes without the native method.
|
|
58
|
+
*
|
|
59
|
+
* @internal
|
|
60
|
+
*/
|
|
61
|
+
export function fromBytesLoop(value, options = {}) {
|
|
62
|
+
const { pad = true, url = false } = options;
|
|
63
|
+
const encoded = new Uint8Array(Math.ceil(value.length / 3) * 4);
|
|
64
|
+
for (let i = 0, j = 0; j < value.length; i += 4, j += 3) {
|
|
65
|
+
const y = (value[j] << 16) + (value[j + 1] << 8) + (value[j + 2] | 0);
|
|
66
|
+
encoded[i] = integerToCharacter[y >> 18];
|
|
67
|
+
encoded[i + 1] = integerToCharacter[(y >> 12) & 0x3f];
|
|
68
|
+
encoded[i + 2] = integerToCharacter[(y >> 6) & 0x3f];
|
|
69
|
+
encoded[i + 3] = integerToCharacter[y & 0x3f];
|
|
70
|
+
}
|
|
71
|
+
const k = value.length % 3;
|
|
72
|
+
const end = Math.floor(value.length / 3) * 4 + (k && k + 1);
|
|
73
|
+
let base64 = decoder.decode(new Uint8Array(encoded.buffer, 0, end));
|
|
74
|
+
if (pad && k === 1)
|
|
75
|
+
base64 += '==';
|
|
76
|
+
if (pad && k === 2)
|
|
77
|
+
base64 += '=';
|
|
78
|
+
if (url)
|
|
79
|
+
base64 = base64.replaceAll('+', '-').replaceAll('/', '_');
|
|
80
|
+
return base64;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Encodes with whichever tier this runtime provides.
|
|
84
|
+
*
|
|
85
|
+
* @internal
|
|
86
|
+
*/
|
|
87
|
+
export function fromBytes(value, options = {}) {
|
|
88
|
+
if (fromBytesNative)
|
|
89
|
+
return fromBytesNative(value, options);
|
|
90
|
+
return fromBytesLoop(value, options);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* `Uint8Array.fromBase64` is deliberately unused.
|
|
94
|
+
*
|
|
95
|
+
* Its `alphabet` option is strict and mutually exclusive -- `base64` refuses
|
|
96
|
+
* `-`/`_`, `base64url` refuses `+`/`/` -- while ox decodes either alphabet
|
|
97
|
+
* transparently. There is no single native call with that behavior, so matching
|
|
98
|
+
* it would mean normalizing the string first or trying both alphabets and
|
|
99
|
+
* throwing on one. Both cost more than they would save, and neither has been
|
|
100
|
+
* measured; the loop is the only decode tier until one is.
|
|
101
|
+
*/
|
|
102
|
+
/**
|
|
103
|
+
* Decodes in plain JavaScript, for runtimes without the native method.
|
|
104
|
+
*
|
|
105
|
+
* @internal
|
|
106
|
+
*/
|
|
107
|
+
export function toBytesLoop(value, bodyEnd) {
|
|
108
|
+
const size = bodyEnd;
|
|
109
|
+
// Validate characters: every char must be in the standard or URL-safe
|
|
110
|
+
// alphabet, and '=' may not appear in the body (only stripped trailing
|
|
111
|
+
// padding).
|
|
112
|
+
const decoded = new Uint8Array((size >> 2) * 3 + (size % 4 ? (size % 4) - 1 : 0));
|
|
113
|
+
let acc = 0;
|
|
114
|
+
let bits = 0;
|
|
115
|
+
let n = 0;
|
|
116
|
+
for (let i = 0; i < size; i++) {
|
|
117
|
+
const code = value.charCodeAt(i);
|
|
118
|
+
if (code === 61 /* '=' */)
|
|
119
|
+
throw new InvalidCharacterError({ character: '=' });
|
|
120
|
+
// `characterToInteger` only spans Latin-1, so a code unit above it reads
|
|
121
|
+
// `undefined` and has to be mapped to the sentinel. Without that, `undefined`
|
|
122
|
+
// fails the `=== 0xff` test, then coerces to zero in the shift below, and a
|
|
123
|
+
// non-ASCII character silently decodes as `A`.
|
|
124
|
+
const v = characterToInteger[code] ?? 0xff;
|
|
125
|
+
if (v === 0xff)
|
|
126
|
+
throw new InvalidCharacterError({ character: value[i] });
|
|
127
|
+
acc = (acc << 6) | v;
|
|
128
|
+
bits += 6;
|
|
129
|
+
if (bits >= 8) {
|
|
130
|
+
bits -= 8;
|
|
131
|
+
decoded[n++] = (acc >>> bits) & 0xff;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return decoded;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Decodes with whichever tier this runtime provides.
|
|
138
|
+
*
|
|
139
|
+
* @internal
|
|
140
|
+
*/
|
|
141
|
+
export function toBytes(value) {
|
|
142
|
+
// Strip trailing '=' padding (only at the very end).
|
|
143
|
+
let bodyEnd = value.length;
|
|
144
|
+
let pad = 0;
|
|
145
|
+
while (bodyEnd > 0 && value.charCodeAt(bodyEnd - 1) === 61 /* '=' */) {
|
|
146
|
+
bodyEnd--;
|
|
147
|
+
pad++;
|
|
148
|
+
}
|
|
149
|
+
// Reject impossible lengths and excessive padding.
|
|
150
|
+
if (bodyEnd % 4 === 1)
|
|
151
|
+
throw new InvalidLengthError({ length: value.length });
|
|
152
|
+
if (pad > 2)
|
|
153
|
+
throw new InvalidPaddingError({ padding: pad });
|
|
154
|
+
return toBytesLoop(value, bodyEnd);
|
|
155
|
+
}
|
|
156
|
+
/** Thrown when a Base64 string contains an invalid character. */
|
|
157
|
+
export class InvalidCharacterError extends Errors.BaseError {
|
|
158
|
+
name = 'Base64.InvalidCharacterError';
|
|
159
|
+
constructor({ character }) {
|
|
160
|
+
super(`Invalid Base64 character: "${character}".`);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
/** Thrown when a Base64 string has an impossible length. */
|
|
164
|
+
export class InvalidLengthError extends Errors.BaseError {
|
|
165
|
+
name = 'Base64.InvalidLengthError';
|
|
166
|
+
constructor({ length }) {
|
|
167
|
+
super(`Invalid Base64 input length \`${length}\`.`);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
/** Thrown when a Base64 string contains too many trailing `=` padding characters. */
|
|
171
|
+
export class InvalidPaddingError extends Errors.BaseError {
|
|
172
|
+
name = 'Base64.InvalidPaddingError';
|
|
173
|
+
constructor({ padding }) {
|
|
174
|
+
super(`Invalid Base64 padding length \`${padding}\` (must be 0, 1, or 2).`);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=base64.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base64.js","sourceRoot":"","sources":["../../../../src/core/internal/codec/base64.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,20 +3,65 @@ import * as Errors from '../../Errors.js';
|
|
|
3
3
|
export type Hex = `0x${string}`;
|
|
4
4
|
/**
|
|
5
5
|
* Encodes a `Uint8Array` into a `0x`-prefixed lowercase hex string. Uses the
|
|
6
|
-
* native `Uint8Array.prototype.toHex`
|
|
7
|
-
*
|
|
6
|
+
* native `Uint8Array.prototype.toHex` or Node's `Buffer` when available;
|
|
7
|
+
* otherwise a tight JS loop.
|
|
8
8
|
*
|
|
9
9
|
* @internal
|
|
10
10
|
*/
|
|
11
11
|
export declare function bytesToHex(value: Uint8Array): Hex;
|
|
12
|
+
/**
|
|
13
|
+
* Encodes via `Uint8Array.prototype.toHex`, where the runtime has it.
|
|
14
|
+
* `undefined` otherwise, so callers and the conformance suite can both ask
|
|
15
|
+
* whether this tier exists rather than inferring it.
|
|
16
|
+
*
|
|
17
|
+
* @internal
|
|
18
|
+
*/
|
|
19
|
+
export declare const bytesToHexNative: ((value: Uint8Array) => Hex) | undefined;
|
|
20
|
+
/**
|
|
21
|
+
* Encodes via Node's `Buffer`, where the runtime has it.
|
|
22
|
+
*
|
|
23
|
+
* @internal
|
|
24
|
+
*/
|
|
25
|
+
export declare const bytesToHexBuffer: ((value: Uint8Array) => Hex) | undefined;
|
|
26
|
+
/**
|
|
27
|
+
* Encodes in plain JavaScript, for runtimes with neither the native method nor
|
|
28
|
+
* `Buffer`: browsers predating `Uint8Array.prototype.toHex`, which is recent
|
|
29
|
+
* enough that a meaningful share of installed browsers still land here.
|
|
30
|
+
*
|
|
31
|
+
* Appending to a string beats collecting substrings and joining them: V8 builds
|
|
32
|
+
* a rope and flattens it once, where `join` over an `Array.from({ length })`
|
|
33
|
+
* pays for a holey array as well as the concatenation. Measured at ~6.5x on a
|
|
34
|
+
* 32-byte input, counting the flatten.
|
|
35
|
+
*
|
|
36
|
+
* @internal
|
|
37
|
+
*/
|
|
38
|
+
export declare function bytesToHexLoop(value: Uint8Array): Hex;
|
|
12
39
|
/**
|
|
13
40
|
* Strictly decodes a `0x`-prefixed even-length hex string into a `Uint8Array`.
|
|
14
|
-
* Uses
|
|
15
|
-
* Node's `Buffer` when available; otherwise a tight JS loop.
|
|
41
|
+
* Uses a JS loop for short inputs and Node's `Buffer` for longer ones.
|
|
16
42
|
*
|
|
17
43
|
* @internal
|
|
18
44
|
*/
|
|
19
45
|
export declare function hexToBytes(value: string): Uint8Array;
|
|
46
|
+
/**
|
|
47
|
+
* Decodes via Node's `Buffer`, where the runtime has it.
|
|
48
|
+
*
|
|
49
|
+
* @internal
|
|
50
|
+
*/
|
|
51
|
+
export declare const hexToBytesBuffer: ((value: string, length: number) => Uint8Array) | undefined;
|
|
52
|
+
/**
|
|
53
|
+
* Decodes in plain JavaScript, reading nibbles straight out of `value` from
|
|
54
|
+
* index 2 so no substring is materialized.
|
|
55
|
+
*
|
|
56
|
+
* Invalidity is accumulated rather than branched on per nibble: a valid nibble
|
|
57
|
+
* is at most `0x0f`, so only the `0xff` sentinel can set bit 7, and one check
|
|
58
|
+
* after the loop covers every character. `nibbleTable` only spans Latin-1, so a
|
|
59
|
+
* code unit above it reads `undefined` and has to be mapped to the sentinel --
|
|
60
|
+
* without that, a non-ASCII character would OR in as zero and decode silently.
|
|
61
|
+
*
|
|
62
|
+
* @internal
|
|
63
|
+
*/
|
|
64
|
+
export declare function hexToBytesLoop(value: string, length: number): Uint8Array;
|
|
20
65
|
/** @internal */
|
|
21
66
|
export declare function charCodeToBase16(char: number): number | undefined;
|
|
22
67
|
/** Thrown when a value is not a valid `0x`-prefixed hex string. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hex.d.ts","sourceRoot":"","sources":["../../../../src/core/internal/codec/hex.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAA;AAEzC,gBAAgB;AAChB,MAAM,MAAM,GAAG,GAAG,KAAK,MAAM,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"hex.d.ts","sourceRoot":"","sources":["../../../../src/core/internal/codec/hex.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAA;AAEzC,gBAAgB;AAChB,MAAM,MAAM,GAAG,GAAG,KAAK,MAAM,EAAE,CAAA;AAiD/B;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,GAAG,CAIjD;AAED;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,EAAE,CAAC,CAAC,KAAK,EAAE,UAAU,KAAK,GAAG,CAAC,GAAG,SACK,CAAA;AAEnE;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,CAAC,CAAC,KAAK,EAAE,UAAU,KAAK,GAAG,CAAC,GAAG,SAGmC,CAAA;AAEjG;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,GAAG,CAKrD;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAepD;AAED;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EACzB,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,UAAU,CAAC,GAC/C,SAoBA,CAAA;AAEJ;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,CAWxE;AAED,gBAAgB;AAChB,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGjE;AAED,mEAAmE;AACnE,qBAAa,oBAAqB,SAAQ,MAAM,CAAC,SAAS;IACxD,SAAkB,IAAI,8BAA6B;gBAEvC,KAAK,EAAE,OAAO;CAO3B;AAED,wDAAwD;AACxD,qBAAa,kBAAmB,SAAQ,MAAM,CAAC,SAAS;IACtD,SAAkB,IAAI,4BAA2B;gBAErC,KAAK,EAAE,GAAG;CAQvB;AAED,gBAAgB;AAChB,MAAM,CAAC,OAAO,WAAW,UAAU,CAAC;IAClC,KAAK,SAAS,GAAG,MAAM,CAAC,eAAe,CAAA;CACxC;AAED,gBAAgB;AAChB,MAAM,CAAC,OAAO,WAAW,UAAU,CAAC;IAClC,KAAK,SAAS,GACV,oBAAoB,GACpB,kBAAkB,GAClB,MAAM,CAAC,eAAe,CAAA;CAC3B"}
|
|
@@ -12,34 +12,82 @@ const nibbleTable = /*#__PURE__*/ (() => {
|
|
|
12
12
|
}
|
|
13
13
|
return table;
|
|
14
14
|
})();
|
|
15
|
-
//
|
|
16
|
-
//
|
|
17
|
-
//
|
|
15
|
+
// Native fast-path detection. `Uint8Array.prototype.toHex` ships in Chromium
|
|
16
|
+
// 145, Safari 18.2+ and Firefox 133+, but not in Node 24, which reaches
|
|
17
|
+
// `Buffer` instead.
|
|
18
|
+
//
|
|
19
|
+
// Only *encoding* delegates to it. Encoding is total, so a native method has
|
|
20
|
+
// nothing to get wrong; decoding has to reject, and the native decoders do not
|
|
21
|
+
// do so reliably -- Chromium 145 reads U+C230 as the digit `0`, masking the
|
|
22
|
+
// code unit to 8 bits exactly as `Buffer` does, and only rejects it from 149
|
|
23
|
+
// on. test262 misses this because none of its illegal characters mask onto the
|
|
24
|
+
// hex alphabet. Guarding `fromHex` costs an ASCII scan that leaves it only
|
|
25
|
+
// 10-25% ahead of the loop, so it is not used at all.
|
|
18
26
|
const _Buffer = globalThis.Buffer;
|
|
19
27
|
const nativeToHex = Uint8Array.prototype.toHex;
|
|
20
|
-
|
|
28
|
+
/**
|
|
29
|
+
* Byte count below which {@link hexToBytesLoop} beats `Buffer.from(…, 'hex')`,
|
|
30
|
+
* whose fixed per-call cost short inputs cannot amortize. Measured on Node 24
|
|
31
|
+
* (V8 13.6): the crossover sits between 32 and 48 bytes, and 32 covers the
|
|
32
|
+
* sizes Ethereum work is made of -- 20-byte addresses and 32-byte words.
|
|
33
|
+
*
|
|
34
|
+
* `Buffer` is the only tier this applies to; where it is absent the loop
|
|
35
|
+
* decodes at every size. Re-measure before moving it.
|
|
36
|
+
*
|
|
37
|
+
* @internal
|
|
38
|
+
*/
|
|
39
|
+
const loopDecodeMaxBytes = 32;
|
|
21
40
|
/**
|
|
22
41
|
* Encodes a `Uint8Array` into a `0x`-prefixed lowercase hex string. Uses the
|
|
23
|
-
* native `Uint8Array.prototype.toHex`
|
|
24
|
-
*
|
|
42
|
+
* native `Uint8Array.prototype.toHex` or Node's `Buffer` when available;
|
|
43
|
+
* otherwise a tight JS loop.
|
|
25
44
|
*
|
|
26
45
|
* @internal
|
|
27
46
|
*/
|
|
28
47
|
export function bytesToHex(value) {
|
|
29
|
-
if (
|
|
30
|
-
return
|
|
31
|
-
if (
|
|
32
|
-
return
|
|
48
|
+
if (bytesToHexNative)
|
|
49
|
+
return bytesToHexNative(value);
|
|
50
|
+
if (bytesToHexBuffer)
|
|
51
|
+
return bytesToHexBuffer(value);
|
|
52
|
+
return bytesToHexLoop(value);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Encodes via `Uint8Array.prototype.toHex`, where the runtime has it.
|
|
56
|
+
* `undefined` otherwise, so callers and the conformance suite can both ask
|
|
57
|
+
* whether this tier exists rather than inferring it.
|
|
58
|
+
*
|
|
59
|
+
* @internal
|
|
60
|
+
*/
|
|
61
|
+
export const bytesToHexNative = nativeToHex && ((value) => `0x${nativeToHex.call(value)}`);
|
|
62
|
+
/**
|
|
63
|
+
* Encodes via Node's `Buffer`, where the runtime has it.
|
|
64
|
+
*
|
|
65
|
+
* @internal
|
|
66
|
+
*/
|
|
67
|
+
export const bytesToHexBuffer = _Buffer &&
|
|
68
|
+
((value) => `0x${_Buffer.from(value.buffer, value.byteOffset, value.byteLength).toString('hex')}`);
|
|
69
|
+
/**
|
|
70
|
+
* Encodes in plain JavaScript, for runtimes with neither the native method nor
|
|
71
|
+
* `Buffer`: browsers predating `Uint8Array.prototype.toHex`, which is recent
|
|
72
|
+
* enough that a meaningful share of installed browsers still land here.
|
|
73
|
+
*
|
|
74
|
+
* Appending to a string beats collecting substrings and joining them: V8 builds
|
|
75
|
+
* a rope and flattens it once, where `join` over an `Array.from({ length })`
|
|
76
|
+
* pays for a holey array as well as the concatenation. Measured at ~6.5x on a
|
|
77
|
+
* 32-byte input, counting the flatten.
|
|
78
|
+
*
|
|
79
|
+
* @internal
|
|
80
|
+
*/
|
|
81
|
+
export function bytesToHexLoop(value) {
|
|
33
82
|
const length = value.length;
|
|
34
|
-
|
|
83
|
+
let hex = '0x';
|
|
35
84
|
for (let i = 0; i < length; i++)
|
|
36
|
-
|
|
37
|
-
return
|
|
85
|
+
hex += hexes[value[i]];
|
|
86
|
+
return hex;
|
|
38
87
|
}
|
|
39
88
|
/**
|
|
40
89
|
* Strictly decodes a `0x`-prefixed even-length hex string into a `Uint8Array`.
|
|
41
|
-
* Uses
|
|
42
|
-
* Node's `Buffer` when available; otherwise a tight JS loop.
|
|
90
|
+
* Uses a JS loop for short inputs and Node's `Buffer` for longer ones.
|
|
43
91
|
*
|
|
44
92
|
* @internal
|
|
45
93
|
*/
|
|
@@ -49,44 +97,70 @@ export function hexToBytes(value) {
|
|
|
49
97
|
value.charCodeAt(0) !== 48 /* '0' */ ||
|
|
50
98
|
value.charCodeAt(1) !== 120 /* 'x' */)
|
|
51
99
|
throw new InvalidHexValueError(value);
|
|
52
|
-
const
|
|
53
|
-
if ((
|
|
100
|
+
const nibbles = value.length - 2;
|
|
101
|
+
if ((nibbles & 1) !== 0)
|
|
54
102
|
throw new InvalidLengthError(value);
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
103
|
+
const length = nibbles >> 1;
|
|
104
|
+
if (length <= loopDecodeMaxBytes)
|
|
105
|
+
return hexToBytesLoop(value, length);
|
|
106
|
+
if (hexToBytesBuffer)
|
|
107
|
+
return hexToBytesBuffer(value, length);
|
|
108
|
+
return hexToBytesLoop(value, length);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Decodes via Node's `Buffer`, where the runtime has it.
|
|
112
|
+
*
|
|
113
|
+
* @internal
|
|
114
|
+
*/
|
|
115
|
+
export const hexToBytesBuffer = _Buffer &&
|
|
116
|
+
((value, length) => {
|
|
117
|
+
const body = value.slice(2);
|
|
118
|
+
// `Buffer.from(…, 'hex')` masks each UTF-16 code unit to 8 bits, so a
|
|
119
|
+
// character above U+00FF can alias a hex digit: U+C230 masks to 0x30, the
|
|
120
|
+
// digit `0`, and `'0x숰0'` decodes to `0x00` instead of being rejected.
|
|
121
|
+
// Masking cannot fabricate a digit from pure ASCII, and a string is pure
|
|
122
|
+
// ASCII exactly when its UTF-8 length matches its code-unit count.
|
|
123
|
+
if (_Buffer.byteLength(body, 'utf8') !== body.length)
|
|
60
124
|
throw new InvalidHexValueError(value);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
if (_Buffer && body.length > 0) {
|
|
64
125
|
// Buffer.from with 'hex' silently truncates on invalid chars; verify
|
|
65
126
|
// byteLength matches expectations to detect malformed input.
|
|
66
|
-
const expected = body.length >> 1;
|
|
67
127
|
const buf = _Buffer.from(body, 'hex');
|
|
68
|
-
if (buf.length !==
|
|
128
|
+
if (buf.length !== length)
|
|
69
129
|
throw new InvalidHexValueError(value);
|
|
70
130
|
// Copy out of Buffer pool: callers may rely on `.buffer` being a
|
|
71
131
|
// standalone ArrayBuffer (e.g. WebAuthn attestationObject round-trips).
|
|
72
132
|
const out = new Uint8Array(buf.byteLength);
|
|
73
133
|
out.set(buf);
|
|
74
134
|
return out;
|
|
75
|
-
}
|
|
76
|
-
|
|
135
|
+
});
|
|
136
|
+
/**
|
|
137
|
+
* Decodes in plain JavaScript, reading nibbles straight out of `value` from
|
|
138
|
+
* index 2 so no substring is materialized.
|
|
139
|
+
*
|
|
140
|
+
* Invalidity is accumulated rather than branched on per nibble: a valid nibble
|
|
141
|
+
* is at most `0x0f`, so only the `0xff` sentinel can set bit 7, and one check
|
|
142
|
+
* after the loop covers every character. `nibbleTable` only spans Latin-1, so a
|
|
143
|
+
* code unit above it reads `undefined` and has to be mapped to the sentinel --
|
|
144
|
+
* without that, a non-ASCII character would OR in as zero and decode silently.
|
|
145
|
+
*
|
|
146
|
+
* @internal
|
|
147
|
+
*/
|
|
148
|
+
export function hexToBytesLoop(value, length) {
|
|
77
149
|
const out = new Uint8Array(length);
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
const
|
|
81
|
-
|
|
82
|
-
|
|
150
|
+
let invalid = 0;
|
|
151
|
+
for (let i = 0, j = 2; i < length; i++) {
|
|
152
|
+
const hi = nibbleTable[value.charCodeAt(j++)] ?? 0xff;
|
|
153
|
+
const lo = nibbleTable[value.charCodeAt(j++)] ?? 0xff;
|
|
154
|
+
invalid |= hi | lo;
|
|
83
155
|
out[i] = (hi << 4) | lo;
|
|
84
156
|
}
|
|
157
|
+
if (invalid & 0x80)
|
|
158
|
+
throw new InvalidHexValueError(value);
|
|
85
159
|
return out;
|
|
86
160
|
}
|
|
87
161
|
/** @internal */
|
|
88
162
|
export function charCodeToBase16(char) {
|
|
89
|
-
const v = nibbleTable[char];
|
|
163
|
+
const v = nibbleTable[char] ?? 0xff;
|
|
90
164
|
return v === 0xff ? undefined : v;
|
|
91
165
|
}
|
|
92
166
|
/** Thrown when a value is not a valid `0x`-prefixed hex string. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hex.js","sourceRoot":"","sources":["../../../../src/core/internal/codec/hex.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAA;AAKzC,gBAAgB;AAChB,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAChE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAChC,CAAA;AAED,oEAAoE;AACpE,MAAM,WAAW,GAAG,aAAa,CAAC,CAAC,GAAG,EAAE;IACtC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA,CAAC,UAAU;IACzD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA,CAAC,UAAU;QACjC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA,CAAC,UAAU;IACnC,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAC,EAAE,CAAA;AAEJ,4EAA4E;AAC5E,
|
|
1
|
+
{"version":3,"file":"hex.js","sourceRoot":"","sources":["../../../../src/core/internal/codec/hex.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAA;AAKzC,gBAAgB;AAChB,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAChE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAChC,CAAA;AAED,oEAAoE;AACpE,MAAM,WAAW,GAAG,aAAa,CAAC,CAAC,GAAG,EAAE;IACtC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA,CAAC,UAAU;IACzD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA,CAAC,UAAU;QACjC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA,CAAC,UAAU;IACnC,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAC,EAAE,CAAA;AAEJ,6EAA6E;AAC7E,wEAAwE;AACxE,oBAAoB;AACpB,EAAE;AACF,6EAA6E;AAC7E,+EAA+E;AAC/E,4EAA4E;AAC5E,6EAA6E;AAC7E,+EAA+E;AAC/E,2EAA2E;AAC3E,sDAAsD;AACtD,MAAM,OAAO,GACX,UACD,CAAC,MAAM,CAAA;AACR,MAAM,WAAW,GACf,UAAU,CAAC,SACZ,CAAC,KAAK,CAAA;AAEP;;;;;;;;;;GAUG;AACH,MAAM,kBAAkB,GAAG,EAAE,CAAA;AAE7B;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAC,KAAiB;IAC1C,IAAI,gBAAgB;QAAE,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAA;IACpD,IAAI,gBAAgB;QAAE,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAA;IACpD,OAAO,cAAc,CAAC,KAAK,CAAC,CAAA;AAC9B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAC3B,WAAW,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAAS,CAAC,CAAA;AAEnE;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAC3B,OAAO;IACP,CAAC,CAAC,KAAK,EAAE,EAAE,CACT,KAAK,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAS,CAAC,CAAA;AAEjG;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,cAAc,CAAC,KAAiB;IAC9C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAA;IAC3B,IAAI,GAAG,GAAG,IAAI,CAAA;IACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE;QAAE,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAA;IACxD,OAAO,GAAU,CAAA;AACnB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,CAAC,MAAM,GAAG,CAAC;QAChB,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,SAAS;QACpC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,SAAS;QAErC,MAAM,IAAI,oBAAoB,CAAC,KAAK,CAAC,CAAA;IACvC,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAA;IAChC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,kBAAkB,CAAC,KAAY,CAAC,CAAA;IACnE,MAAM,MAAM,GAAG,OAAO,IAAI,CAAC,CAAA;IAE3B,IAAI,MAAM,IAAI,kBAAkB;QAAE,OAAO,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IACtE,IAAI,gBAAgB;QAAE,OAAO,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IAC5D,OAAO,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;AACtC,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAG3B,OAAO;IACP,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;QACjB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAC3B,sEAAsE;QACtE,0EAA0E;QAC1E,uEAAuE;QACvE,yEAAyE;QACzE,mEAAmE;QACnE,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM;YAClD,MAAM,IAAI,oBAAoB,CAAC,KAAK,CAAC,CAAA;QACvC,qEAAqE;QACrE,6DAA6D;QAC7D,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;QACrC,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM;YAAE,MAAM,IAAI,oBAAoB,CAAC,KAAK,CAAC,CAAA;QAChE,iEAAiE;QACjE,wEAAwE;QACxE,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QAC1C,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACZ,OAAO,GAAG,CAAA;IACZ,CAAC,CAAC,CAAA;AAEJ;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,cAAc,CAAC,KAAa,EAAE,MAAc;IAC1D,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAA;IAClC,IAAI,OAAO,GAAG,CAAC,CAAA;IACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAA;QACrD,MAAM,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAA;QACrD,OAAO,IAAI,EAAE,GAAG,EAAE,CAAA;QAClB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,CAAA;IACzB,CAAC;IACD,IAAI,OAAO,GAAG,IAAI;QAAE,MAAM,IAAI,oBAAoB,CAAC,KAAK,CAAC,CAAA;IACzD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,gBAAgB;AAChB,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI,CAAA;IACnC,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;AACnC,CAAC;AAED,mEAAmE;AACnE,MAAM,OAAO,oBAAqB,SAAQ,MAAM,CAAC,SAAS;IACtC,IAAI,GAAG,0BAA0B,CAAA;IAEnD,YAAY,KAAc;QACxB,KAAK,CAAC,WAAW,KAAK,6BAA6B,EAAE;YACnD,YAAY,EAAE;gBACZ,4FAA4F;aAC7F;SACF,CAAC,CAAA;IACJ,CAAC;CACF;AAED,wDAAwD;AACxD,MAAM,OAAO,kBAAmB,SAAQ,MAAM,CAAC,SAAS;IACpC,IAAI,GAAG,wBAAwB,CAAA;IAEjD,YAAY,KAAU;QACpB,KAAK,CACH,gBAAgB,KAAK,yBAAyB,KAAK,CAAC,MAAM,GAAG,CAAC,YAAY,EAC1E;YACE,YAAY,EAAE,CAAC,4BAA4B,CAAC;SAC7C,CACF,CAAA;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Curve constants, inlined so that modules needing nothing but an order do not
|
|
3
|
+
* pull a curve implementation into the bundle.
|
|
4
|
+
*
|
|
5
|
+
* These are fixed by the curve specifications and are asserted against
|
|
6
|
+
* `@noble/curves` in `src/core/_test/curves.test.ts`.
|
|
7
|
+
*
|
|
8
|
+
* @internal
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Order of the secp256r1 (P-256) curve.
|
|
12
|
+
*
|
|
13
|
+
* @see https://www.secg.org/sec2-v2.pdf
|
|
14
|
+
* @internal
|
|
15
|
+
*/
|
|
16
|
+
export declare const p256N = 115792089210356248762697446949407573529996955224135760342422259061068512044369n;
|
|
17
|
+
//# sourceMappingURL=curves.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"curves.d.ts","sourceRoot":"","sources":["../../../src/core/internal/curves.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;GAKG;AACH,eAAO,MAAM,KAAK,kFACmD,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Curve constants, inlined so that modules needing nothing but an order do not
|
|
3
|
+
* pull a curve implementation into the bundle.
|
|
4
|
+
*
|
|
5
|
+
* These are fixed by the curve specifications and are asserted against
|
|
6
|
+
* `@noble/curves` in `src/core/_test/curves.test.ts`.
|
|
7
|
+
*
|
|
8
|
+
* @internal
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Order of the secp256r1 (P-256) curve.
|
|
12
|
+
*
|
|
13
|
+
* @see https://www.secg.org/sec2-v2.pdf
|
|
14
|
+
* @internal
|
|
15
|
+
*/
|
|
16
|
+
export const p256N = 0xffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551n;
|
|
17
|
+
//# sourceMappingURL=curves.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"curves.js","sourceRoot":"","sources":["../../../src/core/internal/curves.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,KAAK,GAChB,mEAAmE,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type Complete, type Eddsa } from './engine.js';
|
|
2
|
+
/** @internal */
|
|
3
|
+
export declare const getPublicKey: Complete<Eddsa>['getPublicKey'];
|
|
4
|
+
/** @internal */
|
|
5
|
+
export declare const randomSecretKey: Complete<Eddsa>['randomSecretKey'];
|
|
6
|
+
/** @internal */
|
|
7
|
+
export declare const sign: Complete<Eddsa>['sign'];
|
|
8
|
+
/** @internal */
|
|
9
|
+
export declare const toMontgomery: Complete<Eddsa>['toMontgomery'];
|
|
10
|
+
/** @internal */
|
|
11
|
+
export declare const toMontgomerySecret: Complete<Eddsa>['toMontgomerySecret'];
|
|
12
|
+
/** @internal */
|
|
13
|
+
export declare const verify: Complete<Eddsa>['verify'];
|
|
14
|
+
//# sourceMappingURL=ed25519.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ed25519.d.ts","sourceRoot":"","sources":["../../../src/core/internal/ed25519.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,KAAK,EAAa,MAAM,aAAa,CAAA;AAiClE,gBAAgB;AAChB,eAAO,MAAM,YAAY,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,cAAc,CACa,CAAA;AAEtE,gBAAgB;AAChB,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,iBAAiB,CACG,CAAA;AAElE,gBAAgB;AAChB,eAAO,MAAM,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,CACsB,CAAA;AAE/D,gBAAgB;AAChB,eAAO,MAAM,YAAY,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,cAAc,CACY,CAAA;AAErE,gBAAgB;AAChB,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,oBAAoB,CAKlE,CAAA;AAEH,gBAAgB;AAChB,eAAO,MAAM,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,QAAQ,CAImC,CAAA"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { ed25519 } from '@noble/curves/ed25519.js';
|
|
2
|
+
import { overrides } from './engine.js';
|
|
3
|
+
/**
|
|
4
|
+
* Resolvers for the `Ed25519` slot, and ox's defaults for it, backed by
|
|
5
|
+
* `@noble/curves`.
|
|
6
|
+
*
|
|
7
|
+
* Declaring the defaults against the slot contract is what keeps them honest: a
|
|
8
|
+
* default that goes missing, or whose signature drifts, fails to compile rather
|
|
9
|
+
* than failing at the call site.
|
|
10
|
+
*/
|
|
11
|
+
const getPublicKeyDefault = (privateKey) => ed25519.getPublicKey(privateKey);
|
|
12
|
+
const randomSecretKeyDefault = () => ed25519.utils.randomSecretKey();
|
|
13
|
+
const signDefault = (payload, privateKey) => ed25519.sign(payload, privateKey);
|
|
14
|
+
const toMontgomeryDefault = (publicKey) => ed25519.utils.toMontgomery(publicKey);
|
|
15
|
+
const toMontgomerySecretDefault = (privateKey) => ed25519.utils.toMontgomerySecret(privateKey);
|
|
16
|
+
const verifyDefault = (signature, payload, publicKey) => ed25519.verify(signature, payload, publicKey);
|
|
17
|
+
/** @internal */
|
|
18
|
+
export const getPublicKey = (privateKey) => (overrides.Ed25519?.getPublicKey ?? getPublicKeyDefault)(privateKey);
|
|
19
|
+
/** @internal */
|
|
20
|
+
export const randomSecretKey = () => (overrides.Ed25519?.randomSecretKey ?? randomSecretKeyDefault)();
|
|
21
|
+
/** @internal */
|
|
22
|
+
export const sign = (payload, privateKey) => (overrides.Ed25519?.sign ?? signDefault)(payload, privateKey);
|
|
23
|
+
/** @internal */
|
|
24
|
+
export const toMontgomery = (publicKey) => (overrides.Ed25519?.toMontgomery ?? toMontgomeryDefault)(publicKey);
|
|
25
|
+
/** @internal */
|
|
26
|
+
export const toMontgomerySecret = (privateKey) => (overrides.Ed25519?.toMontgomerySecret ?? toMontgomerySecretDefault)(privateKey);
|
|
27
|
+
/** @internal */
|
|
28
|
+
export const verify = (signature, payload, publicKey) => (overrides.Ed25519?.verify ?? verifyDefault)(signature, payload, publicKey);
|
|
29
|
+
//# sourceMappingURL=ed25519.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ed25519.js","sourceRoot":"","sources":["../../../src/core/internal/ed25519.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAA;AAClD,OAAO,EAA6B,SAAS,EAAE,MAAM,aAAa,CAAA;AAElE;;;;;;;GAOG;AAEH,MAAM,mBAAmB,GAAoC,CAAC,UAAU,EAAE,EAAE,CAC1E,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAA;AAElC,MAAM,sBAAsB,GAAuC,GAAG,EAAE,CACtE,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,CAAA;AAEjC,MAAM,WAAW,GAA4B,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,CACnE,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;AAEnC,MAAM,mBAAmB,GAAoC,CAAC,SAAS,EAAE,EAAE,CACzE,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,CAAA;AAEvC,MAAM,yBAAyB,GAA0C,CACvE,UAAU,EACV,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAA;AAEjD,MAAM,aAAa,GAA8B,CAC/C,SAAS,EACT,OAAO,EACP,SAAS,EACT,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAA;AAElD,gBAAgB;AAChB,MAAM,CAAC,MAAM,YAAY,GAAoC,CAAC,UAAU,EAAE,EAAE,CAC1E,CAAC,SAAS,CAAC,OAAO,EAAE,YAAY,IAAI,mBAAmB,CAAC,CAAC,UAAU,CAAC,CAAA;AAEtE,gBAAgB;AAChB,MAAM,CAAC,MAAM,eAAe,GAAuC,GAAG,EAAE,CACtE,CAAC,SAAS,CAAC,OAAO,EAAE,eAAe,IAAI,sBAAsB,CAAC,EAAE,CAAA;AAElE,gBAAgB;AAChB,MAAM,CAAC,MAAM,IAAI,GAA4B,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,CACnE,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,IAAI,WAAW,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;AAE/D,gBAAgB;AAChB,MAAM,CAAC,MAAM,YAAY,GAAoC,CAAC,SAAS,EAAE,EAAE,CACzE,CAAC,SAAS,CAAC,OAAO,EAAE,YAAY,IAAI,mBAAmB,CAAC,CAAC,SAAS,CAAC,CAAA;AAErE,gBAAgB;AAChB,MAAM,CAAC,MAAM,kBAAkB,GAA0C,CACvE,UAAU,EACV,EAAE,CACF,CAAC,SAAS,CAAC,OAAO,EAAE,kBAAkB,IAAI,yBAAyB,CAAC,CAClE,UAAU,CACX,CAAA;AAEH,gBAAgB;AAChB,MAAM,CAAC,MAAM,MAAM,GAA8B,CAC/C,SAAS,EACT,OAAO,EACP,SAAS,EACT,EAAE,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,IAAI,aAAa,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAA"}
|