ox 1.6.3 → 1.7.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.
Files changed (43) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/core/AesGcm.d.ts +67 -2
  3. package/dist/core/AesGcm.d.ts.map +1 -1
  4. package/dist/core/AesGcm.js +79 -10
  5. package/dist/core/AesGcm.js.map +1 -1
  6. package/dist/core/Ed25519.d.ts +83 -2
  7. package/dist/core/Ed25519.d.ts.map +1 -1
  8. package/dist/core/Ed25519.js +79 -4
  9. package/dist/core/Ed25519.js.map +1 -1
  10. package/dist/core/MlDsa44.d.ts +84 -5
  11. package/dist/core/MlDsa44.d.ts.map +1 -1
  12. package/dist/core/MlDsa44.js +79 -4
  13. package/dist/core/MlDsa44.js.map +1 -1
  14. package/dist/core/P256.d.ts +82 -1
  15. package/dist/core/P256.d.ts.map +1 -1
  16. package/dist/core/P256.js +78 -0
  17. package/dist/core/P256.js.map +1 -1
  18. package/dist/core/Secp256k1.d.ts +85 -1
  19. package/dist/core/Secp256k1.d.ts.map +1 -1
  20. package/dist/core/Secp256k1.js +74 -3
  21. package/dist/core/Secp256k1.js.map +1 -1
  22. package/dist/core/internal/keyDerivation.d.ts +13 -0
  23. package/dist/core/internal/keyDerivation.d.ts.map +1 -0
  24. package/dist/core/internal/keyDerivation.js +13 -0
  25. package/dist/core/internal/keyDerivation.js.map +1 -0
  26. package/package.json +1 -1
  27. package/src/core/AesGcm.ts +137 -30
  28. package/src/core/Ed25519.ts +135 -4
  29. package/src/core/MlDsa44.ts +135 -4
  30. package/src/core/P256.ts +135 -1
  31. package/src/core/Secp256k1.ts +134 -3
  32. package/src/core/_test/AesGcm.test-d.ts +19 -0
  33. package/src/core/_test/AesGcm.test.ts +90 -1
  34. package/src/core/_test/Ed25519.test-d.ts +24 -0
  35. package/src/core/_test/Ed25519.test.ts +87 -1
  36. package/src/core/_test/MlDsa44.test-d.ts +24 -0
  37. package/src/core/_test/MlDsa44.test.ts +69 -1
  38. package/src/core/_test/P256.test-d.ts +26 -0
  39. package/src/core/_test/P256.test.ts +98 -1
  40. package/src/core/_test/Secp256k1.test-d.ts +27 -0
  41. package/src/core/_test/Secp256k1.test.ts +112 -1
  42. package/src/core/internal/keyDerivation.ts +34 -0
  43. package/src/version.ts +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # ox
2
2
 
3
+ ## 1.7.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#394](https://github.com/wevm/ox/pull/394) [`06021e1`](https://github.com/wevm/ox/commit/06021e18ade1d85163d8bfcc0ae6e848256da30d) Thanks [@jxom](https://github.com/jxom)! - Added seed and BIP-39 mnemonic key derivation for P256, Secp256k1, Ed25519, ML-DSA-44, and AES-GCM, with domain separation for non-HD derivations.
8
+
3
9
  ## 1.6.3
4
10
 
5
11
  ### Patch Changes
