@aztec/key-store 0.40.1 → 0.41.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/index.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export * from './test_key_store.js';
1
+ export * from './key_store.js';
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC"}
package/dest/index.js CHANGED
@@ -1,2 +1,2 @@
1
- export * from './test_key_store.js';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxxQkFBcUIsQ0FBQyJ9
1
+ export * from './key_store.js';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxnQkFBZ0IsQ0FBQyJ9
@@ -1,11 +1,10 @@
1
- import { type KeyStore, type PublicKey } from '@aztec/circuit-types';
2
- import { AztecAddress, CompleteAddress, Fr, type GrumpkinPrivateKey, type PartialAddress } from '@aztec/circuits.js';
1
+ import { type PublicKey } from '@aztec/circuit-types';
2
+ import { AztecAddress, CompleteAddress, Fq, Fr, type GrumpkinPrivateKey, type KeyGenerator, KeyValidationRequest, type PartialAddress } from '@aztec/circuits.js';
3
3
  import { type AztecKVStore } from '@aztec/kv-store';
4
4
  /**
5
- * TestKeyStore is an implementation of the KeyStore interface, used for managing key pairs in a testing environment.
6
- * It should be utilized in testing scenarios where secure key management is not required, and ease-of-use is prioritized.
5
+ * Used for managing keys. Can hold keys of multiple accounts and allows for key rotation.
7
6
  */
