@aztec/key-store 0.41.0 → 0.43.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/dest/key_store.d.ts +3 -12
- package/dest/key_store.d.ts.map +1 -1
- package/dest/key_store.js +10 -36
- package/package.json +5 -5
- package/src/key_store.ts +8 -42
package/dest/key_store.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type PublicKey } from '@aztec/circuit-types';
|
|
2
|
-
import { AztecAddress, CompleteAddress, Fq, Fr, type GrumpkinPrivateKey,
|
|
2
|
+
import { AztecAddress, CompleteAddress, Fq, Fr, type GrumpkinPrivateKey, KeyValidationRequest, type PartialAddress } from '@aztec/circuits.js';
|
|
3
3
|
import { type AztecKVStore } from '@aztec/kv-store';
|
|
4
4
|
/**
|
|
5
5
|
* Used for managing keys. Can hold keys of multiple accounts and allows for key rotation.
|
|
@@ -70,22 +70,13 @@ export declare class KeyStore {
|
|
|
70
70
|
*/
|
|
71
71
|
getAppOutgoingViewingSecretKey(account: AztecAddress, app: AztecAddress): Promise<Fr>;
|
|
72
72
|
/**
|
|
73
|
-
* Retrieves the sk_m
|
|
73
|
+
* Retrieves the sk_m corresponding to the pk_m.
|
|
74
74
|
* @throws If the provided public key is not associated with any of the registered accounts.
|
|
75
75
|
* @param pkM - The master public key to get secret key for.
|
|
76
76
|
* @returns A Promise that resolves to sk_m.
|
|
77
77
|
* @dev Used when feeding the sk_m to the kernel circuit for keys verification.
|
|
78
78
|
*/
|
|
79
|
-
|
|
80
|
-
/**
|
|
81
|
-
* Retrieves the master incoming viewing secret key (ivsk_m) corresponding to the specified master incoming viewing
|
|
82
|
-
* public key (Ivpk_m).
|
|
83
|
-
* @throws If the provided public key is not associated with any of the registered accounts.
|
|
84
|
-
* @param masterIncomingViewingPublicKey - The master nullifier public key to get secret key for.
|
|
85
|
-
* @returns A Promise that resolves to the master nullifier secret key.
|
|
86
|
-
* @dev Used when feeding the master nullifier secret key to the kernel circuit for nullifier keys verification.
|
|
87
|
-
*/
|
|
88
|
-
getMasterIncomingViewingSecretKeyForPublicKey(masterIncomingViewingPublicKey: PublicKey): Promise<GrumpkinPrivateKey>;
|
|
79
|
+
getMasterSecretKey(pkM: PublicKey): Promise<GrumpkinPrivateKey>;
|
|
89
80
|
/**
|
|
90
81
|
* Rotates the master nullifier key for the specified account.
|
|
91
82
|
*
|
package/dest/key_store.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"key_store.d.ts","sourceRoot":"","sources":["../src/key_store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EACL,YAAY,EACZ,eAAe,EACf,EAAE,EACF,EAAE,EAEF,KAAK,kBAAkB,
|
|
1
|
+
{"version":3,"file":"key_store.d.ts","sourceRoot":"","sources":["../src/key_store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EACL,YAAY,EACZ,eAAe,EACf,EAAE,EACF,EAAE,EAEF,KAAK,kBAAkB,EAIvB,oBAAoB,EACpB,KAAK,cAAc,EAMpB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,KAAK,YAAY,EAAiB,MAAM,iBAAiB,CAAC;AAEnE;;GAEG;AACH,qBAAa,QAAQ;;gBAGP,QAAQ,EAAE,YAAY;IAIlC;;;OAGG;IACI,aAAa,IAAI,OAAO,CAAC,eAAe,CAAC;IAMhD;;;;;OAKG;IACU,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,cAAc,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAwCzF;;;OAGG;IACI,WAAW,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAO7C;;;;;;OAMG;IACI,uBAAuB,CAAC,OAAO,EAAE,EAAE,EAAE,eAAe,EAAE,YAAY,GAAG,OAAO,CAAC,oBAAoB,CAAC;IA8DzG;;;;;OAKG;IACU,iCAAiC,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC;IAUzF;;;;;OAKG;IACU,iCAAiC,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC;IAUzF;;;;;OAKG;IACU,yBAAyB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC;IAUjF;;;;;;OAMG;IACU,8BAA8B,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,EAAE,CAAC;IAmBlG;;;;;;OAMG;IACU,8BAA8B,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,EAAE,CAAC;IAmBlG;;;;;;OAMG;IACI,kBAAkB,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAgCtE;;;;;;;;;;;OAWG;IACU,wBAAwB,CAAC,OAAO,EAAE,YAAY,EAAE,YAAY,GAAE,EAAgB;CAgD5F"}
|
package/dest/key_store.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
var _KeyStore_instances, _KeyStore_keys, _KeyStore_getKeyPrefixAndAccount, _KeyStore_appendValue, _KeyStore_calculateNumKeys;
|
|
2
2
|
import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
|
|
3
|
-
import { AztecAddress, CompleteAddress, Fq, Fr, GeneratorIndex, GrumpkinScalar, KEY_PREFIXES, KeyValidationRequest, Point, computeAddress, computeAppSecretKey, deriveKeys, derivePublicKeyFromSecretKey,
|
|
3
|
+
import { AztecAddress, CompleteAddress, Fq, Fr, GeneratorIndex, GrumpkinScalar, KEY_PREFIXES, KeyValidationRequest, Point, computeAddress, computeAppSecretKey, deriveKeys, derivePublicKeyFromSecretKey, } from '@aztec/circuits.js';
|
|
4
4
|
import { poseidon2Hash } from '@aztec/foundation/crypto';
|
|
5
5
|
import { serializeToBuffer } from '@aztec/foundation/serialize';
|
|
6
6
|
/**
|
|
@@ -188,16 +188,16 @@ export class KeyStore {
|
|
|
188
188
|
]));
|
|
189
189
|
}
|
|
190
190
|
/**
|
|
191
|
-
* Retrieves the sk_m
|
|
191
|
+
* Retrieves the sk_m corresponding to the pk_m.
|
|
192
192
|
* @throws If the provided public key is not associated with any of the registered accounts.
|
|
193
193
|
* @param pkM - The master public key to get secret key for.
|
|
194
194
|
* @returns A Promise that resolves to sk_m.
|
|
195
195
|
* @dev Used when feeding the sk_m to the kernel circuit for keys verification.
|
|
196
196
|
*/
|
|
197
|
-
|
|
197
|
+
getMasterSecretKey(pkM) {
|
|
198
198
|
const [keyPrefix, account] = __classPrivateFieldGet(this, _KeyStore_instances, "m", _KeyStore_getKeyPrefixAndAccount).call(this, pkM);
|
|
199
199
|
// We get the secret keys buffer and iterate over the values in the buffer to find the one that matches pkM
|
|
200
|
-
let
|
|
200
|
+
let skM;
|
|
201
201
|
{
|
|
202
202
|
const secretKeysBuffer = __classPrivateFieldGet(this, _KeyStore_keys, "f").get(`${account.toString()}-${keyPrefix}sk_m`);
|
|
203
203
|
if (!secretKeysBuffer) {
|
|
@@ -205,43 +205,17 @@ export class KeyStore {
|
|
|
205
205
|
}
|
|
206
206
|
const numKeys = __classPrivateFieldGet(this, _KeyStore_instances, "m", _KeyStore_calculateNumKeys).call(this, secretKeysBuffer, GrumpkinScalar);
|
|
207
207
|
for (let i = 0; i < numKeys; i++) {
|
|
208
|
-
const
|
|
209
|
-
if (derivePublicKeyFromSecretKey(
|
|
210
|
-
|
|
208
|
+
const foundSkM = GrumpkinScalar.fromBuffer(secretKeysBuffer.subarray(i * GrumpkinScalar.SIZE_IN_BYTES, (i + 1) * GrumpkinScalar.SIZE_IN_BYTES));
|
|
209
|
+
if (derivePublicKeyFromSecretKey(foundSkM).equals(pkM)) {
|
|
210
|
+
skM = foundSkM;
|
|
211
211
|
break;
|
|
212
212
|
}
|
|
213
213
|
}
|
|
214
|
-
if (!
|
|
214
|
+
if (!skM) {
|
|
215
215
|
throw new Error(`Could not find ${keyPrefix}skM for ${keyPrefix}pkM ${pkM.toString()} in secret keys buffer.`);
|
|
216
216
|
}
|
|
217
217
|
}
|
|
218
|
-
|
|
219
|
-
const generator = getKeyGenerator(keyPrefix);
|
|
220
|
-
return Promise.resolve([sk, generator]);
|
|
221
|
-
}
|
|
222
|
-
/**
|
|
223
|
-
* Retrieves the master incoming viewing secret key (ivsk_m) corresponding to the specified master incoming viewing
|
|
224
|
-
* public key (Ivpk_m).
|
|
225
|
-
* @throws If the provided public key is not associated with any of the registered accounts.
|
|
226
|
-
* @param masterIncomingViewingPublicKey - The master nullifier public key to get secret key for.
|
|
227
|
-
* @returns A Promise that resolves to the master nullifier secret key.
|
|
228
|
-
* @dev Used when feeding the master nullifier secret key to the kernel circuit for nullifier keys verification.
|
|
229
|
-
*/
|
|
230
|
-
getMasterIncomingViewingSecretKeyForPublicKey(masterIncomingViewingPublicKey) {
|
|
231
|
-
// We iterate over the map keys to find the account address that corresponds to the provided public key
|
|
232
|
-
for (const [key, value] of __classPrivateFieldGet(this, _KeyStore_keys, "f").entries()) {
|
|
233
|
-
if (value.equals(masterIncomingViewingPublicKey.toBuffer())) {
|
|
234
|
-
// We extract the account address from the map key
|
|
235
|
-
const account = key.split('-')[0];
|
|
236
|
-
// We fetch the secret key and return it
|
|
237
|
-
const masterIncomingViewingSecretKeyBuffer = __classPrivateFieldGet(this, _KeyStore_keys, "f").get(`${account.toString()}-ivsk_m`);
|
|
238
|
-
if (!masterIncomingViewingSecretKeyBuffer) {
|
|
239
|
-
throw new Error(`Could not find master incoming viewing secret key for account ${account.toString()}`);
|
|
240
|
-
}
|
|
241
|
-
return Promise.resolve(GrumpkinScalar.fromBuffer(masterIncomingViewingSecretKeyBuffer));
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
throw new Error(`Could not find master incoming viewing secret key for public key ${masterIncomingViewingPublicKey.toString()}`);
|
|
218
|
+
return Promise.resolve(skM);
|
|
245
219
|
}
|
|
246
220
|
/**
|
|
247
221
|
* Rotates the master nullifier key for the specified account.
|
|
@@ -290,4 +264,4 @@ _KeyStore_keys = new WeakMap(), _KeyStore_instances = new WeakSet(), _KeyStore_g
|
|
|
290
264
|
}, _KeyStore_calculateNumKeys = function _KeyStore_calculateNumKeys(buf, T) {
|
|
291
265
|
return buf.byteLength / T.SIZE_IN_BYTES;
|
|
292
266
|
};
|
|
293
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5X3N0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2tleV9zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLE9BQU8sRUFDTCxZQUFZLEVBQ1osZUFBZSxFQUNmLEVBQUUsRUFDRixFQUFFLEVBQ0YsY0FBYyxFQUVkLGNBQWMsRUFDZCxZQUFZLEVBR1osb0JBQW9CLEVBRXBCLEtBQUssRUFDTCxjQUFjLEVBQ2QsbUJBQW1CLEVBQ25CLFVBQVUsRUFDViw0QkFBNEIsRUFDNUIsZUFBZSxHQUNoQixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQW1CLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFHakY7O0dBRUc7QUFDSCxNQUFNLE9BQU8sUUFBUTtJQUduQixZQUFZLFFBQXNCOztRQUZsQyxpQ0FBZ0M7UUFHOUIsdUJBQUEsSUFBSSxrQkFBUyxRQUFRLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFBLENBQUM7SUFDN0MsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGFBQWE7UUFDbEIsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNuQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBTSxFQUFFLGNBQThCO1FBQzVELE1BQU0sRUFDSix3QkFBd0IsRUFDeEIsOEJBQThCLEVBQzlCLDhCQUE4QixFQUM5QixzQkFBc0IsRUFDdEIsVUFBVSxHQUNYLEdBQUcsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRW5CLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxJQUFJLEVB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
|
|
267
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5X3N0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2tleV9zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLE9BQU8sRUFDTCxZQUFZLEVBQ1osZUFBZSxFQUNmLEVBQUUsRUFDRixFQUFFLEVBQ0YsY0FBYyxFQUVkLGNBQWMsRUFDZCxZQUFZLEVBRVosb0JBQW9CLEVBRXBCLEtBQUssRUFDTCxjQUFjLEVBQ2QsbUJBQW1CLEVBQ25CLFVBQVUsRUFDViw0QkFBNEIsR0FDN0IsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFtQixpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBR2pGOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFFBQVE7SUFHbkIsWUFBWSxRQUFzQjs7UUFGbEMsaUNBQWdDO1FBRzlCLHVCQUFBLElBQUksa0JBQVMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBQSxDQUFDO0lBQzdDLENBQUM7SUFFRDs7O09BR0c7SUFDSSxhQUFhO1FBQ2xCLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN2QixNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDbkMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQU0sRUFBRSxjQUE4QjtRQUM1RCxNQUFNLEVBQ0osd0JBQXdCLEVBQ3hCLDhCQUE4QixFQUM5Qiw4QkFBOEIsRUFDOUIsc0JBQXNCLEVBQ3RCLFVBQVUsR0FDWCxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVuQixNQUFNLGNBQWMsR0FBRyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7UUFD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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/key-store",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.43.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": "./dest/index.js",
|
|
6
6
|
"typedocOptions": {
|
|
@@ -45,10 +45,10 @@
|
|
|
45
45
|
]
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
|
-
"@aztec/circuit-types": "0.
|
|
49
|
-
"@aztec/circuits.js": "0.
|
|
50
|
-
"@aztec/foundation": "0.
|
|
51
|
-
"@aztec/kv-store": "0.
|
|
48
|
+
"@aztec/circuit-types": "0.43.0",
|
|
49
|
+
"@aztec/circuits.js": "0.43.0",
|
|
50
|
+
"@aztec/foundation": "0.43.0",
|
|
51
|
+
"@aztec/kv-store": "0.43.0",
|
|
52
52
|
"tslib": "^2.4.0"
|
|
53
53
|
},
|
|
54
54
|
"devDependencies": {
|
package/src/key_store.ts
CHANGED
|
@@ -8,7 +8,6 @@ import {
|
|
|
8
8
|
type GrumpkinPrivateKey,
|
|
9
9
|
GrumpkinScalar,
|
|
10
10
|
KEY_PREFIXES,
|
|
11
|
-
type KeyGenerator,
|
|
12
11
|
type KeyPrefix,
|
|
13
12
|
KeyValidationRequest,
|
|
14
13
|
type PartialAddress,
|
|
@@ -17,7 +16,6 @@ import {
|
|
|
17
16
|
computeAppSecretKey,
|
|
18
17
|
deriveKeys,
|
|
19
18
|
derivePublicKeyFromSecretKey,
|
|
20
|
-
getKeyGenerator,
|
|
21
19
|
} from '@aztec/circuits.js';
|
|
22
20
|
import { poseidon2Hash } from '@aztec/foundation/crypto';
|
|
23
21
|
import { type Bufferable, serializeToBuffer } from '@aztec/foundation/serialize';
|
|
@@ -270,17 +268,17 @@ export class KeyStore {
|
|
|
270
268
|
}
|
|
271
269
|
|
|
272
270
|
/**
|
|
273
|
-
* Retrieves the sk_m
|
|
271
|
+
* Retrieves the sk_m corresponding to the pk_m.
|
|
274
272
|
* @throws If the provided public key is not associated with any of the registered accounts.
|
|
275
273
|
* @param pkM - The master public key to get secret key for.
|
|
276
274
|
* @returns A Promise that resolves to sk_m.
|
|
277
275
|
* @dev Used when feeding the sk_m to the kernel circuit for keys verification.
|
|
278
276
|
*/
|
|
279
|
-
public
|
|
277
|
+
public getMasterSecretKey(pkM: PublicKey): Promise<GrumpkinPrivateKey> {
|
|
280
278
|
const [keyPrefix, account] = this.#getKeyPrefixAndAccount(pkM);
|
|
281
279
|
|
|
282
280
|
// We get the secret keys buffer and iterate over the values in the buffer to find the one that matches pkM
|
|
283
|
-
let
|
|
281
|
+
let skM: GrumpkinScalar | undefined;
|
|
284
282
|
{
|
|
285
283
|
const secretKeysBuffer = this.#keys.get(`${account.toString()}-${keyPrefix}sk_m`);
|
|
286
284
|
if (!secretKeysBuffer) {
|
|
@@ -291,53 +289,21 @@ export class KeyStore {
|
|
|
291
289
|
|
|
292
290
|
const numKeys = this.#calculateNumKeys(secretKeysBuffer, GrumpkinScalar);
|
|
293
291
|
for (let i = 0; i < numKeys; i++) {
|
|
294
|
-
const
|
|
292
|
+
const foundSkM = GrumpkinScalar.fromBuffer(
|
|
295
293
|
secretKeysBuffer.subarray(i * GrumpkinScalar.SIZE_IN_BYTES, (i + 1) * GrumpkinScalar.SIZE_IN_BYTES),
|
|
296
294
|
);
|
|
297
|
-
if (derivePublicKeyFromSecretKey(
|
|
298
|
-
|
|
295
|
+
if (derivePublicKeyFromSecretKey(foundSkM).equals(pkM)) {
|
|
296
|
+
skM = foundSkM;
|
|
299
297
|
break;
|
|
300
298
|
}
|
|
301
299
|
}
|
|
302
300
|
|
|
303
|
-
if (!
|
|
301
|
+
if (!skM) {
|
|
304
302
|
throw new Error(`Could not find ${keyPrefix}skM for ${keyPrefix}pkM ${pkM.toString()} in secret keys buffer.`);
|
|
305
303
|
}
|
|
306
304
|
}
|
|
307
305
|
|
|
308
|
-
|
|
309
|
-
const generator = getKeyGenerator(keyPrefix);
|
|
310
|
-
return Promise.resolve([sk, generator]);
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
/**
|
|
314
|
-
* Retrieves the master incoming viewing secret key (ivsk_m) corresponding to the specified master incoming viewing
|
|
315
|
-
* public key (Ivpk_m).
|
|
316
|
-
* @throws If the provided public key is not associated with any of the registered accounts.
|
|
317
|
-
* @param masterIncomingViewingPublicKey - The master nullifier public key to get secret key for.
|
|
318
|
-
* @returns A Promise that resolves to the master nullifier secret key.
|
|
319
|
-
* @dev Used when feeding the master nullifier secret key to the kernel circuit for nullifier keys verification.
|
|
320
|
-
*/
|
|
321
|
-
public getMasterIncomingViewingSecretKeyForPublicKey(
|
|
322
|
-
masterIncomingViewingPublicKey: PublicKey,
|
|
323
|
-
): Promise<GrumpkinPrivateKey> {
|
|
324
|
-
// We iterate over the map keys to find the account address that corresponds to the provided public key
|
|
325
|
-
for (const [key, value] of this.#keys.entries()) {
|
|
326
|
-
if (value.equals(masterIncomingViewingPublicKey.toBuffer())) {
|
|
327
|
-
// We extract the account address from the map key
|
|
328
|
-
const account = key.split('-')[0];
|
|
329
|
-
// We fetch the secret key and return it
|
|
330
|
-
const masterIncomingViewingSecretKeyBuffer = this.#keys.get(`${account.toString()}-ivsk_m`);
|
|
331
|
-
if (!masterIncomingViewingSecretKeyBuffer) {
|
|
332
|
-
throw new Error(`Could not find master incoming viewing secret key for account ${account.toString()}`);
|
|
333
|
-
}
|
|
334
|
-
return Promise.resolve(GrumpkinScalar.fromBuffer(masterIncomingViewingSecretKeyBuffer));
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
throw new Error(
|
|
339
|
-
`Could not find master incoming viewing secret key for public key ${masterIncomingViewingPublicKey.toString()}`,
|
|
340
|
-
);
|
|
306
|
+
return Promise.resolve(skM);
|
|
341
307
|
}
|
|
342
308
|
|
|
343
309
|
/**
|