@aztec/key-store 0.55.1 → 0.57.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 +2 -15
- package/dest/key_store.d.ts.map +1 -1
- package/dest/key_store.js +23 -83
- package/package.json +8 -5
- package/src/key_store.ts +26 -105
package/dest/key_store.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { type PublicKey } from '@aztec/circuit-types';
|
|
2
|
-
import { AztecAddress, CompleteAddress,
|
|
2
|
+
import { AztecAddress, CompleteAddress, Fr, GrumpkinScalar, KeyValidationRequest, type PartialAddress } from '@aztec/circuits.js';
|
|
3
3
|
import { type AztecKVStore } from '@aztec/kv-store';
|
|
4
4
|
/**
|
|
5
|
-
* Used for managing keys. Can hold keys of multiple accounts
|
|
5
|
+
* Used for managing keys. Can hold keys of multiple accounts.
|
|
6
6
|
*/
|
|
7
7
|
export declare class KeyStore {
|
|
8
8
|
#private;
|
|
@@ -77,18 +77,5 @@ export declare class KeyStore {
|
|
|
77
77
|
* @dev Used when feeding the sk_m to the kernel circuit for keys verification.
|
|
78
78
|
*/
|
|
79
79
|
getMasterSecretKey(pkM: PublicKey): Promise<GrumpkinScalar>;
|
|
80
|
-
/**
|
|
81
|
-
* Rotates the master nullifier key for the specified account.
|
|
82
|
-
*
|
|
83
|
-
* @dev This function updates the secret and public keys associated with the account.
|
|
84
|
-
* It appends a new secret key to the existing secret keys, derives the
|
|
85
|
-
* corresponding public key, and updates the stored keys accordingly.
|
|
86
|
-
*
|
|
87
|
-
* @param account - The account address for which the master nullifier key is being rotated.
|
|
88
|
-
* @param newSecretKey - (Optional) A new secret key of type Fq. If not provided, a random key is generated.
|
|
89
|
-
* @throws If the account does not have existing nullifier secret keys or public keys.
|
|
90
|
-
* @returns A Promise that resolves when the key rotation is complete.
|
|
91
|
-
*/
|
|
92
|
-
rotateMasterNullifierKey(account: AztecAddress, newSecretKey?: Fq): Promise<void>;
|
|
93
80
|
}
|
|
94
81
|
//# sourceMappingURL=key_store.d.ts.map
|
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,
|
|
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,EAEF,cAAc,EAGd,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;IAsCzG;;;;;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;IAiBlG;;;;;;OAMG;IACU,8BAA8B,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,EAAE,CAAC;IAiBlG;;;;;;OAMG;IACI,kBAAkB,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC;CAsCnE"}
|
package/dest/key_store.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
var _KeyStore_instances, _KeyStore_keys, _KeyStore_getKeyPrefixAndAccount
|
|
1
|
+
var _KeyStore_instances, _KeyStore_keys, _KeyStore_getKeyPrefixAndAccount;
|
|
2
2
|
import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
|
|
3
|
-
import { AztecAddress, CompleteAddress,
|
|
3
|
+
import { AztecAddress, CompleteAddress, Fr, GeneratorIndex, GrumpkinScalar, KEY_PREFIXES, KeyValidationRequest, Point, computeAddress, computeAppSecretKey, deriveKeys, derivePublicKeyFromSecretKey, } from '@aztec/circuits.js';
|
|
4
4
|
import { poseidon2HashWithSeparator } from '@aztec/foundation/crypto';
|
|
5
5
|
import { serializeToBuffer } from '@aztec/foundation/serialize';
|
|
6
6
|
/**
|
|
7
|
-
* Used for managing keys. Can hold keys of multiple accounts
|
|
7
|
+
* Used for managing keys. Can hold keys of multiple accounts.
|
|
8
8
|
*/
|
|
9
9
|
export class KeyStore {
|
|
10
10
|
constructor(database) {
|
|
@@ -69,37 +69,20 @@ export class KeyStore {
|
|
|
69
69
|
getKeyValidationRequest(pkMHash, contractAddress) {
|
|
70
70
|
const [keyPrefix, account] = __classPrivateFieldGet(this, _KeyStore_instances, "m", _KeyStore_getKeyPrefixAndAccount).call(this, pkMHash);
|
|
71
71
|
// Now we find the master public key for the account
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
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
|
-
}
|
|
72
|
+
const pkMBuffer = __classPrivateFieldGet(this, _KeyStore_keys, "f").get(`${account.toString()}-${keyPrefix}pk_m`);
|
|
73
|
+
if (!pkMBuffer) {
|
|
74
|
+
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()}.`);
|
|
75
|
+
}
|
|
76
|
+
const pkM = Point.fromBuffer(pkMBuffer);
|
|
77
|
+
if (!pkM.hash().equals(pkMHash)) {
|
|
78
|
+
throw new Error(`Could not find ${keyPrefix}pkM for ${keyPrefix}pk_m_hash ${pkMHash.toString()}.`);
|
|
93
79
|
}
|
|
94
80
|
// Now we find the secret key for the public key
|
|
95
|
-
|
|
96
|
-
{
|
|
97
|
-
|
|
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));
|
|
81
|
+
const skMBuffer = __classPrivateFieldGet(this, _KeyStore_keys, "f").get(`${account.toString()}-${keyPrefix}sk_m`);
|
|
82
|
+
if (!skMBuffer) {
|
|
83
|
+
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()}.`);
|
|
102
84
|
}
|
|
85
|
+
const skM = GrumpkinScalar.fromBuffer(skMBuffer);
|
|
103
86
|
// We sanity check that it's possible to derive the public key from the secret key
|
|
104
87
|
if (!derivePublicKeyFromSecretKey(skM).equals(pkM)) {
|
|
105
88
|
throw new Error(`Could not derive ${keyPrefix}pkM from ${keyPrefix}skM.`);
|
|
@@ -186,56 +169,21 @@ export class KeyStore {
|
|
|
186
169
|
*/
|
|
187
170
|
getMasterSecretKey(pkM) {
|
|
188
171
|
const [keyPrefix, account] = __classPrivateFieldGet(this, _KeyStore_instances, "m", _KeyStore_getKeyPrefixAndAccount).call(this, pkM);
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
}
|
|
196
|
-
const numKeys = __classPrivateFieldGet(this, _KeyStore_instances, "m", _KeyStore_calculateNumKeys).call(this, secretKeysBuffer, GrumpkinScalar);
|
|
197
|
-
for (let i = 0; i < numKeys; i++) {
|
|
198
|
-
const foundSkM = GrumpkinScalar.fromBuffer(secretKeysBuffer.subarray(i * GrumpkinScalar.SIZE_IN_BYTES, (i + 1) * GrumpkinScalar.SIZE_IN_BYTES));
|
|
199
|
-
if (derivePublicKeyFromSecretKey(foundSkM).equals(pkM)) {
|
|
200
|
-
skM = foundSkM;
|
|
201
|
-
break;
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
if (!skM) {
|
|
205
|
-
throw new Error(`Could not find ${keyPrefix}skM for ${keyPrefix}pkM ${pkM.toString()} in secret keys buffer.`);
|
|
206
|
-
}
|
|
172
|
+
const secretKeyBuffer = __classPrivateFieldGet(this, _KeyStore_keys, "f").get(`${account.toString()}-${keyPrefix}sk_m`);
|
|
173
|
+
if (!secretKeyBuffer) {
|
|
174
|
+
throw new Error(`Could not find ${keyPrefix}sk_m for ${keyPrefix}pk_m ${pkM.toString()}. This should not happen.`);
|
|
175
|
+
}
|
|
176
|
+
const skM = GrumpkinScalar.fromBuffer(secretKeyBuffer);
|
|
177
|
+
if (!derivePublicKeyFromSecretKey(skM).equals(pkM)) {
|
|
178
|
+
throw new Error(`Could not find ${keyPrefix}skM for ${keyPrefix}pkM ${pkM.toString()} in secret keys buffer.`);
|
|
207
179
|
}
|
|
208
180
|
return Promise.resolve(skM);
|
|
209
181
|
}
|
|
210
|
-
/**
|
|
211
|
-
* Rotates the master nullifier key for the specified account.
|
|
212
|
-
*
|
|
213
|
-
* @dev This function updates the secret and public keys associated with the account.
|
|
214
|
-
* It appends a new secret key to the existing secret keys, derives the
|
|
215
|
-
* corresponding public key, and updates the stored keys accordingly.
|
|
216
|
-
*
|
|
217
|
-
* @param account - The account address for which the master nullifier key is being rotated.
|
|
218
|
-
* @param newSecretKey - (Optional) A new secret key of type Fq. If not provided, a random key is generated.
|
|
219
|
-
* @throws If the account does not have existing nullifier secret keys or public keys.
|
|
220
|
-
* @returns A Promise that resolves when the key rotation is complete.
|
|
221
|
-
*/
|
|
222
|
-
async rotateMasterNullifierKey(account, newSecretKey = Fq.random()) {
|
|
223
|
-
// We append the secret key to the array of secret keys
|
|
224
|
-
await __classPrivateFieldGet(this, _KeyStore_instances, "m", _KeyStore_appendValue).call(this, `${account.toString()}-nsk_m`, newSecretKey);
|
|
225
|
-
// Now we derive the public key from the new secret key and append it to the buffer of original public keys
|
|
226
|
-
const newPublicKey = derivePublicKeyFromSecretKey(newSecretKey);
|
|
227
|
-
await __classPrivateFieldGet(this, _KeyStore_instances, "m", _KeyStore_appendValue).call(this, `${account.toString()}-npk_m`, newPublicKey);
|
|
228
|
-
// At last we store npk_m_hash under `account-npk_m_hash` key to be able to obtain address and key prefix
|
|
229
|
-
// using the #getKeyPrefixAndAccount function later on
|
|
230
|
-
await __classPrivateFieldGet(this, _KeyStore_instances, "m", _KeyStore_appendValue).call(this, `${account.toString()}-npk_m_hash`, newPublicKey.hash());
|
|
231
|
-
}
|
|
232
182
|
}
|
|
233
183
|
_KeyStore_keys = new WeakMap(), _KeyStore_instances = new WeakSet(), _KeyStore_getKeyPrefixAndAccount = function _KeyStore_getKeyPrefixAndAccount(value) {
|
|
234
184
|
const valueBuffer = serializeToBuffer(value);
|
|
235
185
|
for (const [key, val] of __classPrivateFieldGet(this, _KeyStore_keys, "f").entries()) {
|
|
236
|
-
|
|
237
|
-
// of just calling `.equals(...)`
|
|
238
|
-
if (val.includes(valueBuffer)) {
|
|
186
|
+
if (val.equals(valueBuffer)) {
|
|
239
187
|
for (const prefix of KEY_PREFIXES) {
|
|
240
188
|
if (key.includes(`-${prefix}`)) {
|
|
241
189
|
const account = AztecAddress.fromString(key.split('-')[0]);
|
|
@@ -245,13 +193,5 @@ _KeyStore_keys = new WeakMap(), _KeyStore_instances = new WeakSet(), _KeyStore_g
|
|
|
245
193
|
}
|
|
246
194
|
}
|
|
247
195
|
throw new Error(`Could not find key prefix.`);
|
|
248
|
-
}, _KeyStore_appendValue = async function _KeyStore_appendValue(key, value) {
|
|
249
|
-
const currentValue = __classPrivateFieldGet(this, _KeyStore_keys, "f").get(key);
|
|
250
|
-
if (!currentValue) {
|
|
251
|
-
throw new Error(`Could not find current value for key ${key}`);
|
|
252
|
-
}
|
|
253
|
-
await __classPrivateFieldGet(this, _KeyStore_keys, "f").set(key, serializeToBuffer([currentValue, value]));
|
|
254
|
-
}, _KeyStore_calculateNumKeys = function _KeyStore_calculateNumKeys(buf, T) {
|
|
255
|
-
return buf.byteLength / T.SIZE_IN_BYTES;
|
|
256
196
|
};
|
|
257
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5X3N0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2tleV9zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLE9BQU8sRUFDTCxZQUFZLEVBQ1osZUFBZSxFQUNmLEVBQUUsRUFDRixFQUFFLEVBQ0YsY0FBYyxFQUNkLGNBQWMsRUFDZCxZQUFZLEVBRVosb0JBQW9CLEVBRXBCLEtBQUssRUFDTCxjQUFjLEVBQ2QsbUJBQW1CLEVBQ25CLFVBQVUsRUFDViw0QkFBNEIsR0FDN0IsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RSxPQUFPLEVBQW1CLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFHakY7O0dBRUc7QUFDSCxNQUFNLE9BQU8sUUFBUTtJQUduQixZQUFZLFFBQXNCOztRQUZsQyxpQ0FBZ0M7UUFHOUIsdUJBQUEsSUFBSSxrQkFBUyxRQUFRLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFBLENBQUM7SUFDN0MsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGFBQWE7UUFDbEIsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNuQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBTSxFQUFFLGNBQThCO1FBQzVELE1BQU0sRUFDSix3QkFBd0IsRUFDeEIsOEJBQThCLEVBQzlCLDhCQUE4QixFQUM5QixzQkFBc0IsRUFDdEIsVUFBVSxHQUNYLEdBQUcsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRW5CLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztR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
|
|
197
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5X3N0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2tleV9zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLE9BQU8sRUFDTCxZQUFZLEVBQ1osZUFBZSxFQUNmLEVBQUUsRUFDRixjQUFjLEVBQ2QsY0FBYyxFQUNkLFlBQVksRUFFWixvQkFBb0IsRUFFcEIsS0FBSyxFQUNMLGNBQWMsRUFDZCxtQkFBbUIsRUFDbkIsVUFBVSxFQUNWLDRCQUE0QixHQUM3QixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RFLE9BQU8sRUFBbUIsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUdqRjs7R0FFRztBQUNILE1BQU0sT0FBTyxRQUFRO0lBR25CLFlBQVksUUFBc0I7O1FBRmxDLGlDQUFnQztRQUc5Qix1QkFBQSxJQUFJLGtCQUFTLFFBQVEsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQUEsQ0FBQztJQUM3QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksYUFBYTtRQUNsQixNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdkIsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ25DLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFNLEVBQUUsY0FBOEI7UUFDNUQsTUFBTSxFQUNKLHdCQUF3QixFQUN4Qiw4QkFBOEIsRUFDOUIsOEJBQThCLEVBQzlCLHNCQUFzQixFQUN0QixVQUFVLEdBQ1gsR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFbkIsTUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3pDLE1BQU0s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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.57.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": "./dest/index.js",
|
|
6
6
|
"typedocOptions": {
|
|
@@ -35,6 +35,9 @@
|
|
|
35
35
|
"parser": {
|
|
36
36
|
"syntax": "typescript",
|
|
37
37
|
"decorators": true
|
|
38
|
+
},
|
|
39
|
+
"transform": {
|
|
40
|
+
"decoratorVersion": "2022-03"
|
|
38
41
|
}
|
|
39
42
|
}
|
|
40
43
|
}
|
|
@@ -53,10 +56,10 @@
|
|
|
53
56
|
]
|
|
54
57
|
},
|
|
55
58
|
"dependencies": {
|
|
56
|
-
"@aztec/circuit-types": "0.
|
|
57
|
-
"@aztec/circuits.js": "0.
|
|
58
|
-
"@aztec/foundation": "0.
|
|
59
|
-
"@aztec/kv-store": "0.
|
|
59
|
+
"@aztec/circuit-types": "0.57.0",
|
|
60
|
+
"@aztec/circuits.js": "0.57.0",
|
|
61
|
+
"@aztec/foundation": "0.57.0",
|
|
62
|
+
"@aztec/kv-store": "0.57.0",
|
|
60
63
|
"tslib": "^2.4.0"
|
|
61
64
|
},
|
|
62
65
|
"devDependencies": {
|
package/src/key_store.ts
CHANGED
|
@@ -2,7 +2,6 @@ import { type PublicKey } from '@aztec/circuit-types';
|
|
|
2
2
|
import {
|
|
3
3
|
AztecAddress,
|
|
4
4
|
CompleteAddress,
|
|
5
|
-
Fq,
|
|
6
5
|
Fr,
|
|
7
6
|
GeneratorIndex,
|
|
8
7
|
GrumpkinScalar,
|
|
@@ -21,7 +20,7 @@ import { type Bufferable, serializeToBuffer } from '@aztec/foundation/serialize'
|
|
|
21
20
|
import { type AztecKVStore, type AztecMap } from '@aztec/kv-store';
|
|
22
21
|
|
|
23
22
|
/**
|
|
24
|
-
* Used for managing keys. Can hold keys of multiple accounts
|
|
23
|
+
* Used for managing keys. Can hold keys of multiple accounts.
|
|
25
24
|
*/
|
|
26
25
|
export class KeyStore {
|
|
27
26
|
#keys: AztecMap<string, Buffer>;
|
|
@@ -108,53 +107,29 @@ export class KeyStore {
|
|
|
108
107
|
const [keyPrefix, account] = this.#getKeyPrefixAndAccount(pkMHash);
|
|
109
108
|
|
|
110
109
|
// Now we find the master public key for the account
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
if (!pkMsBuffer) {
|
|
118
|
-
throw new Error(
|
|
119
|
-
`Could not find ${keyPrefix}pk_m for account ${account.toString()} whose address was successfully obtained with ${keyPrefix}pk_m_hash ${pkMHash.toString()}.`,
|
|
120
|
-
);
|
|
121
|
-
}
|
|
110
|
+
const pkMBuffer = this.#keys.get(`${account.toString()}-${keyPrefix}pk_m`);
|
|
111
|
+
if (!pkMBuffer) {
|
|
112
|
+
throw new Error(
|
|
113
|
+
`Could not find ${keyPrefix}pk_m for account ${account.toString()} whose address was successfully obtained with ${keyPrefix}pk_m_hash ${pkMHash.toString()}.`,
|
|
114
|
+
);
|
|
115
|
+
}
|
|
122
116
|
|
|
123
|
-
|
|
124
|
-
const numKeys = this.#calculateNumKeys(pkMsBuffer, Point);
|
|
125
|
-
for (; keyIndexInBuffer < numKeys; keyIndexInBuffer++) {
|
|
126
|
-
const foundPkM = Point.fromBuffer(
|
|
127
|
-
pkMsBuffer.subarray(keyIndexInBuffer * Point.SIZE_IN_BYTES, (keyIndexInBuffer + 1) * Point.SIZE_IN_BYTES),
|
|
128
|
-
);
|
|
129
|
-
if (foundPkM.hash().equals(pkMHash)) {
|
|
130
|
-
pkM = foundPkM;
|
|
131
|
-
break;
|
|
132
|
-
}
|
|
133
|
-
}
|
|
117
|
+
const pkM = Point.fromBuffer(pkMBuffer);
|
|
134
118
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
}
|
|
119
|
+
if (!pkM.hash().equals(pkMHash)) {
|
|
120
|
+
throw new Error(`Could not find ${keyPrefix}pkM for ${keyPrefix}pk_m_hash ${pkMHash.toString()}.`);
|
|
138
121
|
}
|
|
139
122
|
|
|
140
123
|
// Now we find the secret key for the public key
|
|
141
|
-
|
|
142
|
-
{
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
throw new Error(
|
|
146
|
-
`Could not find ${keyPrefix}sk_m for account ${account.toString()} whose address was successfully obtained with ${keyPrefix}pk_m_hash ${pkMHash.toString()}.`,
|
|
147
|
-
);
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
skM = GrumpkinScalar.fromBuffer(
|
|
151
|
-
skMsBuffer.subarray(
|
|
152
|
-
keyIndexInBuffer * GrumpkinScalar.SIZE_IN_BYTES,
|
|
153
|
-
(keyIndexInBuffer + 1) * GrumpkinScalar.SIZE_IN_BYTES,
|
|
154
|
-
),
|
|
124
|
+
const skMBuffer = this.#keys.get(`${account.toString()}-${keyPrefix}sk_m`);
|
|
125
|
+
if (!skMBuffer) {
|
|
126
|
+
throw new Error(
|
|
127
|
+
`Could not find ${keyPrefix}sk_m for account ${account.toString()} whose address was successfully obtained with ${keyPrefix}pk_m_hash ${pkMHash.toString()}.`,
|
|
155
128
|
);
|
|
156
129
|
}
|
|
157
130
|
|
|
131
|
+
const skM = GrumpkinScalar.fromBuffer(skMBuffer);
|
|
132
|
+
|
|
158
133
|
// We sanity check that it's possible to derive the public key from the secret key
|
|
159
134
|
if (!derivePublicKeyFromSecretKey(skM).equals(pkM)) {
|
|
160
135
|
throw new Error(`Could not derive ${keyPrefix}pkM from ${keyPrefix}skM.`);
|
|
@@ -272,60 +247,21 @@ export class KeyStore {
|
|
|
272
247
|
public getMasterSecretKey(pkM: PublicKey): Promise<GrumpkinScalar> {
|
|
273
248
|
const [keyPrefix, account] = this.#getKeyPrefixAndAccount(pkM);
|
|
274
249
|
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
`Could not find ${keyPrefix}sk_m for ${keyPrefix}pk_m ${pkM.toString()}. This should not happen.`,
|
|
282
|
-
);
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
const numKeys = this.#calculateNumKeys(secretKeysBuffer, GrumpkinScalar);
|
|
286
|
-
for (let i = 0; i < numKeys; i++) {
|
|
287
|
-
const foundSkM = GrumpkinScalar.fromBuffer(
|
|
288
|
-
secretKeysBuffer.subarray(i * GrumpkinScalar.SIZE_IN_BYTES, (i + 1) * GrumpkinScalar.SIZE_IN_BYTES),
|
|
289
|
-
);
|
|
290
|
-
if (derivePublicKeyFromSecretKey(foundSkM).equals(pkM)) {
|
|
291
|
-
skM = foundSkM;
|
|
292
|
-
break;
|
|
293
|
-
}
|
|
294
|
-
}
|
|
250
|
+
const secretKeyBuffer = this.#keys.get(`${account.toString()}-${keyPrefix}sk_m`);
|
|
251
|
+
if (!secretKeyBuffer) {
|
|
252
|
+
throw new Error(
|
|
253
|
+
`Could not find ${keyPrefix}sk_m for ${keyPrefix}pk_m ${pkM.toString()}. This should not happen.`,
|
|
254
|
+
);
|
|
255
|
+
}
|
|
295
256
|
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
}
|
|
257
|
+
const skM = GrumpkinScalar.fromBuffer(secretKeyBuffer);
|
|
258
|
+
if (!derivePublicKeyFromSecretKey(skM).equals(pkM)) {
|
|
259
|
+
throw new Error(`Could not find ${keyPrefix}skM for ${keyPrefix}pkM ${pkM.toString()} in secret keys buffer.`);
|
|
299
260
|
}
|
|
300
261
|
|
|
301
262
|
return Promise.resolve(skM);
|
|
302
263
|
}
|
|
303
264
|
|
|
304
|
-
/**
|
|
305
|
-
* Rotates the master nullifier key for the specified account.
|
|
306
|
-
*
|
|
307
|
-
* @dev This function updates the secret and public keys associated with the account.
|
|
308
|
-
* It appends a new secret key to the existing secret keys, derives the
|
|
309
|
-
* corresponding public key, and updates the stored keys accordingly.
|
|
310
|
-
*
|
|
311
|
-
* @param account - The account address for which the master nullifier key is being rotated.
|
|
312
|
-
* @param newSecretKey - (Optional) A new secret key of type Fq. If not provided, a random key is generated.
|
|
313
|
-
* @throws If the account does not have existing nullifier secret keys or public keys.
|
|
314
|
-
* @returns A Promise that resolves when the key rotation is complete.
|
|
315
|
-
*/
|
|
316
|
-
public async rotateMasterNullifierKey(account: AztecAddress, newSecretKey: Fq = Fq.random()) {
|
|
317
|
-
// We append the secret key to the array of secret keys
|
|
318
|
-
await this.#appendValue(`${account.toString()}-nsk_m`, newSecretKey);
|
|
319
|
-
|
|
320
|
-
// Now we derive the public key from the new secret key and append it to the buffer of original public keys
|
|
321
|
-
const newPublicKey = derivePublicKeyFromSecretKey(newSecretKey);
|
|
322
|
-
await this.#appendValue(`${account.toString()}-npk_m`, newPublicKey);
|
|
323
|
-
|
|
324
|
-
// At last we store npk_m_hash under `account-npk_m_hash` key to be able to obtain address and key prefix
|
|
325
|
-
// using the #getKeyPrefixAndAccount function later on
|
|
326
|
-
await this.#appendValue(`${account.toString()}-npk_m_hash`, newPublicKey.hash());
|
|
327
|
-
}
|
|
328
|
-
|
|
329
265
|
/**
|
|
330
266
|
* Gets the key prefix and account address for a given value.
|
|
331
267
|
* @returns A tuple containing the key prefix and account address.
|
|
@@ -335,9 +271,7 @@ export class KeyStore {
|
|
|
335
271
|
#getKeyPrefixAndAccount(value: Bufferable): [KeyPrefix, AztecAddress] {
|
|
336
272
|
const valueBuffer = serializeToBuffer(value);
|
|
337
273
|
for (const [key, val] of this.#keys.entries()) {
|
|
338
|
-
|
|
339
|
-
// of just calling `.equals(...)`
|
|
340
|
-
if (val.includes(valueBuffer)) {
|
|
274
|
+
if (val.equals(valueBuffer)) {
|
|
341
275
|
for (const prefix of KEY_PREFIXES) {
|
|
342
276
|
if (key.includes(`-${prefix}`)) {
|
|
343
277
|
const account = AztecAddress.fromString(key.split('-')[0]);
|
|
@@ -348,17 +282,4 @@ export class KeyStore {
|
|
|
348
282
|
}
|
|
349
283
|
throw new Error(`Could not find key prefix.`);
|
|
350
284
|
}
|
|
351
|
-
|
|
352
|
-
async #appendValue(key: string, value: Bufferable) {
|
|
353
|
-
const currentValue = this.#keys.get(key);
|
|
354
|
-
if (!currentValue) {
|
|
355
|
-
throw new Error(`Could not find current value for key ${key}`);
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
await this.#keys.set(key, serializeToBuffer([currentValue, value]));
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
#calculateNumKeys(buf: Buffer, T: typeof Point | typeof Fq) {
|
|
362
|
-
return buf.byteLength / T.SIZE_IN_BYTES;
|
|
363
|
-
}
|
|
364
285
|
}
|