@aztec/key-store 0.66.0 → 0.67.1-devnet
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 -3
- package/dest/key_store.d.ts.map +1 -1
- package/dest/key_store.js +30 -29
- package/package.json +9 -5
- package/src/key_store.ts +34 -36
package/dest/key_store.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { type PublicKey } from '@aztec/circuit-types';
|
|
2
2
|
import { AztecAddress, CompleteAddress, Fr, GrumpkinScalar, type KeyPrefix, KeyValidationRequest, type PartialAddress } from '@aztec/circuits.js';
|
|
3
3
|
import { type Bufferable } from '@aztec/foundation/serialize';
|
|
4
|
-
import { type
|
|
4
|
+
import { type AztecAsyncKVStore } from '@aztec/kv-store';
|
|
5
5
|
/**
|
|
6
6
|
* Used for managing keys. Can hold keys of multiple accounts.
|
|
7
7
|
*/
|
|
8
8
|
export declare class KeyStore {
|
|
9
9
|
#private;
|
|
10
|
-
constructor(database:
|
|
10
|
+
constructor(database: AztecAsyncKVStore);
|
|
11
11
|
/**
|
|
12
12
|
* Creates a new account from a randomly generated secret key.
|
|
13
13
|
* @returns A promise that resolves to the newly created account's CompleteAddress.
|
|
@@ -90,6 +90,6 @@ export declare class KeyStore {
|
|
|
90
90
|
* @dev Note that this is quite inefficient but it should not matter because there should never be too many keys
|
|
91
91
|
* in the key store.
|
|
92
92
|
*/
|
|
93
|
-
getKeyPrefixAndAccount(value: Bufferable): [KeyPrefix, AztecAddress]
|
|
93
|
+
getKeyPrefixAndAccount(value: Bufferable): Promise<[KeyPrefix, AztecAddress]>;
|
|
94
94
|
}
|
|
95
95
|
//# 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,EAEF,cAAc,EAEd,KAAK,SAAS,EACd,oBAAoB,EACpB,KAAK,cAAc,EAKpB,MAAM,oBAAoB,CAAC;
|
|
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,EAEd,KAAK,SAAS,EACd,oBAAoB,EACpB,KAAK,cAAc,EAKpB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,KAAK,UAAU,EAAqB,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAAE,KAAK,iBAAiB,EAAsB,MAAM,iBAAiB,CAAC;AAE7E;;GAEG;AACH,qBAAa,QAAQ;;gBAGP,QAAQ,EAAE,iBAAiB;IAIvC;;;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;IACU,WAAW,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAOnD;;;;;;OAMG;IACU,uBAAuB,CAAC,OAAO,EAAE,EAAE,EAAE,eAAe,EAAE,YAAY,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAsC/G;;;;;OAKG;IACU,2BAA2B,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC;IAUnF;;;;;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;;;;;OAKG;IACU,iCAAiC,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC;IAU9F;;;;;;OAMG;IACU,8BAA8B,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,EAAE,CAAC;IAelG;;;;;;OAMG;IACU,kBAAkB,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC;IAkBxE;;;;;OAKG;IACU,sBAAsB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;CAe3F"}
|
package/dest/key_store.js
CHANGED
|
@@ -2,6 +2,7 @@ var _KeyStore_keys;
|
|
|
2
2
|
import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
|
|
3
3
|
import { AztecAddress, CompleteAddress, Fr, GeneratorIndex, GrumpkinScalar, KEY_PREFIXES, KeyValidationRequest, Point, computeAppSecretKey, deriveKeys, derivePublicKeyFromSecretKey, } from '@aztec/circuits.js';
|
|
4
4
|
import { poseidon2HashWithSeparator } from '@aztec/foundation/crypto';
|
|
5
|
+
import { toArray } from '@aztec/foundation/iterable';
|
|
5
6
|
import { serializeToBuffer } from '@aztec/foundation/serialize';
|
|
6
7
|
/**
|
|
7
8
|
* Used for managing keys. Can hold keys of multiple accounts.
|
|
@@ -46,17 +47,17 @@ export class KeyStore {
|
|
|
46
47
|
await __classPrivateFieldGet(this, _KeyStore_keys, "f").set(`${account.toString()}-ovpk_m_hash`, publicKeys.masterOutgoingViewingPublicKey.hash().toBuffer());
|
|
47
48
|
await __classPrivateFieldGet(this, _KeyStore_keys, "f").set(`${account.toString()}-tpk_m_hash`, publicKeys.masterTaggingPublicKey.hash().toBuffer());
|
|
48
49
|
// At last, we return the newly derived account address
|
|
49
|
-
return
|
|
50
|
+
return completeAddress;
|
|
50
51
|
}
|
|
51
52
|
/**
|
|
52
53
|
* Retrieves addresses of accounts stored in the key store.
|
|
53
54
|
* @returns A Promise that resolves to an array of account addresses.
|
|
54
55
|
*/
|
|
55
|
-
getAccounts() {
|
|
56
|
-
const allMapKeys =
|
|
56
|
+
async getAccounts() {
|
|
57
|
+
const allMapKeys = await toArray(__classPrivateFieldGet(this, _KeyStore_keys, "f").keysAsync());
|
|
57
58
|
// We return account addresses based on the map keys that end with '-ivsk_m'
|
|
58
59
|
const accounts = allMapKeys.filter(key => key.endsWith('-ivsk_m')).map(key => key.split('-')[0]);
|
|
59
|
-
return
|
|
60
|
+
return accounts.map(account => AztecAddress.fromString(account));
|
|
60
61
|
}
|
|
61
62
|
/**
|
|
62
63
|
* Gets the key validation request for a given master public key hash and contract address.
|
|
@@ -65,10 +66,10 @@ export class KeyStore {
|
|
|
65
66
|
* @param contractAddress - The contract address to silo the secret key in the key validation request with.
|
|
66
67
|
* @returns The key validation request.
|
|
67
68
|
*/
|
|
68
|
-
getKeyValidationRequest(pkMHash, contractAddress) {
|
|
69
|
-
const [keyPrefix, account] = this.getKeyPrefixAndAccount(pkMHash);
|
|
69
|
+
async getKeyValidationRequest(pkMHash, contractAddress) {
|
|
70
|
+
const [keyPrefix, account] = await this.getKeyPrefixAndAccount(pkMHash);
|
|
70
71
|
// Now we find the master public key for the account
|
|
71
|
-
const pkMBuffer = __classPrivateFieldGet(this, _KeyStore_keys, "f").
|
|
72
|
+
const pkMBuffer = await __classPrivateFieldGet(this, _KeyStore_keys, "f").getAsync(`${account.toString()}-${keyPrefix}pk_m`);
|
|
72
73
|
if (!pkMBuffer) {
|
|
73
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()}.`);
|
|
74
75
|
}
|
|
@@ -77,7 +78,7 @@ export class KeyStore {
|
|
|
77
78
|
throw new Error(`Could not find ${keyPrefix}pkM for ${keyPrefix}pk_m_hash ${pkMHash.toString()}.`);
|
|
78
79
|
}
|
|
79
80
|
// Now we find the secret key for the public key
|
|
80
|
-
const skMBuffer = __classPrivateFieldGet(this, _KeyStore_keys, "f").
|
|
81
|
+
const skMBuffer = await __classPrivateFieldGet(this, _KeyStore_keys, "f").getAsync(`${account.toString()}-${keyPrefix}sk_m`);
|
|
81
82
|
if (!skMBuffer) {
|
|
82
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()}.`);
|
|
83
84
|
}
|
|
@@ -88,7 +89,7 @@ export class KeyStore {
|
|
|
88
89
|
}
|
|
89
90
|
// At last we silo the secret key and return the key validation request
|
|
90
91
|
const skApp = computeAppSecretKey(skM, contractAddress, keyPrefix);
|
|
91
|
-
return
|
|
92
|
+
return new KeyValidationRequest(pkM, skApp);
|
|
92
93
|
}
|
|
93
94
|
/**
|
|
94
95
|
* Gets the master nullifier public key for a given account.
|
|
@@ -97,11 +98,11 @@ export class KeyStore {
|
|
|
97
98
|
* @returns The master nullifier public key for the account.
|
|
98
99
|
*/
|
|
99
100
|
async getMasterNullifierPublicKey(account) {
|
|
100
|
-
const masterNullifierPublicKeyBuffer = __classPrivateFieldGet(this, _KeyStore_keys, "f").
|
|
101
|
+
const masterNullifierPublicKeyBuffer = await __classPrivateFieldGet(this, _KeyStore_keys, "f").getAsync(`${account.toString()}-npk_m`);
|
|
101
102
|
if (!masterNullifierPublicKeyBuffer) {
|
|
102
103
|
throw new Error(`Account ${account.toString()} does not exist. Registered accounts: ${await this.getAccounts()}.`);
|
|
103
104
|
}
|
|
104
|
-
return
|
|
105
|
+
return Point.fromBuffer(masterNullifierPublicKeyBuffer);
|
|
105
106
|
}
|
|
106
107
|
/**
|
|
107
108
|
* Gets the master incoming viewing public key for a given account.
|
|
@@ -110,11 +111,11 @@ export class KeyStore {
|
|
|
110
111
|
* @returns The master incoming viewing public key for the account.
|
|
111
112
|
*/
|
|
112
113
|
async getMasterIncomingViewingPublicKey(account) {
|
|
113
|
-
const masterIncomingViewingPublicKeyBuffer = __classPrivateFieldGet(this, _KeyStore_keys, "f").
|
|
114
|
+
const masterIncomingViewingPublicKeyBuffer = await __classPrivateFieldGet(this, _KeyStore_keys, "f").getAsync(`${account.toString()}-ivpk_m`);
|
|
114
115
|
if (!masterIncomingViewingPublicKeyBuffer) {
|
|
115
116
|
throw new Error(`Account ${account.toString()} does not exist. Registered accounts: ${await this.getAccounts()}.`);
|
|
116
117
|
}
|
|
117
|
-
return
|
|
118
|
+
return Point.fromBuffer(masterIncomingViewingPublicKeyBuffer);
|
|
118
119
|
}
|
|
119
120
|
/**
|
|
120
121
|
* Retrieves the master outgoing viewing public key.
|
|
@@ -123,11 +124,11 @@ export class KeyStore {
|
|
|
123
124
|
* @returns A Promise that resolves to the master outgoing viewing key.
|
|
124
125
|
*/
|
|
125
126
|
async getMasterOutgoingViewingPublicKey(account) {
|
|
126
|
-
const masterOutgoingViewingPublicKeyBuffer = __classPrivateFieldGet(this, _KeyStore_keys, "f").
|
|
127
|
+
const masterOutgoingViewingPublicKeyBuffer = await __classPrivateFieldGet(this, _KeyStore_keys, "f").getAsync(`${account.toString()}-ovpk_m`);
|
|
127
128
|
if (!masterOutgoingViewingPublicKeyBuffer) {
|
|
128
129
|
throw new Error(`Account ${account.toString()} does not exist. Registered accounts: ${await this.getAccounts()}.`);
|
|
129
130
|
}
|
|
130
|
-
return
|
|
131
|
+
return Point.fromBuffer(masterOutgoingViewingPublicKeyBuffer);
|
|
131
132
|
}
|
|
132
133
|
/**
|
|
133
134
|
* Retrieves the master tagging public key.
|
|
@@ -136,11 +137,11 @@ export class KeyStore {
|
|
|
136
137
|
* @returns A Promise that resolves to the master tagging key.
|
|
137
138
|
*/
|
|
138
139
|
async getMasterTaggingPublicKey(account) {
|
|
139
|
-
const masterTaggingPublicKeyBuffer = __classPrivateFieldGet(this, _KeyStore_keys, "f").
|
|
140
|
+
const masterTaggingPublicKeyBuffer = await __classPrivateFieldGet(this, _KeyStore_keys, "f").getAsync(`${account.toString()}-tpk_m`);
|
|
140
141
|
if (!masterTaggingPublicKeyBuffer) {
|
|
141
142
|
throw new Error(`Account ${account.toString()} does not exist. Registered accounts: ${await this.getAccounts()}.`);
|
|
142
143
|
}
|
|
143
|
-
return
|
|
144
|
+
return Point.fromBuffer(masterTaggingPublicKeyBuffer);
|
|
144
145
|
}
|
|
145
146
|
/**
|
|
146
147
|
* Retrieves master incoming viewing secret key.
|
|
@@ -149,12 +150,11 @@ export class KeyStore {
|
|
|
149
150
|
* @returns A Promise that resolves to the master incoming viewing secret key.
|
|
150
151
|
*/
|
|
151
152
|
async getMasterIncomingViewingSecretKey(account) {
|
|
152
|
-
const masterIncomingViewingSecretKeyBuffer = __classPrivateFieldGet(this, _KeyStore_keys, "f").
|
|
153
|
+
const masterIncomingViewingSecretKeyBuffer = await __classPrivateFieldGet(this, _KeyStore_keys, "f").getAsync(`${account.toString()}-ivsk_m`);
|
|
153
154
|
if (!masterIncomingViewingSecretKeyBuffer) {
|
|
154
155
|
throw new Error(`Account ${account.toString()} does not exist. Registered accounts: ${await this.getAccounts()}.`);
|
|
155
156
|
}
|
|
156
|
-
|
|
157
|
-
return Promise.resolve(masterIncomingViewingSecretKey);
|
|
157
|
+
return GrumpkinScalar.fromBuffer(masterIncomingViewingSecretKeyBuffer);
|
|
158
158
|
}
|
|
159
159
|
/**
|
|
160
160
|
* Retrieves application outgoing viewing secret key.
|
|
@@ -164,12 +164,12 @@ export class KeyStore {
|
|
|
164
164
|
* @returns A Promise that resolves to the application outgoing viewing secret key.
|
|
165
165
|
*/
|
|
166
166
|
async getAppOutgoingViewingSecretKey(account, app) {
|
|
167
|
-
const masterOutgoingViewingSecretKeyBuffer = __classPrivateFieldGet(this, _KeyStore_keys, "f").
|
|
167
|
+
const masterOutgoingViewingSecretKeyBuffer = await __classPrivateFieldGet(this, _KeyStore_keys, "f").getAsync(`${account.toString()}-ovsk_m`);
|
|
168
168
|
if (!masterOutgoingViewingSecretKeyBuffer) {
|
|
169
169
|
throw new Error(`Account ${account.toString()} does not exist. Registered accounts: ${await this.getAccounts()}.`);
|
|
170
170
|
}
|
|
171
171
|
const masterOutgoingViewingSecretKey = GrumpkinScalar.fromBuffer(masterOutgoingViewingSecretKeyBuffer);
|
|
172
|
-
return
|
|
172
|
+
return poseidon2HashWithSeparator([masterOutgoingViewingSecretKey.hi, masterOutgoingViewingSecretKey.lo, app], GeneratorIndex.OVSK_M);
|
|
173
173
|
}
|
|
174
174
|
/**
|
|
175
175
|
* Retrieves the sk_m corresponding to the pk_m.
|
|
@@ -178,9 +178,9 @@ export class KeyStore {
|
|
|
178
178
|
* @returns A Promise that resolves to sk_m.
|
|
179
179
|
* @dev Used when feeding the sk_m to the kernel circuit for keys verification.
|
|
180
180
|
*/
|
|
181
|
-
getMasterSecretKey(pkM) {
|
|
182
|
-
const [keyPrefix, account] = this.getKeyPrefixAndAccount(pkM);
|
|
183
|
-
const secretKeyBuffer = __classPrivateFieldGet(this, _KeyStore_keys, "f").
|
|
181
|
+
async getMasterSecretKey(pkM) {
|
|
182
|
+
const [keyPrefix, account] = await this.getKeyPrefixAndAccount(pkM);
|
|
183
|
+
const secretKeyBuffer = await __classPrivateFieldGet(this, _KeyStore_keys, "f").getAsync(`${account.toString()}-${keyPrefix}sk_m`);
|
|
184
184
|
if (!secretKeyBuffer) {
|
|
185
185
|
throw new Error(`Could not find ${keyPrefix}sk_m for ${keyPrefix}pk_m ${pkM.toString()}. This should not happen.`);
|
|
186
186
|
}
|
|
@@ -196,10 +196,11 @@ export class KeyStore {
|
|
|
196
196
|
* @dev Note that this is quite inefficient but it should not matter because there should never be too many keys
|
|
197
197
|
* in the key store.
|
|
198
198
|
*/
|
|
199
|
-
getKeyPrefixAndAccount(value) {
|
|
199
|
+
async getKeyPrefixAndAccount(value) {
|
|
200
200
|
const valueBuffer = serializeToBuffer(value);
|
|
201
|
-
for (const [key, val] of __classPrivateFieldGet(this, _KeyStore_keys, "f").
|
|
202
|
-
|
|
201
|
+
for await (const [key, val] of __classPrivateFieldGet(this, _KeyStore_keys, "f").entriesAsync()) {
|
|
202
|
+
// Browser returns Uint8Array, Node.js returns Buffer
|
|
203
|
+
if (Buffer.from(val).equals(valueBuffer)) {
|
|
203
204
|
for (const prefix of KEY_PREFIXES) {
|
|
204
205
|
if (key.includes(`-${prefix}`)) {
|
|
205
206
|
const account = AztecAddress.fromString(key.split('-')[0]);
|
|
@@ -212,4 +213,4 @@ export class KeyStore {
|
|
|
212
213
|
}
|
|
213
214
|
}
|
|
214
215
|
_KeyStore_keys = new WeakMap();
|
|
215
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5X3N0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2tleV9zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLE9BQU8sRUFDTCxZQUFZLEVBQ1osZUFBZSxFQUNmLEVBQUUsRUFDRixjQUFjLEVBQ2QsY0FBYyxFQUNkLFlBQVksRUFFWixvQkFBb0IsRUFFcEIsS0FBSyxFQUNMLG1CQUFtQixFQUNuQixVQUFVLEVBQ1YsNEJBQTRCLEdBQzdCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdEUsT0FBTyxFQUFtQixpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBR2pGOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFFBQVE7SUFHbkIsWUFBWSxRQUFzQjtRQUZsQyxpQ0FBZ0M7UUFHOUIsdUJBQUEsSUFBSSxrQkFBUyxRQUFRLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFBLENBQUM7SUFDN0MsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGFBQWE7UUFDbEIsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNuQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBTSxFQUFFLGNBQThCO1FBQzVELE1BQU0sRUFDSix3QkFBd0IsRUFDeEIsOEJBQThCLEVBQzlCLDhCQUE4QixFQUM5QixzQkFBc0IsRUFDdEIsVUFBVSxHQUNYLEdBQUcsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRW5CLE1BQU0sZUFBZSxHQUFHLGVBQWUsQ0FBQyw4QkFBOEIsQ0FBQyxFQUFFLEVBQUUsY0FBYyxDQUFDLENBQUM7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
|
|
216
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5X3N0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2tleV9zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLE9BQU8sRUFDTCxZQUFZLEVBQ1osZUFBZSxFQUNmLEVBQUUsRUFDRixjQUFjLEVBQ2QsY0FBYyxFQUNkLFlBQVksRUFFWixvQkFBb0IsRUFFcEIsS0FBSyxFQUNMLG1CQUFtQixFQUNuQixVQUFVLEVBQ1YsNEJBQTRCLEdBQzdCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3JELE9BQU8sRUFBbUIsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUdqRjs7R0FFRztBQUNILE1BQU0sT0FBTyxRQUFRO0lBR25CLFlBQVksUUFBMkI7UUFGdkMsaUNBQXFDO1FBR25DLHVCQUFBLElBQUksa0JBQVMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBQSxDQUFDO0lBQzdDLENBQUM7SUFFRDs7O09BR0c7SUFDSSxhQUFhO1FBQ2xCLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN2QixNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDbkMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQU0sRUFBRSxjQUE4QjtRQUM1RCxNQUFNLEVBQ0osd0JBQXdCLEVBQ3hCLDhCQUE4QixFQUM5Qiw4QkFBOEIsRUFDOUIsc0JBQXNCLEVBQ3RCLFVBQVUsR0FDWCxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVuQixNQUFNLGVBQWUsR0FBRyxlQUFl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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.67.1-devnet",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": "./dest/index.js",
|
|
6
6
|
"typedocOptions": {
|
|
@@ -53,13 +53,17 @@
|
|
|
53
53
|
"summaryThreshold": 9999
|
|
54
54
|
}
|
|
55
55
|
]
|
|
56
|
+
],
|
|
57
|
+
"testTimeout": 30000,
|
|
58
|
+
"setupFiles": [
|
|
59
|
+
"../../foundation/src/jest/setup.mjs"
|
|
56
60
|
]
|
|
57
61
|
},
|
|
58
62
|
"dependencies": {
|
|
59
|
-
"@aztec/circuit-types": "0.
|
|
60
|
-
"@aztec/circuits.js": "0.
|
|
61
|
-
"@aztec/foundation": "0.
|
|
62
|
-
"@aztec/kv-store": "0.
|
|
63
|
+
"@aztec/circuit-types": "0.67.1-devnet",
|
|
64
|
+
"@aztec/circuits.js": "0.67.1-devnet",
|
|
65
|
+
"@aztec/foundation": "0.67.1-devnet",
|
|
66
|
+
"@aztec/kv-store": "0.67.1-devnet",
|
|
63
67
|
"tslib": "^2.4.0"
|
|
64
68
|
},
|
|
65
69
|
"devDependencies": {
|
package/src/key_store.ts
CHANGED
|
@@ -15,16 +15,17 @@ import {
|
|
|
15
15
|
derivePublicKeyFromSecretKey,
|
|
16
16
|
} from '@aztec/circuits.js';
|
|
17
17
|
import { poseidon2HashWithSeparator } from '@aztec/foundation/crypto';
|
|
18
|
+
import { toArray } from '@aztec/foundation/iterable';
|
|
18
19
|
import { type Bufferable, serializeToBuffer } from '@aztec/foundation/serialize';
|
|
19
|
-
import { type
|
|
20
|
+
import { type AztecAsyncKVStore, type AztecAsyncMap } from '@aztec/kv-store';
|
|
20
21
|
|
|
21
22
|
/**
|
|
22
23
|
* Used for managing keys. Can hold keys of multiple accounts.
|
|
23
24
|
*/
|
|
24
25
|
export class KeyStore {
|
|
25
|
-
#keys:
|
|
26
|
+
#keys: AztecAsyncMap<string, Buffer>;
|
|
26
27
|
|
|
27
|
-
constructor(database:
|
|
28
|
+
constructor(database: AztecAsyncKVStore) {
|
|
28
29
|
this.#keys = database.openMap('key_store');
|
|
29
30
|
}
|
|
30
31
|
|
|
@@ -81,18 +82,18 @@ export class KeyStore {
|
|
|
81
82
|
await this.#keys.set(`${account.toString()}-tpk_m_hash`, publicKeys.masterTaggingPublicKey.hash().toBuffer());
|
|
82
83
|
|
|
83
84
|
// At last, we return the newly derived account address
|
|
84
|
-
return
|
|
85
|
+
return completeAddress;
|
|
85
86
|
}
|
|
86
87
|
|
|
87
88
|
/**
|
|
88
89
|
* Retrieves addresses of accounts stored in the key store.
|
|
89
90
|
* @returns A Promise that resolves to an array of account addresses.
|
|
90
91
|
*/
|
|
91
|
-
public getAccounts(): Promise<AztecAddress[]> {
|
|
92
|
-
const allMapKeys =
|
|
92
|
+
public async getAccounts(): Promise<AztecAddress[]> {
|
|
93
|
+
const allMapKeys = await toArray(this.#keys.keysAsync());
|
|
93
94
|
// We return account addresses based on the map keys that end with '-ivsk_m'
|
|
94
95
|
const accounts = allMapKeys.filter(key => key.endsWith('-ivsk_m')).map(key => key.split('-')[0]);
|
|
95
|
-
return
|
|
96
|
+
return accounts.map(account => AztecAddress.fromString(account));
|
|
96
97
|
}
|
|
97
98
|
|
|
98
99
|
/**
|
|
@@ -102,11 +103,11 @@ export class KeyStore {
|
|
|
102
103
|
* @param contractAddress - The contract address to silo the secret key in the key validation request with.
|
|
103
104
|
* @returns The key validation request.
|
|
104
105
|
*/
|
|
105
|
-
public getKeyValidationRequest(pkMHash: Fr, contractAddress: AztecAddress): Promise<KeyValidationRequest> {
|
|
106
|
-
const [keyPrefix, account] = this.getKeyPrefixAndAccount(pkMHash);
|
|
106
|
+
public async getKeyValidationRequest(pkMHash: Fr, contractAddress: AztecAddress): Promise<KeyValidationRequest> {
|
|
107
|
+
const [keyPrefix, account] = await this.getKeyPrefixAndAccount(pkMHash);
|
|
107
108
|
|
|
108
109
|
// Now we find the master public key for the account
|
|
109
|
-
const pkMBuffer = this.#keys.
|
|
110
|
+
const pkMBuffer = await this.#keys.getAsync(`${account.toString()}-${keyPrefix}pk_m`);
|
|
110
111
|
if (!pkMBuffer) {
|
|
111
112
|
throw new Error(
|
|
112
113
|
`Could not find ${keyPrefix}pk_m for account ${account.toString()} whose address was successfully obtained with ${keyPrefix}pk_m_hash ${pkMHash.toString()}.`,
|
|
@@ -120,7 +121,7 @@ export class KeyStore {
|
|
|
120
121
|
}
|
|
121
122
|
|
|
122
123
|
// Now we find the secret key for the public key
|
|
123
|
-
const skMBuffer = this.#keys.
|
|
124
|
+
const skMBuffer = await this.#keys.getAsync(`${account.toString()}-${keyPrefix}sk_m`);
|
|
124
125
|
if (!skMBuffer) {
|
|
125
126
|
throw new Error(
|
|
126
127
|
`Could not find ${keyPrefix}sk_m for account ${account.toString()} whose address was successfully obtained with ${keyPrefix}pk_m_hash ${pkMHash.toString()}.`,
|
|
@@ -137,7 +138,7 @@ export class KeyStore {
|
|
|
137
138
|
// At last we silo the secret key and return the key validation request
|
|
138
139
|
const skApp = computeAppSecretKey(skM, contractAddress, keyPrefix!);
|
|
139
140
|
|
|
140
|
-
return
|
|
141
|
+
return new KeyValidationRequest(pkM, skApp);
|
|
141
142
|
}
|
|
142
143
|
|
|
143
144
|
/**
|
|
@@ -147,13 +148,13 @@ export class KeyStore {
|
|
|
147
148
|
* @returns The master nullifier public key for the account.
|
|
148
149
|
*/
|
|
149
150
|
public async getMasterNullifierPublicKey(account: AztecAddress): Promise<PublicKey> {
|
|
150
|
-
const masterNullifierPublicKeyBuffer = this.#keys.
|
|
151
|
+
const masterNullifierPublicKeyBuffer = await this.#keys.getAsync(`${account.toString()}-npk_m`);
|
|
151
152
|
if (!masterNullifierPublicKeyBuffer) {
|
|
152
153
|
throw new Error(
|
|
153
154
|
`Account ${account.toString()} does not exist. Registered accounts: ${await this.getAccounts()}.`,
|
|
154
155
|
);
|
|
155
156
|
}
|
|
156
|
-
return
|
|
157
|
+
return Point.fromBuffer(masterNullifierPublicKeyBuffer);
|
|
157
158
|
}
|
|
158
159
|
|
|
159
160
|
/**
|
|
@@ -163,13 +164,13 @@ export class KeyStore {
|
|
|
163
164
|
* @returns The master incoming viewing public key for the account.
|
|
164
165
|
*/
|
|
165
166
|
public async getMasterIncomingViewingPublicKey(account: AztecAddress): Promise<PublicKey> {
|
|
166
|
-
const masterIncomingViewingPublicKeyBuffer = this.#keys.
|
|
167
|
+
const masterIncomingViewingPublicKeyBuffer = await this.#keys.getAsync(`${account.toString()}-ivpk_m`);
|
|
167
168
|
if (!masterIncomingViewingPublicKeyBuffer) {
|
|
168
169
|
throw new Error(
|
|
169
170
|
`Account ${account.toString()} does not exist. Registered accounts: ${await this.getAccounts()}.`,
|
|
170
171
|
);
|
|
171
172
|
}
|
|
172
|
-
return
|
|
173
|
+
return Point.fromBuffer(masterIncomingViewingPublicKeyBuffer);
|
|
173
174
|
}
|
|
174
175
|
|
|
175
176
|
/**
|
|
@@ -179,13 +180,13 @@ export class KeyStore {
|
|
|
179
180
|
* @returns A Promise that resolves to the master outgoing viewing key.
|
|
180
181
|
*/
|
|
181
182
|
public async getMasterOutgoingViewingPublicKey(account: AztecAddress): Promise<PublicKey> {
|
|
182
|
-
const masterOutgoingViewingPublicKeyBuffer = this.#keys.
|
|
183
|
+
const masterOutgoingViewingPublicKeyBuffer = await this.#keys.getAsync(`${account.toString()}-ovpk_m`);
|
|
183
184
|
if (!masterOutgoingViewingPublicKeyBuffer) {
|
|
184
185
|
throw new Error(
|
|
185
186
|
`Account ${account.toString()} does not exist. Registered accounts: ${await this.getAccounts()}.`,
|
|
186
187
|
);
|
|
187
188
|
}
|
|
188
|
-
return
|
|
189
|
+
return Point.fromBuffer(masterOutgoingViewingPublicKeyBuffer);
|
|
189
190
|
}
|
|
190
191
|
|
|
191
192
|
/**
|
|
@@ -195,13 +196,13 @@ export class KeyStore {
|
|
|
195
196
|
* @returns A Promise that resolves to the master tagging key.
|
|
196
197
|
*/
|
|
197
198
|
public async getMasterTaggingPublicKey(account: AztecAddress): Promise<PublicKey> {
|
|
198
|
-
const masterTaggingPublicKeyBuffer = this.#keys.
|
|
199
|
+
const masterTaggingPublicKeyBuffer = await this.#keys.getAsync(`${account.toString()}-tpk_m`);
|
|
199
200
|
if (!masterTaggingPublicKeyBuffer) {
|
|
200
201
|
throw new Error(
|
|
201
202
|
`Account ${account.toString()} does not exist. Registered accounts: ${await this.getAccounts()}.`,
|
|
202
203
|
);
|
|
203
204
|
}
|
|
204
|
-
return
|
|
205
|
+
return Point.fromBuffer(masterTaggingPublicKeyBuffer);
|
|
205
206
|
}
|
|
206
207
|
|
|
207
208
|
/**
|
|
@@ -211,15 +212,13 @@ export class KeyStore {
|
|
|
211
212
|
* @returns A Promise that resolves to the master incoming viewing secret key.
|
|
212
213
|
*/
|
|
213
214
|
public async getMasterIncomingViewingSecretKey(account: AztecAddress): Promise<GrumpkinScalar> {
|
|
214
|
-
const masterIncomingViewingSecretKeyBuffer = this.#keys.
|
|
215
|
+
const masterIncomingViewingSecretKeyBuffer = await this.#keys.getAsync(`${account.toString()}-ivsk_m`);
|
|
215
216
|
if (!masterIncomingViewingSecretKeyBuffer) {
|
|
216
217
|
throw new Error(
|
|
217
218
|
`Account ${account.toString()} does not exist. Registered accounts: ${await this.getAccounts()}.`,
|
|
218
219
|
);
|
|
219
220
|
}
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
return Promise.resolve(masterIncomingViewingSecretKey);
|
|
221
|
+
return GrumpkinScalar.fromBuffer(masterIncomingViewingSecretKeyBuffer);
|
|
223
222
|
}
|
|
224
223
|
|
|
225
224
|
/**
|
|
@@ -230,7 +229,7 @@ export class KeyStore {
|
|
|
230
229
|
* @returns A Promise that resolves to the application outgoing viewing secret key.
|
|
231
230
|
*/
|
|
232
231
|
public async getAppOutgoingViewingSecretKey(account: AztecAddress, app: AztecAddress): Promise<Fr> {
|
|
233
|
-
const masterOutgoingViewingSecretKeyBuffer = this.#keys.
|
|
232
|
+
const masterOutgoingViewingSecretKeyBuffer = await this.#keys.getAsync(`${account.toString()}-ovsk_m`);
|
|
234
233
|
if (!masterOutgoingViewingSecretKeyBuffer) {
|
|
235
234
|
throw new Error(
|
|
236
235
|
`Account ${account.toString()} does not exist. Registered accounts: ${await this.getAccounts()}.`,
|
|
@@ -238,11 +237,9 @@ export class KeyStore {
|
|
|
238
237
|
}
|
|
239
238
|
const masterOutgoingViewingSecretKey = GrumpkinScalar.fromBuffer(masterOutgoingViewingSecretKeyBuffer);
|
|
240
239
|
|
|
241
|
-
return
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
GeneratorIndex.OVSK_M,
|
|
245
|
-
),
|
|
240
|
+
return poseidon2HashWithSeparator(
|
|
241
|
+
[masterOutgoingViewingSecretKey.hi, masterOutgoingViewingSecretKey.lo, app],
|
|
242
|
+
GeneratorIndex.OVSK_M,
|
|
246
243
|
);
|
|
247
244
|
}
|
|
248
245
|
|
|
@@ -253,10 +250,10 @@ export class KeyStore {
|
|
|
253
250
|
* @returns A Promise that resolves to sk_m.
|
|
254
251
|
* @dev Used when feeding the sk_m to the kernel circuit for keys verification.
|
|
255
252
|
*/
|
|
256
|
-
public getMasterSecretKey(pkM: PublicKey): Promise<GrumpkinScalar> {
|
|
257
|
-
const [keyPrefix, account] = this.getKeyPrefixAndAccount(pkM);
|
|
253
|
+
public async getMasterSecretKey(pkM: PublicKey): Promise<GrumpkinScalar> {
|
|
254
|
+
const [keyPrefix, account] = await this.getKeyPrefixAndAccount(pkM);
|
|
258
255
|
|
|
259
|
-
const secretKeyBuffer = this.#keys.
|
|
256
|
+
const secretKeyBuffer = await this.#keys.getAsync(`${account.toString()}-${keyPrefix}sk_m`);
|
|
260
257
|
if (!secretKeyBuffer) {
|
|
261
258
|
throw new Error(
|
|
262
259
|
`Could not find ${keyPrefix}sk_m for ${keyPrefix}pk_m ${pkM.toString()}. This should not happen.`,
|
|
@@ -277,10 +274,11 @@ export class KeyStore {
|
|
|
277
274
|
* @dev Note that this is quite inefficient but it should not matter because there should never be too many keys
|
|
278
275
|
* in the key store.
|
|
279
276
|
*/
|
|
280
|
-
public getKeyPrefixAndAccount(value: Bufferable): [KeyPrefix, AztecAddress] {
|
|
277
|
+
public async getKeyPrefixAndAccount(value: Bufferable): Promise<[KeyPrefix, AztecAddress]> {
|
|
281
278
|
const valueBuffer = serializeToBuffer(value);
|
|
282
|
-
for (const [key, val] of this.#keys.
|
|
283
|
-
|
|
279
|
+
for await (const [key, val] of this.#keys.entriesAsync()) {
|
|
280
|
+
// Browser returns Uint8Array, Node.js returns Buffer
|
|
281
|
+
if (Buffer.from(val).equals(valueBuffer)) {
|
|
284
282
|
for (const prefix of KEY_PREFIXES) {
|
|
285
283
|
if (key.includes(`-${prefix}`)) {
|
|
286
284
|
const account = AztecAddress.fromString(key.split('-')[0]);
|