@aztec/wallet-sdk 4.0.0-nightly.20260113 → 4.0.0-nightly.20260114
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/README.md +211 -271
- package/dest/base-wallet/base_wallet.d.ts +14 -4
- package/dest/base-wallet/base_wallet.d.ts.map +1 -1
- package/dest/base-wallet/base_wallet.js +29 -10
- package/dest/crypto.d.ts +38 -1
- package/dest/crypto.d.ts.map +1 -1
- package/dest/crypto.js +85 -1
- package/dest/manager/wallet_manager.d.ts +1 -1
- package/dest/manager/wallet_manager.d.ts.map +1 -1
- package/dest/manager/wallet_manager.js +9 -13
- package/dest/providers/extension/extension_provider.d.ts +52 -6
- package/dest/providers/extension/extension_provider.d.ts.map +1 -1
- package/dest/providers/extension/extension_provider.js +78 -11
- package/dest/providers/extension/extension_wallet.d.ts +30 -30
- package/dest/providers/extension/extension_wallet.d.ts.map +1 -1
- package/dest/providers/extension/extension_wallet.js +40 -73
- package/dest/providers/extension/index.d.ts +3 -3
- package/dest/providers/extension/index.d.ts.map +1 -1
- package/dest/types.d.ts +9 -14
- package/dest/types.d.ts.map +1 -1
- package/dest/types.js +1 -1
- package/package.json +8 -8
- package/src/base-wallet/base_wallet.ts +37 -13
- package/src/crypto.ts +93 -1
- package/src/manager/wallet_manager.ts +9 -13
- package/src/providers/extension/extension_provider.ts +109 -14
- package/src/providers/extension/extension_wallet.ts +45 -91
- package/src/providers/extension/index.ts +2 -9
- package/src/types.ts +8 -14
|
@@ -10,7 +10,7 @@ import type { PXE } from '@aztec/pxe/server';
|
|
|
10
10
|
import { type ContractArtifact, type EventMetadataDefinition, type FunctionCall } from '@aztec/stdlib/abi';
|
|
11
11
|
import type { AuthWitness } from '@aztec/stdlib/auth-witness';
|
|
12
12
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
13
|
-
import { type
|
|
13
|
+
import { type ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
14
14
|
import { GasSettings } from '@aztec/stdlib/gas';
|
|
15
15
|
import type { AztecNode } from '@aztec/stdlib/interfaces/client';
|
|
16
16
|
import type { TxExecutionRequest, TxHash, TxProfileResult, TxReceipt, TxSimulationResult, UtilitySimulationResult } from '@aztec/stdlib/tx';
|
|
@@ -86,9 +86,19 @@ export declare abstract class BaseWallet implements Wallet {
|
|
|
86
86
|
sendTx(executionPayload: ExecutionPayload, opts: SendOptions): Promise<TxHash>;
|
|
87
87
|
protected contextualizeError(err: Error, ...context: string[]): Error;
|
|
88
88
|
simulateUtility(call: FunctionCall, authwits?: AuthWitness[]): Promise<UtilitySimulationResult>;
|
|
89
|
-
getContractClassMetadata(id: Fr, includeArtifact?: boolean): Promise<ContractClassMetadata>;
|
|
90
|
-
getContractMetadata(address: AztecAddress): Promise<ContractMetadata>;
|
|
91
89
|
getTxReceipt(txHash: TxHash): Promise<TxReceipt>;
|
|
92
90
|
getPrivateEvents<T>(eventDef: EventMetadataDefinition, eventFilter: PrivateEventFilter): Promise<PrivateEvent<T>[]>;
|
|
91
|
+
getContractMetadata(address: AztecAddress): Promise<{
|
|
92
|
+
instance: ContractInstanceWithAddress | undefined;
|
|
93
|
+
isContractInitialized: boolean;
|
|
94
|
+
isContractPublished: boolean;
|
|
95
|
+
isContractClassPubliclyRegistered: boolean;
|
|
96
|
+
isContractUpdated: boolean;
|
|
97
|
+
updatedContractClassId: Fr | undefined;
|
|
98
|
+
}>;
|
|
99
|
+
getContractClassMetadata(id: Fr): Promise<{
|
|
100
|
+
isArtifactRegistered: boolean;
|
|
101
|
+
isContractClassPubliclyRegistered: boolean;
|
|
102
|
+
}>;
|
|
93
103
|
}
|
|
94
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
104
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZV93YWxsZXQuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iYXNlLXdhbGxldC9iYXNlX3dhbGxldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakYsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1RCxPQUFPLEtBQUssRUFDVixPQUFPLEVBQ1AsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixhQUFhLEVBQ2IsWUFBWSxFQUNaLGtCQUFrQixFQUNsQixjQUFjLEVBQ2QsV0FBVyxFQUNYLGVBQWUsRUFDZixNQUFNLEVBQ1AsTUFBTSx3QkFBd0IsQ0FBQztBQU9oQyxPQUFPLEVBQUUsOEJBQThCLEVBQXdDLE1BQU0sNEJBQTRCLENBQUM7QUFDbEgsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDL0QsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXBELE9BQU8sS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hELE9BQU8sS0FBSyxFQUFFLEdBQUcsRUFBc0IsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRSxPQUFPLEVBQ0wsS0FBSyxnQkFBZ0IsRUFDckIsS0FBSyx1QkFBdUIsRUFDNUIsS0FBSyxZQUFZLEVBRWxCLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDaEUsT0FBTyxFQUNMLEtBQUssMkJBQTJCLEVBR2pDLE1BQU0sd0JBQXdCLENBQUM7QUFFaEMs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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base_wallet.d.ts","sourceRoot":"","sources":["../../src/base-wallet/base_wallet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACjF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EACV,OAAO,EACP,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,eAAe,EACf,MAAM,EACP,MAAM,wBAAwB,CAAC;AAOhC,OAAO,EAAE,8BAA8B,EAAwC,MAAM,4BAA4B,CAAC;AAClH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAEpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAE,GAAG,EAAsB,MAAM,mBAAmB,CAAC;AACjE,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,EAC5B,KAAK,YAAY,EAElB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EACL,KAAK,
|
|
1
|
+
{"version":3,"file":"base_wallet.d.ts","sourceRoot":"","sources":["../../src/base-wallet/base_wallet.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@ import { decodeFromAbi } from '@aztec/stdlib/abi';
|
|
|
6
6
|
import { computePartialAddress, getContractClassFromArtifact } from '@aztec/stdlib/contract';
|
|
7
7
|
import { SimulationError } from '@aztec/stdlib/errors';
|
|
8
8
|
import { Gas, GasSettings } from '@aztec/stdlib/gas';
|
|
9
|
+
import { siloNullifier } from '@aztec/stdlib/hash';
|
|
9
10
|
import { mergeExecutionPayloads } from '@aztec/stdlib/tx';
|
|
10
11
|
import { inspect } from 'util';
|
|
11
12
|
/**
|
|
@@ -132,7 +133,7 @@ import { inspect } from 'util';
|
|
|
132
133
|
return this.pxe.registerSender(address);
|
|
133
134
|
}
|
|
134
135
|
async registerContract(instance, artifact, secretKey) {
|
|
135
|
-
const
|
|
136
|
+
const existingInstance = await this.pxe.getContractInstance(instance.address);
|
|
136
137
|
if (existingInstance) {
|
|
137
138
|
// Instance already registered in the wallet
|
|
138
139
|
if (artifact) {
|
|
@@ -148,11 +149,10 @@ import { inspect } from 'util';
|
|
|
148
149
|
// Instance not registered yet
|
|
149
150
|
if (!artifact) {
|
|
150
151
|
// Try to get the artifact from the wallet's contract class storage
|
|
151
|
-
|
|
152
|
-
if (!
|
|
152
|
+
artifact = await this.pxe.getContractArtifact(instance.currentContractClassId);
|
|
153
|
+
if (!artifact) {
|
|
153
154
|
throw new Error(`Cannot register contract at ${instance.address.toString()}: artifact is required but not provided, and wallet does not have the artifact for contract class ${instance.currentContractClassId.toString()}`);
|
|
154
155
|
}
|
|
155
|
-
artifact = classMetadata.artifact;
|
|
156
156
|
}
|
|
157
157
|
await this.pxe.registerContract({
|
|
158
158
|
artifact,
|
|
@@ -206,12 +206,6 @@ import { inspect } from 'util';
|
|
|
206
206
|
simulateUtility(call, authwits) {
|
|
207
207
|
return this.pxe.simulateUtility(call, authwits);
|
|
208
208
|
}
|
|
209
|
-
getContractClassMetadata(id, includeArtifact = false) {
|
|
210
|
-
return this.pxe.getContractClassMetadata(id, includeArtifact);
|
|
211
|
-
}
|
|
212
|
-
getContractMetadata(address) {
|
|
213
|
-
return this.pxe.getContractMetadata(address);
|
|
214
|
-
}
|
|
215
209
|
getTxReceipt(txHash) {
|
|
216
210
|
return this.aztecNode.getTxReceipt(txHash);
|
|
217
211
|
}
|
|
@@ -231,4 +225,29 @@ import { inspect } from 'util';
|
|
|
231
225
|
});
|
|
232
226
|
return decodedEvents;
|
|
233
227
|
}
|
|
228
|
+
async getContractMetadata(address) {
|
|
229
|
+
const instance = await this.pxe.getContractInstance(address);
|
|
230
|
+
const initNullifier = await siloNullifier(address, address.toField());
|
|
231
|
+
const publiclyRegisteredContract = await this.aztecNode.getContract(address);
|
|
232
|
+
const [initNullifierMembershipWitness, publiclyRegisteredContractClass] = await Promise.all([
|
|
233
|
+
this.aztecNode.getNullifierMembershipWitness('latest', initNullifier),
|
|
234
|
+
publiclyRegisteredContract ? this.aztecNode.getContractClass(publiclyRegisteredContract.currentContractClassId || instance?.currentContractClassId) : undefined
|
|
235
|
+
]);
|
|
236
|
+
const isContractUpdated = publiclyRegisteredContract && !publiclyRegisteredContract.currentContractClassId.equals(publiclyRegisteredContract.originalContractClassId);
|
|
237
|
+
return {
|
|
238
|
+
instance: instance ?? undefined,
|
|
239
|
+
isContractInitialized: !!initNullifierMembershipWitness,
|
|
240
|
+
isContractPublished: !!publiclyRegisteredContract,
|
|
241
|
+
isContractClassPubliclyRegistered: !!publiclyRegisteredContractClass,
|
|
242
|
+
isContractUpdated: !!isContractUpdated,
|
|
243
|
+
updatedContractClassId: isContractUpdated ? publiclyRegisteredContract.currentContractClassId : undefined
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
async getContractClassMetadata(id) {
|
|
247
|
+
const publiclyRegisteredContractClass = await this.aztecNode.getContractClass(id);
|
|
248
|
+
return {
|
|
249
|
+
isArtifactRegistered: !!await this.pxe.getContractArtifact(id),
|
|
250
|
+
isContractClassPubliclyRegistered: !!publiclyRegisteredContractClass
|
|
251
|
+
};
|
|
252
|
+
}
|
|
234
253
|
}
|
package/dest/crypto.d.ts
CHANGED
|
@@ -143,4 +143,41 @@ export declare function encrypt(key: CryptoKey, data: unknown): Promise<Encrypte
|
|
|
143
143
|
* ```
|
|
144
144
|
*/
|
|
145
145
|
export declare function decrypt<T = unknown>(key: CryptoKey, payload: EncryptedPayload): Promise<T>;
|
|
146
|
-
|
|
146
|
+
/**
|
|
147
|
+
* Hashes a shared AES key to a hex string for verification.
|
|
148
|
+
*
|
|
149
|
+
* This extracts the raw key material and hashes it with SHA-256,
|
|
150
|
+
* returning the first 16 bytes as a hex string.
|
|
151
|
+
*
|
|
152
|
+
* @param sharedKey - The AES-GCM shared key (must be extractable)
|
|
153
|
+
* @returns A hex string representation of the hash
|
|
154
|
+
*
|
|
155
|
+
* @example
|
|
156
|
+
* ```typescript
|
|
157
|
+
* const hash = await hashSharedSecret(sharedKey);
|
|
158
|
+
* const emoji = hashToEmoji(hash);
|
|
159
|
+
* ```
|
|
160
|
+
*/
|
|
161
|
+
export declare function hashSharedSecret(sharedKey: CryptoKey): Promise<string>;
|
|
162
|
+
/**
|
|
163
|
+
* Converts a hex hash to an emoji sequence for visual verification.
|
|
164
|
+
*
|
|
165
|
+
* This is used for anti-MITM verification - both the dApp and wallet
|
|
166
|
+
* independently compute the same emoji sequence from the shared secret.
|
|
167
|
+
* Users can visually compare the sequences to detect interception.
|
|
168
|
+
*
|
|
169
|
+
* Similar to SAS (Short Authentication String) in ZRTP/Signal.
|
|
170
|
+
*
|
|
171
|
+
* @param hash - Hex string from {@link hashSharedSecret}
|
|
172
|
+
* @param length - Number of emojis to generate (default: 4)
|
|
173
|
+
* @returns A string of emojis representing the hash
|
|
174
|
+
*
|
|
175
|
+
* @example
|
|
176
|
+
* ```typescript
|
|
177
|
+
* const hash = await hashSharedSecret(sharedKey);
|
|
178
|
+
* const emoji = hashToEmoji(hash); // e.g., "🔵🦋🎯🐼"
|
|
179
|
+
* // Display to user for verification
|
|
180
|
+
* ```
|
|
181
|
+
*/
|
|
182
|
+
export declare function hashToEmoji(hash: string, length?: number): string;
|
|
183
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J5cHRvLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY3J5cHRvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW1DQTs7OztHQUlHO0FBQ0gsTUFBTSxXQUFXLGlCQUFpQjtJQUNoQyxnREFBZ0Q7SUFDaEQsR0FBRyxFQUFFLE1BQU0sQ0FBQztJQUNaLGtDQUFrQztJQUNsQyxHQUFHLEVBQUUsTUFBTSxDQUFDO0lBQ1osdUNBQXVDO0lBQ3ZDLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDVix1Q0FBdUM7SUFDdkMsQ0FBQyxFQUFFLE1BQU0sQ0FBQztDQUNYO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sV0FBVyxnQkFBZ0I7SUFDL0IsdURBQXVEO0lBQ3ZELEVBQUUsRUFBRSxNQUFNLENBQUM7SUFDWCxrQ0FBa0M7SUFDbEMsVUFBVSxFQUFFLE1BQU0sQ0FBQztDQUNwQjtBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxXQUFXLGFBQWE7SUFDNUIsaUNBQWlDO0lBQ2pDLFNBQVMsRUFBRSxTQUFTLENBQUM7SUFDckIseURBQXlEO0lBQ3pELFVBQVUsRUFBRSxTQUFTLENBQUM7Q0FDdkI7QUFFRDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILHdCQUFzQixlQUFlLElBQUksT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQWE5RDtBQUVEOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILHdCQUFzQixlQUFlLENBQUMsU0FBUyxFQUFFLFNBQVMsR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FRdEY7QUFFRDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILHdCQUFnQixlQUFlLENBQUMsUUFBUSxFQUFFLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FnQi9FO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBQ0gsd0JBQWdCLGVBQWUsQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQWMvRjtBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFDSCx3QkFBc0IsT0FBTyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FVdEY7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSCx3QkFBc0IsT0FBTyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQVFoRztBQW9FRDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILHdCQUFzQixnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsU0FBUyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FPNUU7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILHdCQUFnQixXQUFXLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEdBQUUsTUFBVSxHQUFHLE1BQU0sQ0FNcEUifQ==
|
package/dest/crypto.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"AAmCA;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,gDAAgD;IAChD,GAAG,EAAE,MAAM,CAAC;IACZ,kCAAkC;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,uCAAuC;IACvC,CAAC,EAAE,MAAM,CAAC;IACV,uCAAuC;IACvC,CAAC,EAAE,MAAM,CAAC;CACX;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,uDAAuD;IACvD,EAAE,EAAE,MAAM,CAAC;IACX,kCAAkC;IAClC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,iCAAiC;IACjC,SAAS,EAAE,SAAS,CAAC;IACrB,yDAAyD;IACzD,UAAU,EAAE,SAAS,CAAC;CACvB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,aAAa,CAAC,CAa9D;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,eAAe,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAQtF;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,SAAS,CAAC,CAgB/E;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAc/F;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAUtF;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,CAAC,CAAC,CAQhG"}
|
|
1
|
+
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"AAmCA;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,gDAAgD;IAChD,GAAG,EAAE,MAAM,CAAC;IACZ,kCAAkC;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,uCAAuC;IACvC,CAAC,EAAE,MAAM,CAAC;IACV,uCAAuC;IACvC,CAAC,EAAE,MAAM,CAAC;CACX;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,uDAAuD;IACvD,EAAE,EAAE,MAAM,CAAC;IACX,kCAAkC;IAClC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,iCAAiC;IACjC,SAAS,EAAE,SAAS,CAAC;IACrB,yDAAyD;IACzD,UAAU,EAAE,SAAS,CAAC;CACvB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,aAAa,CAAC,CAa9D;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,eAAe,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAQtF;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,SAAS,CAAC,CAgB/E;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAc/F;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAUtF;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,CAAC,CAAC,CAQhG;AAoED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAO5E;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,MAAU,GAAG,MAAM,CAMpE"}
|
package/dest/crypto.js
CHANGED
|
@@ -130,7 +130,7 @@
|
|
|
130
130
|
}, privateKey, {
|
|
131
131
|
name: 'AES-GCM',
|
|
132
132
|
length: 256
|
|
133
|
-
},
|
|
133
|
+
}, true, [
|
|
134
134
|
'encrypt',
|
|
135
135
|
'decrypt'
|
|
136
136
|
]);
|
|
@@ -214,3 +214,87 @@
|
|
|
214
214
|
}
|
|
215
215
|
return bytes.buffer;
|
|
216
216
|
}
|
|
217
|
+
/**
|
|
218
|
+
* Emoji alphabet for visual verification of shared secrets.
|
|
219
|
+
* 32 distinct, easily recognizable emojis for anti-spoofing verification.
|
|
220
|
+
* @internal
|
|
221
|
+
*/ const EMOJI_ALPHABET = [
|
|
222
|
+
'🔵',
|
|
223
|
+
'🟢',
|
|
224
|
+
'🔴',
|
|
225
|
+
'🟡',
|
|
226
|
+
'🟣',
|
|
227
|
+
'🟠',
|
|
228
|
+
'⚫',
|
|
229
|
+
'⚪',
|
|
230
|
+
'🌟',
|
|
231
|
+
'🌙',
|
|
232
|
+
'☀️',
|
|
233
|
+
'🌈',
|
|
234
|
+
'🔥',
|
|
235
|
+
'💧',
|
|
236
|
+
'🌸',
|
|
237
|
+
'🍀',
|
|
238
|
+
'🦋',
|
|
239
|
+
'🐬',
|
|
240
|
+
'🦊',
|
|
241
|
+
'🐼',
|
|
242
|
+
'🦁',
|
|
243
|
+
'🐯',
|
|
244
|
+
'🐸',
|
|
245
|
+
'🦉',
|
|
246
|
+
'🎵',
|
|
247
|
+
'🎨',
|
|
248
|
+
'🎯',
|
|
249
|
+
'🎲',
|
|
250
|
+
'🔔',
|
|
251
|
+
'💎',
|
|
252
|
+
'🔑',
|
|
253
|
+
'🏆'
|
|
254
|
+
];
|
|
255
|
+
/**
|
|
256
|
+
* Hashes a shared AES key to a hex string for verification.
|
|
257
|
+
*
|
|
258
|
+
* This extracts the raw key material and hashes it with SHA-256,
|
|
259
|
+
* returning the first 16 bytes as a hex string.
|
|
260
|
+
*
|
|
261
|
+
* @param sharedKey - The AES-GCM shared key (must be extractable)
|
|
262
|
+
* @returns A hex string representation of the hash
|
|
263
|
+
*
|
|
264
|
+
* @example
|
|
265
|
+
* ```typescript
|
|
266
|
+
* const hash = await hashSharedSecret(sharedKey);
|
|
267
|
+
* const emoji = hashToEmoji(hash);
|
|
268
|
+
* ```
|
|
269
|
+
*/ export async function hashSharedSecret(sharedKey) {
|
|
270
|
+
const rawKey = await crypto.subtle.exportKey('raw', sharedKey);
|
|
271
|
+
const hash = await crypto.subtle.digest('SHA-256', rawKey);
|
|
272
|
+
const bytes = new Uint8Array(hash.slice(0, 16));
|
|
273
|
+
return Array.from(bytes).map((b)=>b.toString(16).padStart(2, '0')).join('');
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Converts a hex hash to an emoji sequence for visual verification.
|
|
277
|
+
*
|
|
278
|
+
* This is used for anti-MITM verification - both the dApp and wallet
|
|
279
|
+
* independently compute the same emoji sequence from the shared secret.
|
|
280
|
+
* Users can visually compare the sequences to detect interception.
|
|
281
|
+
*
|
|
282
|
+
* Similar to SAS (Short Authentication String) in ZRTP/Signal.
|
|
283
|
+
*
|
|
284
|
+
* @param hash - Hex string from {@link hashSharedSecret}
|
|
285
|
+
* @param length - Number of emojis to generate (default: 4)
|
|
286
|
+
* @returns A string of emojis representing the hash
|
|
287
|
+
*
|
|
288
|
+
* @example
|
|
289
|
+
* ```typescript
|
|
290
|
+
* const hash = await hashSharedSecret(sharedKey);
|
|
291
|
+
* const emoji = hashToEmoji(hash); // e.g., "🔵🦋🎯🐼"
|
|
292
|
+
* // Display to user for verification
|
|
293
|
+
* ```
|
|
294
|
+
*/ export function hashToEmoji(hash, length = 4) {
|
|
295
|
+
const bytes = [];
|
|
296
|
+
for(let i = 0; i < hash.length && bytes.length < length; i += 2){
|
|
297
|
+
bytes.push(parseInt(hash.slice(i, i + 2), 16));
|
|
298
|
+
}
|
|
299
|
+
return bytes.map((b)=>EMOJI_ALPHABET[b % EMOJI_ALPHABET.length]).join('');
|
|
300
|
+
}
|
|
@@ -24,4 +24,4 @@ export declare class WalletManager {
|
|
|
24
24
|
*/
|
|
25
25
|
private isExtensionAllowed;
|
|
26
26
|
}
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FsbGV0X21hbmFnZXIuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYW5hZ2VyL3dhbGxldF9tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxFQUFFLHNCQUFzQixFQUF5QixtQkFBbUIsRUFBRSxjQUFjLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFckg7O0dBRUc7QUFDSCxxQkFBYSxhQUFhO0lBQ3hCLE9BQU8sQ0FBQyxNQUFNLENBR1o7SUFFRixPQUFPLGVBQWlCO0lBRXhCOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLG1CQUFtQixHQUFHLGFBQWEsQ0FPM0Q7SUFFRDs7Ozs7T0FLRztJQUNHLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxzQkFBc0IsR0FBRyxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUMsQ0E4QnBGO0lBRUQ7Ozs7T0FJRztJQUNILE9BQU8sQ0FBQyxrQkFBa0I7Q0FXM0IifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet_manager.d.ts","sourceRoot":"","sources":["../../src/manager/wallet_manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAyB,mBAAmB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAErH;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAGZ;IAEF,OAAO,eAAiB;IAExB;;;OAGG;IACH,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,mBAAmB,GAAG,aAAa,CAO3D;IAED;;;;;OAKG;IACG,mBAAmB,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"wallet_manager.d.ts","sourceRoot":"","sources":["../../src/manager/wallet_manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAyB,mBAAmB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAErH;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAGZ;IAEF,OAAO,eAAiB;IAExB;;;OAGG;IACH,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,mBAAmB,GAAG,aAAa,CAO3D;IAED;;;;;OAKG;IACG,mBAAmB,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CA8BpF;IAED;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;CAW3B"}
|
|
@@ -34,24 +34,23 @@ import { ExtensionProvider, ExtensionWallet } from '../providers/extension/index
|
|
|
34
34
|
*/ async getAvailableWallets(options) {
|
|
35
35
|
const providers = [];
|
|
36
36
|
const { chainInfo } = options;
|
|
37
|
-
// Discover extension wallets
|
|
38
37
|
if (this.config.extensions?.enabled) {
|
|
39
|
-
const
|
|
38
|
+
const discoveredWallets = await ExtensionProvider.discoverExtensions(chainInfo, options.timeout);
|
|
40
39
|
const extensionConfig = this.config.extensions;
|
|
41
|
-
for (const
|
|
42
|
-
|
|
43
|
-
if (!this.isExtensionAllowed(ext.id, extensionConfig)) {
|
|
40
|
+
for (const { info, port, sharedKey } of discoveredWallets){
|
|
41
|
+
if (!this.isExtensionAllowed(info.id, extensionConfig)) {
|
|
44
42
|
continue;
|
|
45
43
|
}
|
|
46
44
|
providers.push({
|
|
47
|
-
id:
|
|
45
|
+
id: info.id,
|
|
48
46
|
type: 'extension',
|
|
49
|
-
name:
|
|
50
|
-
icon:
|
|
47
|
+
name: info.name,
|
|
48
|
+
icon: info.icon,
|
|
51
49
|
metadata: {
|
|
52
|
-
version:
|
|
50
|
+
version: info.version,
|
|
51
|
+
verificationHash: info.verificationHash
|
|
53
52
|
},
|
|
54
|
-
connect: (appId)=>ExtensionWallet.create(
|
|
53
|
+
connect: (appId)=>Promise.resolve(ExtensionWallet.create(info, chainInfo, port, sharedKey, appId))
|
|
55
54
|
});
|
|
56
55
|
}
|
|
57
56
|
}
|
|
@@ -63,15 +62,12 @@ import { ExtensionProvider, ExtensionWallet } from '../providers/extension/index
|
|
|
63
62
|
* @param extensionId - The extension ID to check
|
|
64
63
|
* @param config - Extension wallet configuration containing allow/block lists
|
|
65
64
|
*/ isExtensionAllowed(extensionId, config) {
|
|
66
|
-
// Check block list first
|
|
67
65
|
if (config.blockList && config.blockList.includes(extensionId)) {
|
|
68
66
|
return false;
|
|
69
67
|
}
|
|
70
|
-
// If allow list exists, extension must be in it
|
|
71
68
|
if (config.allowList && config.allowList.length > 0) {
|
|
72
69
|
return config.allowList.includes(extensionId);
|
|
73
70
|
}
|
|
74
|
-
// If no allow list, extension is allowed (unless blocked)
|
|
75
71
|
return true;
|
|
76
72
|
}
|
|
77
73
|
}
|
|
@@ -1,17 +1,63 @@
|
|
|
1
1
|
import type { ChainInfo } from '@aztec/aztec.js/account';
|
|
2
2
|
import type { WalletInfo } from '../../types.js';
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* A discovered wallet with its secure channel components.
|
|
5
|
+
* Returned by {@link ExtensionProvider.discoverExtensions}.
|
|
6
|
+
*/
|
|
7
|
+
export interface DiscoveredWallet {
|
|
8
|
+
/** Basic wallet information (id, name, icon, version, publicKey, verificationHash) */
|
|
9
|
+
info: WalletInfo;
|
|
10
|
+
/** The MessagePort for private communication with the wallet */
|
|
11
|
+
port: MessagePort;
|
|
12
|
+
/** The derived AES-256-GCM shared key for encryption */
|
|
13
|
+
sharedKey: CryptoKey;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Provider for discovering Aztec wallet extensions.
|
|
17
|
+
*
|
|
18
|
+
* This class handles the discovery phase of wallet communication:
|
|
19
|
+
* 1. Broadcasts a discovery request with the dApp's public key
|
|
20
|
+
* 2. Receives responses from installed wallets with their public keys
|
|
21
|
+
* 3. Derives shared secrets and computes verification hashes
|
|
22
|
+
* 4. Returns discovered wallets with their secure channel components
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```typescript
|
|
26
|
+
* const wallets = await ExtensionProvider.discoverExtensions(chainInfo);
|
|
27
|
+
* // Display wallets to user with optional emoji verification
|
|
28
|
+
* for (const wallet of wallets) {
|
|
29
|
+
* const emoji = hashToEmoji(wallet.info.verificationHash!);
|
|
30
|
+
* console.log(`${wallet.info.name}: ${emoji}`);
|
|
31
|
+
* }
|
|
32
|
+
* // User selects a wallet after verifying
|
|
33
|
+
* const wallet = await ExtensionWallet.create(wallets[0], chainInfo, 'my-app');
|
|
34
|
+
* ```
|
|
5
35
|
*/
|
|
6
36
|
export declare class ExtensionProvider {
|
|
7
|
-
private static discoveredExtensions;
|
|
8
37
|
private static discoveryInProgress;
|
|
9
38
|
/**
|
|
10
|
-
* Discovers all installed Aztec wallet extensions
|
|
39
|
+
* Discovers all installed Aztec wallet extensions and establishes secure channel components.
|
|
40
|
+
*
|
|
41
|
+
* This method:
|
|
42
|
+
* 1. Generates an ECDH key pair for this discovery session
|
|
43
|
+
* 2. Broadcasts a discovery request with the dApp's public key
|
|
44
|
+
* 3. Receives responses from wallets with their public keys and MessagePorts
|
|
45
|
+
* 4. Derives shared secrets and computes verification hashes
|
|
46
|
+
*
|
|
11
47
|
* @param chainInfo - Chain information to check if extensions support this network
|
|
12
48
|
* @param timeout - How long to wait for extensions to respond (ms)
|
|
13
|
-
* @returns Array of discovered
|
|
49
|
+
* @returns Array of discovered wallets with their secure channel components
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```typescript
|
|
53
|
+
* const wallets = await ExtensionProvider.discoverExtensions({
|
|
54
|
+
* chainId: Fr(31337),
|
|
55
|
+
* version: Fr(0)
|
|
56
|
+
* });
|
|
57
|
+
* // Access wallet info and secure channel
|
|
58
|
+
* const { info, port, sharedKey } = wallets[0];
|
|
59
|
+
* ```
|
|
14
60
|
*/
|
|
15
|
-
static discoverExtensions(chainInfo: ChainInfo, timeout?: number): Promise<
|
|
61
|
+
static discoverExtensions(chainInfo: ChainInfo, timeout?: number): Promise<DiscoveredWallet[]>;
|
|
16
62
|
}
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZW5zaW9uX3Byb3ZpZGVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHJvdmlkZXJzL2V4dGVuc2lvbi9leHRlbnNpb25fcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFLekQsT0FBTyxLQUFLLEVBQXVDLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRGOzs7R0FHRztBQUNILE1BQU0sV0FBVyxnQkFBZ0I7SUFDL0Isc0ZBQXNGO0lBQ3RGLElBQUksRUFBRSxVQUFVLENBQUM7SUFDakIsZ0VBQWdFO0lBQ2hFLElBQUksRUFBRSxXQUFXLENBQUM7SUFDbEIsd0RBQXdEO0lBQ3hELFNBQVMsRUFBRSxTQUFTLENBQUM7Q0FDdEI7QUFXRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFDSCxxQkFBYSxpQkFBaUI7SUFDNUIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBUztJQUUzQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQXNCRztJQUNILE9BQWEsa0JBQWtCLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxPQUFPLEdBQUUsTUFBYSxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBeUZ6RztDQUNGIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extension_provider.d.ts","sourceRoot":"","sources":["../../../src/providers/extension/extension_provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"extension_provider.d.ts","sourceRoot":"","sources":["../../../src/providers/extension/extension_provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAKzD,OAAO,KAAK,EAAuC,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEtF;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,sFAAsF;IACtF,IAAI,EAAE,UAAU,CAAC;IACjB,gEAAgE;IAChE,IAAI,EAAE,WAAW,CAAC;IAClB,wDAAwD;IACxD,SAAS,EAAE,SAAS,CAAC;CACtB;AAWD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAS;IAE3C;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,OAAa,kBAAkB,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,GAAE,MAAa,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAyFzG;CACF"}
|
|
@@ -1,23 +1,61 @@
|
|
|
1
1
|
import { jsonStringify } from '@aztec/foundation/json-rpc';
|
|
2
2
|
import { promiseWithResolvers } from '@aztec/foundation/promise';
|
|
3
|
+
import { deriveSharedKey, exportPublicKey, generateKeyPair, hashSharedSecret, importPublicKey } from '../../crypto.js';
|
|
3
4
|
/**
|
|
4
|
-
* Provider for discovering
|
|
5
|
+
* Provider for discovering Aztec wallet extensions.
|
|
6
|
+
*
|
|
7
|
+
* This class handles the discovery phase of wallet communication:
|
|
8
|
+
* 1. Broadcasts a discovery request with the dApp's public key
|
|
9
|
+
* 2. Receives responses from installed wallets with their public keys
|
|
10
|
+
* 3. Derives shared secrets and computes verification hashes
|
|
11
|
+
* 4. Returns discovered wallets with their secure channel components
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* const wallets = await ExtensionProvider.discoverExtensions(chainInfo);
|
|
16
|
+
* // Display wallets to user with optional emoji verification
|
|
17
|
+
* for (const wallet of wallets) {
|
|
18
|
+
* const emoji = hashToEmoji(wallet.info.verificationHash!);
|
|
19
|
+
* console.log(`${wallet.info.name}: ${emoji}`);
|
|
20
|
+
* }
|
|
21
|
+
* // User selects a wallet after verifying
|
|
22
|
+
* const wallet = await ExtensionWallet.create(wallets[0], chainInfo, 'my-app');
|
|
23
|
+
* ```
|
|
5
24
|
*/ export class ExtensionProvider {
|
|
6
|
-
static discoveredExtensions = new Map();
|
|
7
25
|
static discoveryInProgress = false;
|
|
8
26
|
/**
|
|
9
|
-
* Discovers all installed Aztec wallet extensions
|
|
27
|
+
* Discovers all installed Aztec wallet extensions and establishes secure channel components.
|
|
28
|
+
*
|
|
29
|
+
* This method:
|
|
30
|
+
* 1. Generates an ECDH key pair for this discovery session
|
|
31
|
+
* 2. Broadcasts a discovery request with the dApp's public key
|
|
32
|
+
* 3. Receives responses from wallets with their public keys and MessagePorts
|
|
33
|
+
* 4. Derives shared secrets and computes verification hashes
|
|
34
|
+
*
|
|
10
35
|
* @param chainInfo - Chain information to check if extensions support this network
|
|
11
36
|
* @param timeout - How long to wait for extensions to respond (ms)
|
|
12
|
-
* @returns Array of discovered
|
|
37
|
+
* @returns Array of discovered wallets with their secure channel components
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```typescript
|
|
41
|
+
* const wallets = await ExtensionProvider.discoverExtensions({
|
|
42
|
+
* chainId: Fr(31337),
|
|
43
|
+
* version: Fr(0)
|
|
44
|
+
* });
|
|
45
|
+
* // Access wallet info and secure channel
|
|
46
|
+
* const { info, port, sharedKey } = wallets[0];
|
|
47
|
+
* ```
|
|
13
48
|
*/ static async discoverExtensions(chainInfo, timeout = 1000) {
|
|
14
|
-
// If discovery is in progress, wait
|
|
49
|
+
// If discovery is already in progress, wait and return empty
|
|
50
|
+
// (caller should retry or handle appropriately)
|
|
15
51
|
if (this.discoveryInProgress) {
|
|
16
52
|
await new Promise((resolve)=>setTimeout(resolve, timeout));
|
|
17
|
-
return
|
|
53
|
+
return [];
|
|
18
54
|
}
|
|
19
55
|
this.discoveryInProgress = true;
|
|
20
|
-
this
|
|
56
|
+
// Generate key pair for this discovery session
|
|
57
|
+
const keyPair = await generateKeyPair();
|
|
58
|
+
const exportedPublicKey = await exportPublicKey(keyPair.publicKey);
|
|
21
59
|
const { promise, resolve } = promiseWithResolvers();
|
|
22
60
|
const requestId = globalThis.crypto.randomUUID();
|
|
23
61
|
const responses = [];
|
|
@@ -33,16 +71,45 @@ import { promiseWithResolvers } from '@aztec/foundation/promise';
|
|
|
33
71
|
return;
|
|
34
72
|
}
|
|
35
73
|
if (data.type === 'aztec-wallet-discovery-response' && data.requestId === requestId) {
|
|
36
|
-
|
|
37
|
-
|
|
74
|
+
// Get the MessagePort from the event
|
|
75
|
+
const port = event.ports?.[0];
|
|
76
|
+
if (!port) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
// Derive shared key from wallet's public key
|
|
80
|
+
const walletPublicKey = data.walletInfo.publicKey;
|
|
81
|
+
if (!walletPublicKey) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
void (async ()=>{
|
|
85
|
+
try {
|
|
86
|
+
const importedWalletKey = await importPublicKey(walletPublicKey);
|
|
87
|
+
const sharedKey = await deriveSharedKey(keyPair.privateKey, importedWalletKey);
|
|
88
|
+
// Compute verification hash
|
|
89
|
+
const verificationHash = await hashSharedSecret(sharedKey);
|
|
90
|
+
// Create wallet info with verification hash
|
|
91
|
+
const walletInfo = {
|
|
92
|
+
...data.walletInfo,
|
|
93
|
+
verificationHash
|
|
94
|
+
};
|
|
95
|
+
responses.push({
|
|
96
|
+
info: walletInfo,
|
|
97
|
+
port,
|
|
98
|
+
sharedKey
|
|
99
|
+
});
|
|
100
|
+
} catch {
|
|
101
|
+
// Failed to derive key, skip this wallet
|
|
102
|
+
}
|
|
103
|
+
})();
|
|
38
104
|
}
|
|
39
105
|
};
|
|
40
106
|
window.addEventListener('message', handleMessage);
|
|
41
|
-
// Send discovery message
|
|
107
|
+
// Send discovery message with our public key
|
|
42
108
|
const discoveryMessage = {
|
|
43
109
|
type: 'aztec-wallet-discovery',
|
|
44
110
|
requestId,
|
|
45
|
-
chainInfo
|
|
111
|
+
chainInfo,
|
|
112
|
+
publicKey: exportedPublicKey
|
|
46
113
|
};
|
|
47
114
|
window.postMessage(jsonStringify(discoveryMessage), '*');
|
|
48
115
|
// Wait for responses
|