@@ -64,8 +64,8 @@ export declare namespace encrypt {
64
64
  * Derives an AES-256-GCM key from a 32-byte WebAuthn PRF output.
65
65
  *
66
66
  * The permanent derivation contract uses the PRF output as the HMAC-SHA256
67
- * key. Its message is the UTF-8 bytes of `ox.aesGcm.fromPrf.v1` followed by
68
- * a 32-bit big-endian counter set to zero.
67
+ * key. The HMAC message uses the `ox.aesGcm.fromPrf.v1` domain followed by a
68
+ * 32-bit big-endian counter set to zero.
69
69
  *
70
70
  * @example
71
71
  * ```ts twoslash
@@ -83,6 +83,59 @@ export declare function fromPrf(value: Hex.Hex | Bytes.Bytes): Promise<CryptoKey
83
83
  export declare namespace fromPrf {
84
84
  type ErrorType = Bytes.concat.ErrorType | Bytes.from.ErrorType | Bytes.fromNumber.ErrorType | InvalidPrfSizeError | Errors.GlobalErrorType;
85
85
  }
86
+ /**
87
+ * Derives an AES-256-GCM key from a BIP-39 mnemonic.
88
+ *
89
+ * This is equivalent to passing `Mnemonic.toSeed(mnemonic, { passphrase })`
90
+ * to {@link ox#AesGcm.fromSeed}.
91
+ *
92
+ * @example
93
+ * ```ts twoslash
94
+ * import { AesGcm } from 'ox'
95
+ *
96
+ * const key = await AesGcm.fromMnemonic(
97
+ * 'test test test test test test test test test test test junk'
98
+ * )
99
+ * ```
100
+ *
101
+ * @param mnemonic - BIP-39 mnemonic phrase.
102
+ * @param options - Options.
103
+ * @returns A nonextractable AES-256-GCM key for encryption and decryption.
104
+ */
105
+ export declare function fromMnemonic(mnemonic: string, options?: fromMnemonic.Options): Promise<CryptoKey>;
106
+ export declare namespace fromMnemonic {
107
+ type Options = {
108
+ /** Optional BIP-39 passphrase. */
109
+ passphrase?: string | undefined;
110
+ };
111
+ type ErrorType = fromSeed.ErrorType;
112
+ }
113
+ /**
114
+ * Derives an AES-256-GCM key from a seed.
115
+ *
116
+ * The seed must contain at least 32 bytes of cryptographically strong key
117
+ * material. Do not pass a password directly; use a password KDF first.
118
+ *
119
+ * The permanent derivation contract uses the seed as the HMAC-SHA256
120
+ * key. The HMAC message uses the `ox.aesGcm.fromSeed.v1` domain followed by a
121
+ * 32-bit big-endian counter set to zero.
122
+ *
123
+ * @example
124
+ * ```ts twoslash
125
+ * import { AesGcm } from 'ox'
126
+ *
127
+ * const key = await AesGcm.fromSeed(
128
+ * '0x000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f'
129
+ * )
130
+ * ```
131
+ *
132
+ * @param seed - Seed containing at least 32 bytes of cryptographically strong key material.
133
+ * @returns A nonextractable AES-256-GCM key for encryption and decryption.
134
+ */
135
+ export declare function fromSeed(seed: Hex.Hex | Bytes.Bytes): Promise<CryptoKey>;
136
+ export declare namespace fromSeed {
137
+ type ErrorType = Bytes.concat.ErrorType | Bytes.from.ErrorType | Bytes.fromNumber.ErrorType | InvalidSeedSizeError | Errors.GlobalErrorType;
138
+ }
86
139
  /**
87
140
  * Derives an AES-GCM key from a password using PBKDF2.
88
141
  *
@@ -139,4 +192,16 @@ export declare namespace InvalidPrfSizeError {
139
192
  size: number;
140
193
  };
141
194
  }
195
+ /** Thrown when a seed contains fewer than 32 bytes. */
196
+ export declare class InvalidSeedSizeError extends Errors.BaseError {
197
+ readonly name = "AesGcm.InvalidSeedSizeError";
198
+ constructor(options: InvalidSeedSizeError.Options);
199
+ }
200
+ export declare namespace InvalidSeedSizeError {
201
+ /** Options for {@link ox#AesGcm.InvalidSeedSizeError}. */
202
+ type Options = {
203
+ /** Received seed size. */
204
+ size: number;
205
+ };
206
+ }
142
207
  //# sourceMappingURL=AesGcm.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AesGcm.d.ts","sourceRoot":"","sources":["../../src/core/AesGcm.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AesGcm.d.ts","sourceRoot":"","sources":["../../src/core/AesGcm.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import * as Bytes from './Bytes.js';
2
2
  import * as Errors from './Errors.js';
3
3
  import * as Hex from './Hex.js';
4
+ import * as mnemonic_ from './internal/mnemonic.js';
4
5
  export const ivLength = 16;
5
6
  /**
6
7
  * Decrypts encrypted data using AES-GCM.
@@ -76,8 +77,8 @@ export async function encrypt(value, key, options = {}) {
76
77
  * Derives an AES-256-GCM key from a 32-byte WebAuthn PRF output.
77
78
  *
78
79
  * The permanent derivation contract uses the PRF output as the HMAC-SHA256
79
- * key. Its message is the UTF-8 bytes of `ox.aesGcm.fromPrf.v1` followed by
80
- * a 32-bit big-endian counter set to zero.
80
+ * key. The HMAC message uses the `ox.aesGcm.fromPrf.v1` domain followed by a
81
+ * 32-bit big-endian counter set to zero.
81
82
  *
82
83
  * @example
83
84
  * ```ts twoslash
@@ -95,18 +96,65 @@ export async function fromPrf(value) {
95
96
  const bytes = Bytes.from(value);
96
97
  if (bytes.length !== 32)
97
98
  throw new InvalidPrfSizeError({ size: bytes.length });
98
- const prfKey = await globalThis.crypto.subtle.importKey('raw', bytes, {
99
- name: 'HMAC',
100
- hash: 'SHA-256',
101
- }, false, ['sign']);
102
- const key = new Uint8Array(await globalThis.crypto.subtle.sign('HMAC', prfKey, Bytes.concat(fromPrfLabel, Bytes.fromNumber(0, { size: 4 }))));
99
+ return deriveKey(bytes, fromPrfDomain);
100
+ }
101
+ /**
102
+ * Derives an AES-256-GCM key from a BIP-39 mnemonic.
103
+ *
104
+ * This is equivalent to passing `Mnemonic.toSeed(mnemonic, { passphrase })`
105
+ * to {@link ox#AesGcm.fromSeed}.
106
+ *
107
+ * @example
108
+ * ```ts twoslash
109
+ * import { AesGcm } from 'ox'
110
+ *
111
+ * const key = await AesGcm.fromMnemonic(
112
+ * 'test test test test test test test test test test test junk'
113
+ * )
114
+ * ```
115
+ *
116
+ * @param mnemonic - BIP-39 mnemonic phrase.
117
+ * @param options - Options.
118
+ * @returns A nonextractable AES-256-GCM key for encryption and decryption.
119
+ */
120
+ export async function fromMnemonic(mnemonic, options = {}) {
121
+ const { passphrase } = options;
122
+ const seed = mnemonic_.toSeed(mnemonic, passphrase);
103
123
  try {
104
- return await globalThis.crypto.subtle.importKey('raw', key, { name: 'AES-GCM' }, false, ['encrypt', 'decrypt']);
124
+ return await fromSeed(seed);
105
125
  }
106
126
  finally {
107
- key.fill(0);
127
+ seed.fill(0);
108
128
  }
109
129
  }
130
+ /**
131
+ * Derives an AES-256-GCM key from a seed.
132
+ *
133
+ * The seed must contain at least 32 bytes of cryptographically strong key
134
+ * material. Do not pass a password directly; use a password KDF first.
135
+ *
136
+ * The permanent derivation contract uses the seed as the HMAC-SHA256
137
+ * key. The HMAC message uses the `ox.aesGcm.fromSeed.v1` domain followed by a
138
+ * 32-bit big-endian counter set to zero.
139
+ *
140
+ * @example
141
+ * ```ts twoslash
142
+ * import { AesGcm } from 'ox'
143
+ *
144
+ * const key = await AesGcm.fromSeed(
145
+ * '0x000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f'
146
+ * )
147
+ * ```
148
+ *
149
+ * @param seed - Seed containing at least 32 bytes of cryptographically strong key material.
150
+ * @returns A nonextractable AES-256-GCM key for encryption and decryption.
151
+ */
152
+ export async function fromSeed(seed) {
153
+ const bytes = Bytes.from(seed);
154
+ if (bytes.length < 32)
155
+ throw new InvalidSeedSizeError({ size: bytes.length });
156
+ return deriveKey(bytes, fromSeedDomain);
157
+ }
110
158
  /**
111
159
  * Derives an AES-GCM key from a password using PBKDF2.
112
160
  *
@@ -156,5 +204,26 @@ export class InvalidPrfSizeError extends Errors.BaseError {
156
204
  super(`PRF output must be exactly 32 bytes. Received ${options.size} bytes.`);
157
205
  }
158
206
  }
159
- const fromPrfLabel = Bytes.fromString('ox.aesGcm.fromPrf.v1');
207
+ /** Thrown when a seed contains fewer than 32 bytes. */
208
+ export class InvalidSeedSizeError extends Errors.BaseError {
209
+ name = 'AesGcm.InvalidSeedSizeError';
210
+ constructor(options) {
211
+ super(`Seed must contain at least 32 bytes. Received ${options.size} bytes.`);
212
+ }
213
+ }
214
+ async function deriveKey(seed, domain) {
215
+ const baseKey = await globalThis.crypto.subtle.importKey('raw', seed, {
216
+ name: 'HMAC',
217
+ hash: 'SHA-256',
218
+ }, false, ['sign']);
219
+ const key = new Uint8Array(await globalThis.crypto.subtle.sign('HMAC', baseKey, Bytes.concat(domain, Bytes.fromNumber(0, { size: 4 }))));
220
+ try {
221
+ return await globalThis.crypto.subtle.importKey('raw', key, { name: 'AES-GCM' }, false, ['encrypt', 'decrypt']);
222
+ }
223
+ finally {
224
+ key.fill(0);
225
+ }
226
+ }
227
+ const fromPrfDomain = Bytes.fromString('ox.aesGcm.fromPrf.v1');
228
+ const fromSeedDomain = Bytes.fromString('ox.aesGcm.fromSeed.v1');
160
229
  //# sourceMappingURL=AesGcm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AesGcm.js","sourceRoot":"","sources":["../../src/core/AesGcm.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AesGcm.js","sourceRoot":"","sources":["../../src/core/AesGcm.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import * as Bytes from './Bytes.js';
2
2
  import * as Errors from './Errors.js';
3
3
  import * as Hash from './Hash.js';
4
4
  import * as Hex from './Hex.js';
5
+ import * as keyDerivation from './internal/keyDerivation.js';
5
6
  /** Re-export of noble/curves Ed25519 utilities. */
6
7
  export declare const noble: import("@noble/curves/abstract/edwards.js").EdDSA;
7
8
  /**
@@ -36,8 +37,8 @@ export declare namespace createKeyPair {
36
37
  * Derives an Ed25519 private key from a 32-byte WebAuthn PRF output.
37
38
  *
38
39
  * The permanent derivation contract uses the PRF output as the HMAC-SHA256
39
- * key. Its message is the UTF-8 bytes of `ox.ed25519.fromPrf.v1` followed by
40
- * a 32-bit big-endian counter set to zero.
40
+ * key. The HMAC message uses the `ox.ed25519.fromPrf.v1` domain followed by a
41
+ * 32-bit big-endian counter set to zero.
41
42
  *
42
43
  * @example
43
44
  * ```ts twoslash
@@ -64,6 +65,74 @@ export declare namespace fromPrf {
64
65
  type ReturnType<as extends 'Hex' | 'Bytes'> = (as extends 'Bytes' ? Bytes.Bytes : never) | (as extends 'Hex' ? Hex.Hex : never);
65
66
  type ErrorType = Bytes.concat.ErrorType | Bytes.from.ErrorType | Bytes.fromNumber.ErrorType | Hash.hmac256.ErrorType | Hex.fromBytes.ErrorType | InvalidPrfSizeError | Errors.GlobalErrorType;
66
67
  }
68
+ /**
69
+ * Derives an Ed25519 private key from a BIP-39 mnemonic.
70
+ *
71
+ * This is equivalent to passing `Mnemonic.toSeed(mnemonic, { passphrase })`
72
+ * to {@link ox#Ed25519.fromSeed}.
73
+ *
74
+ * @example
75
+ * ```ts twoslash
76
+ * import { Ed25519 } from 'ox'
77
+ *
78
+ * const privateKey = Ed25519.fromMnemonic(
79
+ * 'test test test test test test test test test test test junk'
80
+ * )
81
+ * ```
82
+ *
83
+ * @param mnemonic - BIP-39 mnemonic phrase.
84
+ * @param options - Options.
85
+ * @returns An Ed25519 private key.
86
+ */
87
+ export declare function fromMnemonic<as extends 'Hex' | 'Bytes' = 'Hex'>(mnemonic: string, options?: fromMnemonic.Options<as>): fromMnemonic.ReturnType<as>;
88
+ export declare namespace fromMnemonic {
89
+ type Options<as extends 'Hex' | 'Bytes' = 'Hex'> = {
90
+ /**
91
+ * Format of the returned private key.
92
+ * @default 'Hex'
93
+ */
94
+ as?: as | 'Hex' | 'Bytes' | undefined;
95
+ /** Optional BIP-39 passphrase. */
96
+ passphrase?: string | undefined;
97
+ };
98
+ type ReturnType<as extends 'Hex' | 'Bytes'> = fromSeed.ReturnType<as>;
99
+ type ErrorType = fromSeed.ErrorType;
100
+ }
101
+ /**
102
+ * Derives an Ed25519 private key from a seed.
103
+ *
104
+ * The seed must contain at least 32 bytes of cryptographically strong key
105
+ * material. Do not pass a password directly; use a password KDF first.
106
+ *
107
+ * The permanent derivation contract uses the seed as the HMAC-SHA256
108
+ * key. The HMAC message uses the `ox.ed25519.fromSeed.v1` domain followed by a
109
+ * 32-bit big-endian counter set to zero.
110
+ *
111
+ * @example
112
+ * ```ts twoslash
113
+ * import { Ed25519 } from 'ox'
114
+ *
115
+ * const privateKey = Ed25519.fromSeed(
116
+ * '0x000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f'
117
+ * )
118
+ * ```
119
+ *
120
+ * @param seed - Seed containing at least 32 bytes of cryptographically strong key material.
121
+ * @param options - Options.
122
+ * @returns An Ed25519 private key.
123
+ */
124
+ export declare function fromSeed<as extends 'Hex' | 'Bytes' = 'Hex'>(seed: Hex.Hex | Bytes.Bytes, options?: fromSeed.Options<as>): fromSeed.ReturnType<as>;
125
+ export declare namespace fromSeed {
126
+ type Options<as extends 'Hex' | 'Bytes' = 'Hex'> = {
127
+ /**
128
+ * Format of the returned private key.
129
+ * @default 'Hex'
130
+ */
131
+ as?: as | 'Hex' | 'Bytes' | undefined;
132
+ };
133
+ type ReturnType<as extends 'Hex' | 'Bytes'> = (as extends 'Bytes' ? Bytes.Bytes : never) | (as extends 'Hex' ? Hex.Hex : never);
134
+ type ErrorType = Bytes.from.ErrorType | Hex.fromBytes.ErrorType | keyDerivation.derive.ErrorType | InvalidSeedSizeError | Errors.GlobalErrorType;
135
+ }
67
136
  /**
68
137
  * Computes the Ed25519 public key from a provided private key.
69
138
  *
@@ -273,4 +342,16 @@ export declare namespace InvalidPrfSizeError {
273
342
  size: number;
274
343
  };
275
344
  }
345
+ /** Thrown when a seed contains fewer than 32 bytes. */
346
+ export declare class InvalidSeedSizeError extends Errors.BaseError {
347
+ readonly name = "Ed25519.InvalidSeedSizeError";
348
+ constructor(options: InvalidSeedSizeError.Options);
349
+ }
350
+ export declare namespace InvalidSeedSizeError {
351
+ /** Options for {@link ox#Ed25519.InvalidSeedSizeError}. */
352
+ type Options = {
353
+ /** Received seed size. */
354
+ size: number;
355
+ };
356
+ }
276
357
  //# sourceMappingURL=Ed25519.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Ed25519.d.ts","sourceRoot":"","sources":["../../src/core/Ed25519.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Ed25519.d.ts","sourceRoot":"","sources":["../../src/core/Ed25519.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,8 @@ import * as Errors from './Errors.js';
4
4
  import * as Hash from './Hash.js';
5
5
  import * as Hex from './Hex.js';
6
6
  import * as engine from './internal/ed25519.js';
7
+ import * as keyDerivation from './internal/keyDerivation.js';
8
+ import * as mnemonic_ from './internal/mnemonic.js';
7
9
  /** Re-export of noble/curves Ed25519 utilities. */
8
10
  export const noble = ed25519;
9
11
  /**
@@ -32,8 +34,8 @@ export function createKeyPair(options = {}) {
32
34
  * Derives an Ed25519 private key from a 32-byte WebAuthn PRF output.
33
35
  *
34
36
  * The permanent derivation contract uses the PRF output as the HMAC-SHA256
35
- * key. Its message is the UTF-8 bytes of `ox.ed25519.fromPrf.v1` followed by
36
- * a 32-bit big-endian counter set to zero.
37
+ * key. The HMAC message uses the `ox.ed25519.fromPrf.v1` domain followed by a
38
+ * 32-bit big-endian counter set to zero.
37
39
  *
38
40
  * @example
39
41
  * ```ts twoslash
@@ -53,7 +55,72 @@ export function fromPrf(value, options = {}) {
53
55
  const bytes = Bytes.from(value);
54
56
  if (bytes.length !== 32)
55
57
  throw new InvalidPrfSizeError({ size: bytes.length });
56
- const privateKey = Hash.hmac256(bytes, Bytes.concat(fromPrfLabel, Bytes.fromNumber(0, { size: 4 })), { as: 'Bytes' });
58
+ const privateKey = Hash.hmac256(bytes, Bytes.concat(fromPrfDomain, Bytes.fromNumber(0, { size: 4 })), { as: 'Bytes' });
59
+ if (as === 'Hex') {
60
+ const value = Hex.fromBytes(privateKey);
61
+ privateKey.fill(0);
62
+ return value;
63
+ }
64
+ return privateKey;
65
+ }
66
+ /**
67
+ * Derives an Ed25519 private key from a BIP-39 mnemonic.
68
+ *
69
+ * This is equivalent to passing `Mnemonic.toSeed(mnemonic, { passphrase })`
70
+ * to {@link ox#Ed25519.fromSeed}.
71
+ *
72
+ * @example
73
+ * ```ts twoslash
74
+ * import { Ed25519 } from 'ox'
75
+ *
76
+ * const privateKey = Ed25519.fromMnemonic(
77
+ * 'test test test test test test test test test test test junk'
78
+ * )
79
+ * ```
80
+ *
81
+ * @param mnemonic - BIP-39 mnemonic phrase.
82
+ * @param options - Options.
83
+ * @returns An Ed25519 private key.
84
+ */
85
+ export function fromMnemonic(mnemonic, options = {}) {
86
+ const { passphrase } = options;
87
+ const seed = mnemonic_.toSeed(mnemonic, passphrase);
88
+ try {
89
+ return fromSeed(seed, options);
90
+ }
91
+ finally {
92
+ seed.fill(0);
93
+ }
94
+ }
95
+ /**
96
+ * Derives an Ed25519 private key from a seed.
97
+ *
98
+ * The seed must contain at least 32 bytes of cryptographically strong key
99
+ * material. Do not pass a password directly; use a password KDF first.
100
+ *
101
+ * The permanent derivation contract uses the seed as the HMAC-SHA256
102
+ * key. The HMAC message uses the `ox.ed25519.fromSeed.v1` domain followed by a
103
+ * 32-bit big-endian counter set to zero.
104
+ *
105
+ * @example
106
+ * ```ts twoslash
107
+ * import { Ed25519 } from 'ox'
108
+ *
109
+ * const privateKey = Ed25519.fromSeed(
110
+ * '0x000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f'
111
+ * )
112
+ * ```
113
+ *
114
+ * @param seed - Seed containing at least 32 bytes of cryptographically strong key material.
115
+ * @param options - Options.
116
+ * @returns An Ed25519 private key.
117
+ */
118
+ export function fromSeed(seed, options = {}) {
119
+ const { as = 'Hex' } = options;
120
+ const bytes = Bytes.from(seed);
121
+ if (bytes.length < 32)
122
+ throw new InvalidSeedSizeError({ size: bytes.length });
123
+ const privateKey = keyDerivation.derive(bytes, fromSeedDomain);
57
124
  if (as === 'Hex') {
58
125
  const value = Hex.fromBytes(privateKey);
59
126
  privateKey.fill(0);
@@ -224,5 +291,13 @@ export class InvalidPrfSizeError extends Errors.BaseError {
224
291
  super(`PRF output must be exactly 32 bytes. Received ${options.size} bytes.`);
225
292
  }
226
293
  }
227
- const fromPrfLabel = Bytes.fromString('ox.ed25519.fromPrf.v1');
294
+ /** Thrown when a seed contains fewer than 32 bytes. */
295
+ export class InvalidSeedSizeError extends Errors.BaseError {
296
+ name = 'Ed25519.InvalidSeedSizeError';
297
+ constructor(options) {
298
+ super(`Seed must contain at least 32 bytes. Received ${options.size} bytes.`);
299
+ }
300
+ }
301
+ const fromPrfDomain = Bytes.fromString('ox.ed25519.fromPrf.v1');
302
+ const fromSeedDomain = Bytes.fromString('ox.ed25519.fromSeed.v1');
228
303
  //# sourceMappingURL=Ed25519.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Ed25519.js","sourceRoot":"","sources":["../../src/core/Ed25519.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Ed25519.js","sourceRoot":"","sources":["../../src/core/Ed25519.ts"],"names":[],"mappings":"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"}
@@ -2,15 +2,14 @@ import * as Bytes from './Bytes.js';
2
2
  import * as Errors from './Errors.js';
3
3
  import * as Hash from './Hash.js';
4
4
  import * as Hex from './Hex.js';
5
+ import * as keyDerivation from './internal/keyDerivation.js';
5
6
  /** Re-export of noble/post-quantum ML-DSA-44 utilities. */
6
7
  export declare const noble: import("@noble/post-quantum/utils.js").CryptoKeys & {
7
8
  lengths: {
8
9
  signRand?: number;
9
10
  signature?: number;
10
11
  };
11
- sign: (msg: import("@noble/post-quantum/utils.js").TArg<Uint8Array>, secretKey: import("@noble/post-quantum/utils.js").TArg<Uint8Array>, opts
12
- /** Thrown when a context string exceeds the 255-byte FIPS 204 limit. */
13
- ?: import("@noble/post-quantum/utils.js").TArg<import("@noble/post-quantum/utils.js").SigOpts>) => import("@noble/post-quantum/utils.js").TRet<Uint8Array>;
12
+ sign: (msg: import("@noble/post-quantum/utils.js").TArg<Uint8Array>, secretKey: import("@noble/post-quantum/utils.js").TArg<Uint8Array>, opts?: import("@noble/post-quantum/utils.js").TArg<import("@noble/post-quantum/utils.js").SigOpts>) => import("@noble/post-quantum/utils.js").TRet<Uint8Array>;
14
13
  verify: (sig: import("@noble/post-quantum/utils.js").TArg<Uint8Array>, msg: import("@noble/post-quantum/utils.js").TArg<Uint8Array>, publicKey: import("@noble/post-quantum/utils.js").TArg<Uint8Array>, opts?: import("@noble/post-quantum/utils.js").TArg<import("@noble/post-quantum/utils.js").VerOpts>) => boolean;
15
14
  } & {
16
15
  internal: import("@noble/post-quantum/utils.js").TRet<import("@noble/post-quantum/ml-dsa.js").DSAInternal>;
@@ -183,8 +182,8 @@ export declare namespace createKeyPair {
183
182
  * Derives an ML-DSA-44 private key from a 32-byte WebAuthn PRF output.
184
183
  *
185
184
  * The permanent derivation contract uses the PRF output as the HMAC-SHA256
186
- * key. Its message is the UTF-8 bytes of `ox.mldsa44.fromPrf.v1` followed by
187
- * a 32-bit big-endian counter set to zero.
185
+ * key. The HMAC message uses the `ox.mldsa44.fromPrf.v1` domain followed by a
186
+ * 32-bit big-endian counter set to zero.
188
187
  *
189
188
  * @example
190
189
  * ```ts twoslash
@@ -211,6 +210,74 @@ export declare namespace fromPrf {
211
210
  type ReturnType<as extends 'Hex' | 'Bytes'> = (as extends 'Bytes' ? Bytes.Bytes : never) | (as extends 'Hex' ? Hex.Hex : never);
212
211
  type ErrorType = Bytes.concat.ErrorType | Bytes.from.ErrorType | Bytes.fromNumber.ErrorType | Hash.hmac256.ErrorType | Hex.fromBytes.ErrorType | InvalidPrfSizeError | Errors.GlobalErrorType;
213
212
  }
213
+ /**
214
+ * Derives an ML-DSA-44 private key from a BIP-39 mnemonic.
215
+ *
216
+ * This is equivalent to passing `Mnemonic.toSeed(mnemonic, { passphrase })`
217
+ * to {@link ox#MlDsa44.fromSeed}.
218
+ *
219
+ * @example
220
+ * ```ts twoslash
221
+ * import { MlDsa44 } from 'ox'
222
+ *
223
+ * const privateKey = MlDsa44.fromMnemonic(
224
+ * 'test test test test test test test test test test test junk'
225
+ * )
226
+ * ```
227
+ *
228
+ * @param mnemonic - BIP-39 mnemonic phrase.
229
+ * @param options - Options.
230
+ * @returns An ML-DSA-44 private key (32-byte seed).
231
+ */
232
+ export declare function fromMnemonic<as extends 'Hex' | 'Bytes' = 'Hex'>(mnemonic: string, options?: fromMnemonic.Options<as>): fromMnemonic.ReturnType<as>;
233
+ export declare namespace fromMnemonic {
234
+ type Options<as extends 'Hex' | 'Bytes' = 'Hex'> = {
235
+ /**
236
+ * Format of the returned private key.
237
+ * @default 'Hex'
238
+ */
239
+ as?: as | 'Hex' | 'Bytes' | undefined;
240
+ /** Optional BIP-39 passphrase. */
241
+ passphrase?: string | undefined;
242
+ };
243
+ type ReturnType<as extends 'Hex' | 'Bytes'> = fromSeed.ReturnType<as>;
244
+ type ErrorType = fromSeed.ErrorType;
245
+ }
246
+ /**
247
+ * Derives an ML-DSA-44 private key from a seed.
248
+ *
249
+ * The seed must contain at least 32 bytes of cryptographically strong key
250
+ * material. Do not pass a password directly; use a password KDF first.
251
+ *
252
+ * The permanent derivation contract uses the seed as the HMAC-SHA256
253
+ * key. The HMAC message uses the `ox.mldsa44.fromSeed.v1` domain followed by a
254
+ * 32-bit big-endian counter set to zero.
255
+ *
256
+ * @example
257
+ * ```ts twoslash
258
+ * import { MlDsa44 } from 'ox'
259
+ *
260
+ * const privateKey = MlDsa44.fromSeed(
261
+ * '0x000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f'
262
+ * )
263
+ * ```
264
+ *
265
+ * @param seed - Seed containing at least 32 bytes of cryptographically strong key material.
266
+ * @param options - Options.
267
+ * @returns An ML-DSA-44 private key (32-byte seed).
268
+ */
269
+ export declare function fromSeed<as extends 'Hex' | 'Bytes' = 'Hex'>(seed: Hex.Hex | Bytes.Bytes, options?: fromSeed.Options<as>): fromSeed.ReturnType<as>;
270
+ export declare namespace fromSeed {
271
+ type Options<as extends 'Hex' | 'Bytes' = 'Hex'> = {
272
+ /**
273
+ * Format of the returned private key.
274
+ * @default 'Hex'
275
+ */
276
+ as?: as | 'Hex' | 'Bytes' | undefined;
277
+ };
278
+ type ReturnType<as extends 'Hex' | 'Bytes'> = (as extends 'Bytes' ? Bytes.Bytes : never) | (as extends 'Hex' ? Hex.Hex : never);
279
+ type ErrorType = Bytes.from.ErrorType | Hex.fromBytes.ErrorType | keyDerivation.derive.ErrorType | InvalidSeedSizeError | Errors.GlobalErrorType;
280
+ }
214
281
  /**
215
282
  * Computes the ML-DSA-44 public key from a provided private key.
216
283
  *
@@ -386,4 +453,16 @@ export declare namespace InvalidPrfSizeError {
386
453
  size: number;
387
454
  };
388
455
  }
456
+ /** Thrown when a seed contains fewer than 32 bytes. */
457
+ export declare class InvalidSeedSizeError extends Errors.BaseError {
458
+ readonly name = "MlDsa44.InvalidSeedSizeError";
459
+ constructor(options: InvalidSeedSizeError.Options);
460
+ }
461
+ export declare namespace InvalidSeedSizeError {
462
+ /** Options for {@link ox#MlDsa44.InvalidSeedSizeError}. */
463
+ type Options = {
464
+ /** Received seed size. */
465
+ size: number;
466
+ };
467
+ }
389
468
  //# sourceMappingURL=MlDsa44.d.ts.map