ox 0.14.34 → 0.14.35
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 +8 -0
- package/_cjs/core/AesGcm.js +47 -1
- package/_cjs/core/AesGcm.js.map +1 -1
- package/_cjs/core/Ed25519.js +42 -1
- package/_cjs/core/Ed25519.js.map +1 -1
- package/_cjs/core/P256.js +44 -1
- package/_cjs/core/P256.js.map +1 -1
- package/_cjs/core/Secp256k1.js +38 -1
- package/_cjs/core/Secp256k1.js.map +1 -1
- package/_cjs/core/internal/keyDerivation.js +15 -0
- package/_cjs/core/internal/keyDerivation.js.map +1 -0
- package/_cjs/tempo/MultisigConfig.js +15 -4
- package/_cjs/tempo/MultisigConfig.js.map +1 -1
- package/_cjs/version.js +1 -1
- package/_esm/core/AesGcm.js +85 -0
- package/_esm/core/AesGcm.js.map +1 -1
- package/_esm/core/Ed25519.js +81 -0
- package/_esm/core/Ed25519.js.map +1 -1
- package/_esm/core/P256.js +83 -0
- package/_esm/core/P256.js.map +1 -1
- package/_esm/core/Secp256k1.js +77 -0
- package/_esm/core/Secp256k1.js.map +1 -1
- package/_esm/core/internal/keyDerivation.js +13 -0
- package/_esm/core/internal/keyDerivation.js.map +1 -0
- package/_esm/tempo/MultisigConfig.js +17 -5
- package/_esm/tempo/MultisigConfig.js.map +1 -1
- package/_esm/version.js +1 -1
- package/_types/core/AesGcm.d.ts +66 -1
- package/_types/core/AesGcm.d.ts.map +1 -1
- package/_types/core/Ed25519.d.ts +82 -1
- package/_types/core/Ed25519.d.ts.map +1 -1
- package/_types/core/P256.d.ts +82 -1
- package/_types/core/P256.d.ts.map +1 -1
- package/_types/core/Secp256k1.d.ts +85 -1
- package/_types/core/Secp256k1.d.ts.map +1 -1
- package/_types/core/internal/keyDerivation.d.ts +12 -0
- package/_types/core/internal/keyDerivation.d.ts.map +1 -0
- package/_types/tempo/MultisigConfig.d.ts +4 -3
- package/_types/tempo/MultisigConfig.d.ts.map +1 -1
- package/_types/version.d.ts +1 -1
- package/core/AesGcm.ts +137 -1
- package/core/Ed25519.ts +133 -1
- package/core/P256.ts +135 -1
- package/core/Secp256k1.ts +133 -1
- package/core/internal/keyDerivation.ts +33 -0
- package/package.json +1 -1
- package/tempo/MultisigConfig.test.ts +40 -6
- package/tempo/MultisigConfig.ts +18 -5
- package/version.ts +1 -1
package/_esm/core/Ed25519.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { ed25519, edwardsToMontgomeryPriv, edwardsToMontgomeryPub, } from '@noble/curves/ed25519';
|
|
2
2
|
import * as Bytes from './Bytes.js';
|
|
3
|
+
import * as Errors from './Errors.js';
|
|
3
4
|
import * as Hex from './Hex.js';
|
|
5
|
+
import * as keyDerivation from './internal/keyDerivation.js';
|
|
6
|
+
import * as Mnemonic from './Mnemonic.js';
|
|
4
7
|
/** Re-export of noble/curves Ed25519 utilities. */
|
|
5
8
|
export const noble = ed25519;
|
|
6
9
|
/**
|
|
@@ -25,6 +28,71 @@ export function createKeyPair(options = {}) {
|
|
|
25
28
|
publicKey: publicKey,
|
|
26
29
|
};
|
|
27
30
|
}
|
|
31
|
+
/**
|
|
32
|
+
* Derives an Ed25519 private key from a BIP-39 mnemonic.
|
|
33
|
+
*
|
|
34
|
+
* This is equivalent to passing `Mnemonic.toSeed(mnemonic, { passphrase })`
|
|
35
|
+
* to `Ed25519.fromSeed`.
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```ts twoslash
|
|
39
|
+
* import { Ed25519 } from 'ox'
|
|
40
|
+
*
|
|
41
|
+
* const privateKey = Ed25519.fromMnemonic(
|
|
42
|
+
* 'test test test test test test test test test test test junk'
|
|
43
|
+
* )
|
|
44
|
+
* ```
|
|
45
|
+
*
|
|
46
|
+
* @param mnemonic - BIP-39 mnemonic phrase.
|
|
47
|
+
* @param options - Options.
|
|
48
|
+
* @returns An Ed25519 private key.
|
|
49
|
+
*/
|
|
50
|
+
export function fromMnemonic(mnemonic, options = {}) {
|
|
51
|
+
const { passphrase } = options;
|
|
52
|
+
const seed = Mnemonic.toSeed(mnemonic, { passphrase });
|
|
53
|
+
try {
|
|
54
|
+
return fromSeed(seed, options);
|
|
55
|
+
}
|
|
56
|
+
finally {
|
|
57
|
+
seed.fill(0);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Derives an Ed25519 private key from a seed.
|
|
62
|
+
*
|
|
63
|
+
* The seed must contain at least 32 bytes of cryptographically strong key
|
|
64
|
+
* material. Do not pass a password directly; use a password KDF first.
|
|
65
|
+
*
|
|
66
|
+
* The permanent derivation contract uses the seed as the HMAC-SHA256
|
|
67
|
+
* key. The HMAC message uses the `ox.ed25519.fromSeed.v1` domain followed by a
|
|
68
|
+
* 32-bit big-endian counter set to zero.
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```ts twoslash
|
|
72
|
+
* import { Ed25519 } from 'ox'
|
|
73
|
+
*
|
|
74
|
+
* const privateKey = Ed25519.fromSeed(
|
|
75
|
+
* '0x000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f'
|
|
76
|
+
* )
|
|
77
|
+
* ```
|
|
78
|
+
*
|
|
79
|
+
* @param seed - Seed containing at least 32 bytes of cryptographically strong key material.
|
|
80
|
+
* @param options - Options.
|
|
81
|
+
* @returns An Ed25519 private key.
|
|
82
|
+
*/
|
|
83
|
+
export function fromSeed(seed, options = {}) {
|
|
84
|
+
const { as = 'Hex' } = options;
|
|
85
|
+
const bytes = Bytes.from(seed);
|
|
86
|
+
if (bytes.length < 32)
|
|
87
|
+
throw new InvalidSeedSizeError({ size: bytes.length });
|
|
88
|
+
const privateKey = keyDerivation.derive(bytes, fromSeedDomain);
|
|
89
|
+
if (as === 'Hex') {
|
|
90
|
+
const value = Hex.fromBytes(privateKey);
|
|
91
|
+
privateKey.fill(0);
|
|
92
|
+
return value;
|
|
93
|
+
}
|
|
94
|
+
return privateKey;
|
|
95
|
+
}
|
|
28
96
|
/**
|
|
29
97
|
* Computes the Ed25519 public key from a provided private key.
|
|
30
98
|
*
|
|
@@ -170,4 +238,17 @@ export function toX25519PrivateKey(options) {
|
|
|
170
238
|
return Hex.fromBytes(x25519PrivateKeyBytes);
|
|
171
239
|
return x25519PrivateKeyBytes;
|
|
172
240
|
}
|
|
241
|
+
/** Thrown when a seed contains fewer than 32 bytes. */
|
|
242
|
+
export class InvalidSeedSizeError extends Errors.BaseError {
|
|
243
|
+
constructor(options) {
|
|
244
|
+
super(`Seed must contain at least 32 bytes. Received ${options.size} bytes.`);
|
|
245
|
+
Object.defineProperty(this, "name", {
|
|
246
|
+
enumerable: true,
|
|
247
|
+
configurable: true,
|
|
248
|
+
writable: true,
|
|
249
|
+
value: 'Ed25519.InvalidSeedSizeError'
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
const fromSeedDomain = Bytes.fromString('ox.ed25519.fromSeed.v1');
|
|
173
254
|
//# sourceMappingURL=Ed25519.js.map
|
package/_esm/core/Ed25519.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Ed25519.js","sourceRoot":"","sources":["../../core/Ed25519.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"Ed25519.js","sourceRoot":"","sources":["../../core/Ed25519.ts"],"names":[],"mappings":"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"}
|
package/_esm/core/P256.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { secp256r1 } from '@noble/curves/p256';
|
|
2
2
|
import * as Bytes from './Bytes.js';
|
|
3
|
+
import * as Errors from './Errors.js';
|
|
3
4
|
import * as Hex from './Hex.js';
|
|
4
5
|
import * as Entropy from './internal/entropy.js';
|
|
6
|
+
import * as keyDerivation from './internal/keyDerivation.js';
|
|
7
|
+
import * as Mnemonic from './Mnemonic.js';
|
|
5
8
|
import * as PublicKey from './PublicKey.js';
|
|
6
9
|
/** Re-export of noble/curves P256 utilities. */
|
|
7
10
|
export const noble = secp256r1;
|
|
@@ -27,6 +30,73 @@ export function createKeyPair(options = {}) {
|
|
|
27
30
|
publicKey,
|
|
28
31
|
};
|
|
29
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* Derives a valid P256 private key from a BIP-39 mnemonic.
|
|
35
|
+
*
|
|
36
|
+
* This is equivalent to passing `Mnemonic.toSeed(mnemonic, { passphrase })`
|
|
37
|
+
* to `P256.fromSeed`.
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```ts twoslash
|
|
41
|
+
* import { P256 } from 'ox'
|
|
42
|
+
*
|
|
43
|
+
* const privateKey = P256.fromMnemonic(
|
|
44
|
+
* 'test test test test test test test test test test test junk'
|
|
45
|
+
* )
|
|
46
|
+
* ```
|
|
47
|
+
*
|
|
48
|
+
* @param mnemonic - BIP-39 mnemonic phrase.
|
|
49
|
+
* @param options - Options.
|
|
50
|
+
* @returns A valid P256 private key.
|
|
51
|
+
*/
|
|
52
|
+
export function fromMnemonic(mnemonic, options = {}) {
|
|
53
|
+
const { passphrase } = options;
|
|
54
|
+
const seed = Mnemonic.toSeed(mnemonic, { passphrase });
|
|
55
|
+
try {
|
|
56
|
+
return fromSeed(seed, options);
|
|
57
|
+
}
|
|
58
|
+
finally {
|
|
59
|
+
seed.fill(0);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Derives a valid P256 private key from a seed.
|
|
64
|
+
*
|
|
65
|
+
* The seed must contain at least 32 bytes of cryptographically strong key
|
|
66
|
+
* material. Do not pass a password directly; use a password KDF first.
|
|
67
|
+
*
|
|
68
|
+
* The permanent derivation contract uses the seed as the HMAC-SHA256
|
|
69
|
+
* key. The HMAC message uses the `ox.p256.fromSeed.v1` domain followed by a
|
|
70
|
+
* 32-bit big-endian counter starting at zero. Invalid scalars are skipped.
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```ts twoslash
|
|
74
|
+
* import { P256 } from 'ox'
|
|
75
|
+
*
|
|
76
|
+
* const privateKey = P256.fromSeed(
|
|
77
|
+
* '0x000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f'
|
|
78
|
+
* )
|
|
79
|
+
* ```
|
|
80
|
+
*
|
|
81
|
+
* @param seed - Seed containing at least 32 bytes of cryptographically strong key material.
|
|
82
|
+
* @param options - Options.
|
|
83
|
+
* @returns A valid P256 private key.
|
|
84
|
+
*/
|
|
85
|
+
export function fromSeed(seed, options = {}) {
|
|
86
|
+
const { as = 'Hex' } = options;
|
|
87
|
+
const bytes = Bytes.from(seed);
|
|
88
|
+
if (bytes.length < 32)
|
|
89
|
+
throw new InvalidSeedSizeError({ size: bytes.length });
|
|
90
|
+
const privateKey = keyDerivation.derive(bytes, fromSeedDomain, {
|
|
91
|
+
validate: noble.utils.isValidPrivateKey,
|
|
92
|
+
});
|
|
93
|
+
if (as === 'Hex') {
|
|
94
|
+
const value = Hex.fromBytes(privateKey);
|
|
95
|
+
privateKey.fill(0);
|
|
96
|
+
return value;
|
|
97
|
+
}
|
|
98
|
+
return privateKey;
|
|
99
|
+
}
|
|
30
100
|
/**
|
|
31
101
|
* Computes the P256 ECDSA public key from a provided private key.
|
|
32
102
|
*
|
|
@@ -180,4 +250,17 @@ export function verify(options) {
|
|
|
180
250
|
const { hash, payload, publicKey, signature } = options;
|
|
181
251
|
return secp256r1.verify(signature, payload instanceof Uint8Array ? payload : Bytes.fromHex(payload), PublicKey.toHex(publicKey).substring(2), { lowS: true, ...(hash ? { prehash: true } : {}) });
|
|
182
252
|
}
|
|
253
|
+
/** Thrown when a seed contains fewer than 32 bytes. */
|
|
254
|
+
export class InvalidSeedSizeError extends Errors.BaseError {
|
|
255
|
+
constructor(options) {
|
|
256
|
+
super(`Seed must contain at least 32 bytes. Received ${options.size} bytes.`);
|
|
257
|
+
Object.defineProperty(this, "name", {
|
|
258
|
+
enumerable: true,
|
|
259
|
+
configurable: true,
|
|
260
|
+
writable: true,
|
|
261
|
+
value: 'P256.InvalidSeedSizeError'
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
const fromSeedDomain = Bytes.fromString('ox.p256.fromSeed.v1');
|
|
183
266
|
//# sourceMappingURL=P256.js.map
|
package/_esm/core/P256.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"P256.js","sourceRoot":"","sources":["../../core/P256.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"P256.js","sourceRoot":"","sources":["../../core/P256.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAC/B,OAAO,KAAK,OAAO,MAAM,uBAAuB,CAAA;AAChD,OAAO,KAAK,aAAa,MAAM,6BAA6B,CAAA;AAC5D,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AACzC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAG3C,gDAAgD;AAChD,MAAM,CAAC,MAAM,KAAK,GAAG,SAAS,CAAA;AAE9B;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,aAAa,CAC3B,UAAqC,EAAE;IAEvC,MAAM,EAAE,EAAE,GAAG,KAAK,EAAE,GAAG,OAAO,CAAA;IAC9B,MAAM,UAAU,GAAG,gBAAgB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;IAC3C,MAAM,SAAS,GAAG,YAAY,CAAC,EAAE,UAAU,EAAE,CAAC,CAAA;IAE9C,OAAO;QACL,UAAU,EAAE,UAAmB;QAC/B,SAAS;KACV,CAAA;AACH,CAAC;AAwBD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,YAAY,CAC1B,QAAgB,EAChB,UAAoC,EAAE;IAEtC,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAA;IAC9B,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,CAAC,CAAA;IACtD,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAChC,CAAC;YAAS,CAAC;QACT,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACd,CAAC;AACH,CAAC;AAkBD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,QAAQ,CACtB,IAA2B,EAC3B,UAAgC,EAAE;IAElC,MAAM,EAAE,EAAE,GAAG,KAAK,EAAE,GAAG,OAAO,CAAA;IAC9B,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC9B,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE;QAAE,MAAM,IAAI,oBAAoB,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAA;IAE7E,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,cAAc,EAAE;QAC7D,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,iBAAiB;KACxC,CAAC,CAAA;IACF,IAAI,EAAE,KAAK,KAAK,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;QACvC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAClB,OAAO,KAAc,CAAA;IACvB,CAAC;IACD,OAAO,UAAmB,CAAA;AAC5B,CAAC;AAuBD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,YAAY,CAC1B,OAA6B;IAE7B,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAA;IAC9B,MAAM,KAAK,GAAG,SAAS,CAAC,eAAe,CAAC,cAAc,CACpD,OAAO,UAAU,KAAK,QAAQ;QAC5B,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;QACrB,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CACvC,CAAA;IACD,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AAC9B,CAAC;AAaD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,eAAe,CAC7B,OAAoC;IAEpC,MAAM,EAAE,EAAE,GAAG,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,OAAO,CAAA;IACrD,MAAM,KAAK,GAAG,SAAS,CAAC,eAAe,CAAC,OAAO,CAC7C,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CACpC,CAAA;IACD,MAAM,aAAa,GACjB,OAAO,UAAU,KAAK,QAAQ;QAC5B,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;QACrB,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IACxC,MAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,CAChC,SAAS,CAAC,KAAK,CAAC,sBAAsB,CAAC,aAAa,CAAC,CACtD,CAAA;IACD,MAAM,YAAY,GAAG,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA,CAAC,oBAAoB;IACtE,IAAI,EAAE,KAAK,KAAK;QAAE,OAAO,GAAG,CAAC,SAAS,CAAC,YAAY,CAAU,CAAA;IAC7D,OAAO,YAAqB,CAAA;AAC9B,CAAC;AA6BD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,gBAAgB,CAC9B,UAAwC,EAAE;IAE1C,MAAM,EAAE,EAAE,GAAG,KAAK,EAAE,GAAG,OAAO,CAAA;IAC9B,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAA;IAChD,IAAI,EAAE,KAAK,KAAK;QAAE,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,CAAU,CAAA;IACtD,OAAO,KAAc,CAAA;AACvB,CAAC;AAkBD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,gBAAgB,CAC9B,OAAiC;IAEjC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,OAAO,CAAA;IACtC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,SAAS,CAAA;IACnC,MAAM,UAAU,GAAG,IAAI,SAAS,CAAC,SAAS,CACxC,MAAM,CAAC,CAAC,CAAC,EACT,MAAM,CAAC,CAAC,CAAC,CACV,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;IACzB,MAAM,QAAQ,GACZ,OAAO,YAAY,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAA;IAClE,MAAM,KAAK,GAAG,UAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;IAChE,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AAC9B,CAAC;AAgBD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,IAAI,CAAC,OAAqB;IACxC,MAAM,EACJ,YAAY,GAAG,OAAO,CAAC,YAAY,EACnC,IAAI,EACJ,OAAO,EACP,UAAU,GACX,GAAG,OAAO,CAAA;IACX,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC,IAAI,CACvC,OAAO,YAAY,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAChE,UAAU,YAAY,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EACzE;QACE,YAAY,EACV,OAAO,YAAY,KAAK,SAAS;YAC/B,CAAC,CAAC,YAAY;YACd,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACrC,IAAI,EAAE,IAAI;QACV,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACnC,CACF,CAAA;IACD,OAAO;QACL,CAAC;QACD,CAAC;QACD,OAAO,EAAE,QAAQ;KAClB,CAAA;AACH,CAAC;AA0BD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,MAAM,CAAC,OAAuB;IAC5C,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,OAAO,CAAA;IACvD,OAAO,SAAS,CAAC,MAAM,CACrB,SAAS,EACT,OAAO,YAAY,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAChE,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EACvC,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CACnD,CAAA;AACH,CAAC;AAiBD,uDAAuD;AACvD,MAAM,OAAO,oBAAqB,SAAQ,MAAM,CAAC,SAAS;IAGxD,YAAY,OAAqC;QAC/C,KAAK,CACH,iDAAiD,OAAO,CAAC,IAAI,SAAS,CACvE,CAAA;QALe;;;;mBAAO,2BAA2B;WAAA;IAMpD,CAAC;CACF;AAUD,MAAM,cAAc,GAAG,KAAK,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAA"}
|
package/_esm/core/Secp256k1.js
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { secp256k1 } from '@noble/curves/secp256k1';
|
|
2
2
|
import * as Address from './Address.js';
|
|
3
3
|
import * as Bytes from './Bytes.js';
|
|
4
|
+
import * as Errors from './Errors.js';
|
|
4
5
|
import * as Hex from './Hex.js';
|
|
5
6
|
import * as Entropy from './internal/entropy.js';
|
|
7
|
+
import * as keyDerivation from './internal/keyDerivation.js';
|
|
8
|
+
import * as Mnemonic from './Mnemonic.js';
|
|
6
9
|
import * as PublicKey from './PublicKey.js';
|
|
7
10
|
/** Re-export of noble/curves secp256k1 utilities. */
|
|
8
11
|
export const noble = secp256k1;
|
|
@@ -28,6 +31,67 @@ export function createKeyPair(options = {}) {
|
|
|
28
31
|
publicKey,
|
|
29
32
|
};
|
|
30
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* Derives a valid secp256k1 private key from a BIP-39 mnemonic.
|
|
36
|
+
*
|
|
37
|
+
* This is equivalent to `Mnemonic.toPrivateKey`, and derives the
|
|
38
|
+
* private key at `m/44'/60'/0'/0/0` by default.
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```ts twoslash
|
|
42
|
+
* import { Secp256k1 } from 'ox'
|
|
43
|
+
*
|
|
44
|
+
* const privateKey = Secp256k1.fromMnemonic(
|
|
45
|
+
* 'test test test test test test test test test test test junk'
|
|
46
|
+
* )
|
|
47
|
+
* ```
|
|
48
|
+
*
|
|
49
|
+
* @param mnemonic - BIP-39 mnemonic phrase.
|
|
50
|
+
* @param options - Options.
|
|
51
|
+
* @returns A valid secp256k1 private key.
|
|
52
|
+
*/
|
|
53
|
+
export function fromMnemonic(mnemonic, options = {}) {
|
|
54
|
+
const { as = 'Hex', passphrase, path } = options;
|
|
55
|
+
return Mnemonic.toPrivateKey(mnemonic, { as, passphrase, path });
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Derives a valid secp256k1 private key from a seed.
|
|
59
|
+
*
|
|
60
|
+
* The seed must contain at least 32 bytes of cryptographically strong key
|
|
61
|
+
* material. Do not pass a password directly; use a password KDF first.
|
|
62
|
+
*
|
|
63
|
+
* The permanent derivation contract uses the seed as the HMAC-SHA256
|
|
64
|
+
* key. The HMAC message uses the `ox.secp256k1.fromSeed.v1` domain followed by
|
|
65
|
+
* a 32-bit big-endian counter starting at zero. Invalid scalars are skipped.
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* ```ts twoslash
|
|
69
|
+
* import { Secp256k1 } from 'ox'
|
|
70
|
+
*
|
|
71
|
+
* const privateKey = Secp256k1.fromSeed(
|
|
72
|
+
* '0x000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f'
|
|
73
|
+
* )
|
|
74
|
+
* ```
|
|
75
|
+
*
|
|
76
|
+
* @param seed - Seed containing at least 32 bytes of cryptographically strong key material.
|
|
77
|
+
* @param options - Options.
|
|
78
|
+
* @returns A valid secp256k1 private key.
|
|
79
|
+
*/
|
|
80
|
+
export function fromSeed(seed, options = {}) {
|
|
81
|
+
const { as = 'Hex' } = options;
|
|
82
|
+
const bytes = Bytes.from(seed);
|
|
83
|
+
if (bytes.length < 32)
|
|
84
|
+
throw new InvalidSeedSizeError({ size: bytes.length });
|
|
85
|
+
const privateKey = keyDerivation.derive(bytes, fromSeedDomain, {
|
|
86
|
+
validate: noble.utils.isValidPrivateKey,
|
|
87
|
+
});
|
|
88
|
+
if (as === 'Hex') {
|
|
89
|
+
const value = Hex.fromBytes(privateKey);
|
|
90
|
+
privateKey.fill(0);
|
|
91
|
+
return value;
|
|
92
|
+
}
|
|
93
|
+
return privateKey;
|
|
94
|
+
}
|
|
31
95
|
/**
|
|
32
96
|
* Computes the secp256k1 ECDSA public key from a provided private key.
|
|
33
97
|
*
|
|
@@ -215,4 +279,17 @@ export function verify(options) {
|
|
|
215
279
|
return Address.isEqual(options.address, recoverAddress({ payload, signature: options.signature }));
|
|
216
280
|
return secp256k1.verify(options.signature, Bytes.from(payload), PublicKey.toBytes(options.publicKey), ...(hash ? [{ prehash: true, lowS: true }] : []));
|
|
217
281
|
}
|
|
282
|
+
/** Thrown when a seed contains fewer than 32 bytes. */
|
|
283
|
+
export class InvalidSeedSizeError extends Errors.BaseError {
|
|
284
|
+
constructor(options) {
|
|
285
|
+
super(`Seed must contain at least 32 bytes. Received ${options.size} bytes.`);
|
|
286
|
+
Object.defineProperty(this, "name", {
|
|
287
|
+
enumerable: true,
|
|
288
|
+
configurable: true,
|
|
289
|
+
writable: true,
|
|
290
|
+
value: 'Secp256k1.InvalidSeedSizeError'
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
const fromSeedDomain = Bytes.fromString('ox.secp256k1.fromSeed.v1');
|
|
218
295
|
//# sourceMappingURL=Secp256k1.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Secp256k1.js","sourceRoot":"","sources":["../../core/Secp256k1.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACnD,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"Secp256k1.js","sourceRoot":"","sources":["../../core/Secp256k1.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as Bytes from '../Bytes.js';
|
|
2
|
+
import * as Hash from '../Hash.js';
|
|
3
|
+
/** @internal */
|
|
4
|
+
export function derive(seed, domain, options = {}) {
|
|
5
|
+
const { validate } = options;
|
|
6
|
+
for (let counter = 0;; counter++) {
|
|
7
|
+
const key = Hash.hmac256(seed, Bytes.concat(domain, Bytes.fromNumber(counter, { size: 4 })), { as: 'Bytes' });
|
|
8
|
+
if (!validate || validate(key))
|
|
9
|
+
return key;
|
|
10
|
+
key.fill(0);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=keyDerivation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keyDerivation.js","sourceRoot":"","sources":["../../../core/internal/keyDerivation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,aAAa,CAAA;AAEpC,OAAO,KAAK,IAAI,MAAM,YAAY,CAAA;AAElC,gBAAgB;AAChB,MAAM,UAAU,MAAM,CACpB,IAAiB,EACjB,MAAmB,EACnB,UAA0B,EAAE;IAE5B,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAA;IAC5B,KAAK,IAAI,OAAO,GAAG,CAAC,GAAI,OAAO,EAAE,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CACtB,IAAI,EACJ,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,EAC5D,EAAE,EAAE,EAAE,OAAO,EAAE,CAChB,CAAA;QACD,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,GAAG,CAAC;YAAE,OAAO,GAAG,CAAA;QAC1C,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACb,CAAC;AACH,CAAC"}
|
|
@@ -3,11 +3,11 @@ import * as Errors from '../core/Errors.js';
|
|
|
3
3
|
import * as Hash from '../core/Hash.js';
|
|
4
4
|
import * as Hex from '../core/Hex.js';
|
|
5
5
|
/** Maximum number of owners allowed in a native multisig config. */
|
|
6
|
-
export const maxOwners =
|
|
6
|
+
export const maxOwners = 48;
|
|
7
7
|
/** Maximum threshold accepted by a native multisig config. */
|
|
8
|
-
export const maxThreshold =
|
|
8
|
+
export const maxThreshold = 0xff;
|
|
9
9
|
/** Maximum number of owner approvals in a native multisig signature. */
|
|
10
|
-
export const maxSignatures =
|
|
10
|
+
export const maxSignatures = 8;
|
|
11
11
|
/**
|
|
12
12
|
* Maximum number of native multisig signatures in one nested authorization
|
|
13
13
|
* path, including the top-level transaction signature.
|
|
@@ -29,7 +29,8 @@ const signatureDomain = 'tempo:multisig:signature';
|
|
|
29
29
|
* Mirrors the Tempo `InitMultisig::validate` rules: owners non-empty and
|
|
30
30
|
* `<= maxOwners`, strictly ascending unique nonzero owner addresses, nonzero
|
|
31
31
|
* integer owner weights, integer `threshold` between `1` and `maxThreshold`,
|
|
32
|
-
* total weight `<= 255` (u8 max), and
|
|
32
|
+
* total weight `<= 255` (u8 max), and a threshold reachable by at most
|
|
33
|
+
* `maxSignatures` owners.
|
|
33
34
|
*
|
|
34
35
|
* @example
|
|
35
36
|
* ```ts twoslash
|
|
@@ -60,6 +61,7 @@ export function assert(config) {
|
|
|
60
61
|
if (Number(threshold) > maxThreshold)
|
|
61
62
|
throw new InvalidConfigError({ reason: 'threshold exceeds max threshold' });
|
|
62
63
|
let totalWeight = 0;
|
|
64
|
+
const weights = [];
|
|
63
65
|
let previous;
|
|
64
66
|
for (const owner of owners) {
|
|
65
67
|
if (!Address.validate(owner.owner) || Hex.toBigInt(owner.owner) === 0n)
|
|
@@ -76,7 +78,9 @@ export function assert(config) {
|
|
|
76
78
|
reason: 'owners must be strictly ascending',
|
|
77
79
|
});
|
|
78
80
|
previous = current;
|
|
79
|
-
|
|
81
|
+
const weight = Number(owner.weight);
|
|
82
|
+
totalWeight += weight;
|
|
83
|
+
weights.push(weight);
|
|
80
84
|
}
|
|
81
85
|
if (totalWeight > 0xff)
|
|
82
86
|
throw new InvalidConfigError({
|
|
@@ -86,6 +90,14 @@ export function assert(config) {
|
|
|
86
90
|
throw new InvalidConfigError({
|
|
87
91
|
reason: 'threshold exceeds total owner weight',
|
|
88
92
|
});
|
|
93
|
+
const reachableWeight = weights
|
|
94
|
+
.sort((a, b) => b - a)
|
|
95
|
+
.slice(0, maxSignatures)
|
|
96
|
+
.reduce((sum, weight) => sum + weight, 0);
|
|
97
|
+
if (Number(threshold) > reachableWeight)
|
|
98
|
+
throw new InvalidConfigError({
|
|
99
|
+
reason: `threshold exceeds weight reachable by ${maxSignatures} owner signatures`,
|
|
100
|
+
});
|
|
89
101
|
}
|
|
90
102
|
/**
|
|
91
103
|
* Normalizes a native multisig {@link ox#MultisigConfig.Config}.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MultisigConfig.js","sourceRoot":"","sources":["../../tempo/MultisigConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAA;AAE7C,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAC3C,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAA;AACvC,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAA;AAGrC,oEAAoE;AACpE,MAAM,CAAC,MAAM,SAAS,GAAG,EAAE,CAAA;AAE3B,8DAA8D;AAC9D,MAAM,CAAC,MAAM,YAAY,GAAG,
|
|
1
|
+
{"version":3,"file":"MultisigConfig.js","sourceRoot":"","sources":["../../tempo/MultisigConfig.ts"],"names":[],"mappings":"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"}
|
package/_esm/version.js
CHANGED
package/_types/core/AesGcm.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as Bytes from './Bytes.js';
|
|
2
|
-
import
|
|
2
|
+
import * as Errors from './Errors.js';
|
|
3
3
|
import * as Hex from './Hex.js';
|
|
4
4
|
export declare const ivLength = 16;
|
|
5
5
|
/**
|
|
@@ -60,6 +60,59 @@ export declare namespace encrypt {
|
|
|
60
60
|
type ReturnType<as extends 'Bytes' | 'Hex' = 'Bytes' | 'Hex'> = (as extends 'Bytes' ? Bytes.Bytes : never) | (as extends 'Hex' ? Hex.Hex : never);
|
|
61
61
|
type ErrorType = Bytes.concat.ErrorType | Bytes.from.ErrorType | Bytes.random.ErrorType | Hex.from.ErrorType | Errors.GlobalErrorType;
|
|
62
62
|
}
|
|
63
|
+
/**
|
|
64
|
+
* Derives an AES-256-GCM key from a BIP-39 mnemonic.
|
|
65
|
+
*
|
|
66
|
+
* This is equivalent to passing `Mnemonic.toSeed(mnemonic, { passphrase })`
|
|
67
|
+
* to `AesGcm.fromSeed`.
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```ts twoslash
|
|
71
|
+
* import { AesGcm } from 'ox'
|
|
72
|
+
*
|
|
73
|
+
* const key = await AesGcm.fromMnemonic(
|
|
74
|
+
* 'test test test test test test test test test test test junk'
|
|
75
|
+
* )
|
|
76
|
+
* ```
|
|
77
|
+
*
|
|
78
|
+
* @param mnemonic - BIP-39 mnemonic phrase.
|
|
79
|
+
* @param options - Options.
|
|
80
|
+
* @returns A nonextractable AES-256-GCM key for encryption and decryption.
|
|
81
|
+
*/
|
|
82
|
+
export declare function fromMnemonic(mnemonic: string, options?: fromMnemonic.Options): Promise<CryptoKey>;
|
|
83
|
+
export declare namespace fromMnemonic {
|
|
84
|
+
type Options = {
|
|
85
|
+
/** Optional BIP-39 passphrase. */
|
|
86
|
+
passphrase?: string | undefined;
|
|
87
|
+
};
|
|
88
|
+
type ErrorType = fromSeed.ErrorType;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Derives an AES-256-GCM key from a seed.
|
|
92
|
+
*
|
|
93
|
+
* The seed must contain at least 32 bytes of cryptographically strong key
|
|
94
|
+
* material. Do not pass a password directly; use a password KDF first.
|
|
95
|
+
*
|
|
96
|
+
* The permanent derivation contract uses the seed as the HMAC-SHA256
|
|
97
|
+
* key. The HMAC message uses the `ox.aesGcm.fromSeed.v1` domain followed by a
|
|
98
|
+
* 32-bit big-endian counter set to zero.
|
|
99
|
+
*
|
|
100
|
+
* @example
|
|
101
|
+
* ```ts twoslash
|
|
102
|
+
* import { AesGcm } from 'ox'
|
|
103
|
+
*
|
|
104
|
+
* const key = await AesGcm.fromSeed(
|
|
105
|
+
* '0x000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f'
|
|
106
|
+
* )
|
|
107
|
+
* ```
|
|
108
|
+
*
|
|
109
|
+
* @param seed - Seed containing at least 32 bytes of cryptographically strong key material.
|
|
110
|
+
* @returns A nonextractable AES-256-GCM key for encryption and decryption.
|
|
111
|
+
*/
|
|
112
|
+
export declare function fromSeed(seed: Hex.Hex | Bytes.Bytes): Promise<CryptoKey>;
|
|
113
|
+
export declare namespace fromSeed {
|
|
114
|
+
type ErrorType = Bytes.concat.ErrorType | Bytes.from.ErrorType | Bytes.fromNumber.ErrorType | InvalidSeedSizeError | Errors.GlobalErrorType;
|
|
115
|
+
}
|
|
63
116
|
/**
|
|
64
117
|
* Derives an AES-GCM key from a password using PBKDF2.
|
|
65
118
|
*
|
|
@@ -104,4 +157,16 @@ export declare function randomSalt(size?: number): Bytes.Bytes;
|
|
|
104
157
|
export declare namespace randomSalt {
|
|
105
158
|
type ErrorType = Bytes.random.ErrorType | Errors.GlobalErrorType;
|
|
106
159
|
}
|
|
160
|
+
/** Thrown when a seed contains fewer than 32 bytes. */
|
|
161
|
+
export declare class InvalidSeedSizeError extends Errors.BaseError {
|
|
162
|
+
readonly name = "AesGcm.InvalidSeedSizeError";
|
|
163
|
+
constructor(options: InvalidSeedSizeError.Options);
|
|
164
|
+
}
|
|
165
|
+
export declare namespace InvalidSeedSizeError {
|
|
166
|
+
/** Options for `AesGcm.InvalidSeedSizeError`. */
|
|
167
|
+
type Options = {
|
|
168
|
+
/** Received seed size. */
|
|
169
|
+
size: number;
|
|
170
|
+
};
|
|
171
|
+
}
|
|
107
172
|
//# sourceMappingURL=AesGcm.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AesGcm.d.ts","sourceRoot":"","sources":["../../core/AesGcm.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"AesGcm.d.ts","sourceRoot":"","sources":["../../core/AesGcm.ts"],"names":[],"mappings":"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"}
|