ox 0.7.2 → 0.8.1

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 CHANGED
@@ -1,5 +1,48 @@
1
1
  # ox
2
2
 
3
+ ## 0.8.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [`74e47c5`](https://github.com/wevm/ox/commit/74e47c5df471a48f4fb389f0684ca52f841fbc11) Thanks [@jxom](https://github.com/jxom)! - Added `Keystore.toKey` and `Keystore.toKeyAsync` to derive a key from a JSON Keystore using a password.
8
+
9
+ ## 0.8.0
10
+
11
+ ### Minor Changes
12
+
13
+ - [`7fc1da0`](https://github.com/wevm/ox/commit/7fc1da0717a17dbac0e4effed2ea3911c7ca3236) Thanks [@jxom](https://github.com/jxom)! - **Breaking(`Keystore`):** Keystore derivation functions (e.g. `Keystore.pbkdf2`) now return a tuple of the key and derivation options,
14
+ instead of an object with the key and options.
15
+
16
+ ```diff
17
+ import { Keystore } from 'ox'
18
+
19
+ - const key = Keystore.pbkdf2({ password: 'testpassword' })
20
+ + const [key, opts] = Keystore.pbkdf2({ password: 'testpassword' })
21
+ ```
22
+
23
+ - [`7fc1da0`](https://github.com/wevm/ox/commit/7fc1da0717a17dbac0e4effed2ea3911c7ca3236) Thanks [@jxom](https://github.com/jxom)! - **Breaking(`Keystore`):** `Keystore.decrypt` function interface no longer requires an object as the second parameter, now it only requires the key itself.
24
+
25
+ ```diff
26
+ import { Keystore } from 'ox'
27
+
28
+ const [key, opts] = Keystore.pbkdf2({ password: 'testpassword' })
29
+
30
+ const encrypted = await Keystore.encrypt(secret, key, opts)
31
+
32
+ + const decrypted = await Keystore.decrypt(encrypted, key)
33
+ ```
34
+
35
+ - [`7fc1da0`](https://github.com/wevm/ox/commit/7fc1da0717a17dbac0e4effed2ea3911c7ca3236) Thanks [@jxom](https://github.com/jxom)! - **Breaking(`Keystore`):** `Keystore.encrypt` function interface has changed to require derivation options (`opts`).
36
+
37
+ ```diff
38
+ import { Keystore } from 'ox'
39
+
40
+ const [key, opts] = Keystore.pbkdf2({ password: 'testpassword' })
41
+
42
+ - const encrypted = await Keystore.encrypt(secret, key)
43
+ + const encrypted = await Keystore.encrypt(secret, key, opts)
44
+ ```
45
+
3
46
  ## 0.7.2
4
47
 
5
48
  ### Patch Changes
@@ -6,41 +6,43 @@ exports.pbkdf2 = pbkdf2;
6
6
  exports.pbkdf2Async = pbkdf2Async;
7
7
  exports.scrypt = scrypt;
8
8
  exports.scryptAsync = scryptAsync;
9
+ exports.toKey = toKey;
10
+ exports.toKeyAsync = toKeyAsync;
9
11
  const aes_1 = require("@noble/ciphers/aes");
10
12
  const pbkdf2_1 = require("@noble/hashes/pbkdf2");
11
13
  const scrypt_1 = require("@noble/hashes/scrypt");
12
14
  const sha2_1 = require("@noble/hashes/sha2");
13
15
  const Bytes = require("./Bytes.js");
14
16
  const Hash = require("./Hash.js");
15
- async function decrypt(keystore, key, options = {}) {
17
+ function decrypt(keystore, key, options = {}) {
16
18
  const { as = 'Hex' } = options;
17
- const key_ = Bytes.from(`0x${key.key()}`);
19
+ const key_ = Bytes.from(typeof key === 'function' ? key() : key);
18
20
  const encKey = Bytes.slice(key_, 0, 16);
19
21
  const macKey = Bytes.slice(key_, 16, 32);
20
22
  const ciphertext = Bytes.from(`0x${keystore.crypto.ciphertext}`);
21
23
  const mac = Hash.keccak256(Bytes.concat(macKey, ciphertext));
22
24
  if (!Bytes.isEqual(mac, Bytes.from(`0x${keystore.crypto.mac}`)))
23
25
  throw new Error('corrupt keystore');
24
- const data = (0, aes_1.ctr)(encKey, key.iv).decrypt(ciphertext);
26
+ const data = (0, aes_1.ctr)(encKey, Bytes.from(`0x${keystore.crypto.cipherparams.iv}`)).decrypt(ciphertext);
25
27
  if (as === 'Hex')
26
28
  return Bytes.toHex(data);
27
29
  return data;
28
30
  }
29
- async function encrypt(privateKey, key, options = {}) {
30
- const { id = crypto.randomUUID() } = options;
31
- const key_ = Bytes.from(`0x${key.key()}`);
31
+ function encrypt(privateKey, key, options) {
32
+ const { id = crypto.randomUUID(), kdf, kdfparams, iv } = options;
33
+ const key_ = Bytes.from(typeof key === 'function' ? key() : key);
32
34
  const value_ = Bytes.from(privateKey);
33
35
  const encKey = Bytes.slice(key_, 0, 16);
34
36
  const macKey = Bytes.slice(key_, 16, 32);
35
- const ciphertext = (0, aes_1.ctr)(encKey, key.iv).encrypt(value_);
37
+ const ciphertext = (0, aes_1.ctr)(encKey, iv).encrypt(value_);
36
38
  const mac = Hash.keccak256(Bytes.concat(macKey, ciphertext));
37
39
  return {
38
40
  crypto: {
39
41
  cipher: 'aes-128-ctr',
40
42
  ciphertext: Bytes.toHex(ciphertext).slice(2),
41
- cipherparams: { iv: Bytes.toHex(key.iv).slice(2) },
42
- kdf: key.kdf,
43
- kdfparams: key.kdfparams,
43
+ cipherparams: { iv: Bytes.toHex(iv).slice(2) },
44
+ kdf,
45
+ kdfparams,
44
46
  mac: Bytes.toHex(mac).slice(2),
45
47
  },
46
48
  id,
@@ -50,10 +52,9 @@ async function encrypt(privateKey, key, options = {}) {
50
52
  function pbkdf2(options) {
51
53
  const { iv, iterations = 262_144, password } = options;
52
54
  const salt = options.salt ? Bytes.from(options.salt) : Bytes.random(32);
53
- const key = Bytes.toHex((0, pbkdf2_1.pbkdf2)(sha2_1.sha256, password, salt, { c: iterations, dkLen: 32 })).slice(2);
54
- return defineKey({
55
+ const key = Bytes.toHex((0, pbkdf2_1.pbkdf2)(sha2_1.sha256, password, salt, { c: iterations, dkLen: 32 }));
56
+ return defineKey(() => key, {
55
57
  iv,
56
- key: () => key,
57
58
  kdfparams: {
58
59
  c: iterations,
59
60
  dklen: 32,
@@ -69,10 +70,9 @@ async function pbkdf2Async(options) {
69
70
  const key = Bytes.toHex(await (0, pbkdf2_1.pbkdf2Async)(sha2_1.sha256, password, salt, {
70
71
  c: iterations,
71
72
  dkLen: 32,
72
- })).slice(2);
73
- return defineKey({
73
+ }));
74
+ return defineKey(() => key, {
74
75
  iv,
75
- key: () => key,
76
76
  kdfparams: {
77
77
  c: iterations,
78
78
  dklen: 32,
@@ -83,14 +83,11 @@ async function pbkdf2Async(options) {
83
83
  });
84
84
  }
85
85
  function scrypt(options) {
86
- const { iv, n = 262_144, password } = options;
87
- const p = 8;
88
- const r = 1;
86
+ const { iv, n = 262_144, password, p = 8, r = 1 } = options;
89
87
  const salt = options.salt ? Bytes.from(options.salt) : Bytes.random(32);
90
- const key = Bytes.toHex((0, scrypt_1.scrypt)(password, salt, { N: n, dkLen: 32, r, p })).slice(2);
91
- return defineKey({
88
+ const key = Bytes.toHex((0, scrypt_1.scrypt)(password, salt, { N: n, dkLen: 32, r, p }));
89
+ return defineKey(() => key, {
92
90
  iv,
93
- key: () => key,
94
91
  kdfparams: {
95
92
  dklen: 32,
96
93
  n,
@@ -106,10 +103,9 @@ async function scryptAsync(options) {
106
103
  const p = 8;
107
104
  const r = 1;
108
105
  const salt = options.salt ? Bytes.from(options.salt) : Bytes.random(32);
109
- const key = Bytes.toHex(await (0, scrypt_1.scryptAsync)(password, salt, { N: n, dkLen: 32, r, p })).slice(2);
110
- return defineKey({
106
+ const key = Bytes.toHex(await (0, scrypt_1.scryptAsync)(password, salt, { N: n, dkLen: 32, r, p }));
107
+ return defineKey(() => key, {
111
108
  iv,
112
- key: () => key,
113
109
  kdfparams: {
114
110
  dklen: 32,
115
111
  n,
@@ -120,8 +116,68 @@ async function scryptAsync(options) {
120
116
  kdf: 'scrypt',
121
117
  });
122
118
  }
123
- function defineKey(key) {
124
- const iv = key.iv ? Bytes.from(key.iv) : Bytes.random(16);
125
- return { ...key, iv };
119
+ function toKey(keystore, options) {
120
+ const { crypto } = keystore;
121
+ const { password } = options;
122
+ const { cipherparams, kdf, kdfparams } = crypto;
123
+ const { iv } = cipherparams;
124
+ const { c, n, p, r, salt } = kdfparams;
125
+ const [key] = (() => {
126
+ switch (kdf) {
127
+ case 'scrypt':
128
+ return scrypt({
129
+ iv: Bytes.from(`0x${iv}`),
130
+ n,
131
+ p,
132
+ r,
133
+ salt: Bytes.from(`0x${salt}`),
134
+ password,
135
+ });
136
+ case 'pbkdf2':
137
+ return pbkdf2({
138
+ iv: Bytes.from(`0x${iv}`),
139
+ iterations: c,
140
+ password,
141
+ salt: Bytes.from(`0x${salt}`),
142
+ });
143
+ default:
144
+ throw new Error('unsupported kdf');
145
+ }
146
+ })();
147
+ return key;
148
+ }
149
+ async function toKeyAsync(keystore, options) {
150
+ const { crypto } = keystore;
151
+ const { password } = options;
152
+ const { cipherparams, kdf, kdfparams } = crypto;
153
+ const { iv } = cipherparams;
154
+ const { c, n, p, r, salt } = kdfparams;
155
+ const [key] = await (async () => {
156
+ switch (kdf) {
157
+ case 'scrypt':
158
+ return await scryptAsync({
159
+ iv: Bytes.from(`0x${iv}`),
160
+ n,
161
+ p,
162
+ r,
163
+ salt: Bytes.from(`0x${salt}`),
164
+ password,
165
+ });
166
+ case 'pbkdf2':
167
+ return await pbkdf2({
168
+ iv: Bytes.from(`0x${iv}`),
169
+ iterations: c,
170
+ password,
171
+ salt: Bytes.from(`0x${salt}`),
172
+ });
173
+ default:
174
+ throw new Error('unsupported kdf');
175
+ }
176
+ })();
177
+ return key;
178
+ }
179
+ function defineKey(key, options) {
180
+ const iv = options.iv ? Bytes.from(options.iv) : Bytes.random(16);
181
+ return [key, { ...options, iv }];
126
182
  }
127
183
  //# sourceMappingURL=Keystore.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Keystore.js","sourceRoot":"","sources":["../../core/Keystore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Keystore.js","sourceRoot":"","sources":["../../core/Keystore.ts"],"names":[],"mappings":"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"}
package/_cjs/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;;AAuHA,uCAAoC;AA4EpC,6DAA0D;AAwE1D,iDAA8C;AAmH9C,iDAA8C;AA8F9C,uDAAoD;AA8EpD,+CAA4C;AAwG5C,2DAAwD;AAOxD,qDAAkD;AAOlD,yDAAsD;AAuDtD,+CAA4C;AAqC5C,6CAA0C;AA0E1C,2DAAwD;AAuDxD,6CAA0C;AAsD1C,6CAA0C;AAO1C,+DAA4D;AAO5D,2CAAwC;AAgCxC,2CAAwC;AAOxC,6DAA0D;AAO1D,2CAAwC;AAoHxC,uCAAoC;AA6CpC,iDAA8C;AAgI9C,2CAAwC;AAExC,6CAA0C;AAsC1C,+DAA4D;AA+B5D,uCAAoC;AAEpC,6CAA0C;AAO1C,6CAA0C;AAe1C,yCAAsC;AActC,2CAAwC;AAmHxC,uCAAoC;AAKpC,uCAAoC;AAkCpC,yCAAsC;AAgDtC,iDAA8C;AAS9C,uCAAoC;AA2DpC,uCAAoC;AA6DpC,iDAA8C;AAoB9C,+DAA4D;AAqF5D,iDAA8C;AAyC9C,mDAAgD;AAoBhD,uCAAoC;AAOpC,mDAAgD;AAmChD,qDAAkD;AAmFlD,uDAAoD;AA0BpD,yDAAsD;AAyEtD,mDAAgD;AAyEhD,yCAAsC;AAmCtC,mDAAgD;AAqGhD,yCAAsC;AAEtC,iDAA8C;AAO9C,6DAA0D;AAuC1D,uDAAoD;AAgBpD,uEAAoE;AA2JpE,mFAAgF;AAuKhF,qFAAkF;AA+JlF,qFAAkF;AAwLlF,qFAAkF;AAqIlF,qFAAkF;AA6ClF,qEAAkE;AAyBlE,qEAAkE;AAkDlE,mDAAgD;AAOhD,2DAAwD;AAsBxD,2CAAwC;AAkFxC,yDAAsD;AAiEtD,2DAAwD;AAOxD,qDAAkD"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;;AAuHA,uCAAoC;AA4EpC,6DAA0D;AAwE1D,iDAA8C;AAmH9C,iDAA8C;AA8F9C,uDAAoD;AA8EpD,+CAA4C;AAwG5C,2DAAwD;AAOxD,qDAAkD;AAOlD,yDAAsD;AAuDtD,+CAA4C;AAqC5C,6CAA0C;AA0E1C,2DAAwD;AAuDxD,6CAA0C;AAsD1C,6CAA0C;AAO1C,+DAA4D;AAO5D,2CAAwC;AAgCxC,2CAAwC;AAOxC,6DAA0D;AAO1D,2CAAwC;AAoHxC,uCAAoC;AA6CpC,iDAA8C;AAgI9C,2CAAwC;AAExC,6CAA0C;AAsC1C,+DAA4D;AA+B5D,uCAAoC;AAEpC,6CAA0C;AAO1C,6CAA0C;AAe1C,yCAAsC;AActC,2CAAwC;AAmHxC,uCAAoC;AAKpC,uCAAoC;AAkCpC,yCAAsC;AAgEtC,iDAA8C;AAS9C,uCAAoC;AA2DpC,uCAAoC;AA6DpC,iDAA8C;AAoB9C,+DAA4D;AAqF5D,iDAA8C;AAyC9C,mDAAgD;AAoBhD,uCAAoC;AAOpC,mDAAgD;AAmChD,qDAAkD;AAmFlD,uDAAoD;AA0BpD,yDAAsD;AAyEtD,mDAAgD;AAyEhD,yCAAsC;AAmCtC,mDAAgD;AAqGhD,yCAAsC;AAEtC,iDAA8C;AAO9C,6DAA0D;AAuC1D,uDAAoD;AAgBpD,uEAAoE;AA2JpE,mFAAgF;AAuKhF,qFAAkF;AA+JlF,qFAAkF;AAwLlF,qFAAkF;AAqIlF,qFAAkF;AA6ClF,qEAAkE;AAyBlE,qEAAkE;AAkDlE,mDAAgD;AAOhD,2DAAwD;AAsBxD,2CAAwC;AAkFxC,yDAAsD;AAiEtD,2DAAwD;AAOxD,qDAAkD"}
package/_cjs/version.js CHANGED
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.version = void 0;
4
- exports.version = '0.7.2';
4
+ exports.version = '0.8.1';
5
5
  //# sourceMappingURL=version.js.map
@@ -20,11 +20,11 @@ import * as Hash from './Hash.js';
20
20
  * // JSON keystore.
21
21
  * const keystore = { crypto: { ... }, id: '...', version: 3 }
22
22
  *
23
- * // Derive key from password.
24
- * const key = Keystore.pbkdf2({ password: 'testpassword' })
23
+ * // Derive the key using your password.
24
+ * const key = Keystore.toKey(keystore, { password: 'hunter2' })
25
25
  *
26
26
  * // Decrypt the private key.
27
- * const privateKey = await Keystore.decrypt(keystore, key)
27
+ * const privateKey = Keystore.decrypt(keystore, key)
28
28
  * // @log: "0x..."
29
29
  * ```
30
30
  *
@@ -33,16 +33,16 @@ import * as Hash from './Hash.js';
33
33
  * @param options - Decryption options.
34
34
  * @returns Decrypted private key.
35
35
  */
36
- export async function decrypt(keystore, key, options = {}) {
36
+ export function decrypt(keystore, key, options = {}) {
37
37
  const { as = 'Hex' } = options;
38
- const key_ = Bytes.from(`0x${key.key()}`);
38
+ const key_ = Bytes.from(typeof key === 'function' ? key() : key);
39
39
  const encKey = Bytes.slice(key_, 0, 16);
40
40
  const macKey = Bytes.slice(key_, 16, 32);
41
41
  const ciphertext = Bytes.from(`0x${keystore.crypto.ciphertext}`);
42
42
  const mac = Hash.keccak256(Bytes.concat(macKey, ciphertext));
43
43
  if (!Bytes.isEqual(mac, Bytes.from(`0x${keystore.crypto.mac}`)))
44
44
  throw new Error('corrupt keystore');
45
- const data = ctr(encKey, key.iv).decrypt(ciphertext);
45
+ const data = ctr(encKey, Bytes.from(`0x${keystore.crypto.cipherparams.iv}`)).decrypt(ciphertext);
46
46
  if (as === 'Hex')
47
47
  return Bytes.toHex(data);
48
48
  return data;
@@ -63,10 +63,10 @@ export async function decrypt(keystore, key, options = {}) {
63
63
  * const privateKey = Secp256k1.randomPrivateKey()
64
64
  *
65
65
  * // Derive key from password.
66
- * const key = Keystore.pbkdf2({ password: 'testpassword' })
66
+ * const [key, opts] = Keystore.pbkdf2({ password: 'testpassword' })
67
67
  *
68
68
  * // Encrypt the private key.
69
- * const encrypted = await Keystore.encrypt(privateKey, key)
69
+ * const encrypted = Keystore.encrypt(privateKey, key, opts)
70
70
  * // @log: {
71
71
  * // @log: "crypto": {
72
72
  * // @log: "cipher": "aes-128-ctr",
@@ -93,21 +93,21 @@ export async function decrypt(keystore, key, options = {}) {
93
93
  * @param options - Encryption options.
94
94
  * @returns Encrypted keystore.
95
95
  */
96
- export async function encrypt(privateKey, key, options = {}) {
97
- const { id = crypto.randomUUID() } = options;
98
- const key_ = Bytes.from(`0x${key.key()}`);
96
+ export function encrypt(privateKey, key, options) {
97
+ const { id = crypto.randomUUID(), kdf, kdfparams, iv } = options;
98
+ const key_ = Bytes.from(typeof key === 'function' ? key() : key);
99
99
  const value_ = Bytes.from(privateKey);
100
100
  const encKey = Bytes.slice(key_, 0, 16);
101
101
  const macKey = Bytes.slice(key_, 16, 32);
102
- const ciphertext = ctr(encKey, key.iv).encrypt(value_);
102
+ const ciphertext = ctr(encKey, iv).encrypt(value_);
103
103
  const mac = Hash.keccak256(Bytes.concat(macKey, ciphertext));
104
104
  return {
105
105
  crypto: {
106
106
  cipher: 'aes-128-ctr',
107
107
  ciphertext: Bytes.toHex(ciphertext).slice(2),
108
- cipherparams: { iv: Bytes.toHex(key.iv).slice(2) },
109
- kdf: key.kdf,
110
- kdfparams: key.kdfparams,
108
+ cipherparams: { iv: Bytes.toHex(iv).slice(2) },
109
+ kdf,
110
+ kdfparams,
111
111
  mac: Bytes.toHex(mac).slice(2),
112
112
  },
113
113
  id,
@@ -121,7 +121,7 @@ export async function encrypt(privateKey, key, options = {}) {
121
121
  * ```ts twoslash
122
122
  * import { Keystore } from 'ox'
123
123
  *
124
- * const key = Keystore.pbkdf2({ password: 'testpassword' })
124
+ * const [key, opts] = Keystore.pbkdf2({ password: 'testpassword' })
125
125
  * ```
126
126
  *
127
127
  * @param options - PBKDF2 options.
@@ -130,10 +130,9 @@ export async function encrypt(privateKey, key, options = {}) {
130
130
  export function pbkdf2(options) {
131
131
  const { iv, iterations = 262_144, password } = options;
132
132
  const salt = options.salt ? Bytes.from(options.salt) : Bytes.random(32);
133
- const key = Bytes.toHex(pbkdf2_noble(sha256, password, salt, { c: iterations, dkLen: 32 })).slice(2);
134
- return defineKey({
133
+ const key = Bytes.toHex(pbkdf2_noble(sha256, password, salt, { c: iterations, dkLen: 32 }));
134
+ return defineKey(() => key, {
135
135
  iv,
136
- key: () => key,
137
136
  kdfparams: {
138
137
  c: iterations,
139
138
  dklen: 32,
@@ -150,7 +149,7 @@ export function pbkdf2(options) {
150
149
  * ```ts twoslash
151
150
  * import { Keystore } from 'ox'
152
151
  *
153
- * const key = await Keystore.pbkdf2Async({ password: 'testpassword' })
152
+ * const [key, opts] = await Keystore.pbkdf2Async({ password: 'testpassword' })
154
153
  * ```
155
154
  *
156
155
  * @param options - PBKDF2 options.
@@ -162,10 +161,9 @@ export async function pbkdf2Async(options) {
162
161
  const key = Bytes.toHex(await pbkdf2Async_noble(sha256, password, salt, {
163
162
  c: iterations,
164
163
  dkLen: 32,
165
- })).slice(2);
166
- return defineKey({
164
+ }));
165
+ return defineKey(() => key, {
167
166
  iv,
168
- key: () => key,
169
167
  kdfparams: {
170
168
  c: iterations,
171
169
  dklen: 32,
@@ -182,21 +180,18 @@ export async function pbkdf2Async(options) {
182
180
  * ```ts twoslash
183
181
  * import { Keystore } from 'ox'
184
182
  *
185
- * const key = Keystore.scrypt({ password: 'testpassword' })
183
+ * const [key, opts] = Keystore.scrypt({ password: 'testpassword' })
186
184
  * ```
187
185
  *
188
186
  * @param options - Scrypt options.
189
187
  * @returns Scrypt key.
190
188
  */
191
189
  export function scrypt(options) {
192
- const { iv, n = 262_144, password } = options;
193
- const p = 8;
194
- const r = 1;
190
+ const { iv, n = 262_144, password, p = 8, r = 1 } = options;
195
191
  const salt = options.salt ? Bytes.from(options.salt) : Bytes.random(32);
196
- const key = Bytes.toHex(scrypt_noble(password, salt, { N: n, dkLen: 32, r, p })).slice(2);
197
- return defineKey({
192
+ const key = Bytes.toHex(scrypt_noble(password, salt, { N: n, dkLen: 32, r, p }));
193
+ return defineKey(() => key, {
198
194
  iv,
199
- key: () => key,
200
195
  kdfparams: {
201
196
  dklen: 32,
202
197
  n,
@@ -214,7 +209,7 @@ export function scrypt(options) {
214
209
  * ```ts twoslash
215
210
  * import { Keystore } from 'ox'
216
211
  *
217
- * const key = await Keystore.scryptAsync({ password: 'testpassword' })
212
+ * const [key, opts] = await Keystore.scryptAsync({ password: 'testpassword' })
218
213
  * ```
219
214
  *
220
215
  * @param options - Scrypt options.
@@ -225,10 +220,9 @@ export async function scryptAsync(options) {
225
220
  const p = 8;
226
221
  const r = 1;
227
222
  const salt = options.salt ? Bytes.from(options.salt) : Bytes.random(32);
228
- const key = Bytes.toHex(await scryptAsync_noble(password, salt, { N: n, dkLen: 32, r, p })).slice(2);
229
- return defineKey({
223
+ const key = Bytes.toHex(await scryptAsync_noble(password, salt, { N: n, dkLen: 32, r, p }));
224
+ return defineKey(() => key, {
230
225
  iv,
231
- key: () => key,
232
226
  kdfparams: {
233
227
  dklen: 32,
234
228
  n,
@@ -239,10 +233,110 @@ export async function scryptAsync(options) {
239
233
  kdf: 'scrypt',
240
234
  });
241
235
  }
236
+ /**
237
+ * Extracts a Key from a JSON Keystore to use for decryption.
238
+ *
239
+ * @example
240
+ * ```ts twoslash
241
+ * // @noErrors
242
+ * import { Keystore } from 'ox'
243
+ *
244
+ * // JSON keystore.
245
+ * const keystore = { crypto: { ... }, id: '...', version: 3 }
246
+ *
247
+ * const key = Keystore.toKey(keystore, { password: 'hunter2' }) // [!code focus]
248
+ *
249
+ * const decrypted = Keystore.decrypt(keystore, key)
250
+ * ```
251
+ *
252
+ * @param keystore - JSON Keystore
253
+ * @param options - Options
254
+ * @returns Key
255
+ */
256
+ export function toKey(keystore, options) {
257
+ const { crypto } = keystore;
258
+ const { password } = options;
259
+ const { cipherparams, kdf, kdfparams } = crypto;
260
+ const { iv } = cipherparams;
261
+ const { c, n, p, r, salt } = kdfparams;
262
+ const [key] = (() => {
263
+ switch (kdf) {
264
+ case 'scrypt':
265
+ return scrypt({
266
+ iv: Bytes.from(`0x${iv}`),
267
+ n,
268
+ p,
269
+ r,
270
+ salt: Bytes.from(`0x${salt}`),
271
+ password,
272
+ });
273
+ case 'pbkdf2':
274
+ return pbkdf2({
275
+ iv: Bytes.from(`0x${iv}`),
276
+ iterations: c,
277
+ password,
278
+ salt: Bytes.from(`0x${salt}`),
279
+ });
280
+ default:
281
+ throw new Error('unsupported kdf');
282
+ }
283
+ })();
284
+ return key;
285
+ }
286
+ /**
287
+ * Extracts a Key asynchronously from a JSON Keystore to use for decryption.
288
+ *
289
+ * @example
290
+ * ```ts twoslash
291
+ * // @noErrors
292
+ * import { Keystore } from 'ox'
293
+ *
294
+ * // JSON keystore.
295
+ * const keystore = { crypto: { ... }, id: '...', version: 3 }
296
+ *
297
+ * const key = await Keystore.toKeyAsync(keystore, { password: 'hunter2' }) // [!code focus]
298
+ *
299
+ * const decrypted = Keystore.decrypt(keystore, key)
300
+ * ```
301
+ *
302
+ * @param keystore - JSON Keystore
303
+ * @param options - Options
304
+ * @returns Key
305
+ */
306
+ export async function toKeyAsync(keystore, options) {
307
+ const { crypto } = keystore;
308
+ const { password } = options;
309
+ const { cipherparams, kdf, kdfparams } = crypto;
310
+ const { iv } = cipherparams;
311
+ const { c, n, p, r, salt } = kdfparams;
312
+ const [key] = await (async () => {
313
+ switch (kdf) {
314
+ case 'scrypt':
315
+ return await scryptAsync({
316
+ iv: Bytes.from(`0x${iv}`),
317
+ n,
318
+ p,
319
+ r,
320
+ salt: Bytes.from(`0x${salt}`),
321
+ password,
322
+ });
323
+ case 'pbkdf2':
324
+ return await pbkdf2({
325
+ iv: Bytes.from(`0x${iv}`),
326
+ iterations: c,
327
+ password,
328
+ salt: Bytes.from(`0x${salt}`),
329
+ });
330
+ default:
331
+ throw new Error('unsupported kdf');
332
+ }
333
+ })();
334
+ return key;
335
+ }
242
336
  ///////////////////////////////////////////////////////////////////////////
243
337
  /** @internal */
244
- function defineKey(key) {
245
- const iv = key.iv ? Bytes.from(key.iv) : Bytes.random(16);
246
- return { ...key, iv };
338
+ function defineKey(key, options) {
339
+ const iv = options.iv ? Bytes.from(options.iv) : Bytes.random(16);
340
+ return [key, { ...options, iv }];
247
341
  }
248
342
  //# sourceMappingURL=Keystore.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Keystore.js","sourceRoot":"","sources":["../../core/Keystore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Keystore.js","sourceRoot":"","sources":["../../core/Keystore.ts"],"names":[],"mappings":"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"}
package/_esm/index.js CHANGED
@@ -1527,9 +1527,9 @@ export * as Json from './core/Json.js';
1527
1527
  * Utilities & types for working with [Keystores](https://ethereum.org/en/developers/docs/data-structures-and-encoding/web3-secret-storage).
1528
1528
  *
1529
1529
  * @example
1530
- * ### Encrypting & Decrypting Private Keys
1530
+ * ### Encrypting Private Keys
1531
1531
  *
1532
- * Private keys can be encrypted into a JSON keystore using {@link ox#Keystore.(encrypt:function)} and decrypted using {@link ox#Keystore.(decrypt:function)}:
1532
+ * Private keys can be encrypted into a JSON keystore using {@link ox#Keystore.(encrypt:function)}:
1533
1533
  *
1534
1534
  * ```ts twoslash
1535
1535
  * import { Keystore, Secp256k1 } from 'ox'
@@ -1538,10 +1538,10 @@ export * as Json from './core/Json.js';
1538
1538
  * const privateKey = Secp256k1.randomPrivateKey()
1539
1539
  *
1540
1540
  * // Derive a key from a password.
1541
- * const key = Keystore.pbkdf2({ password: 'testpassword' })
1541
+ * const [key, opts] = Keystore.pbkdf2({ password: 'testpassword' })
1542
1542
  *
1543
1543
  * // Encrypt the private key.
1544
- * const encrypted = await Keystore.encrypt(privateKey, key)
1544
+ * const keystore = Keystore.encrypt(privateKey, key, opts)
1545
1545
  * // @log: {
1546
1546
  * // @log: "crypto": {
1547
1547
  * // @log: "cipher": "aes-128-ctr",
@@ -1561,10 +1561,26 @@ export * as Json from './core/Json.js';
1561
1561
  * // @log: "id": "...",
1562
1562
  * // @log: "version": 3,
1563
1563
  * // @log: }
1564
+ * ```
1565
+ *
1566
+ * @example
1567
+ * ### Decrypting Private Keys
1568
+ *
1569
+ * Private keys can be decrypted from a JSON keystore using {@link ox#Keystore.(decrypt:function)}:
1570
+ *
1571
+ * ```ts twoslash
1572
+ * // @noErrors
1573
+ * import { Keystore, Secp256k1 } from 'ox'
1574
+ *
1575
+ * const keystore = { crypto: { ... }, id: '...', version: 3 }
1576
+ *
1577
+ * // Derive the key.
1578
+ * const key = Keystore.toKey(keystore, { password: 'testpassword' })
1564
1579
  *
1565
1580
  * // Decrypt the private key.
1566
- * const decrypted = await Keystore.decrypt(encrypted, key)
1581
+ * const decrypted = Keystore.decrypt(keystore, key)
1567
1582
  * // @log: "0x..."
1583
+ *
1568
1584
  * ```
1569
1585
  *
1570
1586
  * @category Crypto