8
- export declare class TestKeyStore implements KeyStore {
7
+ export declare class KeyStore {
9
8
  #private;
10
9
  constructor(database: AztecKVStore);
11
10
  /**
@@ -26,12 +25,13 @@ export declare class TestKeyStore implements KeyStore {
26
25
  */
27
26
  getAccounts(): Promise<AztecAddress[]>;
28
27
  /**
29
- * Gets the master nullifier public key for a given account.
30
- * @throws If the account does not exist in the key store.
31
- * @param account - The account address for which to retrieve the master nullifier public key.
32
- * @returns The master nullifier public key for the account.
28
+ * Gets the key validation request for a given master public key hash and contract address.
29
+ * @throws If the account corresponding to the master public key hash does not exist in the key store.
30
+ * @param pkMHash - The master public key hash.
31
+ * @param contractAddress - The contract address to silo the secret key in the the key validation request with.
32
+ * @returns The key validation request.
33
33
  */
34
- getMasterNullifierPublicKey(account: AztecAddress): Promise<PublicKey>;
34
+ getKeyValidationRequest(pkMHash: Fr, contractAddress: AztecAddress): Promise<KeyValidationRequest>;
35
35
  /**
36
36
  * Gets the master incoming viewing public key for a given account.
37
37
  * @throws If the account does not exist in the key store.
@@ -53,14 +53,6 @@ export declare class TestKeyStore implements KeyStore {
53
53
  * @returns A Promise that resolves to the master tagging key.
54
54
  */
55
55
  getMasterTaggingPublicKey(account: AztecAddress): Promise<PublicKey>;
56
- /**
57
- * Retrieves application nullifier secret key.
58
- * @throws If the account does not exist in the key store.
59
- * @param account - The account to retrieve the application nullifier secret key for.
60
- * @param app - The application address to retrieve the nullifier secret key for.
61
- * @returns A Promise that resolves to the application nullifier secret key.
62
- */
63
- getAppNullifierSecretKey(account: AztecAddress, app: AztecAddress): Promise<Fr>;
64
56
  /**
65
57
  * Retrieves application incoming viewing secret key.
66
58
  * @throws If the account does not exist in the key store.
@@ -78,14 +70,13 @@ export declare class TestKeyStore implements KeyStore {
78
70
  */
79
71
  getAppOutgoingViewingSecretKey(account: AztecAddress, app: AztecAddress): Promise<Fr>;
80
72
  /**
81
- * Retrieves the master nullifier secret key (nsk_m) corresponding to the specified master nullifier public key
82
- * (Npk_m).
73
+ * Retrieves the sk_m for the pk_m and a generator index of the key type.
83
74
  * @throws If the provided public key is not associated with any of the registered accounts.
84
- * @param masterNullifierPublicKey - 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.
75
+ * @param pkM - The master public key to get secret key for.
76
+ * @returns A Promise that resolves to sk_m.
77
+ * @dev Used when feeding the sk_m to the kernel circuit for keys verification.
87
78
  */
88
- getMasterNullifierSecretKeyForPublicKey(masterNullifierPublicKey: PublicKey): Promise<GrumpkinPrivateKey>;
79
+ getMasterSecretKeyAndAppKeyGenerator(pkM: PublicKey): Promise<[GrumpkinPrivateKey, KeyGenerator]>;
89
80
  /**
90
81
  * Retrieves the master incoming viewing secret key (ivsk_m) corresponding to the specified master incoming viewing
91
82
  * public key (Ivpk_m).
@@ -96,11 +87,17 @@ export declare class TestKeyStore implements KeyStore {
96
87
  */
97
88
  getMasterIncomingViewingSecretKeyForPublicKey(masterIncomingViewingPublicKey: PublicKey): Promise<GrumpkinPrivateKey>;
98
89
  /**
99
- * Retrieves public keys hash of the account
100
- * @throws If the provided account address is not associated with any of the registered accounts.
101
- * @param account - The account address to get public keys hash for.
102
- * @returns A Promise that resolves to the public keys hash.
90
+ * Rotates the master nullifier key for the specified account.
91
+ *
92
+ * @dev This function updates the secret and public keys associated with the account.
93
+ * It appends a new secret key to the existing secret keys, derives the
94
+ * corresponding public key, and updates the stored keys accordingly.
95
+ *
96
+ * @param account - The account address for which the master nullifier key is being rotated.
97
+ * @param newSecretKey - (Optional) A new secret key of type Fq. If not provided, a random key is generated.
98
+ * @throws If the account does not have existing nullifier secret keys or public keys.
99
+ * @returns A Promise that resolves when the key rotation is complete.
103
100
  */
104
- getPublicKeysHash(account: AztecAddress): Promise<Fr>;
101
+ rotateMasterNullifierKey(account: AztecAddress, newSecretKey?: Fq): Promise<void>;
105
102
  }
106
- //# sourceMappingURL=test_key_store.d.ts.map
103
+ //# sourceMappingURL=key_store.d.ts.map
@@ -0,0 +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,EAGvB,KAAK,YAAY,EAEjB,oBAAoB,EACpB,KAAK,cAAc,EAOpB,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,oCAAoC,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAC;IAkCxG;;;;;;;OAOG;IACI,6CAA6C,CAClD,8BAA8B,EAAE,SAAS,GACxC,OAAO,CAAC,kBAAkB,CAAC;IAoB9B;;;;;;;;;;;OAWG;IACU,wBAAwB,CAAC,OAAO,EAAE,YAAY,EAAE,YAAY,GAAE,EAAgB;CAgD5F"}
@@ -0,0 +1,293 @@
1
+ var _KeyStore_instances, _KeyStore_keys, _KeyStore_getKeyPrefixAndAccount, _KeyStore_appendValue, _KeyStore_calculateNumKeys;
2
+ import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
3
+ import { AztecAddress, CompleteAddress, Fq, Fr, GeneratorIndex, GrumpkinScalar, KEY_PREFIXES, KeyValidationRequest, Point, computeAddress, computeAppSecretKey, deriveKeys, derivePublicKeyFromSecretKey, getKeyGenerator, } from '@aztec/circuits.js';
4
+ import { poseidon2Hash } from '@aztec/foundation/crypto';
5
+ import { serializeToBuffer } from '@aztec/foundation/serialize';
6
+ /**
7
+ * Used for managing keys. Can hold keys of multiple accounts and allows for key rotation.
8
+ */
9
+ export class KeyStore {
10
+ constructor(database) {
11
+ _KeyStore_instances.add(this);
12
+ _KeyStore_keys.set(this, void 0);
13
+ __classPrivateFieldSet(this, _KeyStore_keys, database.openMap('key_store'), "f");
14
+ }
15
+ /**
16
+ * Creates a new account from a randomly generated secret key.
17
+ * @returns A promise that resolves to the newly created account's CompleteAddress.
18
+ */
19
+ createAccount() {
20
+ const sk = Fr.random();
21
+ const partialAddress = Fr.random();
22
+ return this.addAccount(sk, partialAddress);
23
+ }
24
+ /**
25
+ * Adds an account to the key store from the provided secret key.
26
+ * @param sk - The secret key of the account.
27
+ * @param partialAddress - The partial address of the account.
28
+ * @returns The account's complete address.
29
+ */
30
+ async addAccount(sk, partialAddress) {
31
+ const { masterNullifierSecretKey, masterIncomingViewingSecretKey, masterOutgoingViewingSecretKey, masterTaggingSecretKey, publicKeys, } = deriveKeys(sk);
32
+ const publicKeysHash = publicKeys.hash();
33
+ const account = computeAddress(publicKeysHash, partialAddress);
34
+ // Naming of keys is as follows ${account}-${n/iv/ov/t}${sk/pk}_m
35
+ await __classPrivateFieldGet(this, _KeyStore_keys, "f").set(`${account.toString()}-ivsk_m`, masterIncomingViewingSecretKey.toBuffer());
36
+ await __classPrivateFieldGet(this, _KeyStore_keys, "f").set(`${account.toString()}-ovsk_m`, masterOutgoingViewingSecretKey.toBuffer());
37
+ await __classPrivateFieldGet(this, _KeyStore_keys, "f").set(`${account.toString()}-tsk_m`, masterTaggingSecretKey.toBuffer());
38
+ await __classPrivateFieldGet(this, _KeyStore_keys, "f").set(`${account.toString()}-nsk_m`, masterNullifierSecretKey.toBuffer());
39
+ await __classPrivateFieldGet(this, _KeyStore_keys, "f").set(`${account.toString()}-npk_m`, publicKeys.masterNullifierPublicKey.toBuffer());
40
+ await __classPrivateFieldGet(this, _KeyStore_keys, "f").set(`${account.toString()}-ivpk_m`, publicKeys.masterIncomingViewingPublicKey.toBuffer());
41
+ await __classPrivateFieldGet(this, _KeyStore_keys, "f").set(`${account.toString()}-ovpk_m`, publicKeys.masterOutgoingViewingPublicKey.toBuffer());
42
+ await __classPrivateFieldGet(this, _KeyStore_keys, "f").set(`${account.toString()}-tpk_m`, publicKeys.masterTaggingPublicKey.toBuffer());
43
+ // We store pk_m_hash under `account-{n/iv/ov/t}pk_m_hash` key to be able to obtain address and key prefix
44
+ // using the #getKeyPrefixAndAccount function later on
45
+ await __classPrivateFieldGet(this, _KeyStore_keys, "f").set(`${account.toString()}-npk_m_hash`, publicKeys.masterNullifierPublicKey.hash().toBuffer());
46
+ await __classPrivateFieldGet(this, _KeyStore_keys, "f").set(`${account.toString()}-ivpk_m_hash`, publicKeys.masterIncomingViewingPublicKey.hash().toBuffer());
47
+ await __classPrivateFieldGet(this, _KeyStore_keys, "f").set(`${account.toString()}-ovpk_m_hash`, publicKeys.masterOutgoingViewingPublicKey.hash().toBuffer());
48
+ await __classPrivateFieldGet(this, _KeyStore_keys, "f").set(`${account.toString()}-tpk_m_hash`, publicKeys.masterTaggingPublicKey.hash().toBuffer());
49
+ // At last, we return the newly derived account address
50
+ return Promise.resolve(new CompleteAddress(account, publicKeys, partialAddress));
51
+ }
52
+ /**
53
+ * Retrieves addresses of accounts stored in the key store.
54
+ * @returns A Promise that resolves to an array of account addresses.
55
+ */
56
+ getAccounts() {
57
+ const allMapKeys = Array.from(__classPrivateFieldGet(this, _KeyStore_keys, "f").keys());
58
+ // We return account addresses based on the map keys that end with '-ivsk_m'
59
+ const accounts = allMapKeys.filter(key => key.endsWith('-ivsk_m')).map(key => key.split('-')[0]);
60
+ return Promise.resolve(accounts.map(account => AztecAddress.fromString(account)));
61
+ }
62
+ /**
63
+ * Gets the key validation request for a given master public key hash and contract address.
64
+ * @throws If the account corresponding to the master public key hash does not exist in the key store.
65
+ * @param pkMHash - The master public key hash.
66
+ * @param contractAddress - The contract address to silo the secret key in the the key validation request with.
67
+ * @returns The key validation request.
68
+ */
69
+ getKeyValidationRequest(pkMHash, contractAddress) {
70
+ const [keyPrefix, account] = __classPrivateFieldGet(this, _KeyStore_instances, "m", _KeyStore_getKeyPrefixAndAccount).call(this, pkMHash);
71
+ // Now we find the master public key for the account
72
+ // Since each public keys buffer contains multiple public keys, we need to find the one that matches the hash.
73
+ // Then we store the index of the key in the buffer to be able to quickly obtain the corresponding secret key.
74
+ let pkM;
75
+ let keyIndexInBuffer = 0;
76
+ {
77
+ const pkMsBuffer = __classPrivateFieldGet(this, _KeyStore_keys, "f").get(`${account.toString()}-${keyPrefix}pk_m`);
78
+ if (!pkMsBuffer) {
79
+ throw new Error(`Could not find ${keyPrefix}pk_m for account ${account.toString()} whose address was successfully obtained with ${keyPrefix}pk_m_hash ${pkMHash.toString()}.`);
80
+ }
81
+ // Now we iterate over the public keys in the buffer to find the one that matches the hash
82
+ const numKeys = __classPrivateFieldGet(this, _KeyStore_instances, "m", _KeyStore_calculateNumKeys).call(this, pkMsBuffer, Point);
83
+ for (; keyIndexInBuffer < numKeys; keyIndexInBuffer++) {
84
+ const foundPkM = Point.fromBuffer(pkMsBuffer.subarray(keyIndexInBuffer * Point.SIZE_IN_BYTES, (keyIndexInBuffer + 1) * Point.SIZE_IN_BYTES));
85
+ if (foundPkM.hash().equals(pkMHash)) {
86
+ pkM = foundPkM;
87
+ break;
88
+ }
89
+ }
90
+ if (!pkM) {
91
+ throw new Error(`Could not find ${keyPrefix}pkM for ${keyPrefix}pk_m_hash ${pkMHash.toString()}.`);
92
+ }
93
+ }
94
+ // Now we find the secret key for the public key
95
+ let skM;
96
+ {
97
+ const skMsBuffer = __classPrivateFieldGet(this, _KeyStore_keys, "f").get(`${account.toString()}-${keyPrefix}sk_m`);
98
+ if (!skMsBuffer) {
99
+ throw new Error(`Could not find ${keyPrefix}sk_m for account ${account.toString()} whose address was successfully obtained with ${keyPrefix}pk_m_hash ${pkMHash.toString()}.`);
100
+ }
101
+ skM = GrumpkinScalar.fromBuffer(skMsBuffer.subarray(keyIndexInBuffer * GrumpkinScalar.SIZE_IN_BYTES, (keyIndexInBuffer + 1) * GrumpkinScalar.SIZE_IN_BYTES));
102
+ }
103
+ // We sanity check that it's possible to derive the public key from the secret key
104
+ if (!derivePublicKeyFromSecretKey(skM).equals(pkM)) {
105
+ throw new Error(`Could not derive ${keyPrefix}pkM from ${keyPrefix}skM.`);
106
+ }
107
+ // At last we silo the secret key and return the key validation request
108
+ const skApp = computeAppSecretKey(skM, contractAddress, keyPrefix);
109
+ return Promise.resolve(new KeyValidationRequest(pkM, skApp));
110
+ }
111
+ /**
112
+ * Gets the master incoming viewing public key for a given account.
113
+ * @throws If the account does not exist in the key store.
114
+ * @param account - The account address for which to retrieve the master incoming viewing public key.
115
+ * @returns The master incoming viewing public key for the account.
116
+ */
117
+ async getMasterIncomingViewingPublicKey(account) {
118
+ const masterIncomingViewingPublicKeyBuffer = __classPrivateFieldGet(this, _KeyStore_keys, "f").get(`${account.toString()}-ivpk_m`);
119
+ if (!masterIncomingViewingPublicKeyBuffer) {
120
+ throw new Error(`Account ${account.toString()} does not exist. Registered accounts: ${await this.getAccounts()}.`);
121
+ }
122
+ return Promise.resolve(Point.fromBuffer(masterIncomingViewingPublicKeyBuffer));
123
+ }
124
+ /**
125
+ * Retrieves the master outgoing viewing public key.
126
+ * @throws If the account does not exist in the key store.
127
+ * @param account - The account to retrieve the master outgoing viewing key for.
128
+ * @returns A Promise that resolves to the master outgoing viewing key.
129
+ */
130
+ async getMasterOutgoingViewingPublicKey(account) {
131
+ const masterOutgoingViewingPublicKeyBuffer = __classPrivateFieldGet(this, _KeyStore_keys, "f").get(`${account.toString()}-ovpk_m`);
132
+ if (!masterOutgoingViewingPublicKeyBuffer) {
133
+ throw new Error(`Account ${account.toString()} does not exist. Registered accounts: ${await this.getAccounts()}.`);
134
+ }
135
+ return Promise.resolve(Point.fromBuffer(masterOutgoingViewingPublicKeyBuffer));
136
+ }
137
+ /**
138
+ * Retrieves the master tagging public key.
139
+ * @throws If the account does not exist in the key store.
140
+ * @param account - The account to retrieve the master tagging key for.
141
+ * @returns A Promise that resolves to the master tagging key.
142
+ */
143
+ async getMasterTaggingPublicKey(account) {
144
+ const masterTaggingPublicKeyBuffer = __classPrivateFieldGet(this, _KeyStore_keys, "f").get(`${account.toString()}-tpk_m`);
145
+ if (!masterTaggingPublicKeyBuffer) {
146
+ throw new Error(`Account ${account.toString()} does not exist. Registered accounts: ${await this.getAccounts()}.`);
147
+ }
148
+ return Promise.resolve(Point.fromBuffer(masterTaggingPublicKeyBuffer));
149
+ }
150
+ /**
151
+ * Retrieves application incoming viewing secret key.
152
+ * @throws If the account does not exist in the key store.
153
+ * @param account - The account to retrieve the application incoming viewing secret key for.
154
+ * @param app - The application address to retrieve the incoming viewing secret key for.
155
+ * @returns A Promise that resolves to the application incoming viewing secret key.
156
+ */
157
+ async getAppIncomingViewingSecretKey(account, app) {
158
+ const masterIncomingViewingSecretKeyBuffer = __classPrivateFieldGet(this, _KeyStore_keys, "f").get(`${account.toString()}-ivsk_m`);
159
+ if (!masterIncomingViewingSecretKeyBuffer) {
160
+ throw new Error(`Account ${account.toString()} does not exist. Registered accounts: ${await this.getAccounts()}.`);
161
+ }
162
+ const masterIncomingViewingSecretKey = GrumpkinScalar.fromBuffer(masterIncomingViewingSecretKeyBuffer);
163
+ return Promise.resolve(poseidon2Hash([
164
+ masterIncomingViewingSecretKey.high,
165
+ masterIncomingViewingSecretKey.low,
166
+ app,
167
+ GeneratorIndex.IVSK_M,
168
+ ]));
169
+ }
170
+ /**
171
+ * Retrieves application outgoing viewing secret key.
172
+ * @throws If the account does not exist in the key store.
173
+ * @param account - The account to retrieve the application outgoing viewing secret key for.
174
+ * @param app - The application address to retrieve the outgoing viewing secret key for.
175
+ * @returns A Promise that resolves to the application outgoing viewing secret key.
176
+ */
177
+ async getAppOutgoingViewingSecretKey(account, app) {
178
+ const masterOutgoingViewingSecretKeyBuffer = __classPrivateFieldGet(this, _KeyStore_keys, "f").get(`${account.toString()}-ovsk_m`);
179
+ if (!masterOutgoingViewingSecretKeyBuffer) {
180
+ throw new Error(`Account ${account.toString()} does not exist. Registered accounts: ${await this.getAccounts()}.`);
181
+ }
182
+ const masterOutgoingViewingSecretKey = GrumpkinScalar.fromBuffer(masterOutgoingViewingSecretKeyBuffer);
183
+ return Promise.resolve(poseidon2Hash([
184
+ masterOutgoingViewingSecretKey.high,
185
+ masterOutgoingViewingSecretKey.low,
186
+ app,
187
+ GeneratorIndex.OVSK_M,
188
+ ]));
189
+ }
190
+ /**
191
+ * Retrieves the sk_m for the pk_m and a generator index of the key type.
192
+ * @throws If the provided public key is not associated with any of the registered accounts.
193
+ * @param pkM - The master public key to get secret key for.
194
+ * @returns A Promise that resolves to sk_m.
195
+ * @dev Used when feeding the sk_m to the kernel circuit for keys verification.
196
+ */
197
+ getMasterSecretKeyAndAppKeyGenerator(pkM) {
198
+ const [keyPrefix, account] = __classPrivateFieldGet(this, _KeyStore_instances, "m", _KeyStore_getKeyPrefixAndAccount).call(this, pkM);
199
+ // We get the secret keys buffer and iterate over the values in the buffer to find the one that matches pkM
200
+ let sk;
201
+ {
202
+ const secretKeysBuffer = __classPrivateFieldGet(this, _KeyStore_keys, "f").get(`${account.toString()}-${keyPrefix}sk_m`);
203
+ if (!secretKeysBuffer) {
204
+ throw new Error(`Could not find ${keyPrefix}sk_m for ${keyPrefix}pk_m ${pkM.toString()}. This should not happen.`);
205
+ }
206
+ const numKeys = __classPrivateFieldGet(this, _KeyStore_instances, "m", _KeyStore_calculateNumKeys).call(this, secretKeysBuffer, GrumpkinScalar);
207
+ for (let i = 0; i < numKeys; i++) {
208
+ const foundSk = GrumpkinScalar.fromBuffer(secretKeysBuffer.subarray(i * GrumpkinScalar.SIZE_IN_BYTES, (i + 1) * GrumpkinScalar.SIZE_IN_BYTES));
209
+ if (derivePublicKeyFromSecretKey(foundSk).equals(pkM)) {
210
+ sk = foundSk;
211
+ break;
212
+ }
213
+ }
214
+ if (!sk) {
215
+ throw new Error(`Could not find ${keyPrefix}skM for ${keyPrefix}pkM ${pkM.toString()} in secret keys buffer.`);
216
+ }
217
+ }
218
+ // Now we determine the key type and return generator accordingly
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()}`);
245
+ }
246
+ /**
247
+ * Rotates the master nullifier key for the specified account.
248
+ *
249
+ * @dev This function updates the secret and public keys associated with the account.
250
+ * It appends a new secret key to the existing secret keys, derives the
251
+ * corresponding public key, and updates the stored keys accordingly.
252
+ *
253
+ * @param account - The account address for which the master nullifier key is being rotated.
254
+ * @param newSecretKey - (Optional) A new secret key of type Fq. If not provided, a random key is generated.
255
+ * @throws If the account does not have existing nullifier secret keys or public keys.
256
+ * @returns A Promise that resolves when the key rotation is complete.
257
+ */
258
+ async rotateMasterNullifierKey(account, newSecretKey = Fq.random()) {
259
+ // We append the secret key to the array of secret keys
260
+ await __classPrivateFieldGet(this, _KeyStore_instances, "m", _KeyStore_appendValue).call(this, `${account.toString()}-nsk_m`, newSecretKey);
261
+ // Now we derive the public key from the new secret key and append it to the buffer of original public keys
262
+ const newPublicKey = derivePublicKeyFromSecretKey(newSecretKey);
263
+ await __classPrivateFieldGet(this, _KeyStore_instances, "m", _KeyStore_appendValue).call(this, `${account.toString()}-npk_m`, newPublicKey);
264
+ // At last we store npk_m_hash under `account-npk_m_hash` key to be able to obtain address and key prefix
265
+ // using the #getKeyPrefixAndAccount function later on
266
+ await __classPrivateFieldGet(this, _KeyStore_instances, "m", _KeyStore_appendValue).call(this, `${account.toString()}-npk_m_hash`, newPublicKey.hash());
267
+ }
268
+ }
269
+ _KeyStore_keys = new WeakMap(), _KeyStore_instances = new WeakSet(), _KeyStore_getKeyPrefixAndAccount = function _KeyStore_getKeyPrefixAndAccount(value) {
270
+ const valueBuffer = serializeToBuffer(value);
271
+ for (const [key, val] of __classPrivateFieldGet(this, _KeyStore_keys, "f").entries()) {
272
+ // `val` can contain multiple values due to key rotation so we check if the value is in the buffer instead
273
+ // of just calling `.equals(...)`
274
+ if (val.includes(valueBuffer)) {
275
+ for (const prefix of KEY_PREFIXES) {
276
+ if (key.includes(`-${prefix}`)) {
277
+ const account = AztecAddress.fromString(key.split('-')[0]);
278
+ return [prefix, account];
279
+ }
280
+ }
281
+ }
282
+ }
283
+ throw new Error(`Could not find key prefix.`);
284
+ }, _KeyStore_appendValue = async function _KeyStore_appendValue(key, value) {
285
+ const currentValue = __classPrivateFieldGet(this, _KeyStore_keys, "f").get(key);
286
+ if (!currentValue) {
287
+ throw new Error(`Could not find current value for key ${key}`);
288
+ }
289
+ await __classPrivateFieldGet(this, _KeyStore_keys, "f").set(key, serializeToBuffer([currentValue, value]));
290
+ }, _KeyStore_calculateNumKeys = function _KeyStore_calculateNumKeys(buf, T) {
291
+ return buf.byteLength / T.SIZE_IN_BYTES;
292
+ };
293
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5X3N0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2tleV9zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLE9BQU8sRUFDTCxZQUFZLEVBQ1osZUFBZSxFQUNmLEVBQUUsRUFDRixFQUFFLEVBQ0YsY0FBYyxFQUVkLGNBQWMsRUFDZCxZQUFZLEVBR1osb0JBQW9CLEVBRXBCLEtBQUssRUFDTCxjQUFjLEVBQ2QsbUJBQW1CLEVBQ25CLFVBQVUsRUFDViw0QkFBNEIsRUFDNUIsZUFBZSxHQUNoQixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQW1CLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFHakY7O0dBRUc7QUFDSCxNQUFNLE9BQU8sUUFBUTtJQUduQixZQUFZLFFBQXNCOztRQUZsQyxpQ0FBZ0M7UUFHOUIsdUJBQUEsSUFBSSxrQkFBUyxRQUFRLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFBLENBQUM7SUFDN0MsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGFBQWE7UUFDbEIsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNuQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBTSxFQUFFLGNBQThCO1FBQzVELE1BQU0sRUFDSix3QkFBd0IsRUFDeEIsOEJBQThCLEVBQzlCLDhCQUE4QixFQUM5QixzQkFBc0IsRUFDdEIsVUFBVSxHQUNYLEdBQUcsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRW5CLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxJQUFJLEVB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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/key-store",
3
- "version": "0.40.1",
3
+ "version": "0.41.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.40.1",
49
- "@aztec/circuits.js": "0.40.1",
50
- "@aztec/foundation": "0.40.1",
51
- "@aztec/kv-store": "0.40.1",
48
+ "@aztec/circuit-types": "0.41.0",
49
+ "@aztec/circuits.js": "0.41.0",
50
+ "@aztec/foundation": "0.41.0",
51
+ "@aztec/kv-store": "0.41.0",
52
52
  "tslib": "^2.4.0"
53
53
  },
54
54
  "devDependencies": {
package/src/index.ts CHANGED
@@ -1 +1 @@
1
- export * from './test_key_store.js';
1
+ export * from './key_store.js';