From fe3f95ca0f5d354ac333c0076a0bfaa974445ada Mon Sep 17 00:00:00 2001 From: lwin Date: Tue, 8 Apr 2025 14:10:23 +0800 Subject: [PATCH 001/147] feat: init SeedlessOnboardingController --- .github/CODEOWNERS | 6 ++ README.md | 4 ++ .../CHANGELOG.md | 10 +++ .../seedless-onboarding-controller/LICENSE | 20 ++++++ .../seedless-onboarding-controller/README.md | 15 ++++ .../jest.config.js | 26 +++++++ .../package.json | 70 +++++++++++++++++++ .../src/SeedlessOnboardingController.test.ts | 46 ++++++++++++ .../src/SeedlessOnboardingController.ts | 51 ++++++++++++++ .../src/constants.ts | 1 + .../src/index.ts | 3 + .../src/types.ts | 63 +++++++++++++++++ .../tsconfig.build.json | 17 +++++ .../tsconfig.json | 15 ++++ .../typedoc.json | 7 ++ teams.json | 3 +- tsconfig.build.json | 3 +- tsconfig.json | 1 + yarn.lock | 17 +++++ 19 files changed, 376 insertions(+), 2 deletions(-) create mode 100644 packages/seedless-onboarding-controller/CHANGELOG.md create mode 100644 packages/seedless-onboarding-controller/LICENSE create mode 100644 packages/seedless-onboarding-controller/README.md create mode 100644 packages/seedless-onboarding-controller/jest.config.js create mode 100644 packages/seedless-onboarding-controller/package.json create mode 100644 packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts create mode 100644 packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts create mode 100644 packages/seedless-onboarding-controller/src/constants.ts create mode 100644 packages/seedless-onboarding-controller/src/index.ts create mode 100644 packages/seedless-onboarding-controller/src/types.ts create mode 100644 packages/seedless-onboarding-controller/tsconfig.build.json create mode 100644 packages/seedless-onboarding-controller/tsconfig.json create mode 100644 packages/seedless-onboarding-controller/typedoc.json diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 9c9c331015..ae45546717 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -68,6 +68,9 @@ ## Wallet UX Team /packages/announcement-controller @MetaMask/wallet-ux +## Web3Auth Team +/packages/seedless-onboarding-controller @MetaMask/web3auth + ## Joint team ownership /packages/eth-json-rpc-provider @MetaMask/wallet-api-platform-engineers @MetaMask/wallet-framework-engineers /packages/json-rpc-engine @MetaMask/wallet-api-platform-engineers @MetaMask/wallet-framework-engineers @@ -78,6 +81,7 @@ /packages/permission-log-controller @MetaMask/wallet-api-platform-engineers @MetaMask/wallet-framework-engineers /packages/profile-sync-controller @MetaMask/identity /packages/remote-feature-flag-controller @MetaMask/extension-platform @MetaMask/mobile-platform +/packages/seedless-onboarding-controller @MetaMask/web3auth @MetaMask/wallet-framework-engineers ## Package Release related /packages/accounts-controller/package.json @MetaMask/accounts-engineers @MetaMask/wallet-framework-engineers @@ -142,3 +146,5 @@ /packages/bridge-status-controller/CHANGELOG.md @MetaMask/swaps-engineers @MetaMask/wallet-framework-engineers /packages/app-metadata-controller/package.json @MetaMask/mobile-platform @MetaMask/wallet-framework-engineers /packages/app-metadata-controller/CHANGELOG.md @MetaMask/mobile-platform @MetaMask/wallet-framework-engineers +/packages/seedless-onboarding-controller/package.json @MetaMask/web3auth @MetaMask/wallet-framework-engineers +/packages/seedless-onboarding-controller/CHANGELOG.md @MetaMask/web3auth @MetaMask/wallet-framework-engineers diff --git a/README.md b/README.md index eebd43dd69..1f3d2c522c 100644 --- a/README.md +++ b/README.md @@ -60,6 +60,7 @@ Each package in this repository has its own README where you can find installati - [`@metamask/rate-limit-controller`](packages/rate-limit-controller) - [`@metamask/remote-feature-flag-controller`](packages/remote-feature-flag-controller) - [`@metamask/sample-controllers`](packages/sample-controllers) +- [`@metamask/seedless-onboarding-controller`](packages/seedless-onboarding-controller) - [`@metamask/selected-network-controller`](packages/selected-network-controller) - [`@metamask/signature-controller`](packages/signature-controller) - [`@metamask/token-search-discovery-controller`](packages/token-search-discovery-controller) @@ -114,6 +115,7 @@ linkStyle default opacity:0.5 rate_limit_controller(["@metamask/rate-limit-controller"]); remote_feature_flag_controller(["@metamask/remote-feature-flag-controller"]); sample_controllers(["@metamask/sample-controllers"]); + seedless_onboarding_controller(["@metamask/seedless-onboarding-controller"]); selected_network_controller(["@metamask/selected-network-controller"]); signature_controller(["@metamask/signature-controller"]); token_search_discovery_controller(["@metamask/token-search-discovery-controller"]); @@ -139,6 +141,7 @@ linkStyle default opacity:0.5 base_controller --> json_rpc_engine; bridge_controller --> base_controller; bridge_controller --> controller_utils; + bridge_controller --> multichain_network_controller; bridge_controller --> polling_controller; bridge_controller --> accounts_controller; bridge_controller --> eth_json_rpc_provider; @@ -160,6 +163,7 @@ linkStyle default opacity:0.5 earn_controller --> controller_utils; earn_controller --> accounts_controller; earn_controller --> network_controller; + earn_controller --> transaction_controller; eip1193_permission_middleware --> chain_agnostic_permission; eip1193_permission_middleware --> controller_utils; eip1193_permission_middleware --> json_rpc_engine; diff --git a/packages/seedless-onboarding-controller/CHANGELOG.md b/packages/seedless-onboarding-controller/CHANGELOG.md new file mode 100644 index 0000000000..b518709c7b --- /dev/null +++ b/packages/seedless-onboarding-controller/CHANGELOG.md @@ -0,0 +1,10 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] + +[Unreleased]: https://github.com/MetaMask/core/ diff --git a/packages/seedless-onboarding-controller/LICENSE b/packages/seedless-onboarding-controller/LICENSE new file mode 100644 index 0000000000..7d002dced3 --- /dev/null +++ b/packages/seedless-onboarding-controller/LICENSE @@ -0,0 +1,20 @@ +MIT License + +Copyright (c) 2025 MetaMask + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE diff --git a/packages/seedless-onboarding-controller/README.md b/packages/seedless-onboarding-controller/README.md new file mode 100644 index 0000000000..66f763cf46 --- /dev/null +++ b/packages/seedless-onboarding-controller/README.md @@ -0,0 +1,15 @@ +# `@metamask/seedless-onboarding-controller` + +Backup and restore SRP + +## Installation + +`yarn add @metamask/seedless-onboarding-controller` + +or + +`npm install @metamask/seedless-onboarding-controller` + +## Contributing + +This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme). diff --git a/packages/seedless-onboarding-controller/jest.config.js b/packages/seedless-onboarding-controller/jest.config.js new file mode 100644 index 0000000000..ca08413339 --- /dev/null +++ b/packages/seedless-onboarding-controller/jest.config.js @@ -0,0 +1,26 @@ +/* + * For a detailed explanation regarding each configuration property and type check, visit: + * https://jestjs.io/docs/configuration + */ + +const merge = require('deepmerge'); +const path = require('path'); + +const baseConfig = require('../../jest.config.packages'); + +const displayName = path.basename(__dirname); + +module.exports = merge(baseConfig, { + // The display name when running multiple projects + displayName, + + // An object that configures minimum threshold enforcement for coverage results + coverageThreshold: { + global: { + branches: 100, + functions: 100, + lines: 100, + statements: 100, + }, + }, +}); diff --git a/packages/seedless-onboarding-controller/package.json b/packages/seedless-onboarding-controller/package.json new file mode 100644 index 0000000000..ae0b443003 --- /dev/null +++ b/packages/seedless-onboarding-controller/package.json @@ -0,0 +1,70 @@ +{ + "name": "@metamask/seedless-onboarding-controller", + "version": "0.0.0", + "description": "Backup and restore SRP", + "keywords": [ + "MetaMask", + "Ethereum" + ], + "homepage": "https://github.com/MetaMask/core/tree/main/packages/seedless-onboarding-controller#readme", + "bugs": { + "url": "https://github.com/MetaMask/core/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/MetaMask/core.git" + }, + "license": "MIT", + "sideEffects": false, + "exports": { + ".": { + "import": { + "types": "./dist/index.d.mts", + "default": "./dist/index.mjs" + }, + "require": { + "types": "./dist/index.d.cts", + "default": "./dist/index.cjs" + } + }, + "./package.json": "./package.json" + }, + "main": "./dist/index.cjs", + "types": "./dist/index.d.cts", + "files": [ + "dist/" + ], + "scripts": { + "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references", + "build:docs": "typedoc", + "changelog:update": "../../scripts/update-changelog.sh @metamask/seedless-onboarding-controller", + "changelog:validate": "../../scripts/validate-changelog.sh @metamask/seedless-onboarding-controller", + "publish:preview": "yarn npm publish --tag preview", + "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", + "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", + "test:verbose": "NODE_OPTIONS=--experimental-vm-modules jest --verbose", + "test:watch": "NODE_OPTIONS=--experimental-vm-modules jest --watch", + "since-latest-release": "../../scripts/since-latest-release.sh" + }, + "dependencies": { + "@metamask/base-controller": "^8.0.0", + "@metamask/browser-passworder": "^4.3.0" + }, + "devDependencies": { + "@metamask/auto-changelog": "^3.4.4", + "@types/jest": "^27.4.1", + "deepmerge": "^4.2.2", + "jest": "^27.5.1", + "ts-jest": "^27.1.4", + "typedoc": "^0.24.8", + "typedoc-plugin-missing-exports": "^2.0.0", + "typescript": "~5.2.2" + }, + "engines": { + "node": "^18.18 || >=20" + }, + "publishConfig": { + "access": "public", + "registry": "https://registry.npmjs.org/" + } +} diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts new file mode 100644 index 0000000000..a60066c6be --- /dev/null +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts @@ -0,0 +1,46 @@ +import { SeedlessOnboardingController } from './SeedlessOnboardingController'; +import type { SeedlessOnboardingControllerMessenger } from './types'; + +/** + * Creates a mock user operation messenger. + * + * @returns The mock user operation messenger. + */ +function buildSeedlessOnboardingControllerMessenger() { + return { + call: jest.fn(), + publish: jest.fn(), + registerActionHandler: jest.fn(), + registerInitialEventPayload: jest.fn(), + subscribe: jest.fn(), + } as unknown as jest.Mocked; +} + +describe('SeedlessOnboardingController', () => { + describe('constructor', () => { + it('should initialize the controller with the given options', () => { + const messenger = buildSeedlessOnboardingControllerMessenger(); + const controller = new SeedlessOnboardingController({ + messenger, + }); + + expect(controller.state).toStrictEqual({ + isNewUser: true, + vault: undefined, + }); + }); + + it('should be able to overwrite the default state', () => { + const messenger = buildSeedlessOnboardingControllerMessenger(); + const controller = new SeedlessOnboardingController({ + messenger, + state: { isNewUser: false, vault: 'test' }, + }); + + expect(controller.state).toStrictEqual({ + isNewUser: false, + vault: 'test', + }); + }); + }); +}); diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts new file mode 100644 index 0000000000..050859e733 --- /dev/null +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -0,0 +1,51 @@ +import type { StateMetadata } from '@metamask/base-controller'; +import { BaseController } from '@metamask/base-controller'; + +import { controllerName } from './constants'; +import type { + SeedlessOnboardingControllerMessenger, + SeedlessOnboardingControllerOptions, + SeedlessOnboardingControllerState, +} from './types'; + +/** + * Seedless Onboarding Controller State Metadata. + * + * This allows us to choose if fields of the state should be persisted or not + * using the `persist` flag; and if they can be sent to Sentry or not, using + * the `anonymous` flag. + */ +const seedlessOnboardingMetadata: StateMetadata = + { + vault: { + persist: true, + anonymous: false, + }, + isNewUser: { + persist: true, + anonymous: false, + }, + }; + +export const defaultState: SeedlessOnboardingControllerState = { + isNewUser: true, + vault: undefined, +}; + +export class SeedlessOnboardingController extends BaseController< + typeof controllerName, + SeedlessOnboardingControllerState, + SeedlessOnboardingControllerMessenger +> { + constructor({ messenger, state }: SeedlessOnboardingControllerOptions) { + super({ + name: controllerName, + metadata: seedlessOnboardingMetadata, + state: { + ...defaultState, + ...state, + }, + messenger, + }); + } +} diff --git a/packages/seedless-onboarding-controller/src/constants.ts b/packages/seedless-onboarding-controller/src/constants.ts new file mode 100644 index 0000000000..1fe20d7499 --- /dev/null +++ b/packages/seedless-onboarding-controller/src/constants.ts @@ -0,0 +1 @@ +export const controllerName = 'SeedlessOnboardingController'; diff --git a/packages/seedless-onboarding-controller/src/index.ts b/packages/seedless-onboarding-controller/src/index.ts new file mode 100644 index 0000000000..a8abbfda20 --- /dev/null +++ b/packages/seedless-onboarding-controller/src/index.ts @@ -0,0 +1,3 @@ +export { SeedlessOnboardingController } from './SeedlessOnboardingController'; +export type * from './types'; +export * from './constants'; diff --git a/packages/seedless-onboarding-controller/src/types.ts b/packages/seedless-onboarding-controller/src/types.ts new file mode 100644 index 0000000000..7173eced32 --- /dev/null +++ b/packages/seedless-onboarding-controller/src/types.ts @@ -0,0 +1,63 @@ +import type { RestrictedMessenger } from '@metamask/base-controller'; +import type { ControllerGetStateAction } from '@metamask/base-controller'; +import type { ControllerStateChangeEvent } from '@metamask/base-controller'; + +import type { controllerName } from './constants'; + +// State +export type SeedlessOnboardingControllerState = { + /** + * Encrypted array of serialized keyrings data. + */ + vault?: string; + /** + * Indicates whether the user has already fully/partially completed the Seedless Onboarding flow. + * + * An encryption key is generated from user entered password using Threshold OPRF and the seed phrase is encrypted with the key. + * During the Seedless Onboarding Authentication step, TOPRF services check whether user has already generated the encryption key. + * + * If this value is `true`, we can assume that user already has completed the `SeedPhrase` generation step, and user will have to + * fetch the `SeedPhrase` with correct password. Otherwise, users will be asked to set up seedphrase and password, first. + */ + isNewUser?: boolean; +}; + +// Actions +export type SeedlessOnboardingControllerGetStateActions = + ControllerGetStateAction< + typeof controllerName, + SeedlessOnboardingControllerState + >; +export type AllowedActions = SeedlessOnboardingControllerGetStateActions; + +// Events +export type SeedlessOnboardingControllerStateChangeEvent = + ControllerStateChangeEvent< + typeof controllerName, + SeedlessOnboardingControllerState + >; +export type AllowedEvents = SeedlessOnboardingControllerStateChangeEvent; + +// Messenger +export type SeedlessOnboardingControllerMessenger = RestrictedMessenger< + typeof controllerName, + AllowedActions, + AllowedEvents, + AllowedActions['type'], + AllowedEvents['type'] +>; + +/** + * Seedless Onboarding Controller Options. + * + * @param messenger - The messenger to use for this controller. + * @param state - The initial state to set on this controller. + */ +export type SeedlessOnboardingControllerOptions = { + messenger: SeedlessOnboardingControllerMessenger; + + /** + * @description Initial state to set on this controller. + */ + state?: SeedlessOnboardingControllerState; +}; diff --git a/packages/seedless-onboarding-controller/tsconfig.build.json b/packages/seedless-onboarding-controller/tsconfig.build.json new file mode 100644 index 0000000000..38d8a31843 --- /dev/null +++ b/packages/seedless-onboarding-controller/tsconfig.build.json @@ -0,0 +1,17 @@ +{ + "extends": "../../tsconfig.packages.build.json", + "compilerOptions": { + "baseUrl": "./", + "outDir": "./dist", + "rootDir": "./src" + }, + "references": [ + { + "path": "../base-controller/tsconfig.build.json" + }, + { + "path": "../message-manager/tsconfig.build.json" + } + ], + "include": ["../../types", "./src"] +} diff --git a/packages/seedless-onboarding-controller/tsconfig.json b/packages/seedless-onboarding-controller/tsconfig.json new file mode 100644 index 0000000000..1861422bee --- /dev/null +++ b/packages/seedless-onboarding-controller/tsconfig.json @@ -0,0 +1,15 @@ +{ + "extends": "../../tsconfig.packages.json", + "compilerOptions": { + "baseUrl": "./" + }, + "references": [ + { + "path": "../base-controller" + }, + { + "path": "../message-manager" + } + ], + "include": ["../../types", "./src"] +} diff --git a/packages/seedless-onboarding-controller/typedoc.json b/packages/seedless-onboarding-controller/typedoc.json new file mode 100644 index 0000000000..c9da015dbf --- /dev/null +++ b/packages/seedless-onboarding-controller/typedoc.json @@ -0,0 +1,7 @@ +{ + "entryPoints": ["./src/index.ts"], + "excludePrivate": true, + "hideGenerator": true, + "out": "docs", + "tsconfig": "./tsconfig.build.json" +} diff --git a/teams.json b/teams.json index 579956a115..7ff62d06aa 100644 --- a/teams.json +++ b/teams.json @@ -44,5 +44,6 @@ "metamask/user-operation-controller": "team-confirmations", "metamask/multichain-transactions-controller": "team-sol,team-accounts", "metamask/token-search-discovery-controller": "team-portfolio", - "metamask/earn-controller": "team-earn" + "metamask/earn-controller": "team-earn", + "metamask/seedless-onboarding-controller": "team-web3auth" } diff --git a/tsconfig.build.json b/tsconfig.build.json index e7856dcf1f..2ef758e5db 100644 --- a/tsconfig.build.json +++ b/tsconfig.build.json @@ -23,12 +23,12 @@ { "path": "./packages/keyring-controller/tsconfig.build.json" }, { "path": "./packages/logging-controller/tsconfig.build.json" }, { "path": "./packages/message-manager/tsconfig.build.json" }, + { "path": "./packages/multichain-api-middleware/tsconfig.build.json" }, { "path": "./packages/multichain-network-controller/tsconfig.build.json" }, { "path": "./packages/multichain-transactions-controller/tsconfig.build.json" }, { "path": "./packages/multichain/tsconfig.build.json" }, - { "path": "./packages/multichain-api-middleware/tsconfig.build.json" }, { "path": "./packages/name-controller/tsconfig.build.json" }, { "path": "./packages/network-controller/tsconfig.build.json" }, { @@ -44,6 +44,7 @@ { "path": "./packages/rate-limit-controller/tsconfig.build.json" }, { "path": "./packages/remote-feature-flag-controller/tsconfig.build.json" }, { "path": "./packages/sample-controllers/tsconfig.build.json" }, + { "path": "./packages/seedless-onboarding-controller/tsconfig.build.json" }, { "path": "./packages/selected-network-controller/tsconfig.build.json" }, { "path": "./packages/signature-controller/tsconfig.build.json" }, { diff --git a/tsconfig.json b/tsconfig.json index 9b30e2886a..263383bd69 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -46,6 +46,7 @@ { "path": "./packages/rate-limit-controller" }, { "path": "./packages/remote-feature-flag-controller" }, { "path": "./packages/sample-controllers" }, + { "path": "./packages/seedless-onboarding-controller" }, { "path": "./packages/selected-network-controller" }, { "path": "./packages/signature-controller" }, { "path": "./packages/token-search-discovery-controller" }, diff --git a/yarn.lock b/yarn.lock index 32d1ee7e12..1b031e9212 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4187,6 +4187,23 @@ __metadata: languageName: node linkType: hard +"@metamask/seedless-onboarding-controller@workspace:packages/seedless-onboarding-controller": + version: 0.0.0-use.local + resolution: "@metamask/seedless-onboarding-controller@workspace:packages/seedless-onboarding-controller" + dependencies: + "@metamask/auto-changelog": "npm:^3.4.4" + "@metamask/base-controller": "npm:^8.0.0" + "@metamask/browser-passworder": "npm:^4.3.0" + "@types/jest": "npm:^27.4.1" + deepmerge: "npm:^4.2.2" + jest: "npm:^27.5.1" + ts-jest: "npm:^27.1.4" + typedoc: "npm:^0.24.8" + typedoc-plugin-missing-exports: "npm:^2.0.0" + typescript: "npm:~5.2.2" + languageName: unknown + linkType: soft + "@metamask/selected-network-controller@npm:^22.0.0, @metamask/selected-network-controller@workspace:packages/selected-network-controller": version: 0.0.0-use.local resolution: "@metamask/selected-network-controller@workspace:packages/selected-network-controller" From de16123d25309f64353abbf11a10a2799719b8aa Mon Sep 17 00:00:00 2001 From: lwin Date: Thu, 10 Apr 2025 13:02:24 +0800 Subject: [PATCH 002/147] feat: added optional vault Encryptor in constructor args --- .../package.json | 3 +- .../src/SeedlessOnboardingController.test.ts | 30 ++++++++++++++----- .../src/SeedlessOnboardingController.ts | 17 ++++++++++- .../src/types.ts | 30 +++++++++++++++++++ yarn.lock | 1 + 5 files changed, 71 insertions(+), 10 deletions(-) diff --git a/packages/seedless-onboarding-controller/package.json b/packages/seedless-onboarding-controller/package.json index ae0b443003..3f2bcd1685 100644 --- a/packages/seedless-onboarding-controller/package.json +++ b/packages/seedless-onboarding-controller/package.json @@ -48,7 +48,8 @@ }, "dependencies": { "@metamask/base-controller": "^8.0.0", - "@metamask/browser-passworder": "^4.3.0" + "@metamask/browser-passworder": "^4.3.0", + "@metamask/utils": "^11.2.0" }, "devDependencies": { "@metamask/auto-changelog": "^3.4.4", diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts index a60066c6be..45437c6f4b 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts @@ -18,16 +18,30 @@ function buildSeedlessOnboardingControllerMessenger() { describe('SeedlessOnboardingController', () => { describe('constructor', () => { - it('should initialize the controller with the given options', () => { + it('should use the default encryptor if none is provided', () => { const messenger = buildSeedlessOnboardingControllerMessenger(); - const controller = new SeedlessOnboardingController({ - messenger, - }); + expect( + () => + new SeedlessOnboardingController({ + messenger, + }), + ).not.toThrow(); + }); - expect(controller.state).toStrictEqual({ - isNewUser: true, - vault: undefined, - }); + it('should be able to overwrite the default encryptor', () => { + const messenger = buildSeedlessOnboardingControllerMessenger(); + const encryptor = { + encrypt: jest.fn(), + decrypt: jest.fn(), + }; + + expect( + () => + new SeedlessOnboardingController({ + messenger, + encryptor, + }), + ).not.toThrow(); }); it('should be able to overwrite the default state', () => { diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index 050859e733..c9be088794 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -1,8 +1,10 @@ import type { StateMetadata } from '@metamask/base-controller'; import { BaseController } from '@metamask/base-controller'; +import { encrypt, decrypt } from '@metamask/browser-passworder'; import { controllerName } from './constants'; import type { + Encryptor, SeedlessOnboardingControllerMessenger, SeedlessOnboardingControllerOptions, SeedlessOnboardingControllerState, @@ -37,7 +39,16 @@ export class SeedlessOnboardingController extends BaseController< SeedlessOnboardingControllerState, SeedlessOnboardingControllerMessenger > { - constructor({ messenger, state }: SeedlessOnboardingControllerOptions) { + readonly #vaultEncryptor: Encryptor = { + encrypt, + decrypt, + }; + + constructor({ + messenger, + state, + encryptor, + }: SeedlessOnboardingControllerOptions) { super({ name: controllerName, metadata: seedlessOnboardingMetadata, @@ -47,5 +58,9 @@ export class SeedlessOnboardingController extends BaseController< }, messenger, }); + + if (encryptor) { + this.#vaultEncryptor = encryptor; + } } } diff --git a/packages/seedless-onboarding-controller/src/types.ts b/packages/seedless-onboarding-controller/src/types.ts index 7173eced32..5361c3ed29 100644 --- a/packages/seedless-onboarding-controller/src/types.ts +++ b/packages/seedless-onboarding-controller/src/types.ts @@ -1,6 +1,7 @@ import type { RestrictedMessenger } from '@metamask/base-controller'; import type { ControllerGetStateAction } from '@metamask/base-controller'; import type { ControllerStateChangeEvent } from '@metamask/base-controller'; +import type { Json } from '@metamask/utils'; import type { controllerName } from './constants'; @@ -47,11 +48,34 @@ export type SeedlessOnboardingControllerMessenger = RestrictedMessenger< AllowedEvents['type'] >; +/** + * @description Encryptor interface for encrypting and decrypting seedless onboarding vault. + */ +export type Encryptor = { + /** + * Encrypts the given object with the given password. + * + * @param password - The password to encrypt with. + * @param object - The object to encrypt. + * @returns The encrypted string. + */ + encrypt: (password: string, object: Json) => Promise; + /** + * Decrypts the given encrypted string with the given password. + * + * @param password - The password to decrypt with. + * @param encryptedString - The encrypted string to decrypt. + * @returns The decrypted object. + */ + decrypt: (password: string, encryptedString: string) => Promise; +}; + /** * Seedless Onboarding Controller Options. * * @param messenger - The messenger to use for this controller. * @param state - The initial state to set on this controller. + * @param encryptor - The encryptor to use for encrypting and decrypting seedless onboarding vault. */ export type SeedlessOnboardingControllerOptions = { messenger: SeedlessOnboardingControllerMessenger; @@ -60,4 +84,10 @@ export type SeedlessOnboardingControllerOptions = { * @description Initial state to set on this controller. */ state?: SeedlessOnboardingControllerState; + + /** + * @description Encryptor to use for encrypting and decrypting seedless onboarding vault. + * @default browser-passworder @link https://github.com/MetaMask/browser-passworder + */ + encryptor?: Encryptor; }; diff --git a/yarn.lock b/yarn.lock index 1b031e9212..f47e6626c2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4194,6 +4194,7 @@ __metadata: "@metamask/auto-changelog": "npm:^3.4.4" "@metamask/base-controller": "npm:^8.0.0" "@metamask/browser-passworder": "npm:^4.3.0" + "@metamask/utils": "npm:^11.2.0" "@types/jest": "npm:^27.4.1" deepmerge: "npm:^4.2.2" jest: "npm:^27.5.1" From 6a3063819749c93fb56a9ae80d96141f42908962 Mon Sep 17 00:00:00 2001 From: lwin Date: Thu, 17 Apr 2025 12:20:26 +0800 Subject: [PATCH 003/147] feat: authenticate, createSeedPhraseBackup and fetchSeedPhraseBackup --- package.json | 3 +- .../jest.config.js | 3 + .../jest.environment.js | 16 + .../package.json | 9 +- .../src/SeedPhraseMetadata.ts | 181 +++ .../src/SeedlessOnboardingController.test.ts | 1009 ++++++++++++++++- .../src/SeedlessOnboardingController.ts | 512 ++++++++- .../src/constants.ts | 23 + .../src/errors.ts | 94 ++ .../src/logger.ts | 7 + .../src/types.ts | 52 +- .../tests/__fixtures__/topfClient.ts | 104 ++ .../tests/mocks/toprf.ts | 107 ++ .../tests/mocks/toprfEncryptor.ts | 50 + .../tests/mocks/vaultEncryptor.ts | 166 +++ .../tsconfig.json | 2 +- yarn.lock | 307 ++++- 17 files changed, 2605 insertions(+), 40 deletions(-) create mode 100644 packages/seedless-onboarding-controller/jest.environment.js create mode 100644 packages/seedless-onboarding-controller/src/SeedPhraseMetadata.ts create mode 100644 packages/seedless-onboarding-controller/src/errors.ts create mode 100644 packages/seedless-onboarding-controller/src/logger.ts create mode 100644 packages/seedless-onboarding-controller/tests/__fixtures__/topfClient.ts create mode 100644 packages/seedless-onboarding-controller/tests/mocks/toprf.ts create mode 100644 packages/seedless-onboarding-controller/tests/mocks/toprfEncryptor.ts create mode 100644 packages/seedless-onboarding-controller/tests/mocks/vaultEncryptor.ts diff --git a/package.json b/package.json index abcffb69e7..25b7e364ae 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,8 @@ "resolutions": { "elliptic@6.5.4": "^6.5.7", "fast-xml-parser@^4.3.4": "^4.4.1", - "ws@7.4.6": "^7.5.10" + "ws@7.4.6": "^7.5.10", + "@metamask/auth-network-utils": "file:./packages/seedless-onboarding-controller/auth-network-utils.tgz" }, "devDependencies": { "@babel/core": "^7.23.5", diff --git a/packages/seedless-onboarding-controller/jest.config.js b/packages/seedless-onboarding-controller/jest.config.js index ca08413339..0e525e1f76 100644 --- a/packages/seedless-onboarding-controller/jest.config.js +++ b/packages/seedless-onboarding-controller/jest.config.js @@ -23,4 +23,7 @@ module.exports = merge(baseConfig, { statements: 100, }, }, + + // These tests rely on the Crypto API + testEnvironment: '/jest.environment.js', }); diff --git a/packages/seedless-onboarding-controller/jest.environment.js b/packages/seedless-onboarding-controller/jest.environment.js new file mode 100644 index 0000000000..ee7ed6cb8b --- /dev/null +++ b/packages/seedless-onboarding-controller/jest.environment.js @@ -0,0 +1,16 @@ +const NodeEnvironment = require('jest-environment-node'); + +/** + * KeyringController depends on @noble/hashes, which as of 1.3.2 relies on the + * Web Crypto API in Node and browsers. + */ +class CustomTestEnvironment extends NodeEnvironment { + async setup() { + await super.setup(); + if (typeof this.global.crypto === 'undefined') { + this.global.crypto = require('crypto').webcrypto; + } + } +} + +module.exports = CustomTestEnvironment; diff --git a/packages/seedless-onboarding-controller/package.json b/packages/seedless-onboarding-controller/package.json index 3f2bcd1685..79ae7abdcf 100644 --- a/packages/seedless-onboarding-controller/package.json +++ b/packages/seedless-onboarding-controller/package.json @@ -49,13 +49,20 @@ "dependencies": { "@metamask/base-controller": "^8.0.0", "@metamask/browser-passworder": "^4.3.0", - "@metamask/utils": "^11.2.0" + "@metamask/toprf-secure-backup": "./toprf-secure-backup.tgz", + "@metamask/utils": "^11.4.0", + "@noble/hashes": "^1.7.2", + "async-mutex": "^0.5.0" }, "devDependencies": { "@metamask/auto-changelog": "^3.4.4", + "@noble/ciphers": "^0.5.2", + "@noble/curves": "^1.2.0", "@types/jest": "^27.4.1", "deepmerge": "^4.2.2", "jest": "^27.5.1", + "jest-environment-node": "^27.5.1", + "nock": "^13.3.1", "ts-jest": "^27.1.4", "typedoc": "^0.24.8", "typedoc-plugin-missing-exports": "^2.0.0", diff --git a/packages/seedless-onboarding-controller/src/SeedPhraseMetadata.ts b/packages/seedless-onboarding-controller/src/SeedPhraseMetadata.ts new file mode 100644 index 0000000000..c162fa60be --- /dev/null +++ b/packages/seedless-onboarding-controller/src/SeedPhraseMetadata.ts @@ -0,0 +1,181 @@ +import { + base64ToBytes, + bytesToBase64, + stringToBytes, + bytesToString, +} from '@metamask/utils'; + +import { SeedlessOnboardingControllerError } from './constants'; + +type ISeedPhraseMetadata = { + seedPhrase: Uint8Array; + timestamp: number; + toBytes: () => Uint8Array; +}; + +// SeedPhraseMetadata type without the seedPhrase and toBytes methods +// in which the seedPhrase is base64 encoded for more compacted metadata +type IBase64SeedPhraseMetadata = Omit< + ISeedPhraseMetadata, + 'seedPhrase' | 'toBytes' +> & { + seedPhrase: string; // base64 encoded string +}; + +/** + * SeedPhraseMetadata is a class that adds metadata to the seed phrase. + * + * It contains the seed phrase and the timestamp when it was created. + * It is used to store the seed phrase in the metadata store. + * + * @example + * ```ts + * const seedPhraseMetadata = new SeedPhraseMetadata(seedPhrase); + * ``` + */ +export class SeedPhraseMetadata implements ISeedPhraseMetadata { + readonly #seedPhrase: Uint8Array; + + readonly #timestamp: number; + + /** + * Create a new SeedPhraseMetadata instance. + * + * @param seedPhrase - The seed phrase to add metadata to. + * @param timestamp - The timestamp when the seed phrase was created. + */ + constructor(seedPhrase: Uint8Array, timestamp: number = Date.now()) { + this.#seedPhrase = seedPhrase; + this.#timestamp = timestamp; + } + + /** + * Create an Array of SeedPhraseMetadata instances from an array of seed phrases. + * + * To respect the order of the seed phrases, we add the index to the timestamp + * so that the first seed phrase backup will have the oldest timestamp + * and the last seed phrase backup will have the newest timestamp. + * + * @param seedPhrases - The seed phrases to add metadata to. + * @returns The SeedPhraseMetadata instances. + */ + static fromBatchSeedPhrases(seedPhrases: Uint8Array[]): SeedPhraseMetadata[] { + const timestamp = Date.now(); + return seedPhrases.map((seedPhrase, index) => { + // To respect the order of the seed phrases, we add the index to the timestamp + // so that the first seed phrase backup will have the oldest timestamp + // and the last seed phrase backup will have the newest timestamp + const backupCreatedAt = timestamp + index * 5; + return new SeedPhraseMetadata(seedPhrase, backupCreatedAt); + }); + } + + /** + * Assert that the provided value is a valid seed phrase metadata. + * + * @param value - The value to check. + * @throws If the value is not a valid seed phrase metadata. + */ + static assertIsBase64SeedphraseMetadata( + value: unknown, + ): asserts value is IBase64SeedPhraseMetadata { + if ( + typeof value !== 'object' || + !value || + !('seedPhrase' in value) || + typeof value.seedPhrase !== 'string' || + !('timestamp' in value) || + typeof value.timestamp !== 'number' + ) { + throw new Error( + SeedlessOnboardingControllerError.InvalidSeedPhraseMetadata, + ); + } + } + + /** + * Parse the seed phrase metadata from the metadata store and return the array of raw seed phrases. + * + * This method also sorts the seed phrases by timestamp in descending order, i.e. the newest seed phrase will be the first element in the array. + * + * @param seedPhraseMetadataArr - The array of SeedPhrase Metadata from the metadata store. + * @returns The array of raw seed phrases. + */ + static parseSeedPhraseFromMetadataStore( + seedPhraseMetadataArr: Uint8Array[], + ): Uint8Array[] { + const parsedSeedPhraseMetadata = seedPhraseMetadataArr.map((metadata) => + SeedPhraseMetadata.fromRawMetadata(metadata), + ); + + const seedPhrases = SeedPhraseMetadata.sort(parsedSeedPhraseMetadata); + + return seedPhrases.map( + (seedPhraseMetadata) => seedPhraseMetadata.seedPhrase, + ); + } + + /** + * Parse and create the SeedPhraseMetadata instance from the raw metadata. + * + * @param rawMetadata - The raw metadata. + * @returns The parsed seed phrase metadata. + */ + static fromRawMetadata(rawMetadata: Uint8Array): SeedPhraseMetadata { + const serializedMetadata = bytesToString(rawMetadata); + const parsedMetadata = JSON.parse(serializedMetadata); + + SeedPhraseMetadata.assertIsBase64SeedphraseMetadata(parsedMetadata); + + const seedPhraseBytes = base64ToBytes(parsedMetadata.seedPhrase); + return new SeedPhraseMetadata(seedPhraseBytes, parsedMetadata.timestamp); + } + + /** + * Sort the seed phrases by timestamp. + * + * @param seedPhrases - The seed phrases to sort. + * @param order - The order to sort the seed phrases. Default is `desc`. + * + * @returns The sorted seed phrases. + */ + static sort( + seedPhrases: SeedPhraseMetadata[], + order: 'asc' | 'desc' = 'desc', + ): SeedPhraseMetadata[] { + return seedPhrases.sort((a, b) => { + if (order === 'asc') { + return a.timestamp - b.timestamp; + } + return b.timestamp - a.timestamp; + }); + } + + get seedPhrase() { + return this.#seedPhrase; + } + + get timestamp() { + return this.#timestamp; + } + + /** + * Serialize the seed phrase metadata and convert it to a Uint8Array. + * + * @returns The serialized SeedPhraseMetadata value in bytes. + */ + toBytes(): Uint8Array { + // encode the raw SeedPhrase to base64 encoded string + // to create more compacted metadata + const b64SeedPhrase = bytesToBase64(this.#seedPhrase); + + // serialize the metadata to a JSON string + const serializedMetadata = JSON.stringify({ + seedPhrase: b64SeedPhrase, + timestamp: this.#timestamp, + }); + + // convert the serialized metadata to bytes(Uint8Array) + return stringToBytes(serializedMetadata); + } +} diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts index 45437c6f4b..51c5fd9e54 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts @@ -1,5 +1,56 @@ +import { + TOPRFError, + type KeyPair, + type NodeAuthTokens, + type RecoverEncryptionKeyResult, + type ToprfSecureBackup, +} from '@metamask/toprf-secure-backup'; +import { bytesToBase64, stringToBytes } from '@metamask/utils'; +import { keccak_256 as keccak256 } from '@noble/hashes/sha3'; + +import { + Web3AuthNetwork, + SeedlessOnboardingControllerError, +} from './constants'; +import { RecoveryError } from './errors'; import { SeedlessOnboardingController } from './SeedlessOnboardingController'; -import type { SeedlessOnboardingControllerMessenger } from './types'; +import { SeedPhraseMetadata } from './SeedPhraseMetadata'; +import type { + SeedlessOnboardingControllerMessenger, + SeedlessOnboardingControllerOptions, + SeedlessOnboardingControllerState, +} from './types'; +import { + handleMockSecretDataGet, + handleMockSecretDataAdd, + handleMockCommitment, + handleMockAuthenticate, +} from '../tests/__fixtures__/topfClient'; +import { + createMockSecretDataGetResponse, + MULTIPLE_MOCK_SEEDPHRASE_METADATA, +} from '../tests/mocks/toprf'; +import { MockToprfEncryptorDecryptor } from '../tests/mocks/toprfEncryptor'; +import MockVaultEncryptor from '../tests/mocks/vaultEncryptor'; + +type WithControllerCallback = ({ + controller, + initialState, + encryptor, + messenger, +}: { + controller: SeedlessOnboardingController; + encryptor: MockVaultEncryptor; + initialState: SeedlessOnboardingControllerState; + messenger: SeedlessOnboardingControllerMessenger; + toprfClient: ToprfSecureBackup; +}) => Promise | ReturnValue; + +type WithControllerOptions = Partial; + +type WithControllerArgs = + | [WithControllerCallback] + | [WithControllerOptions, WithControllerCallback]; /** * Creates a mock user operation messenger. @@ -16,24 +67,210 @@ function buildSeedlessOnboardingControllerMessenger() { } as unknown as jest.Mocked; } +/** + * Builds a mock encryptor for the vault. + * + * @returns The mock encryptor. + */ +function createMockVaultEncryptor() { + return new MockVaultEncryptor(); +} + +/** + * Builds a controller based on the given options and creates a new vault + * and keychain, then calls the given function with that controller. + * + * @param args - Either a function, or an options bag + a function. The options + * bag is equivalent to the options that KeyringController takes; + * the function will be called with the built controller, along with its + * preferences, encryptor and initial state. + * @returns Whatever the callback returns. + */ +async function withController( + ...args: WithControllerArgs +) { + const [{ ...rest }, fn] = args.length === 2 ? args : [{}, args[0]]; + const encryptor = new MockVaultEncryptor(); + const messenger = buildSeedlessOnboardingControllerMessenger(); + + const initialState: SeedlessOnboardingControllerState = rest.state || { + vault: undefined, + nodeAuthTokens: undefined, + backupHashes: [], + }; + + const controller = new SeedlessOnboardingController({ + encryptor, + messenger, + network: Web3AuthNetwork.Devnet, + state: initialState, + ...rest, + }); + const { toprfClient } = controller; + + return await fn({ + controller, + encryptor, + initialState: controller.state, + messenger, + toprfClient, + }); +} + +/** + * Builds a mock ToprfEncryptor. + * + * @returns The mock ToprfEncryptor. + */ +function createMockToprfEncryptor() { + return new MockToprfEncryptorDecryptor(); +} + +/** + * Mocks the createLocalEncKey method of the ToprfSecureBackup instance. + * + * @param toprfClient - The ToprfSecureBackup instance. + * @param password - The mock password. + * + * @returns The mock createLocalEncKey result. + */ +function mockCreateLocalEncKey( + toprfClient: ToprfSecureBackup, + password: string, +) { + const mockToprfEncryptor = createMockToprfEncryptor(); + + const encKey = mockToprfEncryptor.deriveEncKey(password); + const authKeyPair = mockToprfEncryptor.deriveAuthKeyPair(password); + const oprfKey = BigInt(0); + const seed = stringToBytes(password); + + jest.spyOn(toprfClient, 'createLocalEncKey').mockReturnValue({ + encKey, + authKeyPair, + oprfKey, + seed, + }); + + return { + encKey, + authKeyPair, + oprfKey, + seed, + }; +} + +/** + * Mocks the recoverEncKey method of the ToprfSecureBackup instance. + * + * @param toprfClient - The ToprfSecureBackup instance. + * @param password - The mock password. + * + * @returns The mock recoverEncKey result. + */ +function mockRecoverEncKey( + toprfClient: ToprfSecureBackup, + password: string, +): RecoverEncryptionKeyResult { + const mockToprfEncryptor = createMockToprfEncryptor(); + + const encKey = mockToprfEncryptor.deriveEncKey(password); + const authKeyPair = mockToprfEncryptor.deriveAuthKeyPair(password); + const rateLimitResetResult = Promise.resolve(); + + jest.spyOn(toprfClient, 'recoverEncKey').mockResolvedValueOnce({ + encKey, + authKeyPair, + rateLimitResetResult, + shareKeyIndex: 1, + }); + + return { + encKey, + authKeyPair, + rateLimitResetResult, + shareKeyIndex: 1, + }; +} + +/** + * Creates a mock vault. + * + * @param encKey - The encryption key. + * @param authKeyPair - The authentication key pair. + * @param MOCK_PASSWORD - The mock password. + * @param authTokens - The authentication tokens. + * + * @returns The mock vault data. + */ +async function createMockVault( + encKey: Uint8Array, + authKeyPair: KeyPair, + MOCK_PASSWORD: string, + authTokens: NodeAuthTokens, +) { + const encryptor = createMockVaultEncryptor(); + + const serializedKeyData = JSON.stringify({ + authTokens, + toprfEncryptionKey: bytesToBase64(encKey), + toprfAuthKeyPair: JSON.stringify({ + sk: `0x${authKeyPair.sk.toString(16)}`, + pk: bytesToBase64(authKeyPair.pk), + }), + }); + + const encryptedMockVault = await encryptor.encrypt( + MOCK_PASSWORD, + serializedKeyData, + ); + + return encryptedMockVault; +} + +const authConnectionId = 'seedless-onboarding'; +const groupedAuthConnectionId = 'google'; +const userId = 'user-test@gmail.com'; +const idTokens = ['idToken']; + +const MOCK_NODE_AUTH_TOKENS = [ + { + authToken: 'authToken', + nodeIndex: 1, + nodePubKey: 'nodePubKey', + }, + { + authToken: 'authToken2', + nodeIndex: 2, + nodePubKey: 'nodePubKey2', + }, + { + authToken: 'authToken3', + nodeIndex: 3, + nodePubKey: 'nodePubKey3', + }, +]; + +const MOCK_SEED_PHRASE = stringToBytes( + 'horror pink muffin canal young photo magnet runway start elder patch until', +); + describe('SeedlessOnboardingController', () => { describe('constructor', () => { - it('should use the default encryptor if none is provided', () => { + it('should be able to instantiate', () => { const messenger = buildSeedlessOnboardingControllerMessenger(); - expect( - () => - new SeedlessOnboardingController({ - messenger, - }), - ).not.toThrow(); + const controller = new SeedlessOnboardingController({ + messenger, + }); + expect(controller).toBeDefined(); + expect(controller.state).toStrictEqual({ + backupHashes: [], + }); }); - it('should be able to overwrite the default encryptor', () => { + it('should be able to instantiate with an encryptor', () => { const messenger = buildSeedlessOnboardingControllerMessenger(); - const encryptor = { - encrypt: jest.fn(), - decrypt: jest.fn(), - }; + const encryptor = createMockVaultEncryptor(); expect( () => @@ -43,18 +280,748 @@ describe('SeedlessOnboardingController', () => { }), ).not.toThrow(); }); + }); - it('should be able to overwrite the default state', () => { - const messenger = buildSeedlessOnboardingControllerMessenger(); - const controller = new SeedlessOnboardingController({ - messenger, - state: { isNewUser: false, vault: 'test' }, + describe('authenticate', () => { + it('should be able to register a new user', async () => { + await withController(async ({ controller, toprfClient }) => { + jest.spyOn(toprfClient, 'authenticate').mockResolvedValue({ + nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, + isNewUser: false, + }); + + const authResult = await controller.authenticate({ + idTokens, + authConnectionId, + userId, + }); + + expect(authResult).toBeDefined(); + expect(authResult.nodeAuthTokens).toBeDefined(); + expect(authResult.isNewUser).toBe(false); + + expect(controller.state.nodeAuthTokens).toBeDefined(); + expect(controller.state.nodeAuthTokens).toStrictEqual( + MOCK_NODE_AUTH_TOKENS, + ); }); + }); - expect(controller.state).toStrictEqual({ - isNewUser: false, - vault: 'test', + it('should be able to authenticate an existing user', async () => { + await withController(async ({ controller, toprfClient }) => { + jest.spyOn(toprfClient, 'authenticate').mockResolvedValue({ + nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, + isNewUser: true, + }); + + const authResult = await controller.authenticate({ + idTokens, + authConnectionId, + userId, + }); + + expect(authResult).toBeDefined(); + expect(authResult.nodeAuthTokens).toBeDefined(); + expect(authResult.isNewUser).toBe(true); + + expect(controller.state.nodeAuthTokens).toBeDefined(); + expect(controller.state.nodeAuthTokens).toStrictEqual( + MOCK_NODE_AUTH_TOKENS, + ); + }); + }); + + it('should be able to authenticate with groupedAuthConnectionId', async () => { + await withController(async ({ controller, toprfClient }) => { + // mock the authentication method + jest.spyOn(toprfClient, 'authenticate').mockResolvedValue({ + nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, + isNewUser: true, + }); + + const authResult = await controller.authenticate({ + idTokens, + authConnectionId, + userId, + groupedAuthConnectionId, + }); + + expect(authResult).toBeDefined(); + expect(authResult.nodeAuthTokens).toBeDefined(); + expect(authResult.isNewUser).toBe(true); + + expect(controller.state.nodeAuthTokens).toBeDefined(); + expect(controller.state.nodeAuthTokens).toStrictEqual( + MOCK_NODE_AUTH_TOKENS, + ); + }); + }); + + it('should throw an error if the authentication fails', async () => { + const JSONRPC_ERROR = { + jsonrpc: '2.0', + error: { + code: -32000, + message: 'Internal error', + }, + }; + + await withController(async ({ controller }) => { + const handleCommitment = handleMockCommitment({ + status: 200, + body: JSONRPC_ERROR, + }); + const handleAuthentication = handleMockAuthenticate({ + status: 200, + body: JSONRPC_ERROR, + }); + await expect( + controller.authenticate({ + idTokens, + authConnectionId, + groupedAuthConnectionId, + userId, + }), + ).rejects.toThrow( + SeedlessOnboardingControllerError.AuthenticationError, + ); + expect(handleCommitment.isDone()).toBe(true); + expect(handleAuthentication.isDone()).toBe(false); + }); + }); + }); + + describe('createToprfKeyAndBackupSeedPhrase', () => { + const MOCK_PASSWORD = 'mock-password'; + + it('should be able to create a seed phrase backup', async () => { + await withController( + { state: { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, backupHashes: [] } }, + async ({ controller, toprfClient, initialState, encryptor }) => { + const { encKey, authKeyPair } = mockCreateLocalEncKey( + toprfClient, + MOCK_PASSWORD, + ); + + // persist the local enc key + jest.spyOn(toprfClient, 'persistOprfKey').mockResolvedValueOnce(); + // encrypt and store the secret data + const mockSecretDataAdd = handleMockSecretDataAdd(); + await controller.createToprfKeyAndBackupSeedPhrase({ + authConnectionId, + userId, + seedPhrase: MOCK_SEED_PHRASE, + password: MOCK_PASSWORD, + }); + + expect(mockSecretDataAdd.isDone()).toBe(true); + + expect(controller.state.vault).toBeDefined(); + expect(controller.state.vault).not.toBe(initialState.vault); + expect(controller.state.vault).not.toStrictEqual({}); + + // verify the vault data + const encryptedMockVault = await createMockVault( + encKey, + authKeyPair, + MOCK_PASSWORD, + MOCK_NODE_AUTH_TOKENS, + ); + + const expectedVaultValue = await encryptor.decrypt( + MOCK_PASSWORD, + encryptedMockVault, + ); + const resultedVaultValue = await encryptor.decrypt( + MOCK_PASSWORD, + controller.state.vault as string, + ); + + expect(expectedVaultValue).toStrictEqual(resultedVaultValue); + }, + ); + }); + + it('should throw an error if create encryption key fails', async () => { + await withController( + { state: { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, backupHashes: [] } }, + async ({ controller, toprfClient, initialState }) => { + jest + .spyOn(toprfClient, 'createLocalEncKey') + .mockImplementation(() => { + throw new Error('Failed to create local encryption key'); + }); + + await expect( + controller.createToprfKeyAndBackupSeedPhrase({ + authConnectionId, + userId, + seedPhrase: MOCK_SEED_PHRASE, + password: MOCK_PASSWORD, + }), + ).rejects.toThrow('Failed to create local encryption key'); + + // verify vault is not created + expect(controller.state.vault).toBe(initialState.vault); + }, + ); + }); + + it('should throw an error if user does not have the AuthToken', async () => { + await withController(async ({ controller, initialState }) => { + await expect( + controller.createToprfKeyAndBackupSeedPhrase({ + authConnectionId, + userId, + seedPhrase: MOCK_SEED_PHRASE, + password: MOCK_PASSWORD, + }), + ).rejects.toThrow( + SeedlessOnboardingControllerError.InsufficientAuthToken, + ); + + // verify vault is not created + expect(controller.state.vault).toBe(initialState.vault); }); }); + + it('should throw an error if persistOprfKey fails', async () => { + await withController( + { state: { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, backupHashes: [] } }, + async ({ controller, toprfClient }) => { + mockCreateLocalEncKey(toprfClient, MOCK_PASSWORD); + + jest + .spyOn(toprfClient, 'persistOprfKey') + .mockRejectedValueOnce( + new Error('Failed to persist local encryption key'), + ); + + const mockSecretDataAdd = handleMockSecretDataAdd(); + await expect( + controller.createToprfKeyAndBackupSeedPhrase({ + authConnectionId, + userId, + seedPhrase: MOCK_SEED_PHRASE, + password: MOCK_PASSWORD, + }), + ).rejects.toThrow( + SeedlessOnboardingControllerError.FailedToPersistOprfKey, + ); + + expect(mockSecretDataAdd.isDone()).toBe(true); + }, + ); + }); + + it('should throw an error if failed to create seedphrase backup', async () => { + await withController( + { state: { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, backupHashes: [] } }, + async ({ controller, toprfClient }) => { + mockCreateLocalEncKey(toprfClient, MOCK_PASSWORD); + + jest.spyOn(toprfClient, 'persistOprfKey').mockResolvedValueOnce(); + + jest + .spyOn(toprfClient, 'addSecretDataItem') + .mockRejectedValueOnce(new Error('Failed to add secret data item')); + + await expect( + controller.createToprfKeyAndBackupSeedPhrase({ + authConnectionId, + userId, + seedPhrase: MOCK_SEED_PHRASE, + password: MOCK_PASSWORD, + }), + ).rejects.toThrow( + SeedlessOnboardingControllerError.FailedToEncryptAndStoreSeedPhraseBackup, + ); + }, + ); + }); + }); + + describe('fetchAllSeedPhrases', () => { + const MOCK_PASSWORD = 'mock-password'; + + it('should be able to restore and login with a seed phrase from metadata', async () => { + await withController( + { state: { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, backupHashes: [] } }, + async ({ controller, toprfClient, initialState, encryptor }) => { + // fetch and decrypt the secret data + const { encKey, authKeyPair } = mockRecoverEncKey( + toprfClient, + MOCK_PASSWORD, + ); + + const mockSecretDataGet = handleMockSecretDataGet({ + status: 200, + body: createMockSecretDataGetResponse( + [MOCK_SEED_PHRASE], + MOCK_PASSWORD, + ), + }); + const secretData = await controller.fetchAllSeedPhrases({ + authConnectionId, + userId, + groupedAuthConnectionId, + password: MOCK_PASSWORD, + }); + + expect(mockSecretDataGet.isDone()).toBe(true); + expect(secretData).toBeDefined(); + expect(secretData).toStrictEqual([MOCK_SEED_PHRASE]); + + expect(controller.state.vault).toBeDefined(); + expect(controller.state.vault).not.toBe(initialState.vault); + expect(controller.state.vault).not.toStrictEqual({}); + + // verify the vault data + const encryptedMockVault = await createMockVault( + encKey, + authKeyPair, + MOCK_PASSWORD, + MOCK_NODE_AUTH_TOKENS, + ); + + const expectedVaultValue = await encryptor.decrypt( + MOCK_PASSWORD, + encryptedMockVault, + ); + const resultedVaultValue = await encryptor.decrypt( + MOCK_PASSWORD, + controller.state.vault as string, + ); + + expect(expectedVaultValue).toStrictEqual(resultedVaultValue); + }, + ); + }); + + it('should be able to restore multiple seed phrases from metadata', async () => { + await withController( + { state: { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, backupHashes: [] } }, + async ({ controller, toprfClient, encryptor }) => { + // fetch and decrypt the secret data + const { encKey, authKeyPair } = mockRecoverEncKey( + toprfClient, + MOCK_PASSWORD, + ); + + const mockSecretDataGet = handleMockSecretDataGet({ + status: 200, + body: createMockSecretDataGetResponse( + MULTIPLE_MOCK_SEEDPHRASE_METADATA, + MOCK_PASSWORD, + ), + }); + const secretData = await controller.fetchAllSeedPhrases({ + authConnectionId, + userId, + groupedAuthConnectionId, + password: MOCK_PASSWORD, + }); + + expect(mockSecretDataGet.isDone()).toBe(true); + expect(secretData).toBeDefined(); + + // `fetchAndRestoreSeedPhraseMetadata` should sort the seed phrases by timestamp and return the seed phrases in the correct order + // the seed phrases are sorted in descending order, so the firstly created seed phrase is the latest item in the array + expect(secretData).toStrictEqual([ + stringToBytes('seedPhrase3'), + stringToBytes('seedPhrase2'), + stringToBytes('seedPhrase1'), + ]); + + // verify the vault data + const encryptedMockVault = await createMockVault( + encKey, + authKeyPair, + MOCK_PASSWORD, + MOCK_NODE_AUTH_TOKENS, + ); + + const expectedVaultValue = await encryptor.decrypt( + MOCK_PASSWORD, + encryptedMockVault, + ); + const resultedVaultValue = await encryptor.decrypt( + MOCK_PASSWORD, + controller.state.vault as string, + ); + + expect(expectedVaultValue).toStrictEqual(resultedVaultValue); + }, + ); + }); + + it('should be able to overwrite the initial backupHashes', async () => { + await withController( + { state: { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, backupHashes: [] } }, + async ({ controller, toprfClient }) => { + const MOCK_SEED_PHRASES = [ + stringToBytes('seedPhrase1'), + stringToBytes('seedPhrase2'), + stringToBytes('seedPhrase3'), + ]; + + mockRecoverEncKey(toprfClient, MOCK_PASSWORD); + + jest + .spyOn(toprfClient, 'fetchAllSecretDataItems') + .mockResolvedValueOnce( + SeedPhraseMetadata.fromBatchSeedPhrases(MOCK_SEED_PHRASES).map( + (metadata) => metadata.toBytes(), + ), + ); + + await controller.fetchAllSeedPhrases({ + authConnectionId, + userId, + groupedAuthConnectionId, + password: MOCK_PASSWORD, + }); + + // sort the seed phrases in descending order to make the first seed phrase the latest item in the array + const SORTED_MOCK_SEED_PHRASES = [ + stringToBytes('seedPhrase3'), + stringToBytes('seedPhrase2'), + stringToBytes('seedPhrase1'), + ]; + + const expectedBackupHashes = SORTED_MOCK_SEED_PHRASES.map( + (seedPhrase) => bytesToBase64(keccak256(seedPhrase)), + ); + expect(controller.state.backupHashes).toStrictEqual( + expectedBackupHashes, + ); + }, + ); + }); + + it('should throw an error if the key recovery failed', async () => { + await withController( + { state: { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, backupHashes: [] } }, + async ({ controller, toprfClient }) => { + jest + .spyOn(toprfClient, 'recoverEncKey') + .mockRejectedValueOnce( + new Error('Failed to recover encryption key'), + ); + + await expect( + controller.fetchAllSeedPhrases({ + authConnectionId, + userId, + groupedAuthConnectionId, + password: 'INCORRECT_PASSWORD', + }), + ).rejects.toThrow(SeedlessOnboardingControllerError.LoginFailedError); + }, + ); + }); + + it('should throw an error if failed to decrypt the SeedPhraseBackup data', async () => { + await withController( + { state: { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, backupHashes: [] } }, + async ({ controller, toprfClient }) => { + mockRecoverEncKey(toprfClient, MOCK_PASSWORD); + + jest + .spyOn(toprfClient, 'fetchAllSecretDataItems') + .mockRejectedValueOnce(new Error('Failed to decrypt data')); + + await expect( + controller.fetchAllSeedPhrases({ + authConnectionId, + userId, + groupedAuthConnectionId, + password: 'INCORRECT_PASSWORD', + }), + ).rejects.toThrow( + SeedlessOnboardingControllerError.FailedToFetchSeedPhraseMetadata, + ); + }, + ); + }); + + it('should throw an error if the restored seed phrases are not in the correct shape', async () => { + await withController( + { state: { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, backupHashes: [] } }, + async ({ controller, toprfClient }) => { + mockRecoverEncKey(toprfClient, MOCK_PASSWORD); + + // mock the incorrect data shape + jest + .spyOn(toprfClient, 'fetchAllSecretDataItems') + .mockResolvedValueOnce([ + stringToBytes(JSON.stringify({ key: 'value' })), + ]); + await expect( + controller.fetchAllSeedPhrases({ + authConnectionId, + userId, + groupedAuthConnectionId, + password: MOCK_PASSWORD, + }), + ).rejects.toThrow( + SeedlessOnboardingControllerError.InvalidSeedPhraseMetadata, + ); + }, + ); + }); + + it('should handle TooManyLoginAttempts error', async () => { + await withController( + { state: { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, backupHashes: [] } }, + async ({ controller, toprfClient }) => { + jest.spyOn(toprfClient, 'recoverEncKey').mockRejectedValueOnce( + new TOPRFError(1009, 'Rate limit exceeded', { + rateLimitDetails: { + remainingTime: 10, + message: 'Rate limit exceeded', + isPermanent: false, + }, + }), + ); + + await expect( + controller.fetchAllSeedPhrases({ + authConnectionId, + userId, + groupedAuthConnectionId, + password: MOCK_PASSWORD, + }), + ).rejects.toStrictEqual( + new RecoveryError( + SeedlessOnboardingControllerError.TooManyLoginAttempts, + { + remainingTime: 10, + message: 'Rate limit exceeded', + isPermanent: false, + }, + ), + ); + }, + ); + }); + + it('should handle IncorrectPassword error', async () => { + await withController( + { state: { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, backupHashes: [] } }, + async ({ controller, toprfClient }) => { + jest + .spyOn(toprfClient, 'recoverEncKey') + .mockRejectedValueOnce( + new TOPRFError(1006, 'Could not derive encryption key'), + ); + + await expect( + controller.fetchAllSeedPhrases({ + authConnectionId, + userId, + groupedAuthConnectionId, + password: MOCK_PASSWORD, + }), + ).rejects.toStrictEqual( + new RecoveryError( + SeedlessOnboardingControllerError.IncorrectPassword, + ), + ); + }, + ); + }); + + it('should handle Unexpected error during key recovery', async () => { + await withController( + { state: { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, backupHashes: [] } }, + async ({ controller, toprfClient }) => { + jest + .spyOn(toprfClient, 'recoverEncKey') + .mockRejectedValueOnce( + new TOPRFError(1004, 'Insufficient valid responses'), + ); + + await expect( + controller.fetchAllSeedPhrases({ + authConnectionId, + userId, + groupedAuthConnectionId, + password: MOCK_PASSWORD, + }), + ).rejects.toStrictEqual( + new RecoveryError( + SeedlessOnboardingControllerError.LoginFailedError, + ), + ); + }, + ); + }); + }); + + describe('vault', () => { + const MOCK_PASSWORD = 'mock-password'; + + it('should not create a vault if the user does not have encrypted seed phrase metadata', async () => { + await withController( + { state: { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, backupHashes: [] } }, + async ({ controller, initialState, toprfClient }) => { + expect(initialState.vault).toBeUndefined(); + + mockRecoverEncKey(toprfClient, MOCK_PASSWORD); + + const mockSecretDataGet = handleMockSecretDataGet({ + status: 200, + body: { + success: true, + data: [], + }, + }); + await controller.fetchAllSeedPhrases({ + authConnectionId, + userId, + groupedAuthConnectionId, + password: MOCK_PASSWORD, + }); + + expect(mockSecretDataGet.isDone()).toBe(true); + expect(controller.state.vault).toBeUndefined(); + expect(controller.state.vault).toBe(initialState.vault); + }, + ); + }); + + it('should throw an error if the password is an empty string', async () => { + await withController( + { state: { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, backupHashes: [] } }, + async ({ controller, toprfClient }) => { + // create the local enc key + mockCreateLocalEncKey(toprfClient, MOCK_PASSWORD); + // persist the local enc key + jest.spyOn(toprfClient, 'persistOprfKey').mockResolvedValueOnce(); + // mock the secret data add + const mockSecretDataAdd = handleMockSecretDataAdd(); + await expect( + controller.createToprfKeyAndBackupSeedPhrase({ + authConnectionId, + userId, + groupedAuthConnectionId, + password: '', + seedPhrase: MOCK_SEED_PHRASE, + }), + ).rejects.toThrow( + SeedlessOnboardingControllerError.InvalidEmptyPassword, + ); + + expect(mockSecretDataAdd.isDone()).toBe(true); + }, + ); + }); + + it('should throw an error if the passowrd is of wrong type', async () => { + await withController( + { state: { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, backupHashes: [] } }, + async ({ controller, toprfClient }) => { + // create the local enc key + mockCreateLocalEncKey(toprfClient, MOCK_PASSWORD); + // persist the local enc key + jest.spyOn(toprfClient, 'persistOprfKey').mockResolvedValueOnce(); + // mock the secret data add + const mockSecretDataAdd = handleMockSecretDataAdd(); + await expect( + controller.createToprfKeyAndBackupSeedPhrase({ + verifier: authConnectionId, + verifierId: userId, + // @ts-expect-error Intentionally passing wrong password type + password: 123, + seedPhrase: MOCK_SEED_PHRASE, + }), + ).rejects.toThrow( + SeedlessOnboardingControllerError.WrongPasswordType, + ); + + expect(mockSecretDataAdd.isDone()).toBe(true); + }, + ); + }); + }); + + describe('SeedPhraseMetadata', () => { + it('should be able to create a seed phrase metadata', () => { + // should be able to create a SeedPhraseMetadata instance via constructor + const seedPhraseMetadata = new SeedPhraseMetadata(MOCK_SEED_PHRASE); + expect(seedPhraseMetadata.seedPhrase).toBeDefined(); + expect(seedPhraseMetadata.timestamp).toBeDefined(); + + // should be able to create a SeedPhraseMetadata instance with a timestamp via constructor + const timestamp = 18_000; + const seedPhraseMetadata2 = new SeedPhraseMetadata( + MOCK_SEED_PHRASE, + timestamp, + ); + expect(seedPhraseMetadata2.seedPhrase).toBeDefined(); + expect(seedPhraseMetadata2.timestamp).toBe(timestamp); + expect(seedPhraseMetadata2.seedPhrase).toStrictEqual(MOCK_SEED_PHRASE); + }); + + it('should be able to correctly create `SeedPhraseMetadata` Array for batch seedphrases', () => { + const seedPhrases = ['seed phrase 1', 'seed phrase 2', 'seed phrase 3']; + const rawSeedPhrases = seedPhrases.map(stringToBytes); + + const seedPhraseMetadataArray = + SeedPhraseMetadata.fromBatchSeedPhrases(rawSeedPhrases); + expect(seedPhraseMetadataArray).toHaveLength(seedPhrases.length); + + // check the timestamp, the first one should be the oldest + expect(seedPhraseMetadataArray[0].timestamp).toBeLessThan( + seedPhraseMetadataArray[1].timestamp, + ); + expect(seedPhraseMetadataArray[1].timestamp).toBeLessThan( + seedPhraseMetadataArray[2].timestamp, + ); + }); + + it('should be able to serialized and parse a seed phrase metadata', () => { + const seedPhraseMetadata = new SeedPhraseMetadata(MOCK_SEED_PHRASE); + const serializedSeedPhraseBytes = seedPhraseMetadata.toBytes(); + + const parsedSeedPhraseMetadata = SeedPhraseMetadata.fromRawMetadata( + serializedSeedPhraseBytes, + ); + expect(parsedSeedPhraseMetadata.seedPhrase).toBeDefined(); + expect(parsedSeedPhraseMetadata.timestamp).toBeDefined(); + expect(parsedSeedPhraseMetadata.seedPhrase).toStrictEqual( + MOCK_SEED_PHRASE, + ); + }); + + it('should be able to sort seed phrase metadata', () => { + const mockSeedPhraseMetadata1 = new SeedPhraseMetadata( + MOCK_SEED_PHRASE, + 1000, + ); + const mockSeedPhraseMetadata2 = new SeedPhraseMetadata( + MOCK_SEED_PHRASE, + 2000, + ); + + // sort in ascending order + const sortedSeedPhraseMetadata = SeedPhraseMetadata.sort( + [mockSeedPhraseMetadata1, mockSeedPhraseMetadata2], + 'asc', + ); + expect(sortedSeedPhraseMetadata[0].timestamp).toBeLessThan( + sortedSeedPhraseMetadata[1].timestamp, + ); + + // sort in descending order + const sortedSeedPhraseMetadataDesc = SeedPhraseMetadata.sort( + [mockSeedPhraseMetadata1, mockSeedPhraseMetadata2], + 'desc', + ); + expect(sortedSeedPhraseMetadataDesc[0].timestamp).toBeGreaterThan( + sortedSeedPhraseMetadataDesc[1].timestamp, + ); + }); }); }); diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index c9be088794..37fdf42dba 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -1,15 +1,40 @@ import type { StateMetadata } from '@metamask/base-controller'; import { BaseController } from '@metamask/base-controller'; import { encrypt, decrypt } from '@metamask/browser-passworder'; +import type { + KeyPair, + NodeAuthTokens, + SEC1EncodedPublicKey, +} from '@metamask/toprf-secure-backup'; +import { ToprfSecureBackup } from '@metamask/toprf-secure-backup'; +import { + bytesToBase64, + stringToBytes, + bytesToHex, + remove0x, + bigIntToHex, +} from '@metamask/utils'; +import { keccak_256 as keccak256 } from '@noble/hashes/sha3'; +import { Mutex } from 'async-mutex'; -import { controllerName } from './constants'; +import { + controllerName, + SeedlessOnboardingControllerError, + Web3AuthNetwork, +} from './constants'; +import { RecoveryError } from './errors'; +import { projectLogger, createModuleLogger } from './logger'; +import { SeedPhraseMetadata } from './SeedPhraseMetadata'; import type { Encryptor, + MutuallyExclusiveCallback, SeedlessOnboardingControllerMessenger, SeedlessOnboardingControllerOptions, SeedlessOnboardingControllerState, } from './types'; +const log = createModuleLogger(projectLogger, controllerName); + /** * Seedless Onboarding Controller State Metadata. * @@ -23,15 +48,18 @@ const seedlessOnboardingMetadata: StateMetadata { + return remove0x(bytesToHex(keccak256(stringToBytes(idToken)))); + }); + const authenticationResult = await this.toprfClient.authenticate({ + verifier, + verifierId, + idTokens: hashedIdTokenHexes, + singleIdVerifierParams: { + subVerifier: authConnectionId, + subVerifierIdTokens: idTokens, + }, + }); + this.update((state) => { + state.nodeAuthTokens = authenticationResult.nodeAuthTokens; + }); + return authenticationResult; + } catch (error) { + log('Error authenticating user', error); + throw new Error(SeedlessOnboardingControllerError.AuthenticationError); + } + } + + /** + * Create a new TopRF key and backup seed phrase. + * + * @param params - The parameters for backup seed phrase. + * @param params.authConnectionId - OAuth authConnectionId from dashboard + * @param params.groupedAuthConnectionId - Optional grouped authConnectionId to be used for the authenticate request. + * You can pass this to use aggregate connection. + * @param params.userId - user email or id from Social login + * @param params.password - The password used to create new wallet and seedphrase + * @param params.seedPhrase - The seed phrase to backup + * @returns A promise that resolves to the encrypted seed phrase and the encryption key. + */ + async createToprfKeyAndBackupSeedPhrase({ + authConnectionId, + groupedAuthConnectionId, + userId, + password, + seedPhrase, + }: { + authConnectionId: string; + groupedAuthConnectionId?: string; + userId: string; + password: string; + seedPhrase: Uint8Array; + }): Promise { + // locally evaluate the encryption key from the password + const { encKey, authKeyPair, oprfKey } = this.toprfClient.createLocalEncKey( + { + password, + }, + ); + + // encrypt and store the seed phrase backup + await this.#encryptAndStoreSeedPhraseBackup( + seedPhrase, + encKey, + authKeyPair, + ); + + // store/persist the encryption key shares + // We store the seed phrase metadata in the metadata store first. If this operation fails, + // we avoid persisting the encryption key shares to prevent a situation where a user appears + // to have an account but with no associated data. + await this.#persistOprfKey({ + groupedAuthConnectionId, + authConnectionId, + userId, + oprfKey, + authPubKey: authKeyPair.pk, + }); + // TODO: store srp hashes or some identifier for srp in array to see if a srp is part of backup + // create a new vault with the resulting authentication data + await this.#createNewVaultWithAuthData({ + password, + rawToprfEncryptionKey: encKey, + rawToprfAuthKeyPair: authKeyPair, + }); + } + + /** + * @description Fetch seed phrase metadata from the metadata store. + * @param params - The parameters for fetching seed phrase metadata. + * @param params.authConnectionId - OAuth authConnectionId from dashboard + * @param params.groupedAuthConnectionId - Optional grouped authConnectionId to be used for the authenticate request. + * You can pass this to use aggregate connection. + * @param params.userId - user email or id from Social login + * @param params.password - The password used to create new wallet and seedphrase + * @returns A promise that resolves to the seed phrase metadata. + */ + async fetchAllSeedPhrases(params: { + authConnectionId: string; + groupedAuthConnectionId?: string; + userId: string; + password: string; + }): Promise { + const { authConnectionId, groupedAuthConnectionId, userId, password } = + params; + this.#assertIsValidNodeAuthTokens(this.state.nodeAuthTokens); + + const { encKey, authKeyPair } = await this.#recoverEncKey({ + authConnectionId, + groupedAuthConnectionId, + userId, + password, + }); + + try { + const secretData = await this.toprfClient.fetchAllSecretDataItems({ + decKey: encKey, + authKeyPair, + }); + + if (secretData?.length > 0) { + await this.#createNewVaultWithAuthData({ + password, + rawToprfEncryptionKey: encKey, + rawToprfAuthKeyPair: authKeyPair, + }); + } + + return this.#withPersistedSeedPhraseBackupsState(() => + Promise.resolve( + SeedPhraseMetadata.parseSeedPhraseFromMetadataStore(secretData), + ), + ); + } catch (error) { + log('Error fetching seed phrase metadata', error); + throw new Error( + SeedlessOnboardingControllerError.FailedToFetchSeedPhraseMetadata, + ); + } + } + + /** + * Persist the encryption key for the seedless onboarding flow. + * + * @param params - The parameters for persisting the encryption key. + * @param params.authConnectionId - OAuth authConnectionId from dashboard + * @param params.groupedAuthConnectionId - Optional grouped authConnectionId to be used for the authenticate request. + * You can pass this to use aggregate connection. + * @param params.userId - user email or id from Social login + * @param params.oprfKey - The OPRF key to be splited and persisted. + * @param params.authPubKey - The authentication public key. + * @returns A promise that resolves to the success of the operation. + */ + async #persistOprfKey(params: { + authConnectionId: string; + groupedAuthConnectionId?: string; + userId: string; + oprfKey: bigint; + authPubKey: SEC1EncodedPublicKey; + }) { + const { nodeAuthTokens } = this.state; + this.#assertIsValidNodeAuthTokens(nodeAuthTokens); + + try { + await this.toprfClient.persistOprfKey({ + nodeAuthTokens, + verifier: params.groupedAuthConnectionId || params.authConnectionId, + verifierId: params.userId, + oprfKey: params.oprfKey, + authPubKey: params.authPubKey, + }); + } catch (error) { + log('Error persisting local encryption key', error); + throw new Error(SeedlessOnboardingControllerError.FailedToPersistOprfKey); + } + } + + /** + * @description Recover the encryption key from password. + * @param params - The parameters for recovering the encryption key. + * @param params.authConnectionId - OAuth authConnectionId from dashboard + * @param params.groupedAuthConnectionId - Optional grouped authConnectionId to be used for the authenticate request. + * You can pass this to use aggregate connection. + * @param params.userId - user email or id from Social login + * @param params.password - The password used to derive the encryption key. + * @returns A promise that resolves to the encryption key and authentication key pair. + * @throws RecoveryError - If failed to recover the encryption key. + */ + async #recoverEncKey(params: { + authConnectionId: string; + groupedAuthConnectionId?: string; + userId: string; + password: string; + }) { + const { nodeAuthTokens } = this.state; + this.#assertIsValidNodeAuthTokens(nodeAuthTokens); + + try { + const recoverEncKeyResult = await this.toprfClient.recoverEncKey({ + nodeAuthTokens, + password: params.password, + verifier: params.groupedAuthConnectionId || params.authConnectionId, + verifierId: params.userId, + }); + return recoverEncKeyResult; + } catch (error) { + throw RecoveryError.getInstance(error); + } + } + + /** + * Encrypt and store the seed phrase backup in the metadata store. + * + * @param seedPhrase - The seed phrase to store. + * @param encKey - The encryption key to store. + * @param authKeyPair - The authentication key pair to store. + * + * @returns A promise that resolves to the success of the operation. + */ + async #encryptAndStoreSeedPhraseBackup( + seedPhrase: Uint8Array, + encKey: Uint8Array, + authKeyPair: KeyPair, + ): Promise { + this.#assertIsValidNodeAuthTokens(this.state.nodeAuthTokens); + + try { + const seedPhraseMetadata = new SeedPhraseMetadata(seedPhrase); + const secretData = seedPhraseMetadata.toBytes(); + await this.#withPersistedSeedPhraseBackupsState(async () => { + await this.toprfClient.addSecretDataItem({ + encKey, + secretData, + authKeyPair, + }); + return seedPhrase; + }); + } catch (error) { + log('Error encrypting and storing seed phrase backup', error); + throw new Error( + SeedlessOnboardingControllerError.FailedToEncryptAndStoreSeedPhraseBackup, + ); + } + } + + /** + * Persist the seed phrase backups state with the hashed seed phrase backups returned from the callback. + * + * @param callback - The function to execute while the seed phrase backups state is persisted. + * @returns A promise that resolves to the success of the operation. + */ + async #withPersistedSeedPhraseBackupsState< + Result extends Uint8Array | Uint8Array[], + >(callback: () => Promise): Promise { + try { + const backedUpSeedPhrases = await callback(); + let backedUpHashB64Strings: string[] = []; + + if (Array.isArray(backedUpSeedPhrases)) { + backedUpHashB64Strings = backedUpSeedPhrases.map((seedPhrase) => + bytesToBase64(keccak256(seedPhrase)), + ); + } else { + backedUpHashB64Strings = [ + bytesToBase64(keccak256(backedUpSeedPhrases)), + ]; + } + + const existingBackedUpHashes = this.state.backupHashes; + const uniqueHashesSet = new Set([ + ...existingBackedUpHashes, + ...backedUpHashB64Strings, + ]); + + this.update((state) => { + state.backupHashes = Array.from(uniqueHashesSet); + }); + + return backedUpSeedPhrases; + } catch (error) { + log('Error persisting seed phrase backups', error); + throw error; + } + } + + /** + * Create a new vault with the given authentication data. + * + * Serialize the authentication and key data which will be stored in the vault. + * + * @param params - The parameters for creating a new vault. + * @param params.password - The password to encrypt the vault. + * @param params.rawToprfEncryptionKey - The encryption key to encrypt the vault. + * @param params.rawToprfAuthKeyPair - The authentication key pair to encrypt the vault. + */ + async #createNewVaultWithAuthData({ + password, + rawToprfEncryptionKey, + rawToprfAuthKeyPair, + }: { + password: string; + rawToprfEncryptionKey: Uint8Array; + rawToprfAuthKeyPair: KeyPair; + }): Promise { + const { nodeAuthTokens } = this.state; + this.#assertIsValidNodeAuthTokens(nodeAuthTokens); + + const { toprfEncryptionKey, toprfAuthKeyPair } = this.#serializeKeyData( + rawToprfEncryptionKey, + rawToprfAuthKeyPair, + ); + + const serializedVaultData = JSON.stringify({ + authTokens: nodeAuthTokens, + toprfEncryptionKey, + toprfAuthKeyPair, + }); + + await this.#updateVault({ + password, + serializedVaultData, + }); + } + + /** + * Encrypt and update the vault with the given authentication data. + * + * @param params - The parameters for updating the vault. + * @param params.password - The password to encrypt the vault. + * @param params.serializedVaultData - The serialized authentication data to update the vault with. + * @returns A promise that resolves to the updated vault. + */ + async #updateVault({ + password, + serializedVaultData, + }: { + password: string; + serializedVaultData: string; + }): Promise { + await this.#withVaultLock(async () => { + assertIsValidPassword(password); + + const updatedState: Partial = {}; + + updatedState.vault = await this.#vaultEncryptor.encrypt( + password, + serializedVaultData, + ); + + this.update((state) => { + state.vault = updatedState.vault; + }); + }); + } + + /** + * Lock the vault mutex before executing the given function, + * and release it after the function is resolved or after an + * error is thrown. + * + * This ensures that each operation that interacts with the vault + * is executed in a mutually exclusive way. + * + * @param callback - The function to execute while the vault mutex is locked. + * @returns The result of the function. + */ + async #withVaultLock( + callback: MutuallyExclusiveCallback, + ): Promise { + return await withLock(this.#vaultOperationMutex, callback); + } + + /** + * @description Serialize the encryption key and authentication key pair. + * @param encKey - The encryption key to serialize. + * @param authKeyPair - The authentication key pair to serialize. + * @returns The serialized encryption key and authentication key pair. + */ + #serializeKeyData( + encKey: Uint8Array, + authKeyPair: KeyPair, + ): { + toprfEncryptionKey: string; + toprfAuthKeyPair: string; + } { + const b64EncodedEncKey = bytesToBase64(encKey); + const b64EncodedAuthKeyPair = JSON.stringify({ + sk: bigIntToHex(authKeyPair.sk), // Convert BigInt to hex string + pk: bytesToBase64(authKeyPair.pk), + }); + + return { + toprfEncryptionKey: b64EncodedEncKey, + toprfAuthKeyPair: b64EncodedAuthKeyPair, + }; + } + + /** + * Check if the provided value is a valid node auth tokens. + * + * @param value - The value to check. + * @throws If the value is not a valid node auth tokens. + */ + #assertIsValidNodeAuthTokens( + value: unknown, + ): asserts value is NodeAuthTokens { + if (!Array.isArray(value) || value.length === 0) { + throw new Error(SeedlessOnboardingControllerError.InsufficientAuthToken); + } + } +} + +/** + * Assert that the provided password is a valid non-empty string. + * + * @param password - The password to check. + * @throws If the password is not a valid string. + */ +function assertIsValidPassword(password: unknown): asserts password is string { + if (typeof password !== 'string') { + throw new Error(SeedlessOnboardingControllerError.WrongPasswordType); + } + + if (!password || !password.length) { + throw new Error(SeedlessOnboardingControllerError.InvalidEmptyPassword); + } +} + +/** + * Lock the given mutex before executing the given function, + * and release it after the function is resolved or after an + * error is thrown. + * + * @param mutex - The mutex to lock. + * @param callback - The function to execute while the mutex is locked. + * @returns The result of the function. + */ +async function withLock( + mutex: Mutex, + callback: MutuallyExclusiveCallback, +): Promise { + const releaseLock = await mutex.acquire(); + + try { + return await callback({ releaseLock }); + } finally { + releaseLock(); } } diff --git a/packages/seedless-onboarding-controller/src/constants.ts b/packages/seedless-onboarding-controller/src/constants.ts index 1fe20d7499..8b1d6105b4 100644 --- a/packages/seedless-onboarding-controller/src/constants.ts +++ b/packages/seedless-onboarding-controller/src/constants.ts @@ -1 +1,24 @@ export const controllerName = 'SeedlessOnboardingController'; + +export enum Web3AuthNetwork { + Mainnet = 'sapphire_mainnet', + Devnet = 'sapphire_devnet', +} + +export enum SeedlessOnboardingControllerError { + AuthenticationError = `${controllerName} - Authentication error`, + FailedToPersistOprfKey = `${controllerName} - Failed to persist OPRF key`, + LoginFailedError = `${controllerName} - Login failed`, + InsufficientAuthToken = `${controllerName} - Insufficient auth token`, + InvalidEmptyPassword = `${controllerName} - Password cannot be empty.`, + WrongPasswordType = `${controllerName} - Password must be of type string.`, + InvalidVaultData = `${controllerName} - Invalid vault data`, + VaultDataError = `${controllerName} - The decrypted vault has an unexpected shape.`, + VaultError = `${controllerName} - Cannot unlock without a previous vault.`, + InvalidSeedPhraseMetadata = `${controllerName} - Invalid seed phrase metadata`, + FailedToEncryptAndStoreSeedPhraseBackup = `${controllerName} - Failed to encrypt and store seed phrase backup`, + FailedToFetchSeedPhraseMetadata = `${controllerName} - Failed to fetch seed phrase metadata`, + FailedToChangePassword = `${controllerName} - Failed to change password`, + TooManyLoginAttempts = `${controllerName} - Too many login attempts`, + IncorrectPassword = `${controllerName} - Incorrect password`, +} diff --git a/packages/seedless-onboarding-controller/src/errors.ts b/packages/seedless-onboarding-controller/src/errors.ts new file mode 100644 index 0000000000..05a4563b6d --- /dev/null +++ b/packages/seedless-onboarding-controller/src/errors.ts @@ -0,0 +1,94 @@ +import { + type RateLimitErrorData, + TOPRFError, + TORPFErrorCode, +} from '@metamask/toprf-secure-backup'; + +import { SeedlessOnboardingControllerError } from './constants'; + +/** + * Get the error message from the TOPRF error code. + * + * @param errorCode - The TOPRF error code. + * @param defaultMessage - The default error message if the error code is not found. + * @returns The error message. + */ +function getErrorMessageFromTOPRFErrorCode( + errorCode: TORPFErrorCode, + defaultMessage: string, +): string { + switch (errorCode) { + case TORPFErrorCode.RateLimitExceeded: + return SeedlessOnboardingControllerError.TooManyLoginAttempts; + case TORPFErrorCode.CouldNotDeriveEncryptionKey: + return SeedlessOnboardingControllerError.IncorrectPassword; + default: + return defaultMessage; + } +} + +/** + * The RecoveryError class is used to handle errors that occur during the recover encryption key process from the passwrord. + * It extends the Error class and includes a data property that can be used to store additional information. + */ +export class RecoveryError extends Error { + data: RateLimitErrorData | undefined; + + constructor(message: string, data?: RateLimitErrorData) { + super(message); + this.data = data; + this.name = 'SeedlessOnboardingController - RecoveryError'; + } + + /** + * Get an instance of the RecoveryError class. + * + * @param error - The error to get the instance of. + * @returns The instance of the RecoveryError class. + */ + static getInstance(error: unknown): RecoveryError { + if (error instanceof TOPRFError) { + const rateLimitErrorData = RecoveryError.getRateLimitErrorData(error); + const errorMessage = getErrorMessageFromTOPRFErrorCode( + error.code, + SeedlessOnboardingControllerError.LoginFailedError, + ); + return new RecoveryError(errorMessage, rateLimitErrorData); + } + return new RecoveryError( + SeedlessOnboardingControllerError.LoginFailedError, + ); + } + + /** + * Check if the provided error is a rate limit error triggered by too many login attempts. + * + * Return a new TooManyLoginAttemptsError if the error is a rate limit error, otherwise undefined. + * + * @param error - The error to check. + * @returns The rate limit error if the error is a rate limit error, otherwise undefined. + */ + static getRateLimitErrorData( + error: TOPRFError, + ): RateLimitErrorData | undefined { + if ( + error.meta && // error metadata must be present + error.code === TORPFErrorCode.RateLimitExceeded && + typeof error.meta.rateLimitDetails === 'object' && + error.meta.rateLimitDetails !== null && + 'remainingTime' in error.meta.rateLimitDetails && + typeof error.meta.rateLimitDetails.remainingTime === 'number' && + 'message' in error.meta.rateLimitDetails && + typeof error.meta.rateLimitDetails.message === 'string' && + 'isPermanent' in error.meta.rateLimitDetails && + typeof error.meta.rateLimitDetails.isPermanent === 'boolean' + ) { + return { + remainingTime: error.meta.rateLimitDetails.remainingTime, + message: error.meta.rateLimitDetails.message, + isPermanent: error.meta.rateLimitDetails.isPermanent, + }; + } + return undefined; + } +} diff --git a/packages/seedless-onboarding-controller/src/logger.ts b/packages/seedless-onboarding-controller/src/logger.ts new file mode 100644 index 0000000000..ca017b5ba5 --- /dev/null +++ b/packages/seedless-onboarding-controller/src/logger.ts @@ -0,0 +1,7 @@ +import { createProjectLogger, createModuleLogger } from '@metamask/utils'; + +import { controllerName } from './constants'; + +export const projectLogger = createProjectLogger(controllerName); + +export { createModuleLogger }; diff --git a/packages/seedless-onboarding-controller/src/types.ts b/packages/seedless-onboarding-controller/src/types.ts index 5361c3ed29..00be2dc622 100644 --- a/packages/seedless-onboarding-controller/src/types.ts +++ b/packages/seedless-onboarding-controller/src/types.ts @@ -1,9 +1,11 @@ import type { RestrictedMessenger } from '@metamask/base-controller'; import type { ControllerGetStateAction } from '@metamask/base-controller'; import type { ControllerStateChangeEvent } from '@metamask/base-controller'; +import type { NodeAuthTokens } from '@metamask/toprf-secure-backup'; import type { Json } from '@metamask/utils'; +import type { MutexInterface } from 'async-mutex'; -import type { controllerName } from './constants'; +import type { controllerName, Web3AuthNetwork } from './constants'; // State export type SeedlessOnboardingControllerState = { @@ -11,16 +13,20 @@ export type SeedlessOnboardingControllerState = { * Encrypted array of serialized keyrings data. */ vault?: string; + /** - * Indicates whether the user has already fully/partially completed the Seedless Onboarding flow. + * The node auth tokens from OAuth User authentication after the Social login. * - * An encryption key is generated from user entered password using Threshold OPRF and the seed phrase is encrypted with the key. - * During the Seedless Onboarding Authentication step, TOPRF services check whether user has already generated the encryption key. + * This values are used to authenticate users when they go through the Seedless Onboarding flow. + */ + nodeAuthTokens?: NodeAuthTokens; + + /** + * The hashes of the seed phrase backups. * - * If this value is `true`, we can assume that user already has completed the `SeedPhrase` generation step, and user will have to - * fetch the `SeedPhrase` with correct password. Otherwise, users will be asked to set up seedphrase and password, first. + * This is to facilitate the UI to display backup status of the seed phrases. */ - isNewUser?: boolean; + backupHashes: string[]; }; // Actions @@ -90,4 +96,36 @@ export type SeedlessOnboardingControllerOptions = { * @default browser-passworder @link https://github.com/MetaMask/browser-passworder */ encryptor?: Encryptor; + + network?: Web3AuthNetwork; +}; + +/** + * A function executed within a mutually exclusive lock, with + * a mutex releaser in its option bag. + * + * @param releaseLock - A function to release the lock. + */ +export type MutuallyExclusiveCallback = ({ + releaseLock, +}: { + releaseLock: MutexInterface.Releaser; +}) => Promise; + +/** + * @description The structure of the data which is serialized and stored in the vault. + */ +export type VaultData = { + /** + * The node auth tokens from OAuth User authentication after the Social login. + */ + authTokens: NodeAuthTokens; + /** + * The encryption key to encrypt the seed phrase. + */ + toprfEncryptionKey: string; + /** + * The authentication key pair to authenticate the TOPRF. + */ + toprfAuthKeyPair: string; }; diff --git a/packages/seedless-onboarding-controller/tests/__fixtures__/topfClient.ts b/packages/seedless-onboarding-controller/tests/__fixtures__/topfClient.ts new file mode 100644 index 0000000000..7a8b4a6694 --- /dev/null +++ b/packages/seedless-onboarding-controller/tests/__fixtures__/topfClient.ts @@ -0,0 +1,104 @@ +import nock from 'nock'; + +import { + MOCK_ACQUIRE_METADATA_LOCK_RESPONSE, + MOCK_BATCH_SECRET_DATA_ADD_RESPONSE, + MOCK_RELEASE_METADATA_LOCK_RESPONSE, + MOCK_SECRET_DATA_ADD_RESPONSE, + MOCK_SECRET_DATA_GET_RESPONSE, + MOCK_TOPRF_AUTHENTICATION_RESPONSE, + MOCK_TOPRF_COMMITMENT_RESPONSE, + TOPRF_BASE_URL, +} from '../mocks/toprf'; + +type MockReply = { + status: nock.StatusCode; + body?: nock.Body; +}; + +export const handleMockCommitment = (mockReply?: MockReply) => { + const reply = mockReply ?? { + status: 200, + body: MOCK_TOPRF_COMMITMENT_RESPONSE, + }; + + const mockEndpoint = nock(TOPRF_BASE_URL) + .persist() + .post('/sss/jrpc') + .reply(reply.status, reply.body); + + return mockEndpoint; +}; + +export const handleMockAuthenticate = (mockReply?: MockReply) => { + const reply = mockReply ?? { + status: 200, + body: MOCK_TOPRF_AUTHENTICATION_RESPONSE, + }; + const mockEndpoint = nock(TOPRF_BASE_URL) + .persist() + .post('/sss/jrpc') + .reply(reply.status, reply.body); + + return mockEndpoint; +}; + +export const handleMockSecretDataAdd = (mockReply?: MockReply) => { + const reply = mockReply ?? { + status: 200, + body: MOCK_SECRET_DATA_ADD_RESPONSE, + }; + const mockEndpoint = nock(TOPRF_BASE_URL) + .post('/metadata/enc_account_data/set') + .reply(reply.status, reply.body); + + return mockEndpoint; +}; + +export const handleMockBatchSecretDataAdd = (mockReply?: MockReply) => { + const reply = mockReply ?? { + status: 200, + body: MOCK_BATCH_SECRET_DATA_ADD_RESPONSE, + }; + const mockEndpoint = nock(TOPRF_BASE_URL) + .post('/metadata/enc_account_data/batch_set') + .reply(reply.status, reply.body); + + return mockEndpoint; +}; + +export const handleMockSecretDataGet = (mockReply?: MockReply) => { + const reply = mockReply ?? { + status: 200, + body: MOCK_SECRET_DATA_GET_RESPONSE, + }; + const mockEndpoint = nock(TOPRF_BASE_URL) + .post('/metadata/enc_account_data/get') + .reply(reply.status, reply.body); + + return mockEndpoint; +}; + +export const handleMockAcquireMetadataLock = (mockReply?: MockReply) => { + const reply = mockReply ?? { + status: 200, + body: MOCK_ACQUIRE_METADATA_LOCK_RESPONSE, + }; + const mockEndpoint = nock(TOPRF_BASE_URL) + .post('/metadata/acquireLock') + .reply(reply.status, reply.body); + + return mockEndpoint; +}; + +export const handleMockReleaseMetadataLock = (mockReply?: MockReply) => { + const reply = mockReply ?? { + status: 200, + body: MOCK_RELEASE_METADATA_LOCK_RESPONSE, + }; + const mockEndpoint = nock(TOPRF_BASE_URL) + .post('/metadata/releaseLock') + .reply(reply.status, reply.body); + + return mockEndpoint; +}; diff --git a/packages/seedless-onboarding-controller/tests/mocks/toprf.ts b/packages/seedless-onboarding-controller/tests/mocks/toprf.ts new file mode 100644 index 0000000000..0b7d2cd364 --- /dev/null +++ b/packages/seedless-onboarding-controller/tests/mocks/toprf.ts @@ -0,0 +1,107 @@ +import { MockToprfEncryptorDecryptor } from './toprfEncryptor'; + +export const TOPRF_BASE_URL = /https:\/\/node-[1-5]\.dev-node\.web3auth\.io/u; + +export const MOCK_TOPRF_COMMITMENT_RESPONSE = { + jsonrpc: '2.0', + result: { + signature: 'MOCK_NODE_SIGNATURE', + data: 'MOCK_NODE_DATA', + nodePubX: 'MOCK_NODE_PUB_X', + nodePubY: 'MOCK_NODE_PUB_Y', + nodeIndex: '1', + }, + id: 10, +}; + +export const MOCK_TOPRF_AUTHENTICATION_RESPONSE = { + jsonrpc: '2.0', + result: { + authToken: 'MOCK_AUTH_TOKEN', + nodeIndex: 1, + pubKey: 'MOCK_USER_PUB_KEY', + keyIndex: 0, + nodePubKey: 'MOCK_NODE_PUB_KEY', + }, + id: 10, +}; + +export const MOCK_SECRET_DATA_ADD_RESPONSE = { + success: true, + message: 'Updated successfully', +}; + +export const MOCK_BATCH_SECRET_DATA_ADD_RESPONSE = { + success: true, + message: 'Updated successfully', +}; + +export const MOCK_SECRET_DATA_GET_RESPONSE = { + success: true, + data: [], +}; + +export const MOCK_ACQUIRE_METADATA_LOCK_RESPONSE = { + status: 1, + id: 'MOCK_METADATA_LOCK_ID', +}; + +export const MOCK_RELEASE_METADATA_LOCK_RESPONSE = { + status: 1, +}; + +export const MULTIPLE_MOCK_SEEDPHRASE_METADATA = [ + { + seedPhrase: new Uint8Array(Buffer.from('seedPhrase1', 'utf-8')), + timestamp: 10, + }, + { + seedPhrase: new Uint8Array(Buffer.from('seedPhrase3', 'utf-8')), + timestamp: 60, + }, + { + seedPhrase: new Uint8Array(Buffer.from('seedPhrase2', 'utf-8')), + timestamp: 20, + }, +]; + +/** + * Creates a mock secret data get response + * + * @param secretDataArr - The data to be returned + * @param password - The password to be used + * @returns The mock secret data get response + */ +export function createMockSecretDataGetResponse< + T extends Uint8Array | { seedPhrase: Uint8Array; timestamp: number }, +>(secretDataArr: T[], password: string) { + const mockToprfEncryptor = new MockToprfEncryptorDecryptor(); + + const encryptedSecretData = secretDataArr.map((secretData) => { + let b64SecretData: string; + let timestamp = Date.now(); + if (secretData instanceof Uint8Array) { + b64SecretData = Buffer.from(secretData).toString('base64'); + } else { + b64SecretData = Buffer.from(secretData.seedPhrase).toString('base64'); + timestamp = secretData.timestamp; + } + + const metadata = JSON.stringify({ + seedPhrase: b64SecretData, + timestamp, + }); + + return mockToprfEncryptor.encrypt( + mockToprfEncryptor.deriveEncKey(password), + new Uint8Array(Buffer.from(metadata, 'utf-8')), + ); + }); + + const jsonData = { + success: true, + data: encryptedSecretData, + }; + + return jsonData; +} diff --git a/packages/seedless-onboarding-controller/tests/mocks/toprfEncryptor.ts b/packages/seedless-onboarding-controller/tests/mocks/toprfEncryptor.ts new file mode 100644 index 0000000000..5476d29516 --- /dev/null +++ b/packages/seedless-onboarding-controller/tests/mocks/toprfEncryptor.ts @@ -0,0 +1,50 @@ +import type { KeyPair } from '@metamask/toprf-secure-backup'; +import { gcm } from '@noble/ciphers/aes'; +import { bytesToNumberBE } from '@noble/ciphers/utils'; +import { managedNonce } from '@noble/ciphers/webcrypto'; +import { secp256k1 } from '@noble/curves/secp256k1'; +import { hkdf } from '@noble/hashes/hkdf'; +import { sha256 } from '@noble/hashes/sha256'; + +export class MockToprfEncryptorDecryptor { + readonly #HKDF_ENCRYPTION_KEY_INFO = 'encryption-key'; + + readonly #HKDF_AUTH_KEY_INFO = 'authentication-key'; + + encrypt(key: Uint8Array, data: Uint8Array): string { + const aes = managedNonce(gcm)(key); + + const cipherText = aes.encrypt(data); + return Buffer.from(cipherText).toString('base64'); + } + + decrypt(key: Uint8Array, cipherText: Uint8Array): Uint8Array { + const aes = managedNonce(gcm)(key); + const rawData = aes.decrypt(cipherText); + + return rawData; + } + + deriveEncKey(password: string): Uint8Array { + const seed = sha256(password); + const key = hkdf( + sha256, + seed, + undefined, + this.#HKDF_ENCRYPTION_KEY_INFO, + 32, + ); + return key; + } + + deriveAuthKeyPair(password: string): KeyPair { + const seed = sha256(password); + const k = hkdf(sha256, seed, undefined, this.#HKDF_AUTH_KEY_INFO, 32); // Derive 256 bit key. + + // Converting from bytes to scalar like this is OK because statistical + // distance between U(2^256) % secp256k1.n and U(secp256k1.n) is negligible. + const sk = bytesToNumberBE(k) % secp256k1.CURVE.n; + const pk = secp256k1.getPublicKey(sk, false); + return { sk, pk }; + } +} diff --git a/packages/seedless-onboarding-controller/tests/mocks/vaultEncryptor.ts b/packages/seedless-onboarding-controller/tests/mocks/vaultEncryptor.ts new file mode 100644 index 0000000000..154df2544f --- /dev/null +++ b/packages/seedless-onboarding-controller/tests/mocks/vaultEncryptor.ts @@ -0,0 +1,166 @@ +import type { + EncryptionKey, + EncryptionResult, + KeyDerivationOptions, +} from '@metamask/browser-passworder'; +import { webcrypto } from 'node:crypto'; + +export default class MockVaultEncryptor { + DEFAULT_DERIVATION_PARAMS: KeyDerivationOptions = { + algorithm: 'PBKDF2', + params: { + iterations: 10_000, + }, + }; + + DEFAULT_SALT = 'RANDOM_SALT'; + + async importKey(keyString: string) { + try { + const parsedKey = JSON.parse(keyString); + return webcrypto.subtle.importKey('jwk', parsedKey, 'AES-GCM', false, [ + 'encrypt', + 'decrypt', + ]); + } catch (error) { + console.error(error); + throw new Error('Failed to import key'); + } + } + + // eslint-disable-next-line n/no-unsupported-features/node-builtins + async exportKey(cryptoKey: CryptoKey | EncryptionKey): Promise { + const key = 'key' in cryptoKey ? cryptoKey.key : cryptoKey; + const exportedKey = await webcrypto.subtle.exportKey('jwk', key); + + return JSON.stringify(exportedKey); + } + + async keyFromPassword( + password: string, + salt: string = this.DEFAULT_SALT, + exportable: boolean = true, + opts: KeyDerivationOptions = this.DEFAULT_DERIVATION_PARAMS, + ) { + const passBuffer = Buffer.from(password); + const saltBuffer = Buffer.from(salt, 'base64'); + + const key = await webcrypto.subtle.importKey( + 'raw', + passBuffer, + { name: 'PBKDF2' }, + false, + ['deriveBits', 'deriveKey'], + ); + + const encKey = await webcrypto.subtle.deriveKey( + { + name: 'PBKDF2', + salt: saltBuffer, + iterations: opts.params.iterations, + hash: 'SHA-256', + }, + key, + { name: 'AES-GCM', length: 256 }, + exportable, + ['encrypt', 'decrypt'], + ); + + return encKey; + } + + async encryptWithKey( + encryptionKey: EncryptionKey | webcrypto.CryptoKey, + data: unknown, + ) { + const dataString = JSON.stringify(data); + const dataBuffer = Buffer.from(dataString); + const vector = webcrypto.getRandomValues(new Uint8Array(16)); + + const key = 'key' in encryptionKey ? encryptionKey.key : encryptionKey; + const encBuff = await webcrypto.subtle.encrypt( + { + name: 'AES-GCM', + iv: vector, + }, + key, + dataBuffer, + ); + + const buffer = new Uint8Array(encBuff); + const vectorStr = Buffer.from(vector).toString('base64'); + const vaultStr = Buffer.from(buffer).toString('base64'); + const encryptionResult: EncryptionResult = { + data: vaultStr, + iv: vectorStr, + }; + + if ('derivationOptions' in encryptionKey) { + encryptionResult.keyMetadata = encryptionKey.derivationOptions; + } + + return encryptionResult; + } + + async decryptWithKey( + encryptionKey: EncryptionKey | webcrypto.CryptoKey, + encData: EncryptionResult, + ) { + const encryptedData = Buffer.from(encData.data, 'base64'); + const vector = Buffer.from(encData.iv, 'base64'); + const key = 'key' in encryptionKey ? encryptionKey.key : encryptionKey; + + const result = await webcrypto.subtle.decrypt( + { name: 'AES-GCM', iv: vector }, + key, + encryptedData, + ); + + const decryptedData = new Uint8Array(result); + const decryptedStr = Buffer.from(decryptedData).toString(); + const decryptedObj = JSON.parse(decryptedStr); + + return decryptedObj; + } + + async encrypt( + password: string, + dataObj: R, + // eslint-disable-next-line n/no-unsupported-features/node-builtins + key?: EncryptionKey | CryptoKey, + salt: string = this.DEFAULT_SALT, + keyDerivationOptions = this.DEFAULT_DERIVATION_PARAMS, + ): Promise { + const cryptoKey = + key || + (await this.keyFromPassword(password, salt, false, keyDerivationOptions)); + const payload = await this.encryptWithKey(cryptoKey, dataObj); + payload.salt = salt; + return JSON.stringify(payload); + } + + async decrypt( + password: string, + text: string, + // eslint-disable-next-line n/no-unsupported-features/node-builtins + encryptionKey?: EncryptionKey | CryptoKey, + ): Promise { + const payload = JSON.parse(text); + const { salt, keyMetadata } = payload; + + let cryptoKey = encryptionKey; + if (!cryptoKey) { + cryptoKey = await this.keyFromPassword( + password, + salt, + false, + keyMetadata, + ); + } + + const key = 'key' in cryptoKey ? cryptoKey.key : cryptoKey; + + const result = await this.decryptWithKey(key, payload); + return result; + } +} diff --git a/packages/seedless-onboarding-controller/tsconfig.json b/packages/seedless-onboarding-controller/tsconfig.json index 1861422bee..831b2ae3b4 100644 --- a/packages/seedless-onboarding-controller/tsconfig.json +++ b/packages/seedless-onboarding-controller/tsconfig.json @@ -11,5 +11,5 @@ "path": "../message-manager" } ], - "include": ["../../types", "./src"] + "include": ["../../types", "./src", "./tests"] } diff --git a/yarn.lock b/yarn.lock index 040c5bf21b..4972614956 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2628,6 +2628,23 @@ __metadata: languageName: unknown linkType: soft +"@metamask/auth-network-utils@file:./packages/seedless-onboarding-controller/auth-network-utils.tgz::locator=%40metamask%2Fcore-monorepo%40workspace%3A.": + version: 0.0.0 + resolution: "@metamask/auth-network-utils@file:./packages/seedless-onboarding-controller/auth-network-utils.tgz#./packages/seedless-onboarding-controller/auth-network-utils.tgz::hash=89f587&locator=%40metamask%2Fcore-monorepo%40workspace%3A." + dependencies: + "@noble/curves": "npm:^1.8.1" + "@noble/hashes": "npm:^1.7.1" + "@toruslabs/bs58": "npm:^1.0.0" + "@toruslabs/constants": "npm:^15.0.0" + "@toruslabs/eccrypto": "npm:^6.0.2" + bn.js: "npm:^5.2.1" + elliptic: "npm:^6.6.1" + json-stable-stringify: "npm:^1.2.1" + loglevel: "npm:^1.9.2" + checksum: 10/71aa6b018eb628e974cacd9468d4ae0bd390809dafb60add858b9523ce5a1ac7b76009f13ef3d0a862f5e775ed6599f57022a062cf7b6b888724ed69d31d8bdc + languageName: node + linkType: hard + "@metamask/auto-changelog@npm:^3.4.4": version: 3.4.4 resolution: "@metamask/auto-changelog@npm:3.4.4" @@ -4237,10 +4254,17 @@ __metadata: "@metamask/auto-changelog": "npm:^3.4.4" "@metamask/base-controller": "npm:^8.0.0" "@metamask/browser-passworder": "npm:^4.3.0" - "@metamask/utils": "npm:^11.2.0" + "@metamask/toprf-secure-backup": ./toprf-secure-backup.tgz + "@metamask/utils": "npm:^11.4.0" + "@noble/ciphers": "npm:^0.5.2" + "@noble/curves": "npm:^1.2.0" + "@noble/hashes": "npm:^1.7.2" "@types/jest": "npm:^27.4.1" + async-mutex: "npm:^0.5.0" deepmerge: "npm:^4.2.2" jest: "npm:^27.5.1" + jest-environment-node: "npm:^27.5.1" + nock: "npm:^13.3.1" ts-jest: "npm:^27.1.4" typedoc: "npm:^0.24.8" typedoc-plugin-missing-exports: "npm:^2.0.0" @@ -4469,6 +4493,24 @@ __metadata: languageName: unknown linkType: soft +"@metamask/toprf-secure-backup@file:./toprf-secure-backup.tgz::locator=%40metamask%2Fseedless-onboarding-controller%40workspace%3Apackages%2Fseedless-onboarding-controller": + version: 0.0.0 + resolution: "@metamask/toprf-secure-backup@file:./toprf-secure-backup.tgz#./toprf-secure-backup.tgz::hash=566d89&locator=%40metamask%2Fseedless-onboarding-controller%40workspace%3Apackages%2Fseedless-onboarding-controller" + dependencies: + "@metamask/auth-network-utils": "npm:^0.0.0" + "@noble/ciphers": "npm:^1.2.1" + "@noble/curves": "npm:^1.8.1" + "@noble/hashes": "npm:^1.7.1" + "@sentry/core": "npm:^9.10.0" + "@toruslabs/constants": "npm:^15.0.0" + "@toruslabs/eccrypto": "npm:^6.0.2" + "@toruslabs/fetch-node-details": "npm:^15.0.0" + "@toruslabs/http-helpers": "npm:^8.1.1" + bn.js: "npm:^5.2.1" + checksum: 10/fae8ef9949e3c4f56453e52a76d934d2cae32b81f9cdc16fd2b474e019f30c31081845e7bad00e5bb9bb1ede4bec1186567084560624a7abeb2311086216c72a + languageName: node + linkType: hard + "@metamask/transaction-controller@npm:^54.1.0, @metamask/transaction-controller@workspace:packages/transaction-controller": version: 0.0.0-use.local resolution: "@metamask/transaction-controller@workspace:packages/transaction-controller" @@ -4582,6 +4624,23 @@ __metadata: languageName: node linkType: hard +"@metamask/utils@npm:^11.4.0": + version: 11.4.0 + resolution: "@metamask/utils@npm:11.4.0" + dependencies: + "@ethereumjs/tx": "npm:^4.2.0" + "@metamask/superstruct": "npm:^3.1.0" + "@noble/hashes": "npm:^1.3.1" + "@scure/base": "npm:^1.1.3" + "@types/debug": "npm:^4.1.7" + debug: "npm:^4.3.4" + pony-cause: "npm:^2.1.10" + semver: "npm:^7.5.4" + uuid: "npm:^9.0.1" + checksum: 10/7c976268e944b542b5e936bae89f58a50eef58501bd3512944995c6d416cb1a7dd3f712aec8c7ca0969dcee889ab963b815fbc3e863dc80ccf16e9258eaec3ff + languageName: node + linkType: hard + "@metamask/utils@npm:^8.2.0": version: 8.5.0 resolution: "@metamask/utils@npm:8.5.0" @@ -4638,6 +4697,13 @@ __metadata: languageName: node linkType: hard +"@noble/ciphers@npm:^1.2.1": + version: 1.2.1 + resolution: "@noble/ciphers@npm:1.2.1" + checksum: 10/7fa0d32529d8da6323b08afec97218f6d6bc0d1e135243bf10f7587a2819495c3f3f4a5af1f41045501bb1ade94238c76960366a5d6441970e49ba9cacb88740 + languageName: node + linkType: hard + "@noble/curves@npm:1.2.0": version: 1.2.0 resolution: "@noble/curves@npm:1.2.0" @@ -4665,6 +4731,15 @@ __metadata: languageName: node linkType: hard +"@noble/curves@npm:^1.8.1": + version: 1.8.2 + resolution: "@noble/curves@npm:1.8.2" + dependencies: + "@noble/hashes": "npm:1.7.2" + checksum: 10/540e7b7a8fe92ecd5cef846f84d07180662eb7fd7d8e9172b8960c31827e74f148fe4630da962138a6be093ae9f8992d14ab23d3682a2cc32be839aa57c03a46 + languageName: node + linkType: hard + "@noble/hashes@npm:1.3.2": version: 1.3.2 resolution: "@noble/hashes@npm:1.3.2" @@ -4679,6 +4754,13 @@ __metadata: languageName: node linkType: hard +"@noble/hashes@npm:1.7.2, @noble/hashes@npm:^1.7.1, @noble/hashes@npm:^1.7.2": + version: 1.7.2 + resolution: "@noble/hashes@npm:1.7.2" + checksum: 10/b5af9e4b91543dcc46a811b5b2c57bfdeb41728361979a19d6110a743e2cb0459872553f68d3a46326d21959964db2776b8c8b4db85ac1d9f63ebcaddf7d59b6 + languageName: node + linkType: hard + "@noble/hashes@npm:~1.3.2": version: 1.3.3 resolution: "@noble/hashes@npm:1.3.3" @@ -4944,6 +5026,13 @@ __metadata: languageName: node linkType: hard +"@sentry/core@npm:^9.10.0": + version: 9.13.0 + resolution: "@sentry/core@npm:9.13.0" + checksum: 10/31fa3a682c37080f3bcd40d8fa1d1b9434205d6c27d88f946cde34347de238dc291bd6d020ab9b00bdeca70f70cd47d48516d977757e0a9d629fece87eff341f + languageName: node + linkType: hard + "@sinclair/typebox@npm:^0.27.8": version: 0.27.8 resolution: "@sinclair/typebox@npm:0.27.8" @@ -5152,6 +5241,74 @@ __metadata: languageName: node linkType: hard +"@toruslabs/bs58@npm:^1.0.0": + version: 1.0.0 + resolution: "@toruslabs/bs58@npm:1.0.0" + peerDependencies: + "@babel/runtime": 7.x + checksum: 10/cb2db1560671ce7e87d5fb4dd2d8e2dcff38b01162fef14c9579cb6262366cbdb895f2b6a58e0e48ccb5c39ee3d0cd971c8fb29a37cf0dd6fa5c68d53314291b + languageName: node + linkType: hard + +"@toruslabs/constants@npm:^15.0.0": + version: 15.0.0 + resolution: "@toruslabs/constants@npm:15.0.0" + peerDependencies: + "@babel/runtime": 7.x + checksum: 10/82c8ecfe0ada4b0efa5972f4816befa6d732345a808ce905eec2267a35811ec80361132f56ad3244a43909a67e6c7f99c3885cb4a0a53f75408fc7ba063cbe5d + languageName: node + linkType: hard + +"@toruslabs/eccrypto@npm:^6.0.2": + version: 6.0.2 + resolution: "@toruslabs/eccrypto@npm:6.0.2" + dependencies: + elliptic: "npm:^6.6.1" + checksum: 10/a9444da5a65186b3b361095df2fbfd66aa09ffe5723610c71636165e2798942cfc74d89a5bf63507aacf2518baee453bcf04ff353c5e2978a32c29db276a2c41 + languageName: node + linkType: hard + +"@toruslabs/fetch-node-details@npm:^15.0.0": + version: 15.0.0 + resolution: "@toruslabs/fetch-node-details@npm:15.0.0" + dependencies: + "@toruslabs/constants": "npm:^15.0.0" + "@toruslabs/fnd-base": "npm:^15.0.0" + "@toruslabs/http-helpers": "npm:^8.1.1" + loglevel: "npm:^1.9.2" + peerDependencies: + "@babel/runtime": 7.x + checksum: 10/16411ff7dc3be045784deb9c69e316bda03355c9ca3db4912677c051a1d4ebcb1e8b6116f5cfe0793dce3bd80281cc7ca2c5b02479f86621e628b4c3ca4f2d7b + languageName: node + linkType: hard + +"@toruslabs/fnd-base@npm:^15.0.0": + version: 15.0.0 + resolution: "@toruslabs/fnd-base@npm:15.0.0" + dependencies: + "@toruslabs/constants": "npm:^15.0.0" + peerDependencies: + "@babel/runtime": 7.x + checksum: 10/1f4998b8b8a1311978551dc21c761b9baa3d928254be6a3fc350400c48fccc15b9cc787cf2660594e8662fffe1385aaf3b6fa7580eea525782ab27b87c94733c + languageName: node + linkType: hard + +"@toruslabs/http-helpers@npm:^8.1.1": + version: 8.1.1 + resolution: "@toruslabs/http-helpers@npm:8.1.1" + dependencies: + deepmerge: "npm:^4.3.1" + loglevel: "npm:^1.9.2" + peerDependencies: + "@babel/runtime": ^7.x + "@sentry/core": ^9.x + peerDependenciesMeta: + "@sentry/core": + optional: true + checksum: 10/bae7821b8a30a40dff4752bb41bb93d0fa6d41e766e3cdb998462bb59338e3fa8b2a491ccc97cbe371b25d155b2bea8e69ecbd4b177cb42af6aba9b34af7aba8 + languageName: node + linkType: hard + "@ts-bridge/cli@npm:^0.6.1": version: 0.6.1 resolution: "@ts-bridge/cli@npm:0.6.1" @@ -7217,6 +7374,16 @@ __metadata: languageName: node linkType: hard +"call-bind-apply-helpers@npm:^1.0.0, call-bind-apply-helpers@npm:^1.0.1, call-bind-apply-helpers@npm:^1.0.2": + version: 1.0.2 + resolution: "call-bind-apply-helpers@npm:1.0.2" + dependencies: + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + checksum: 10/00482c1f6aa7cfb30fb1dbeb13873edf81cfac7c29ed67a5957d60635a56b2a4a480f1016ddbdb3395cc37900d46037fb965043a51c5c789ffeab4fc535d18b5 + languageName: node + linkType: hard + "call-bind@npm:^1.0.0, call-bind@npm:^1.0.2, call-bind@npm:^1.0.5, call-bind@npm:^1.0.7": version: 1.0.7 resolution: "call-bind@npm:1.0.7" @@ -7230,6 +7397,28 @@ __metadata: languageName: node linkType: hard +"call-bind@npm:^1.0.8": + version: 1.0.8 + resolution: "call-bind@npm:1.0.8" + dependencies: + call-bind-apply-helpers: "npm:^1.0.0" + es-define-property: "npm:^1.0.0" + get-intrinsic: "npm:^1.2.4" + set-function-length: "npm:^1.2.2" + checksum: 10/659b03c79bbfccf0cde3a79e7d52570724d7290209823e1ca5088f94b52192dc1836b82a324d0144612f816abb2f1734447438e38d9dafe0b3f82c2a1b9e3bce + languageName: node + linkType: hard + +"call-bound@npm:^1.0.3": + version: 1.0.4 + resolution: "call-bound@npm:1.0.4" + dependencies: + call-bind-apply-helpers: "npm:^1.0.2" + get-intrinsic: "npm:^1.3.0" + checksum: 10/ef2b96e126ec0e58a7ff694db43f4d0d44f80e641370c21549ed911fecbdbc2df3ebc9bddad918d6bbdefeafb60bb3337902006d5176d72bcd2da74820991af7 + languageName: node + linkType: hard + "callsite@npm:^1.0.0": version: 1.0.0 resolution: "callsite@npm:1.0.0" @@ -7837,7 +8026,7 @@ __metadata: languageName: node linkType: hard -"deepmerge@npm:^4.2.2": +"deepmerge@npm:^4.2.2, deepmerge@npm:^4.3.1": version: 4.3.1 resolution: "deepmerge@npm:4.3.1" checksum: 10/058d9e1b0ff1a154468bf3837aea436abcfea1ba1d165ddaaf48ca93765fdd01a30d33c36173da8fbbed951dd0a267602bc782fe288b0fc4b7e1e7091afc4529 @@ -8062,6 +8251,17 @@ __metadata: languageName: node linkType: hard +"dunder-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "dunder-proto@npm:1.0.1" + dependencies: + call-bind-apply-helpers: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + gopd: "npm:^1.2.0" + checksum: 10/5add88a3d68d42d6e6130a0cac450b7c2edbe73364bbd2fc334564418569bea97c6943a8fcd70e27130bf32afc236f30982fc4905039b703f23e9e0433c29934 + languageName: node + linkType: hard + "eastasianwidth@npm:^0.2.0": version: 0.2.0 resolution: "eastasianwidth@npm:0.2.0" @@ -8083,7 +8283,7 @@ __metadata: languageName: node linkType: hard -"elliptic@npm:6.6.1, elliptic@npm:^6.5.7": +"elliptic@npm:6.6.1, elliptic@npm:^6.5.7, elliptic@npm:^6.6.1": version: 6.6.1 resolution: "elliptic@npm:6.6.1" dependencies: @@ -8210,6 +8410,13 @@ __metadata: languageName: node linkType: hard +"es-define-property@npm:^1.0.1": + version: 1.0.1 + resolution: "es-define-property@npm:1.0.1" + checksum: 10/f8dc9e660d90919f11084db0a893128f3592b781ce967e4fccfb8f3106cb83e400a4032c559184ec52ee1dbd4b01e7776c7cd0b3327b1961b1a4a7008920fe78 + languageName: node + linkType: hard + "es-errors@npm:^1.3.0": version: 1.3.0 resolution: "es-errors@npm:1.3.0" @@ -8224,6 +8431,15 @@ __metadata: languageName: node linkType: hard +"es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1": + version: 1.1.1 + resolution: "es-object-atoms@npm:1.1.1" + dependencies: + es-errors: "npm:^1.3.0" + checksum: 10/54fe77de288451dae51c37bfbfe3ec86732dc3778f98f3eb3bdb4bf48063b2c0b8f9c93542656986149d08aa5be3204286e2276053d19582b76753f1a2728867 + languageName: node + linkType: hard + "escalade@npm:^3.1.1, escalade@npm:^3.2.0": version: 3.2.0 resolution: "escalade@npm:3.2.0" @@ -9285,6 +9501,24 @@ __metadata: languageName: node linkType: hard +"get-intrinsic@npm:^1.3.0": + version: 1.3.0 + resolution: "get-intrinsic@npm:1.3.0" + dependencies: + call-bind-apply-helpers: "npm:^1.0.2" + es-define-property: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.1.1" + function-bind: "npm:^1.1.2" + get-proto: "npm:^1.0.1" + gopd: "npm:^1.2.0" + has-symbols: "npm:^1.1.0" + hasown: "npm:^2.0.2" + math-intrinsics: "npm:^1.1.0" + checksum: 10/6e9dd920ff054147b6f44cb98104330e87caafae051b6d37b13384a45ba15e71af33c3baeac7cb630a0aaa23142718dcf25b45cfdd86c184c5dcb4e56d953a10 + languageName: node + linkType: hard + "get-npm-tarball-url@npm:^2.0.3": version: 2.1.0 resolution: "get-npm-tarball-url@npm:2.1.0" @@ -9299,6 +9533,16 @@ __metadata: languageName: node linkType: hard +"get-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "get-proto@npm:1.0.1" + dependencies: + dunder-proto: "npm:^1.0.1" + es-object-atoms: "npm:^1.0.0" + checksum: 10/4fc96afdb58ced9a67558698b91433e6b037aaa6f1493af77498d7c85b141382cf223c0e5946f334fb328ee85dfe6edd06d218eaf09556f4bc4ec6005d7f5f7b + languageName: node + linkType: hard + "get-stdin@npm:^9.0.0": version: 9.0.0 resolution: "get-stdin@npm:9.0.0" @@ -9493,6 +9737,13 @@ __metadata: languageName: node linkType: hard +"gopd@npm:^1.2.0": + version: 1.2.0 + resolution: "gopd@npm:1.2.0" + checksum: 10/94e296d69f92dc1c0768fcfeecfb3855582ab59a7c75e969d5f96ce50c3d201fd86d5a2857c22565764d5bb8a816c7b1e58f133ec318cd56274da36c5e3fb1a1 + languageName: node + linkType: hard + "got@npm:^11.7.0": version: 11.8.6 resolution: "got@npm:11.8.6" @@ -9563,6 +9814,13 @@ __metadata: languageName: node linkType: hard +"has-symbols@npm:^1.1.0": + version: 1.1.0 + resolution: "has-symbols@npm:1.1.0" + checksum: 10/959385c98696ebbca51e7534e0dc723ada325efa3475350951363cce216d27373e0259b63edb599f72eb94d6cde8577b4b2375f080b303947e560f85692834fa + languageName: node + linkType: hard + "has-tostringtag@npm:^1.0.0, has-tostringtag@npm:^1.0.2": version: 1.0.2 resolution: "has-tostringtag@npm:1.0.2" @@ -10173,6 +10431,13 @@ __metadata: languageName: node linkType: hard +"isarray@npm:^2.0.5": + version: 2.0.5 + resolution: "isarray@npm:2.0.5" + checksum: 10/1d8bc7911e13bb9f105b1b3e0b396c787a9e63046af0b8fe0ab1414488ab06b2b099b87a2d8a9e31d21c9a6fad773c7fc8b257c4880f2d957274479d28ca3414 + languageName: node + linkType: hard + "isexe@npm:^2.0.0": version: 2.0.0 resolution: "isexe@npm:2.0.0" @@ -11080,6 +11345,19 @@ __metadata: languageName: node linkType: hard +"json-stable-stringify@npm:^1.2.1": + version: 1.2.1 + resolution: "json-stable-stringify@npm:1.2.1" + dependencies: + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.3" + isarray: "npm:^2.0.5" + jsonify: "npm:^0.0.1" + object-keys: "npm:^1.1.1" + checksum: 10/f4600d34605e1da81a615ddf7dc62f021a5a5c822aee38b3c878e9a703bbd72623402944dbd7848140602c9ec54bfa2df65dfe75cc40afcfd79f3f072ca5307b + languageName: node + linkType: hard + "json-stringify-safe@npm:^5.0.1": version: 5.0.1 resolution: "json-stringify-safe@npm:5.0.1" @@ -11116,6 +11394,13 @@ __metadata: languageName: node linkType: hard +"jsonify@npm:^0.0.1": + version: 0.0.1 + resolution: "jsonify@npm:0.0.1" + checksum: 10/7b86b6f4518582ff1d8b7624ed6c6277affd5246445e864615dbdef843a4057ac58587684faf129ea111eeb80e01c15f0a4d9d03820eb3f3985fa67e81b12398 + languageName: node + linkType: hard + "jsonschema@npm:^1.4.1": version: 1.4.1 resolution: "jsonschema@npm:1.4.1" @@ -11263,6 +11548,13 @@ __metadata: languageName: node linkType: hard +"loglevel@npm:^1.9.2": + version: 1.9.2 + resolution: "loglevel@npm:1.9.2" + checksum: 10/6153d8db308323f7ee20130bc40309e7a976c30a10379d8666b596d9c6441965c3e074c8d7ee3347fe5cfc059c0375b6f3e8a10b93d5b813cc5547f5aa412a29 + languageName: node + linkType: hard + "long@npm:^5.0.0": version: 5.2.3 resolution: "long@npm:5.2.3" @@ -11390,6 +11682,13 @@ __metadata: languageName: node linkType: hard +"math-intrinsics@npm:^1.1.0": + version: 1.1.0 + resolution: "math-intrinsics@npm:1.1.0" + checksum: 10/11df2eda46d092a6035479632e1ec865b8134bdfc4bd9e571a656f4191525404f13a283a515938c3a8de934dbfd9c09674d9da9fa831e6eb7e22b50b197d2edd + languageName: node + linkType: hard + "md5.js@npm:^1.3.4": version: 1.3.5 resolution: "md5.js@npm:1.3.5" @@ -13092,7 +13391,7 @@ __metadata: languageName: node linkType: hard -"set-function-length@npm:^1.2.1": +"set-function-length@npm:^1.2.1, set-function-length@npm:^1.2.2": version: 1.2.2 resolution: "set-function-length@npm:1.2.2" dependencies: From 65a443db91f70e7d2d36968a920a648885a53632 Mon Sep 17 00:00:00 2001 From: lwin Date: Thu, 17 Apr 2025 12:23:33 +0800 Subject: [PATCH 004/147] feat: changePassword --- .../src/SeedlessOnboardingController.test.ts | 376 +++++++++++++++++- .../src/SeedlessOnboardingController.ts | 196 +++++++++ 2 files changed, 571 insertions(+), 1 deletion(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts index 51c5fd9e54..6bf93b9a05 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts @@ -1,11 +1,12 @@ import { + type ChangeEncryptionKeyResult, TOPRFError, type KeyPair, type NodeAuthTokens, type RecoverEncryptionKeyResult, type ToprfSecureBackup, } from '@metamask/toprf-secure-backup'; -import { bytesToBase64, stringToBytes } from '@metamask/utils'; +import { base64ToBytes, bytesToBase64, stringToBytes } from '@metamask/utils'; import { keccak_256 as keccak256 } from '@noble/hashes/sha3'; import { @@ -193,6 +194,31 @@ function mockRecoverEncKey( }; } +/** + * Mocks the changeEncKey method of the ToprfSecureBackup instance. + * + * @param toprfClient - The ToprfSecureBackup instance. + * @param newPassword - The new password. + * + * @returns The mock changeEncKey result. + */ +function mockChangeEncKey( + toprfClient: ToprfSecureBackup, + newPassword: string, +): ChangeEncryptionKeyResult { + const mockToprfEncryptor = createMockToprfEncryptor(); + + const encKey = mockToprfEncryptor.deriveEncKey(newPassword); + const authKeyPair = mockToprfEncryptor.deriveAuthKeyPair(newPassword); + + jest.spyOn(toprfClient, 'changeEncKey').mockResolvedValueOnce({ + encKey, + authKeyPair, + }); + + return { encKey, authKeyPair }; +} + /** * Creates a mock vault. * @@ -228,6 +254,36 @@ async function createMockVault( return encryptedMockVault; } +/** + * Decrypts the vault with the given password. + * + * @param vault - The vault. + * @param password - The password. + * + * @returns The decrypted vault. + */ +async function decryptVault(vault: string, password: string) { + const encryptor = createMockVaultEncryptor(); + + const decryptedVault = await encryptor.decrypt(password, vault); + + const deserializedVault = JSON.parse(decryptedVault as string); + + const toprfEncryptionKey = base64ToBytes( + deserializedVault.toprfEncryptionKey, + ); + const parsedToprfAuthKeyPair = JSON.parse(deserializedVault.toprfAuthKeyPair); + const toprfAuthKeyPair = { + sk: BigInt(parsedToprfAuthKeyPair.sk), + pk: base64ToBytes(parsedToprfAuthKeyPair.pk), + }; + + return { + toprfEncryptionKey, + toprfAuthKeyPair, + }; +} + const authConnectionId = 'seedless-onboarding'; const groupedAuthConnectionId = 'google'; const userId = 'user-test@gmail.com'; @@ -859,6 +915,324 @@ describe('SeedlessOnboardingController', () => { }); }); + describe('changePassword', () => { + const MOCK_PASSWORD = 'mock-password'; + const NEW_MOCK_PASSWORD = 'new-mock-password'; + const MOCK_VAULT = JSON.stringify({ foo: 'bar' }); + + it('should be able to update new password', async () => { + await withController( + { state: { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, backupHashes: [] } }, + async ({ controller, toprfClient }) => { + mockCreateLocalEncKey(toprfClient, MOCK_PASSWORD); + + // persist the local enc key + jest.spyOn(toprfClient, 'persistOprfKey').mockResolvedValueOnce(); + // encrypt and store the secret data + handleMockSecretDataAdd(); + await controller.createToprfKeyAndBackupSeedPhrase({ + authConnectionId, + userId, + groupedAuthConnectionId, + seedPhrase: MOCK_SEED_PHRASE, + password: MOCK_PASSWORD, + }); + + // verify the vault data before update password + expect(controller.state.vault).toBeDefined(); + const vaultBeforeUpdatePassword = controller.state.vault; + const { + toprfEncryptionKey: oldEncKey, + toprfAuthKeyPair: oldAuthKeyPair, + } = await decryptVault( + vaultBeforeUpdatePassword as string, + MOCK_PASSWORD, + ); + + // mock the recover enc key + mockRecoverEncKey(toprfClient, MOCK_PASSWORD); + + // mock the change enc key + const { encKey: newEncKey, authKeyPair: newAuthKeyPair } = + mockChangeEncKey(toprfClient, NEW_MOCK_PASSWORD); + + await controller.changePassword({ + authConnectionId, + userId, + groupedAuthConnectionId, + newPassword: NEW_MOCK_PASSWORD, + oldPassword: MOCK_PASSWORD, + }); + + // verify the vault after update password + const vaultAfterUpdatePassword = controller.state.vault; + const { + toprfEncryptionKey: newEncKeyFromVault, + toprfAuthKeyPair: newAuthKeyPairFromVault, + } = await decryptVault( + vaultAfterUpdatePassword as string, + NEW_MOCK_PASSWORD, + ); + + // verify that the encryption key and auth key pair are updated + expect(newEncKeyFromVault).not.toStrictEqual(oldEncKey); + expect(newAuthKeyPairFromVault.sk).not.toStrictEqual( + oldAuthKeyPair.sk, + ); + expect(newAuthKeyPairFromVault.pk).not.toStrictEqual( + oldAuthKeyPair.pk, + ); + + // verify the vault data is updated with the new encryption key and auth key pair + expect(newEncKeyFromVault).toStrictEqual(newEncKey); + expect(newAuthKeyPairFromVault.sk).toStrictEqual(newAuthKeyPair.sk); + expect(newAuthKeyPairFromVault.pk).toStrictEqual(newAuthKeyPair.pk); + }, + ); + }); + + it('should be able to update new password without groupedAuthConnectionId', async () => { + await withController( + { state: { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, backupHashes: [] } }, + async ({ controller, toprfClient }) => { + mockCreateLocalEncKey(toprfClient, MOCK_PASSWORD); + + // persist the local enc key + jest.spyOn(toprfClient, 'persistOprfKey').mockResolvedValueOnce(); + // encrypt and store the secret data + handleMockSecretDataAdd(); + await controller.createToprfKeyAndBackupSeedPhrase({ + authConnectionId, + userId, + seedPhrase: MOCK_SEED_PHRASE, + password: MOCK_PASSWORD, + }); + + // verify the vault data before update password + expect(controller.state.vault).toBeDefined(); + const vaultBeforeUpdatePassword = controller.state.vault; + const { + toprfEncryptionKey: oldEncKey, + toprfAuthKeyPair: oldAuthKeyPair, + } = await decryptVault( + vaultBeforeUpdatePassword as string, + MOCK_PASSWORD, + ); + + // mock the recover enc key + mockRecoverEncKey(toprfClient, MOCK_PASSWORD); + + // mock the change enc key + const { encKey: newEncKey, authKeyPair: newAuthKeyPair } = + mockChangeEncKey(toprfClient, NEW_MOCK_PASSWORD); + + await controller.changePassword({ + authConnectionId, + userId, + newPassword: NEW_MOCK_PASSWORD, + oldPassword: MOCK_PASSWORD, + }); + + // verify the vault after update password + const vaultAfterUpdatePassword = controller.state.vault; + const { + toprfEncryptionKey: newEncKeyFromVault, + toprfAuthKeyPair: newAuthKeyPairFromVault, + } = await decryptVault( + vaultAfterUpdatePassword as string, + NEW_MOCK_PASSWORD, + ); + + // verify that the encryption key and auth key pair are updated + expect(newEncKeyFromVault).not.toStrictEqual(oldEncKey); + expect(newAuthKeyPairFromVault.sk).not.toStrictEqual( + oldAuthKeyPair.sk, + ); + expect(newAuthKeyPairFromVault.pk).not.toStrictEqual( + oldAuthKeyPair.pk, + ); + + // verify the vault data is updated with the new encryption key and auth key pair + expect(newEncKeyFromVault).toStrictEqual(newEncKey); + expect(newAuthKeyPairFromVault.sk).toStrictEqual(newAuthKeyPair.sk); + expect(newAuthKeyPairFromVault.pk).toStrictEqual(newAuthKeyPair.pk); + }, + ); + }); + + it('should throw an error if vault is missing', async () => { + await withController( + { state: { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, backupHashes: [] } }, + async ({ controller }) => { + await expect( + controller.changePassword({ + authConnectionId, + userId, + groupedAuthConnectionId, + newPassword: NEW_MOCK_PASSWORD, + oldPassword: MOCK_PASSWORD, + }), + ).rejects.toThrow(SeedlessOnboardingControllerError.VaultError); + }, + ); + }); + + it('should throw an error if failed to parse vault data', async () => { + await withController( + { + state: { + nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, + vault: '{ "foo": "bar"', + backupHashes: [], + }, + }, + async ({ controller, encryptor }) => { + jest + .spyOn(encryptor, 'decrypt') + .mockResolvedValueOnce('{ "foo": "bar"'); + await expect( + controller.changePassword({ + authConnectionId, + userId, + groupedAuthConnectionId, + newPassword: NEW_MOCK_PASSWORD, + oldPassword: MOCK_PASSWORD, + }), + ).rejects.toThrow(SeedlessOnboardingControllerError.InvalidVaultData); + }, + ); + }); + + it('should throw an error if vault unlocked has an unexpected shape', async () => { + await withController( + { + state: { + nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, + vault: MOCK_VAULT, + backupHashes: [], + }, + }, + async ({ controller, encryptor }) => { + jest + .spyOn(encryptor, 'decrypt') + .mockResolvedValueOnce({ foo: 'bar' }); + await expect( + controller.changePassword({ + authConnectionId, + userId, + groupedAuthConnectionId, + newPassword: NEW_MOCK_PASSWORD, + oldPassword: MOCK_PASSWORD, + }), + ).rejects.toThrow(SeedlessOnboardingControllerError.InvalidVaultData); + + jest.spyOn(encryptor, 'decrypt').mockResolvedValueOnce('null'); + await expect( + controller.changePassword({ + authConnectionId, + userId, + groupedAuthConnectionId, + newPassword: NEW_MOCK_PASSWORD, + oldPassword: MOCK_PASSWORD, + }), + ).rejects.toThrow(SeedlessOnboardingControllerError.VaultDataError); + }, + ); + }); + + it('should throw an error if vault unlocked has invalid authentication data', async () => { + await withController( + { + state: { + nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, + vault: MOCK_VAULT, + backupHashes: [], + }, + }, + async ({ controller, encryptor }) => { + jest.spyOn(encryptor, 'decrypt').mockResolvedValueOnce(MOCK_VAULT); + await expect( + controller.changePassword({ + authConnectionId, + userId, + groupedAuthConnectionId, + newPassword: NEW_MOCK_PASSWORD, + oldPassword: MOCK_PASSWORD, + }), + ).rejects.toThrow(SeedlessOnboardingControllerError.VaultDataError); + }, + ); + }); + + it('should throw an error if the old password is incorrect', async () => { + await withController( + { + state: { + nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, + vault: MOCK_VAULT, + backupHashes: [], + }, + }, + async ({ controller, encryptor }) => { + jest + .spyOn(encryptor, 'decrypt') + .mockRejectedValueOnce(new Error('Incorrect password')); + await expect( + controller.changePassword({ + authConnectionId, + userId, + groupedAuthConnectionId, + newPassword: NEW_MOCK_PASSWORD, + oldPassword: 'INCORRECT_PASSWORD', + }), + ).rejects.toThrow('Incorrect password'); + }, + ); + }); + + it('should throw an error if failed to change password', async () => { + await withController( + { state: { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, backupHashes: [] } }, + async ({ controller, toprfClient }) => { + mockCreateLocalEncKey(toprfClient, MOCK_PASSWORD); + + // persist the local enc key + jest.spyOn(toprfClient, 'persistOprfKey').mockResolvedValueOnce(); + // encrypt and store the secret data + handleMockSecretDataAdd(); + await controller.createToprfKeyAndBackupSeedPhrase({ + authConnectionId, + userId, + groupedAuthConnectionId, + seedPhrase: MOCK_SEED_PHRASE, + password: MOCK_PASSWORD, + }); + + // mock the recover enc key + mockRecoverEncKey(toprfClient, MOCK_PASSWORD); + + jest + .spyOn(toprfClient, 'changeEncKey') + .mockRejectedValueOnce( + new Error('Failed to change encryption key'), + ); + + await expect( + controller.changePassword({ + authConnectionId, + userId, + groupedAuthConnectionId, + newPassword: NEW_MOCK_PASSWORD, + oldPassword: MOCK_PASSWORD, + }), + ).rejects.toThrow( + SeedlessOnboardingControllerError.FailedToChangePassword, + ); + }, + ); + }); + }); + describe('vault', () => { const MOCK_PASSWORD = 'mock-password'; diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index 37fdf42dba..b7c1447d4f 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -8,6 +8,7 @@ import type { } from '@metamask/toprf-secure-backup'; import { ToprfSecureBackup } from '@metamask/toprf-secure-backup'; import { + base64ToBytes, bytesToBase64, stringToBytes, bytesToHex, @@ -31,6 +32,7 @@ import type { SeedlessOnboardingControllerMessenger, SeedlessOnboardingControllerOptions, SeedlessOnboardingControllerState, + VaultData, } from './types'; const log = createModuleLogger(projectLogger, controllerName); @@ -258,6 +260,46 @@ export class SeedlessOnboardingController extends BaseController< } } + /** + * @description Update the password of the seedless onboarding flow. + * + * Changing password will also update the encryption key and metadata store with new encrypted values. + * + * @param params - The parameters for updating the password. + * @param params.authConnectionId - OAuth authConnectionId from dashboard + * @param params.groupedAuthConnectionId - Optional grouped authConnectionId to be used for the authenticate request. + * You can pass this to use aggregate connection. + * @param params.userId - user email or id from Social login + * @param params.newPassword - The new password to update. + * @param params.oldPassword - The old password to verify. + */ + async changePassword(params: { + authConnectionId: string; + groupedAuthConnectionId?: string; + userId: string; + newPassword: string; + oldPassword: string; + }) { + // verify the old password of the encrypted vault + await this.#verifyPassword(params.oldPassword); + + try { + // update the encryption key with new password and update the Metadata Store + const { encKey: newEncKey, authKeyPair: newAuthKeyPair } = + await this.#changeEncryptionKey(params); + + // update and encrypt the vault with new password + await this.#createNewVaultWithAuthData({ + password: params.newPassword, + rawToprfEncryptionKey: newEncKey, + rawToprfAuthKeyPair: newAuthKeyPair, + }); + } catch (error) { + log('Error changing password', error); + throw new Error(SeedlessOnboardingControllerError.FailedToChangePassword); + } + } + /** * Persist the encryption key for the seedless onboarding flow. * @@ -327,6 +369,58 @@ export class SeedlessOnboardingController extends BaseController< } } + /** + * Update the encryption key with new password and update the Metadata Store with new encryption key. + * + * @param params - The parameters for updating the encryption key. + * @param params.authConnectionId - OAuth authConnectionId from dashboard + * @param params.groupedAuthConnectionId - Optional grouped authConnectionId to be used for the authenticate request. + * You can pass this to use aggregate connection. + * @param params.userId - user email or id from Social login + * @param params.newPassword - The new password to update. + * @param params.oldPassword - The old password to verify. + * @returns A promise that resolves to new encryption key and authentication key pair. + */ + async #changeEncryptionKey(params: { + authConnectionId: string; + groupedAuthConnectionId?: string; + userId: string; + newPassword: string; + oldPassword: string; + }) { + const { + authConnectionId, + groupedAuthConnectionId, + userId, + newPassword, + oldPassword, + } = params; + + const { nodeAuthTokens } = this.state; + this.#assertIsValidNodeAuthTokens(nodeAuthTokens); + + const { + encKey, + authKeyPair, + shareKeyIndex: newShareKeyIndex, + } = await this.#recoverEncKey({ + authConnectionId, + groupedAuthConnectionId, + userId, + password: oldPassword, + }); + + return await this.toprfClient.changeEncKey({ + nodeAuthTokens, + verifier: groupedAuthConnectionId || authConnectionId, + verifierId: userId, + oldEncKey: encKey, + oldAuthKeyPair: authKeyPair, + newShareKeyIndex, + newPassword, + }); + } + /** * Encrypt and store the seed phrase backup in the metadata store. * @@ -362,6 +456,45 @@ export class SeedlessOnboardingController extends BaseController< } } + /** + * Verify the password of the encrypted vault. + * + * Upon successful verification, reterieved the nodeAuthTokens, and updates the state with the restored nodeAuthTokens. + * + * @param password - The password to verify. + * @returns A promise that resolves to the decrypted vault data. + * @throws If the password is incorrect, throw 'incorrect password' error from the #encryptor.decrypt + */ + async #verifyPassword(password: string): Promise<{ + nodeAuthTokens: NodeAuthTokens; + toprfEncryptionKey: Uint8Array; + toprfAuthKeyPair: KeyPair; + }> { + return this.#withVaultLock(async () => { + assertIsValidPassword(password); + + const encryptedVault = this.state.vault; + if (!encryptedVault) { + throw new Error(SeedlessOnboardingControllerError.VaultError); + } + + const decryptedVaultData = await this.#vaultEncryptor.decrypt( + password, + encryptedVault, + ); + + const { nodeAuthTokens, toprfEncryptionKey, toprfAuthKeyPair } = + this.#parseVaultData(decryptedVaultData); + + // update the state with the restored nodeAuthTokens + this.update((state) => { + state.nodeAuthTokens = nodeAuthTokens; + }); + + return { nodeAuthTokens, toprfEncryptionKey, toprfAuthKeyPair }; + }); + } + /** * Persist the seed phrase backups state with the hashed seed phrase backups returned from the callback. * @@ -514,6 +647,47 @@ export class SeedlessOnboardingController extends BaseController< }; } + /** + * Parse and deserialize the authentication data from the vault. + * + * @param data - The decrypted vault data. + * @returns The parsed authentication data. + * @throws If the vault data is not valid. + */ + #parseVaultData(data: unknown): { + nodeAuthTokens: NodeAuthTokens; + toprfEncryptionKey: Uint8Array; + toprfAuthKeyPair: KeyPair; + } { + if (typeof data !== 'string') { + throw new Error(SeedlessOnboardingControllerError.InvalidVaultData); + } + + let parsedVaultData: unknown; + try { + parsedVaultData = JSON.parse(data); + } catch { + throw new Error(SeedlessOnboardingControllerError.InvalidVaultData); + } + + this.#assertIsValidVaultData(parsedVaultData); + + const rawToprfEncryptionKey = base64ToBytes( + parsedVaultData.toprfEncryptionKey, + ); + const parsedToprfAuthKeyPair = JSON.parse(parsedVaultData.toprfAuthKeyPair); + const rawToprfAuthKeyPair = { + sk: BigInt(parsedToprfAuthKeyPair.sk), + pk: base64ToBytes(parsedToprfAuthKeyPair.pk), + }; + + return { + nodeAuthTokens: parsedVaultData.authTokens, + toprfEncryptionKey: rawToprfEncryptionKey, + toprfAuthKeyPair: rawToprfAuthKeyPair, + }; + } + /** * Check if the provided value is a valid node auth tokens. * @@ -527,6 +701,28 @@ export class SeedlessOnboardingController extends BaseController< throw new Error(SeedlessOnboardingControllerError.InsufficientAuthToken); } } + + /** + * Check if the provided value is a valid vault data. + * + * @param value - The value to check. + * @throws If the value is not a valid vault data. + */ + #assertIsValidVaultData(value: unknown): asserts value is VaultData { + // value is not valid vault data if any of the following conditions are true: + if ( + !value || // value is not defined + typeof value !== 'object' || // value is not an object + !('authTokens' in value) || // authTokens is not defined + typeof value.authTokens !== 'object' || // authTokens is not an object + !('toprfEncryptionKey' in value) || // toprfEncryptionKey is not defined + typeof value.toprfEncryptionKey !== 'string' || // toprfEncryptionKey is not a string + !('toprfAuthKeyPair' in value) || // toprfAuthKeyPair is not defined + typeof value.toprfAuthKeyPair !== 'string' // toprfAuthKeyPair is not a string + ) { + throw new Error(SeedlessOnboardingControllerError.VaultDataError); + } + } } /** From 4294696b6bb0f73fb84edbc976ebc6fd596bc5a3 Mon Sep 17 00:00:00 2001 From: lwin Date: Thu, 17 Apr 2025 12:25:28 +0800 Subject: [PATCH 005/147] feat: addMultiSrpBackup, batchAddBackup --- .../src/SeedlessOnboardingController.test.ts | 180 +++++++++++++++++- .../src/SeedlessOnboardingController.ts | 72 +++++++ 2 files changed, 250 insertions(+), 2 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts index 6bf93b9a05..69ed4bcbd2 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts @@ -1,6 +1,6 @@ import { - type ChangeEncryptionKeyResult, TOPRFError, + type ChangeEncryptionKeyResult, type KeyPair, type NodeAuthTokens, type RecoverEncryptionKeyResult, @@ -26,6 +26,9 @@ import { handleMockSecretDataAdd, handleMockCommitment, handleMockAuthenticate, + handleMockAcquireMetadataLock, + handleMockReleaseMetadataLock, + handleMockBatchSecretDataAdd, } from '../tests/__fixtures__/topfClient'; import { createMockSecretDataGetResponse, @@ -597,7 +600,180 @@ describe('SeedlessOnboardingController', () => { }); }); - describe('fetchAllSeedPhrases', () => { + describe('addNewSeedPhraseBackup', () => { + const MOCK_PASSWORD = 'mock-password'; + const NEW_SEED_PHRASE_1 = 'new mock seed phrase 1'; + const NEW_SEED_PHRASE_2 = 'new mock seed phrase 2'; + const NEW_SEED_PHRASE_3 = 'new mock seed phrase 3'; + let MOCK_VAULT = ''; + + beforeEach(async () => { + const mockToprfEncryptor = createMockToprfEncryptor(); + + const MOCK_ENCRYPTION_KEY = + mockToprfEncryptor.deriveEncKey(MOCK_PASSWORD); + const MOCK_AUTH_KEY_PAIR = + mockToprfEncryptor.deriveAuthKeyPair(MOCK_PASSWORD); + + MOCK_VAULT = await createMockVault( + MOCK_ENCRYPTION_KEY, + MOCK_AUTH_KEY_PAIR, + MOCK_PASSWORD, + MOCK_NODE_AUTH_TOKENS, + ); + }); + + it('should be able to add a new seed phrase backup', async () => { + await withController( + { state: { vault: MOCK_VAULT, backupHashes: [] } }, + async ({ controller }) => { + // encrypt and store the secret data + const mockSecretDataAdd = handleMockSecretDataAdd(); + await controller.addNewSeedPhraseBackup( + stringToBytes(NEW_SEED_PHRASE_1), + MOCK_PASSWORD, + ); + + expect(mockSecretDataAdd.isDone()).toBe(true); + expect(controller.state.nodeAuthTokens).toBeDefined(); + expect(controller.state.nodeAuthTokens).toStrictEqual( + MOCK_NODE_AUTH_TOKENS, + ); + }, + ); + }); + + it('should be able to add a new seed phrase backup to the existing seed phrase backups', async () => { + await withController( + { state: { vault: MOCK_VAULT, backupHashes: [] } }, + async ({ controller }) => { + // encrypt and store the secret data + const mockSecretDataAdd = handleMockSecretDataAdd(); + await controller.addNewSeedPhraseBackup( + stringToBytes(NEW_SEED_PHRASE_1), + MOCK_PASSWORD, + ); + + expect(mockSecretDataAdd.isDone()).toBe(true); + expect(controller.state.nodeAuthTokens).toBeDefined(); + expect(controller.state.nodeAuthTokens).toStrictEqual( + MOCK_NODE_AUTH_TOKENS, + ); + expect(controller.state.backupHashes).toStrictEqual([ + bytesToBase64(keccak256(stringToBytes(NEW_SEED_PHRASE_1))), + ]); + + // add another seed phrase backup + const mockSecretDataAdd2 = handleMockSecretDataAdd(); + await controller.addNewSeedPhraseBackup( + stringToBytes(NEW_SEED_PHRASE_2), + MOCK_PASSWORD, + ); + + expect(mockSecretDataAdd2.isDone()).toBe(true); + expect(controller.state.nodeAuthTokens).toBeDefined(); + expect(controller.state.nodeAuthTokens).toStrictEqual( + MOCK_NODE_AUTH_TOKENS, + ); + + const { backupHashes } = controller.state; + expect(backupHashes).toStrictEqual([ + bytesToBase64(keccak256(stringToBytes(NEW_SEED_PHRASE_1))), + bytesToBase64(keccak256(stringToBytes(NEW_SEED_PHRASE_2))), + ]); + + // should be able to get the hash of the seed phrase backup from the state + expect( + controller.getSeedPhraseBackupHash( + stringToBytes(NEW_SEED_PHRASE_1), + ), + ).toBeDefined(); + + // should return undefined if the seed phrase is not backed up + expect( + controller.getSeedPhraseBackupHash( + stringToBytes(NEW_SEED_PHRASE_3), + ), + ).toBeUndefined(); + }, + ); + }); + }); + + describe('batchAddSeedPhraseBackups', () => { + const MOCK_PASSWORD = 'mock-password'; + const SEED_PHRASES = [ + 'new mock seed phrase one', + 'new mock seed phrase two', + 'new mock seed phrase three', + ]; + let MOCK_VAULT = ''; + + beforeEach(async () => { + const mockToprfEncryptor = createMockToprfEncryptor(); + + const MOCK_ENCRYPTION_KEY = + mockToprfEncryptor.deriveEncKey(MOCK_PASSWORD); + const MOCK_AUTH_KEY_PAIR = + mockToprfEncryptor.deriveAuthKeyPair(MOCK_PASSWORD); + + MOCK_VAULT = await createMockVault( + MOCK_ENCRYPTION_KEY, + MOCK_AUTH_KEY_PAIR, + MOCK_PASSWORD, + MOCK_NODE_AUTH_TOKENS, + ); + }); + + it('should be able to add array of seed phrase backups in batch', async () => { + await withController( + { state: { vault: MOCK_VAULT, backupHashes: [] } }, + async ({ controller }) => { + // mock the network calls + const mockAcquireMetadataLock = handleMockAcquireMetadataLock(); + const mockSecretDataBatchAdd = handleMockBatchSecretDataAdd(); + const mockReleaseMetadataLock = handleMockReleaseMetadataLock(); + + await controller.batchAddSeedPhraseBackups( + SEED_PHRASES.map(stringToBytes), + MOCK_PASSWORD, + ); + + expect(mockAcquireMetadataLock.isDone()).toBe(true); + expect(mockSecretDataBatchAdd.isDone()).toBe(true); + expect(mockReleaseMetadataLock.isDone()).toBe(true); + expect(controller.state.nodeAuthTokens).toBeDefined(); + expect(controller.state.nodeAuthTokens).toStrictEqual( + MOCK_NODE_AUTH_TOKENS, + ); + }, + ); + }); + + it('should throw an error if failed to encrypt and store seed phrase backup', async () => { + await withController( + { state: { vault: MOCK_VAULT, backupHashes: [] } }, + async ({ controller, toprfClient }) => { + jest + .spyOn(toprfClient, 'batchAddSecretDataItems') + .mockRejectedValueOnce( + new Error('Failed to add secret data items in batch'), + ); + + await expect( + controller.batchAddSeedPhraseBackups( + SEED_PHRASES.map(stringToBytes), + MOCK_PASSWORD, + ), + ).rejects.toThrow( + SeedlessOnboardingControllerError.FailedToEncryptAndStoreSeedPhraseBackup, + ); + }, + ); + }); + }); + + describe('fetchAndRestoreSeedPhrase', () => { const MOCK_PASSWORD = 'mock-password'; it('should be able to restore and login with a seed phrase from metadata', async () => { diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index b7c1447d4f..02aee8dd59 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -206,6 +206,64 @@ export class SeedlessOnboardingController extends BaseController< }); } + /** + * Add a new seed phrase backup to the metadata store. + * + * @param seedPhrase - The seed phrase to backup. + * @param password - The password used to create new wallet and seedphrase + * @returns A promise that resolves to the success of the operation. + */ + async addNewSeedPhraseBackup( + seedPhrase: Uint8Array, + password: string, // TODO: to verify whether we need the password here, check how multi-srp is handled in the keyring first. + ): Promise { + // verify the password and unlock the vault + const { toprfEncryptionKey, toprfAuthKeyPair } = + await this.#verifyPassword(password); + + // encrypt and store the seed phrase backup + await this.#encryptAndStoreSeedPhraseBackup( + seedPhrase, + toprfEncryptionKey, + toprfAuthKeyPair, + ); + } + + /** + * Add array of new seed phrase backups to the metadata store in batch. + * + * @param seedPhrases - The seed phrases to backup. + * @param password - The password used to create new wallet and seedphrase + * @returns A promise that resolves to the success of the operation. + */ + async batchAddSeedPhraseBackups(seedPhrases: Uint8Array[], password: string) { + const { toprfEncryptionKey, toprfAuthKeyPair } = + await this.#verifyPassword(password); + + // prepare seed phrase metadata + const seedPhraseMetadataArr = + SeedPhraseMetadata.fromBatchSeedPhrases(seedPhrases); + + try { + // encrypt and store the seed phrase backups + await this.#withPersistedSeedPhraseBackupsState(async () => { + await this.toprfClient.batchAddSecretDataItems({ + secretData: seedPhraseMetadataArr.map((metadata) => + metadata.toBytes(), + ), + encKey: toprfEncryptionKey, + authKeyPair: toprfAuthKeyPair, + }); + return seedPhrases; + }); + } catch (error) { + log('Error encrypting and storing seed phrase backups', error); + throw new Error( + SeedlessOnboardingControllerError.FailedToEncryptAndStoreSeedPhraseBackup, + ); + } + } + /** * @description Fetch seed phrase metadata from the metadata store. * @param params - The parameters for fetching seed phrase metadata. @@ -300,6 +358,20 @@ export class SeedlessOnboardingController extends BaseController< } } + /** + * @description Get the hash of the seed phrase backup for the given seed phrase, from the state. + * + * If the given seed phrase is not backed up and not found in the state, it will return `undefined`. + * + * @param seedPhrase - The seed phrase to get the hash of. + * @returns A promise that resolves to the hash of the seed phrase backup. + */ + getSeedPhraseBackupHash(seedPhrase: Uint8Array): string | undefined { + return this.state.backupHashes.find((hash) => { + return hash === bytesToBase64(keccak256(seedPhrase)); + }); + } + /** * Persist the encryption key for the seedless onboarding flow. * From 499bcc92eb5232a8de417d0f8e54360182bb2aab Mon Sep 17 00:00:00 2001 From: lwin Date: Thu, 17 Apr 2025 12:28:33 +0800 Subject: [PATCH 006/147] lint: fixed lint --- eslint-warning-thresholds.json | 6 + .../package.json | 2 +- yarn.lock | 115 ++---------------- 3 files changed, 19 insertions(+), 104 deletions(-) diff --git a/eslint-warning-thresholds.json b/eslint-warning-thresholds.json index 6c2cd98ba9..41169b8355 100644 --- a/eslint-warning-thresholds.json +++ b/eslint-warning-thresholds.json @@ -469,6 +469,12 @@ "packages/remote-feature-flag-controller/src/utils/user-segmentation-utils.ts": { "jsdoc/tag-lines": 2 }, + "packages/seedless-onboarding-controller/src/errors.ts": { + "@typescript-eslint/no-unsafe-enum-comparison": 1 + }, + "packages/seedless-onboarding-controller/jest.environment.js": { + "n/no-unsupported-features/node-builtins": 1 + }, "packages/selected-network-controller/src/SelectedNetworkController.ts": { "@typescript-eslint/prefer-readonly": 1, "prettier/prettier": 6 diff --git a/packages/seedless-onboarding-controller/package.json b/packages/seedless-onboarding-controller/package.json index 79ae7abdcf..4751cc759f 100644 --- a/packages/seedless-onboarding-controller/package.json +++ b/packages/seedless-onboarding-controller/package.json @@ -50,7 +50,7 @@ "@metamask/base-controller": "^8.0.0", "@metamask/browser-passworder": "^4.3.0", "@metamask/toprf-secure-backup": "./toprf-secure-backup.tgz", - "@metamask/utils": "^11.4.0", + "@metamask/utils": "^11.2.0", "@noble/hashes": "^1.7.2", "async-mutex": "^0.5.0" }, diff --git a/yarn.lock b/yarn.lock index 4972614956..ba6d1b1832 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4255,7 +4255,7 @@ __metadata: "@metamask/base-controller": "npm:^8.0.0" "@metamask/browser-passworder": "npm:^4.3.0" "@metamask/toprf-secure-backup": ./toprf-secure-backup.tgz - "@metamask/utils": "npm:^11.4.0" + "@metamask/utils": "npm:^11.2.0" "@noble/ciphers": "npm:^0.5.2" "@noble/curves": "npm:^1.2.0" "@noble/hashes": "npm:^1.7.2" @@ -4624,23 +4624,6 @@ __metadata: languageName: node linkType: hard -"@metamask/utils@npm:^11.4.0": - version: 11.4.0 - resolution: "@metamask/utils@npm:11.4.0" - dependencies: - "@ethereumjs/tx": "npm:^4.2.0" - "@metamask/superstruct": "npm:^3.1.0" - "@noble/hashes": "npm:^1.3.1" - "@scure/base": "npm:^1.1.3" - "@types/debug": "npm:^4.1.7" - debug: "npm:^4.3.4" - pony-cause: "npm:^2.1.10" - semver: "npm:^7.5.4" - uuid: "npm:^9.0.1" - checksum: 10/7c976268e944b542b5e936bae89f58a50eef58501bd3512944995c6d416cb1a7dd3f712aec8c7ca0969dcee889ab963b815fbc3e863dc80ccf16e9258eaec3ff - languageName: node - linkType: hard - "@metamask/utils@npm:^8.2.0": version: 8.5.0 resolution: "@metamask/utils@npm:8.5.0" @@ -4722,16 +4705,7 @@ __metadata: languageName: node linkType: hard -"@noble/curves@npm:^1.2.0": - version: 1.5.0 - resolution: "@noble/curves@npm:1.5.0" - dependencies: - "@noble/hashes": "npm:1.4.0" - checksum: 10/d7707d756a887a0daf9eba709526017ac6905d4be58760947e0f0652961926295ba62a5a699d9a9f0bf2a2e0c6803381373e14542be5ff3885b3434bb59be86c - languageName: node - linkType: hard - -"@noble/curves@npm:^1.8.1": +"@noble/curves@npm:^1.2.0, @noble/curves@npm:^1.8.1": version: 1.8.2 resolution: "@noble/curves@npm:1.8.2" dependencies: @@ -4747,14 +4721,14 @@ __metadata: languageName: node linkType: hard -"@noble/hashes@npm:1.4.0, @noble/hashes@npm:^1.1.2, @noble/hashes@npm:^1.3.1, @noble/hashes@npm:^1.3.2, @noble/hashes@npm:^1.4.0, @noble/hashes@npm:~1.4.0": +"@noble/hashes@npm:1.4.0, @noble/hashes@npm:~1.4.0": version: 1.4.0 resolution: "@noble/hashes@npm:1.4.0" checksum: 10/e156e65794c473794c52fa9d06baf1eb20903d0d96719530f523cc4450f6c721a957c544796e6efd0197b2296e7cd70efeb312f861465e17940a3e3c7e0febc6 languageName: node linkType: hard -"@noble/hashes@npm:1.7.2, @noble/hashes@npm:^1.7.1, @noble/hashes@npm:^1.7.2": +"@noble/hashes@npm:1.7.2, @noble/hashes@npm:^1.1.2, @noble/hashes@npm:^1.3.1, @noble/hashes@npm:^1.3.2, @noble/hashes@npm:^1.4.0, @noble/hashes@npm:^1.7.1, @noble/hashes@npm:^1.7.2": version: 1.7.2 resolution: "@noble/hashes@npm:1.7.2" checksum: 10/b5af9e4b91543dcc46a811b5b2c57bfdeb41728361979a19d6110a743e2cb0459872553f68d3a46326d21959964db2776b8c8b4db85ac1d9f63ebcaddf7d59b6 @@ -7384,20 +7358,7 @@ __metadata: languageName: node linkType: hard -"call-bind@npm:^1.0.0, call-bind@npm:^1.0.2, call-bind@npm:^1.0.5, call-bind@npm:^1.0.7": - version: 1.0.7 - resolution: "call-bind@npm:1.0.7" - dependencies: - es-define-property: "npm:^1.0.0" - es-errors: "npm:^1.3.0" - function-bind: "npm:^1.1.2" - get-intrinsic: "npm:^1.2.4" - set-function-length: "npm:^1.2.1" - checksum: 10/cd6fe658e007af80985da5185bff7b55e12ef4c2b6f41829a26ed1eef254b1f1c12e3dfd5b2b068c6ba8b86aba62390842d81752e67dcbaec4f6f76e7113b6b7 - languageName: node - linkType: hard - -"call-bind@npm:^1.0.8": +"call-bind@npm:^1.0.0, call-bind@npm:^1.0.2, call-bind@npm:^1.0.5, call-bind@npm:^1.0.7, call-bind@npm:^1.0.8": version: 1.0.8 resolution: "call-bind@npm:1.0.8" dependencies: @@ -8401,16 +8362,7 @@ __metadata: languageName: node linkType: hard -"es-define-property@npm:^1.0.0": - version: 1.0.0 - resolution: "es-define-property@npm:1.0.0" - dependencies: - get-intrinsic: "npm:^1.2.4" - checksum: 10/f66ece0a887b6dca71848fa71f70461357c0e4e7249696f81bad0a1f347eed7b31262af4a29f5d726dc026426f085483b6b90301855e647aa8e21936f07293c6 - languageName: node - linkType: hard - -"es-define-property@npm:^1.0.1": +"es-define-property@npm:^1.0.0, es-define-property@npm:^1.0.1": version: 1.0.1 resolution: "es-define-property@npm:1.0.1" checksum: 10/f8dc9e660d90919f11084db0a893128f3592b781ce967e4fccfb8f3106cb83e400a4032c559184ec52ee1dbd4b01e7776c7cd0b3327b1961b1a4a7008920fe78 @@ -9488,20 +9440,7 @@ __metadata: languageName: node linkType: hard -"get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.4": - version: 1.2.4 - resolution: "get-intrinsic@npm:1.2.4" - dependencies: - es-errors: "npm:^1.3.0" - function-bind: "npm:^1.1.2" - has-proto: "npm:^1.0.1" - has-symbols: "npm:^1.0.3" - hasown: "npm:^2.0.0" - checksum: 10/85bbf4b234c3940edf8a41f4ecbd4e25ce78e5e6ad4e24ca2f77037d983b9ef943fd72f00f3ee97a49ec622a506b67db49c36246150377efcda1c9eb03e5f06d - languageName: node - linkType: hard - -"get-intrinsic@npm:^1.3.0": +"get-intrinsic@npm:^1.2.4, get-intrinsic@npm:^1.3.0": version: 1.3.0 resolution: "get-intrinsic@npm:1.3.0" dependencies: @@ -9728,16 +9667,7 @@ __metadata: languageName: node linkType: hard -"gopd@npm:^1.0.1": - version: 1.0.1 - resolution: "gopd@npm:1.0.1" - dependencies: - get-intrinsic: "npm:^1.1.3" - checksum: 10/5fbc7ad57b368ae4cd2f41214bd947b045c1a4be2f194a7be1778d71f8af9dbf4004221f3b6f23e30820eb0d052b4f819fe6ebe8221e2a3c6f0ee4ef173421ca - languageName: node - linkType: hard - -"gopd@npm:^1.2.0": +"gopd@npm:^1.0.1, gopd@npm:^1.2.0": version: 1.2.0 resolution: "gopd@npm:1.2.0" checksum: 10/94e296d69f92dc1c0768fcfeecfb3855582ab59a7c75e969d5f96ce50c3d201fd86d5a2857c22565764d5bb8a816c7b1e58f133ec318cd56274da36c5e3fb1a1 @@ -9800,21 +9730,7 @@ __metadata: languageName: node linkType: hard -"has-proto@npm:^1.0.1": - version: 1.0.3 - resolution: "has-proto@npm:1.0.3" - checksum: 10/0b67c2c94e3bea37db3e412e3c41f79d59259875e636ba471e94c009cdfb1fa82bf045deeffafc7dbb9c148e36cae6b467055aaa5d9fad4316e11b41e3ba551a - languageName: node - linkType: hard - -"has-symbols@npm:^1.0.3": - version: 1.0.3 - resolution: "has-symbols@npm:1.0.3" - checksum: 10/464f97a8202a7690dadd026e6d73b1ceeddd60fe6acfd06151106f050303eaa75855aaa94969df8015c11ff7c505f196114d22f7386b4a471038da5874cf5e9b - languageName: node - linkType: hard - -"has-symbols@npm:^1.1.0": +"has-symbols@npm:^1.0.3, has-symbols@npm:^1.1.0": version: 1.1.0 resolution: "has-symbols@npm:1.1.0" checksum: 10/959385c98696ebbca51e7534e0dc723ada325efa3475350951363cce216d27373e0259b63edb599f72eb94d6cde8577b4b2375f080b303947e560f85692834fa @@ -9851,7 +9767,7 @@ __metadata: languageName: node linkType: hard -"hasown@npm:^2.0.0, hasown@npm:^2.0.2": +"hasown@npm:^2.0.2": version: 2.0.2 resolution: "hasown@npm:2.0.2" dependencies: @@ -11541,14 +11457,7 @@ __metadata: languageName: node linkType: hard -"loglevel@npm:^1.8.1": - version: 1.9.1 - resolution: "loglevel@npm:1.9.1" - checksum: 10/863cbbcddf850a937482c604e2d11586574a5110b746bb49c7cc04739e01f6035f6db841d25377106dd330bca7142d74995f15a97c5f3ea0af86d9472d4a99f4 - languageName: node - linkType: hard - -"loglevel@npm:^1.9.2": +"loglevel@npm:^1.8.1, loglevel@npm:^1.9.2": version: 1.9.2 resolution: "loglevel@npm:1.9.2" checksum: 10/6153d8db308323f7ee20130bc40309e7a976c30a10379d8666b596d9c6441965c3e074c8d7ee3347fe5cfc059c0375b6f3e8a10b93d5b813cc5547f5aa412a29 @@ -13391,7 +13300,7 @@ __metadata: languageName: node linkType: hard -"set-function-length@npm:^1.2.1, set-function-length@npm:^1.2.2": +"set-function-length@npm:^1.2.2": version: 1.2.2 resolution: "set-function-length@npm:1.2.2" dependencies: From 8ad9c24dab83639722069dab74ded46bea7ceab8 Mon Sep 17 00:00:00 2001 From: lwin Date: Thu, 17 Apr 2025 12:35:52 +0800 Subject: [PATCH 007/147] fix: updated CODEOWNERS --- .github/CODEOWNERS | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 6efba19dab..8a8967e1c8 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -84,7 +84,6 @@ /packages/permission-log-controller @MetaMask/wallet-api-platform-engineers @MetaMask/wallet-framework-engineers /packages/profile-sync-controller @MetaMask/identity /packages/remote-feature-flag-controller @MetaMask/extension-platform @MetaMask/mobile-platform -/packages/seedless-onboarding-controller @MetaMask/web3auth @MetaMask/wallet-framework-engineers ## Package Release related /packages/accounts-controller/package.json @MetaMask/accounts-engineers @MetaMask/wallet-framework-engineers From 611d3580b26e7cba44b74ca5a76a15bfbdfa6886 Mon Sep 17 00:00:00 2001 From: lwin Date: Thu, 17 Apr 2025 12:42:29 +0800 Subject: [PATCH 008/147] added tgz package for TOPRF --- .../auth-network-utils.tgz | Bin 0 -> 41102 bytes .../toprf-secure-backup.tgz | Bin 0 -> 99771 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 packages/seedless-onboarding-controller/auth-network-utils.tgz create mode 100644 packages/seedless-onboarding-controller/toprf-secure-backup.tgz diff --git a/packages/seedless-onboarding-controller/auth-network-utils.tgz b/packages/seedless-onboarding-controller/auth-network-utils.tgz new file mode 100644 index 0000000000000000000000000000000000000000..7921cbaeff9345619c4273f241042a246c8532a8 GIT binary patch literal 41102 zcmbT-Q;aA<<0kyEJ#)skZQHgzXKdTHZQHhO+qONk=l#Fmx7mxm+D;{%bkgZg>Y^&Y zdLFz;2!Q{&kgvM0RX4{T*gm{YC_Nfa*VmY07;4A+;=VQ;gw`bR{iXjlBvuKp0fDp} zi8K0-+X0@^<}}ZIXGOBBImoK?wrV!O1dSVO;UN({TRJ;Ct2n>biu&A6@xh^XlR3F| zep=afa$Nn^YWZkZuY6ok`u}QGr+oWbwl{Z4Yf@23T~<~F`t_2Mf)Xg+J*mc zbbQ?de}Cf}#D5I+@n|`VZA|o3i1Us~Z1g;򺹑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

8Izk8e);1knF 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 literal 0 HcmV?d00001 From 21df27b9620f6ef1fd118cc4d3faee7fd7144d3c Mon Sep 17 00:00:00 2001 From: lwin Date: Thu, 17 Apr 2025 12:52:00 +0800 Subject: [PATCH 009/147] lint: fixed --- packages/seedless-onboarding-controller/package.json | 2 +- yarn.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/seedless-onboarding-controller/package.json b/packages/seedless-onboarding-controller/package.json index 4751cc759f..f992c2c0fc 100644 --- a/packages/seedless-onboarding-controller/package.json +++ b/packages/seedless-onboarding-controller/package.json @@ -51,7 +51,7 @@ "@metamask/browser-passworder": "^4.3.0", "@metamask/toprf-secure-backup": "./toprf-secure-backup.tgz", "@metamask/utils": "^11.2.0", - "@noble/hashes": "^1.7.2", + "@noble/hashes": "^1.4.0", "async-mutex": "^0.5.0" }, "devDependencies": { diff --git a/yarn.lock b/yarn.lock index ba6d1b1832..7fa9012ecd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4258,7 +4258,7 @@ __metadata: "@metamask/utils": "npm:^11.2.0" "@noble/ciphers": "npm:^0.5.2" "@noble/curves": "npm:^1.2.0" - "@noble/hashes": "npm:^1.7.2" + "@noble/hashes": "npm:^1.4.0" "@types/jest": "npm:^27.4.1" async-mutex: "npm:^0.5.0" deepmerge: "npm:^4.2.2" @@ -4728,7 +4728,7 @@ __metadata: languageName: node linkType: hard -"@noble/hashes@npm:1.7.2, @noble/hashes@npm:^1.1.2, @noble/hashes@npm:^1.3.1, @noble/hashes@npm:^1.3.2, @noble/hashes@npm:^1.4.0, @noble/hashes@npm:^1.7.1, @noble/hashes@npm:^1.7.2": +"@noble/hashes@npm:1.7.2, @noble/hashes@npm:^1.1.2, @noble/hashes@npm:^1.3.1, @noble/hashes@npm:^1.3.2, @noble/hashes@npm:^1.4.0, @noble/hashes@npm:^1.7.1": version: 1.7.2 resolution: "@noble/hashes@npm:1.7.2" checksum: 10/b5af9e4b91543dcc46a811b5b2c57bfdeb41728361979a19d6110a743e2cb0459872553f68d3a46326d21959964db2776b8c8b4db85ac1d9f63ebcaddf7d59b6 From c2bc7b4e360ee1f75ded83b4bdaf507ea1b4bd78 Mon Sep 17 00:00:00 2001 From: lwin Date: Thu, 17 Apr 2025 13:03:42 +0800 Subject: [PATCH 010/147] updated changelog --- .../seedless-onboarding-controller/CHANGELOG.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/packages/seedless-onboarding-controller/CHANGELOG.md b/packages/seedless-onboarding-controller/CHANGELOG.md index b518709c7b..22e371c2b2 100644 --- a/packages/seedless-onboarding-controller/CHANGELOG.md +++ b/packages/seedless-onboarding-controller/CHANGELOG.md @@ -7,4 +7,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] -[Unreleased]: https://github.com/MetaMask/core/ +### Added + +- Initial implementation of the seedless onboarding controller. +- Authenticate OAuth user using the seedless onboarding flow and determine if the user is already registered or not +- Create a new Toprf key and backup seed phrase +- Add a new seed phrase backup to the metadata store +- Add array of new seed phrase backups to the metadata store in batch (useful in multi-srp flow) +- Fetch seed phrase metadata from the metadata store +- Update the password of the seedless onboarding flow + +[Unreleased]: https://github.com/MetaMask/core/compare/seedless-onboarding-controller@0.0.0...HEAD + From 54e21b45953e70b2e3291cbde4c3e71dd19e00f7 Mon Sep 17 00:00:00 2001 From: lwin Date: Thu, 17 Apr 2025 13:25:52 +0800 Subject: [PATCH 011/147] fix: validate changelog --- .../seedless-onboarding-controller/CHANGELOG.md | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/packages/seedless-onboarding-controller/CHANGELOG.md b/packages/seedless-onboarding-controller/CHANGELOG.md index 22e371c2b2..253e6f14a4 100644 --- a/packages/seedless-onboarding-controller/CHANGELOG.md +++ b/packages/seedless-onboarding-controller/CHANGELOG.md @@ -10,12 +10,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Initial implementation of the seedless onboarding controller. -- Authenticate OAuth user using the seedless onboarding flow and determine if the user is already registered or not -- Create a new Toprf key and backup seed phrase -- Add a new seed phrase backup to the metadata store -- Add array of new seed phrase backups to the metadata store in batch (useful in multi-srp flow) -- Fetch seed phrase metadata from the metadata store -- Update the password of the seedless onboarding flow - -[Unreleased]: https://github.com/MetaMask/core/compare/seedless-onboarding-controller@0.0.0...HEAD + - Authenticate OAuth user using the seedless onboarding flow and determine if the user is already registered or not + - Create a new Toprf key and backup seed phrase + - Add a new seed phrase backup to the metadata store + - Add array of new seed phrase backups to the metadata store in batch (useful in multi-srp flow) + - Fetch seed phrase metadata from the metadata store + - Update the password of the seedless onboarding flow +[Unreleased]: https://github.com/MetaMask/core/ From 999f1dfd4e0ffa39c7bf46aeac487c94e5907c74 Mon Sep 17 00:00:00 2001 From: lwin Date: Thu, 17 Apr 2025 13:48:30 +0800 Subject: [PATCH 012/147] added PR number to changelog --- packages/seedless-onboarding-controller/CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/seedless-onboarding-controller/CHANGELOG.md b/packages/seedless-onboarding-controller/CHANGELOG.md index 253e6f14a4..f0eb943fc7 100644 --- a/packages/seedless-onboarding-controller/CHANGELOG.md +++ b/packages/seedless-onboarding-controller/CHANGELOG.md @@ -9,7 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added -- Initial implementation of the seedless onboarding controller. +- Initial implementation of the seedless onboarding controller. ([#5671](https://github.com/MetaMask/core/pull/5671)) - Authenticate OAuth user using the seedless onboarding flow and determine if the user is already registered or not - Create a new Toprf key and backup seed phrase - Add a new seed phrase backup to the metadata store @@ -17,4 +17,4 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fetch seed phrase metadata from the metadata store - Update the password of the seedless onboarding flow -[Unreleased]: https://github.com/MetaMask/core/ +[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/seedless-onboarding-controller@0.0.0...HEAD From 13da8a7ec4132cd6fe73194791069fae2d20ea36 Mon Sep 17 00:00:00 2001 From: lwin Date: Thu, 17 Apr 2025 13:59:25 +0800 Subject: [PATCH 013/147] validate changelog --- packages/seedless-onboarding-controller/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/seedless-onboarding-controller/CHANGELOG.md b/packages/seedless-onboarding-controller/CHANGELOG.md index f0eb943fc7..d140dc32fd 100644 --- a/packages/seedless-onboarding-controller/CHANGELOG.md +++ b/packages/seedless-onboarding-controller/CHANGELOG.md @@ -17,4 +17,4 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fetch seed phrase metadata from the metadata store - Update the password of the seedless onboarding flow -[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/seedless-onboarding-controller@0.0.0...HEAD +[Unreleased]: https://github.com/MetaMask/core/ From 94ba335ad27c63b75d758ba76f39bfe5ad349685 Mon Sep 17 00:00:00 2001 From: lwin Date: Thu, 17 Apr 2025 16:00:37 +0800 Subject: [PATCH 014/147] update: toprf-secure-backup package --- .../src/SeedlessOnboardingController.test.ts | 57 ++++++++---------- .../src/SeedlessOnboardingController.ts | 14 ++--- .../toprf-secure-backup.tgz | Bin 99771 -> 100048 bytes yarn.lock | 4 +- 4 files changed, 34 insertions(+), 41 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts index 69ed4bcbd2..2d014bd6be 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts @@ -131,17 +131,14 @@ function createMockToprfEncryptor() { } /** - * Mocks the createLocalEncKey method of the ToprfSecureBackup instance. + * Mocks the createLocalKey method of the ToprfSecureBackup instance. * * @param toprfClient - The ToprfSecureBackup instance. * @param password - The mock password. * - * @returns The mock createLocalEncKey result. + * @returns The mock createLocalKey result. */ -function mockCreateLocalEncKey( - toprfClient: ToprfSecureBackup, - password: string, -) { +function mockcreateLocalKey(toprfClient: ToprfSecureBackup, password: string) { const mockToprfEncryptor = createMockToprfEncryptor(); const encKey = mockToprfEncryptor.deriveEncKey(password); @@ -149,7 +146,7 @@ function mockCreateLocalEncKey( const oprfKey = BigInt(0); const seed = stringToBytes(password); - jest.spyOn(toprfClient, 'createLocalEncKey').mockReturnValue({ + jest.spyOn(toprfClient, 'createLocalKey').mockReturnValue({ encKey, authKeyPair, oprfKey, @@ -186,14 +183,14 @@ function mockRecoverEncKey( encKey, authKeyPair, rateLimitResetResult, - shareKeyIndex: 1, + keyShareIndex: 1, }); return { encKey, authKeyPair, rateLimitResetResult, - shareKeyIndex: 1, + keyShareIndex: 1, }; } @@ -457,13 +454,13 @@ describe('SeedlessOnboardingController', () => { await withController( { state: { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, backupHashes: [] } }, async ({ controller, toprfClient, initialState, encryptor }) => { - const { encKey, authKeyPair } = mockCreateLocalEncKey( + const { encKey, authKeyPair } = mockcreateLocalKey( toprfClient, MOCK_PASSWORD, ); // persist the local enc key - jest.spyOn(toprfClient, 'persistOprfKey').mockResolvedValueOnce(); + jest.spyOn(toprfClient, 'persistLocalKey').mockResolvedValueOnce(); // encrypt and store the secret data const mockSecretDataAdd = handleMockSecretDataAdd(); await controller.createToprfKeyAndBackupSeedPhrase({ @@ -505,11 +502,9 @@ describe('SeedlessOnboardingController', () => { await withController( { state: { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, backupHashes: [] } }, async ({ controller, toprfClient, initialState }) => { - jest - .spyOn(toprfClient, 'createLocalEncKey') - .mockImplementation(() => { - throw new Error('Failed to create local encryption key'); - }); + jest.spyOn(toprfClient, 'createLocalKey').mockImplementation(() => { + throw new Error('Failed to create local encryption key'); + }); await expect( controller.createToprfKeyAndBackupSeedPhrase({ @@ -544,14 +539,14 @@ describe('SeedlessOnboardingController', () => { }); }); - it('should throw an error if persistOprfKey fails', async () => { + it('should throw an error if persistLocalKey fails', async () => { await withController( { state: { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, backupHashes: [] } }, async ({ controller, toprfClient }) => { - mockCreateLocalEncKey(toprfClient, MOCK_PASSWORD); + mockcreateLocalKey(toprfClient, MOCK_PASSWORD); jest - .spyOn(toprfClient, 'persistOprfKey') + .spyOn(toprfClient, 'persistLocalKey') .mockRejectedValueOnce( new Error('Failed to persist local encryption key'), ); @@ -577,9 +572,9 @@ describe('SeedlessOnboardingController', () => { await withController( { state: { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, backupHashes: [] } }, async ({ controller, toprfClient }) => { - mockCreateLocalEncKey(toprfClient, MOCK_PASSWORD); + mockcreateLocalKey(toprfClient, MOCK_PASSWORD); - jest.spyOn(toprfClient, 'persistOprfKey').mockResolvedValueOnce(); + jest.spyOn(toprfClient, 'persistLocalKey').mockResolvedValueOnce(); jest .spyOn(toprfClient, 'addSecretDataItem') @@ -1100,10 +1095,10 @@ describe('SeedlessOnboardingController', () => { await withController( { state: { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, backupHashes: [] } }, async ({ controller, toprfClient }) => { - mockCreateLocalEncKey(toprfClient, MOCK_PASSWORD); + mockcreateLocalKey(toprfClient, MOCK_PASSWORD); // persist the local enc key - jest.spyOn(toprfClient, 'persistOprfKey').mockResolvedValueOnce(); + jest.spyOn(toprfClient, 'persistLocalKey').mockResolvedValueOnce(); // encrypt and store the secret data handleMockSecretDataAdd(); await controller.createToprfKeyAndBackupSeedPhrase({ @@ -1171,10 +1166,10 @@ describe('SeedlessOnboardingController', () => { await withController( { state: { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, backupHashes: [] } }, async ({ controller, toprfClient }) => { - mockCreateLocalEncKey(toprfClient, MOCK_PASSWORD); + mockcreateLocalKey(toprfClient, MOCK_PASSWORD); // persist the local enc key - jest.spyOn(toprfClient, 'persistOprfKey').mockResolvedValueOnce(); + jest.spyOn(toprfClient, 'persistLocalKey').mockResolvedValueOnce(); // encrypt and store the secret data handleMockSecretDataAdd(); await controller.createToprfKeyAndBackupSeedPhrase({ @@ -1370,10 +1365,10 @@ describe('SeedlessOnboardingController', () => { await withController( { state: { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, backupHashes: [] } }, async ({ controller, toprfClient }) => { - mockCreateLocalEncKey(toprfClient, MOCK_PASSWORD); + mockcreateLocalKey(toprfClient, MOCK_PASSWORD); // persist the local enc key - jest.spyOn(toprfClient, 'persistOprfKey').mockResolvedValueOnce(); + jest.spyOn(toprfClient, 'persistLocalKey').mockResolvedValueOnce(); // encrypt and store the secret data handleMockSecretDataAdd(); await controller.createToprfKeyAndBackupSeedPhrase({ @@ -1446,9 +1441,9 @@ describe('SeedlessOnboardingController', () => { { state: { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, backupHashes: [] } }, async ({ controller, toprfClient }) => { // create the local enc key - mockCreateLocalEncKey(toprfClient, MOCK_PASSWORD); + mockcreateLocalKey(toprfClient, MOCK_PASSWORD); // persist the local enc key - jest.spyOn(toprfClient, 'persistOprfKey').mockResolvedValueOnce(); + jest.spyOn(toprfClient, 'persistLocalKey').mockResolvedValueOnce(); // mock the secret data add const mockSecretDataAdd = handleMockSecretDataAdd(); await expect( @@ -1473,9 +1468,9 @@ describe('SeedlessOnboardingController', () => { { state: { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, backupHashes: [] } }, async ({ controller, toprfClient }) => { // create the local enc key - mockCreateLocalEncKey(toprfClient, MOCK_PASSWORD); + mockcreateLocalKey(toprfClient, MOCK_PASSWORD); // persist the local enc key - jest.spyOn(toprfClient, 'persistOprfKey').mockResolvedValueOnce(); + jest.spyOn(toprfClient, 'persistLocalKey').mockResolvedValueOnce(); // mock the secret data add const mockSecretDataAdd = handleMockSecretDataAdd(); await expect( diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index 02aee8dd59..6a5a819541 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -173,11 +173,9 @@ export class SeedlessOnboardingController extends BaseController< seedPhrase: Uint8Array; }): Promise { // locally evaluate the encryption key from the password - const { encKey, authKeyPair, oprfKey } = this.toprfClient.createLocalEncKey( - { - password, - }, - ); + const { encKey, authKeyPair, oprfKey } = this.toprfClient.createLocalKey({ + password, + }); // encrypt and store the seed phrase backup await this.#encryptAndStoreSeedPhraseBackup( @@ -395,7 +393,7 @@ export class SeedlessOnboardingController extends BaseController< this.#assertIsValidNodeAuthTokens(nodeAuthTokens); try { - await this.toprfClient.persistOprfKey({ + await this.toprfClient.persistLocalKey({ nodeAuthTokens, verifier: params.groupedAuthConnectionId || params.authConnectionId, verifierId: params.userId, @@ -474,7 +472,7 @@ export class SeedlessOnboardingController extends BaseController< const { encKey, authKeyPair, - shareKeyIndex: newShareKeyIndex, + keyShareIndex: newKeyShareIndex, } = await this.#recoverEncKey({ authConnectionId, groupedAuthConnectionId, @@ -488,7 +486,7 @@ export class SeedlessOnboardingController extends BaseController< verifierId: userId, oldEncKey: encKey, oldAuthKeyPair: authKeyPair, - newShareKeyIndex, + newKeyShareIndex, newPassword, }); } diff --git a/packages/seedless-onboarding-controller/toprf-secure-backup.tgz b/packages/seedless-onboarding-controller/toprf-secure-backup.tgz index ccf5fdc7119e885f641f016950e94496cb6862d5..60d918fcc605a8d2993899c79a949eae8bee78e3 100644 GIT binary patch delta 99038 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

~VtM*aKV)Nl?P#I` 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%0Dj_h&^UxdiE)j72F;bC@!x%vq`^bsyZR~Q=Ek_ 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 m$=D$a?(X% Date: Thu, 17 Apr 2025 17:50:59 +0800 Subject: [PATCH 015/147] fix: export errors from controller --- packages/seedless-onboarding-controller/src/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/seedless-onboarding-controller/src/index.ts b/packages/seedless-onboarding-controller/src/index.ts index a8abbfda20..8c180c91dd 100644 --- a/packages/seedless-onboarding-controller/src/index.ts +++ b/packages/seedless-onboarding-controller/src/index.ts @@ -1,3 +1,4 @@ export { SeedlessOnboardingController } from './SeedlessOnboardingController'; export type * from './types'; export * from './constants'; +export * from './errors'; From 9137174523a99fa91f7e3d10839ddea29e6cdec0 Mon Sep 17 00:00:00 2001 From: Chaitanya Potti Date: Thu, 17 Apr 2025 18:00:39 +0800 Subject: [PATCH 016/147] Update packages/seedless-onboarding-controller/package.json Co-authored-by: himanshuchawla009 --- packages/seedless-onboarding-controller/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/seedless-onboarding-controller/package.json b/packages/seedless-onboarding-controller/package.json index f992c2c0fc..3193664ea4 100644 --- a/packages/seedless-onboarding-controller/package.json +++ b/packages/seedless-onboarding-controller/package.json @@ -1,7 +1,7 @@ { "name": "@metamask/seedless-onboarding-controller", "version": "0.0.0", - "description": "Backup and restore SRP", + "description": "Backup and rehydrate SRP(s) using social login and password", "keywords": [ "MetaMask", "Ethereum" From b9f998095baa0fd3c9caeeea63cf32d16952c950 Mon Sep 17 00:00:00 2001 From: Chaitanya Potti Date: Thu, 17 Apr 2025 18:04:55 +0800 Subject: [PATCH 017/147] Update packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts Co-authored-by: himanshuchawla009 --- .../src/SeedlessOnboardingController.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index 6a5a819541..5cfd1b2d52 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -107,7 +107,7 @@ export class SeedlessOnboardingController extends BaseController< * @description Authenticate OAuth user using the seedless onboarding flow * and determine if the user is already registered or not. * @param params - The parameters for authenticate OAuth user. - * @param params.idTokens - The ID token from Social login + * @param params.idTokens - The ID token(s) issued by OAuth verification service. Currently this array only contains a single idToken which is verified by all the nodes, in future we are considering to issue a unique idToken for each node. * @param params.authConnectionId - OAuth authConnectionId from dashboard * @param params.userId - user email or id from Social login * @param params.groupedAuthConnectionId - Optional grouped authConnectionId to be used for the authenticate request. From f3e8fed79891923ed9e3be198d161be47ef7e8d3 Mon Sep 17 00:00:00 2001 From: Chaitanya Potti Date: Thu, 17 Apr 2025 18:05:05 +0800 Subject: [PATCH 018/147] Update packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts Co-authored-by: himanshuchawla009 --- .../src/SeedlessOnboardingController.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index 5cfd1b2d52..48db5e8d52 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -263,7 +263,7 @@ export class SeedlessOnboardingController extends BaseController< } /** - * @description Fetch seed phrase metadata from the metadata store. + * @description Fetches encrypted seed phrases and metadata for user's account from the metadata store. * @param params - The parameters for fetching seed phrase metadata. * @param params.authConnectionId - OAuth authConnectionId from dashboard * @param params.groupedAuthConnectionId - Optional grouped authConnectionId to be used for the authenticate request. From acacda1312ed9b61a52d3ed3ef76e98a287aaa19 Mon Sep 17 00:00:00 2001 From: Chaitanya Potti Date: Thu, 17 Apr 2025 18:05:21 +0800 Subject: [PATCH 019/147] Update packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts Co-authored-by: himanshuchawla009 --- .../src/SeedlessOnboardingController.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index 48db5e8d52..725e411b6e 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -111,7 +111,7 @@ export class SeedlessOnboardingController extends BaseController< * @param params.authConnectionId - OAuth authConnectionId from dashboard * @param params.userId - user email or id from Social login * @param params.groupedAuthConnectionId - Optional grouped authConnectionId to be used for the authenticate request. - * You can pass this to use aggregate connection. + * You can pass this to use aggregate multiple OAuth connections. Useful when you want user to have same account while using different OAuth connections. * @returns A promise that resolves to the authentication result. */ async authenticate(params: { From 0f2844080e6eca08fffb457c044f8bf6f0781c1f Mon Sep 17 00:00:00 2001 From: Chaitanya Potti Date: Thu, 17 Apr 2025 18:08:29 +0800 Subject: [PATCH 020/147] Update packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts Co-authored-by: himanshuchawla009 --- .../src/SeedlessOnboardingController.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index 725e411b6e..d695cb8087 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -148,7 +148,7 @@ export class SeedlessOnboardingController extends BaseController< } /** - * Create a new TopRF key and backup seed phrase. + * Create a new TOPRF encryption key using given password and backups the provided seed phrase. * * @param params - The parameters for backup seed phrase. * @param params.authConnectionId - OAuth authConnectionId from dashboard From 0677d524c9af59073daabb27d1b6c91daac97eef Mon Sep 17 00:00:00 2001 From: Chaitanya Potti Date: Thu, 17 Apr 2025 18:09:48 +0800 Subject: [PATCH 021/147] fix: review comments regarding authenticate and default network --- .../src/SeedlessOnboardingController.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index 725e411b6e..0855c4e5e4 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -82,7 +82,7 @@ export class SeedlessOnboardingController extends BaseController< messenger, state, encryptor, - network = Web3AuthNetwork.Devnet, + network = Web3AuthNetwork.Mainnet, }: SeedlessOnboardingControllerOptions) { super({ name: controllerName, @@ -117,8 +117,8 @@ export class SeedlessOnboardingController extends BaseController< async authenticate(params: { idTokens: string[]; authConnectionId: string; - groupedAuthConnectionId?: string; userId: string; + groupedAuthConnectionId?: string; }) { try { const { idTokens, authConnectionId, groupedAuthConnectionId, userId } = From 334e06066b72cf9e84a463eda44a246cfc23c3ea Mon Sep 17 00:00:00 2001 From: Chaitanya Potti Date: Thu, 17 Apr 2025 18:21:03 +0800 Subject: [PATCH 022/147] fix: import of keccak256 + rename variables --- .../package.json | 3 ++- .../src/SeedlessOnboardingController.test.ts | 10 +++++----- .../src/SeedlessOnboardingController.ts | 19 +++++++------------ yarn.lock | 1 + 4 files changed, 15 insertions(+), 18 deletions(-) diff --git a/packages/seedless-onboarding-controller/package.json b/packages/seedless-onboarding-controller/package.json index 3193664ea4..6f073b4bb6 100644 --- a/packages/seedless-onboarding-controller/package.json +++ b/packages/seedless-onboarding-controller/package.json @@ -47,17 +47,18 @@ "since-latest-release": "../../scripts/since-latest-release.sh" }, "dependencies": { + "@metamask/auth-network-utils": "./auth-network-utils.tgz", "@metamask/base-controller": "^8.0.0", "@metamask/browser-passworder": "^4.3.0", "@metamask/toprf-secure-backup": "./toprf-secure-backup.tgz", "@metamask/utils": "^11.2.0", - "@noble/hashes": "^1.4.0", "async-mutex": "^0.5.0" }, "devDependencies": { "@metamask/auto-changelog": "^3.4.4", "@noble/ciphers": "^0.5.2", "@noble/curves": "^1.2.0", + "@noble/hashes": "^1.4.0", "@types/jest": "^27.4.1", "deepmerge": "^4.2.2", "jest": "^27.5.1", diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts index 2d014bd6be..d887931b02 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts @@ -1,3 +1,4 @@ +import { keccak256AndHexify } from '@metamask/auth-network-utils'; import { TOPRFError, type ChangeEncryptionKeyResult, @@ -7,7 +8,6 @@ import { type ToprfSecureBackup, } from '@metamask/toprf-secure-backup'; import { base64ToBytes, bytesToBase64, stringToBytes } from '@metamask/utils'; -import { keccak_256 as keccak256 } from '@noble/hashes/sha3'; import { Web3AuthNetwork, @@ -655,7 +655,7 @@ describe('SeedlessOnboardingController', () => { MOCK_NODE_AUTH_TOKENS, ); expect(controller.state.backupHashes).toStrictEqual([ - bytesToBase64(keccak256(stringToBytes(NEW_SEED_PHRASE_1))), + keccak256AndHexify(stringToBytes(NEW_SEED_PHRASE_1)), ]); // add another seed phrase backup @@ -673,8 +673,8 @@ describe('SeedlessOnboardingController', () => { const { backupHashes } = controller.state; expect(backupHashes).toStrictEqual([ - bytesToBase64(keccak256(stringToBytes(NEW_SEED_PHRASE_1))), - bytesToBase64(keccak256(stringToBytes(NEW_SEED_PHRASE_2))), + keccak256AndHexify(stringToBytes(NEW_SEED_PHRASE_1)), + keccak256AndHexify(stringToBytes(NEW_SEED_PHRASE_2)), ]); // should be able to get the hash of the seed phrase backup from the state @@ -917,7 +917,7 @@ describe('SeedlessOnboardingController', () => { ]; const expectedBackupHashes = SORTED_MOCK_SEED_PHRASES.map( - (seedPhrase) => bytesToBase64(keccak256(seedPhrase)), + (seedPhrase) => keccak256AndHexify(seedPhrase), ); expect(controller.state.backupHashes).toStrictEqual( expectedBackupHashes, diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index 930e2a72a6..e24c7ca22c 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -1,3 +1,4 @@ +import { keccak256AndHexify } from '@metamask/auth-network-utils'; import type { StateMetadata } from '@metamask/base-controller'; import { BaseController } from '@metamask/base-controller'; import { encrypt, decrypt } from '@metamask/browser-passworder'; @@ -11,11 +12,9 @@ import { base64ToBytes, bytesToBase64, stringToBytes, - bytesToHex, remove0x, bigIntToHex, } from '@metamask/utils'; -import { keccak_256 as keccak256 } from '@noble/hashes/sha3'; import { Mutex } from 'async-mutex'; import { @@ -123,14 +122,12 @@ export class SeedlessOnboardingController extends BaseController< try { const { idTokens, authConnectionId, groupedAuthConnectionId, userId } = params; - const verifier = groupedAuthConnectionId || authConnectionId; - const verifierId = userId; const hashedIdTokenHexes = idTokens.map((idToken) => { - return remove0x(bytesToHex(keccak256(stringToBytes(idToken)))); + return remove0x(keccak256AndHexify(stringToBytes(idToken))); }); const authenticationResult = await this.toprfClient.authenticate({ - verifier, - verifierId, + verifier: groupedAuthConnectionId || authConnectionId, + verifierId: userId, idTokens: hashedIdTokenHexes, singleIdVerifierParams: { subVerifier: authConnectionId, @@ -366,7 +363,7 @@ export class SeedlessOnboardingController extends BaseController< */ getSeedPhraseBackupHash(seedPhrase: Uint8Array): string | undefined { return this.state.backupHashes.find((hash) => { - return hash === bytesToBase64(keccak256(seedPhrase)); + return hash === keccak256AndHexify(seedPhrase); }); } @@ -580,12 +577,10 @@ export class SeedlessOnboardingController extends BaseController< if (Array.isArray(backedUpSeedPhrases)) { backedUpHashB64Strings = backedUpSeedPhrases.map((seedPhrase) => - bytesToBase64(keccak256(seedPhrase)), + keccak256AndHexify(seedPhrase), ); } else { - backedUpHashB64Strings = [ - bytesToBase64(keccak256(backedUpSeedPhrases)), - ]; + backedUpHashB64Strings = [keccak256AndHexify(backedUpSeedPhrases)]; } const existingBackedUpHashes = this.state.backupHashes; diff --git a/yarn.lock b/yarn.lock index 0ff3a008e5..7158eaf51c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4251,6 +4251,7 @@ __metadata: version: 0.0.0-use.local resolution: "@metamask/seedless-onboarding-controller@workspace:packages/seedless-onboarding-controller" dependencies: + "@metamask/auth-network-utils": ./auth-network-utils.tgz "@metamask/auto-changelog": "npm:^3.4.4" "@metamask/base-controller": "npm:^8.0.0" "@metamask/browser-passworder": "npm:^4.3.0" From cd62441c7e08d28050753fc3ce25cf5747594170 Mon Sep 17 00:00:00 2001 From: Chaitanya Potti Date: Thu, 17 Apr 2025 18:22:30 +0800 Subject: [PATCH 023/147] fix: comment batchadd --- .../src/SeedlessOnboardingController.test.ts | 144 +++++++++--------- .../src/SeedlessOnboardingController.ts | 68 ++++----- 2 files changed, 106 insertions(+), 106 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts index d887931b02..1ef4987efd 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts @@ -695,78 +695,78 @@ describe('SeedlessOnboardingController', () => { }); }); - describe('batchAddSeedPhraseBackups', () => { - const MOCK_PASSWORD = 'mock-password'; - const SEED_PHRASES = [ - 'new mock seed phrase one', - 'new mock seed phrase two', - 'new mock seed phrase three', - ]; - let MOCK_VAULT = ''; - - beforeEach(async () => { - const mockToprfEncryptor = createMockToprfEncryptor(); - - const MOCK_ENCRYPTION_KEY = - mockToprfEncryptor.deriveEncKey(MOCK_PASSWORD); - const MOCK_AUTH_KEY_PAIR = - mockToprfEncryptor.deriveAuthKeyPair(MOCK_PASSWORD); - - MOCK_VAULT = await createMockVault( - MOCK_ENCRYPTION_KEY, - MOCK_AUTH_KEY_PAIR, - MOCK_PASSWORD, - MOCK_NODE_AUTH_TOKENS, - ); - }); - - it('should be able to add array of seed phrase backups in batch', async () => { - await withController( - { state: { vault: MOCK_VAULT, backupHashes: [] } }, - async ({ controller }) => { - // mock the network calls - const mockAcquireMetadataLock = handleMockAcquireMetadataLock(); - const mockSecretDataBatchAdd = handleMockBatchSecretDataAdd(); - const mockReleaseMetadataLock = handleMockReleaseMetadataLock(); - - await controller.batchAddSeedPhraseBackups( - SEED_PHRASES.map(stringToBytes), - MOCK_PASSWORD, - ); - - expect(mockAcquireMetadataLock.isDone()).toBe(true); - expect(mockSecretDataBatchAdd.isDone()).toBe(true); - expect(mockReleaseMetadataLock.isDone()).toBe(true); - expect(controller.state.nodeAuthTokens).toBeDefined(); - expect(controller.state.nodeAuthTokens).toStrictEqual( - MOCK_NODE_AUTH_TOKENS, - ); - }, - ); - }); - - it('should throw an error if failed to encrypt and store seed phrase backup', async () => { - await withController( - { state: { vault: MOCK_VAULT, backupHashes: [] } }, - async ({ controller, toprfClient }) => { - jest - .spyOn(toprfClient, 'batchAddSecretDataItems') - .mockRejectedValueOnce( - new Error('Failed to add secret data items in batch'), - ); - - await expect( - controller.batchAddSeedPhraseBackups( - SEED_PHRASES.map(stringToBytes), - MOCK_PASSWORD, - ), - ).rejects.toThrow( - SeedlessOnboardingControllerError.FailedToEncryptAndStoreSeedPhraseBackup, - ); - }, - ); - }); - }); + // describe('batchAddSeedPhraseBackups', () => { + // const MOCK_PASSWORD = 'mock-password'; + // const SEED_PHRASES = [ + // 'new mock seed phrase one', + // 'new mock seed phrase two', + // 'new mock seed phrase three', + // ]; + // let MOCK_VAULT = ''; + + // beforeEach(async () => { + // const mockToprfEncryptor = createMockToprfEncryptor(); + + // const MOCK_ENCRYPTION_KEY = + // mockToprfEncryptor.deriveEncKey(MOCK_PASSWORD); + // const MOCK_AUTH_KEY_PAIR = + // mockToprfEncryptor.deriveAuthKeyPair(MOCK_PASSWORD); + + // MOCK_VAULT = await createMockVault( + // MOCK_ENCRYPTION_KEY, + // MOCK_AUTH_KEY_PAIR, + // MOCK_PASSWORD, + // MOCK_NODE_AUTH_TOKENS, + // ); + // }); + + // it('should be able to add array of seed phrase backups in batch', async () => { + // await withController( + // { state: { vault: MOCK_VAULT, backupHashes: [] } }, + // async ({ controller }) => { + // // mock the network calls + // const mockAcquireMetadataLock = handleMockAcquireMetadataLock(); + // const mockSecretDataBatchAdd = handleMockBatchSecretDataAdd(); + // const mockReleaseMetadataLock = handleMockReleaseMetadataLock(); + + // await controller.batchAddSeedPhraseBackups( + // SEED_PHRASES.map(stringToBytes), + // MOCK_PASSWORD, + // ); + + // expect(mockAcquireMetadataLock.isDone()).toBe(true); + // expect(mockSecretDataBatchAdd.isDone()).toBe(true); + // expect(mockReleaseMetadataLock.isDone()).toBe(true); + // expect(controller.state.nodeAuthTokens).toBeDefined(); + // expect(controller.state.nodeAuthTokens).toStrictEqual( + // MOCK_NODE_AUTH_TOKENS, + // ); + // }, + // ); + // }); + + // it('should throw an error if failed to encrypt and store seed phrase backup', async () => { + // await withController( + // { state: { vault: MOCK_VAULT, backupHashes: [] } }, + // async ({ controller, toprfClient }) => { + // jest + // .spyOn(toprfClient, 'batchAddSecretDataItems') + // .mockRejectedValueOnce( + // new Error('Failed to add secret data items in batch'), + // ); + + // await expect( + // controller.batchAddSeedPhraseBackups( + // SEED_PHRASES.map(stringToBytes), + // MOCK_PASSWORD, + // ), + // ).rejects.toThrow( + // SeedlessOnboardingControllerError.FailedToEncryptAndStoreSeedPhraseBackup, + // ); + // }, + // ); + // }); + // }); describe('fetchAndRestoreSeedPhrase', () => { const MOCK_PASSWORD = 'mock-password'; diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index e24c7ca22c..b6fbc371bb 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -224,40 +224,40 @@ export class SeedlessOnboardingController extends BaseController< ); } - /** - * Add array of new seed phrase backups to the metadata store in batch. - * - * @param seedPhrases - The seed phrases to backup. - * @param password - The password used to create new wallet and seedphrase - * @returns A promise that resolves to the success of the operation. - */ - async batchAddSeedPhraseBackups(seedPhrases: Uint8Array[], password: string) { - const { toprfEncryptionKey, toprfAuthKeyPair } = - await this.#verifyPassword(password); - - // prepare seed phrase metadata - const seedPhraseMetadataArr = - SeedPhraseMetadata.fromBatchSeedPhrases(seedPhrases); - - try { - // encrypt and store the seed phrase backups - await this.#withPersistedSeedPhraseBackupsState(async () => { - await this.toprfClient.batchAddSecretDataItems({ - secretData: seedPhraseMetadataArr.map((metadata) => - metadata.toBytes(), - ), - encKey: toprfEncryptionKey, - authKeyPair: toprfAuthKeyPair, - }); - return seedPhrases; - }); - } catch (error) { - log('Error encrypting and storing seed phrase backups', error); - throw new Error( - SeedlessOnboardingControllerError.FailedToEncryptAndStoreSeedPhraseBackup, - ); - } - } + // /** + // * Add array of new seed phrase backups to the metadata store in batch. + // * + // * @param seedPhrases - The seed phrases to backup. + // * @param password - The password used to create new wallet and seedphrase + // * @returns A promise that resolves to the success of the operation. + // */ + // async batchAddSeedPhraseBackups(seedPhrases: Uint8Array[], password: string) { + // const { toprfEncryptionKey, toprfAuthKeyPair } = + // await this.#verifyPassword(password); + + // // prepare seed phrase metadata + // const seedPhraseMetadataArr = + // SeedPhraseMetadata.fromBatchSeedPhrases(seedPhrases); + + // try { + // // encrypt and store the seed phrase backups + // await this.#withPersistedSeedPhraseBackupsState(async () => { + // await this.toprfClient.batchAddSecretDataItems({ + // secretData: seedPhraseMetadataArr.map((metadata) => + // metadata.toBytes(), + // ), + // encKey: toprfEncryptionKey, + // authKeyPair: toprfAuthKeyPair, + // }); + // return seedPhrases; + // }); + // } catch (error) { + // log('Error encrypting and storing seed phrase backups', error); + // throw new Error( + // SeedlessOnboardingControllerError.FailedToEncryptAndStoreSeedPhraseBackup, + // ); + // } + // } /** * @description Fetches encrypted seed phrases and metadata for user's account from the metadata store. From e7c66cd788cf5aa11f2da5203f86f8b838cd3b92 Mon Sep 17 00:00:00 2001 From: lwin Date: Fri, 18 Apr 2025 13:44:08 +0800 Subject: [PATCH 024/147] fix: lint --- .../src/SeedlessOnboardingController.test.ts | 76 ------------------- 1 file changed, 76 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts index 1ef4987efd..3cb970f641 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts @@ -26,9 +26,6 @@ import { handleMockSecretDataAdd, handleMockCommitment, handleMockAuthenticate, - handleMockAcquireMetadataLock, - handleMockReleaseMetadataLock, - handleMockBatchSecretDataAdd, } from '../tests/__fixtures__/topfClient'; import { createMockSecretDataGetResponse, @@ -695,79 +692,6 @@ describe('SeedlessOnboardingController', () => { }); }); - // describe('batchAddSeedPhraseBackups', () => { - // const MOCK_PASSWORD = 'mock-password'; - // const SEED_PHRASES = [ - // 'new mock seed phrase one', - // 'new mock seed phrase two', - // 'new mock seed phrase three', - // ]; - // let MOCK_VAULT = ''; - - // beforeEach(async () => { - // const mockToprfEncryptor = createMockToprfEncryptor(); - - // const MOCK_ENCRYPTION_KEY = - // mockToprfEncryptor.deriveEncKey(MOCK_PASSWORD); - // const MOCK_AUTH_KEY_PAIR = - // mockToprfEncryptor.deriveAuthKeyPair(MOCK_PASSWORD); - - // MOCK_VAULT = await createMockVault( - // MOCK_ENCRYPTION_KEY, - // MOCK_AUTH_KEY_PAIR, - // MOCK_PASSWORD, - // MOCK_NODE_AUTH_TOKENS, - // ); - // }); - - // it('should be able to add array of seed phrase backups in batch', async () => { - // await withController( - // { state: { vault: MOCK_VAULT, backupHashes: [] } }, - // async ({ controller }) => { - // // mock the network calls - // const mockAcquireMetadataLock = handleMockAcquireMetadataLock(); - // const mockSecretDataBatchAdd = handleMockBatchSecretDataAdd(); - // const mockReleaseMetadataLock = handleMockReleaseMetadataLock(); - - // await controller.batchAddSeedPhraseBackups( - // SEED_PHRASES.map(stringToBytes), - // MOCK_PASSWORD, - // ); - - // expect(mockAcquireMetadataLock.isDone()).toBe(true); - // expect(mockSecretDataBatchAdd.isDone()).toBe(true); - // expect(mockReleaseMetadataLock.isDone()).toBe(true); - // expect(controller.state.nodeAuthTokens).toBeDefined(); - // expect(controller.state.nodeAuthTokens).toStrictEqual( - // MOCK_NODE_AUTH_TOKENS, - // ); - // }, - // ); - // }); - - // it('should throw an error if failed to encrypt and store seed phrase backup', async () => { - // await withController( - // { state: { vault: MOCK_VAULT, backupHashes: [] } }, - // async ({ controller, toprfClient }) => { - // jest - // .spyOn(toprfClient, 'batchAddSecretDataItems') - // .mockRejectedValueOnce( - // new Error('Failed to add secret data items in batch'), - // ); - - // await expect( - // controller.batchAddSeedPhraseBackups( - // SEED_PHRASES.map(stringToBytes), - // MOCK_PASSWORD, - // ), - // ).rejects.toThrow( - // SeedlessOnboardingControllerError.FailedToEncryptAndStoreSeedPhraseBackup, - // ); - // }, - // ); - // }); - // }); - describe('fetchAndRestoreSeedPhrase', () => { const MOCK_PASSWORD = 'mock-password'; From b0ebb02aa4bdcf3a87eaea1f845fe0e3fd8d2f67 Mon Sep 17 00:00:00 2001 From: lwin Date: Fri, 18 Apr 2025 14:48:08 +0800 Subject: [PATCH 025/147] fixed: build --- .../package.json | 1 + yarn.lock | 18 ++++++++++++++---- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/packages/seedless-onboarding-controller/package.json b/packages/seedless-onboarding-controller/package.json index 6f073b4bb6..069b478f97 100644 --- a/packages/seedless-onboarding-controller/package.json +++ b/packages/seedless-onboarding-controller/package.json @@ -59,6 +59,7 @@ "@noble/ciphers": "^0.5.2", "@noble/curves": "^1.2.0", "@noble/hashes": "^1.4.0", + "@types/elliptic": "^6", "@types/jest": "^27.4.1", "deepmerge": "^4.2.2", "jest": "^27.5.1", diff --git a/yarn.lock b/yarn.lock index 99c92710fc..b32f83a617 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4262,6 +4262,7 @@ __metadata: "@noble/ciphers": "npm:^0.5.2" "@noble/curves": "npm:^1.2.0" "@noble/hashes": "npm:^1.4.0" + "@types/elliptic": "npm:^6" "@types/jest": "npm:^27.4.1" async-mutex: "npm:^0.5.0" deepmerge: "npm:^4.2.2" @@ -5387,12 +5388,12 @@ __metadata: languageName: node linkType: hard -"@types/bn.js@npm:^5.1.0, @types/bn.js@npm:^5.1.5": - version: 5.1.5 - resolution: "@types/bn.js@npm:5.1.5" +"@types/bn.js@npm:*, @types/bn.js@npm:^5.1.0, @types/bn.js@npm:^5.1.5": + version: 5.1.6 + resolution: "@types/bn.js@npm:5.1.6" dependencies: "@types/node": "npm:*" - checksum: 10/9719330c86aeae0a6a447c974cf0f853ba3660ede20de61f435b03d699e30e6d8b35bf71a8dc9fdc8317784438e83177644ba068ed653d0ae0106e1ecbfe289e + checksum: 10/db565b5a2af59b09459d74441153bf23a0e80f1fb2d070330786054e7ce1a7285dc40afcd8f289426c61a83166bdd70814f70e2d439744686aac5d3ea75daf13 languageName: node linkType: hard @@ -5431,6 +5432,15 @@ __metadata: languageName: node linkType: hard +"@types/elliptic@npm:^6": + version: 6.4.18 + resolution: "@types/elliptic@npm:6.4.18" + dependencies: + "@types/bn.js": "npm:*" + checksum: 10/06493e18167a581fa48d3c0f7034b9ad107993610767d5251ae2788be4bc5bdeda292d9ae18bbf366faa4a492eb669fc31060392f79bd5fdccb4efbd729ae66a + languageName: node + linkType: hard + "@types/emscripten@npm:^1.39.6": version: 1.39.13 resolution: "@types/emscripten@npm:1.39.13" From 969053f7be6ae3a2c5a51e65730313573217c2d3 Mon Sep 17 00:00:00 2001 From: lwin Date: Fri, 18 Apr 2025 14:59:35 +0800 Subject: [PATCH 026/147] test: updated comment in jest.enviroment.js which defines 'webCrypto' --- packages/seedless-onboarding-controller/jest.environment.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/seedless-onboarding-controller/jest.environment.js b/packages/seedless-onboarding-controller/jest.environment.js index ee7ed6cb8b..c8cf035c3b 100644 --- a/packages/seedless-onboarding-controller/jest.environment.js +++ b/packages/seedless-onboarding-controller/jest.environment.js @@ -1,7 +1,7 @@ const NodeEnvironment = require('jest-environment-node'); /** - * KeyringController depends on @noble/hashes, which as of 1.3.2 relies on the + * SeedlessOnboardingController depends on @noble/hashes, which as of 1.7.1 relies on the * Web Crypto API in Node and browsers. */ class CustomTestEnvironment extends NodeEnvironment { From caa3fef7952d2edf30dfdc3473742ed64ba320fa Mon Sep 17 00:00:00 2001 From: lwin Date: Fri, 18 Apr 2025 15:12:04 +0800 Subject: [PATCH 027/147] chore: updated comments for withPersistedSeedPhraseBackupsState method --- .../src/SeedlessOnboardingController.ts | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index b6fbc371bb..df8e97b512 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -563,16 +563,30 @@ export class SeedlessOnboardingController extends BaseController< } /** - * Persist the seed phrase backups state with the hashed seed phrase backups returned from the callback. + * Executes a callback function that creates or restores seed phrases and persists their hashes in the controller state. * - * @param callback - The function to execute while the seed phrase backups state is persisted. - * @returns A promise that resolves to the success of the operation. + * This method: + * 1. Executes the provided callback to create/restore seed phrases + * 2. Generates keccak256 hashes of the seed phrases + * 3. Merges new hashes with existing ones in the state, ensuring uniqueness + * 4. Updates the controller state with the combined hashes + * + * This is a wrapper method that should be used around any operation that creates + * or restores seed phrases to ensure their hashes are properly tracked. + * + * @param createOrRestoreSeedPhraseBackupCallback - function that returns either a single seed phrase + * or an array of seed phrases as Uint8Array(s) + * @returns The original seed phrase(s) returned by the callback + * @throws Rethrows any errors from the callback with additional logging */ async #withPersistedSeedPhraseBackupsState< Result extends Uint8Array | Uint8Array[], - >(callback: () => Promise): Promise { + >( + createOrRestoreSeedPhraseBackupCallback: () => Promise, + ): Promise { try { - const backedUpSeedPhrases = await callback(); + const backedUpSeedPhrases = + await createOrRestoreSeedPhraseBackupCallback(); let backedUpHashB64Strings: string[] = []; if (Array.isArray(backedUpSeedPhrases)) { From 37ae6dbd9748a14eebf8c1c5c8f692b05ba973b6 Mon Sep 17 00:00:00 2001 From: lwin Date: Fri, 18 Apr 2025 15:16:21 +0800 Subject: [PATCH 028/147] chore: renamed and updated comments for '#verifyPassword' method --- .../src/SeedlessOnboardingController.ts | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index df8e97b512..121b05cb2f 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -214,7 +214,7 @@ export class SeedlessOnboardingController extends BaseController< ): Promise { // verify the password and unlock the vault const { toprfEncryptionKey, toprfAuthKeyPair } = - await this.#verifyPassword(password); + await this.#unlockVaultWithPassword(password); // encrypt and store the seed phrase backup await this.#encryptAndStoreSeedPhraseBackup( @@ -334,7 +334,7 @@ export class SeedlessOnboardingController extends BaseController< oldPassword: string; }) { // verify the old password of the encrypted vault - await this.#verifyPassword(params.oldPassword); + await this.#unlockVaultWithPassword(params.oldPassword); try { // update the encryption key with new password and update the Metadata Store @@ -524,15 +524,21 @@ export class SeedlessOnboardingController extends BaseController< } /** - * Verify the password of the encrypted vault. + * Unlocks the encrypted vault using the provided password and returns the decrypted vault data. + * This method ensures thread-safety by using a mutex lock when accessing the vault. * - * Upon successful verification, reterieved the nodeAuthTokens, and updates the state with the restored nodeAuthTokens. - * - * @param password - The password to verify. - * @returns A promise that resolves to the decrypted vault data. - * @throws If the password is incorrect, throw 'incorrect password' error from the #encryptor.decrypt + * @param password - The password to decrypt the vault. + * @returns A promise that resolves to an object containing: + * - nodeAuthTokens: Authentication tokens to communicate with the TOPRF service + * - toprfEncryptionKey: The decrypted TOPRF encryption key + * - toprfAuthKeyPair: The decrypted TOPRF authentication key pair + * @throws {Error} If: + * - The password is invalid or empty + * - The vault is not initialized + * - The password is incorrect (from encryptor.decrypt) + * - The decrypted vault data is malformed */ - async #verifyPassword(password: string): Promise<{ + async #unlockVaultWithPassword(password: string): Promise<{ nodeAuthTokens: NodeAuthTokens; toprfEncryptionKey: Uint8Array; toprfAuthKeyPair: KeyPair; From eb7735a978ffa2ab2a3847df85e34dce76c0d809 Mon Sep 17 00:00:00 2001 From: lwin Date: Fri, 18 Apr 2025 15:22:06 +0800 Subject: [PATCH 029/147] chore: updated exports from the controller --- .../seedless-onboarding-controller/src/index.ts | 12 ++++++++++-- .../seedless-onboarding-controller/src/types.ts | 14 ++++++++------ 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/index.ts b/packages/seedless-onboarding-controller/src/index.ts index 8c180c91dd..6b839b55c9 100644 --- a/packages/seedless-onboarding-controller/src/index.ts +++ b/packages/seedless-onboarding-controller/src/index.ts @@ -1,4 +1,12 @@ export { SeedlessOnboardingController } from './SeedlessOnboardingController'; -export type * from './types'; -export * from './constants'; +export type { + SeedlessOnboardingControllerState, + SeedlessOnboardingControllerOptions, + SeedlessOnboardingControllerMessenger, + SeedlessOnboardingControllerGetStateActions, + SeedlessOnboardingControllerStateChangeEvent, + SeedlessOnboardingControllerActions, + SeedlessOnboardingControllerEvents, +} from './types'; +export { controllerName, Web3AuthNetwork } from './constants'; export * from './errors'; diff --git a/packages/seedless-onboarding-controller/src/types.ts b/packages/seedless-onboarding-controller/src/types.ts index 00be2dc622..146026a800 100644 --- a/packages/seedless-onboarding-controller/src/types.ts +++ b/packages/seedless-onboarding-controller/src/types.ts @@ -35,7 +35,8 @@ export type SeedlessOnboardingControllerGetStateActions = typeof controllerName, SeedlessOnboardingControllerState >; -export type AllowedActions = SeedlessOnboardingControllerGetStateActions; +export type SeedlessOnboardingControllerActions = + SeedlessOnboardingControllerGetStateActions; // Events export type SeedlessOnboardingControllerStateChangeEvent = @@ -43,15 +44,16 @@ export type SeedlessOnboardingControllerStateChangeEvent = typeof controllerName, SeedlessOnboardingControllerState >; -export type AllowedEvents = SeedlessOnboardingControllerStateChangeEvent; +export type SeedlessOnboardingControllerEvents = + SeedlessOnboardingControllerStateChangeEvent; // Messenger export type SeedlessOnboardingControllerMessenger = RestrictedMessenger< typeof controllerName, - AllowedActions, - AllowedEvents, - AllowedActions['type'], - AllowedEvents['type'] + SeedlessOnboardingControllerActions, + SeedlessOnboardingControllerEvents, + SeedlessOnboardingControllerActions['type'], + SeedlessOnboardingControllerEvents['type'] >; /** From 14b308cd7402f447e719b2d57a1a8d712ab08e52 Mon Sep 17 00:00:00 2001 From: lwin Date: Fri, 18 Apr 2025 15:54:32 +0800 Subject: [PATCH 030/147] chore: created a function to get default state of SeedlessOnboardingController --- .../src/SeedlessOnboardingController.test.ts | 7 ------- .../src/SeedlessOnboardingController.ts | 17 ++++++++++++----- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts index 3cb970f641..4e81ac767f 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts @@ -94,17 +94,10 @@ async function withController( const encryptor = new MockVaultEncryptor(); const messenger = buildSeedlessOnboardingControllerMessenger(); - const initialState: SeedlessOnboardingControllerState = rest.state || { - vault: undefined, - nodeAuthTokens: undefined, - backupHashes: [], - }; - const controller = new SeedlessOnboardingController({ encryptor, messenger, network: Web3AuthNetwork.Devnet, - state: initialState, ...rest, }); const { toprfClient } = controller; diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index 121b05cb2f..e4c0cb3ffa 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -36,6 +36,17 @@ import type { const log = createModuleLogger(projectLogger, controllerName); +/** + * Get the default state for the Seedless Onboarding Controller. + * + * @returns The default state for the Seedless Onboarding Controller. + */ +export function getDefaultSeedlessOnboardingControllerState(): SeedlessOnboardingControllerState { + return { + backupHashes: [], + }; +} + /** * Seedless Onboarding Controller State Metadata. * @@ -59,10 +70,6 @@ const seedlessOnboardingMetadata: StateMetadata Date: Fri, 18 Apr 2025 16:01:27 +0800 Subject: [PATCH 031/147] chore: removed description tag from jsDoc --- .../src/SeedlessOnboardingController.ts | 20 ++++++++++++------- .../src/types.ts | 9 +++++---- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index e4c0cb3ffa..53fc3557a8 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -110,8 +110,9 @@ export class SeedlessOnboardingController extends BaseController< } /** - * @description Authenticate OAuth user using the seedless onboarding flow + * Authenticate OAuth user using the seedless onboarding flow * and determine if the user is already registered or not. + * * @param params - The parameters for authenticate OAuth user. * @param params.idTokens - The ID token(s) issued by OAuth verification service. Currently this array only contains a single idToken which is verified by all the nodes, in future we are considering to issue a unique idToken for each node. * @param params.authConnectionId - OAuth authConnectionId from dashboard @@ -267,7 +268,10 @@ export class SeedlessOnboardingController extends BaseController< // } /** - * @description Fetches encrypted seed phrases and metadata for user's account from the metadata store. + * Fetches all encrypted seed phrases and metadata for user's account from the metadata store. + * + * Decrypts the seed phrases and returns the decrypted seed phrases using the recovered encryption key from the password. + * * @param params - The parameters for fetching seed phrase metadata. * @param params.authConnectionId - OAuth authConnectionId from dashboard * @param params.groupedAuthConnectionId - Optional grouped authConnectionId to be used for the authenticate request. @@ -321,9 +325,9 @@ export class SeedlessOnboardingController extends BaseController< } /** - * @description Update the password of the seedless onboarding flow. + * Update the password of the seedless onboarding flow. * - * Changing password will also update the encryption key and metadata store with new encrypted values. + * Changing password will also update the encryption key, metadata store and the vault with new encrypted values. * * @param params - The parameters for updating the password. * @param params.authConnectionId - OAuth authConnectionId from dashboard @@ -361,7 +365,7 @@ export class SeedlessOnboardingController extends BaseController< } /** - * @description Get the hash of the seed phrase backup for the given seed phrase, from the state. + * Get the hash of the seed phrase backup for the given seed phrase, from the state. * * If the given seed phrase is not backed up and not found in the state, it will return `undefined`. * @@ -411,7 +415,8 @@ export class SeedlessOnboardingController extends BaseController< } /** - * @description Recover the encryption key from password. + * Recover the encryption key from password. + * * @param params - The parameters for recovering the encryption key. * @param params.authConnectionId - OAuth authConnectionId from dashboard * @param params.groupedAuthConnectionId - Optional grouped authConnectionId to be used for the authenticate request. @@ -715,7 +720,8 @@ export class SeedlessOnboardingController extends BaseController< } /** - * @description Serialize the encryption key and authentication key pair. + * Serialize the encryption key and authentication key pair. + * * @param encKey - The encryption key to serialize. * @param authKeyPair - The authentication key pair to serialize. * @returns The serialized encryption key and authentication key pair. diff --git a/packages/seedless-onboarding-controller/src/types.ts b/packages/seedless-onboarding-controller/src/types.ts index 146026a800..6679565fdc 100644 --- a/packages/seedless-onboarding-controller/src/types.ts +++ b/packages/seedless-onboarding-controller/src/types.ts @@ -57,7 +57,7 @@ export type SeedlessOnboardingControllerMessenger = RestrictedMessenger< >; /** - * @description Encryptor interface for encrypting and decrypting seedless onboarding vault. + * Encryptor interface for encrypting and decrypting seedless onboarding vault. */ export type Encryptor = { /** @@ -89,12 +89,13 @@ export type SeedlessOnboardingControllerOptions = { messenger: SeedlessOnboardingControllerMessenger; /** - * @description Initial state to set on this controller. + * Initial state to set on this controller. */ state?: SeedlessOnboardingControllerState; /** - * @description Encryptor to use for encrypting and decrypting seedless onboarding vault. + * Encryptor to use for encrypting and decrypting seedless onboarding vault. + * * @default browser-passworder @link https://github.com/MetaMask/browser-passworder */ encryptor?: Encryptor; @@ -115,7 +116,7 @@ export type MutuallyExclusiveCallback = ({ }) => Promise; /** - * @description The structure of the data which is serialized and stored in the vault. + * The structure of the data which is serialized and stored in the vault. */ export type VaultData = { /** From 79ace98a439c91dcb922f5f8817b428adc011f45 Mon Sep 17 00:00:00 2001 From: lwin Date: Fri, 18 Apr 2025 16:03:08 +0800 Subject: [PATCH 032/147] chore: removed commented methods --- .../src/SeedlessOnboardingController.ts | 35 ------------------- 1 file changed, 35 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index 53fc3557a8..d46f1e6e63 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -232,41 +232,6 @@ export class SeedlessOnboardingController extends BaseController< ); } - // /** - // * Add array of new seed phrase backups to the metadata store in batch. - // * - // * @param seedPhrases - The seed phrases to backup. - // * @param password - The password used to create new wallet and seedphrase - // * @returns A promise that resolves to the success of the operation. - // */ - // async batchAddSeedPhraseBackups(seedPhrases: Uint8Array[], password: string) { - // const { toprfEncryptionKey, toprfAuthKeyPair } = - // await this.#verifyPassword(password); - - // // prepare seed phrase metadata - // const seedPhraseMetadataArr = - // SeedPhraseMetadata.fromBatchSeedPhrases(seedPhrases); - - // try { - // // encrypt and store the seed phrase backups - // await this.#withPersistedSeedPhraseBackupsState(async () => { - // await this.toprfClient.batchAddSecretDataItems({ - // secretData: seedPhraseMetadataArr.map((metadata) => - // metadata.toBytes(), - // ), - // encKey: toprfEncryptionKey, - // authKeyPair: toprfAuthKeyPair, - // }); - // return seedPhrases; - // }); - // } catch (error) { - // log('Error encrypting and storing seed phrase backups', error); - // throw new Error( - // SeedlessOnboardingControllerError.FailedToEncryptAndStoreSeedPhraseBackup, - // ); - // } - // } - /** * Fetches all encrypted seed phrases and metadata for user's account from the metadata store. * From 1dd4792cb9c738056f2cabd4d9255bee2048055a Mon Sep 17 00:00:00 2001 From: lwin Date: Fri, 18 Apr 2025 16:06:31 +0800 Subject: [PATCH 033/147] fix: redefined the ControllerMessenger actions and event lists --- .../seedless-onboarding-controller/src/index.ts | 2 +- .../seedless-onboarding-controller/src/types.ts | 16 ++++++++++------ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/index.ts b/packages/seedless-onboarding-controller/src/index.ts index 6b839b55c9..8bf488f609 100644 --- a/packages/seedless-onboarding-controller/src/index.ts +++ b/packages/seedless-onboarding-controller/src/index.ts @@ -3,7 +3,7 @@ export type { SeedlessOnboardingControllerState, SeedlessOnboardingControllerOptions, SeedlessOnboardingControllerMessenger, - SeedlessOnboardingControllerGetStateActions, + SeedlessOnboardingControllerGetStateAction, SeedlessOnboardingControllerStateChangeEvent, SeedlessOnboardingControllerActions, SeedlessOnboardingControllerEvents, diff --git a/packages/seedless-onboarding-controller/src/types.ts b/packages/seedless-onboarding-controller/src/types.ts index 6679565fdc..a3ac083997 100644 --- a/packages/seedless-onboarding-controller/src/types.ts +++ b/packages/seedless-onboarding-controller/src/types.ts @@ -30,13 +30,15 @@ export type SeedlessOnboardingControllerState = { }; // Actions -export type SeedlessOnboardingControllerGetStateActions = +export type SeedlessOnboardingControllerGetStateAction = ControllerGetStateAction< typeof controllerName, SeedlessOnboardingControllerState >; export type SeedlessOnboardingControllerActions = - SeedlessOnboardingControllerGetStateActions; + SeedlessOnboardingControllerGetStateAction; + +export type AllowedActions = never; // Events export type SeedlessOnboardingControllerStateChangeEvent = @@ -47,13 +49,15 @@ export type SeedlessOnboardingControllerStateChangeEvent = export type SeedlessOnboardingControllerEvents = SeedlessOnboardingControllerStateChangeEvent; +export type AllowedEvents = never; + // Messenger export type SeedlessOnboardingControllerMessenger = RestrictedMessenger< typeof controllerName, - SeedlessOnboardingControllerActions, - SeedlessOnboardingControllerEvents, - SeedlessOnboardingControllerActions['type'], - SeedlessOnboardingControllerEvents['type'] + SeedlessOnboardingControllerActions | AllowedActions, + SeedlessOnboardingControllerEvents | AllowedEvents, + AllowedActions['type'], + AllowedEvents['type'] >; /** From aef4e8ac9f4c7c0a36ac2489ad59ca5d7038ae58 Mon Sep 17 00:00:00 2001 From: lwin Date: Fri, 18 Apr 2025 16:08:50 +0800 Subject: [PATCH 034/147] chore: updated comments and state in SeedlessOnobardingControllerOptions --- packages/seedless-onboarding-controller/src/types.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/seedless-onboarding-controller/src/types.ts b/packages/seedless-onboarding-controller/src/types.ts index a3ac083997..bb08a8d7fd 100644 --- a/packages/seedless-onboarding-controller/src/types.ts +++ b/packages/seedless-onboarding-controller/src/types.ts @@ -95,7 +95,7 @@ export type SeedlessOnboardingControllerOptions = { /** * Initial state to set on this controller. */ - state?: SeedlessOnboardingControllerState; + state?: Partial; /** * Encryptor to use for encrypting and decrypting seedless onboarding vault. @@ -104,6 +104,11 @@ export type SeedlessOnboardingControllerOptions = { */ encryptor?: Encryptor; + /** + * Type of Web3Auth network to be used for the Seedless Onboarding flow. + * + * @default Web3AuthNetwork.Mainnet + */ network?: Web3AuthNetwork; }; From 6457e0627bbbf5756cb766b6b53dc641e5fffeac Mon Sep 17 00:00:00 2001 From: lwin Date: Fri, 18 Apr 2025 16:11:47 +0800 Subject: [PATCH 035/147] chore: removed unused packages --- packages/seedless-onboarding-controller/package.json | 3 --- yarn.lock | 3 --- 2 files changed, 6 deletions(-) diff --git a/packages/seedless-onboarding-controller/package.json b/packages/seedless-onboarding-controller/package.json index 069b478f97..eeea9a4866 100644 --- a/packages/seedless-onboarding-controller/package.json +++ b/packages/seedless-onboarding-controller/package.json @@ -56,9 +56,6 @@ }, "devDependencies": { "@metamask/auto-changelog": "^3.4.4", - "@noble/ciphers": "^0.5.2", - "@noble/curves": "^1.2.0", - "@noble/hashes": "^1.4.0", "@types/elliptic": "^6", "@types/jest": "^27.4.1", "deepmerge": "^4.2.2", diff --git a/yarn.lock b/yarn.lock index b32f83a617..a05885bb68 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4259,9 +4259,6 @@ __metadata: "@metamask/browser-passworder": "npm:^4.3.0" "@metamask/toprf-secure-backup": ./toprf-secure-backup.tgz "@metamask/utils": "npm:^11.2.0" - "@noble/ciphers": "npm:^0.5.2" - "@noble/curves": "npm:^1.2.0" - "@noble/hashes": "npm:^1.4.0" "@types/elliptic": "npm:^6" "@types/jest": "npm:^27.4.1" async-mutex: "npm:^0.5.0" From 5793bba63e7be8559fefdc37ce1c3ce46ffbd33e Mon Sep 17 00:00:00 2001 From: lwin Date: Fri, 18 Apr 2025 16:20:33 +0800 Subject: [PATCH 036/147] chore: renamed and add comments on VaultEncryptor --- .../src/SeedlessOnboardingController.ts | 23 +++++++++++-------- .../src/types.ts | 4 ++-- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index d46f1e6e63..e376167d55 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -26,7 +26,7 @@ import { RecoveryError } from './errors'; import { projectLogger, createModuleLogger } from './logger'; import { SeedPhraseMetadata } from './SeedPhraseMetadata'; import type { - Encryptor, + VaultEncryptor, MutuallyExclusiveCallback, SeedlessOnboardingControllerMessenger, SeedlessOnboardingControllerOptions, @@ -75,19 +75,25 @@ export class SeedlessOnboardingController extends BaseController< SeedlessOnboardingControllerState, SeedlessOnboardingControllerMessenger > { - readonly #vaultEncryptor: Encryptor = { - encrypt, - decrypt, - }; + readonly #vaultEncryptor: VaultEncryptor; readonly #vaultOperationMutex = new Mutex(); readonly toprfClient: ToprfSecureBackup; + /** + * Creates a new SeedlessOnboardingController instance. + * + * @param options - The options for the SeedlessOnboardingController. + * @param options.messenger - A restricted messenger. + * @param options.state - Initial state to set on this controller. + * @param options.encryptor - An optional encryptor to use for encrypting and decrypting seedless onboarding vault. + * @param options.network - The network to be used for the Seedless Onboarding flow. + */ constructor({ messenger, state, - encryptor, + encryptor = { encrypt, decrypt }, // default to `encrypt` and `decrypt` from `@metamask/browser-passworder` network = Web3AuthNetwork.Mainnet, }: SeedlessOnboardingControllerOptions) { super({ @@ -100,10 +106,7 @@ export class SeedlessOnboardingController extends BaseController< messenger, }); - if (encryptor) { - this.#vaultEncryptor = encryptor; - } - + this.#vaultEncryptor = encryptor; this.toprfClient = new ToprfSecureBackup({ network, }); diff --git a/packages/seedless-onboarding-controller/src/types.ts b/packages/seedless-onboarding-controller/src/types.ts index bb08a8d7fd..db037e9d9d 100644 --- a/packages/seedless-onboarding-controller/src/types.ts +++ b/packages/seedless-onboarding-controller/src/types.ts @@ -63,7 +63,7 @@ export type SeedlessOnboardingControllerMessenger = RestrictedMessenger< /** * Encryptor interface for encrypting and decrypting seedless onboarding vault. */ -export type Encryptor = { +export type VaultEncryptor = { /** * Encrypts the given object with the given password. * @@ -102,7 +102,7 @@ export type SeedlessOnboardingControllerOptions = { * * @default browser-passworder @link https://github.com/MetaMask/browser-passworder */ - encryptor?: Encryptor; + encryptor?: VaultEncryptor; /** * Type of Web3Auth network to be used for the Seedless Onboarding flow. From 432719d994898405a68d7b7071a580858186250a Mon Sep 17 00:00:00 2001 From: Lwin <147362763+lwin-kyaw@users.noreply.github.com> Date: Fri, 18 Apr 2025 16:28:41 +0800 Subject: [PATCH 037/147] fix: updated 'getSeedPhraseBackupHash' implementation Co-authored-by: matthiasgeihs <62935430+matthiasgeihs@users.noreply.github.com> --- .../src/SeedlessOnboardingController.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index e376167d55..b52e0dc274 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -341,9 +341,8 @@ export class SeedlessOnboardingController extends BaseController< * @returns A promise that resolves to the hash of the seed phrase backup. */ getSeedPhraseBackupHash(seedPhrase: Uint8Array): string | undefined { - return this.state.backupHashes.find((hash) => { - return hash === keccak256AndHexify(seedPhrase); - }); + const seedPhraseHash = keccak256AndHexify(seedPhrase); + return this.state.backupHashes.find((hash) => hash === seedPhraseHash); } /** From 3337ea3a24cf5ba0b7dfecfdc4be3e0945b26189 Mon Sep 17 00:00:00 2001 From: lwin Date: Fri, 18 Apr 2025 16:56:20 +0800 Subject: [PATCH 038/147] lint: fixed lint --- packages/seedless-onboarding-controller/package.json | 3 +++ yarn.lock | 3 +++ 2 files changed, 6 insertions(+) diff --git a/packages/seedless-onboarding-controller/package.json b/packages/seedless-onboarding-controller/package.json index eeea9a4866..069b478f97 100644 --- a/packages/seedless-onboarding-controller/package.json +++ b/packages/seedless-onboarding-controller/package.json @@ -56,6 +56,9 @@ }, "devDependencies": { "@metamask/auto-changelog": "^3.4.4", + "@noble/ciphers": "^0.5.2", + "@noble/curves": "^1.2.0", + "@noble/hashes": "^1.4.0", "@types/elliptic": "^6", "@types/jest": "^27.4.1", "deepmerge": "^4.2.2", diff --git a/yarn.lock b/yarn.lock index a05885bb68..b32f83a617 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4259,6 +4259,9 @@ __metadata: "@metamask/browser-passworder": "npm:^4.3.0" "@metamask/toprf-secure-backup": ./toprf-secure-backup.tgz "@metamask/utils": "npm:^11.2.0" + "@noble/ciphers": "npm:^0.5.2" + "@noble/curves": "npm:^1.2.0" + "@noble/hashes": "npm:^1.4.0" "@types/elliptic": "npm:^6" "@types/jest": "npm:^27.4.1" async-mutex: "npm:^0.5.0" From 422c6a63f56dac34eaaf72e7fba5881340cd574c Mon Sep 17 00:00:00 2001 From: Chaitanya Potti Date: Fri, 18 Apr 2025 16:59:46 +0800 Subject: [PATCH 039/147] fix: add comments --- .../src/SeedlessOnboardingController.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index b52e0dc274..f919923d69 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -529,7 +529,9 @@ export class SeedlessOnboardingController extends BaseController< if (!encryptedVault) { throw new Error(SeedlessOnboardingControllerError.VaultError); } - + // Note that vault decryption using the password is a very costly operation as it involves deriving the encryption key + // from the password using an intentionally slow key derivation function. + // We should make sure that we only call it very intentionally. const decryptedVaultData = await this.#vaultEncryptor.decrypt( password, encryptedVault, @@ -658,6 +660,9 @@ export class SeedlessOnboardingController extends BaseController< const updatedState: Partial = {}; + // Note that vault encryption using the password is a very costly operation as it involves deriving the encryption key + // from the password using an intentionally slow key derivation function. + // We should make sure that we only call it very intentionally. updatedState.vault = await this.#vaultEncryptor.encrypt( password, serializedVaultData, From 6487985c93920e1d7fcc95e428eddc0d09004bf7 Mon Sep 17 00:00:00 2001 From: Chaitanya Potti Date: Fri, 18 Apr 2025 17:02:31 +0800 Subject: [PATCH 040/147] Update packages/seedless-onboarding-controller/README.md Co-authored-by: Elliot Winkler --- packages/seedless-onboarding-controller/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/seedless-onboarding-controller/README.md b/packages/seedless-onboarding-controller/README.md index 66f763cf46..3d70b3ace4 100644 --- a/packages/seedless-onboarding-controller/README.md +++ b/packages/seedless-onboarding-controller/README.md @@ -1,6 +1,6 @@ # `@metamask/seedless-onboarding-controller` -Backup and restore SRP +Backup and rehydrate SRP(s) using social login and password ## Installation From b4f51e93d6b7eca4385fab440a2681c670908210 Mon Sep 17 00:00:00 2001 From: Chaitanya Potti Date: Fri, 18 Apr 2025 17:03:07 +0800 Subject: [PATCH 041/147] fix: don't export controller name --- packages/seedless-onboarding-controller/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/seedless-onboarding-controller/src/index.ts b/packages/seedless-onboarding-controller/src/index.ts index 8bf488f609..898bf01f15 100644 --- a/packages/seedless-onboarding-controller/src/index.ts +++ b/packages/seedless-onboarding-controller/src/index.ts @@ -8,5 +8,5 @@ export type { SeedlessOnboardingControllerActions, SeedlessOnboardingControllerEvents, } from './types'; -export { controllerName, Web3AuthNetwork } from './constants'; +export { Web3AuthNetwork } from './constants'; export * from './errors'; From 50b7721ae6b665af2a08a3c3b5dd2f1bf1d4ecde Mon Sep 17 00:00:00 2001 From: lwin Date: Sun, 20 Apr 2025 18:04:05 +0800 Subject: [PATCH 042/147] feat: updated ControllerState with AuthenticatedUserDetails --- .../src/SeedlessOnboardingController.ts | 250 +++++++----------- .../src/constants.ts | 1 + .../src/index.ts | 1 + .../src/types.ts | 42 ++- 4 files changed, 132 insertions(+), 162 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index f919923d69..e8e2897e61 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -32,6 +32,7 @@ import type { SeedlessOnboardingControllerOptions, SeedlessOnboardingControllerState, VaultData, + AuthenticatedUserDetails, } from './types'; const log = createModuleLogger(projectLogger, controllerName); @@ -68,6 +69,18 @@ const seedlessOnboardingMetadata: StateMetadata { state.nodeAuthTokens = authenticationResult.nodeAuthTokens; + state.authConnectionId = authConnectionId; + state.groupedAuthConnectionId = groupedAuthConnectionId; + state.userId = userId; }); return authenticationResult; } catch (error) { @@ -158,28 +175,18 @@ export class SeedlessOnboardingController extends BaseController< /** * Create a new TOPRF encryption key using given password and backups the provided seed phrase. * - * @param params - The parameters for backup seed phrase. - * @param params.authConnectionId - OAuth authConnectionId from dashboard - * @param params.groupedAuthConnectionId - Optional grouped authConnectionId to be used for the authenticate request. - * You can pass this to use aggregate connection. - * @param params.userId - user email or id from Social login - * @param params.password - The password used to create new wallet and seedphrase - * @param params.seedPhrase - The seed phrase to backup + * @param password - The password used to create new wallet and seedphrase + * @param seedPhrase - The seed phrase to backup * @returns A promise that resolves to the encrypted seed phrase and the encryption key. */ - async createToprfKeyAndBackupSeedPhrase({ - authConnectionId, - groupedAuthConnectionId, - userId, - password, - seedPhrase, - }: { - authConnectionId: string; - groupedAuthConnectionId?: string; - userId: string; - password: string; - seedPhrase: Uint8Array; - }): Promise { + async createToprfKeyAndBackupSeedPhrase( + password: string, + seedPhrase: Uint8Array, + ): Promise { + // to make sure that fail fast, + // assert that the user is authenticated before creating the TOPRF key and backing up the seed phrase + this.#assertIsAuthenticatedUser(this.state); + // locally evaluate the encryption key from the password const { encKey, authKeyPair, oprfKey } = this.toprfClient.createLocalKey({ password, @@ -196,14 +203,7 @@ export class SeedlessOnboardingController extends BaseController< // We store the seed phrase metadata in the metadata store first. If this operation fails, // we avoid persisting the encryption key shares to prevent a situation where a user appears // to have an account but with no associated data. - await this.#persistOprfKey({ - groupedAuthConnectionId, - authConnectionId, - userId, - oprfKey, - authPubKey: authKeyPair.pk, - }); - // TODO: store srp hashes or some identifier for srp in array to see if a srp is part of backup + await this.#persistOprfKey(oprfKey, authKeyPair.pk); // create a new vault with the resulting authentication data await this.#createNewVaultWithAuthData({ password, @@ -240,30 +240,14 @@ export class SeedlessOnboardingController extends BaseController< * * Decrypts the seed phrases and returns the decrypted seed phrases using the recovered encryption key from the password. * - * @param params - The parameters for fetching seed phrase metadata. - * @param params.authConnectionId - OAuth authConnectionId from dashboard - * @param params.groupedAuthConnectionId - Optional grouped authConnectionId to be used for the authenticate request. - * You can pass this to use aggregate connection. - * @param params.userId - user email or id from Social login - * @param params.password - The password used to create new wallet and seedphrase + * @param password - The password used to create new wallet and seedphrase * @returns A promise that resolves to the seed phrase metadata. */ - async fetchAllSeedPhrases(params: { - authConnectionId: string; - groupedAuthConnectionId?: string; - userId: string; - password: string; - }): Promise { - const { authConnectionId, groupedAuthConnectionId, userId, password } = - params; - this.#assertIsValidNodeAuthTokens(this.state.nodeAuthTokens); - - const { encKey, authKeyPair } = await this.#recoverEncKey({ - authConnectionId, - groupedAuthConnectionId, - userId, - password, - }); + async fetchAllSeedPhrases(password: string): Promise { + // assert that the user is authenticated before fetching the seed phrases + this.#assertIsAuthenticatedUser(this.state); + + const { encKey, authKeyPair } = await this.#recoverEncKey(password); try { const secretData = await this.toprfClient.fetchAllSecretDataItems({ @@ -297,32 +281,21 @@ export class SeedlessOnboardingController extends BaseController< * * Changing password will also update the encryption key, metadata store and the vault with new encrypted values. * - * @param params - The parameters for updating the password. - * @param params.authConnectionId - OAuth authConnectionId from dashboard - * @param params.groupedAuthConnectionId - Optional grouped authConnectionId to be used for the authenticate request. - * You can pass this to use aggregate connection. - * @param params.userId - user email or id from Social login - * @param params.newPassword - The new password to update. - * @param params.oldPassword - The old password to verify. + * @param newPassword - The new password to update. + * @param oldPassword - The old password to verify. */ - async changePassword(params: { - authConnectionId: string; - groupedAuthConnectionId?: string; - userId: string; - newPassword: string; - oldPassword: string; - }) { + async changePassword(newPassword: string, oldPassword: string) { // verify the old password of the encrypted vault - await this.#unlockVaultWithPassword(params.oldPassword); + await this.#unlockVaultWithPassword(oldPassword); try { // update the encryption key with new password and update the Metadata Store const { encKey: newEncKey, authKeyPair: newAuthKeyPair } = - await this.#changeEncryptionKey(params); + await this.#changeEncryptionKey(newPassword, oldPassword); // update and encrypt the vault with new password await this.#createNewVaultWithAuthData({ - password: params.newPassword, + password: newPassword, rawToprfEncryptionKey: newEncKey, rawToprfAuthKeyPair: newAuthKeyPair, }); @@ -348,32 +321,22 @@ export class SeedlessOnboardingController extends BaseController< /** * Persist the encryption key for the seedless onboarding flow. * - * @param params - The parameters for persisting the encryption key. - * @param params.authConnectionId - OAuth authConnectionId from dashboard - * @param params.groupedAuthConnectionId - Optional grouped authConnectionId to be used for the authenticate request. - * You can pass this to use aggregate connection. - * @param params.userId - user email or id from Social login - * @param params.oprfKey - The OPRF key to be splited and persisted. - * @param params.authPubKey - The authentication public key. + * @param oprfKey - The OPRF key to be splited and persisted. + * @param authPubKey - The authentication public key. * @returns A promise that resolves to the success of the operation. */ - async #persistOprfKey(params: { - authConnectionId: string; - groupedAuthConnectionId?: string; - userId: string; - oprfKey: bigint; - authPubKey: SEC1EncodedPublicKey; - }) { - const { nodeAuthTokens } = this.state; - this.#assertIsValidNodeAuthTokens(nodeAuthTokens); + async #persistOprfKey(oprfKey: bigint, authPubKey: SEC1EncodedPublicKey) { + this.#assertIsAuthenticatedUser(this.state); + const verifier = + this.state.groupedAuthConnectionId || this.state.authConnectionId; try { await this.toprfClient.persistLocalKey({ - nodeAuthTokens, - verifier: params.groupedAuthConnectionId || params.authConnectionId, - verifierId: params.userId, - oprfKey: params.oprfKey, - authPubKey: params.authPubKey, + nodeAuthTokens: this.state.nodeAuthTokens, + verifier, + verifierId: this.state.userId, + oprfKey, + authPubKey, }); } catch (error) { log('Error persisting local encryption key', error); @@ -384,30 +347,21 @@ export class SeedlessOnboardingController extends BaseController< /** * Recover the encryption key from password. * - * @param params - The parameters for recovering the encryption key. - * @param params.authConnectionId - OAuth authConnectionId from dashboard - * @param params.groupedAuthConnectionId - Optional grouped authConnectionId to be used for the authenticate request. - * You can pass this to use aggregate connection. - * @param params.userId - user email or id from Social login - * @param params.password - The password used to derive the encryption key. + * @param password - The password used to derive/recover the encryption key. * @returns A promise that resolves to the encryption key and authentication key pair. * @throws RecoveryError - If failed to recover the encryption key. */ - async #recoverEncKey(params: { - authConnectionId: string; - groupedAuthConnectionId?: string; - userId: string; - password: string; - }) { - const { nodeAuthTokens } = this.state; - this.#assertIsValidNodeAuthTokens(nodeAuthTokens); + async #recoverEncKey(password: string) { + this.#assertIsAuthenticatedUser(this.state); + const verifier = + this.state.groupedAuthConnectionId || this.state.authConnectionId; try { const recoverEncKeyResult = await this.toprfClient.recoverEncKey({ - nodeAuthTokens, - password: params.password, - verifier: params.groupedAuthConnectionId || params.authConnectionId, - verifierId: params.userId, + nodeAuthTokens: this.state.nodeAuthTokens, + password, + verifier, + verifierId: this.state.userId, }); return recoverEncKeyResult; } catch (error) { @@ -418,48 +372,25 @@ export class SeedlessOnboardingController extends BaseController< /** * Update the encryption key with new password and update the Metadata Store with new encryption key. * - * @param params - The parameters for updating the encryption key. - * @param params.authConnectionId - OAuth authConnectionId from dashboard - * @param params.groupedAuthConnectionId - Optional grouped authConnectionId to be used for the authenticate request. - * You can pass this to use aggregate connection. - * @param params.userId - user email or id from Social login - * @param params.newPassword - The new password to update. - * @param params.oldPassword - The old password to verify. + * @param newPassword - The new password to update. + * @param oldPassword - The old password to verify. * @returns A promise that resolves to new encryption key and authentication key pair. */ - async #changeEncryptionKey(params: { - authConnectionId: string; - groupedAuthConnectionId?: string; - userId: string; - newPassword: string; - oldPassword: string; - }) { - const { - authConnectionId, - groupedAuthConnectionId, - userId, - newPassword, - oldPassword, - } = params; - - const { nodeAuthTokens } = this.state; - this.#assertIsValidNodeAuthTokens(nodeAuthTokens); + async #changeEncryptionKey(newPassword: string, oldPassword: string) { + this.#assertIsAuthenticatedUser(this.state); + const verifier = + this.state.groupedAuthConnectionId || this.state.authConnectionId; const { encKey, authKeyPair, keyShareIndex: newKeyShareIndex, - } = await this.#recoverEncKey({ - authConnectionId, - groupedAuthConnectionId, - userId, - password: oldPassword, - }); + } = await this.#recoverEncKey(oldPassword); return await this.toprfClient.changeEncKey({ - nodeAuthTokens, - verifier: groupedAuthConnectionId || authConnectionId, - verifierId: userId, + nodeAuthTokens: this.state.nodeAuthTokens, + verifier, + verifierId: this.state.userId, oldEncKey: encKey, oldAuthKeyPair: authKeyPair, newKeyShareIndex, @@ -481,8 +412,6 @@ export class SeedlessOnboardingController extends BaseController< encKey: Uint8Array, authKeyPair: KeyPair, ): Promise { - this.#assertIsValidNodeAuthTokens(this.state.nodeAuthTokens); - try { const seedPhraseMetadata = new SeedPhraseMetadata(seedPhrase); const secretData = seedPhraseMetadata.toBytes(); @@ -620,8 +549,7 @@ export class SeedlessOnboardingController extends BaseController< rawToprfEncryptionKey: Uint8Array; rawToprfAuthKeyPair: KeyPair; }): Promise { - const { nodeAuthTokens } = this.state; - this.#assertIsValidNodeAuthTokens(nodeAuthTokens); + this.#assertIsAuthenticatedUser(this.state); const { toprfEncryptionKey, toprfAuthKeyPair } = this.#serializeKeyData( rawToprfEncryptionKey, @@ -629,7 +557,7 @@ export class SeedlessOnboardingController extends BaseController< ); const serializedVaultData = JSON.stringify({ - authTokens: nodeAuthTokens, + authTokens: this.state.nodeAuthTokens, toprfEncryptionKey, toprfAuthKeyPair, }); @@ -759,15 +687,37 @@ export class SeedlessOnboardingController extends BaseController< } /** - * Check if the provided value is a valid node auth tokens. + * Assert that the provided value contains valid authenticated user information. * - * @param value - The value to check. - * @throws If the value is not a valid node auth tokens. + * This method checks that the value is an object containing: + * - nodeAuthTokens: A non-empty array of authentication tokens + * - authConnectionId: A string identifier for the OAuth connection + * - groupedAuthConnectionId: A string identifier for grouped OAuth connections + * - userId: A string identifier for the authenticated user + * + * @param value - The value to validate. + * @throws {Error} If the value does not contain valid authenticated user information. */ - #assertIsValidNodeAuthTokens( + #assertIsAuthenticatedUser( value: unknown, - ): asserts value is NodeAuthTokens { - if (!Array.isArray(value) || value.length === 0) { + ): asserts value is AuthenticatedUserDetails { + if ( + !value || + typeof value !== 'object' || + !('authConnectionId' in value) || + typeof value.authConnectionId !== 'string' || + !('userId' in value) || + typeof value.userId !== 'string' + ) { + throw new Error(SeedlessOnboardingControllerError.MissingAuthUserInfo); + } + + if ( + !('nodeAuthTokens' in value) || + typeof value.nodeAuthTokens !== 'object' || + !Array.isArray(value.nodeAuthTokens) || + value.nodeAuthTokens.length < 3 // At least 3 auth tokens are required for Threshold OPRF service + ) { throw new Error(SeedlessOnboardingControllerError.InsufficientAuthToken); } } diff --git a/packages/seedless-onboarding-controller/src/constants.ts b/packages/seedless-onboarding-controller/src/constants.ts index 8b1d6105b4..01ff0136e2 100644 --- a/packages/seedless-onboarding-controller/src/constants.ts +++ b/packages/seedless-onboarding-controller/src/constants.ts @@ -7,6 +7,7 @@ export enum Web3AuthNetwork { export enum SeedlessOnboardingControllerError { AuthenticationError = `${controllerName} - Authentication error`, + MissingAuthUserInfo = `${controllerName} - Missing authenticated user information`, FailedToPersistOprfKey = `${controllerName} - Failed to persist OPRF key`, LoginFailedError = `${controllerName} - Login failed`, InsufficientAuthToken = `${controllerName} - Insufficient auth token`, diff --git a/packages/seedless-onboarding-controller/src/index.ts b/packages/seedless-onboarding-controller/src/index.ts index 898bf01f15..addc694b58 100644 --- a/packages/seedless-onboarding-controller/src/index.ts +++ b/packages/seedless-onboarding-controller/src/index.ts @@ -1,5 +1,6 @@ export { SeedlessOnboardingController } from './SeedlessOnboardingController'; export type { + AuthenticatedUserDetails, SeedlessOnboardingControllerState, SeedlessOnboardingControllerOptions, SeedlessOnboardingControllerMessenger, diff --git a/packages/seedless-onboarding-controller/src/types.ts b/packages/seedless-onboarding-controller/src/types.ts index db037e9d9d..d4535a3d7b 100644 --- a/packages/seedless-onboarding-controller/src/types.ts +++ b/packages/seedless-onboarding-controller/src/types.ts @@ -7,28 +7,46 @@ import type { MutexInterface } from 'async-mutex'; import type { controllerName, Web3AuthNetwork } from './constants'; -// State -export type SeedlessOnboardingControllerState = { - /** - * Encrypted array of serialized keyrings data. - */ - vault?: string; - +export type AuthenticatedUserDetails = { /** * The node auth tokens from OAuth User authentication after the Social login. * * This values are used to authenticate users when they go through the Seedless Onboarding flow. */ - nodeAuthTokens?: NodeAuthTokens; + nodeAuthTokens: NodeAuthTokens; /** - * The hashes of the seed phrase backups. - * - * This is to facilitate the UI to display backup status of the seed phrases. + * OAuth connection id from web3auth dashboard. */ - backupHashes: string[]; + authConnectionId: string; + + /** + * The optional grouped authConnectionId to authenticate the user with Web3Auth network. + */ + groupedAuthConnectionId?: string; + + /** + * The user email or ID from Social login. + */ + userId: string; }; +// State +export type SeedlessOnboardingControllerState = + Partial & { + /** + * Encrypted array of serialized keyrings data. + */ + vault?: string; + + /** + * The hashes of the seed phrase backups. + * + * This is to facilitate the UI to display backup status of the seed phrases. + */ + backupHashes: string[]; + }; + // Actions export type SeedlessOnboardingControllerGetStateAction = ControllerGetStateAction< From b9d5da0da9e75387d988ceb26c96f86b7c3d2dc0 Mon Sep 17 00:00:00 2001 From: lwin Date: Sun, 20 Apr 2025 18:04:19 +0800 Subject: [PATCH 043/147] test: updated tests with new state data --- .../src/SeedlessOnboardingController.test.ts | 568 +++++++++++------- 1 file changed, 344 insertions(+), 224 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts index 4e81ac767f..ec4a734b13 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts @@ -297,6 +297,36 @@ const MOCK_NODE_AUTH_TOKENS = [ }, ]; +/** + * Returns the initial controller state with the optional mock state data. + * + * @param options - The options. + * @param options.withMockAuthenticatedUser - Whether to skip the authenticate method and use the mock authenticated user. + * @param options.vault - The mock vault data. + * @returns The initial controller state with the mock authenticated user. + */ +function getMockInitialControllerState(options?: { + withMockAuthenticatedUser?: boolean; + vault?: string; +}): Partial { + const state: Partial = { + backupHashes: [], + }; + + if (options?.vault) { + state.vault = options.vault; + } + + if (options?.withMockAuthenticatedUser) { + state.nodeAuthTokens = MOCK_NODE_AUTH_TOKENS; + state.authConnectionId = authConnectionId; + state.groupedAuthConnectionId = groupedAuthConnectionId; + state.userId = userId; + } + + return state; +} + const MOCK_SEED_PHRASE = stringToBytes( 'horror pink muffin canal young photo magnet runway start elder patch until', ); @@ -350,6 +380,8 @@ describe('SeedlessOnboardingController', () => { expect(controller.state.nodeAuthTokens).toStrictEqual( MOCK_NODE_AUTH_TOKENS, ); + expect(controller.state.authConnectionId).toBe(authConnectionId); + expect(controller.state.userId).toBe(userId); }); }); @@ -374,6 +406,8 @@ describe('SeedlessOnboardingController', () => { expect(controller.state.nodeAuthTokens).toStrictEqual( MOCK_NODE_AUTH_TOKENS, ); + expect(controller.state.authConnectionId).toBe(authConnectionId); + expect(controller.state.userId).toBe(userId); }); }); @@ -400,6 +434,11 @@ describe('SeedlessOnboardingController', () => { expect(controller.state.nodeAuthTokens).toStrictEqual( MOCK_NODE_AUTH_TOKENS, ); + expect(controller.state.authConnectionId).toBe(authConnectionId); + expect(controller.state.groupedAuthConnectionId).toBe( + groupedAuthConnectionId, + ); + expect(controller.state.userId).toBe(userId); }); }); @@ -433,6 +472,11 @@ describe('SeedlessOnboardingController', () => { ); expect(handleCommitment.isDone()).toBe(true); expect(handleAuthentication.isDone()).toBe(false); + + expect(controller.state.nodeAuthTokens).toBeUndefined(); + expect(controller.state.authConnectionId).toBeUndefined(); + expect(controller.state.groupedAuthConnectionId).toBeUndefined(); + expect(controller.state.userId).toBeUndefined(); }); }); }); @@ -442,7 +486,11 @@ describe('SeedlessOnboardingController', () => { it('should be able to create a seed phrase backup', async () => { await withController( - { state: { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, backupHashes: [] } }, + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + }), + }, async ({ controller, toprfClient, initialState, encryptor }) => { const { encKey, authKeyPair } = mockcreateLocalKey( toprfClient, @@ -453,13 +501,67 @@ describe('SeedlessOnboardingController', () => { jest.spyOn(toprfClient, 'persistLocalKey').mockResolvedValueOnce(); // encrypt and store the secret data const mockSecretDataAdd = handleMockSecretDataAdd(); - await controller.createToprfKeyAndBackupSeedPhrase({ + await controller.createToprfKeyAndBackupSeedPhrase( + MOCK_PASSWORD, + MOCK_SEED_PHRASE, + ); + + expect(mockSecretDataAdd.isDone()).toBe(true); + + expect(controller.state.vault).toBeDefined(); + expect(controller.state.vault).not.toBe(initialState.vault); + expect(controller.state.vault).not.toStrictEqual({}); + + // verify the vault data + const encryptedMockVault = await createMockVault( + encKey, + authKeyPair, + MOCK_PASSWORD, + MOCK_NODE_AUTH_TOKENS, + ); + + const expectedVaultValue = await encryptor.decrypt( + MOCK_PASSWORD, + encryptedMockVault, + ); + const resultedVaultValue = await encryptor.decrypt( + MOCK_PASSWORD, + controller.state.vault as string, + ); + + expect(expectedVaultValue).toStrictEqual(resultedVaultValue); + }, + ); + }); + + it('should be able to create a seed phrase backup without groupedAuthConnectionId', async () => { + await withController( + async ({ controller, toprfClient, encryptor, initialState }) => { + jest.spyOn(toprfClient, 'authenticate').mockResolvedValue({ + nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, + isNewUser: false, + }); + + await controller.authenticate({ + idTokens, authConnectionId, userId, - seedPhrase: MOCK_SEED_PHRASE, - password: MOCK_PASSWORD, }); + const { encKey, authKeyPair } = mockcreateLocalKey( + toprfClient, + MOCK_PASSWORD, + ); + + // persist the local enc key + jest.spyOn(toprfClient, 'persistLocalKey').mockResolvedValueOnce(); + // encrypt and store the secret data + const mockSecretDataAdd = handleMockSecretDataAdd(); + await controller.createToprfKeyAndBackupSeedPhrase( + MOCK_PASSWORD, + MOCK_SEED_PHRASE, + ); + expect(mockSecretDataAdd.isDone()).toBe(true); expect(controller.state.vault).toBeDefined(); @@ -490,19 +592,21 @@ describe('SeedlessOnboardingController', () => { it('should throw an error if create encryption key fails', async () => { await withController( - { state: { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, backupHashes: [] } }, + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + }), + }, async ({ controller, toprfClient, initialState }) => { jest.spyOn(toprfClient, 'createLocalKey').mockImplementation(() => { throw new Error('Failed to create local encryption key'); }); await expect( - controller.createToprfKeyAndBackupSeedPhrase({ - authConnectionId, - userId, - seedPhrase: MOCK_SEED_PHRASE, - password: MOCK_PASSWORD, - }), + controller.createToprfKeyAndBackupSeedPhrase( + MOCK_PASSWORD, + MOCK_SEED_PHRASE, + ), ).rejects.toThrow('Failed to create local encryption key'); // verify vault is not created @@ -511,17 +615,15 @@ describe('SeedlessOnboardingController', () => { ); }); - it('should throw an error if user does not have the AuthToken', async () => { + it('should throw an error if authenticated user information is not found', async () => { await withController(async ({ controller, initialState }) => { await expect( - controller.createToprfKeyAndBackupSeedPhrase({ - authConnectionId, - userId, - seedPhrase: MOCK_SEED_PHRASE, - password: MOCK_PASSWORD, - }), + controller.createToprfKeyAndBackupSeedPhrase( + MOCK_PASSWORD, + MOCK_SEED_PHRASE, + ), ).rejects.toThrow( - SeedlessOnboardingControllerError.InsufficientAuthToken, + SeedlessOnboardingControllerError.MissingAuthUserInfo, ); // verify vault is not created @@ -529,9 +631,32 @@ describe('SeedlessOnboardingController', () => { }); }); + it('should throw an error if user does not have the AuthToken', async () => { + await withController( + { state: { userId, authConnectionId, groupedAuthConnectionId } }, + async ({ controller, initialState }) => { + await expect( + controller.createToprfKeyAndBackupSeedPhrase( + MOCK_PASSWORD, + MOCK_SEED_PHRASE, + ), + ).rejects.toThrow( + SeedlessOnboardingControllerError.InsufficientAuthToken, + ); + + // verify vault is not created + expect(controller.state.vault).toBe(initialState.vault); + }, + ); + }); + it('should throw an error if persistLocalKey fails', async () => { await withController( - { state: { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, backupHashes: [] } }, + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + }), + }, async ({ controller, toprfClient }) => { mockcreateLocalKey(toprfClient, MOCK_PASSWORD); @@ -543,12 +668,10 @@ describe('SeedlessOnboardingController', () => { const mockSecretDataAdd = handleMockSecretDataAdd(); await expect( - controller.createToprfKeyAndBackupSeedPhrase({ - authConnectionId, - userId, - seedPhrase: MOCK_SEED_PHRASE, - password: MOCK_PASSWORD, - }), + controller.createToprfKeyAndBackupSeedPhrase( + MOCK_PASSWORD, + MOCK_SEED_PHRASE, + ), ).rejects.toThrow( SeedlessOnboardingControllerError.FailedToPersistOprfKey, ); @@ -560,7 +683,11 @@ describe('SeedlessOnboardingController', () => { it('should throw an error if failed to create seedphrase backup', async () => { await withController( - { state: { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, backupHashes: [] } }, + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + }), + }, async ({ controller, toprfClient }) => { mockcreateLocalKey(toprfClient, MOCK_PASSWORD); @@ -571,12 +698,10 @@ describe('SeedlessOnboardingController', () => { .mockRejectedValueOnce(new Error('Failed to add secret data item')); await expect( - controller.createToprfKeyAndBackupSeedPhrase({ - authConnectionId, - userId, - seedPhrase: MOCK_SEED_PHRASE, - password: MOCK_PASSWORD, - }), + controller.createToprfKeyAndBackupSeedPhrase( + MOCK_PASSWORD, + MOCK_SEED_PHRASE, + ), ).rejects.toThrow( SeedlessOnboardingControllerError.FailedToEncryptAndStoreSeedPhraseBackup, ); @@ -610,7 +735,7 @@ describe('SeedlessOnboardingController', () => { it('should be able to add a new seed phrase backup', async () => { await withController( - { state: { vault: MOCK_VAULT, backupHashes: [] } }, + { state: getMockInitialControllerState({ vault: MOCK_VAULT }) }, async ({ controller }) => { // encrypt and store the secret data const mockSecretDataAdd = handleMockSecretDataAdd(); @@ -630,7 +755,7 @@ describe('SeedlessOnboardingController', () => { it('should be able to add a new seed phrase backup to the existing seed phrase backups', async () => { await withController( - { state: { vault: MOCK_VAULT, backupHashes: [] } }, + { state: getMockInitialControllerState({ vault: MOCK_VAULT }) }, async ({ controller }) => { // encrypt and store the secret data const mockSecretDataAdd = handleMockSecretDataAdd(); @@ -690,7 +815,11 @@ describe('SeedlessOnboardingController', () => { it('should be able to restore and login with a seed phrase from metadata', async () => { await withController( - { state: { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, backupHashes: [] } }, + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + }), + }, async ({ controller, toprfClient, initialState, encryptor }) => { // fetch and decrypt the secret data const { encKey, authKeyPair } = mockRecoverEncKey( @@ -705,12 +834,8 @@ describe('SeedlessOnboardingController', () => { MOCK_PASSWORD, ), }); - const secretData = await controller.fetchAllSeedPhrases({ - authConnectionId, - userId, - groupedAuthConnectionId, - password: MOCK_PASSWORD, - }); + const secretData = + await controller.fetchAllSeedPhrases(MOCK_PASSWORD); expect(mockSecretDataGet.isDone()).toBe(true); expect(secretData).toBeDefined(); @@ -744,7 +869,11 @@ describe('SeedlessOnboardingController', () => { it('should be able to restore multiple seed phrases from metadata', async () => { await withController( - { state: { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, backupHashes: [] } }, + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + }), + }, async ({ controller, toprfClient, encryptor }) => { // fetch and decrypt the secret data const { encKey, authKeyPair } = mockRecoverEncKey( @@ -759,12 +888,8 @@ describe('SeedlessOnboardingController', () => { MOCK_PASSWORD, ), }); - const secretData = await controller.fetchAllSeedPhrases({ - authConnectionId, - userId, - groupedAuthConnectionId, - password: MOCK_PASSWORD, - }); + const secretData = + await controller.fetchAllSeedPhrases(MOCK_PASSWORD); expect(mockSecretDataGet.isDone()).toBe(true); expect(secretData).toBeDefined(); @@ -801,7 +926,11 @@ describe('SeedlessOnboardingController', () => { it('should be able to overwrite the initial backupHashes', async () => { await withController( - { state: { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, backupHashes: [] } }, + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + }), + }, async ({ controller, toprfClient }) => { const MOCK_SEED_PHRASES = [ stringToBytes('seedPhrase1'), @@ -819,12 +948,7 @@ describe('SeedlessOnboardingController', () => { ), ); - await controller.fetchAllSeedPhrases({ - authConnectionId, - userId, - groupedAuthConnectionId, - password: MOCK_PASSWORD, - }); + await controller.fetchAllSeedPhrases(MOCK_PASSWORD); // sort the seed phrases in descending order to make the first seed phrase the latest item in the array const SORTED_MOCK_SEED_PHRASES = [ @@ -843,9 +967,69 @@ describe('SeedlessOnboardingController', () => { ); }); + it('should be able to restore seed phrase backup without groupedAuthConnectionId', async () => { + await withController( + { + state: { + nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, + userId, + authConnectionId, + }, + }, + async ({ controller, toprfClient, initialState, encryptor }) => { + // fetch and decrypt the secret data + const { encKey, authKeyPair } = mockRecoverEncKey( + toprfClient, + MOCK_PASSWORD, + ); + + const mockSecretDataGet = handleMockSecretDataGet({ + status: 200, + body: createMockSecretDataGetResponse( + [MOCK_SEED_PHRASE], + MOCK_PASSWORD, + ), + }); + const secretData = + await controller.fetchAllSeedPhrases(MOCK_PASSWORD); + + expect(mockSecretDataGet.isDone()).toBe(true); + expect(secretData).toBeDefined(); + expect(secretData).toStrictEqual([MOCK_SEED_PHRASE]); + + expect(controller.state.vault).toBeDefined(); + expect(controller.state.vault).not.toBe(initialState.vault); + expect(controller.state.vault).not.toStrictEqual({}); + + // verify the vault data + const encryptedMockVault = await createMockVault( + encKey, + authKeyPair, + MOCK_PASSWORD, + MOCK_NODE_AUTH_TOKENS, + ); + + const expectedVaultValue = await encryptor.decrypt( + MOCK_PASSWORD, + encryptedMockVault, + ); + const resultedVaultValue = await encryptor.decrypt( + MOCK_PASSWORD, + controller.state.vault as string, + ); + + expect(expectedVaultValue).toStrictEqual(resultedVaultValue); + }, + ); + }); + it('should throw an error if the key recovery failed', async () => { await withController( - { state: { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, backupHashes: [] } }, + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + }), + }, async ({ controller, toprfClient }) => { jest .spyOn(toprfClient, 'recoverEncKey') @@ -854,12 +1038,7 @@ describe('SeedlessOnboardingController', () => { ); await expect( - controller.fetchAllSeedPhrases({ - authConnectionId, - userId, - groupedAuthConnectionId, - password: 'INCORRECT_PASSWORD', - }), + controller.fetchAllSeedPhrases('INCORRECT_PASSWORD'), ).rejects.toThrow(SeedlessOnboardingControllerError.LoginFailedError); }, ); @@ -867,7 +1046,11 @@ describe('SeedlessOnboardingController', () => { it('should throw an error if failed to decrypt the SeedPhraseBackup data', async () => { await withController( - { state: { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, backupHashes: [] } }, + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + }), + }, async ({ controller, toprfClient }) => { mockRecoverEncKey(toprfClient, MOCK_PASSWORD); @@ -876,12 +1059,7 @@ describe('SeedlessOnboardingController', () => { .mockRejectedValueOnce(new Error('Failed to decrypt data')); await expect( - controller.fetchAllSeedPhrases({ - authConnectionId, - userId, - groupedAuthConnectionId, - password: 'INCORRECT_PASSWORD', - }), + controller.fetchAllSeedPhrases('INCORRECT_PASSWORD'), ).rejects.toThrow( SeedlessOnboardingControllerError.FailedToFetchSeedPhraseMetadata, ); @@ -891,7 +1069,11 @@ describe('SeedlessOnboardingController', () => { it('should throw an error if the restored seed phrases are not in the correct shape', async () => { await withController( - { state: { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, backupHashes: [] } }, + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + }), + }, async ({ controller, toprfClient }) => { mockRecoverEncKey(toprfClient, MOCK_PASSWORD); @@ -902,12 +1084,7 @@ describe('SeedlessOnboardingController', () => { stringToBytes(JSON.stringify({ key: 'value' })), ]); await expect( - controller.fetchAllSeedPhrases({ - authConnectionId, - userId, - groupedAuthConnectionId, - password: MOCK_PASSWORD, - }), + controller.fetchAllSeedPhrases(MOCK_PASSWORD), ).rejects.toThrow( SeedlessOnboardingControllerError.InvalidSeedPhraseMetadata, ); @@ -917,7 +1094,11 @@ describe('SeedlessOnboardingController', () => { it('should handle TooManyLoginAttempts error', async () => { await withController( - { state: { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, backupHashes: [] } }, + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + }), + }, async ({ controller, toprfClient }) => { jest.spyOn(toprfClient, 'recoverEncKey').mockRejectedValueOnce( new TOPRFError(1009, 'Rate limit exceeded', { @@ -930,12 +1111,7 @@ describe('SeedlessOnboardingController', () => { ); await expect( - controller.fetchAllSeedPhrases({ - authConnectionId, - userId, - groupedAuthConnectionId, - password: MOCK_PASSWORD, - }), + controller.fetchAllSeedPhrases(MOCK_PASSWORD), ).rejects.toStrictEqual( new RecoveryError( SeedlessOnboardingControllerError.TooManyLoginAttempts, @@ -952,7 +1128,11 @@ describe('SeedlessOnboardingController', () => { it('should handle IncorrectPassword error', async () => { await withController( - { state: { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, backupHashes: [] } }, + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + }), + }, async ({ controller, toprfClient }) => { jest .spyOn(toprfClient, 'recoverEncKey') @@ -961,12 +1141,7 @@ describe('SeedlessOnboardingController', () => { ); await expect( - controller.fetchAllSeedPhrases({ - authConnectionId, - userId, - groupedAuthConnectionId, - password: MOCK_PASSWORD, - }), + controller.fetchAllSeedPhrases(MOCK_PASSWORD), ).rejects.toStrictEqual( new RecoveryError( SeedlessOnboardingControllerError.IncorrectPassword, @@ -978,7 +1153,11 @@ describe('SeedlessOnboardingController', () => { it('should handle Unexpected error during key recovery', async () => { await withController( - { state: { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, backupHashes: [] } }, + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + }), + }, async ({ controller, toprfClient }) => { jest .spyOn(toprfClient, 'recoverEncKey') @@ -987,12 +1166,7 @@ describe('SeedlessOnboardingController', () => { ); await expect( - controller.fetchAllSeedPhrases({ - authConnectionId, - userId, - groupedAuthConnectionId, - password: MOCK_PASSWORD, - }), + controller.fetchAllSeedPhrases(MOCK_PASSWORD), ).rejects.toStrictEqual( new RecoveryError( SeedlessOnboardingControllerError.LoginFailedError, @@ -1010,7 +1184,11 @@ describe('SeedlessOnboardingController', () => { it('should be able to update new password', async () => { await withController( - { state: { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, backupHashes: [] } }, + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + }), + }, async ({ controller, toprfClient }) => { mockcreateLocalKey(toprfClient, MOCK_PASSWORD); @@ -1018,13 +1196,10 @@ describe('SeedlessOnboardingController', () => { jest.spyOn(toprfClient, 'persistLocalKey').mockResolvedValueOnce(); // encrypt and store the secret data handleMockSecretDataAdd(); - await controller.createToprfKeyAndBackupSeedPhrase({ - authConnectionId, - userId, - groupedAuthConnectionId, - seedPhrase: MOCK_SEED_PHRASE, - password: MOCK_PASSWORD, - }); + await controller.createToprfKeyAndBackupSeedPhrase( + MOCK_PASSWORD, + MOCK_SEED_PHRASE, + ); // verify the vault data before update password expect(controller.state.vault).toBeDefined(); @@ -1044,13 +1219,7 @@ describe('SeedlessOnboardingController', () => { const { encKey: newEncKey, authKeyPair: newAuthKeyPair } = mockChangeEncKey(toprfClient, NEW_MOCK_PASSWORD); - await controller.changePassword({ - authConnectionId, - userId, - groupedAuthConnectionId, - newPassword: NEW_MOCK_PASSWORD, - oldPassword: MOCK_PASSWORD, - }); + await controller.changePassword(NEW_MOCK_PASSWORD, MOCK_PASSWORD); // verify the vault after update password const vaultAfterUpdatePassword = controller.state.vault; @@ -1081,7 +1250,13 @@ describe('SeedlessOnboardingController', () => { it('should be able to update new password without groupedAuthConnectionId', async () => { await withController( - { state: { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, backupHashes: [] } }, + { + state: { + nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, + userId, + authConnectionId, + }, + }, async ({ controller, toprfClient }) => { mockcreateLocalKey(toprfClient, MOCK_PASSWORD); @@ -1089,12 +1264,10 @@ describe('SeedlessOnboardingController', () => { jest.spyOn(toprfClient, 'persistLocalKey').mockResolvedValueOnce(); // encrypt and store the secret data handleMockSecretDataAdd(); - await controller.createToprfKeyAndBackupSeedPhrase({ - authConnectionId, - userId, - seedPhrase: MOCK_SEED_PHRASE, - password: MOCK_PASSWORD, - }); + await controller.createToprfKeyAndBackupSeedPhrase( + MOCK_PASSWORD, + MOCK_SEED_PHRASE, + ); // verify the vault data before update password expect(controller.state.vault).toBeDefined(); @@ -1114,12 +1287,7 @@ describe('SeedlessOnboardingController', () => { const { encKey: newEncKey, authKeyPair: newAuthKeyPair } = mockChangeEncKey(toprfClient, NEW_MOCK_PASSWORD); - await controller.changePassword({ - authConnectionId, - userId, - newPassword: NEW_MOCK_PASSWORD, - oldPassword: MOCK_PASSWORD, - }); + await controller.changePassword(NEW_MOCK_PASSWORD, MOCK_PASSWORD); // verify the vault after update password const vaultAfterUpdatePassword = controller.state.vault; @@ -1150,16 +1318,14 @@ describe('SeedlessOnboardingController', () => { it('should throw an error if vault is missing', async () => { await withController( - { state: { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, backupHashes: [] } }, + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + }), + }, async ({ controller }) => { await expect( - controller.changePassword({ - authConnectionId, - userId, - groupedAuthConnectionId, - newPassword: NEW_MOCK_PASSWORD, - oldPassword: MOCK_PASSWORD, - }), + controller.changePassword(NEW_MOCK_PASSWORD, MOCK_PASSWORD), ).rejects.toThrow(SeedlessOnboardingControllerError.VaultError); }, ); @@ -1168,24 +1334,14 @@ describe('SeedlessOnboardingController', () => { it('should throw an error if failed to parse vault data', async () => { await withController( { - state: { - nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, - vault: '{ "foo": "bar"', - backupHashes: [], - }, + state: getMockInitialControllerState({ vault: '{ "foo": "bar"' }), }, async ({ controller, encryptor }) => { jest .spyOn(encryptor, 'decrypt') .mockResolvedValueOnce('{ "foo": "bar"'); await expect( - controller.changePassword({ - authConnectionId, - userId, - groupedAuthConnectionId, - newPassword: NEW_MOCK_PASSWORD, - oldPassword: MOCK_PASSWORD, - }), + controller.changePassword(NEW_MOCK_PASSWORD, MOCK_PASSWORD), ).rejects.toThrow(SeedlessOnboardingControllerError.InvalidVaultData); }, ); @@ -1194,35 +1350,22 @@ describe('SeedlessOnboardingController', () => { it('should throw an error if vault unlocked has an unexpected shape', async () => { await withController( { - state: { - nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, + state: getMockInitialControllerState({ vault: MOCK_VAULT, - backupHashes: [], - }, + withMockAuthenticatedUser: true, + }), }, async ({ controller, encryptor }) => { jest .spyOn(encryptor, 'decrypt') .mockResolvedValueOnce({ foo: 'bar' }); await expect( - controller.changePassword({ - authConnectionId, - userId, - groupedAuthConnectionId, - newPassword: NEW_MOCK_PASSWORD, - oldPassword: MOCK_PASSWORD, - }), + controller.changePassword(NEW_MOCK_PASSWORD, MOCK_PASSWORD), ).rejects.toThrow(SeedlessOnboardingControllerError.InvalidVaultData); jest.spyOn(encryptor, 'decrypt').mockResolvedValueOnce('null'); await expect( - controller.changePassword({ - authConnectionId, - userId, - groupedAuthConnectionId, - newPassword: NEW_MOCK_PASSWORD, - oldPassword: MOCK_PASSWORD, - }), + controller.changePassword(NEW_MOCK_PASSWORD, MOCK_PASSWORD), ).rejects.toThrow(SeedlessOnboardingControllerError.VaultDataError); }, ); @@ -1231,22 +1374,15 @@ describe('SeedlessOnboardingController', () => { it('should throw an error if vault unlocked has invalid authentication data', async () => { await withController( { - state: { - nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, + state: getMockInitialControllerState({ vault: MOCK_VAULT, - backupHashes: [], - }, + withMockAuthenticatedUser: true, + }), }, async ({ controller, encryptor }) => { jest.spyOn(encryptor, 'decrypt').mockResolvedValueOnce(MOCK_VAULT); await expect( - controller.changePassword({ - authConnectionId, - userId, - groupedAuthConnectionId, - newPassword: NEW_MOCK_PASSWORD, - oldPassword: MOCK_PASSWORD, - }), + controller.changePassword(NEW_MOCK_PASSWORD, MOCK_PASSWORD), ).rejects.toThrow(SeedlessOnboardingControllerError.VaultDataError); }, ); @@ -1255,24 +1391,17 @@ describe('SeedlessOnboardingController', () => { it('should throw an error if the old password is incorrect', async () => { await withController( { - state: { - nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, + state: getMockInitialControllerState({ vault: MOCK_VAULT, - backupHashes: [], - }, + withMockAuthenticatedUser: true, + }), }, async ({ controller, encryptor }) => { jest .spyOn(encryptor, 'decrypt') .mockRejectedValueOnce(new Error('Incorrect password')); await expect( - controller.changePassword({ - authConnectionId, - userId, - groupedAuthConnectionId, - newPassword: NEW_MOCK_PASSWORD, - oldPassword: 'INCORRECT_PASSWORD', - }), + controller.changePassword(NEW_MOCK_PASSWORD, 'INCORRECT_PASSWORD'), ).rejects.toThrow('Incorrect password'); }, ); @@ -1280,7 +1409,11 @@ describe('SeedlessOnboardingController', () => { it('should throw an error if failed to change password', async () => { await withController( - { state: { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, backupHashes: [] } }, + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + }), + }, async ({ controller, toprfClient }) => { mockcreateLocalKey(toprfClient, MOCK_PASSWORD); @@ -1288,13 +1421,10 @@ describe('SeedlessOnboardingController', () => { jest.spyOn(toprfClient, 'persistLocalKey').mockResolvedValueOnce(); // encrypt and store the secret data handleMockSecretDataAdd(); - await controller.createToprfKeyAndBackupSeedPhrase({ - authConnectionId, - userId, - groupedAuthConnectionId, - seedPhrase: MOCK_SEED_PHRASE, - password: MOCK_PASSWORD, - }); + await controller.createToprfKeyAndBackupSeedPhrase( + MOCK_PASSWORD, + MOCK_SEED_PHRASE, + ); // mock the recover enc key mockRecoverEncKey(toprfClient, MOCK_PASSWORD); @@ -1306,13 +1436,7 @@ describe('SeedlessOnboardingController', () => { ); await expect( - controller.changePassword({ - authConnectionId, - userId, - groupedAuthConnectionId, - newPassword: NEW_MOCK_PASSWORD, - oldPassword: MOCK_PASSWORD, - }), + controller.changePassword(NEW_MOCK_PASSWORD, MOCK_PASSWORD), ).rejects.toThrow( SeedlessOnboardingControllerError.FailedToChangePassword, ); @@ -1326,7 +1450,11 @@ describe('SeedlessOnboardingController', () => { it('should not create a vault if the user does not have encrypted seed phrase metadata', async () => { await withController( - { state: { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, backupHashes: [] } }, + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + }), + }, async ({ controller, initialState, toprfClient }) => { expect(initialState.vault).toBeUndefined(); @@ -1339,12 +1467,7 @@ describe('SeedlessOnboardingController', () => { data: [], }, }); - await controller.fetchAllSeedPhrases({ - authConnectionId, - userId, - groupedAuthConnectionId, - password: MOCK_PASSWORD, - }); + await controller.fetchAllSeedPhrases(MOCK_PASSWORD); expect(mockSecretDataGet.isDone()).toBe(true); expect(controller.state.vault).toBeUndefined(); @@ -1355,7 +1478,11 @@ describe('SeedlessOnboardingController', () => { it('should throw an error if the password is an empty string', async () => { await withController( - { state: { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, backupHashes: [] } }, + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + }), + }, async ({ controller, toprfClient }) => { // create the local enc key mockcreateLocalKey(toprfClient, MOCK_PASSWORD); @@ -1364,13 +1491,7 @@ describe('SeedlessOnboardingController', () => { // mock the secret data add const mockSecretDataAdd = handleMockSecretDataAdd(); await expect( - controller.createToprfKeyAndBackupSeedPhrase({ - authConnectionId, - userId, - groupedAuthConnectionId, - password: '', - seedPhrase: MOCK_SEED_PHRASE, - }), + controller.createToprfKeyAndBackupSeedPhrase('', MOCK_SEED_PHRASE), ).rejects.toThrow( SeedlessOnboardingControllerError.InvalidEmptyPassword, ); @@ -1382,7 +1503,11 @@ describe('SeedlessOnboardingController', () => { it('should throw an error if the passowrd is of wrong type', async () => { await withController( - { state: { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, backupHashes: [] } }, + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + }), + }, async ({ controller, toprfClient }) => { // create the local enc key mockcreateLocalKey(toprfClient, MOCK_PASSWORD); @@ -1391,13 +1516,8 @@ describe('SeedlessOnboardingController', () => { // mock the secret data add const mockSecretDataAdd = handleMockSecretDataAdd(); await expect( - controller.createToprfKeyAndBackupSeedPhrase({ - verifier: authConnectionId, - verifierId: userId, - // @ts-expect-error Intentionally passing wrong password type - password: 123, - seedPhrase: MOCK_SEED_PHRASE, - }), + // @ts-expect-error Intentionally passing wrong password type + controller.createToprfKeyAndBackupSeedPhrase(123, MOCK_SEED_PHRASE), ).rejects.toThrow( SeedlessOnboardingControllerError.WrongPasswordType, ); From ddbcf04877ea8e52d9036151ec3db5475fb9b8a9 Mon Sep 17 00:00:00 2001 From: lwin Date: Sun, 20 Apr 2025 18:55:33 +0800 Subject: [PATCH 044/147] fix: export 'SeedlessOnboardingControllerError' --- packages/seedless-onboarding-controller/src/index.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/seedless-onboarding-controller/src/index.ts b/packages/seedless-onboarding-controller/src/index.ts index addc694b58..20eabd1b4a 100644 --- a/packages/seedless-onboarding-controller/src/index.ts +++ b/packages/seedless-onboarding-controller/src/index.ts @@ -9,5 +9,8 @@ export type { SeedlessOnboardingControllerActions, SeedlessOnboardingControllerEvents, } from './types'; -export { Web3AuthNetwork } from './constants'; +export { + Web3AuthNetwork, + SeedlessOnboardingControllerError, +} from './constants'; export * from './errors'; From 055a4f5df2123c46c1628283a7ff6a69972213f8 Mon Sep 17 00:00:00 2001 From: lwin Date: Mon, 21 Apr 2025 16:36:47 +0800 Subject: [PATCH 045/147] fix: export 'getDefaultSeedlessOnboardingControllerState' --- packages/seedless-onboarding-controller/src/index.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/seedless-onboarding-controller/src/index.ts b/packages/seedless-onboarding-controller/src/index.ts index 20eabd1b4a..45ace53783 100644 --- a/packages/seedless-onboarding-controller/src/index.ts +++ b/packages/seedless-onboarding-controller/src/index.ts @@ -1,4 +1,7 @@ -export { SeedlessOnboardingController } from './SeedlessOnboardingController'; +export { + SeedlessOnboardingController, + getDefaultSeedlessOnboardingControllerState, +} from './SeedlessOnboardingController'; export type { AuthenticatedUserDetails, SeedlessOnboardingControllerState, From 52646a9874da61d0e9d9f047cdbace05577c212c Mon Sep 17 00:00:00 2001 From: lwin Date: Tue, 22 Apr 2025 12:38:17 +0800 Subject: [PATCH 046/147] fix: removed 'addNewSrpBackup' method --- .../src/SeedlessOnboardingController.test.ts | 110 ++---------------- .../src/SeedlessOnboardingController.ts | 23 ---- 2 files changed, 10 insertions(+), 123 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts index ec4a734b13..dd4f6d46b1 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts @@ -530,6 +530,11 @@ describe('SeedlessOnboardingController', () => { ); expect(expectedVaultValue).toStrictEqual(resultedVaultValue); + + // should be able to get the hash of the seed phrase backup from the state + expect( + controller.getSeedPhraseBackupHash(MOCK_SEED_PHRASE), + ).toBeDefined(); }, ); }); @@ -586,6 +591,11 @@ describe('SeedlessOnboardingController', () => { ); expect(expectedVaultValue).toStrictEqual(resultedVaultValue); + + // should be able to get the hash of the seed phrase backup from the state + expect( + controller.getSeedPhraseBackupHash(MOCK_SEED_PHRASE), + ).toBeDefined(); }, ); }); @@ -710,106 +720,6 @@ describe('SeedlessOnboardingController', () => { }); }); - describe('addNewSeedPhraseBackup', () => { - const MOCK_PASSWORD = 'mock-password'; - const NEW_SEED_PHRASE_1 = 'new mock seed phrase 1'; - const NEW_SEED_PHRASE_2 = 'new mock seed phrase 2'; - const NEW_SEED_PHRASE_3 = 'new mock seed phrase 3'; - let MOCK_VAULT = ''; - - beforeEach(async () => { - const mockToprfEncryptor = createMockToprfEncryptor(); - - const MOCK_ENCRYPTION_KEY = - mockToprfEncryptor.deriveEncKey(MOCK_PASSWORD); - const MOCK_AUTH_KEY_PAIR = - mockToprfEncryptor.deriveAuthKeyPair(MOCK_PASSWORD); - - MOCK_VAULT = await createMockVault( - MOCK_ENCRYPTION_KEY, - MOCK_AUTH_KEY_PAIR, - MOCK_PASSWORD, - MOCK_NODE_AUTH_TOKENS, - ); - }); - - it('should be able to add a new seed phrase backup', async () => { - await withController( - { state: getMockInitialControllerState({ vault: MOCK_VAULT }) }, - async ({ controller }) => { - // encrypt and store the secret data - const mockSecretDataAdd = handleMockSecretDataAdd(); - await controller.addNewSeedPhraseBackup( - stringToBytes(NEW_SEED_PHRASE_1), - MOCK_PASSWORD, - ); - - expect(mockSecretDataAdd.isDone()).toBe(true); - expect(controller.state.nodeAuthTokens).toBeDefined(); - expect(controller.state.nodeAuthTokens).toStrictEqual( - MOCK_NODE_AUTH_TOKENS, - ); - }, - ); - }); - - it('should be able to add a new seed phrase backup to the existing seed phrase backups', async () => { - await withController( - { state: getMockInitialControllerState({ vault: MOCK_VAULT }) }, - async ({ controller }) => { - // encrypt and store the secret data - const mockSecretDataAdd = handleMockSecretDataAdd(); - await controller.addNewSeedPhraseBackup( - stringToBytes(NEW_SEED_PHRASE_1), - MOCK_PASSWORD, - ); - - expect(mockSecretDataAdd.isDone()).toBe(true); - expect(controller.state.nodeAuthTokens).toBeDefined(); - expect(controller.state.nodeAuthTokens).toStrictEqual( - MOCK_NODE_AUTH_TOKENS, - ); - expect(controller.state.backupHashes).toStrictEqual([ - keccak256AndHexify(stringToBytes(NEW_SEED_PHRASE_1)), - ]); - - // add another seed phrase backup - const mockSecretDataAdd2 = handleMockSecretDataAdd(); - await controller.addNewSeedPhraseBackup( - stringToBytes(NEW_SEED_PHRASE_2), - MOCK_PASSWORD, - ); - - expect(mockSecretDataAdd2.isDone()).toBe(true); - expect(controller.state.nodeAuthTokens).toBeDefined(); - expect(controller.state.nodeAuthTokens).toStrictEqual( - MOCK_NODE_AUTH_TOKENS, - ); - - const { backupHashes } = controller.state; - expect(backupHashes).toStrictEqual([ - keccak256AndHexify(stringToBytes(NEW_SEED_PHRASE_1)), - keccak256AndHexify(stringToBytes(NEW_SEED_PHRASE_2)), - ]); - - // should be able to get the hash of the seed phrase backup from the state - expect( - controller.getSeedPhraseBackupHash( - stringToBytes(NEW_SEED_PHRASE_1), - ), - ).toBeDefined(); - - // should return undefined if the seed phrase is not backed up - expect( - controller.getSeedPhraseBackupHash( - stringToBytes(NEW_SEED_PHRASE_3), - ), - ).toBeUndefined(); - }, - ); - }); - }); - describe('fetchAndRestoreSeedPhrase', () => { const MOCK_PASSWORD = 'mock-password'; diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index e8e2897e61..f7de5b1eaa 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -212,29 +212,6 @@ export class SeedlessOnboardingController extends BaseController< }); } - /** - * Add a new seed phrase backup to the metadata store. - * - * @param seedPhrase - The seed phrase to backup. - * @param password - The password used to create new wallet and seedphrase - * @returns A promise that resolves to the success of the operation. - */ - async addNewSeedPhraseBackup( - seedPhrase: Uint8Array, - password: string, // TODO: to verify whether we need the password here, check how multi-srp is handled in the keyring first. - ): Promise { - // verify the password and unlock the vault - const { toprfEncryptionKey, toprfAuthKeyPair } = - await this.#unlockVaultWithPassword(password); - - // encrypt and store the seed phrase backup - await this.#encryptAndStoreSeedPhraseBackup( - seedPhrase, - toprfEncryptionKey, - toprfAuthKeyPair, - ); - } - /** * Fetches all encrypted seed phrases and metadata for user's account from the metadata store. * From 11d65522afde0110ed04d9c91ba3ea00edb0c67b Mon Sep 17 00:00:00 2001 From: lwin Date: Tue, 22 Apr 2025 12:52:47 +0800 Subject: [PATCH 047/147] feat: added 'encryptionKey' and 'encryptionSalt' to state --- .../src/SeedlessOnboardingController.ts | 8 ++++++++ packages/seedless-onboarding-controller/src/types.ts | 11 +++++++++++ 2 files changed, 19 insertions(+) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index f7de5b1eaa..32c1b5a885 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -81,6 +81,14 @@ const seedlessOnboardingMetadata: StateMetadata Date: Tue, 22 Apr 2025 13:08:58 +0800 Subject: [PATCH 048/147] feat: add new private method, 'verifyPassword` to verify password validity --- .../src/SeedlessOnboardingController.ts | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index 32c1b5a885..f617aae3b2 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -102,6 +102,8 @@ export class SeedlessOnboardingController extends BaseController< readonly toprfClient: ToprfSecureBackup; + #password?: string; + /** * Creates a new SeedlessOnboardingController instance. * @@ -271,7 +273,7 @@ export class SeedlessOnboardingController extends BaseController< */ async changePassword(newPassword: string, oldPassword: string) { // verify the old password of the encrypted vault - await this.#unlockVaultWithPassword(oldPassword); + await this.#verifyPassword(oldPassword); try { // update the encryption key with new password and update the Metadata Store @@ -416,11 +418,23 @@ export class SeedlessOnboardingController extends BaseController< } } + /** + * Verify the password validity by decrypting the vault. + * + * @param password - The password to verify. + * @throws {Error} If the password is invalid or the vault is not initialized. + */ + async #verifyPassword(password: string) { + if (!this.state.vault) { + throw new Error(SeedlessOnboardingControllerError.VaultError); + } + await this.#vaultEncryptor.decrypt(password, this.state.vault); + } + /** * Unlocks the encrypted vault using the provided password and returns the decrypted vault data. * This method ensures thread-safety by using a mutex lock when accessing the vault. * - * @param password - The password to decrypt the vault. * @returns A promise that resolves to an object containing: * - nodeAuthTokens: Authentication tokens to communicate with the TOPRF service * - toprfEncryptionKey: The decrypted TOPRF encryption key @@ -431,12 +445,13 @@ export class SeedlessOnboardingController extends BaseController< * - The password is incorrect (from encryptor.decrypt) * - The decrypted vault data is malformed */ - async #unlockVaultWithPassword(password: string): Promise<{ + async #unlockVaultWithPassword(): Promise<{ nodeAuthTokens: NodeAuthTokens; toprfEncryptionKey: Uint8Array; toprfAuthKeyPair: KeyPair; }> { return this.#withVaultLock(async () => { + const password = this.#password; assertIsValidPassword(password); const encryptedVault = this.state.vault; @@ -584,6 +599,8 @@ export class SeedlessOnboardingController extends BaseController< this.update((state) => { state.vault = updatedState.vault; }); + + this.#password = password; }); } From 3aa52baf4eb4e26f50a8e670d0d0080b4c4a5664 Mon Sep 17 00:00:00 2001 From: lwin Date: Tue, 22 Apr 2025 13:33:06 +0800 Subject: [PATCH 049/147] feat: updated vault encryption scheme --- .../src/SeedlessOnboardingController.ts | 96 ++++++++++++++++--- .../src/constants.ts | 2 + .../src/types.ts | 52 ++++++++++ 3 files changed, 135 insertions(+), 15 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index f617aae3b2..e61470bef8 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -1,7 +1,15 @@ import { keccak256AndHexify } from '@metamask/auth-network-utils'; import type { StateMetadata } from '@metamask/base-controller'; import { BaseController } from '@metamask/base-controller'; -import { encrypt, decrypt } from '@metamask/browser-passworder'; +import { + type EncryptionKey, + encrypt, + decrypt, + decryptWithDetail, + encryptWithDetail, + decryptWithKey, + importKey as importKeyBrowserPassworder, +} from '@metamask/browser-passworder'; import type { KeyPair, NodeAuthTokens, @@ -48,6 +56,26 @@ export function getDefaultSeedlessOnboardingControllerState(): SeedlessOnboardin }; } +/** + * Get the default vault encryptor for the Seedless Onboarding Controller. + * + * By default, we'll use the encryption utilities from `@metamask/browser-passworder`. + * + * @returns The default vault encryptor for the Seedless Onboarding Controller. + */ +export function getDefaultSeedlessOnboardingVaultEncryptor(): VaultEncryptor { + return { + encrypt, + encryptWithDetail, + decrypt, + decryptWithDetail, + decryptWithKey, + importKey: (key) => { + return importKeyBrowserPassworder(key) as Promise; + }, + }; +} + /** * Seedless Onboarding Controller State Metadata. * @@ -116,7 +144,7 @@ export class SeedlessOnboardingController extends BaseController< constructor({ messenger, state, - encryptor = { encrypt, decrypt }, // default to `encrypt` and `decrypt` from `@metamask/browser-passworder` + encryptor = getDefaultSeedlessOnboardingVaultEncryptor(), network = Web3AuthNetwork.Mainnet, }: SeedlessOnboardingControllerOptions) { super({ @@ -451,20 +479,52 @@ export class SeedlessOnboardingController extends BaseController< toprfAuthKeyPair: KeyPair; }> { return this.#withVaultLock(async () => { + const { + vault: encryptedVault, + vaultEncryptionKey, + vaultEncryptionSalt, + } = this.state; const password = this.#password; - assertIsValidPassword(password); - const encryptedVault = this.state.vault; if (!encryptedVault) { throw new Error(SeedlessOnboardingControllerError.VaultError); } - // Note that vault decryption using the password is a very costly operation as it involves deriving the encryption key - // from the password using an intentionally slow key derivation function. - // We should make sure that we only call it very intentionally. - const decryptedVaultData = await this.#vaultEncryptor.decrypt( - password, - encryptedVault, - ); + + if (!vaultEncryptionKey || !password) { + throw new Error(SeedlessOnboardingControllerError.MissingCredentials); + } + + let decryptedVaultData: unknown; + + if (vaultEncryptionKey) { + const parsedEncryptedVault = JSON.parse(encryptedVault); + + if (vaultEncryptionSalt !== parsedEncryptedVault.salt) { + throw new Error(SeedlessOnboardingControllerError.ExpiredCredentials); + } + + if (typeof vaultEncryptionKey !== 'string') { + throw new TypeError( + SeedlessOnboardingControllerError.WrongPasswordType, + ); + } + + const key = await this.#vaultEncryptor.importKey(vaultEncryptionKey); + decryptedVaultData = await this.#vaultEncryptor.decryptWithKey( + key, + parsedEncryptedVault, + ); + } else { + assertIsValidPassword(password); + // Note that vault decryption using the password is a very costly operation as it involves deriving the encryption key + // from the password using an intentionally slow key derivation function. + // We should make sure that we only call it very intentionally. + const result = await this.#vaultEncryptor.decryptWithDetail( + password, + encryptedVault, + ); + decryptedVaultData = result.vault; + } const { nodeAuthTokens, toprfEncryptionKey, toprfAuthKeyPair } = this.#parseVaultData(decryptedVaultData); @@ -591,13 +651,19 @@ export class SeedlessOnboardingController extends BaseController< // Note that vault encryption using the password is a very costly operation as it involves deriving the encryption key // from the password using an intentionally slow key derivation function. // We should make sure that we only call it very intentionally. - updatedState.vault = await this.#vaultEncryptor.encrypt( - password, - serializedVaultData, - ); + const { vault, exportedKeyString } = + await this.#vaultEncryptor.encryptWithDetail( + password, + serializedVaultData, + ); + updatedState.vault = vault; + updatedState.vaultEncryptionKey = exportedKeyString; + updatedState.vaultEncryptionSalt = JSON.parse(vault).salt; this.update((state) => { state.vault = updatedState.vault; + state.vaultEncryptionKey = updatedState.vaultEncryptionKey; + state.vaultEncryptionSalt = updatedState.vaultEncryptionSalt; }); this.#password = password; diff --git a/packages/seedless-onboarding-controller/src/constants.ts b/packages/seedless-onboarding-controller/src/constants.ts index 01ff0136e2..56ad52dff7 100644 --- a/packages/seedless-onboarding-controller/src/constants.ts +++ b/packages/seedless-onboarding-controller/src/constants.ts @@ -11,6 +11,8 @@ export enum SeedlessOnboardingControllerError { FailedToPersistOprfKey = `${controllerName} - Failed to persist OPRF key`, LoginFailedError = `${controllerName} - Login failed`, InsufficientAuthToken = `${controllerName} - Insufficient auth token`, + MissingCredentials = `${controllerName} - Cannot unlock vault without password and encryption key`, + ExpiredCredentials = `${controllerName} - Encryption key and salt provided are expired`, InvalidEmptyPassword = `${controllerName} - Password cannot be empty.`, WrongPasswordType = `${controllerName} - Password must be of type string.`, InvalidVaultData = `${controllerName} - Invalid vault data`, diff --git a/packages/seedless-onboarding-controller/src/types.ts b/packages/seedless-onboarding-controller/src/types.ts index 8b7d74cca8..c0d9aa73e3 100644 --- a/packages/seedless-onboarding-controller/src/types.ts +++ b/packages/seedless-onboarding-controller/src/types.ts @@ -1,6 +1,12 @@ import type { RestrictedMessenger } from '@metamask/base-controller'; import type { ControllerGetStateAction } from '@metamask/base-controller'; import type { ControllerStateChangeEvent } from '@metamask/base-controller'; +import type { + DetailedDecryptResult, + DetailedEncryptionResult, + EncryptionKey, + EncryptionResult, +} from '@metamask/browser-passworder'; import type { NodeAuthTokens } from '@metamask/toprf-secure-backup'; import type { Json } from '@metamask/utils'; import type { MutexInterface } from 'async-mutex'; @@ -101,6 +107,20 @@ export type VaultEncryptor = { * @returns The encrypted string. */ encrypt: (password: string, object: Json) => Promise; + /** + * Encrypts the given object with the given password, and returns the + * encryption result and the exported key string. + * + * @param password - The password to encrypt with. + * @param object - The object to encrypt. + * @param salt - The optional salt to use for encryption. + * @returns The encrypted string and the exported key string. + */ + encryptWithDetail: ( + password: string, + object: Json, + salt?: string, + ) => Promise; /** * Decrypts the given encrypted string with the given password. * @@ -109,6 +129,38 @@ export type VaultEncryptor = { * @returns The decrypted object. */ decrypt: (password: string, encryptedString: string) => Promise; + /** + * Decrypts the given encrypted string with the given password, and returns + * the decrypted object and the salt and exported key string used for + * encryption. + * + * @param password - The password to decrypt with. + * @param encryptedString - The encrypted string to decrypt. + * @returns The decrypted object and the salt and exported key string used for + * encryption. + */ + decryptWithDetail: ( + password: string, + encryptedString: string, + ) => Promise; + /** + * Decrypts the given encrypted string with the given encryption key. + * + * @param key - The encryption key to decrypt with. + * @param encryptedString - The encrypted string to decrypt. + * @returns The decrypted object. + */ + decryptWithKey: ( + key: EncryptionKey, + encryptedString: EncryptionResult, + ) => Promise; + /** + * Generates an encryption key from exported key string. + * + * @param key - The exported key string. + * @returns The encryption key. + */ + importKey: (key: string) => Promise; }; /** From 5347ab50a977ea336375cde77feb5ffad5c04135 Mon Sep 17 00:00:00 2001 From: lwin Date: Tue, 22 Apr 2025 13:36:15 +0800 Subject: [PATCH 050/147] feat: add new method 'addNewSeedPhraseBackup' for multi-srp --- .../src/SeedlessOnboardingController.ts | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index e61470bef8..53649cb582 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -250,6 +250,25 @@ export class SeedlessOnboardingController extends BaseController< }); } + /** + * Add a new seed phrase backup to the metadata store. + * + * @param seedPhrase - The seed phrase to backup. + * @returns A promise that resolves to the success of the operation. + */ + async addNewSeedPhraseBackup(seedPhrase: Uint8Array): Promise { + // verify the password and unlock the vault + const { toprfEncryptionKey, toprfAuthKeyPair } = + await this.#unlockVaultAndGetBackupEncKey(); + + // encrypt and store the seed phrase backup + await this.#encryptAndStoreSeedPhraseBackup( + seedPhrase, + toprfEncryptionKey, + toprfAuthKeyPair, + ); + } + /** * Fetches all encrypted seed phrases and metadata for user's account from the metadata store. * @@ -473,7 +492,7 @@ export class SeedlessOnboardingController extends BaseController< * - The password is incorrect (from encryptor.decrypt) * - The decrypted vault data is malformed */ - async #unlockVaultWithPassword(): Promise<{ + async #unlockVaultAndGetBackupEncKey(): Promise<{ nodeAuthTokens: NodeAuthTokens; toprfEncryptionKey: Uint8Array; toprfAuthKeyPair: KeyPair; From 3301236ff7b57bacef2b643716fbf2c48face67e Mon Sep 17 00:00:00 2001 From: lwin Date: Tue, 22 Apr 2025 14:43:42 +0800 Subject: [PATCH 051/147] fix: fixed vaultEncKey and password check --- .../src/SeedlessOnboardingController.ts | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index 53649cb582..66c5505a64 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -70,9 +70,9 @@ export function getDefaultSeedlessOnboardingVaultEncryptor(): VaultEncryptor { decrypt, decryptWithDetail, decryptWithKey, - importKey: (key) => { - return importKeyBrowserPassworder(key) as Promise; - }, + importKey: importKeyBrowserPassworder as ( + key: string, + ) => Promise, }; } @@ -509,13 +509,23 @@ export class SeedlessOnboardingController extends BaseController< throw new Error(SeedlessOnboardingControllerError.VaultError); } - if (!vaultEncryptionKey || !password) { + if (!vaultEncryptionKey && !password) { throw new Error(SeedlessOnboardingControllerError.MissingCredentials); } let decryptedVaultData: unknown; - if (vaultEncryptionKey) { + if (password) { + assertIsValidPassword(password); + // Note that vault decryption using the password is a very costly operation as it involves deriving the encryption key + // from the password using an intentionally slow key derivation function. + // We should make sure that we only call it very intentionally. + const result = await this.#vaultEncryptor.decryptWithDetail( + password, + encryptedVault, + ); + decryptedVaultData = result.vault; + } else { const parsedEncryptedVault = JSON.parse(encryptedVault); if (vaultEncryptionSalt !== parsedEncryptedVault.salt) { @@ -533,16 +543,6 @@ export class SeedlessOnboardingController extends BaseController< key, parsedEncryptedVault, ); - } else { - assertIsValidPassword(password); - // Note that vault decryption using the password is a very costly operation as it involves deriving the encryption key - // from the password using an intentionally slow key derivation function. - // We should make sure that we only call it very intentionally. - const result = await this.#vaultEncryptor.decryptWithDetail( - password, - encryptedVault, - ); - decryptedVaultData = result.vault; } const { nodeAuthTokens, toprfEncryptionKey, toprfAuthKeyPair } = From 534f04cb4add38572a4882fcfc55673b71b95790 Mon Sep 17 00:00:00 2001 From: lwin Date: Tue, 22 Apr 2025 14:44:08 +0800 Subject: [PATCH 052/147] test: updated tests for multi-srp and new vault encryption scheme --- .../src/SeedlessOnboardingController.test.ts | 346 ++++++++++++++---- .../tests/mocks/vaultEncryptor.ts | 56 ++- 2 files changed, 329 insertions(+), 73 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts index dd4f6d46b1..3025a4e270 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts @@ -8,6 +8,7 @@ import { type ToprfSecureBackup, } from '@metamask/toprf-secure-backup'; import { base64ToBytes, bytesToBase64, stringToBytes } from '@metamask/utils'; +import { keccak_256 as keccak256 } from '@noble/hashes/sha3'; import { Web3AuthNetwork, @@ -236,12 +237,14 @@ async function createMockVault( }), }); - const encryptedMockVault = await encryptor.encrypt( - MOCK_PASSWORD, - serializedKeyData, - ); + const { vault: encryptedMockVault, exportedKeyString } = + await encryptor.encryptWithDetail(MOCK_PASSWORD, serializedKeyData); - return encryptedMockVault; + return { + encryptedMockVault, + vaultEncryptionKey: exportedKeyString, + vaultEncryptionSalt: JSON.parse(encryptedMockVault).salt, + }; } /** @@ -303,11 +306,15 @@ const MOCK_NODE_AUTH_TOKENS = [ * @param options - The options. * @param options.withMockAuthenticatedUser - Whether to skip the authenticate method and use the mock authenticated user. * @param options.vault - The mock vault data. + * @param options.vaultEncryptionKey - The mock vault encryption key. + * @param options.vaultEncryptionSalt - The mock vault encryption salt. * @returns The initial controller state with the mock authenticated user. */ function getMockInitialControllerState(options?: { withMockAuthenticatedUser?: boolean; vault?: string; + vaultEncryptionKey?: string; + vaultEncryptionSalt?: string; }): Partial { const state: Partial = { backupHashes: [], @@ -317,6 +324,14 @@ function getMockInitialControllerState(options?: { state.vault = options.vault; } + if (options?.vaultEncryptionKey) { + state.vaultEncryptionKey = options.vaultEncryptionKey; + } + + if (options?.vaultEncryptionSalt) { + state.vaultEncryptionSalt = options.vaultEncryptionSalt; + } + if (options?.withMockAuthenticatedUser) { state.nodeAuthTokens = MOCK_NODE_AUTH_TOKENS; state.authConnectionId = authConnectionId; @@ -513,7 +528,7 @@ describe('SeedlessOnboardingController', () => { expect(controller.state.vault).not.toStrictEqual({}); // verify the vault data - const encryptedMockVault = await createMockVault( + const { encryptedMockVault } = await createMockVault( encKey, authKeyPair, MOCK_PASSWORD, @@ -574,7 +589,7 @@ describe('SeedlessOnboardingController', () => { expect(controller.state.vault).not.toStrictEqual({}); // verify the vault data - const encryptedMockVault = await createMockVault( + const { encryptedMockVault } = await createMockVault( encKey, authKeyPair, MOCK_PASSWORD, @@ -720,6 +735,260 @@ describe('SeedlessOnboardingController', () => { }); }); + describe('addNewSeedPhraseBackup', () => { + const MOCK_PASSWORD = 'mock-password'; + const NEW_SEED_PHRASE_1 = 'new mock seed phrase 1'; + const NEW_SEED_PHRASE_2 = 'new mock seed phrase 2'; + const NEW_SEED_PHRASE_3 = 'new mock seed phrase 3'; + let MOCK_VAULT = ''; + let MOCK_VAULT_ENCRYPTION_KEY = ''; + let MOCK_VAULT_ENCRYPTION_SALT = ''; + + beforeEach(async () => { + const mockToprfEncryptor = createMockToprfEncryptor(); + + const MOCK_ENCRYPTION_KEY = + mockToprfEncryptor.deriveEncKey(MOCK_PASSWORD); + const MOCK_AUTH_KEY_PAIR = + mockToprfEncryptor.deriveAuthKeyPair(MOCK_PASSWORD); + + const mockResult = await createMockVault( + MOCK_ENCRYPTION_KEY, + MOCK_AUTH_KEY_PAIR, + MOCK_PASSWORD, + MOCK_NODE_AUTH_TOKENS, + ); + + MOCK_VAULT = mockResult.encryptedMockVault; + MOCK_VAULT_ENCRYPTION_KEY = mockResult.vaultEncryptionKey; + MOCK_VAULT_ENCRYPTION_SALT = mockResult.vaultEncryptionSalt; + }); + + it('should be able to add a new seed phrase backup', async () => { + await withController( + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + vault: MOCK_VAULT, + vaultEncryptionKey: MOCK_VAULT_ENCRYPTION_KEY, + vaultEncryptionSalt: MOCK_VAULT_ENCRYPTION_SALT, + }), + }, + async ({ controller }) => { + // encrypt and store the secret data + const mockSecretDataAdd = handleMockSecretDataAdd(); + await controller.addNewSeedPhraseBackup( + stringToBytes(NEW_SEED_PHRASE_1), + ); + + expect(mockSecretDataAdd.isDone()).toBe(true); + expect(controller.state.nodeAuthTokens).toBeDefined(); + expect(controller.state.nodeAuthTokens).toStrictEqual( + MOCK_NODE_AUTH_TOKENS, + ); + }, + ); + }); + + it('should be able to add a new seed phrase backup to the existing seed phrase backups', async () => { + await withController( + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + vault: MOCK_VAULT, + vaultEncryptionKey: MOCK_VAULT_ENCRYPTION_KEY, + vaultEncryptionSalt: MOCK_VAULT_ENCRYPTION_SALT, + }), + }, + async ({ controller }) => { + // encrypt and store the secret data + const mockSecretDataAdd = handleMockSecretDataAdd(); + await controller.addNewSeedPhraseBackup( + stringToBytes(NEW_SEED_PHRASE_1), + ); + + expect(mockSecretDataAdd.isDone()).toBe(true); + expect(controller.state.nodeAuthTokens).toBeDefined(); + expect(controller.state.nodeAuthTokens).toStrictEqual( + MOCK_NODE_AUTH_TOKENS, + ); + expect(controller.state.backupHashes).toStrictEqual([ + keccak256AndHexify(stringToBytes(NEW_SEED_PHRASE_1)), + ]); + + // add another seed phrase backup + const mockSecretDataAdd2 = handleMockSecretDataAdd(); + await controller.addNewSeedPhraseBackup( + stringToBytes(NEW_SEED_PHRASE_2), + ); + + expect(mockSecretDataAdd2.isDone()).toBe(true); + expect(controller.state.nodeAuthTokens).toBeDefined(); + expect(controller.state.nodeAuthTokens).toStrictEqual( + MOCK_NODE_AUTH_TOKENS, + ); + + const { backupHashes } = controller.state; + expect(backupHashes).toStrictEqual([ + keccak256AndHexify(stringToBytes(NEW_SEED_PHRASE_1)), + keccak256AndHexify(stringToBytes(NEW_SEED_PHRASE_2)), + ]); + + // should be able to get the hash of the seed phrase backup from the state + expect( + controller.getSeedPhraseBackupHash( + stringToBytes(NEW_SEED_PHRASE_1), + ), + ).toBeDefined(); + + // should return undefined if the seed phrase is not backed up + expect( + controller.getSeedPhraseBackupHash( + stringToBytes(NEW_SEED_PHRASE_3), + ), + ).toBeUndefined(); + }, + ); + }); + + it('should throw an error if failed to parse vault data', async () => { + await withController( + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + vault: MOCK_VAULT, + vaultEncryptionKey: MOCK_VAULT_ENCRYPTION_KEY, + vaultEncryptionSalt: MOCK_VAULT_ENCRYPTION_SALT, + }), + }, + async ({ controller, encryptor }) => { + jest + .spyOn(encryptor, 'decryptWithKey') + .mockResolvedValueOnce('{ "foo": "bar"'); + await expect( + controller.addNewSeedPhraseBackup(stringToBytes(NEW_SEED_PHRASE_1)), + ).rejects.toThrow(SeedlessOnboardingControllerError.InvalidVaultData); + }, + ); + }); + + it('should throw an error if vault is missing', async () => { + await withController( + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + }), + }, + async ({ controller }) => { + await expect( + controller.addNewSeedPhraseBackup(stringToBytes(NEW_SEED_PHRASE_1)), + ).rejects.toThrow(SeedlessOnboardingControllerError.VaultError); + }, + ); + }); + + it('should throw error if encryptionKey is missing', async () => { + await withController( + { state: getMockInitialControllerState({ vault: MOCK_VAULT }) }, + async ({ controller }) => { + await expect( + controller.addNewSeedPhraseBackup(stringToBytes(NEW_SEED_PHRASE_1)), + ).rejects.toThrow( + SeedlessOnboardingControllerError.MissingCredentials, + ); + }, + ); + }); + + it('should throw error if encryptionSalt is different from the one in the vault', async () => { + await withController( + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + vault: MOCK_VAULT, + vaultEncryptionKey: MOCK_VAULT_ENCRYPTION_KEY, + vaultEncryptionSalt: '0x1234', + }), + }, + async ({ controller }) => { + await expect( + controller.addNewSeedPhraseBackup(stringToBytes(NEW_SEED_PHRASE_1)), + ).rejects.toThrow( + SeedlessOnboardingControllerError.ExpiredCredentials, + ); + }, + ); + }); + + it('should throw error if encryptionKey is of an unexpected type', async () => { + await withController( + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + vault: MOCK_VAULT, + // @ts-expect-error intentional test case + vaultEncryptionKey: 123, + vaultEncryptionSalt: MOCK_VAULT_ENCRYPTION_SALT, + }), + }, + async ({ controller }) => { + await expect( + controller.addNewSeedPhraseBackup(stringToBytes(NEW_SEED_PHRASE_1)), + ).rejects.toThrow( + SeedlessOnboardingControllerError.WrongPasswordType, + ); + }, + ); + }); + + it('should throw an error if vault unlocked has an unexpected shape', async () => { + await withController( + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + vault: MOCK_VAULT, + vaultEncryptionKey: MOCK_VAULT_ENCRYPTION_KEY, + vaultEncryptionSalt: MOCK_VAULT_ENCRYPTION_SALT, + }), + }, + async ({ controller, encryptor }) => { + jest + .spyOn(encryptor, 'decryptWithKey') + .mockResolvedValueOnce({ foo: 'bar' }); + await expect( + controller.addNewSeedPhraseBackup(stringToBytes(NEW_SEED_PHRASE_1)), + ).rejects.toThrow(SeedlessOnboardingControllerError.InvalidVaultData); + + jest.spyOn(encryptor, 'decryptWithKey').mockResolvedValueOnce('null'); + await expect( + controller.addNewSeedPhraseBackup(stringToBytes(NEW_SEED_PHRASE_1)), + ).rejects.toThrow(SeedlessOnboardingControllerError.VaultDataError); + }, + ); + }); + + it('should throw an error if vault unlocked has invalid authentication data', async () => { + await withController( + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + vault: MOCK_VAULT, + vaultEncryptionKey: MOCK_VAULT_ENCRYPTION_KEY, + vaultEncryptionSalt: MOCK_VAULT_ENCRYPTION_SALT, + }), + }, + async ({ controller, encryptor }) => { + jest + .spyOn(encryptor, 'decryptWithKey') + .mockResolvedValueOnce(MOCK_VAULT); + await expect( + controller.addNewSeedPhraseBackup(stringToBytes(NEW_SEED_PHRASE_1)), + ).rejects.toThrow(SeedlessOnboardingControllerError.VaultDataError); + }, + ); + }); + }); + describe('fetchAndRestoreSeedPhrase', () => { const MOCK_PASSWORD = 'mock-password'; @@ -756,7 +1025,7 @@ describe('SeedlessOnboardingController', () => { expect(controller.state.vault).not.toStrictEqual({}); // verify the vault data - const encryptedMockVault = await createMockVault( + const { encryptedMockVault } = await createMockVault( encKey, authKeyPair, MOCK_PASSWORD, @@ -813,7 +1082,7 @@ describe('SeedlessOnboardingController', () => { ]); // verify the vault data - const encryptedMockVault = await createMockVault( + const { encryptedMockVault } = await createMockVault( encKey, authKeyPair, MOCK_PASSWORD, @@ -912,7 +1181,7 @@ describe('SeedlessOnboardingController', () => { expect(controller.state.vault).not.toStrictEqual({}); // verify the vault data - const encryptedMockVault = await createMockVault( + const { encryptedMockVault } = await createMockVault( encKey, authKeyPair, MOCK_PASSWORD, @@ -1241,63 +1510,6 @@ describe('SeedlessOnboardingController', () => { ); }); - it('should throw an error if failed to parse vault data', async () => { - await withController( - { - state: getMockInitialControllerState({ vault: '{ "foo": "bar"' }), - }, - async ({ controller, encryptor }) => { - jest - .spyOn(encryptor, 'decrypt') - .mockResolvedValueOnce('{ "foo": "bar"'); - await expect( - controller.changePassword(NEW_MOCK_PASSWORD, MOCK_PASSWORD), - ).rejects.toThrow(SeedlessOnboardingControllerError.InvalidVaultData); - }, - ); - }); - - it('should throw an error if vault unlocked has an unexpected shape', async () => { - await withController( - { - state: getMockInitialControllerState({ - vault: MOCK_VAULT, - withMockAuthenticatedUser: true, - }), - }, - async ({ controller, encryptor }) => { - jest - .spyOn(encryptor, 'decrypt') - .mockResolvedValueOnce({ foo: 'bar' }); - await expect( - controller.changePassword(NEW_MOCK_PASSWORD, MOCK_PASSWORD), - ).rejects.toThrow(SeedlessOnboardingControllerError.InvalidVaultData); - - jest.spyOn(encryptor, 'decrypt').mockResolvedValueOnce('null'); - await expect( - controller.changePassword(NEW_MOCK_PASSWORD, MOCK_PASSWORD), - ).rejects.toThrow(SeedlessOnboardingControllerError.VaultDataError); - }, - ); - }); - - it('should throw an error if vault unlocked has invalid authentication data', async () => { - await withController( - { - state: getMockInitialControllerState({ - vault: MOCK_VAULT, - withMockAuthenticatedUser: true, - }), - }, - async ({ controller, encryptor }) => { - jest.spyOn(encryptor, 'decrypt').mockResolvedValueOnce(MOCK_VAULT); - await expect( - controller.changePassword(NEW_MOCK_PASSWORD, MOCK_PASSWORD), - ).rejects.toThrow(SeedlessOnboardingControllerError.VaultDataError); - }, - ); - }); - it('should throw an error if the old password is incorrect', async () => { await withController( { diff --git a/packages/seedless-onboarding-controller/tests/mocks/vaultEncryptor.ts b/packages/seedless-onboarding-controller/tests/mocks/vaultEncryptor.ts index 154df2544f..53dd1951b7 100644 --- a/packages/seedless-onboarding-controller/tests/mocks/vaultEncryptor.ts +++ b/packages/seedless-onboarding-controller/tests/mocks/vaultEncryptor.ts @@ -5,7 +5,9 @@ import type { } from '@metamask/browser-passworder'; import { webcrypto } from 'node:crypto'; -export default class MockVaultEncryptor { +import type { VaultEncryptor } from '../../src/types'; + +export default class MockVaultEncryptor implements VaultEncryptor { DEFAULT_DERIVATION_PARAMS: KeyDerivationOptions = { algorithm: 'PBKDF2', params: { @@ -15,13 +17,55 @@ export default class MockVaultEncryptor { DEFAULT_SALT = 'RANDOM_SALT'; - async importKey(keyString: string) { + async encryptWithDetail( + password: string, + dataObj: unknown, + salt: string = this.DEFAULT_SALT, + keyDerivationOptions: KeyDerivationOptions = this.DEFAULT_DERIVATION_PARAMS, + ) { + const key = await this.keyFromPassword( + password, + salt, + true, + keyDerivationOptions, + ); + const exportedKeyString = await this.exportKey(key); + const vault = await this.encrypt(password, dataObj, key, salt); + + return { + vault, + exportedKeyString, + }; + } + + async decryptWithDetail(password: string, text: string) { + const payload = JSON.parse(text); + const { salt, keyMetadata } = payload; + const key = await this.keyFromPassword(password, salt, true, keyMetadata); + const exportedKeyString = await this.exportKey(key); + const vault = await this.decrypt(password, text, key); + + return { + exportedKeyString, + vault, + salt, + }; + } + + async importKey(keyString: string): Promise { try { const parsedKey = JSON.parse(keyString); - return webcrypto.subtle.importKey('jwk', parsedKey, 'AES-GCM', false, [ - 'encrypt', - 'decrypt', - ]); + const key = await webcrypto.subtle.importKey( + 'jwk', + parsedKey, + 'AES-GCM', + false, + ['encrypt', 'decrypt'], + ); + return { + key, + derivationOptions: this.DEFAULT_DERIVATION_PARAMS, + }; } catch (error) { console.error(error); throw new Error('Failed to import key'); From 57636e64ee7b208d76fdc5d87390229c3986d129 Mon Sep 17 00:00:00 2001 From: lwin Date: Tue, 22 Apr 2025 15:04:12 +0800 Subject: [PATCH 053/147] lint: removed unused imports --- .../src/SeedlessOnboardingController.test.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts index 3025a4e270..c5e054c399 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts @@ -8,7 +8,6 @@ import { type ToprfSecureBackup, } from '@metamask/toprf-secure-backup'; import { base64ToBytes, bytesToBase64, stringToBytes } from '@metamask/utils'; -import { keccak_256 as keccak256 } from '@noble/hashes/sha3'; import { Web3AuthNetwork, From b15d1d9b74e9d10e819a60ac8e6808c786504103 Mon Sep 17 00:00:00 2001 From: lwin Date: Tue, 22 Apr 2025 16:52:33 +0800 Subject: [PATCH 054/147] feat: locked controller and clear secrets on keyring lock state --- .../package.json | 4 ++ .../src/SeedlessOnboardingController.ts | 72 +++++++++++++++++++ .../src/constants.ts | 1 + .../src/types.ts | 3 +- .../tsconfig.build.json | 3 + .../tsconfig.json | 3 + yarn.lock | 3 + 7 files changed, 88 insertions(+), 1 deletion(-) diff --git a/packages/seedless-onboarding-controller/package.json b/packages/seedless-onboarding-controller/package.json index 069b478f97..3ce77e5dbb 100644 --- a/packages/seedless-onboarding-controller/package.json +++ b/packages/seedless-onboarding-controller/package.json @@ -56,6 +56,7 @@ }, "devDependencies": { "@metamask/auto-changelog": "^3.4.4", + "@metamask/keyring-controller": "^21.0.3", "@noble/ciphers": "^0.5.2", "@noble/curves": "^1.2.0", "@noble/hashes": "^1.4.0", @@ -70,6 +71,9 @@ "typedoc-plugin-missing-exports": "^2.0.0", "typescript": "~5.2.2" }, + "peerDependencies": { + "@metamask/keyring-controller": "^21.0.0" + }, "engines": { "node": "^18.18 || >=20" }, diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index 66c5505a64..3b44fd58da 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -132,6 +132,20 @@ export class SeedlessOnboardingController extends BaseController< #password?: string; + /** + * Note: This lock is not the same as the keyring/wallet lock. + * + * The `locked` state related to the keyring (wallet) `locked` state. + * However, the `unlock` state is not dependent on the keyring lock state + * + * The reason for this is that, Seedless Onboarding flow can be before/after the keyring generation. + * + * Example: + * - For registration flow, we need to generate the keyring first and then perform the Seedless Onboarding flow and backup the seed phrase. + * - For login flow, we need to perform the Seedless Onboarding flow (fetch the seed phrase backup) then we can create the keyring with the recovered seed phrase. + */ + #isUnlocked = false; + /** * Creates a new SeedlessOnboardingController instance. * @@ -161,6 +175,10 @@ export class SeedlessOnboardingController extends BaseController< this.toprfClient = new ToprfSecureBackup({ network, }); + + // setup subscriptions to the keyring lock event + // when the keyring is locked (wallet is locked), the controller will be cleared of its credentials + this.messagingSystem.subscribe('KeyringController:lock', this.#setLocked); } /** @@ -319,6 +337,7 @@ export class SeedlessOnboardingController extends BaseController< * @param oldPassword - The old password to verify. */ async changePassword(newPassword: string, oldPassword: string) { + this.#assertIsUnlocked(); // verify the old password of the encrypted vault await this.#verifyPassword(oldPassword); @@ -352,6 +371,45 @@ export class SeedlessOnboardingController extends BaseController< return this.state.backupHashes.find((hash) => hash === seedPhraseHash); } + /** + * Submit the password to the controller, verify the password validity and unlock the controller. + * + * This method will be used especially when user rehydrate/unlock the wallet. + * The provided password will be verified against the encrypted vault, encryption key will be derived and saved in the controller state. + * + * This operation is useful when user performs some actions that requires the user password/encryption key. e.g. add new srp backup + * + * @param password - The password to submit. + */ + async submitPassword(password: string): Promise { + this.#password = password; + + await this.#unlockVaultAndGetBackupEncKey(); + this.#setUnlocked(); + } + + /** + * Set the controller to locked state, and deallocate the secrets (password,vault encryption key and salt). + * + * When the controller is locked, the user will not be able to perform any operations on the controller/vault. + */ + #setLocked(): void { + this.#assertIsUnlocked(); + + this.#password = undefined; + + this.update((state) => { + delete state.vaultEncryptionKey; + delete state.vaultEncryptionSalt; + }); + + this.#isUnlocked = false; + } + + #setUnlocked(): void { + this.#isUnlocked = true; + } + /** * Persist the encryption key for the seedless onboarding flow. * @@ -514,6 +572,7 @@ export class SeedlessOnboardingController extends BaseController< } let decryptedVaultData: unknown; + const updatedState: Partial = {}; if (password) { assertIsValidPassword(password); @@ -525,6 +584,8 @@ export class SeedlessOnboardingController extends BaseController< encryptedVault, ); decryptedVaultData = result.vault; + updatedState.vaultEncryptionKey = result.exportedKeyString; + updatedState.vaultEncryptionSalt = result.salt; } else { const parsedEncryptedVault = JSON.parse(encryptedVault); @@ -543,6 +604,8 @@ export class SeedlessOnboardingController extends BaseController< key, parsedEncryptedVault, ); + updatedState.vaultEncryptionKey = vaultEncryptionKey; + updatedState.vaultEncryptionSalt = vaultEncryptionSalt; } const { nodeAuthTokens, toprfEncryptionKey, toprfAuthKeyPair } = @@ -551,6 +614,8 @@ export class SeedlessOnboardingController extends BaseController< // update the state with the restored nodeAuthTokens this.update((state) => { state.nodeAuthTokens = nodeAuthTokens; + state.vaultEncryptionKey = updatedState.vaultEncryptionKey; + state.vaultEncryptionSalt = updatedState.vaultEncryptionSalt; }); return { nodeAuthTokens, toprfEncryptionKey, toprfAuthKeyPair }; @@ -629,6 +694,7 @@ export class SeedlessOnboardingController extends BaseController< rawToprfAuthKeyPair: KeyPair; }): Promise { this.#assertIsAuthenticatedUser(this.state); + this.#setUnlocked(); const { toprfEncryptionKey, toprfAuthKeyPair } = this.#serializeKeyData( rawToprfEncryptionKey, @@ -773,6 +839,12 @@ export class SeedlessOnboardingController extends BaseController< }; } + #assertIsUnlocked(): void { + if (!this.#isUnlocked) { + throw new Error(SeedlessOnboardingControllerError.ControllerLocked); + } + } + /** * Assert that the provided value contains valid authenticated user information. * diff --git a/packages/seedless-onboarding-controller/src/constants.ts b/packages/seedless-onboarding-controller/src/constants.ts index 56ad52dff7..e88226ca1c 100644 --- a/packages/seedless-onboarding-controller/src/constants.ts +++ b/packages/seedless-onboarding-controller/src/constants.ts @@ -6,6 +6,7 @@ export enum Web3AuthNetwork { } export enum SeedlessOnboardingControllerError { + ControllerLocked = `${controllerName} - The operation cannot be completed while the controller is locked.`, AuthenticationError = `${controllerName} - Authentication error`, MissingAuthUserInfo = `${controllerName} - Missing authenticated user information`, FailedToPersistOprfKey = `${controllerName} - Failed to persist OPRF key`, diff --git a/packages/seedless-onboarding-controller/src/types.ts b/packages/seedless-onboarding-controller/src/types.ts index c0d9aa73e3..2fdef8a73b 100644 --- a/packages/seedless-onboarding-controller/src/types.ts +++ b/packages/seedless-onboarding-controller/src/types.ts @@ -7,6 +7,7 @@ import type { EncryptionKey, EncryptionResult, } from '@metamask/browser-passworder'; +import type { KeyringControllerLockEvent } from '@metamask/keyring-controller'; import type { NodeAuthTokens } from '@metamask/toprf-secure-backup'; import type { Json } from '@metamask/utils'; import type { MutexInterface } from 'async-mutex'; @@ -84,7 +85,7 @@ export type SeedlessOnboardingControllerStateChangeEvent = export type SeedlessOnboardingControllerEvents = SeedlessOnboardingControllerStateChangeEvent; -export type AllowedEvents = never; +export type AllowedEvents = KeyringControllerLockEvent; // Messenger export type SeedlessOnboardingControllerMessenger = RestrictedMessenger< diff --git a/packages/seedless-onboarding-controller/tsconfig.build.json b/packages/seedless-onboarding-controller/tsconfig.build.json index 38d8a31843..363d67c8df 100644 --- a/packages/seedless-onboarding-controller/tsconfig.build.json +++ b/packages/seedless-onboarding-controller/tsconfig.build.json @@ -11,6 +11,9 @@ }, { "path": "../message-manager/tsconfig.build.json" + }, + { + "path": "../keyring-controller/tsconfig.build.json" } ], "include": ["../../types", "./src"] diff --git a/packages/seedless-onboarding-controller/tsconfig.json b/packages/seedless-onboarding-controller/tsconfig.json index 831b2ae3b4..9167ff78a2 100644 --- a/packages/seedless-onboarding-controller/tsconfig.json +++ b/packages/seedless-onboarding-controller/tsconfig.json @@ -9,6 +9,9 @@ }, { "path": "../message-manager" + }, + { + "path": "../keyring-controller" } ], "include": ["../../types", "./src", "./tests"] diff --git a/yarn.lock b/yarn.lock index 6d51b14935..c2f9ed97cc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4257,6 +4257,7 @@ __metadata: "@metamask/auto-changelog": "npm:^3.4.4" "@metamask/base-controller": "npm:^8.0.0" "@metamask/browser-passworder": "npm:^4.3.0" + "@metamask/keyring-controller": "npm:^21.0.3" "@metamask/toprf-secure-backup": ./toprf-secure-backup.tgz "@metamask/utils": "npm:^11.2.0" "@noble/ciphers": "npm:^0.5.2" @@ -4273,6 +4274,8 @@ __metadata: typedoc: "npm:^0.24.8" typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.2.2" + peerDependencies: + "@metamask/keyring-controller": ^21.0.0 languageName: unknown linkType: soft From 6cae65b777d52947429e326cc428fa03cda33806 Mon Sep 17 00:00:00 2001 From: lwin Date: Tue, 22 Apr 2025 20:11:30 +0800 Subject: [PATCH 055/147] fix: removed password cache value from Controller --- .../src/SeedlessOnboardingController.ts | 63 ++++++++----------- 1 file changed, 27 insertions(+), 36 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index 3b44fd58da..c99c4300a8 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -130,9 +130,9 @@ export class SeedlessOnboardingController extends BaseController< readonly toprfClient: ToprfSecureBackup; - #password?: string; - /** + * Controller lock state. + * * Note: This lock is not the same as the keyring/wallet lock. * * The `locked` state related to the keyring (wallet) `locked` state. @@ -178,7 +178,7 @@ export class SeedlessOnboardingController extends BaseController< // setup subscriptions to the keyring lock event // when the keyring is locked (wallet is locked), the controller will be cleared of its credentials - this.messagingSystem.subscribe('KeyringController:lock', this.#setLocked); + this.messagingSystem.subscribe('KeyringController:lock', this.setLocked); } /** @@ -275,6 +275,7 @@ export class SeedlessOnboardingController extends BaseController< * @returns A promise that resolves to the success of the operation. */ async addNewSeedPhraseBackup(seedPhrase: Uint8Array): Promise { + this.#assertIsUnlocked(); // verify the password and unlock the vault const { toprfEncryptionKey, toprfAuthKeyPair } = await this.#unlockVaultAndGetBackupEncKey(); @@ -339,7 +340,7 @@ export class SeedlessOnboardingController extends BaseController< async changePassword(newPassword: string, oldPassword: string) { this.#assertIsUnlocked(); // verify the old password of the encrypted vault - await this.#verifyPassword(oldPassword); + await this.verifyPassword(oldPassword); try { // update the encryption key with new password and update the Metadata Store @@ -358,6 +359,20 @@ export class SeedlessOnboardingController extends BaseController< } } + /** + * Verify the password validity by decrypting the vault. + * + * @param password - The password to verify. + * @throws {Error} If the password is invalid or the vault is not initialized. + */ + async verifyPassword(password: string): Promise { + if (!this.state.vault) { + throw new Error(SeedlessOnboardingControllerError.VaultError); + } + + await this.#vaultEncryptor.decrypt(password, this.state.vault); + } + /** * Get the hash of the seed phrase backup for the given seed phrase, from the state. * @@ -382,22 +397,18 @@ export class SeedlessOnboardingController extends BaseController< * @param password - The password to submit. */ async submitPassword(password: string): Promise { - this.#password = password; - - await this.#unlockVaultAndGetBackupEncKey(); + await this.#unlockVaultAndGetBackupEncKey(password); this.#setUnlocked(); } /** - * Set the controller to locked state, and deallocate the secrets (password,vault encryption key and salt). + * Set the controller to locked state, and deallocate the secrets (vault encryption key and salt). * * When the controller is locked, the user will not be able to perform any operations on the controller/vault. */ - #setLocked(): void { + setLocked(): void { this.#assertIsUnlocked(); - this.#password = undefined; - this.update((state) => { delete state.vaultEncryptionKey; delete state.vaultEncryptionSalt; @@ -523,23 +534,11 @@ export class SeedlessOnboardingController extends BaseController< } } - /** - * Verify the password validity by decrypting the vault. - * - * @param password - The password to verify. - * @throws {Error} If the password is invalid or the vault is not initialized. - */ - async #verifyPassword(password: string) { - if (!this.state.vault) { - throw new Error(SeedlessOnboardingControllerError.VaultError); - } - await this.#vaultEncryptor.decrypt(password, this.state.vault); - } - /** * Unlocks the encrypted vault using the provided password and returns the decrypted vault data. * This method ensures thread-safety by using a mutex lock when accessing the vault. * + * @param password - The optional password to unlock the vault. * @returns A promise that resolves to an object containing: * - nodeAuthTokens: Authentication tokens to communicate with the TOPRF service * - toprfEncryptionKey: The decrypted TOPRF encryption key @@ -550,7 +549,7 @@ export class SeedlessOnboardingController extends BaseController< * - The password is incorrect (from encryptor.decrypt) * - The decrypted vault data is malformed */ - async #unlockVaultAndGetBackupEncKey(): Promise<{ + async #unlockVaultAndGetBackupEncKey(password?: string): Promise<{ nodeAuthTokens: NodeAuthTokens; toprfEncryptionKey: Uint8Array; toprfAuthKeyPair: KeyPair; @@ -561,7 +560,6 @@ export class SeedlessOnboardingController extends BaseController< vaultEncryptionKey, vaultEncryptionSalt, } = this.state; - const password = this.#password; if (!encryptedVault) { throw new Error(SeedlessOnboardingControllerError.VaultError); @@ -731,8 +729,6 @@ export class SeedlessOnboardingController extends BaseController< await this.#withVaultLock(async () => { assertIsValidPassword(password); - const updatedState: Partial = {}; - // Note that vault encryption using the password is a very costly operation as it involves deriving the encryption key // from the password using an intentionally slow key derivation function. // We should make sure that we only call it very intentionally. @@ -741,17 +737,12 @@ export class SeedlessOnboardingController extends BaseController< password, serializedVaultData, ); - updatedState.vault = vault; - updatedState.vaultEncryptionKey = exportedKeyString; - updatedState.vaultEncryptionSalt = JSON.parse(vault).salt; this.update((state) => { - state.vault = updatedState.vault; - state.vaultEncryptionKey = updatedState.vaultEncryptionKey; - state.vaultEncryptionSalt = updatedState.vaultEncryptionSalt; + state.vault = vault; + state.vaultEncryptionKey = exportedKeyString; + state.vaultEncryptionSalt = JSON.parse(vault).salt; }); - - this.#password = password; }); } From f8dd9fb449a53b0e558383d9c6f42203190ee418 Mon Sep 17 00:00:00 2001 From: lwin Date: Tue, 22 Apr 2025 20:11:41 +0800 Subject: [PATCH 056/147] test: fixed and updated tests --- .../src/SeedlessOnboardingController.test.ts | 327 ++++++++++++++---- 1 file changed, 261 insertions(+), 66 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts index c5e054c399..48ce44d1c3 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts @@ -14,7 +14,10 @@ import { SeedlessOnboardingControllerError, } from './constants'; import { RecoveryError } from './errors'; -import { SeedlessOnboardingController } from './SeedlessOnboardingController'; +import { + getDefaultSeedlessOnboardingControllerState, + SeedlessOnboardingController, +} from './SeedlessOnboardingController'; import { SeedPhraseMetadata } from './SeedPhraseMetadata'; import type { SeedlessOnboardingControllerMessenger, @@ -101,7 +104,6 @@ async function withController( ...rest, }); const { toprfClient } = controller; - return await fn({ controller, encryptor, @@ -209,6 +211,29 @@ function mockChangeEncKey( return { encKey, authKeyPair }; } +/** + * Mocks the createToprfKeyAndBackupSeedPhrase method of the SeedlessOnboardingController instance. + * + * @param toprfClient - The ToprfSecureBackup instance. + * @param controller - The SeedlessOnboardingController instance. + * @param password - The mock password. + * @param seedPhrase - The mock seed phrase. + */ +async function mockCreateToprfKeyAndBackupSeedPhrase( + toprfClient: ToprfSecureBackup, + controller: SeedlessOnboardingController, + password: string, + seedPhrase: Uint8Array, +) { + mockcreateLocalKey(toprfClient, password); + + // persist the local enc key + jest.spyOn(toprfClient, 'persistLocalKey').mockResolvedValueOnce(); + // encrypt and store the secret data + handleMockSecretDataAdd(); + await controller.createToprfKeyAndBackupSeedPhrase(password, seedPhrase); +} + /** * Creates a mock vault. * @@ -353,9 +378,9 @@ describe('SeedlessOnboardingController', () => { messenger, }); expect(controller).toBeDefined(); - expect(controller.state).toStrictEqual({ - backupHashes: [], - }); + expect(controller.state).toStrictEqual( + getDefaultSeedlessOnboardingControllerState(), + ); }); it('should be able to instantiate with an encryptor', () => { @@ -763,6 +788,14 @@ describe('SeedlessOnboardingController', () => { MOCK_VAULT_ENCRYPTION_SALT = mockResult.vaultEncryptionSalt; }); + it('should throw an error if the controller is locked', async () => { + await withController(async ({ controller }) => { + await expect( + controller.addNewSeedPhraseBackup(stringToBytes(NEW_SEED_PHRASE_1)), + ).rejects.toThrow(SeedlessOnboardingControllerError.ControllerLocked); + }); + }); + it('should be able to add a new seed phrase backup', async () => { await withController( { @@ -774,6 +807,8 @@ describe('SeedlessOnboardingController', () => { }), }, async ({ controller }) => { + await controller.submitPassword(MOCK_PASSWORD); + // encrypt and store the secret data const mockSecretDataAdd = handleMockSecretDataAdd(); await controller.addNewSeedPhraseBackup( @@ -800,6 +835,8 @@ describe('SeedlessOnboardingController', () => { }), }, async ({ controller }) => { + await controller.submitPassword(MOCK_PASSWORD); + // encrypt and store the secret data const mockSecretDataAdd = handleMockSecretDataAdd(); await controller.addNewSeedPhraseBackup( @@ -861,6 +898,8 @@ describe('SeedlessOnboardingController', () => { }), }, async ({ controller, encryptor }) => { + await controller.submitPassword(MOCK_PASSWORD); + jest .spyOn(encryptor, 'decryptWithKey') .mockResolvedValueOnce('{ "foo": "bar"'); @@ -871,25 +910,33 @@ describe('SeedlessOnboardingController', () => { ); }); - it('should throw an error if vault is missing', async () => { + it('should throw error if encryptionKey is missing', async () => { await withController( { state: getMockInitialControllerState({ withMockAuthenticatedUser: true, + vault: MOCK_VAULT, }), }, - async ({ controller }) => { - await expect( - controller.addNewSeedPhraseBackup(stringToBytes(NEW_SEED_PHRASE_1)), - ).rejects.toThrow(SeedlessOnboardingControllerError.VaultError); - }, - ); - }); + async ({ controller, toprfClient, encryptor }) => { + mockcreateLocalKey(toprfClient, MOCK_PASSWORD); + + // persist the local enc key + jest.spyOn(toprfClient, 'persistLocalKey').mockResolvedValueOnce(); + // encrypt and store the secret data + handleMockSecretDataAdd(); + + jest.spyOn(encryptor, 'encryptWithDetail').mockResolvedValueOnce({ + vault: MOCK_VAULT, + // @ts-expect-error intentional test case + exportedKeyString: undefined, + }); + + await controller.createToprfKeyAndBackupSeedPhrase( + MOCK_PASSWORD, + stringToBytes(NEW_SEED_PHRASE_1), + ); - it('should throw error if encryptionKey is missing', async () => { - await withController( - { state: getMockInitialControllerState({ vault: MOCK_VAULT }) }, - async ({ controller }) => { await expect( controller.addNewSeedPhraseBackup(stringToBytes(NEW_SEED_PHRASE_1)), ).rejects.toThrow( @@ -904,12 +951,21 @@ describe('SeedlessOnboardingController', () => { { state: getMockInitialControllerState({ withMockAuthenticatedUser: true, - vault: MOCK_VAULT, - vaultEncryptionKey: MOCK_VAULT_ENCRYPTION_KEY, - vaultEncryptionSalt: '0x1234', }), }, - async ({ controller }) => { + async ({ controller, toprfClient }) => { + await mockCreateToprfKeyAndBackupSeedPhrase( + toprfClient, + controller, + MOCK_PASSWORD, + MOCK_SEED_PHRASE, + ); + + // intentionally mock the JSON.parse to return an object with a different salt + jest.spyOn(global.JSON, 'parse').mockReturnValueOnce({ + salt: 'different-salt', + }); + await expect( controller.addNewSeedPhraseBackup(stringToBytes(NEW_SEED_PHRASE_1)), ).rejects.toThrow( @@ -925,12 +981,27 @@ describe('SeedlessOnboardingController', () => { state: getMockInitialControllerState({ withMockAuthenticatedUser: true, vault: MOCK_VAULT, - // @ts-expect-error intentional test case - vaultEncryptionKey: 123, - vaultEncryptionSalt: MOCK_VAULT_ENCRYPTION_SALT, }), }, - async ({ controller }) => { + async ({ controller, toprfClient, encryptor }) => { + mockcreateLocalKey(toprfClient, MOCK_PASSWORD); + + // persist the local enc key + jest.spyOn(toprfClient, 'persistLocalKey').mockResolvedValueOnce(); + // encrypt and store the secret data + handleMockSecretDataAdd(); + + jest.spyOn(encryptor, 'encryptWithDetail').mockResolvedValueOnce({ + vault: MOCK_VAULT, + // @ts-expect-error intentional test case + exportedKeyString: 123, + }); + + await controller.createToprfKeyAndBackupSeedPhrase( + MOCK_PASSWORD, + stringToBytes(NEW_SEED_PHRASE_1), + ); + await expect( controller.addNewSeedPhraseBackup(stringToBytes(NEW_SEED_PHRASE_1)), ).rejects.toThrow( @@ -946,11 +1017,26 @@ describe('SeedlessOnboardingController', () => { state: getMockInitialControllerState({ withMockAuthenticatedUser: true, vault: MOCK_VAULT, - vaultEncryptionKey: MOCK_VAULT_ENCRYPTION_KEY, - vaultEncryptionSalt: MOCK_VAULT_ENCRYPTION_SALT, }), }, - async ({ controller, encryptor }) => { + async ({ controller, toprfClient, encryptor }) => { + mockcreateLocalKey(toprfClient, MOCK_PASSWORD); + + // persist the local enc key + jest.spyOn(toprfClient, 'persistLocalKey').mockResolvedValueOnce(); + // encrypt and store the secret data + handleMockSecretDataAdd(); + + jest.spyOn(encryptor, 'encryptWithDetail').mockResolvedValueOnce({ + vault: MOCK_VAULT, + exportedKeyString: MOCK_VAULT_ENCRYPTION_KEY, + }); + + await controller.createToprfKeyAndBackupSeedPhrase( + MOCK_PASSWORD, + stringToBytes(NEW_SEED_PHRASE_1), + ); + jest .spyOn(encryptor, 'decryptWithKey') .mockResolvedValueOnce({ foo: 'bar' }); @@ -972,11 +1058,26 @@ describe('SeedlessOnboardingController', () => { state: getMockInitialControllerState({ withMockAuthenticatedUser: true, vault: MOCK_VAULT, - vaultEncryptionKey: MOCK_VAULT_ENCRYPTION_KEY, - vaultEncryptionSalt: MOCK_VAULT_ENCRYPTION_SALT, }), }, - async ({ controller, encryptor }) => { + async ({ controller, toprfClient, encryptor }) => { + mockcreateLocalKey(toprfClient, MOCK_PASSWORD); + + // persist the local enc key + jest.spyOn(toprfClient, 'persistLocalKey').mockResolvedValueOnce(); + // encrypt and store the secret data + handleMockSecretDataAdd(); + + jest.spyOn(encryptor, 'encryptWithDetail').mockResolvedValueOnce({ + vault: MOCK_VAULT, + exportedKeyString: MOCK_VAULT_ENCRYPTION_KEY, + }); + + await controller.createToprfKeyAndBackupSeedPhrase( + MOCK_PASSWORD, + stringToBytes(NEW_SEED_PHRASE_1), + ); + jest .spyOn(encryptor, 'decryptWithKey') .mockResolvedValueOnce(MOCK_VAULT); @@ -1355,6 +1456,84 @@ describe('SeedlessOnboardingController', () => { }); }); + describe('submitPassword', () => { + const MOCK_PASSWORD = 'mock-password'; + + it('should throw error if the vault is missing', async () => { + await withController(async ({ controller }) => { + await expect(controller.submitPassword(MOCK_PASSWORD)).rejects.toThrow( + SeedlessOnboardingControllerError.VaultError, + ); + }); + }); + + it('should throw error if the password is invalid', async () => { + await withController( + { + state: { + vault: 'MOCK_VAULT', + }, + }, + async ({ controller }) => { + // @ts-expect-error intentional test case + await expect(controller.submitPassword(123)).rejects.toThrow( + SeedlessOnboardingControllerError.WrongPasswordType, + ); + }, + ); + }); + }); + + describe('verifyPassword', () => { + const MOCK_PASSWORD = 'mock-password'; + + it('should not throw an error if the password is valid', async () => { + await withController( + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + vault: 'MOCK_VAULT', + }), + }, + async ({ controller, encryptor }) => { + jest.spyOn(encryptor, 'decrypt').mockResolvedValueOnce('MOCK_VAULT'); + + expect(async () => { + await controller.verifyPassword(MOCK_PASSWORD); + }).not.toThrow(); + }, + ); + }); + + it('should throw an error if the password is invalid', async () => { + await withController( + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + vault: 'MOCK_VAULT', + }), + }, + async ({ controller, encryptor }) => { + jest + .spyOn(encryptor, 'decrypt') + .mockRejectedValueOnce(new Error('Incorrect password')); + + await expect( + controller.verifyPassword(MOCK_PASSWORD), + ).rejects.toThrow('Incorrect password'); + }, + ); + }); + + it('should throw an error if the vault is missing', async () => { + await withController(async ({ controller }) => { + await expect(controller.verifyPassword(MOCK_PASSWORD)).rejects.toThrow( + SeedlessOnboardingControllerError.VaultError, + ); + }); + }); + }); + describe('changePassword', () => { const MOCK_PASSWORD = 'mock-password'; const NEW_MOCK_PASSWORD = 'new-mock-password'; @@ -1368,13 +1547,9 @@ describe('SeedlessOnboardingController', () => { }), }, async ({ controller, toprfClient }) => { - mockcreateLocalKey(toprfClient, MOCK_PASSWORD); - - // persist the local enc key - jest.spyOn(toprfClient, 'persistLocalKey').mockResolvedValueOnce(); - // encrypt and store the secret data - handleMockSecretDataAdd(); - await controller.createToprfKeyAndBackupSeedPhrase( + await mockCreateToprfKeyAndBackupSeedPhrase( + toprfClient, + controller, MOCK_PASSWORD, MOCK_SEED_PHRASE, ); @@ -1436,13 +1611,9 @@ describe('SeedlessOnboardingController', () => { }, }, async ({ controller, toprfClient }) => { - mockcreateLocalKey(toprfClient, MOCK_PASSWORD); - - // persist the local enc key - jest.spyOn(toprfClient, 'persistLocalKey').mockResolvedValueOnce(); - // encrypt and store the secret data - handleMockSecretDataAdd(); - await controller.createToprfKeyAndBackupSeedPhrase( + await mockCreateToprfKeyAndBackupSeedPhrase( + toprfClient, + controller, MOCK_PASSWORD, MOCK_SEED_PHRASE, ); @@ -1494,19 +1665,12 @@ describe('SeedlessOnboardingController', () => { ); }); - it('should throw an error if vault is missing', async () => { - await withController( - { - state: getMockInitialControllerState({ - withMockAuthenticatedUser: true, - }), - }, - async ({ controller }) => { - await expect( - controller.changePassword(NEW_MOCK_PASSWORD, MOCK_PASSWORD), - ).rejects.toThrow(SeedlessOnboardingControllerError.VaultError); - }, - ); + it('should throw an error if the controller is locked', async () => { + await withController(async ({ controller }) => { + await expect( + controller.changePassword(NEW_MOCK_PASSWORD, MOCK_PASSWORD), + ).rejects.toThrow(SeedlessOnboardingControllerError.ControllerLocked); + }); }); it('should throw an error if the old password is incorrect', async () => { @@ -1517,7 +1681,14 @@ describe('SeedlessOnboardingController', () => { withMockAuthenticatedUser: true, }), }, - async ({ controller, encryptor }) => { + async ({ controller, encryptor, toprfClient }) => { + await mockCreateToprfKeyAndBackupSeedPhrase( + toprfClient, + controller, + MOCK_PASSWORD, + MOCK_SEED_PHRASE, + ); + jest .spyOn(encryptor, 'decrypt') .mockRejectedValueOnce(new Error('Incorrect password')); @@ -1536,13 +1707,9 @@ describe('SeedlessOnboardingController', () => { }), }, async ({ controller, toprfClient }) => { - mockcreateLocalKey(toprfClient, MOCK_PASSWORD); - - // persist the local enc key - jest.spyOn(toprfClient, 'persistLocalKey').mockResolvedValueOnce(); - // encrypt and store the secret data - handleMockSecretDataAdd(); - await controller.createToprfKeyAndBackupSeedPhrase( + await mockCreateToprfKeyAndBackupSeedPhrase( + toprfClient, + controller, MOCK_PASSWORD, MOCK_SEED_PHRASE, ); @@ -1649,6 +1816,34 @@ describe('SeedlessOnboardingController', () => { }); }); + describe('lock', () => { + const MOCK_PASSWORD = 'mock-password'; + + it('should lock the controller', async () => { + await withController( + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + }), + }, + async ({ controller, toprfClient }) => { + await mockCreateToprfKeyAndBackupSeedPhrase( + toprfClient, + controller, + MOCK_PASSWORD, + MOCK_SEED_PHRASE, + ); + + controller.setLocked(); + + await expect( + controller.addNewSeedPhraseBackup(MOCK_SEED_PHRASE), + ).rejects.toThrow(SeedlessOnboardingControllerError.ControllerLocked); + }, + ); + }); + }); + describe('SeedPhraseMetadata', () => { it('should be able to create a seed phrase metadata', () => { // should be able to create a SeedPhraseMetadata instance via constructor From 7cbf63ac7305a990b6e3aafaafad812f2d5e8c3a Mon Sep 17 00:00:00 2001 From: lwin Date: Wed, 23 Apr 2025 11:05:01 +0800 Subject: [PATCH 057/147] fix: updated and renamed SeedlessOnboardingController backup state --- .../auth-network-utils.tgz | Bin 41102 -> 41285 bytes .../src/SeedlessOnboardingController.test.ts | 74 ++++------ .../src/SeedlessOnboardingController.ts | 126 ++++++++++++------ .../src/index.ts | 1 + .../src/types.ts | 7 +- .../toprf-secure-backup.tgz | Bin 100048 -> 101054 bytes yarn.lock | 8 +- 7 files changed, 119 insertions(+), 97 deletions(-) diff --git a/packages/seedless-onboarding-controller/auth-network-utils.tgz b/packages/seedless-onboarding-controller/auth-network-utils.tgz index 7921cbaeff9345619c4273f241042a246c8532a8..fd22df00044f32f4c1949a254da75beab758f16f 100644 GIT binary patch delta 40007 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 delta 39678 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 { - const state: Partial = { - backupHashes: [], - }; + const state = getDefaultSeedlessOnboardingControllerState(); if (options?.vault) { state.vault = options.vault; @@ -327,6 +327,7 @@ function getMockInitialControllerState(options?: { return state; } +const MOCK_KEYRING_ID = 'mock-keyring-id'; const MOCK_SEED_PHRASE = stringToBytes( 'horror pink muffin canal young photo magnet runway start elder patch until', ); @@ -340,7 +341,7 @@ describe('SeedlessOnboardingController', () => { }); expect(controller).toBeDefined(); expect(controller.state).toStrictEqual({ - backupHashes: [], + socialBackupsMetadata: [], }); }); @@ -504,6 +505,7 @@ describe('SeedlessOnboardingController', () => { await controller.createToprfKeyAndBackupSeedPhrase( MOCK_PASSWORD, MOCK_SEED_PHRASE, + MOCK_KEYRING_ID, ); expect(mockSecretDataAdd.isDone()).toBe(true); @@ -565,6 +567,7 @@ describe('SeedlessOnboardingController', () => { await controller.createToprfKeyAndBackupSeedPhrase( MOCK_PASSWORD, MOCK_SEED_PHRASE, + MOCK_KEYRING_ID, ); expect(mockSecretDataAdd.isDone()).toBe(true); @@ -616,6 +619,7 @@ describe('SeedlessOnboardingController', () => { controller.createToprfKeyAndBackupSeedPhrase( MOCK_PASSWORD, MOCK_SEED_PHRASE, + MOCK_KEYRING_ID, ), ).rejects.toThrow('Failed to create local encryption key'); @@ -631,6 +635,7 @@ describe('SeedlessOnboardingController', () => { controller.createToprfKeyAndBackupSeedPhrase( MOCK_PASSWORD, MOCK_SEED_PHRASE, + MOCK_KEYRING_ID, ), ).rejects.toThrow( SeedlessOnboardingControllerError.MissingAuthUserInfo, @@ -649,6 +654,7 @@ describe('SeedlessOnboardingController', () => { controller.createToprfKeyAndBackupSeedPhrase( MOCK_PASSWORD, MOCK_SEED_PHRASE, + MOCK_KEYRING_ID, ), ).rejects.toThrow( SeedlessOnboardingControllerError.InsufficientAuthToken, @@ -681,6 +687,7 @@ describe('SeedlessOnboardingController', () => { controller.createToprfKeyAndBackupSeedPhrase( MOCK_PASSWORD, MOCK_SEED_PHRASE, + MOCK_KEYRING_ID, ), ).rejects.toThrow( SeedlessOnboardingControllerError.FailedToPersistOprfKey, @@ -711,6 +718,7 @@ describe('SeedlessOnboardingController', () => { controller.createToprfKeyAndBackupSeedPhrase( MOCK_PASSWORD, MOCK_SEED_PHRASE, + MOCK_KEYRING_ID, ), ).rejects.toThrow( SeedlessOnboardingControllerError.FailedToEncryptAndStoreSeedPhraseBackup, @@ -834,49 +842,6 @@ describe('SeedlessOnboardingController', () => { ); }); - it('should be able to overwrite the initial backupHashes', async () => { - await withController( - { - state: getMockInitialControllerState({ - withMockAuthenticatedUser: true, - }), - }, - async ({ controller, toprfClient }) => { - const MOCK_SEED_PHRASES = [ - stringToBytes('seedPhrase1'), - stringToBytes('seedPhrase2'), - stringToBytes('seedPhrase3'), - ]; - - mockRecoverEncKey(toprfClient, MOCK_PASSWORD); - - jest - .spyOn(toprfClient, 'fetchAllSecretDataItems') - .mockResolvedValueOnce( - SeedPhraseMetadata.fromBatchSeedPhrases(MOCK_SEED_PHRASES).map( - (metadata) => metadata.toBytes(), - ), - ); - - await controller.fetchAllSeedPhrases(MOCK_PASSWORD); - - // sort the seed phrases in descending order to make the first seed phrase the latest item in the array - const SORTED_MOCK_SEED_PHRASES = [ - stringToBytes('seedPhrase3'), - stringToBytes('seedPhrase2'), - stringToBytes('seedPhrase1'), - ]; - - const expectedBackupHashes = SORTED_MOCK_SEED_PHRASES.map( - (seedPhrase) => keccak256AndHexify(seedPhrase), - ); - expect(controller.state.backupHashes).toStrictEqual( - expectedBackupHashes, - ); - }, - ); - }); - it('should be able to restore seed phrase backup without groupedAuthConnectionId', async () => { await withController( { @@ -996,7 +961,7 @@ describe('SeedlessOnboardingController', () => { await expect( controller.fetchAllSeedPhrases(MOCK_PASSWORD), ).rejects.toThrow( - SeedlessOnboardingControllerError.InvalidSeedPhraseMetadata, + SeedlessOnboardingControllerError.FailedToFetchSeedPhraseMetadata, ); }, ); @@ -1109,6 +1074,7 @@ describe('SeedlessOnboardingController', () => { await controller.createToprfKeyAndBackupSeedPhrase( MOCK_PASSWORD, MOCK_SEED_PHRASE, + MOCK_KEYRING_ID, ); // verify the vault data before update password @@ -1177,6 +1143,7 @@ describe('SeedlessOnboardingController', () => { await controller.createToprfKeyAndBackupSeedPhrase( MOCK_PASSWORD, MOCK_SEED_PHRASE, + MOCK_KEYRING_ID, ); // verify the vault data before update password @@ -1334,6 +1301,7 @@ describe('SeedlessOnboardingController', () => { await controller.createToprfKeyAndBackupSeedPhrase( MOCK_PASSWORD, MOCK_SEED_PHRASE, + MOCK_KEYRING_ID, ); // mock the recover enc key @@ -1401,7 +1369,11 @@ describe('SeedlessOnboardingController', () => { // mock the secret data add const mockSecretDataAdd = handleMockSecretDataAdd(); await expect( - controller.createToprfKeyAndBackupSeedPhrase('', MOCK_SEED_PHRASE), + controller.createToprfKeyAndBackupSeedPhrase( + '', + MOCK_SEED_PHRASE, + MOCK_KEYRING_ID, + ), ).rejects.toThrow( SeedlessOnboardingControllerError.InvalidEmptyPassword, ); diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index f7de5b1eaa..5745042198 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -33,6 +33,7 @@ import type { SeedlessOnboardingControllerState, VaultData, AuthenticatedUserDetails, + SocialBackupsMetadata, } from './types'; const log = createModuleLogger(projectLogger, controllerName); @@ -44,7 +45,7 @@ const log = createModuleLogger(projectLogger, controllerName); */ export function getDefaultSeedlessOnboardingControllerState(): SeedlessOnboardingControllerState { return { - backupHashes: [], + socialBackupsMetadata: [], }; } @@ -61,7 +62,7 @@ const seedlessOnboardingMetadata: StateMetadata { // to make sure that fail fast, // assert that the user is authenticated before creating the TOPRF key and backing up the seed phrase @@ -193,11 +196,12 @@ export class SeedlessOnboardingController extends BaseController< }); // encrypt and store the seed phrase backup - await this.#encryptAndStoreSeedPhraseBackup( + await this.#encryptAndStoreSeedPhraseBackup({ + keyringId, seedPhrase, encKey, authKeyPair, - ); + }); // store/persist the encryption key shares // We store the seed phrase metadata in the metadata store first. If this operation fails, @@ -240,11 +244,7 @@ export class SeedlessOnboardingController extends BaseController< }); } - return this.#withPersistedSeedPhraseBackupsState(() => - Promise.resolve( - SeedPhraseMetadata.parseSeedPhraseFromMetadataStore(secretData), - ), - ); + return SeedPhraseMetadata.parseSeedPhraseFromMetadataStore(secretData); } catch (error) { log('Error fetching seed phrase metadata', error); throw new Error( @@ -282,6 +282,29 @@ export class SeedlessOnboardingController extends BaseController< } } + /** + * Update the backup metadata state for the given seed phrase. + * + * @param keyringId - The keyring id of the backup seed phrase. + * @param seedPhrase - The seed phrase to update the backup metadata for. + */ + updateBackupMetadataState(keyringId: string, seedPhrase: Uint8Array) { + const newBackupMetadata = { + id: keyringId, + hash: keccak256AndHexify(seedPhrase), + }; + + const existingBackup = this.state.socialBackupsMetadata.find( + (backup) => backup.id === keyringId, + ); + + if (!existingBackup) { + this.update((state) => { + state.socialBackupsMetadata.push(newBackupMetadata); + }); + } + } + /** * Get the hash of the seed phrase backup for the given seed phrase, from the state. * @@ -290,9 +313,13 @@ export class SeedlessOnboardingController extends BaseController< * @param seedPhrase - The seed phrase to get the hash of. * @returns A promise that resolves to the hash of the seed phrase backup. */ - getSeedPhraseBackupHash(seedPhrase: Uint8Array): string | undefined { + getSeedPhraseBackupHash( + seedPhrase: Uint8Array, + ): SocialBackupsMetadata | undefined { const seedPhraseHash = keccak256AndHexify(seedPhrase); - return this.state.backupHashes.find((hash) => hash === seedPhraseHash); + return this.state.socialBackupsMetadata.find( + (backup) => backup.hash === seedPhraseHash, + ); } /** @@ -378,18 +405,23 @@ export class SeedlessOnboardingController extends BaseController< /** * Encrypt and store the seed phrase backup in the metadata store. * - * @param seedPhrase - The seed phrase to store. - * @param encKey - The encryption key to store. - * @param authKeyPair - The authentication key pair to store. + * @param params - The parameters for encrypting and storing the seed phrase backup. + * @param params.keyringId - The keyring id of the backup seed phrase. + * @param params.seedPhrase - The seed phrase to store. + * @param params.encKey - The encryption key to store. + * @param params.authKeyPair - The authentication key pair to store. * * @returns A promise that resolves to the success of the operation. */ - async #encryptAndStoreSeedPhraseBackup( - seedPhrase: Uint8Array, - encKey: Uint8Array, - authKeyPair: KeyPair, - ): Promise { + async #encryptAndStoreSeedPhraseBackup(params: { + keyringId: string; + seedPhrase: Uint8Array; + encKey: Uint8Array; + authKeyPair: KeyPair; + }): Promise { try { + const { keyringId, seedPhrase, encKey, authKeyPair } = params; + const seedPhraseMetadata = new SeedPhraseMetadata(seedPhrase); const secretData = seedPhraseMetadata.toBytes(); await this.#withPersistedSeedPhraseBackupsState(async () => { @@ -398,7 +430,10 @@ export class SeedlessOnboardingController extends BaseController< secretData, authKeyPair, }); - return seedPhrase; + return { + id: keyringId, + seedPhrase, + }; }); } catch (error) { log('Error encrypting and storing seed phrase backup', error); @@ -467,40 +502,49 @@ export class SeedlessOnboardingController extends BaseController< * This is a wrapper method that should be used around any operation that creates * or restores seed phrases to ensure their hashes are properly tracked. * - * @param createOrRestoreSeedPhraseBackupCallback - function that returns either a single seed phrase + * @param createSeedPhraseBackupCallback - function that returns either a single seed phrase * or an array of seed phrases as Uint8Array(s) * @returns The original seed phrase(s) returned by the callback * @throws Rethrows any errors from the callback with additional logging */ async #withPersistedSeedPhraseBackupsState< - Result extends Uint8Array | Uint8Array[], - >( - createOrRestoreSeedPhraseBackupCallback: () => Promise, - ): Promise { + Result extends + | { id: string; seedPhrase: Uint8Array } + | { id: string; seedPhrase: Uint8Array }[], + >(createSeedPhraseBackupCallback: () => Promise): Promise { try { - const backedUpSeedPhrases = - await createOrRestoreSeedPhraseBackupCallback(); - let backedUpHashB64Strings: string[] = []; - - if (Array.isArray(backedUpSeedPhrases)) { - backedUpHashB64Strings = backedUpSeedPhrases.map((seedPhrase) => - keccak256AndHexify(seedPhrase), - ); + const existingBackUpMetadata = this.state.socialBackupsMetadata; + + const backUps = await createSeedPhraseBackupCallback(); + let newBackupMetadataArr: SocialBackupsMetadata[] = []; + + if (Array.isArray(backUps)) { + newBackupMetadataArr = backUps.map((seedPhrase) => ({ + id: seedPhrase.id, + hash: keccak256AndHexify(seedPhrase.seedPhrase), + })); } else { - backedUpHashB64Strings = [keccak256AndHexify(backedUpSeedPhrases)]; + newBackupMetadataArr = [ + { + id: backUps.id, + hash: keccak256AndHexify(backUps.seedPhrase), + }, + ]; } - const existingBackedUpHashes = this.state.backupHashes; - const uniqueHashesSet = new Set([ - ...existingBackedUpHashes, - ...backedUpHashB64Strings, - ]); + // filter out the backed up metadata that already exists in the state + const filteredBackedUpMetadata = newBackupMetadataArr.filter( + (newBackup) => + !existingBackUpMetadata.find( + (existingBackup) => existingBackup.id === newBackup.id, + ), + ); this.update((state) => { - state.backupHashes = Array.from(uniqueHashesSet); + state.socialBackupsMetadata = filteredBackedUpMetadata; }); - return backedUpSeedPhrases; + return backUps; } catch (error) { log('Error persisting seed phrase backups', error); throw error; diff --git a/packages/seedless-onboarding-controller/src/index.ts b/packages/seedless-onboarding-controller/src/index.ts index 45ace53783..f62d798dbc 100644 --- a/packages/seedless-onboarding-controller/src/index.ts +++ b/packages/seedless-onboarding-controller/src/index.ts @@ -4,6 +4,7 @@ export { } from './SeedlessOnboardingController'; export type { AuthenticatedUserDetails, + SocialBackupsMetadata, SeedlessOnboardingControllerState, SeedlessOnboardingControllerOptions, SeedlessOnboardingControllerMessenger, diff --git a/packages/seedless-onboarding-controller/src/types.ts b/packages/seedless-onboarding-controller/src/types.ts index d4535a3d7b..5b42c535dc 100644 --- a/packages/seedless-onboarding-controller/src/types.ts +++ b/packages/seedless-onboarding-controller/src/types.ts @@ -7,6 +7,11 @@ import type { MutexInterface } from 'async-mutex'; import type { controllerName, Web3AuthNetwork } from './constants'; +export type SocialBackupsMetadata = { + id: string; + hash: string; +}; + export type AuthenticatedUserDetails = { /** * The node auth tokens from OAuth User authentication after the Social login. @@ -44,7 +49,7 @@ export type SeedlessOnboardingControllerState = * * This is to facilitate the UI to display backup status of the seed phrases. */ - backupHashes: string[]; + socialBackupsMetadata: SocialBackupsMetadata[]; }; // Actions diff --git a/packages/seedless-onboarding-controller/toprf-secure-backup.tgz b/packages/seedless-onboarding-controller/toprf-secure-backup.tgz index 60d918fcc605a8d2993899c79a949eae8bee78e3..2f345b13ddb21abe804740f98adf7e051c7dc98e 100644 GIT binary patch delta 72400 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

Dxig#`}zk7q|D0B70@9r>&V6FD-2+-P_cW-74VH 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 Date: Wed, 23 Apr 2025 15:19:46 +0800 Subject: [PATCH 058/147] test: updated tests for SocialBackupMetadata state --- .../src/SeedlessOnboardingController.test.ts | 51 +++++++++++++ .../src/SeedlessOnboardingController.ts | 74 ++++++++----------- 2 files changed, 83 insertions(+), 42 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts index fc51133f9a..dab67d5d27 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts @@ -35,6 +35,7 @@ import { } from '../tests/mocks/toprf'; import { MockToprfEncryptorDecryptor } from '../tests/mocks/toprfEncryptor'; import MockVaultEncryptor from '../tests/mocks/vaultEncryptor'; +import { keccak256AndHexify } from '@metamask/auth-network-utils'; type WithControllerCallback = ({ controller, @@ -1052,6 +1053,56 @@ describe('SeedlessOnboardingController', () => { }); }); + describe('updateBackupMetadataState', () => { + it('should be able to update the backup metadata state', async () => { + await withController( + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + }), + }, + async ({ controller }) => { + controller.updateBackupMetadataState( + MOCK_KEYRING_ID, + MOCK_SEED_PHRASE, + ); + const MOCK_SEED_PHRASE_HASH = keccak256AndHexify(MOCK_SEED_PHRASE); + expect(controller.state.socialBackupsMetadata).toStrictEqual([ + { id: MOCK_KEYRING_ID, hash: MOCK_SEED_PHRASE_HASH }, + ]); + }, + ); + }); + + it('should not update the backup metadata state if the provided keyringId is already in the state', async () => { + await withController( + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + }), + }, + async ({ controller }) => { + controller.updateBackupMetadataState( + MOCK_KEYRING_ID, + MOCK_SEED_PHRASE, + ); + const MOCK_SEED_PHRASE_HASH = keccak256AndHexify(MOCK_SEED_PHRASE); + expect(controller.state.socialBackupsMetadata).toStrictEqual([ + { id: MOCK_KEYRING_ID, hash: MOCK_SEED_PHRASE_HASH }, + ]); + + controller.updateBackupMetadataState( + MOCK_KEYRING_ID, + MOCK_SEED_PHRASE, + ); + expect(controller.state.socialBackupsMetadata).toStrictEqual([ + { id: MOCK_KEYRING_ID, hash: MOCK_SEED_PHRASE_HASH }, + ]); + }, + ); + }); + }); + describe('changePassword', () => { const MOCK_PASSWORD = 'mock-password'; const NEW_MOCK_PASSWORD = 'new-mock-password'; diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index 5745042198..7df67ef7fc 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -294,15 +294,7 @@ export class SeedlessOnboardingController extends BaseController< hash: keccak256AndHexify(seedPhrase), }; - const existingBackup = this.state.socialBackupsMetadata.find( - (backup) => backup.id === keyringId, - ); - - if (!existingBackup) { - this.update((state) => { - state.socialBackupsMetadata.push(newBackupMetadata); - }); - } + this.#updateSocialBackupsMetadata(newBackupMetadata); } /** @@ -507,42 +499,23 @@ export class SeedlessOnboardingController extends BaseController< * @returns The original seed phrase(s) returned by the callback * @throws Rethrows any errors from the callback with additional logging */ - async #withPersistedSeedPhraseBackupsState< - Result extends - | { id: string; seedPhrase: Uint8Array } - | { id: string; seedPhrase: Uint8Array }[], - >(createSeedPhraseBackupCallback: () => Promise): Promise { + async #withPersistedSeedPhraseBackupsState( + createSeedPhraseBackupCallback: () => Promise<{ + id: string; + seedPhrase: Uint8Array; + }>, + ): Promise<{ + id: string; + seedPhrase: Uint8Array; + }> { try { - const existingBackUpMetadata = this.state.socialBackupsMetadata; - const backUps = await createSeedPhraseBackupCallback(); - let newBackupMetadataArr: SocialBackupsMetadata[] = []; - - if (Array.isArray(backUps)) { - newBackupMetadataArr = backUps.map((seedPhrase) => ({ - id: seedPhrase.id, - hash: keccak256AndHexify(seedPhrase.seedPhrase), - })); - } else { - newBackupMetadataArr = [ - { - id: backUps.id, - hash: keccak256AndHexify(backUps.seedPhrase), - }, - ]; - } - - // filter out the backed up metadata that already exists in the state - const filteredBackedUpMetadata = newBackupMetadataArr.filter( - (newBackup) => - !existingBackUpMetadata.find( - (existingBackup) => existingBackup.id === newBackup.id, - ), - ); + const newBackupMetadata = { + id: backUps.id, + hash: keccak256AndHexify(backUps.seedPhrase), + }; - this.update((state) => { - state.socialBackupsMetadata = filteredBackedUpMetadata; - }); + this.#updateSocialBackupsMetadata(newBackupMetadata); return backUps; } catch (error) { @@ -551,6 +524,23 @@ export class SeedlessOnboardingController extends BaseController< } } + #updateSocialBackupsMetadata(newSocialBackupMetadata: SocialBackupsMetadata) { + // filter out the backed up metadata that already exists in the state + // to prevent duplicates + const existingBackupsMetadata = this.state.socialBackupsMetadata.find( + (backup) => backup.id === newSocialBackupMetadata.id, + ); + + if (!existingBackupsMetadata) { + this.update((state) => { + state.socialBackupsMetadata = [ + ...state.socialBackupsMetadata, + newSocialBackupMetadata, + ]; + }); + } + } + /** * Create a new vault with the given authentication data. * From fc2a39739eff5e5c07e6d7a7c30f3695e9b1cf8d Mon Sep 17 00:00:00 2001 From: lwin Date: Wed, 23 Apr 2025 15:25:56 +0800 Subject: [PATCH 059/147] feat: add AuthConnection and SocialLoginEmail for SeedlessOnboardingController state --- .../src/SeedlessOnboardingController.test.ts | 21 ++++++++++++++-- .../src/SeedlessOnboardingController.ts | 25 +++++++++++++++++-- .../src/constants.ts | 6 +++++ .../src/index.ts | 1 + .../src/types.ts | 16 +++++++++++- 5 files changed, 64 insertions(+), 5 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts index dab67d5d27..49411177d6 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts @@ -1,3 +1,4 @@ +import { keccak256AndHexify } from '@metamask/auth-network-utils'; import { TOPRFError, type ChangeEncryptionKeyResult, @@ -11,6 +12,7 @@ import { base64ToBytes, bytesToBase64, stringToBytes } from '@metamask/utils'; import { Web3AuthNetwork, SeedlessOnboardingControllerError, + AuthConnection, } from './constants'; import { RecoveryError } from './errors'; import { @@ -35,7 +37,6 @@ import { } from '../tests/mocks/toprf'; import { MockToprfEncryptorDecryptor } from '../tests/mocks/toprfEncryptor'; import MockVaultEncryptor from '../tests/mocks/vaultEncryptor'; -import { keccak256AndHexify } from '@metamask/auth-network-utils'; type WithControllerCallback = ({ controller, @@ -277,8 +278,10 @@ async function decryptVault(vault: string, password: string) { }; } +const authConnection = AuthConnection.Google; +const socialLoginEmail = 'user-test@gmail.com'; const authConnectionId = 'seedless-onboarding'; -const groupedAuthConnectionId = 'google'; +const groupedAuthConnectionId = 'auth-server'; const userId = 'user-test@gmail.com'; const idTokens = ['idToken']; @@ -372,6 +375,8 @@ describe('SeedlessOnboardingController', () => { idTokens, authConnectionId, userId, + authConnection, + socialLoginEmail, }); expect(authResult).toBeDefined(); @@ -384,6 +389,8 @@ describe('SeedlessOnboardingController', () => { ); expect(controller.state.authConnectionId).toBe(authConnectionId); expect(controller.state.userId).toBe(userId); + expect(controller.state.authConnection).toBe(authConnection); + expect(controller.state.socialLoginEmail).toBe(socialLoginEmail); }); }); @@ -398,6 +405,8 @@ describe('SeedlessOnboardingController', () => { idTokens, authConnectionId, userId, + authConnection, + socialLoginEmail, }); expect(authResult).toBeDefined(); @@ -410,6 +419,8 @@ describe('SeedlessOnboardingController', () => { ); expect(controller.state.authConnectionId).toBe(authConnectionId); expect(controller.state.userId).toBe(userId); + expect(controller.state.authConnection).toBe(authConnection); + expect(controller.state.socialLoginEmail).toBe(socialLoginEmail); }); }); @@ -426,6 +437,8 @@ describe('SeedlessOnboardingController', () => { authConnectionId, userId, groupedAuthConnectionId, + authConnection, + socialLoginEmail, }); expect(authResult).toBeDefined(); @@ -468,6 +481,8 @@ describe('SeedlessOnboardingController', () => { authConnectionId, groupedAuthConnectionId, userId, + authConnection, + socialLoginEmail, }), ).rejects.toThrow( SeedlessOnboardingControllerError.AuthenticationError, @@ -554,6 +569,8 @@ describe('SeedlessOnboardingController', () => { idTokens, authConnectionId, userId, + authConnection, + socialLoginEmail, }); const { encKey, authKeyPair } = mockcreateLocalKey( diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index 7df67ef7fc..3bac8d24c5 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -18,6 +18,7 @@ import { import { Mutex } from 'async-mutex'; import { + type AuthConnection, controllerName, SeedlessOnboardingControllerError, Web3AuthNetwork, @@ -70,6 +71,10 @@ const seedlessOnboardingMetadata: StateMetadata { return remove0x(keccak256AndHexify(stringToBytes(idToken))); }); @@ -165,6 +184,8 @@ export class SeedlessOnboardingController extends BaseController< state.authConnectionId = authConnectionId; state.groupedAuthConnectionId = groupedAuthConnectionId; state.userId = userId; + state.authConnection = authConnection; + state.socialLoginEmail = socialLoginEmail; }); return authenticationResult; } catch (error) { diff --git a/packages/seedless-onboarding-controller/src/constants.ts b/packages/seedless-onboarding-controller/src/constants.ts index 01ff0136e2..3a6b192078 100644 --- a/packages/seedless-onboarding-controller/src/constants.ts +++ b/packages/seedless-onboarding-controller/src/constants.ts @@ -5,6 +5,12 @@ export enum Web3AuthNetwork { Devnet = 'sapphire_devnet', } +// user social login provider +export enum AuthConnection { + Google = 'google', + Apple = 'apple', +} + export enum SeedlessOnboardingControllerError { AuthenticationError = `${controllerName} - Authentication error`, MissingAuthUserInfo = `${controllerName} - Missing authenticated user information`, diff --git a/packages/seedless-onboarding-controller/src/index.ts b/packages/seedless-onboarding-controller/src/index.ts index f62d798dbc..f078f4a18a 100644 --- a/packages/seedless-onboarding-controller/src/index.ts +++ b/packages/seedless-onboarding-controller/src/index.ts @@ -16,5 +16,6 @@ export type { export { Web3AuthNetwork, SeedlessOnboardingControllerError, + AuthConnection, } from './constants'; export * from './errors'; diff --git a/packages/seedless-onboarding-controller/src/types.ts b/packages/seedless-onboarding-controller/src/types.ts index 5b42c535dc..83befb5b01 100644 --- a/packages/seedless-onboarding-controller/src/types.ts +++ b/packages/seedless-onboarding-controller/src/types.ts @@ -5,7 +5,11 @@ import type { NodeAuthTokens } from '@metamask/toprf-secure-backup'; import type { Json } from '@metamask/utils'; import type { MutexInterface } from 'async-mutex'; -import type { controllerName, Web3AuthNetwork } from './constants'; +import type { + AuthConnection, + controllerName, + Web3AuthNetwork, +} from './constants'; export type SocialBackupsMetadata = { id: string; @@ -13,6 +17,11 @@ export type SocialBackupsMetadata = { }; export type AuthenticatedUserDetails = { + /** + * Type of social login provider. + */ + authConnection: AuthConnection; + /** * The node auth tokens from OAuth User authentication after the Social login. * @@ -34,6 +43,11 @@ export type AuthenticatedUserDetails = { * The user email or ID from Social login. */ userId: string; + + /** + * The user email from Social login. + */ + socialLoginEmail: string; }; // State From 41044089de9a32713b80d0bbbe9940ac93228237 Mon Sep 17 00:00:00 2001 From: lwin Date: Wed, 23 Apr 2025 16:57:57 +0800 Subject: [PATCH 060/147] chores: make 'socialLoginEmail' as optional param in Authenticate --- .../src/SeedlessOnboardingController.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index 3bac8d24c5..baa7120143 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -155,7 +155,7 @@ export class SeedlessOnboardingController extends BaseController< authConnectionId: string; userId: string; groupedAuthConnectionId?: string; - socialLoginEmail: string; + socialLoginEmail?: string; }) { try { const { From 92525ee78f060cc7c7dec5bdc34c1b709a5b4faf Mon Sep 17 00:00:00 2001 From: lwin Date: Wed, 23 Apr 2025 21:38:37 +0800 Subject: [PATCH 061/147] feat: updated toprf package and fixed RatelimitError handling --- .../src/SeedlessOnboardingController.test.ts | 6 ++---- .../src/errors.ts | 5 +---- .../toprf-secure-backup.tgz | Bin 101054 -> 100678 bytes yarn.lock | 4 ++-- 4 files changed, 5 insertions(+), 10 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts index 49411177d6..e24d5215ca 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts @@ -996,9 +996,8 @@ describe('SeedlessOnboardingController', () => { jest.spyOn(toprfClient, 'recoverEncKey').mockRejectedValueOnce( new TOPRFError(1009, 'Rate limit exceeded', { rateLimitDetails: { - remainingTime: 10, - message: 'Rate limit exceeded', - isPermanent: false, + remainingTime: 300, + message: 'Rate limit in effect', }, }), ); @@ -1011,7 +1010,6 @@ describe('SeedlessOnboardingController', () => { { remainingTime: 10, message: 'Rate limit exceeded', - isPermanent: false, }, ), ); diff --git a/packages/seedless-onboarding-controller/src/errors.ts b/packages/seedless-onboarding-controller/src/errors.ts index 05a4563b6d..0b42290f18 100644 --- a/packages/seedless-onboarding-controller/src/errors.ts +++ b/packages/seedless-onboarding-controller/src/errors.ts @@ -79,14 +79,11 @@ export class RecoveryError extends Error { 'remainingTime' in error.meta.rateLimitDetails && typeof error.meta.rateLimitDetails.remainingTime === 'number' && 'message' in error.meta.rateLimitDetails && - typeof error.meta.rateLimitDetails.message === 'string' && - 'isPermanent' in error.meta.rateLimitDetails && - typeof error.meta.rateLimitDetails.isPermanent === 'boolean' + typeof error.meta.rateLimitDetails.message === 'string' ) { return { remainingTime: error.meta.rateLimitDetails.remainingTime, message: error.meta.rateLimitDetails.message, - isPermanent: error.meta.rateLimitDetails.isPermanent, }; } return undefined; diff --git a/packages/seedless-onboarding-controller/toprf-secure-backup.tgz b/packages/seedless-onboarding-controller/toprf-secure-backup.tgz index 2f345b13ddb21abe804740f98adf7e051c7dc98e..4470e67993949854498e03aa48eb96428c6a55e6 100644 GIT binary patch delta 96196 zcma(2b9Cok*f9LIGqpMG)V8f@r<&TfZM&&$Ol{lN)V6I-ZGYeS-OqW>d!PT#KgqR| zoxPH^vXbkQeWg1YYA69J4i{*ABu5<{wFyX?Sov)&5wp+v=s<*)pdSy0=%=|?0s73| zn&JJ1mTwIGtgrOb&Be{dE5(4a?kI@l$G&`_&KQivS z&@IOT2ghCi1}2;~*lQ#Ev!N}pAn@n?;Nxij@$t7-_js~>cQ=#6xw|3ToG!h~&;m?G zbqy_D9bFv_OO6eFfM~fFU)vqEY@Kj;YXlLk2if;7e+Bug01C|T*2!4p@BR~Sassc9 zCdaSX+*^w5&suu1EOWSTv(rf<0c= zkLa#XvfJ$J_K)#V_oADbEbc+p;(d_G^eF+J+f`9i=1osG&|X&%1!}rz%JO`l-uGDK z1!w%|#v0Hq*bUlW9}(yg|6>TiR@PM8eWAFH9SGclU&!BE>56qu`3< zLk=<%w-GtkMMsq3Y=typjOYgoDhdBvkO!+hgFM_4eH|5b!o??5y*cvLJgUP1@6iXV z45L_Q10p#Tz>q@tmI#kbhc}N0FV!07e~g5y4({RS^JUrB5mgoq#lr#Z#Ydz7_B~f1 z6G0w-E=nZx~9P&m+`h>-{5EC`TE-48iOf zuCXF=p$B@yz{))}amPgkIjGe!d;EmGX><_Jy!M#8C^?N`O zhY4$ws0OKXliKj&g)Em^d@x}@mx|snC=6U$xF7B|$HgG_4P2qSq9>1eCHqD&YUl65 z_J{ep1s{o&K643bF5?F{VDH{8nC6G?cwpfXUS@R$is{VoLe<0~0e@ZE@oT|i1+U!m zV7DFs*=)k@AK+Izv#5Mr9>_>fV0`Y#y7x#tGBY0^4+>Au*mwl&o;A8X=PtZ5Grab? z-52*rkAiO(uv}bx;EY~1o|KzNT-*?)KPAhTfBYKIb%~uBJA!ETV)UZC%82gT8U@d9 zb909vaz~7n^_*HyxrXWV^}2t(ZiU|wgvP@I2>uNh;|cw?skRxIXfneK1|6FFruDP~ zfhQ2ksF$CQbA2&-*H5Y}u!Gm_3oNVyzF+>G@wszsj9>@6?xX&jNeYI`H31i+!IcWS z^A2t6_Fx;5T((;*4%PQEeD|l$NZq{K9dN%XiK}Zc_I_?YF7ALS3G_@nf~-P~?FS&H zLk29?b2yCHODwb|9dTf)|3^}xo8K+IGc4wSCDFskF6!sog##x!43Expy<061#Zo}Q z-{@JM}<>bf)=wpKLk>a^>(H~_#WZB^>mgXvUwOSD8E4a zojeH#miwQ3(L=(VH`hY#SOej_c);FiuEZeMTSMNCfye9cHood4mi|rfbga@ ze?30yt!rqhJ%QG7t*joNbA}t3!hif!9fhwNBGy%9K<;D}xYiZhU5QLs7rla_zuluy zf4(1$)Z6XtnSs#jP3FyX?;r}NAZXRHWH;|KQHa?Z(uK$de>@$-fBnjNqtE1i{5qo&=F()(ZClu5QErYJfrsh6$p+PWa2z{>~=x zZt!k_$oDn=$z)G#Ywyc46V;(o`Yp9=TkSw;?(XMlA8!6bTY>;=fdrqk+&*T~33cK= zBstKJjClRko@82P26Z$z6eFMa7LAdl9Jve43nuY)uMpgR3N$$CFTe%M*agN1DGqAr zNkE|jjo!+iLjs1)6&*vHF^a|_I*rjFnQeu1Ye1g&Yp6~& zOuK^#Umwc+R8PLE7j9S-pWDIV&$8V%Sy*hNxj(W#uYrNZDHusWkrs+fZ2M}&P?q!* z9qyM8?rejGL}rzUw9+53G}G7^MsKX3Pny{%DWWm=hH7V%Z)4t2rCFPJOJa! znfdUI(V8H`%Q?LceYChV{h2<-aA#P0(c1+FbT>7NE+R8u?A*n4x5U!$nSKa~H+z$+ zHX`#m&LUCM;+0fL(mXQ%1cii`<-9A%(QtuV*IruAHg$g75QD}Q2Xs4bm>R5*>B4?rCjg5eI-ki%q*`_u<5BbY7|cBrr4a7C{6idA{% zoWOX+0JD;mC|g*n&H~?%YgB>#!Ekn|g&`w0_C10-)W$Q%NucOb97R=1F`c}GcACT+p%S&t#N*JceG})(`5#=T+`x6=+iB_B zkx*{jZePrn=Ni2^a{CK9=Fo)ZFJBXJH7^RO~0v37d)B4o}%Tf4m_iN|7_ zM$Y9eWK^{WByctJF6+0WyMGJ17+$Sbk(p?dj^silI-idPQ^6QvD37r^lPhueOlG>i zdwmSxo(F(lGz*2?Wb6qj$eP+r+<>{GZCC^XIobF*sA*?a#@LM;5@0WDhL(>M6Ql7l zDrJhL(nGOa;Mgh!jIVx~6#7)AW>b9z}X78&`s5ueAiSxe=a)KJXB z{@1JY%a+D=#Urzc13($ZeAD%=Fc7{M?W(*HZjVpRmsgF-fEqtyalPp;r8fg^8|SAv z%a>kb=QGihfiOf-Hi!BpMys_HG;g?E(ToI$y|WxyUl9x3hFJ_n24@!k6s#R;u3tTZ z0iQ6_euU5Aa*YiVMN-PLlxAkSK^*Hz%D6p$CWs(rC(&OE@BkyfP*t+e?^~lqhSnqd z!$h|mpTV5s9-~KO*^E&LgQn7Ijp6PKgJ8&PEDD(AFkD$=Nz7je88)zE1?)~@j1;xH zAdDE&za~yre4!EC3FYxOC5XBnP3*LUOISR(om1w~$uLrqx!iLl8q~0jW4Pgw7j3Nn z5)-C+BSvcHR}DCXwuBihhl#2YvK9#X;1gy?!Re9Dsf*H zR<(b_>UIleSlL!cHyesK#L1QW9ks@(^ye16NK-8-G8L#nnLTW;H8Oyv7XN??Wq+2F zu#xg?h`0U)zpod|!thBH5l zCU3+U6Aq|A)d_-MzIYsD6&y(8HGXd#u&sryj$cIj>4bb8LU5E2>zeXsaN`!r@ey28 zHAi$8rnOMcY@Gzh7V^Z~bafMunGW@%u_uouSoGKDjkXTpy^ebHkxFMgM4!oIos&cs zpFhQvlNagHZ58fw7)Zgs@0W=4v(J1c75Me=9SN{Y8N?^l^X30~9|OI;IS@%>lyXg? z#|`xUFygL4o#G~ApudT*a;j_H!Se#=7#q_xyk&>TLhAh!`2mwAQkSM^U0uKD1J$gm zHn?@b`oa1q1&m(e_8w6|X+>{SLW*)f`;KcsOUA&Xm|=@aO-73G?Vv;1_mr~9YUiO~ z-2vD`q*7U^Zlta`h0Wr{V>p|{It;LVlQx40a_TE3_wsnZV_*H8ud-#`d^K_{KZXr~ zL&s!v%x2D@kV2=YhijVo1yYT5gVKJgjPKkI5c zJJG~^3J}O|`i75$c4F+uVkd)96-aOTE`=%<15o;oQW(w$W#NS=9nvfCVWvCiVSo;- z%_9I0rsrSYT)N)rLNqWMgI>bzK(uk5Ypj)}`g-2q@<#P=cSH-L#}1kgxfZxM;tzV0 zfmRX-nz3@tb6WELy6b`a(P_@PE#w{!Ag@oN96HPp(#o>Rf?5T)4O$ihr}S)uKAI7C z>GLno8y&_{3oT;SP-51qIA>Pv$qJFLh`d8}0oQb-po5$xuM_7Cy)_iyJkiXSJoF|l z16-e0>qK0n?*I=y7LQkz(fu^;0KM!HcAt?@MW}`o%r3Fy9UAjFV%d(@3Ep>0>AC#v z8VAGoI~e9CdYUV@q#DwjKzo!$qZPqmXQn6NiFW48-z{VY$bAH5+wd@YaeD9gmwK5< zpgqECfzB<)Tyz)leIjRH%x5SAw^)f8T7>`#8yHIE0Al-DofC){GQJw3jiH_=McCCm zv^`=ABbR{5nLIjSM~BVC1tdzOP)7T|o`tE{u~cm?fJ-7QG6A3xdJjDr)?*;qDnAf! zr8$C|i46$%ef%!eu@P>Kxa9`8TPtNk5Bv7=W(VJYjy_4?>;63EE{7qH<_;hK=A?+& zD`F~udC_PoF#Fzl$u~_4vkXg|2Bo(22tviP~+=Xc~Rqm#-eB?`Fw z^zH(D$E~6Kkzn9_&VNRfO@bZ9WsEuePdZm6)%T^f(yUF?(l{vxnA@1);61%c%4VLS z>^~Y@=oX0XVsoCZoOpt;;b${5{!_`M?^&+7YonF@nLT*fbv0@|Fv~%^ww(bM@_``_?EUf`{^PjThSPtgVkF-~*STo$hNxbfw-Gf1( z{Gh7zG&c{zK3_>6(!f`&Le_8`=eeWD6}FvB4!b9!&Q0N-<;TQ06np?};OwKioS>uB zoaa1q*;_f!BOu0whcsWW2R0qpFuj$2&5=!fn`yIz_nCycx;l`Q2~REap7NSffqA!UslO@Q*nmv?7bC zk(-EMu0cb##TQ_y-!MISCv&r(NKxBP|9|g;2ADvl9Q3IfRIer`RMV-4^~6G zq{-X#TVBVBH8!$BHOQ05M1ljU&>{k z$bbRY%(%oezHAU^Ie8-p_KpTSxRN!q-6;8dh0*BWoa=wUPdh8&j}6>t-g;+sBX17^}?v`}Eg(p}vOeEICjUaToT1ON4bi8yR;*(q z6GllQ__LNS6``~VbBB=7p{EF|zN6Bn6j!;8Ho51wODYrj_?LNk-F03JNYf#EU&-j_Y)_~f@A<{VEm??u4;?45OKQ|H1 z0>HG$T>KDRgK?yU?lAhA2%D(akMM)POD?bq9iE$mh~89_55vhyzlpPz6Z6&H#7Eb&ySJl|P3X?I*_IH@tj! zNCn+PZ>rQ+hI1ie85z`^>dVHt2J%o$?F}E2o&)b~SkEQuHd&PRr=y>Ozqiv_dN`+{ zRbu6Oa>}P(dVkvex(Y>zz{EdSIS1(z{Xm9>5w3IkQJ0wl55dq7g&f4sJ$(u3e+q2o z;09S-PTYm&QfiJ7Ta7!9&~zPyRz5dzz`6En35fd!DI9F=VU#mn1(4Pd{t5)mr6nr9 zwXqMT*;qxeY8Becyjjg2crD2~7?Mb*joDH7WH+CGu}xk^NOpwZ?A+g|~K6 z9s3$uZqiNGs-;*jj`5bj;NHV|D*@Ooc#aOC=O|fL3LnkS*h;Vx$Lr9_4_v+Hoj&+4-n@P$Jxg=Uv}RoNFC`C5*)10NIdg*D{sOX z(PvR~rzHoEV*91tMq9Pltf{WC&iT*~{%Od?5yuU4=*(4h6FKF{@rcc<{B6*sQ5@Lp z_s4d`4$4fDbD){;#9Be`iQ&BtzflFtaTQaUF8G!3F^@G#QqYcH30ZJ9F{ZsQ?>6-b z<1X7L{uQ~!vwS>VUh8NK0>4)y!Xv!*w{XJqMNj*YDhxxsp|Cmmwm}K)!4FCvT&b7{ ztY4I7_lHhe4 zPUudxu)Pvx01rfqWbS`$VCR!T*gj*orWm2FYN8d$C|zR(S5Jnow$XS=M$FUUvvz%$ zt^W(NI!I!i5)wv({??AMhs82VT|U%$bl)r(Ip zY>9`7Z1A}e@wu7bn`c8nrWQDuW?U(3Y~I_f6welU7}_S^L*l;8gw6B$oBJKi+IN!C zZFqFVi0gSS9f(V~-IWT!ELU)yjborl~P_>xXA@=75wi9_;zGrotX zo0gL*(AGJ6Jgdq;r^E=_oci}@!B}Rv)UgB|p*yA{DF;wikRWuV{IU_0e8b;f6HkNK`M993=fYnizq(Hn<6Q5%O8IGvUJpFN0Y zsk0Fv=-J~5%N_yVTT&0lYrTt2Eh{Vb&nxY0$VS~?R!zS3GnO-LNgI{jF@1Gd zuvsc*5!l}KBk`mYqb!5fmX)M|enUYP- ze0wK<2xd+2hF%tEuzdWodH@HLy0#5XgypKaQ*9&FNukN;{U2`chjO>uaxeRY=+)4O{4+BRW;S&+ z9Q{fQsHmK1r|(q0Q2u!>MXMkA6ed|p_KN9nA;=DsYyiF1p)m;3M!$@bg%f3pb> zyS)ya@Kv!g+~cpwwme=bQ0KJDDPP>4Wj-uZokRtr3V^w?S;=)NZkqwG{c!6rdv*Kq zYF#)oT4tQ$ZbYb(Ee&js(xi#M0+Nj<^o3r(-Q$1Fa+$`fxzmQ7_sdr z>80y*STrB(QH|M&8$5fcE>M!^Q~GAiErcVlzSC2gou&O8I(wY^`?NX!P-TOSknP3! zxq2~2vi-A?UM``5P_FOMCP4Y$SHrnEN51>Ftv%pXk-s_Jq=K)XUxQAmJwoz(Dy&bj z3KjCRwJRNqfsyGsg!6iXahrRu6KQ#eg=tgyd{I4mXXTvA_urq*JIWR%%j`lbpNT%7 zdWg_YQy{ly&c$ayi?`zM!wZOyfb=tw0y;P@=RjK{Rjx`EzMtRcv`=@UHuG~|pARhT z1`JT;Mag!f4nluLbE8h0p#PO+F6f@hH5vYOmu5&y-HB_i4;R$}Jot0{NMFhbns}iQ zMv25w7S1OgrUzN+Js1kv3@ zXfbstXYN9)X+C0SY!K^2pFi9~dGPCPJ6!dF!5CTLw-q-gowC^B)}n4<(O3GQ_2;J; z$i(8BQU9>)K6}wHXy+rM6Q=C28L0Ik@r_jy>SNT=h3_@83blbWkE1eVZ{PRYLPQY z_%w~FkiNLOJe(KWKa()-MYb*WmRwWuE7=i{*es+^$^j4abwNA?5#sSJ z-iw0JUgW6gW8Q0be$MuHX~{Prqh2)6^VXQHd5Wb#Ug?Ab!!&ko&J}}ohaclMoZ3V( zZ#;IE^j0I%#@ET6$BV5baVDO zR>{SCJ(UlSXOtz`@qo};Ewcmh;NKirC&crG`+*2|`le}ckNPgoY2Ukn-X#;Xu>MeQ z>`*$VIO`hURS2?&V@3lw$Jir69uB`rs35Wl7O*^Ox+TKfxWtRc5^UrK9LF8QBmGeW zg66hnJXJ7%I-{7mYj6sym@8;LqW*j%o)f=Y+c(v9q-t_RCG+azZqc&I^Bz5QL@gVs zhzZP%OyggmcakHrgxF5NwEqUo_m$h_`8VGqZSz;^za=$TJdr8B#Fnh90mjdB+rvlq z*_DC_q7&vw2^Y?~O9UdW+|w*D%w^Zo<8k%X`$re`pQl~-)Q1FKk@&(_#R~HcTGe4% zl&F+a4Z5?jNLaxQ{D~S7Cxn_)3`GOq{cqI&*rO4(gQc*l@9NG0gH@^s1oiW;^zc%y z=W*8D9F4-TwVM@3*A?q6wOvw|JYv^ACL9a_<7Jl`*0=P{?pTqZgLe-2leHjhx~D`* zzMl;j0;-(LZXC*QvC&mLpUc_=-wC=7o()6)!k>lnHGlVrvgLE;!E^t}!}TDK@pFZA zBY4Y(%7HtOGj5Us#4hG;o^^Owh9g{DrJ*I4mU<4lw`)&Z&Y#DT{;aL^a6E#3MSn#1 zE3NHbz-jUBkrtj`;Ou1!`C6@Ro^EfAZ%e;*4C&k$q}i=RrxZ0=xQWVbz4pNUI<5pQ zFEuYd_pDptT0Q*BL*>BV?C78|wfuyifB*U@3Ne1`xk0G}M!Zvp!MiPtq&l@QRGvB; zmQ?dYJuR>WEMwM&e{C7^Eo04mSA=g*qH9+6B0Tt|dT>xybl_zTPM2_Xw~}V4tz}sm z8evL2ram%?#TTkg++$OQ$~u5S8&tKkwM%63gMd*1X`7af0E4j;2@cC5A0WBO0 zJiN&LuQ2&opy2hrq@L3510;Vekb(O@SDE*}`fu+i=7GeV`T)K4m5tf!ZBEPgr#8N_ zZ93OPju-Lu%-FepAV*sML6vlzcP*@f!Fbd;ra8X?9zxRdm(-uX2MDzN-07q>v=a3E zBh+9W&OEC7HOtR`**{<1VtZ^|Z?fR@bQBo3X$oHvY+DcG7U|K|HQw*hQcqQciU7Im zlZPfTpNpGlZ7)8YpLdS3CF~(DEx`u5+ro=a^4o(y7D$H(0LH5>jlc*jXiPC^F^`$u z7ye|WykM+Wdb~xZoiw?}mn-k<9yg8_w)d-twNE<+IsdmFg~R7sFbj({ZVr8tTA&*;MgVmD`gN`okJ)!%mY>kzzvS@|Be6u4|`Y<90orFU-%y? zZa?0{xU3b=Z+J$*^?ec9JVI|2`jFmqxw> zwz*dx@yYg$cRYwg>PVUkL?@~m z-B_dDqYEJX$$v~4(oFS3+Tk=+yZ=RFX$ zE)|`DfI<0XhyUCI`WmT$GjMPX~iEdQN!k|rN{Xl;6gW^0pe^?eov`dtn&QK z88@l}VI1V?*rHW9G^w7r5GbKM?VbM47^AUwTn@33riOe=##W_ti8A+bEH3_NI zx&Xzw^d$wM`7V7H7CJPbRzGc-`&6^EtdJN!*%?1Dl`mFb8~IxO2sCC0d=!9vuD?E( zw}ZAdYmPx}e7`Ux6xgp!t@TBB#2P5RDXlD4r;b${4k}aF(D-te%l{_YRHT_?XzWqG z#aOkb(YSTZmb~4tDgDh4$dwy2+sY>=aa=^KW|inJibVL@Y#ahMyJxwKPxr>Bpz`Oe z0+3qEGCQazdhx$!@8~KhIs8M>7#imEGe}51{|Au^xWmq_%vs^$COX>e54AIKKUZSh zm^eS%utEqc!!PZ}320>hXQiD?^W~~-VA{MRcueI{4TBiNgL38rbCZ3S6G@U)&0YHM za}CwwumDi34O)DTz4JJG(ChkqqgVpiPu{xtG+sf(%YaqWzk4RJ`vHpame&CiFSXIwxNuAIt z<}hgE#AfaI%*pu}UYcq*1=V$F`~`XNasTbvLtN1dRs-Pr##>CF>Pr$)Xt01uMeq(- zSSfdVy&*D2ORa>p--XTOY4fC$AhvXwqA5biYk`)Qg=ab3b*qYpcY)Yr-FE>91gcri z{gVe>9tMaW*hZB&0m(Or7xZM*Jn`;4z23QG0t73Vg=fnpP0s9$(t9x`S40>-&LH(i-CH>;*P# zvHVtZ9v`m1UmS-GCn6QU*eBeTrgp;(n(5E~GDqDB6fQrgop zTyi)`dACW$WkkY7M+5w{<8pE(wiA4`d5KQ3oNKe;%P34z_s&IE{)EUfrp&Yj<4H`8 zh%c8%L=rhTL#{(iD zC|4lmvagZE>`6fwaYa;0djj$@{1N0|kk|rd1l_Ym8)eM{1VG0X;W2z+DW{5i`}ox< z>MtDv7PKCRm%xHJyJT;W*6#p^ua1$UsEyRYV&8(nEgCFR=RZrRzcs~hiu_e@*FUm5 zy_`8Pj(H~*9vp@?@Ij9K4rdRgZQw!`R58bWqNSD?oJvzmgC7Z3asF4u;}1X55NcyQ z30S585$oNu4eHWi@qRP#+; zJ_^~_K9bZwZsMqK(uQX1lggCd&1eMZ`>*Eff&SZ2?)#+r1H@IKen}`13GtyHo%EV2 zl@pur{FX7Er@Hk-ltq)rAJ_6Ud&~}ugXq5y_=I^)Nc;Ircy%yS7HnRP45JJ8uXhGu z6kcAVuNr|X;TDIp;8b$Iv+#LBTZS*f&|euHJ`AMeCQxz=8QX73SZg%)N^*sPwh|aw z{QXOZTT@NAcoPo+neu@x%mNe-(q-iLoy@*)g1R2qk$ghGmA|1UOn!ciB)`R4PC5ul zF-ES_L*^PK(eV)8ow3AqDTuEFKkZrmKo%yj&$9pnWQy_4eYuky)|e&e6`ABvJS7UR zr-yvy`I_SQ}X6f2H3B>*oeFRgL9lbPwRxn(d3g^w)X9AmT&8d_6pvydx;7g0a z-`mw^hAeLU;x89Cf-9zb4hhShhNczk@cr;N8Sz-7d1)=(ZD3zz@TU(_whTvTg0eD6@aT8uAaWS_CuoMF{U5Bqpd} zktvhCFeI*7I8^5v0vw(KtCW4&+_o#GZ^t_g2eEwh9M@i?EXBnzPDWv^D55b*rZG6e zB_l)}KY7Dk)5>yvF7DOzyq6BcN$oMLR>>ZSRV+oYIJ7FPu3V;9UQ8w-SzN@bf#e!x zuNx9Y(xQ{a`j+1ILvAWyRw#td5H74$ozZ72|3yue4ed-6DIaV;^F*GoOUHLkB<<@o zuKCZuCAOeB`0KY(Y<~wh9L!T*qe)Sdn22|kY*}%K8_2VpW{!_JU-6k{Ch3%(#E|Fh&_BxY(tt$-qaeh+ct5ss$$we+$#|c1^z_ zV7Zpwwri{K@j^85(1n#wL1>~HM|JNDfsa^-7$wt{-p=d@AgvHb7?)j@n>(Je1%s zO|NoGz69A_R4F%vhZA30ta9igpMgB(b%0` zvDCa8^blZI7=S!WQ#IVD+OqXWtp}~UORNE3?_k7=;{Ji|m^Rj9qK9QnVLkf=8(NIx z5wnKQlFe|~AHzo@;>+~*4P^R280~8VQd0EyH{p)EKXZs|#R8_)?a zc;a+7M+~CuPb_>Fg3(;Ht%W1HyygP!huk~=azDWm+6Lli_s*W1Pk_{$d&le5P01LC=UWBW$sb$9jsggV##lFzb z9S=WKUy&Pr9UTDY+*t`t`zLwR$ zF}vQx1Extu)e>Su)7AshPOOGgDK6}N0l0^oamI=azM_T{i4I~3OEvE*;Z&jZ79UMWeCCW zjkrX#T_U^Y-1P9kflm*FL=?RNZ9B7mN3d(A88c)lYUY!p9uyn4I z&$1Gkl`l5Em3Zo)W+3Z$?K3oG#1|r477ew~X$XXg^-N`O8ddV|N1_Zt)R^OnXgqQw z1OnbYAGkqPF7wNXMZqJ`c(vy+a0>mqVCTZXAvRwwG+-wtYPYUigjxz(3$hR605 zw*)k-In$~%+;eu32OPsp1PGRBq#pT-k6xfv#${KHP8?Y3EAQfx`%U=5Xbc-ROHLea zdFH#Qgq@|Hu~jJksMZt=kFMn-iK{Xk175@?^cCfMUfq#%oPE9~e|6(7JQ$>&`b<{C zPaSTTcczU^EWk^O>%Hktx9+(xD&46R#oJ7IBsKyKF}*1zr8XNs<%*|Lr`|@z3!?54 z(|%%h%ca$;Zai50W=~StaektloBVoYQK%tmP79+?a7*$BrKLhWGPLJ<FFsh|Jm0jPzALgF=(L9w{e4n1uqV< zywGn%8R7ZX=r84qDCgtm5`h-f#caua6Q;!&)Jdk66=|x?fZqFlh@JFR zev{P+UNODO%DEj9tU^a|a{9HD0fD5{30??4(cU)W5j%*FhEEKpdw6w>=K7XEZTtw@ z;i+}aN6*hWwj%jXIM(anq8erY!l9`Vj<0!mF~8hk0j{}v=*Qco{dAPr=h5IUY5Y4) z?l6H`hAB7#Eth>o|JxcS5LZ)pcXD6VodMZAk1cOs;gzzSd+OgAlzN_a!uc#xj|BRc z>pr}<2-zMF02?bCx=PbPi`w7kSSOGAYoHcSIT$R+P=KbDqh>^a4Tm%mylw7VXO5Da z?RoFIZ95F2*vp=NErD3fOc=-`RNtxgj(aHCfLz-gjIAuMvwd`HKyL(zdx0(Fj7f0sj6%u z)SRV>;*HOXzC^7JcS*efTLgt%u&w5hddI2J$iH`)&PKkoVPO6kmrPGEf;|ypTycP-ZsrMT+`YAlGdDy{}>`P`Mj_QWVvJ76D@s7l7|b zHPno0Aad{8t@5v`#O)+mSAm9}*rpT9SZS=O0NfO1B!Y8>o8>Hovy7j^hiMYk&c1)F zA`we`FrT=**BHeRd$ZsFP0(xCi&d1V2J{Qr7u2Is13J20cmh3q06rkSZP4=n8w#`o zzZd^kGyB{BYW?fy)CnT|x8>6PdBLM{}Y1j z96||GGAejb@Ao#%btM4M z&8*)C$KLbff8=yqW9I4ic$xiwjb1JCKSuwL=v7ajm41lYem^vNzpWsFH2$x}N7?!G z2W@uuZWHAc%AIc~$JRNLC@JZb6D+^ zOLF%YC@-rn0>qSy?4&%B@rt6XD5^x?{pV6t_iZHjLk^6z@PlmzsXW}b76lh}S z&FNqoZ_>wFnm+Whl;oWDXGpBSgNi!JXX^2QOK%t%$+K5QGn!9#bB5HYsxLrDPeR>#UJHLl1)?SbPkq^ zX1=#eI$#<>Yw&b{#w^@GC|a#0M0LQuJIm`tK|6R=i=8(Nt>0C4BW=*nmdDlDpf>|k z-Q}CRXRwKd>g-xkERAu;{cO~FHCcS``U@EK(&Z`Q!@a3lLCgHv20MZnY+0=NOYQ8C zwT420Q@^O00v!SUnm9SB`aPRMK0SLAbof*>5@1uPPQ>M$RyqSYCLbV#6%J)nsL6%x z%s{y)KMoo26W2l({VR{$z@5-fbj)iM)ZA!xpcZUq=(EYxRgQ|HQP##PFpThHp zNtwk@HzTiqrRS-`i6$W4SM9uq8h9nC%CE*M!P5VxU|NXqoa4e%jhQ=E1v%o7>am9a ziiVW81>M-r=X19GAEwdJWuxaW{6WWjlfgzKE}wXPR-Z>h79npay0@IdB`-!;eXu3o zi?-F5f~}L=|Kk%B-8)XsV$K2GI8}yAA+G!!V&{C0207eL(#LE@BD^>~JADx2=AUm3 zNLp1AznU2}f3$8P;o0^@&@XQZmjF`k6H#hi3&sz_u745FKNlz{W?OM0*f(%jTQNa> zzr9a+lSEj=no3qLf3|K40_V=kiQ3sJjg`SVx6|;3PjDRpDtYGM=atTiMmztkvK}Za z#||TFW8L3ut{G`1E%l#70;%1@oVYMs91cJ`<+wDI*n}*ymCg{hUBTBtmGb}52y#|V zDLLh*Py?5sCH48cB#kM_P#bOf*M6Tlf~6gUl;pEcGRz+#Q~$>!ccv$YI?fBXo?*Wi zLRU(aPXz~+xi9`NM}A`QNOa)!G)}qjyNxesvP%6v^O=_rYtY6mmlZ`cjM7-zuQU=YnOKOxW2vY|H)w$$yAA$}Y!=EmU%TbE+fQoW2lx$W4~TdL^~BSvypT)cfD0)_jROOjDun*>OF?HC|@}{S{7pMO0i^S7($RNjAU10 zU{xgbRpG~Q`g9o$0cbRcF*@80g39!PkD*0;r9|3`Z@NFi-Ung?hG#VTRn}<9Ps=&| z2NsfrbTXDUSDJVs+f^OqVb=e*L`su2q9MN+}QV(!B6z+f7FFw0)^<5|ml@A{`zG0xyWotobiXBe>c!^yD z+Yi~sfySo2dtqHm0)alO*-gsi+EX7NnD8__AL+WYlFJQ8Q)Z<{Cj&x49Xe$(LIt*@ zvNZ2GAHN9r(dzD6Aa&I!3}w^>%TROqyt1$ROZNo19ORU6CN@X80Z?D(Aoe+4t(J4Q ztx4IThdNG`q$e^~g1$+IMOyK^`VkdHk~m2hd8~l+2FFV@nHFf06<5i}a2TF6=$Z(d z75wzQTY@fB{c+!*s@{0o$TGV|vFSXiD}{iPbexApgIjwD$S5P>SpUc%psZol$zl;{ z3F=WY`C|Rx=b2eae}-Uk=-4f$yi{LK(|z0_|pr+;p#1e;^@M5T_Cu-6Ck*|y9Ot?ySuwI z?(Qx@6I_D3yIXL#;O=vHzrD}dyUveQ)zvdS-9KhMRcrNqUC-cLiOwUv0b|!|(e?aYG1|_w;Y@{o5Zk=JDngn*M7V=7s$D0S zhoKmE!CF*2lj3L=^J6+S^hQ^F8gTGHw0sGPj~=0(nmt}}#syK=)s4)+8W5v?d?8kQ zb?p?gM@E<8a;^$4a@Ok$=W4)73OqmBS0Zay_onZMhD`si8h$N-}->WRl}Lr6$ut zX34*{m0iQj+@(_(D9N1UTTZc-{6ktu`3RV#_I%pIn#oIV^L2~g=7pA`u=50Iq@9m2CGBB{1!%f-lFtqGoUVcS zd*QEj(SH{Zz_`1TKN^}HkqcG*zJr?cQvmk`KPs1%vXTT-(|hX7tdmSRq%dXllL1!6 z4z}otbqE&JG+nfwtB1@>I{P*BbbtJ(zk#WmGnJ*y_X6tcs`)m>j!n2_Wr>6lHzOH- zzP_7c9qoO%sAtZ|)4vBfuRr+jptNdrt z9_zUZvK_?(acfTi8UYU_4~bQy{)pVzi-byhBle zD5cWttfRlZhJ_{aHNU3yzU@m{GGtCToPw==eo&;;N=}|inShCzbJpE|BrP;&+$WT~ z%Y89EA{I_lPSZ^v&vIU34*qdt|5B#>$GCD@=zDrb0aDwa1BA;%a@#FR{f@?Rb&-fY zJ3w1TifJyf<%r@P!HlrfLdnuy1*WJN7Gb*F`NAxHEf#*Bmd66se7O;s1aW`{JKqzo zp+Ho?=BI?$2t}S06C&$~<*lPb&uN5Qr!f=6h1M=sLBwj`RQR681uj3-@zzyLCE432 z2uzaY8wNk?nxc;PhX-zW7VoNhy^uSe3)t_Z7U!%W6M7gS#PM?C?zk~_eu*qE*u-o1 zhcq@F#a4XrV~U%m>@Q?DinLMvjltkDuOT=&EML$x-(d;nv5j|tNUWJN(Mc<~Q+cYG z5m0zEB+a5mDf64a%l4f|laq#dDe;<5s5K#`WH8fpU*agozLEJqJeF8bIHApO^TK$#Q=*l(kCX!BK7X#$8-#K*x|n&H{#`XQ&8po(5=-`*WU{2(s7s#-67ihE^s0 zKG@=iBS1z;!J<+m+C%hm3D`HdKuGO#34#v`eBKec!mZGVOLg$a)4El)I|={gH|CgV z#t-Mn58)oDX5Xo9JAN`cVS`Z{!BX!%}zu$nSIc`xJ_)BNi?P(9l^uWFM$v0hZ;}?@yQ= z$_sjlFx2E1t;TlxMxIHGH*IEr@OZs1zV4bt@V~AuY+beG^8O_SCeUu*OBCwj^4r4P zm$_#k2c|M`>v!512Ieq`=(I4H9^~xSzmt$NyLAsL0Lov4OqP-*b4z2}eg+UM;5g>D zHuW8r248DR#kOeBR=igGFK+y%t$+G4#bgQrgMvNQBaSH>`MXP?Fg4qfu!ng+kPgyAd7}& z>+9ZUbxid2ik}JFXQA%~GaH8_=pik2XT()#xFA6#nughy*9vqA3 zR`QuNIp718-aRhz*KsMz-bGydGi6a4()!5L(KNq#{6pi!*n_v+MkP#Y)44KeD7`cA z%G-)d%=1dAFI<>oWqTN6|MJdO_@m)_W#xr37eEPpP!p`mlJO!cMV{nAW_m1bZ!zgZ z^QsK%6riSfilpp~{V09eK}q!$#1XfXKmT>C12AHxmA0l!_lXxzif!f85>-ejwN^1u zrKOKDuVp8BoRh}N>&T{3Q;pgZIC;;_RS#ev=?MMCU-)N+H)r8BKHk}(`#yO8JFdh< z)#_kaHriK#arUJ5Ew4O2xU)2d?g?USXauw@&v+A4-<-H_> zA3!F-nw5^@Ne)-Zr7NYSsk4tRQ|ngLpIB3M=R@TdgVmy<9R3%xS;qT8rY03}zpPDT ztbpx&Fez|fV1xdIF6r+@nwcaf_xa#(&B>+>bS}-hL&=MB%Mq<#GhkLPHQl~Drv1!BD=T9DR$cdF!KI|S)e;#)c3siD8EmQ!q-U`9_s2Ql(e&>%zm;D?!2o+;9>*7F!FuF52IyBD zVazZ5fgV4hAE&VXrAA2nHrQ&fo{k#npFI?ve*c|zHpQa3w3fNFM! zL&(J|>Mvl(Q@#lS+1H$~es}$^0}$+NAlsfam|3jDa4lB-jO|UB;4d3x7x0U3AqHc6bm4#ba8NN%q{dxya$+a{~>OsKUu3WvA&uYl!ycY|8| zXU^qd8C3N5b9lcS)PVlogSOn>g?=xC;ty$ArX6ESd@02$TERf+%-6ZRa>;{gYv(8^gpz@e>4Mi>RX`60~+@at~Qi6 z7{rgB-MDVkiwQkMXyGDlzHapR9Y(<>vczaO1<3fQ$@u<=E!M%fZMcEGE*F?Sm+)^g z8Oc`}TgxkI%u4-Mc2aPQOd=jI{4Gr5hyKeJc*PB=KY27*Ipz+ zU?9$8FPkt;z7H_Ec~MD-2x`#0me1Pkyw-@WfUA48KQktrgzM#P>HEs3(tDltt&rrWSAO`H-3EY@PY_z$1E zwX2Vw0Xv%y;%pm&?Ej)-!iRhxa^i8 z1gb3QjtpxEvm}-SA7Nph{-+w~J9*EWA<$4MKFGqvr}J}JJ#K=_LfOLQHKU0mVAZ$o zM8@Pd=PMBwm&IWMu4E#AAkcJeKr!z;49epD;No&WeFhj6hu#bb?`Qz106PH_%w7ON zrx!8z@Q;`UU~vY^nNGbhW2VDWBS+MO)j)eer;w!Gne%V>0e2X{Dp2fWn|$k5%Kw~# zqq(5(5=Wrflv|MH%QKK71X|W)`x|ffCUo`I-P)%2UyaJV1(asey+1(a#Q*c~68}B? z%W0E4s9EI_baa!FyF!--6o3vl(@{S6QbE4cpysBfKewQ&Pm$iiXa*>n*AF}MooIy0 z*LB^%lCwtf=@O(g)a`kuqlM?S2iWQS0sUPc*rKZt8M@^n2Gze$$GBsqMe1Yz_HF`n z6^EW`Dl6)TK|@oAY5%1yE0#gGUi7!!uJ0PQXbI+{+Hkl>cff)~)xSz`rsME04gqi2 zVgAIKgX4#no?VhO?c_T)IdQmsE=9Vd4ZEQpulQO^Y~6qSUHK%{W$3=dzeDbgbc>co z+mm3>gKZ2+4%Vd<#KrRl*hmEBoNN!RAINN~CM~f{KDwg>UTTPvRm%Qdk?naf-(> z7{}ycRk!lf%NJ<1F;zZw`{p!{G8L}xa7DmTtx(khcQAV5@N1F7g@yzh1o+z0(1;s= z{X!|&CVb%?wv%usU(BI>3*4_v`mnm19HBIIk;}|V=w&m5dM>(yKCl`(6!d~euA68P z(}`lG2z=auyxRba+29`HELaGIZaF$i^oW~lXv#31nE`&OTB@r%o``rNRSTd(_kYF_ zhqx_pi*uL6Z~Qr>DHFq!jJlQ5Y}xTBKRhD@qRAXE^+~1PJ}qLBBTh(Kv2)J5s63Xs zq$*}YBKk@8V7kR$9FeH+rO%A=(Hg*TJRHHXn?Ut8coM6^2{}#)CO-d8^~GstKJw%rle1Fu<=Bcd19sm&n^^kV+X(Sv(=9u|4Y;HAithNpjUoWM*8`_ z`{nY*F6NIq6Yh2)4%wc~VGs=CdPci^X|-8hx*WsM2m)+tDmXv;FXXG~o_tFv5S0vp zlxq-Gq$n-&YZo6Rs26{aHwK#3Na1=SIY$*25kE|98mSRn<_cXuEV)NjiV!UgTdU(| zXRq(;HStd70A;3F=}=y6Q-Qm_!BaB1ng!4ysT0jj!tJAlO>~i5pXX&e z&`xeaH|bQ(CXgRu9xW{nU{8V7>~jG0kE#$g+B_UEdz1nz)IvQHj1v1JR_Rb6sCwM| zE8WzJYbUPQ*0@A$(bX8S=Rh#gz=zlNE(3=$L3yI>lh$ve6MU_n2FS7>{k^|DuqE}i zNrh-=E>jyb8HBaAO2>bwaeuocWFROHu;e3bAP=(0bfyj4oj>3^F_8O?eNXynq!=DX z>7D*dunv!HsB&rtY2?S-yI@Q0Y`cM}%B5uD|YN#l#sK&FHEZ zku5O|{>{D2|1*}KG^MFdP3W#3a1%&67J-jmI3dyQlV&BNGw{(zv5L z!4=^iHzO{g9VoKB?Ko0qe4sC(-A+?7Zj%wC{CCxMdjo`ijrgZLiene}M?D~x8x*_y z<=~2!B*07R7b@Hh1S`?bH?eJ*G2>8usxPjuXD_g|vgM3{M0k#JoZ@O7s}lJ58+8S4R3wJ@_doI#3QIQ9 z-w7u5zyw(Zq@)@-4(lVw>TAt~Ml$m5V;Z(xV3AA+Cqs4EIpOGvfG$^SM%c`g7s%+$ zlN^EXUB|sF*z{UU(4olPviD|Ff7@Dhe(QCbyS2M2*mG+v-wO8hw&+J%rSH1S45lCO z##&v__n=AqCWpokmKIM%+?XL%3rXy#g}nHWBw>CqyDXT0&y~CI$D~r6jfvnn$kXxU zn3p8!&JxK8=(#NidR5h{obSJ^1)m0^UMr=_Rx%IW0b933OCgK z5gHs%Sxhj(5q0W=I$d&^&sQmsZ3^W~H5F2vjjneXx-DHDAwWsoAW<6UQdPpE)M`r; zdl0h>`WJ4Je~6B<(#J-J#@j-Zc%x$6R!PrIvDpmI(9FUKoFW==KTs)!U{n7kc(ppz z_A8^BY_{Dq$8=vyTO&DZLNd$)oBMt8lRa{>GjlSTx~Ge=*s`$;4Pt zt$7MO)O2A5*bnMEg$aX-W2{<z3&Y5IhgA_d24f#H30^{mOPCz?sXq9}o+px=>p;42Zb)KZGG4Ko!$w;|HTo;_ z0`kWL?1g_QTbcZCRX?oDr;D4TJ5_Hh0;LIv+nvo!z`fWijdN|bjM2(i?cN5*H4|>= z;+)wvaW|UsJ%#Gm5=M{_HIk+51RmB#-UKG6t**KAIi+djw@kuNo3i$d3$rns3M5vR2ZX)|Oq z127w0(Fwor7|v0##%!`qv7I-MAYc5_+048|f|2dx#g7f9s`CUdW_!bJ$WCvI1{n3d z-@ANTyZ&@ay`)a9G+n!4PU{#M5--G(g5%*I= zZDT^m;YZ~>SJwnRo7-B6(z8ooR;f)xjtcVMM|9Z|XSFWlJWo(j5LPYi284 z7zxPU^P*d0A#Q_6e#~|_1K$FhG+Fb30qh{kQnu1A#Mkszgr4=m)r0=3g@`Uwry9iN z5mQaS?qo$hT&Q3Pi#AZQtsXwyPIwrRcOkgHW^%lq9Qb4Mx?UfI6Ode>AC1tNVJMBo z@`#dt{+i5bzyRw*{L;v3<_#p<7~q5ZB!?M%2lr2&G9dXpzBItYeJqHnkLHZ|bEbk6 znu8}sQlf?w5x}_dm`q}*1XC1ZcUgel8j!7|`|#&3+K$Y+{)Yg(dvcv>&R+x#fmQ*m$-3o72VC*G}J3 z@45dRonr0Y1o?6xP?UA^wGu%aggio{0M;3Ka^GkPJ)wKpZG*b5tANEDW#CRHcfQ!QFRQauJ zIEWncJ9GtIVLemXis3e8zoK4z8ugx{rmdt zzjl-@%TzZ~SCx;-KiR{mUkPLg&HY#w=X!~xE4I%vLrYMM@+07@p^p$kHgXZY5_!%l z8{sH`9Ac1hst#I3Y>8YA;a>bN5|J#Ycy2tu)FiH2W6P90zo#bQ$c$?JU5WO;!L{GJ zt`a3r`$99g+QLIK5J;v?Ov5!NZ=2Mone1S@ue_0SV;F0j17zd4Kb4Ml#8{d!a(*+x zQ)<~76C|iMq3y^2DFz+9S@qP;&sde%#u5N&Gs#u%Gb$T1IO&KGq&M59*XcB+zBD*Gu`erne=FE6WReEWE&Ch5PZTj!UfHkMZ zI@aet@sVnEui%;0LCq)Pcku3*${~2RtD;aVx93URMg61Mne|%?N2k4XcC1x)@=Vs$yxta#2@yg;cIaxNO>Iv4#`K;jXOzPu* znUAPlNB>9*g)HZAP`glvu>HorYoGw`%Wb~=L_e(%J@75UMKhK#G192^F4Qy#v%{|h zN(S5I3nh4dswyji39Jy6j;ohyVJQ7P;r0w%KFC4#V^C^yDyArQp-m_}y?`=^-mbj+ zBYw#A-SUvdu5<-w3Y6XC58dZaAlhxWPmk6Bix z|CGZTLpVN*SVyH&5P5W%EG?*%m1)3EM$g@$Jf9aYwfiiLAvrHJd{lLYUCin5f{WUQ zTZ~dZg$9!xEB0b7@=!>0Yy*LDV=djqzqLG^PJa`#SuHGShajM9{pA%O&kyQoY$VUU zp260$RhRjmfh6n5Qno_8hWeou5#5;>eeen^X*4+ci)UQ}57erY#y1}WsawBU2vS79 zX?)doD7dYtqh#`w_x9}1({Q8Z=%DmXxJ_ws=jO7xFepw4y+jGU-}(Cbe0eN#ZP2`Y zdb{PtpL}6Xko;ke@c$nq+I!unb9#H-OHVaPl)tYHY~D0(dz*e?b9~suf@rDZlM~D_ zA>gW$1I(#u?(25De|H1MPBs3| z=@)tarrWLAqu(dpZDgn1=D*Z|Xnj~P#04zDb^<5cO+>4lFxR(lI628imc(J;2G1qw|;Svm6 zk#d=C4purZ1v?$D#0LzcH!$v#rAO=DcX z9r3MN$&+7NVA$$9p9k6yXWq`67L77rCo)K(2aOPXqK+f6e(X0GXP`LU94j6t*swgG z!Hz={`}c^+O4!epc;PdjD+4sK7j59%V*lsV?U)v(>XH5Zhyc6IG^mC&>PY7kZ!QEK0;$}s7I z=BAW*2?6quQE_N~ICU`IlqO!`isAV~ga8Of7pq;oUV6lwhC=H-s9^Z>5Pj>6)xRCI zD6rO+XN^w-zK50Ax;o0OsXxz3Qs@F#$Il(SD$8ejJ*`#1n=+M`5>jShz6_<(etitD zW0;h~@)|B+x|lqlz&l)ZaQoIE z%%Z?2Jqgwq>yg*u;7o)morT5PsSVzud4 z{0PXbPGA?9{b-Tr%gJ-0j{%5>%;O$cEvd03fbDrb;>wi1Z@b6HyZXIN*Y87yHw-?#AJJU8i#2mTGA=@uTfoy{KN*h*uzv9 zw-XVIcG_X4g>E>iOlE0u=Ee4Y1SI24a6nmh7gxXQ5nUC0ZJXO52ZE+Y-BhMu?1-kb zP{c-@~dNlb?LayjFG2L#reah+1Pu;9*?M*gexN&P>fAb|P zUz~*n622bsOx=MhzODEDAH|r+7^Gh(% zB6RTSUPHADftXY|fLu1cMV3jOU@ZwioXo?zu;|FU$OBmmN9IQEIp8&28S6@d$5#ukuH; zg87%0>abLmSPeu+T&J{bq^KLMT-2jyyGW|>m_PD|{Le~54RM7*Dx0Vp(D~ns3s&c5 zZv{<=t~E#Hbg1pB{21(z%e0ol{QFV%NzbJJy=YK{qoR>PVALBvQ|B|}-L`iz7@67d zR*8o2hz{TUX4|a5g3+i$QY13x4|{>RcG)-5$jL(=v>tn!1O+7vjb~#5b+r*Q1^;Zs zxwtVz-(Pdkk4n@gMdjeF}bu8z!)u8NC# z>4d<*JT0^B9R9+?UtWG?t29eK@}o-8+65P@vPBCm2MDEEVn>dG6?M9Dz?f&-?k>}; z)Dv8niT&xHtW+ZA-(YnAJ{GmgiZItKJQ#K>zi+>@_ZZGkwj<;lH}wA1WB*bk1Uxw$ zRNvI_dq=3!Zs`f-))PCSnJek(KQkI(p8vzkC@b3QG8*f#oIOsYcTBe7&O8;9KNd2j zm_s2PcGpjr@W^I_gh%QYoqCdyV^OuD5&pbn4Lb%v!26ugXsv9;X0ChW_c3xoCxz!t zw>isu%O*<&cwSOfk*1pdGAe$( zuA~3jUJOuQc#OY3W@38`@djFaOa91Ka@Y_Gp(=$lBNM#cmEn^r%0TSS*6&)@&x%cG z$O5EIN$sefG5E??PMIoqGPY!}uO@3|TO6Red$Hs0Dzg}WyIB$*piacZd;#O3S)E{CMHS6^9WtZqq$=Y9*uh}K&J4SH zsYcimR#ikiH5lLR6~qu5f=GkC_92sZeoQOs4rKIemhvtSM|=I2aOf2Ip6h5)x7xg< zd}OE)9OcwAAtEw3PF@Qm{5VFGb^s8cvQypt$Jf^|4k?6>pt{c>3?=V-{7ZjKy zHPf$az6CWrmipNdYQ0|h2uh%^P215V4w^d#g-z&L!^y$cvA7d%Nq@v8;9C|=o?=G} z_&y$aD4feOX`>o?bk|CFoV%T>=9WyQvQoY*^{sw56H>WF`;Q3*QJk~T0O>=@ZU6F| ziZI-n9)mLM{V}HA=rIm{&u5hHo0qtXD`9R=lD^W}v@Gs}K# z>H3-Pfb6iZ^KowEs9l)KM%Tyxl<-45*3&u`ITtpu2M)+5?qP^uP?Y(KHE@U6?*;EC zfSvJZMDi7~%c@I#Vf+Jr1TaME_`PoWSKMAzDzvpKB5SQ3+qY$On!=7{IhF@>hGHy?$3eIlyFX8R1XHtqy`zq>Y%D zYa-8MVR$Zftbly1ub)PeMiA4IfT481ow=S$>Q8P@)qyq`BMmS)0BF!#KJ;*Uz50p5 z+Z&CXq<736sFHfp4{7|FN=7$T#x}G>J$?@4Qra`gQ`?l;+DiNOOO$)<+qrP6n4XV9 zo=+&x7oU~DNt`ue<=1xe7N5a|zjIo!#U_qp*0RY?CRC^2L@)i?OC#6a(`a_J^Ya!e z>&;baaZfip!-f0#2Y6?AtxT78tI%9;hX5EXX^8O^sWQcGmvoC9 z9O~;R)jq~|9nLvf@i~GJq)^rOFeLuToy+QX%#IaPxnRiX;G#E~$OYS!qsW}OFjqTscLFOqzA;j;*iF2&0Bob3Sj z+cq`a;v;NbfL?=BKr1kHVBoHSjh$C~Nn3*W78!S^jocR1?iXTN-)*wp z%bUa$&j|QUfW8=)lUuU!OV?Zo<6vNVH~A?AaUL-NdYe-J))JZyo{Y7LXo!if1N2}+ z;sW(Yk<2yXM%wgXyuETUX8s!mUJW1I#v+dcFJbvA7bhI;AVxlyemIy~rgDvfl;Xq1 zx*~}+yd#5G&cgvKl7xVl9HoioX_9%>;izDRfbtJXU~!YC_HPI~S2m^A4=F`k`j21? zN-HQ}hfkQ%ZUqh;PLmz&Wpb6Y#ZvFr^(!yw*0|EvU74u2Vlg3BqaI8%=gw(zt3%Z>&PbbtvTXo^SryW??Yz=KzMa90x_I*hrT!0g0LU9{?AE2$cL@X zWqVMrB1~Bw$R7I!B%0^@u%&MVg8pCMPwsKS3 z{J9jW~ur_ti-p40HXawOyp~Vj(@q zXmU+Ns@M@TB@NUp#C-xycYb}$8lkRDrNnRjXAjH!OUVSAq=-*TSF2lHTACJl((@D( zZ`l<6QPnZPAECb8t~~B#Bf!AnoBqpyklkGAog^ap>t@HYLjj$*$xk z9hzH$+IB~0152){g`Ut$v!EQ5H9moo5T~*tMC8f$i%d@?$-t9O-|A1Fc_%z5Rn}Fx z;%e(q9jaX;(K`fwN$Hw%X`I8sY)~u=&+}il&ZcyPK(#Rx9bKN#u>o`uZm~9DUUD{f z1Q_5)Yu(&dmAH(=1ZKb$V;H0V)ssr3T_W9t&OCW28scI7wE4>=c|=W6!DS~y6{!1u zva0?OH2SOZ0S*4yPTET)tp2rEi;EvYu}wtn#CO1F8e0o%?a};-?&9j+yw$Z33&rFc z{KHn)N0rujMKDju&HArt$Klg3upHeeMp|Igs)7K@EGv61=y5O@r5~Zi$hkcwUaQ!5 zvKdk8_K8N02>o{(7^=XJ>dMe6Fsgf-9QNQ-A~|Cb%<04HzC1w}D#s3aW+5%Aq`nvS zEvol7uKd|4ZjgXa)BQUCr_~tiNfF_5786G!J7)rSx>ig1+Erl}-5N-uT@DMd*MJ6o zs#9!vYLl<1dhb@R!R>Xt#ntc!rOT6-I@La&i?3lG&V*2(fz67bRa7%MZ#290 z)mdV&z{oYky4cid7TJYh2Y5cBJ|VA$kx`}n1x@`ST~~UBA#vM79MA5{_En!QZ?Q}D z-S@=Hkp7GtlzaP%^W?)La|&y8bbw>lt6a-#iF_aLqxb!kx!V@Z(*e2>s-FK1QJ-x1 z&cU^0>7RIaMwnJ{(s$mh5%Yfs!f4Zeg91zUDEUk$inpaot(Hk9Io}=;X#^vj!`hY* zf7u5xYa?Wmf?Vd^Id6fZZhw1KMtsvPMK)jm>lloTM%U62e#3f9s1cJ+KA_^M`XERp zAX6mK;|~8SAt3=@kWy3sdLYf#IagnF?&c6PQ5A8ACrbLq*EF7VlWz<(^2&2N(Js+) zYnyAe#2{fX^{x&E$|D4h+5@a2Q)_M&h}@J?A>qD|30ZSvib;9XBqE8(QO%;T1ae5S zOxg5kbTiTs!)Q_9!NCQ?2Cz3W4|L5^C~7h^nJIlEi{#h4naYt?L9=t@?V=<+{)}OC zY#Y>1foyCZo`Iq(knTisn__!{b{F))HxtR+f(^UaAT6$`?^RYZ#8GfhE{sr98fdJq z72fqvAbv`^aS-V5;qMbryZSc3bU0cF8YTYV>xPa<`10?ec>yN^SX+n5?ka?B`Q7fy zAt#)U1Di?i&u`t<2v>s5FX#XXq>=;rx{+M}apd;SXY*d;p#2YU zv2$zC1Vww+%f$mH7ir(NoBMAvj%|LKDkH@+ewY2@J9%+@(?GvYUnU60G_~d|X)
;eN{S2Wp0rqckFToQ{TLR_BRm3i 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 z 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

N*5q0J4m`ozb1! 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 z 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 diff --git a/yarn.lock b/yarn.lock index 52a0124a11..7a8b3afb44 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4503,7 +4503,7 @@ __metadata: "@metamask/toprf-secure-backup@file:./toprf-secure-backup.tgz::locator=%40metamask%2Fseedless-onboarding-controller%40workspace%3Apackages%2Fseedless-onboarding-controller": version: 0.0.0 - resolution: "@metamask/toprf-secure-backup@file:./toprf-secure-backup.tgz#./toprf-secure-backup.tgz::hash=928fb2&locator=%40metamask%2Fseedless-onboarding-controller%40workspace%3Apackages%2Fseedless-onboarding-controller" + resolution: "@metamask/toprf-secure-backup@file:./toprf-secure-backup.tgz#./toprf-secure-backup.tgz::hash=d2926f&locator=%40metamask%2Fseedless-onboarding-controller%40workspace%3Apackages%2Fseedless-onboarding-controller" dependencies: "@metamask/auth-network-utils": "npm:^0.0.0" "@noble/ciphers": "npm:^1.2.1" @@ -4515,7 +4515,7 @@ __metadata: "@toruslabs/fetch-node-details": "npm:^15.0.0" "@toruslabs/http-helpers": "npm:^8.1.1" bn.js: "npm:^5.2.1" - checksum: 10/e61959c0711a4b9478a59438d887129c30cb4153158b75ca1db3c06e0501b014a4f68bc011f99e41c374751a8d3782e5fd04f97c053aff8fb1208f1937ff7a74 + checksum: 10/288109ec1abcd6b7e2aecdb305013a2667e635f851b6940065e22e1ad01fb7c10c5cd58fb56a7848da3184633e7b318e9f81c505443f1735eac2bccd6275ce30 languageName: node linkType: hard From 971651316788db879114ca6ae8c2f17bc62e8e92 Mon Sep 17 00:00:00 2001 From: lwin Date: Fri, 25 Apr 2025 13:02:26 +0800 Subject: [PATCH 064/147] feat: allow multiple backupState in updateBackupMetadataState method --- .../src/SeedlessOnboardingController.ts | 89 +++++++++++++------ 1 file changed, 64 insertions(+), 25 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index 9b6715de73..56a4e7bb1d 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -383,16 +383,24 @@ export class SeedlessOnboardingController extends BaseController< /** * Update the backup metadata state for the given seed phrase. * - * @param keyringId - The keyring id of the backup seed phrase. - * @param seedPhrase - The seed phrase to update the backup metadata for. + * @param data - The data to backup, can be a single backup or array of backups. + * @param data.keyringId - The keyring id associated with the backup seed phrase. + * @param data.seedPhrase - The seed phrase to update the backup metadata state. */ - updateBackupMetadataState(keyringId: string, seedPhrase: Uint8Array) { - const newBackupMetadata = { - id: keyringId, - hash: keccak256AndHexify(seedPhrase), - }; + updateBackupMetadataState( + data: + | { + keyringId: string; + seedPhrase: Uint8Array; + } + | { + keyringId: string; + seedPhrase: Uint8Array; + }[], + ) { + this.#assertIsUnlocked(); - this.#updateSocialBackupsMetadata(newBackupMetadata); + this.#filterDupesAndUpdateSocialBackupsMetadata(data); } /** @@ -570,12 +578,12 @@ export class SeedlessOnboardingController extends BaseController< authKeyPair, }); return { - id: keyringId, + keyringId, seedPhrase, }; }); } catch (error) { - console.log('Error encrypting and storing seed phrase backup', error); + log('Error encrypting and storing seed phrase backup', error); throw new Error( SeedlessOnboardingControllerError.FailedToEncryptAndStoreSeedPhraseBackup, ); @@ -687,41 +695,72 @@ export class SeedlessOnboardingController extends BaseController< */ async #withPersistedSeedPhraseBackupsState( createSeedPhraseBackupCallback: () => Promise<{ - id: string; + keyringId: string; seedPhrase: Uint8Array; }>, ): Promise<{ - id: string; + keyringId: string; seedPhrase: Uint8Array; }> { try { - const backUps = await createSeedPhraseBackupCallback(); - const newBackupMetadata = { - id: backUps.id, - hash: keccak256AndHexify(backUps.seedPhrase), - }; + const newBackup = await createSeedPhraseBackupCallback(); - this.#updateSocialBackupsMetadata(newBackupMetadata); + this.#filterDupesAndUpdateSocialBackupsMetadata(newBackup); - return backUps; + return newBackup; } catch (error) { log('Error persisting seed phrase backups', error); throw error; } } - #updateSocialBackupsMetadata(newSocialBackupMetadata: SocialBackupsMetadata) { + /** + * Updates the social backups metadata state by adding new unique seed phrase backups. + * This method ensures no duplicate backups are stored by checking the hash of each seed phrase. + * + * @param data - The backup data to add to the state + * @param data.id - The identifier for the backup + * @param data.seedPhrase - The seed phrase to backup as a Uint8Array + */ + #filterDupesAndUpdateSocialBackupsMetadata( + data: + | { + keyringId: string; + seedPhrase: Uint8Array; + } + | { + keyringId: string; + seedPhrase: Uint8Array; + }[], + ) { + const currentBackupsMetadata = this.state.socialBackupsMetadata; + + const newBackupsMetadata = Array.isArray(data) ? data : [data]; + const filteredNewBackupsMetadata: SocialBackupsMetadata[] = []; + // filter out the backed up metadata that already exists in the state // to prevent duplicates - const existingBackupsMetadata = this.state.socialBackupsMetadata.find( - (backup) => backup.id === newSocialBackupMetadata.id, - ); + newBackupsMetadata.forEach((item) => { + const { keyringId, seedPhrase } = item; + const backupHash = keccak256AndHexify(seedPhrase); + + const existingBackupMetadata = currentBackupsMetadata.find( + (backup) => backup.hash === backupHash, + ); + + if (!existingBackupMetadata) { + filteredNewBackupsMetadata.push({ + id: keyringId, + hash: backupHash, + }); + } + }); - if (!existingBackupsMetadata) { + if (filteredNewBackupsMetadata.length > 0) { this.update((state) => { state.socialBackupsMetadata = [ ...state.socialBackupsMetadata, - newSocialBackupMetadata, + ...filteredNewBackupsMetadata, ]; }); } From ad56538c0f40e506e06fcf0fae61c0ba85e7cba9 Mon Sep 17 00:00:00 2001 From: lwin Date: Fri, 25 Apr 2025 13:03:25 +0800 Subject: [PATCH 065/147] feat: change order of seedPhrases in fetchAllSeedPhrase method --- .../src/SeedPhraseMetadata.ts | 4 +- .../src/SeedlessOnboardingController.test.ts | 103 +++++++++++++++--- 2 files changed, 89 insertions(+), 18 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedPhraseMetadata.ts b/packages/seedless-onboarding-controller/src/SeedPhraseMetadata.ts index c162fa60be..d932d15fd8 100644 --- a/packages/seedless-onboarding-controller/src/SeedPhraseMetadata.ts +++ b/packages/seedless-onboarding-controller/src/SeedPhraseMetadata.ts @@ -96,7 +96,7 @@ export class SeedPhraseMetadata implements ISeedPhraseMetadata { /** * Parse the seed phrase metadata from the metadata store and return the array of raw seed phrases. * - * This method also sorts the seed phrases by timestamp in descending order, i.e. the newest seed phrase will be the first element in the array. + * This method also sorts the seed phrases by timestamp in ascending order, i.e. the oldest seed phrase will be the first element in the array. * * @param seedPhraseMetadataArr - The array of SeedPhrase Metadata from the metadata store. * @returns The array of raw seed phrases. @@ -141,7 +141,7 @@ export class SeedPhraseMetadata implements ISeedPhraseMetadata { */ static sort( seedPhrases: SeedPhraseMetadata[], - order: 'asc' | 'desc' = 'desc', + order: 'asc' | 'desc' = 'asc', ): SeedPhraseMetadata[] { return seedPhrases.sort((a, b) => { if (order === 'asc') { diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts index 0973f3c015..8e6cc71b61 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts @@ -1247,12 +1247,12 @@ describe('SeedlessOnboardingController', () => { expect(mockSecretDataGet.isDone()).toBe(true); expect(secretData).toBeDefined(); - // `fetchAndRestoreSeedPhraseMetadata` should sort the seed phrases by timestamp and return the seed phrases in the correct order - // the seed phrases are sorted in descending order, so the firstly created seed phrase is the latest item in the array + // `fetchAndRestoreSeedPhraseMetadata` should sort the seed phrases by timestamp in ascending order and return the seed phrases in the correct order + // the seed phrases are sorted in ascending order, so the oldest seed phrase is the first item in the array expect(secretData).toStrictEqual([ - stringToBytes('seedPhrase3'), - stringToBytes('seedPhrase2'), stringToBytes('seedPhrase1'), + stringToBytes('seedPhrase2'), + stringToBytes('seedPhrase3'), ]); // verify the vault data @@ -1564,18 +1564,48 @@ describe('SeedlessOnboardingController', () => { }); describe('updateBackupMetadataState', () => { + const MOCK_PASSWORD = 'mock-password'; + let MOCK_VAULT: string; + let MOCK_VAULT_ENCRYPTION_KEY: string; + let MOCK_VAULT_ENCRYPTION_SALT: string; + + beforeEach(async () => { + const mockToprfEncryptor = createMockToprfEncryptor(); + + const MOCK_ENCRYPTION_KEY = + mockToprfEncryptor.deriveEncKey(MOCK_PASSWORD); + const MOCK_AUTH_KEY_PAIR = + mockToprfEncryptor.deriveAuthKeyPair(MOCK_PASSWORD); + + const mockResult = await createMockVault( + MOCK_ENCRYPTION_KEY, + MOCK_AUTH_KEY_PAIR, + MOCK_PASSWORD, + MOCK_NODE_AUTH_TOKENS, + ); + + MOCK_VAULT = mockResult.encryptedMockVault; + MOCK_VAULT_ENCRYPTION_KEY = mockResult.vaultEncryptionKey; + MOCK_VAULT_ENCRYPTION_SALT = mockResult.vaultEncryptionSalt; + }); + it('should be able to update the backup metadata state', async () => { await withController( { state: getMockInitialControllerState({ withMockAuthenticatedUser: true, + vault: MOCK_VAULT, + vaultEncryptionKey: MOCK_VAULT_ENCRYPTION_KEY, + vaultEncryptionSalt: MOCK_VAULT_ENCRYPTION_SALT, }), }, async ({ controller }) => { - controller.updateBackupMetadataState( - MOCK_KEYRING_ID, - MOCK_SEED_PHRASE, - ); + await controller.submitPassword(MOCK_PASSWORD); + + controller.updateBackupMetadataState({ + keyringId: MOCK_KEYRING_ID, + seedPhrase: MOCK_SEED_PHRASE, + }); const MOCK_SEED_PHRASE_HASH = keccak256AndHexify(MOCK_SEED_PHRASE); expect(controller.state.socialBackupsMetadata).toStrictEqual([ { id: MOCK_KEYRING_ID, hash: MOCK_SEED_PHRASE_HASH }, @@ -1589,24 +1619,65 @@ describe('SeedlessOnboardingController', () => { { state: getMockInitialControllerState({ withMockAuthenticatedUser: true, + vault: MOCK_VAULT, + vaultEncryptionKey: MOCK_VAULT_ENCRYPTION_KEY, + vaultEncryptionSalt: MOCK_VAULT_ENCRYPTION_SALT, }), }, async ({ controller }) => { - controller.updateBackupMetadataState( - MOCK_KEYRING_ID, - MOCK_SEED_PHRASE, - ); + await controller.submitPassword(MOCK_PASSWORD); + + controller.updateBackupMetadataState({ + keyringId: MOCK_KEYRING_ID, + seedPhrase: MOCK_SEED_PHRASE, + }); const MOCK_SEED_PHRASE_HASH = keccak256AndHexify(MOCK_SEED_PHRASE); expect(controller.state.socialBackupsMetadata).toStrictEqual([ { id: MOCK_KEYRING_ID, hash: MOCK_SEED_PHRASE_HASH }, ]); - controller.updateBackupMetadataState( - MOCK_KEYRING_ID, - MOCK_SEED_PHRASE, - ); + controller.updateBackupMetadataState({ + keyringId: MOCK_KEYRING_ID, + seedPhrase: MOCK_SEED_PHRASE, + }); + expect(controller.state.socialBackupsMetadata).toStrictEqual([ + { id: MOCK_KEYRING_ID, hash: MOCK_SEED_PHRASE_HASH }, + ]); + }, + ); + }); + + it('should be able to update the backup metadata state with an array of backups', async () => { + await withController( + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + vault: MOCK_VAULT, + vaultEncryptionKey: MOCK_VAULT_ENCRYPTION_KEY, + vaultEncryptionSalt: MOCK_VAULT_ENCRYPTION_SALT, + }), + }, + async ({ controller }) => { + await controller.submitPassword(MOCK_PASSWORD); + const MOCK_SEED_PHRASE_2 = stringToBytes('mock-seed-phrase-2'); + const MOCK_KEYRING_ID_2 = 'mock-keyring-id-2'; + + controller.updateBackupMetadataState([ + { + keyringId: MOCK_KEYRING_ID, + seedPhrase: MOCK_SEED_PHRASE, + }, + { + keyringId: MOCK_KEYRING_ID_2, + seedPhrase: MOCK_SEED_PHRASE_2, + }, + ]); + const MOCK_SEED_PHRASE_HASH = keccak256AndHexify(MOCK_SEED_PHRASE); + const MOCK_SEED_PHRASE_2_HASH = + keccak256AndHexify(MOCK_SEED_PHRASE_2); expect(controller.state.socialBackupsMetadata).toStrictEqual([ { id: MOCK_KEYRING_ID, hash: MOCK_SEED_PHRASE_HASH }, + { id: MOCK_KEYRING_ID_2, hash: MOCK_SEED_PHRASE_2_HASH }, ]); }, ); From d05d5ef32471b70158e43734017676d23b17108a Mon Sep 17 00:00:00 2001 From: Nguyen Anh Tu Date: Fri, 25 Apr 2025 16:55:53 +0700 Subject: [PATCH 066/147] fix: correct password sync error --- .../src/SeedlessOnboardingController.test.ts | 72 ++++++++++++++++--- .../src/SeedlessOnboardingController.ts | 38 +++++----- .../src/errors.ts | 29 ++++++++ 3 files changed, 108 insertions(+), 31 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts index 1d9f608a56..dc61647ee5 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts @@ -8,6 +8,7 @@ import { type NodeAuthTokens, type RecoverEncryptionKeyResult, type ToprfSecureBackup, + TOPRFErrorCode, } from '@metamask/toprf-secure-backup'; import { base64ToBytes, bytesToBase64, stringToBytes } from '@metamask/utils'; @@ -16,7 +17,7 @@ import { SeedlessOnboardingControllerError, AuthConnection, } from './constants'; -import { RecoveryError } from './errors'; +import { PasswordSyncError, RecoveryError } from './errors'; import { getDefaultSeedlessOnboardingControllerState, SeedlessOnboardingController, @@ -585,7 +586,7 @@ describe('SeedlessOnboardingController', () => { }, async ({ controller, toprfClient }) => { mockFetchAuthPubKey(toprfClient, base64ToBytes(MOCK_AUTH_PUB_KEY)); - const result = await controller.checkPasswordOutdated(); + const result = await controller.checkIsPasswordOutdated(); expect(result).toBe(false); }, ); @@ -601,7 +602,7 @@ describe('SeedlessOnboardingController', () => { }, async ({ controller, toprfClient }) => { mockFetchAuthPubKey(toprfClient, base64ToBytes(MOCK_AUTH_PUB_KEY)); - const result = await controller.checkPasswordOutdated(); + const result = await controller.checkIsPasswordOutdated(); expect(result).toBe(true); }, ); @@ -615,7 +616,7 @@ describe('SeedlessOnboardingController', () => { }), }, async ({ controller }) => { - await expect(controller.checkPasswordOutdated()).rejects.toThrow( + await expect(controller.checkIsPasswordOutdated()).rejects.toThrow( SeedlessOnboardingControllerError.SRPNotBackedUpError, ); }, @@ -634,7 +635,7 @@ describe('SeedlessOnboardingController', () => { }, }, async ({ controller }) => { - await expect(controller.checkPasswordOutdated()).rejects.toThrow( + await expect(controller.checkIsPasswordOutdated()).rejects.toThrow( SeedlessOnboardingControllerError.InsufficientAuthToken, ); }, @@ -2278,14 +2279,21 @@ describe('SeedlessOnboardingController', () => { jest .spyOn(toprfClient, 'recoverEncKey') .mockRejectedValueOnce( - new Error('Failed to recover encryption key'), + new TOPRFError( + TOPRFErrorCode.CouldNotDeriveEncryptionKey, + 'Could not derive encryption key', + ), ); await expect( controller.recoverPassword({ globalPassword: GLOBAL_PASSWORD, }), - ).rejects.toThrow(SeedlessOnboardingControllerError.LoginFailedError); + ).rejects.toStrictEqual( + new RecoveryError( + SeedlessOnboardingControllerError.IncorrectPassword, + ), + ); }, ); }); @@ -2312,13 +2320,59 @@ describe('SeedlessOnboardingController', () => { jest .spyOn(toprfClient, 'recoverPassword') - .mockRejectedValueOnce(new Error('Failed to recover password')); + .mockRejectedValueOnce( + new TOPRFError( + TOPRFErrorCode.CouldNotFetchPassword, + 'Could not fetch password', + ), + ); await expect( controller.recoverPassword({ globalPassword: GLOBAL_PASSWORD, }), - ).rejects.toThrow('Failed to recover password'); + ).rejects.toStrictEqual( + new PasswordSyncError( + SeedlessOnboardingControllerError.CouldNotRecoverPassword, + ), + ); + }, + ); + }); + + it('should not propagate unknown errors from #toprfClient.recoverPassword', async () => { + await withController( + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + withMockAuthPubKey: true, + }), + }, + async ({ controller, toprfClient }) => { + const mockToprfEncryptor = createMockToprfEncryptor(); + const encKey = mockToprfEncryptor.deriveEncKey(GLOBAL_PASSWORD); + const authKeyPair = + mockToprfEncryptor.deriveAuthKeyPair(GLOBAL_PASSWORD); + jest.spyOn(toprfClient, 'recoverEncKey').mockResolvedValueOnce({ + encKey, + authKeyPair, + rateLimitResetResult: Promise.resolve(), + keyShareIndex: 1, + }); + + jest + .spyOn(toprfClient, 'recoverPassword') + .mockRejectedValueOnce(new Error('Unknown error')); + + await expect( + controller.recoverPassword({ + globalPassword: GLOBAL_PASSWORD, + }), + ).rejects.toStrictEqual( + new PasswordSyncError( + SeedlessOnboardingControllerError.CouldNotRecoverPassword, + ), + ); }, ); }); diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index b991ca1840..856b045ba3 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -15,7 +15,7 @@ import type { NodeAuthTokens, SEC1EncodedPublicKey, } from '@metamask/toprf-secure-backup'; -import { TOPRFError, ToprfSecureBackup } from '@metamask/toprf-secure-backup'; +import { ToprfSecureBackup } from '@metamask/toprf-secure-backup'; import { base64ToBytes, bytesToBase64, @@ -32,7 +32,7 @@ import { SeedlessOnboardingControllerError, Web3AuthNetwork, } from './constants'; -import { getErrorMessageFromTOPRFErrorCode, RecoveryError } from './errors'; +import { PasswordSyncError, RecoveryError } from './errors'; import { projectLogger, createModuleLogger } from './logger'; import { SeedPhraseMetadata } from './SeedPhraseMetadata'; import type { @@ -478,10 +478,11 @@ export class SeedlessOnboardingController extends BaseController< } /** - * @description Fetch the password corresponding to the current authPubKey in state (current device password). + * @description Fetch the password corresponding to the current authPubKey in state (current device password which is already out of sync with the current global password). + * then we use this recovered old password to unlock the vault and set the password to the new global password. * * @param params - The parameters for fetching the password. - * @param params.globalPassword - The current global password to verify. + * @param params.globalPassword - The latest global password. * @returns A promise that resolves to the password. */ async recoverPassword({ @@ -489,29 +490,22 @@ export class SeedlessOnboardingController extends BaseController< }: { globalPassword: string; }): Promise<{ password: string }> { - try { - const currentDeviceAuthPubKey = this.#recoverAuthPubKey(); + const currentDeviceAuthPubKey = this.#recoverAuthPubKey(); - const { - encKey: currentGlobalDeviceEncKey, - authKeyPair: currentGlobalDeviceAuthKeyPair, - } = await this.#recoverEncKey(globalPassword); + const { + encKey: currentGlobalDeviceEncKey, + authKeyPair: currentGlobalDeviceAuthKeyPair, + } = await this.#recoverEncKey(globalPassword); - return this.toprfClient.recoverPassword({ + try { + const res = await this.toprfClient.recoverPassword({ targetPwPubKey: currentDeviceAuthPubKey, curEncKey: currentGlobalDeviceEncKey, curAuthKeyPair: currentGlobalDeviceAuthKeyPair, }); + return res; } catch (error) { - if (error instanceof TOPRFError) { - throw new Error( - getErrorMessageFromTOPRFErrorCode( - error.code, - SeedlessOnboardingControllerError.CouldNotRecoverPassword, - ), - ); - } - throw error; + throw PasswordSyncError.getInstance(error); } } @@ -520,7 +514,7 @@ export class SeedlessOnboardingController extends BaseController< * * @returns A promise that resolves to true if the password is outdated, false otherwise. */ - async checkPasswordOutdated(): Promise { + async checkIsPasswordOutdated(): Promise { this.#assertIsAuthenticatedUser(this.state); const { nodeAuthTokens, @@ -1053,7 +1047,7 @@ export class SeedlessOnboardingController extends BaseController< * @throws If the password is outdated. */ async #assertPasswordInSync(): Promise { - const isPasswordOutdated = await this.checkPasswordOutdated(); + const isPasswordOutdated = await this.checkIsPasswordOutdated(); if (isPasswordOutdated) { throw new Error(SeedlessOnboardingControllerError.OutdatedPassword); } diff --git a/packages/seedless-onboarding-controller/src/errors.ts b/packages/seedless-onboarding-controller/src/errors.ts index 62e574fd98..0efde4db78 100644 --- a/packages/seedless-onboarding-controller/src/errors.ts +++ b/packages/seedless-onboarding-controller/src/errors.ts @@ -29,6 +29,35 @@ export function getErrorMessageFromTOPRFErrorCode( } } +/** + * The PasswordSyncError class is used to handle errors that occur during the password sync process. + */ +export class PasswordSyncError extends Error { + constructor(message: string) { + super(message); + this.name = 'SeedlessOnboardingController - PasswordSyncError'; + } + + /** + * Get an instance of the PasswordSyncError class. + * + * @param error - The error to get the instance of. + * @returns The instance of the PasswordSyncError class. + */ + static getInstance(error: unknown): PasswordSyncError { + if (error instanceof TOPRFError) { + const errorMessage = getErrorMessageFromTOPRFErrorCode( + error.code, + SeedlessOnboardingControllerError.CouldNotRecoverPassword, + ); + return new PasswordSyncError(errorMessage); + } + return new PasswordSyncError( + SeedlessOnboardingControllerError.CouldNotRecoverPassword, + ); + } +} + /** * The RecoveryError class is used to handle errors that occur during the recover encryption key process from the passwrord. * It extends the Error class and includes a data property that can be used to store additional information. From 5c6fc9cb96d2386cec84532c79c4846629349216 Mon Sep 17 00:00:00 2001 From: Nguyen Anh Tu Date: Mon, 28 Apr 2025 07:39:06 +0700 Subject: [PATCH 067/147] feat: add with controller lock --- .../src/SeedlessOnboardingController.test.ts | 2 +- .../src/SeedlessOnboardingController.ts | 359 ++++++++++-------- 2 files changed, 204 insertions(+), 157 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts index 706498c99b..d06ab1784c 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts @@ -2188,7 +2188,7 @@ describe('SeedlessOnboardingController', () => { MOCK_KEYRING_ID, ); - controller.setLocked(); + await controller.setLocked(); await expect( controller.addNewSeedPhraseBackup( diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index a618c903a5..c3516e03ac 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -142,6 +142,8 @@ export class SeedlessOnboardingController extends BaseController< > { readonly #vaultEncryptor: VaultEncryptor; + readonly #controllerOperationMutex = new Mutex(); + readonly #vaultOperationMutex = new Mutex(); readonly toprfClient: ToprfSecureBackup; @@ -214,41 +216,43 @@ export class SeedlessOnboardingController extends BaseController< groupedAuthConnectionId?: string; socialLoginEmail?: string; }) { - try { - const { - idTokens, - authConnectionId, - groupedAuthConnectionId, - userId, - authConnection, - socialLoginEmail, - } = params; - const hashedIdTokenHexes = idTokens.map((idToken) => { - return remove0x(keccak256AndHexify(stringToBytes(idToken))); - }); - const authenticationResult = await this.toprfClient.authenticate({ - verifier: groupedAuthConnectionId || authConnectionId, - verifierId: userId, - idTokens: hashedIdTokenHexes, - singleIdVerifierParams: { - subVerifier: authConnectionId, - subVerifierIdTokens: idTokens, - }, - }); - // update the state with the authenticated user info - this.update((state) => { - state.nodeAuthTokens = authenticationResult.nodeAuthTokens; - state.authConnectionId = authConnectionId; - state.groupedAuthConnectionId = groupedAuthConnectionId; - state.userId = userId; - state.authConnection = authConnection; - state.socialLoginEmail = socialLoginEmail; - }); - return authenticationResult; - } catch (error) { - log('Error authenticating user', error); - throw new Error(SeedlessOnboardingControllerError.AuthenticationError); - } + return this.#withControllerLock(async () => { + try { + const { + idTokens, + authConnectionId, + groupedAuthConnectionId, + userId, + authConnection, + socialLoginEmail, + } = params; + const hashedIdTokenHexes = idTokens.map((idToken) => { + return remove0x(keccak256AndHexify(stringToBytes(idToken))); + }); + const authenticationResult = await this.toprfClient.authenticate({ + verifier: groupedAuthConnectionId || authConnectionId, + verifierId: userId, + idTokens: hashedIdTokenHexes, + singleIdVerifierParams: { + subVerifier: authConnectionId, + subVerifierIdTokens: idTokens, + }, + }); + // update the state with the authenticated user info + this.update((state) => { + state.nodeAuthTokens = authenticationResult.nodeAuthTokens; + state.authConnectionId = authConnectionId; + state.groupedAuthConnectionId = groupedAuthConnectionId; + state.userId = userId; + state.authConnection = authConnection; + state.socialLoginEmail = socialLoginEmail; + }); + return authenticationResult; + } catch (error) { + log('Error authenticating user', error); + throw new Error(SeedlessOnboardingControllerError.AuthenticationError); + } + }); } /** @@ -268,32 +272,34 @@ export class SeedlessOnboardingController extends BaseController< // assert that the user is authenticated before creating the TOPRF key and backing up the seed phrase this.#assertIsAuthenticatedUser(this.state); - // locally evaluate the encryption key from the password - const { encKey, authKeyPair, oprfKey } = this.toprfClient.createLocalKey({ - password, - }); + return this.#withControllerLock(async () => { + // locally evaluate the encryption key from the password + const { encKey, authKeyPair, oprfKey } = this.toprfClient.createLocalKey({ + password, + }); - // encrypt and store the seed phrase backup - await this.#encryptAndStoreSeedPhraseBackup({ - keyringId, - seedPhrase, - encKey, - authKeyPair, - }); + // encrypt and store the seed phrase backup + await this.#encryptAndStoreSeedPhraseBackup({ + keyringId, + seedPhrase, + encKey, + authKeyPair, + }); - // store/persist the encryption key shares - // We store the seed phrase metadata in the metadata store first. If this operation fails, - // we avoid persisting the encryption key shares to prevent a situation where a user appears - // to have an account but with no associated data. - await this.#persistOprfKey(oprfKey, authKeyPair.pk); - // create a new vault with the resulting authentication data - await this.#createNewVaultWithAuthData({ - password, - rawToprfEncryptionKey: encKey, - rawToprfAuthKeyPair: authKeyPair, - }); - this.#persistAuthPubKey({ - authPubKey: authKeyPair.pk, + // store/persist the encryption key shares + // We store the seed phrase metadata in the metadata store first. If this operation fails, + // we avoid persisting the encryption key shares to prevent a situation where a user appears + // to have an account but with no associated data. + await this.#persistOprfKey(oprfKey, authKeyPair.pk); + // create a new vault with the resulting authentication data + await this.#createNewVaultWithAuthData({ + password, + rawToprfEncryptionKey: encKey, + rawToprfAuthKeyPair: authKeyPair, + }); + this.#persistAuthPubKey({ + authPubKey: authKeyPair.pk, + }); }); } @@ -310,17 +316,19 @@ export class SeedlessOnboardingController extends BaseController< ): Promise { this.#assertIsUnlocked(); await this.#assertPasswordInSync(); - - // verify the password and unlock the vault - const { toprfEncryptionKey, toprfAuthKeyPair } = - await this.#unlockVaultAndGetBackupEncKey(); - - // encrypt and store the seed phrase backup - await this.#encryptAndStoreSeedPhraseBackup({ - keyringId, - seedPhrase, - encKey: toprfEncryptionKey, - authKeyPair: toprfAuthKeyPair, + // NOTE don't include #assertPasswordInSync in #withControllerLock since #assertPasswordInSync already acquires the controller lock + return this.#withControllerLock(async () => { + // verify the password and unlock the vault + const { toprfEncryptionKey, toprfAuthKeyPair } = + await this.#unlockVaultAndGetBackupEncKey(); + + // encrypt and store the seed phrase backup + await this.#encryptAndStoreSeedPhraseBackup({ + keyringId, + seedPhrase, + encKey: toprfEncryptionKey, + authKeyPair: toprfAuthKeyPair, + }); }); } @@ -336,33 +344,35 @@ export class SeedlessOnboardingController extends BaseController< // assert that the user is authenticated before fetching the seed phrases this.#assertIsAuthenticatedUser(this.state); - const { encKey, authKeyPair } = await this.#recoverEncKey(password); + return this.#withControllerLock(async () => { + const { encKey, authKeyPair } = await this.#recoverEncKey(password); - try { - const secretData = await this.toprfClient.fetchAllSecretDataItems({ - decKey: encKey, - authKeyPair, - }); - - if (secretData?.length > 0) { - await this.#createNewVaultWithAuthData({ - password, - rawToprfEncryptionKey: encKey, - rawToprfAuthKeyPair: authKeyPair, + try { + const secretData = await this.toprfClient.fetchAllSecretDataItems({ + decKey: encKey, + authKeyPair, }); - this.#persistAuthPubKey({ - authPubKey: authKeyPair.pk, - }); - } + if (secretData?.length > 0) { + await this.#createNewVaultWithAuthData({ + password, + rawToprfEncryptionKey: encKey, + rawToprfAuthKeyPair: authKeyPair, + }); - return SeedPhraseMetadata.parseSeedPhraseFromMetadataStore(secretData); - } catch (error) { - log('Error fetching seed phrase metadata', error); - throw new Error( - SeedlessOnboardingControllerError.FailedToFetchSeedPhraseMetadata, - ); - } + this.#persistAuthPubKey({ + authPubKey: authKeyPair.pk, + }); + } + + return SeedPhraseMetadata.parseSeedPhraseFromMetadataStore(secretData); + } catch (error) { + log('Error fetching seed phrase metadata', error); + throw new Error( + SeedlessOnboardingControllerError.FailedToFetchSeedPhraseMetadata, + ); + } + }); } /** @@ -372,6 +382,7 @@ export class SeedlessOnboardingController extends BaseController< * * @param newPassword - The new password to update. * @param oldPassword - The old password to verify. + * @returns A promise that resolves to the success of the operation. */ async changePassword(newPassword: string, oldPassword: string) { this.#assertIsUnlocked(); @@ -379,25 +390,30 @@ export class SeedlessOnboardingController extends BaseController< await this.verifyPassword(oldPassword); await this.#assertPasswordInSync(); - try { - // update the encryption key with new password and update the Metadata Store - const { encKey: newEncKey, authKeyPair: newAuthKeyPair } = - await this.#changeEncryptionKey(newPassword, oldPassword); + // NOTE don't include verifyPassword and #assertPasswordInSync in #withControllerLock since verifyPassword and #assertPasswordInSync already acquires the controller lock + return this.#withControllerLock(async () => { + try { + // update the encryption key with new password and update the Metadata Store + const { encKey: newEncKey, authKeyPair: newAuthKeyPair } = + await this.#changeEncryptionKey(newPassword, oldPassword); - // update and encrypt the vault with new password - await this.#createNewVaultWithAuthData({ - password: newPassword, - rawToprfEncryptionKey: newEncKey, - rawToprfAuthKeyPair: newAuthKeyPair, - }); + // update and encrypt the vault with new password + await this.#createNewVaultWithAuthData({ + password: newPassword, + rawToprfEncryptionKey: newEncKey, + rawToprfAuthKeyPair: newAuthKeyPair, + }); - this.#persistAuthPubKey({ - authPubKey: newAuthKeyPair.pk, - }); - } catch (error) { - log('Error changing password', error); - throw new Error(SeedlessOnboardingControllerError.FailedToChangePassword); - } + this.#persistAuthPubKey({ + authPubKey: newAuthKeyPair.pk, + }); + } catch (error) { + log('Error changing password', error); + throw new Error( + SeedlessOnboardingControllerError.FailedToChangePassword, + ); + } + }); } /** @@ -427,14 +443,16 @@ export class SeedlessOnboardingController extends BaseController< * Verify the password validity by decrypting the vault. * * @param password - The password to verify. + * @returns A promise that resolves to the success of the operation. * @throws {Error} If the password is invalid or the vault is not initialized. */ async verifyPassword(password: string): Promise { - if (!this.state.vault) { - throw new Error(SeedlessOnboardingControllerError.VaultError); - } - - await this.#vaultEncryptor.decrypt(password, this.state.vault); + return this.#withControllerLock(async () => { + if (!this.state.vault) { + throw new Error(SeedlessOnboardingControllerError.VaultError); + } + await this.#vaultEncryptor.decrypt(password, this.state.vault); + }); } /** @@ -463,26 +481,33 @@ export class SeedlessOnboardingController extends BaseController< * This operation is useful when user performs some actions that requires the user password/encryption key. e.g. add new srp backup * * @param password - The password to submit. + * @returns A promise that resolves to the success of the operation. */ async submitPassword(password: string): Promise { - await this.#unlockVaultAndGetBackupEncKey(password); - this.#setUnlocked(); + return this.#withControllerLock(async () => { + await this.#unlockVaultAndGetBackupEncKey(password); + this.#setUnlocked(); + }); } /** * Set the controller to locked state, and deallocate the secrets (vault encryption key and salt). * * When the controller is locked, the user will not be able to perform any operations on the controller/vault. + * + * @returns A promise that resolves to the success of the operation. */ - setLocked(): void { + async setLocked(): Promise { this.#assertIsUnlocked(); - this.update((state) => { - delete state.vaultEncryptionKey; - delete state.vaultEncryptionSalt; - }); + return this.#withControllerLock(async () => { + this.update((state) => { + delete state.vaultEncryptionKey; + delete state.vaultEncryptionSalt; + }); - this.#isUnlocked = false; + this.#isUnlocked = false; + }); } /** @@ -491,30 +516,32 @@ export class SeedlessOnboardingController extends BaseController< * * @param params - The parameters for fetching the password. * @param params.globalPassword - The latest global password. - * @returns A promise that resolves to the password. + * @returns A promise that resolves to the password corresponding to the current authPubKey in state. */ async recoverPassword({ globalPassword, }: { globalPassword: string; }): Promise<{ password: string }> { - const currentDeviceAuthPubKey = this.#recoverAuthPubKey(); + return this.#withControllerLock(async () => { + const currentDeviceAuthPubKey = this.#recoverAuthPubKey(); - const { - encKey: currentGlobalDeviceEncKey, - authKeyPair: currentGlobalDeviceAuthKeyPair, - } = await this.#recoverEncKey(globalPassword); - - try { - const res = await this.toprfClient.recoverPassword({ - targetPwPubKey: currentDeviceAuthPubKey, - curEncKey: currentGlobalDeviceEncKey, - curAuthKeyPair: currentGlobalDeviceAuthKeyPair, - }); - return res; - } catch (error) { - throw PasswordSyncError.getInstance(error); - } + const { + encKey: currentGlobalDeviceEncKey, + authKeyPair: currentGlobalDeviceAuthKeyPair, + } = await this.#recoverEncKey(globalPassword); + + try { + const res = await this.toprfClient.recoverPassword({ + targetPwPubKey: currentDeviceAuthPubKey, + curEncKey: currentGlobalDeviceEncKey, + curAuthKeyPair: currentGlobalDeviceAuthKeyPair, + }); + return res; + } catch (error) { + throw PasswordSyncError.getInstance(error); + } + }); } /** @@ -523,25 +550,27 @@ export class SeedlessOnboardingController extends BaseController< * @returns A promise that resolves to true if the password is outdated, false otherwise. */ async checkIsPasswordOutdated(): Promise { - this.#assertIsAuthenticatedUser(this.state); - const { - nodeAuthTokens, - authConnectionId, - groupedAuthConnectionId, - userId, - } = this.state; + return this.#withControllerLock(async () => { + this.#assertIsAuthenticatedUser(this.state); + const { + nodeAuthTokens, + authConnectionId, + groupedAuthConnectionId, + userId, + } = this.state; - const authPubKey = this.#recoverAuthPubKey(); + const authPubKey = this.#recoverAuthPubKey(); - const { authPubKey: globalAuthPubKey } = - await this.toprfClient.fetchAuthPubKey({ - nodeAuthTokens, - verifier: groupedAuthConnectionId || authConnectionId, - verifierId: userId, - }); + const { authPubKey: globalAuthPubKey } = + await this.toprfClient.fetchAuthPubKey({ + nodeAuthTokens, + verifier: groupedAuthConnectionId || authConnectionId, + verifierId: userId, + }); - // TODO: use noble lib to deserialize and compare curve point - return bytesToHex(authPubKey) !== bytesToHex(globalAuthPubKey); + // TODO: use noble lib to deserialize and compare curve point + return bytesToHex(authPubKey) !== bytesToHex(globalAuthPubKey); + }); } #setUnlocked(): void { @@ -946,6 +975,24 @@ export class SeedlessOnboardingController extends BaseController< }); } + /** + * Lock the controller mutex before executing the given function, + * and release it after the function is resolved or after an + * error is thrown. + * + * This wrapper ensures that each mutable operation that interacts with the + * controller and that changes its state is executed in a mutually exclusive way, + * preventing unsafe concurrent access that could lead to unpredictable behavior. + * + * @param callback - The function to execute while the controller mutex is locked. + * @returns The result of the function. + */ + async #withControllerLock( + callback: MutuallyExclusiveCallback, + ): Promise { + return withLock(this.#controllerOperationMutex, callback); + } + /** * Lock the vault mutex before executing the given function, * and release it after the function is resolved or after an From 327f079be757ceb6fbc956812883ba07b5201c82 Mon Sep 17 00:00:00 2001 From: Nguyen Anh Tu Date: Mon, 28 Apr 2025 08:07:04 +0700 Subject: [PATCH 068/147] feat: add sync latest global password --- .../src/SeedlessOnboardingController.test.ts | 237 +++++++++++++++++- .../src/SeedlessOnboardingController.ts | 36 +++ 2 files changed, 272 insertions(+), 1 deletion(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts index d06ab1784c..6dfb35bda2 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts @@ -10,7 +10,12 @@ import { type ToprfSecureBackup, TOPRFErrorCode, } from '@metamask/toprf-secure-backup'; -import { base64ToBytes, bytesToBase64, stringToBytes } from '@metamask/utils'; +import { + base64ToBytes, + bytesToBase64, + stringToBytes, + bigIntToHex, +} from '@metamask/utils'; import { Web3AuthNetwork, @@ -2448,4 +2453,234 @@ describe('SeedlessOnboardingController', () => { ); }); }); + + describe('syncLatestGlobalPassword', () => { + const OLD_PASSWORD = 'old-mock-password'; + const GLOBAL_PASSWORD = 'new-global-password'; + let MOCK_VAULT: string; + let MOCK_VAULT_ENCRYPTION_KEY: string; + let MOCK_VAULT_ENCRYPTION_SALT: string; + let INITIAL_AUTH_PUB_KEY: string; + let initialAuthKeyPair: KeyPair; // Store initial keypair for vault creation + let initialEncKey: Uint8Array; // Store initial encKey for vault creation + + // Generate initial keys and vault state before tests run + beforeAll(async () => { + const mockToprfEncryptor = createMockToprfEncryptor(); + initialEncKey = mockToprfEncryptor.deriveEncKey(OLD_PASSWORD); + initialAuthKeyPair = mockToprfEncryptor.deriveAuthKeyPair(OLD_PASSWORD); + INITIAL_AUTH_PUB_KEY = bytesToBase64(initialAuthKeyPair.pk); + + const mockResult = await createMockVault( + initialEncKey, + initialAuthKeyPair, + OLD_PASSWORD, + MOCK_NODE_AUTH_TOKENS, + ); + + MOCK_VAULT = mockResult.encryptedMockVault; + MOCK_VAULT_ENCRYPTION_KEY = mockResult.vaultEncryptionKey; + MOCK_VAULT_ENCRYPTION_SALT = mockResult.vaultEncryptionSalt; + }); + + // Remove beforeEach as setup is done in beforeAll now + + it('should successfully sync the latest global password', async () => { + await withController( + { + // Pass the pre-generated state values + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + authPubKey: INITIAL_AUTH_PUB_KEY, // Use the base64 encoded key + vault: MOCK_VAULT, + vaultEncryptionKey: MOCK_VAULT_ENCRYPTION_KEY, + vaultEncryptionSalt: MOCK_VAULT_ENCRYPTION_SALT, + }), + }, + async ({ controller, toprfClient, encryptor }) => { + // Unlock controller first - requires vaultEncryptionKey/Salt or password + // Since we provide key/salt in state, submitPassword isn't strictly needed here + // but we keep it to match the method's requirement of being unlocked + // We'll use the key/salt implicitly by not providing password to unlockVaultAndGetBackupEncKey + await controller.submitPassword(OLD_PASSWORD); // Unlock using the standard method + + const verifyPasswordSpy = jest.spyOn(controller, 'verifyPassword'); + const recoverEncKeySpy = jest.spyOn(toprfClient, 'recoverEncKey'); + const encryptorSpy = jest.spyOn(encryptor, 'encryptWithDetail'); + + // Mock recoverEncKey for the new global password + const mockToprfEncryptor = createMockToprfEncryptor(); + const newEncKey = mockToprfEncryptor.deriveEncKey(GLOBAL_PASSWORD); + const newAuthKeyPair = + mockToprfEncryptor.deriveAuthKeyPair(GLOBAL_PASSWORD); + + recoverEncKeySpy.mockResolvedValueOnce({ + encKey: newEncKey, + authKeyPair: newAuthKeyPair, + rateLimitResetResult: Promise.resolve(), + keyShareIndex: 1, + }); + + // We still need verifyPassword to work conceptually, even if unlock is bypassed + // verifyPasswordSpy.mockResolvedValueOnce(); // Don't mock, let the real one run inside syncLatestGlobalPassword + + await controller.syncLatestGlobalPassword({ + oldPassword: OLD_PASSWORD, + globalPassword: GLOBAL_PASSWORD, + }); + + // Assertions + expect(verifyPasswordSpy).toHaveBeenCalledWith(OLD_PASSWORD); + expect(recoverEncKeySpy).toHaveBeenCalledWith( + expect.objectContaining({ password: GLOBAL_PASSWORD }), + ); + + // Check if vault was re-encrypted with the new password and keys + const expectedSerializedVaultData = JSON.stringify({ + authTokens: controller.state.nodeAuthTokens, + toprfEncryptionKey: bytesToBase64(newEncKey), + toprfAuthKeyPair: JSON.stringify({ + sk: bigIntToHex(newAuthKeyPair.sk), + pk: bytesToBase64(newAuthKeyPair.pk), + }), + }); + expect(encryptorSpy).toHaveBeenCalledWith( + GLOBAL_PASSWORD, + expectedSerializedVaultData, + ); + + // Check if authPubKey was updated in state + expect(controller.state.authPubKey).toBe( + bytesToBase64(newAuthKeyPair.pk), + ); + // Check if vault content actually changed + expect(controller.state.vault).not.toBe(MOCK_VAULT); + }, + ); + }); + + it('should throw an error if the old password verification fails', async () => { + await withController( + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + authPubKey: INITIAL_AUTH_PUB_KEY, + vault: MOCK_VAULT, + vaultEncryptionKey: MOCK_VAULT_ENCRYPTION_KEY, + vaultEncryptionSalt: MOCK_VAULT_ENCRYPTION_SALT, + }), + }, + async ({ controller }) => { + // Unlock controller first + await controller.submitPassword(OLD_PASSWORD); + + const verifyPasswordSpy = jest + .spyOn(controller, 'verifyPassword') + .mockRejectedValueOnce(new Error('Incorrect old password')); + + await expect( + controller.syncLatestGlobalPassword({ + oldPassword: 'WRONG_OLD_PASSWORD', + globalPassword: GLOBAL_PASSWORD, + }), + ).rejects.toThrow('Incorrect old password'); + + expect(verifyPasswordSpy).toHaveBeenCalledWith('WRONG_OLD_PASSWORD'); + }, + ); + }); + + it('should throw an error if recovering the encryption key for the global password fails', async () => { + await withController( + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + authPubKey: INITIAL_AUTH_PUB_KEY, + vault: MOCK_VAULT, + vaultEncryptionKey: MOCK_VAULT_ENCRYPTION_KEY, + vaultEncryptionSalt: MOCK_VAULT_ENCRYPTION_SALT, + }), + }, + async ({ controller, toprfClient }) => { + // Unlock controller first + await controller.submitPassword(OLD_PASSWORD); + + const verifyPasswordSpy = jest + .spyOn(controller, 'verifyPassword') + .mockResolvedValueOnce(); + const recoverEncKeySpy = jest + .spyOn(toprfClient, 'recoverEncKey') + .mockRejectedValueOnce( + new RecoveryError( + SeedlessOnboardingControllerError.LoginFailedError, + ), + ); + + await expect( + controller.syncLatestGlobalPassword({ + oldPassword: OLD_PASSWORD, + globalPassword: GLOBAL_PASSWORD, + }), + ).rejects.toThrow(SeedlessOnboardingControllerError.LoginFailedError); + + expect(verifyPasswordSpy).toHaveBeenCalledWith(OLD_PASSWORD); + expect(recoverEncKeySpy).toHaveBeenCalledWith( + expect.objectContaining({ password: GLOBAL_PASSWORD }), + ); + }, + ); + }); + + it('should throw an error if creating the new vault fails', async () => { + await withController( + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + authPubKey: INITIAL_AUTH_PUB_KEY, + vault: MOCK_VAULT, + vaultEncryptionKey: MOCK_VAULT_ENCRYPTION_KEY, + vaultEncryptionSalt: MOCK_VAULT_ENCRYPTION_SALT, + }), + }, + async ({ controller, toprfClient, encryptor }) => { + // Unlock controller first + await controller.submitPassword(OLD_PASSWORD); + + const verifyPasswordSpy = jest + .spyOn(controller, 'verifyPassword') + .mockResolvedValueOnce(); + const recoverEncKeySpy = jest.spyOn(toprfClient, 'recoverEncKey'); + const encryptorSpy = jest + .spyOn(encryptor, 'encryptWithDetail') + .mockRejectedValueOnce(new Error('Vault creation failed')); + + // Mock recoverEncKey for the new global password + const mockToprfEncryptor = createMockToprfEncryptor(); + const newEncKey = mockToprfEncryptor.deriveEncKey(GLOBAL_PASSWORD); + const newAuthKeyPair = + mockToprfEncryptor.deriveAuthKeyPair(GLOBAL_PASSWORD); + + recoverEncKeySpy.mockResolvedValueOnce({ + encKey: newEncKey, + authKeyPair: newAuthKeyPair, + rateLimitResetResult: Promise.resolve(), + keyShareIndex: 1, + }); + + await expect( + controller.syncLatestGlobalPassword({ + oldPassword: OLD_PASSWORD, + globalPassword: GLOBAL_PASSWORD, + }), + ).rejects.toThrow('Vault creation failed'); + + expect(verifyPasswordSpy).toHaveBeenCalledWith(OLD_PASSWORD); + expect(recoverEncKeySpy).toHaveBeenCalledWith( + expect.objectContaining({ password: GLOBAL_PASSWORD }), + ); + expect(encryptorSpy).toHaveBeenCalled(); + }, + ); + }); + }); }); diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index c3516e03ac..758bed3b74 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -510,6 +510,42 @@ export class SeedlessOnboardingController extends BaseController< }); } + /** + * Sync the latest global password to the controller. + * reset vault with latest globalPassword, + * persist the latest global password authPubKey + * + * @param params - The parameters for syncing the latest global password. + * @param params.oldPassword - The old password to verify. + * @param params.globalPassword - The latest global password. + * @returns A promise that resolves to the success of the operation. + */ + async syncLatestGlobalPassword({ + oldPassword, + globalPassword, + }: { + oldPassword: string; + globalPassword: string; + }) { + // verify correct old password + await this.verifyPassword(oldPassword); + // NOTE don't include verifyPassword in #withControllerLock since verifyPassword already acquires the controller lock + return this.#withControllerLock(async () => { + // update vault with latest globalPassword + const { encKey, authKeyPair } = await this.#recoverEncKey(globalPassword); + // update and encrypt the vault with new password + await this.#createNewVaultWithAuthData({ + password: globalPassword, + rawToprfEncryptionKey: encKey, + rawToprfAuthKeyPair: authKeyPair, + }); + // persist the latest global password authPubKey + this.#persistAuthPubKey({ + authPubKey: authKeyPair.pk, + }); + }); + } + /** * @description Fetch the password corresponding to the current authPubKey in state (current device password which is already out of sync with the current global password). * then we use this recovered old password to unlock the vault and set the password to the new global password. From 3a06bbe424ed0b3f9735d8e365ca72c857682a6e Mon Sep 17 00:00:00 2001 From: Nguyen Anh Tu Date: Mon, 28 Apr 2025 10:11:32 +0700 Subject: [PATCH 069/147] feat: add check outdated password cache --- .../src/SeedlessOnboardingController.test.ts | 37 +++++++++++++++++++ .../src/SeedlessOnboardingController.ts | 29 ++++++++++++++- .../src/constants.ts | 2 + .../src/types.ts | 5 +++ 4 files changed, 71 insertions(+), 2 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts index 6dfb35bda2..fde37a4473 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts @@ -590,9 +590,15 @@ describe('SeedlessOnboardingController', () => { }), }, async ({ controller, toprfClient }) => { + const spy = jest.spyOn(toprfClient, 'fetchAuthPubKey'); mockFetchAuthPubKey(toprfClient, base64ToBytes(MOCK_AUTH_PUB_KEY)); const result = await controller.checkIsPasswordOutdated(); expect(result).toBe(false); + // Call again to test cache + const result2 = await controller.checkIsPasswordOutdated(); + expect(result2).toBe(false); + // Should only call fetchAuthPubKey once due to cache + expect(spy).toHaveBeenCalledTimes(1); }, ); }); @@ -606,9 +612,40 @@ describe('SeedlessOnboardingController', () => { }), }, async ({ controller, toprfClient }) => { + const spy = jest.spyOn(toprfClient, 'fetchAuthPubKey'); mockFetchAuthPubKey(toprfClient, base64ToBytes(MOCK_AUTH_PUB_KEY)); const result = await controller.checkIsPasswordOutdated(); expect(result).toBe(true); + // Call again to test cache + const result2 = await controller.checkIsPasswordOutdated(); + expect(result2).toBe(true); + // Should only call fetchAuthPubKey once due to cache + expect(spy).toHaveBeenCalledTimes(1); + }, + ); + }); + + it('should bypass cache if skipCache is true', async () => { + await withController( + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + withMockAuthPubKey: true, + }), + }, + async ({ controller, toprfClient }) => { + const spy = jest.spyOn(toprfClient, 'fetchAuthPubKey'); + mockFetchAuthPubKey(toprfClient, base64ToBytes(MOCK_AUTH_PUB_KEY)); + const result = await controller.checkIsPasswordOutdated({ + skipCache: true, + }); + expect(result).toBe(false); + // Call again with skipCache: true, should call fetchAuthPubKey again + const result2 = await controller.checkIsPasswordOutdated({ + skipCache: true, + }); + expect(result2).toBe(false); + expect(spy).toHaveBeenCalledTimes(2); }, ); }); diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index 758bed3b74..249739d990 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -29,6 +29,7 @@ import { Mutex } from 'async-mutex'; import { type AuthConnection, controllerName, + PASSWORD_OUTDATED_CACHE_TTL_MS, SeedlessOnboardingControllerError, Web3AuthNetwork, } from './constants'; @@ -133,6 +134,10 @@ const seedlessOnboardingMetadata: StateMetadata { + async checkIsPasswordOutdated(options?: { + skipCache?: boolean; + }): Promise { + // cache result to reduce load on infra + // Check cache first unless skipCache is true + const now = Date.now(); + if ( + !options?.skipCache && + this.state.passwordOutdatedCache && + now - this.state.passwordOutdatedCache.timestamp < + PASSWORD_OUTDATED_CACHE_TTL_MS + ) { + return this.state.passwordOutdatedCache.value; + } return this.#withControllerLock(async () => { this.#assertIsAuthenticatedUser(this.state); const { @@ -605,7 +625,12 @@ export class SeedlessOnboardingController extends BaseController< }); // TODO: use noble lib to deserialize and compare curve point - return bytesToHex(authPubKey) !== bytesToHex(globalAuthPubKey); + const result = bytesToHex(authPubKey) !== bytesToHex(globalAuthPubKey); + // Cache the result in state + this.update((state) => { + state.passwordOutdatedCache = { value: result, timestamp: Date.now() }; + }); + return result; }); } diff --git a/packages/seedless-onboarding-controller/src/constants.ts b/packages/seedless-onboarding-controller/src/constants.ts index 9717c93804..ac05b9be93 100644 --- a/packages/seedless-onboarding-controller/src/constants.ts +++ b/packages/seedless-onboarding-controller/src/constants.ts @@ -1,5 +1,7 @@ export const controllerName = 'SeedlessOnboardingController'; +export const PASSWORD_OUTDATED_CACHE_TTL_MS = 15 * 60 * 1000; // 15 minutes + export enum Web3AuthNetwork { Mainnet = 'sapphire_mainnet', Devnet = 'sapphire_devnet', diff --git a/packages/seedless-onboarding-controller/src/types.ts b/packages/seedless-onboarding-controller/src/types.ts index 4fbb613960..75d9c72461 100644 --- a/packages/seedless-onboarding-controller/src/types.ts +++ b/packages/seedless-onboarding-controller/src/types.ts @@ -95,6 +95,11 @@ export type SeedlessOnboardingControllerState = * The salt used to derive the encryption key from the password. */ vaultEncryptionSalt?: string; + + /** + * Cache for checkIsPasswordOutdated result and timestamp. + */ + passwordOutdatedCache?: { value: boolean; timestamp: number }; }; // Actions From 103e7fdbbc9bc52019a9fc9a4625fe04a0c39caf Mon Sep 17 00:00:00 2001 From: Nguyen Anh Tu Date: Mon, 28 Apr 2025 10:17:25 +0700 Subject: [PATCH 070/147] feat: add skip cache param for assert password in sync --- .../src/SeedlessOnboardingController.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index 249739d990..82468040ae 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -1191,10 +1191,14 @@ export class SeedlessOnboardingController extends BaseController< /** * Assert that the password is in sync with the global password. * + * @param options - The options for asserting the password is in sync. + * @param options.skipCache - Whether to skip the cache check. * @throws If the password is outdated. */ - async #assertPasswordInSync(): Promise { - const isPasswordOutdated = await this.checkIsPasswordOutdated(); + async #assertPasswordInSync(options?: { + skipCache?: boolean; + }): Promise { + const isPasswordOutdated = await this.checkIsPasswordOutdated(options); if (isPasswordOutdated) { throw new Error(SeedlessOnboardingControllerError.OutdatedPassword); } From 605414803615c05824995e850558e5f59c170c7e Mon Sep 17 00:00:00 2001 From: Nguyen Anh Tu Date: Mon, 28 Apr 2025 10:36:04 +0700 Subject: [PATCH 071/147] feat: reset password outdated cache after password change --- .../src/SeedlessOnboardingController.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index 82468040ae..450e190ee5 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -412,6 +412,7 @@ export class SeedlessOnboardingController extends BaseController< this.#persistAuthPubKey({ authPubKey: newAuthKeyPair.pk, }); + this.#resetPasswordOutdatedCache(); } catch (error) { log('Error changing password', error); throw new Error( @@ -548,6 +549,7 @@ export class SeedlessOnboardingController extends BaseController< this.#persistAuthPubKey({ authPubKey: authKeyPair.pk, }); + this.#resetPasswordOutdatedCache(); }); } @@ -1204,6 +1206,12 @@ export class SeedlessOnboardingController extends BaseController< } } + #resetPasswordOutdatedCache(): void { + this.update((state) => { + delete state.passwordOutdatedCache; + }); + } + /** * Check if the provided value is a valid vault data. * From f2b5d96ccd26e67e30fe76f1e99344fcff2b8e8c Mon Sep 17 00:00:00 2001 From: lwin Date: Tue, 29 Apr 2025 18:30:52 +0700 Subject: [PATCH 072/147] fix: use Keyring Encryptor as vault encryptor --- .../src/SeedlessOnboardingController.test.ts | 7 +- .../src/SeedlessOnboardingController.ts | 14 ++-- .../src/types.ts | 73 +------------------ .../tests/mocks/vaultEncryptor.ts | 15 ++-- 4 files changed, 23 insertions(+), 86 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts index 8e6cc71b61..1f75b3f8f2 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts @@ -24,6 +24,7 @@ import type { SeedlessOnboardingControllerMessenger, SeedlessOnboardingControllerOptions, SeedlessOnboardingControllerState, + VaultEncryptor, } from './types'; import { handleMockSecretDataGet, @@ -45,7 +46,7 @@ type WithControllerCallback = ({ messenger, }: { controller: SeedlessOnboardingController; - encryptor: MockVaultEncryptor; + encryptor: VaultEncryptor; initialState: SeedlessOnboardingControllerState; messenger: SeedlessOnboardingControllerMessenger; toprfClient: ToprfSecureBackup; @@ -95,7 +96,7 @@ async function withController( ...args: WithControllerArgs ) { const [{ ...rest }, fn] = args.length === 2 ? args : [{}, args[0]]; - const encryptor = new MockVaultEncryptor(); + const encryptor: VaultEncryptor = new MockVaultEncryptor(); const messenger = buildSeedlessOnboardingControllerMessenger(); const controller = new SeedlessOnboardingController({ @@ -393,7 +394,7 @@ describe('SeedlessOnboardingController', () => { it('should be able to instantiate with an encryptor', () => { const messenger = buildSeedlessOnboardingControllerMessenger(); - const encryptor = createMockVaultEncryptor(); + const encryptor: VaultEncryptor = createMockVaultEncryptor(); expect( () => diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index 56a4e7bb1d..54eafffb47 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -2,12 +2,11 @@ import { keccak256AndHexify } from '@metamask/auth-network-utils'; import type { StateMetadata } from '@metamask/base-controller'; import { BaseController } from '@metamask/base-controller'; import { - type EncryptionKey, encrypt, decrypt, decryptWithDetail, encryptWithDetail, - decryptWithKey, + decryptWithKey as decryptWithKeyBrowserPassworder, importKey as importKeyBrowserPassworder, } from '@metamask/browser-passworder'; import type { @@ -35,7 +34,6 @@ import { RecoveryError } from './errors'; import { projectLogger, createModuleLogger } from './logger'; import { SeedPhraseMetadata } from './SeedPhraseMetadata'; import type { - VaultEncryptor, MutuallyExclusiveCallback, SeedlessOnboardingControllerMessenger, SeedlessOnboardingControllerOptions, @@ -43,6 +41,7 @@ import type { VaultData, AuthenticatedUserDetails, SocialBackupsMetadata, + VaultEncryptor, } from './types'; const log = createModuleLogger(projectLogger, controllerName); @@ -71,10 +70,11 @@ export function getDefaultSeedlessOnboardingVaultEncryptor(): VaultEncryptor { encryptWithDetail, decrypt, decryptWithDetail, - decryptWithKey, - importKey: importKeyBrowserPassworder as ( - key: string, - ) => Promise, + decryptWithKey: decryptWithKeyBrowserPassworder as ( + key: unknown, + payload: unknown, + ) => Promise, + importKey: importKeyBrowserPassworder, }; } diff --git a/packages/seedless-onboarding-controller/src/types.ts b/packages/seedless-onboarding-controller/src/types.ts index ef6a05bc93..59adb60130 100644 --- a/packages/seedless-onboarding-controller/src/types.ts +++ b/packages/seedless-onboarding-controller/src/types.ts @@ -2,17 +2,11 @@ import type { RestrictedMessenger } from '@metamask/base-controller'; import type { ControllerGetStateAction } from '@metamask/base-controller'; import type { ControllerStateChangeEvent } from '@metamask/base-controller'; import type { - DetailedDecryptResult, - DetailedEncryptionResult, - EncryptionKey, - EncryptionResult, -} from '@metamask/browser-passworder'; -import type { + ExportableKeyEncryptor, KeyringControllerLockEvent, KeyringControllerUnlockEvent, } from '@metamask/keyring-controller'; import type { NodeAuthTokens } from '@metamask/toprf-secure-backup'; -import type { Json } from '@metamask/utils'; import type { MutexInterface } from 'async-mutex'; import type { @@ -123,70 +117,7 @@ export type SeedlessOnboardingControllerMessenger = RestrictedMessenger< /** * Encryptor interface for encrypting and decrypting seedless onboarding vault. */ -export type VaultEncryptor = { - /** - * Encrypts the given object with the given password. - * - * @param password - The password to encrypt with. - * @param object - The object to encrypt. - * @returns The encrypted string. - */ - encrypt: (password: string, object: Json) => Promise; - /** - * Encrypts the given object with the given password, and returns the - * encryption result and the exported key string. - * - * @param password - The password to encrypt with. - * @param object - The object to encrypt. - * @param salt - The optional salt to use for encryption. - * @returns The encrypted string and the exported key string. - */ - encryptWithDetail: ( - password: string, - object: Json, - salt?: string, - ) => Promise; - /** - * Decrypts the given encrypted string with the given password. - * - * @param password - The password to decrypt with. - * @param encryptedString - The encrypted string to decrypt. - * @returns The decrypted object. - */ - decrypt: (password: string, encryptedString: string) => Promise; - /** - * Decrypts the given encrypted string with the given password, and returns - * the decrypted object and the salt and exported key string used for - * encryption. - * - * @param password - The password to decrypt with. - * @param encryptedString - The encrypted string to decrypt. - * @returns The decrypted object and the salt and exported key string used for - * encryption. - */ - decryptWithDetail: ( - password: string, - encryptedString: string, - ) => Promise; - /** - * Decrypts the given encrypted string with the given encryption key. - * - * @param key - The encryption key to decrypt with. - * @param encryptedString - The encrypted string to decrypt. - * @returns The decrypted object. - */ - decryptWithKey: ( - key: EncryptionKey, - encryptedString: EncryptionResult, - ) => Promise; - /** - * Generates an encryption key from exported key string. - * - * @param key - The exported key string. - * @returns The encryption key. - */ - importKey: (key: string) => Promise; -}; +export type VaultEncryptor = Omit; /** * Seedless Onboarding Controller Options. diff --git a/packages/seedless-onboarding-controller/tests/mocks/vaultEncryptor.ts b/packages/seedless-onboarding-controller/tests/mocks/vaultEncryptor.ts index 53dd1951b7..67ea9da1f7 100644 --- a/packages/seedless-onboarding-controller/tests/mocks/vaultEncryptor.ts +++ b/packages/seedless-onboarding-controller/tests/mocks/vaultEncryptor.ts @@ -146,13 +146,18 @@ export default class MockVaultEncryptor implements VaultEncryptor { return encryptionResult; } - async decryptWithKey( - encryptionKey: EncryptionKey | webcrypto.CryptoKey, - encData: EncryptionResult, - ) { + async decryptWithKey(encryptionKey: unknown, payload: string) { + let encData: EncryptionResult; + if (typeof payload === 'string') { + encData = JSON.parse(payload); + } else { + encData = payload; + } + const encryptedData = Buffer.from(encData.data, 'base64'); const vector = Buffer.from(encData.iv, 'base64'); - const key = 'key' in encryptionKey ? encryptionKey.key : encryptionKey; + const encKey = encryptionKey as EncryptionKey | webcrypto.CryptoKey; + const key = 'key' in encKey ? encKey.key : encKey; const result = await webcrypto.subtle.decrypt( { name: 'AES-GCM', iv: vector }, From 9b2cb7b9bf5f67b628ef9b8ec6d33e993c3db13b Mon Sep 17 00:00:00 2001 From: lwin Date: Tue, 29 Apr 2025 18:34:55 +0700 Subject: [PATCH 073/147] chore: added controller tgz to git --- .../seedless-onboarding-controller.tgz | Bin 0 -> 51865 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 packages/seedless-onboarding-controller/seedless-onboarding-controller.tgz diff --git a/packages/seedless-onboarding-controller/seedless-onboarding-controller.tgz b/packages/seedless-onboarding-controller/seedless-onboarding-controller.tgz new file mode 100644 index 0000000000000000000000000000000000000000..b3e07a6b87f08c22b53a9c1109e6afd00ee3bc9b GIT binary patch literal 51865 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 R)SL}qTUATkkV=q|`Ww+XwI2Wg literal 0 HcmV?d00001 From b22516f82bdab0dfcf77a32fa3b1ff349e0fd115 Mon Sep 17 00:00:00 2001 From: ieow Date: Tue, 29 Apr 2025 20:20:04 +0800 Subject: [PATCH 074/147] fix: encryptor type --- .../src/SeedlessOnboardingController.test.ts | 32 +++++++++++-------- .../src/SeedlessOnboardingController.ts | 10 +++--- .../src/types.ts | 9 ++++-- .../tests/mocks/vaultEncryptor.ts | 19 +++++++---- 4 files changed, 42 insertions(+), 28 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts index 1f75b3f8f2..b7ff3f800e 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts @@ -1,4 +1,5 @@ import { keccak256AndHexify } from '@metamask/auth-network-utils'; +import type { EncryptionKey } from '@metamask/browser-passworder'; import { TOPRFError, type ChangeEncryptionKeyResult, @@ -8,6 +9,7 @@ import { type ToprfSecureBackup, } from '@metamask/toprf-secure-backup'; import { base64ToBytes, bytesToBase64, stringToBytes } from '@metamask/utils'; +import type { webcrypto } from 'node:crypto'; import { Web3AuthNetwork, @@ -17,6 +19,7 @@ import { import { RecoveryError } from './errors'; import { getDefaultSeedlessOnboardingControllerState, + getDefaultSeedlessOnboardingVaultEncryptor, SeedlessOnboardingController, } from './SeedlessOnboardingController'; import { SeedPhraseMetadata } from './SeedPhraseMetadata'; @@ -39,24 +42,26 @@ import { import { MockToprfEncryptorDecryptor } from '../tests/mocks/toprfEncryptor'; import MockVaultEncryptor from '../tests/mocks/vaultEncryptor'; -type WithControllerCallback = ({ +type WithControllerCallback = ({ controller, initialState, encryptor, messenger, }: { - controller: SeedlessOnboardingController; - encryptor: VaultEncryptor; + controller: SeedlessOnboardingController; + encryptor: VaultEncryptor; initialState: SeedlessOnboardingControllerState; messenger: SeedlessOnboardingControllerMessenger; toprfClient: ToprfSecureBackup; }) => Promise | ReturnValue; -type WithControllerOptions = Partial; +type WithControllerOptions = Partial< + SeedlessOnboardingControllerOptions +>; -type WithControllerArgs = - | [WithControllerCallback] - | [WithControllerOptions, WithControllerCallback]; +type WithControllerArgs = + | [WithControllerCallback] + | [WithControllerOptions, WithControllerCallback]; /** * Creates a mock user operation messenger. @@ -93,14 +98,14 @@ function createMockVaultEncryptor() { * @returns Whatever the callback returns. */ async function withController( - ...args: WithControllerArgs + ...args: WithControllerArgs ) { const [{ ...rest }, fn] = args.length === 2 ? args : [{}, args[0]]; - const encryptor: VaultEncryptor = new MockVaultEncryptor(); + const encryptor = new MockVaultEncryptor(); const messenger = buildSeedlessOnboardingControllerMessenger(); const controller = new SeedlessOnboardingController({ - encryptor, + encryptor: encryptor as VaultEncryptor, messenger, network: Web3AuthNetwork.Devnet, ...rest, @@ -222,9 +227,9 @@ function mockChangeEncKey( * @param seedPhrase - The mock seed phrase. * @param keyringId - The mock keyring id. */ -async function mockCreateToprfKeyAndBackupSeedPhrase( +async function mockCreateToprfKeyAndBackupSeedPhrase( toprfClient: ToprfSecureBackup, - controller: SeedlessOnboardingController, + controller: SeedlessOnboardingController, password: string, seedPhrase: Uint8Array, keyringId: string, @@ -385,6 +390,7 @@ describe('SeedlessOnboardingController', () => { const messenger = buildSeedlessOnboardingControllerMessenger(); const controller = new SeedlessOnboardingController({ messenger, + encryptor: getDefaultSeedlessOnboardingVaultEncryptor(), }); expect(controller).toBeDefined(); expect(controller.state).toStrictEqual( @@ -394,7 +400,7 @@ describe('SeedlessOnboardingController', () => { it('should be able to instantiate with an encryptor', () => { const messenger = buildSeedlessOnboardingControllerMessenger(); - const encryptor: VaultEncryptor = createMockVaultEncryptor(); + const encryptor = createMockVaultEncryptor(); expect( () => diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index 54eafffb47..853d9cf930 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -64,7 +64,7 @@ export function getDefaultSeedlessOnboardingControllerState(): SeedlessOnboardin * * @returns The default vault encryptor for the Seedless Onboarding Controller. */ -export function getDefaultSeedlessOnboardingVaultEncryptor(): VaultEncryptor { +export function getDefaultSeedlessOnboardingVaultEncryptor() { return { encrypt, encryptWithDetail, @@ -129,12 +129,12 @@ const seedlessOnboardingMetadata: StateMetadata extends BaseController< typeof controllerName, SeedlessOnboardingControllerState, SeedlessOnboardingControllerMessenger > { - readonly #vaultEncryptor: VaultEncryptor; + readonly #vaultEncryptor: VaultEncryptor; readonly #vaultOperationMutex = new Mutex(); @@ -159,9 +159,9 @@ export class SeedlessOnboardingController extends BaseController< constructor({ messenger, state, - encryptor = getDefaultSeedlessOnboardingVaultEncryptor(), + encryptor, network = Web3AuthNetwork.Mainnet, - }: SeedlessOnboardingControllerOptions) { + }: SeedlessOnboardingControllerOptions) { super({ name: controllerName, metadata: seedlessOnboardingMetadata, diff --git a/packages/seedless-onboarding-controller/src/types.ts b/packages/seedless-onboarding-controller/src/types.ts index 59adb60130..052bd92016 100644 --- a/packages/seedless-onboarding-controller/src/types.ts +++ b/packages/seedless-onboarding-controller/src/types.ts @@ -117,7 +117,10 @@ export type SeedlessOnboardingControllerMessenger = RestrictedMessenger< /** * Encryptor interface for encrypting and decrypting seedless onboarding vault. */ -export type VaultEncryptor = Omit; +export type VaultEncryptor = Omit< + ExportableKeyEncryptor, + 'encryptWithKey' +>; /** * Seedless Onboarding Controller Options. @@ -126,7 +129,7 @@ export type VaultEncryptor = Omit; * @param state - The initial state to set on this controller. * @param encryptor - The encryptor to use for encrypting and decrypting seedless onboarding vault. */ -export type SeedlessOnboardingControllerOptions = { +export type SeedlessOnboardingControllerOptions = { messenger: SeedlessOnboardingControllerMessenger; /** @@ -139,7 +142,7 @@ export type SeedlessOnboardingControllerOptions = { * * @default browser-passworder @link https://github.com/MetaMask/browser-passworder */ - encryptor?: VaultEncryptor; + encryptor: VaultEncryptor; /** * Type of Web3Auth network to be used for the Seedless Onboarding flow. diff --git a/packages/seedless-onboarding-controller/tests/mocks/vaultEncryptor.ts b/packages/seedless-onboarding-controller/tests/mocks/vaultEncryptor.ts index 67ea9da1f7..e3568755c4 100644 --- a/packages/seedless-onboarding-controller/tests/mocks/vaultEncryptor.ts +++ b/packages/seedless-onboarding-controller/tests/mocks/vaultEncryptor.ts @@ -3,11 +3,14 @@ import type { EncryptionResult, KeyDerivationOptions, } from '@metamask/browser-passworder'; +import type { Json } from '@metamask/utils'; import { webcrypto } from 'node:crypto'; import type { VaultEncryptor } from '../../src/types'; -export default class MockVaultEncryptor implements VaultEncryptor { +export default class MockVaultEncryptor + implements VaultEncryptor +{ DEFAULT_DERIVATION_PARAMS: KeyDerivationOptions = { algorithm: 'PBKDF2', params: { @@ -19,7 +22,7 @@ export default class MockVaultEncryptor implements VaultEncryptor { async encryptWithDetail( password: string, - dataObj: unknown, + dataObj: Json, salt: string = this.DEFAULT_SALT, keyDerivationOptions: KeyDerivationOptions = this.DEFAULT_DERIVATION_PARAMS, ) { @@ -146,7 +149,10 @@ export default class MockVaultEncryptor implements VaultEncryptor { return encryptionResult; } - async decryptWithKey(encryptionKey: unknown, payload: string) { + async decryptWithKey( + encryptionKey: EncryptionKey | webcrypto.CryptoKey, + payload: string, + ) { let encData: EncryptionResult; if (typeof payload === 'string') { encData = JSON.parse(payload); @@ -156,8 +162,7 @@ export default class MockVaultEncryptor implements VaultEncryptor { const encryptedData = Buffer.from(encData.data, 'base64'); const vector = Buffer.from(encData.iv, 'base64'); - const encKey = encryptionKey as EncryptionKey | webcrypto.CryptoKey; - const key = 'key' in encKey ? encKey.key : encKey; + const key = 'key' in encryptionKey ? encryptionKey.key : encryptionKey; const result = await webcrypto.subtle.decrypt( { name: 'AES-GCM', iv: vector }, @@ -172,9 +177,9 @@ export default class MockVaultEncryptor implements VaultEncryptor { return decryptedObj; } - async encrypt( + async encrypt( password: string, - dataObj: R, + dataObj: Json, // eslint-disable-next-line n/no-unsupported-features/node-builtins key?: EncryptionKey | CryptoKey, salt: string = this.DEFAULT_SALT, From 31d779654822643e12e8f86fff5136974e0c23c1 Mon Sep 17 00:00:00 2001 From: ieow Date: Tue, 29 Apr 2025 20:23:45 +0800 Subject: [PATCH 075/147] fix: remove un-needed typing --- .../src/SeedlessOnboardingController.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts index b7ff3f800e..d7cd72e2a5 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts @@ -105,7 +105,7 @@ async function withController( const messenger = buildSeedlessOnboardingControllerMessenger(); const controller = new SeedlessOnboardingController({ - encryptor: encryptor as VaultEncryptor, + encryptor, messenger, network: Web3AuthNetwork.Devnet, ...rest, From ea742ecabe0c200f3f0fddccdd12e184192b8708 Mon Sep 17 00:00:00 2001 From: lwin Date: Tue, 29 Apr 2025 20:00:16 +0700 Subject: [PATCH 076/147] chore: updated tgz --- .../seedless-onboarding-controller.tgz | Bin 51865 -> 52021 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/packages/seedless-onboarding-controller/seedless-onboarding-controller.tgz b/packages/seedless-onboarding-controller/seedless-onboarding-controller.tgz index b3e07a6b87f08c22b53a9c1109e6afd00ee3bc9b..df0354e87fd648bb58fdbc9051056640d5151594 100644 GIT binary patch delta 50217 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

&VEd6LDDzg4EmrCqy38vvQou^L*9XM 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 vNyBlJ Date: Wed, 30 Apr 2025 12:04:12 +0800 Subject: [PATCH 077/147] fix: remove web encryptor from controller --- .../src/SeedlessOnboardingController.test.ts | 30 ++++++++++++++++++- .../src/SeedlessOnboardingController.ts | 29 ------------------ 2 files changed, 29 insertions(+), 30 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts index d7cd72e2a5..37ef0aa871 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts @@ -1,5 +1,13 @@ import { keccak256AndHexify } from '@metamask/auth-network-utils'; import type { EncryptionKey } from '@metamask/browser-passworder'; +import { + encrypt, + decrypt, + decryptWithDetail, + encryptWithDetail, + decryptWithKey as decryptWithKeyBrowserPassworder, + importKey as importKeyBrowserPassworder, +} from '@metamask/browser-passworder'; import { TOPRFError, type ChangeEncryptionKeyResult, @@ -19,7 +27,6 @@ import { import { RecoveryError } from './errors'; import { getDefaultSeedlessOnboardingControllerState, - getDefaultSeedlessOnboardingVaultEncryptor, SeedlessOnboardingController, } from './SeedlessOnboardingController'; import { SeedPhraseMetadata } from './SeedPhraseMetadata'; @@ -63,6 +70,27 @@ type WithControllerArgs = | [WithControllerCallback] | [WithControllerOptions, WithControllerCallback]; +/** + * Get the default vault encryptor for the Seedless Onboarding Controller. + * + * By default, we'll use the encryption utilities from `@metamask/browser-passworder`. + * + * @returns The default vault encryptor for the Seedless Onboarding Controller. + */ +function getDefaultSeedlessOnboardingVaultEncryptor() { + return { + encrypt, + encryptWithDetail, + decrypt, + decryptWithDetail, + decryptWithKey: decryptWithKeyBrowserPassworder as ( + key: unknown, + payload: unknown, + ) => Promise, + importKey: importKeyBrowserPassworder, + }; +} + /** * Creates a mock user operation messenger. * diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index 853d9cf930..9cf6f57343 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -1,14 +1,6 @@ import { keccak256AndHexify } from '@metamask/auth-network-utils'; import type { StateMetadata } from '@metamask/base-controller'; import { BaseController } from '@metamask/base-controller'; -import { - encrypt, - decrypt, - decryptWithDetail, - encryptWithDetail, - decryptWithKey as decryptWithKeyBrowserPassworder, - importKey as importKeyBrowserPassworder, -} from '@metamask/browser-passworder'; import type { KeyPair, NodeAuthTokens, @@ -57,27 +49,6 @@ export function getDefaultSeedlessOnboardingControllerState(): SeedlessOnboardin }; } -/** - * Get the default vault encryptor for the Seedless Onboarding Controller. - * - * By default, we'll use the encryption utilities from `@metamask/browser-passworder`. - * - * @returns The default vault encryptor for the Seedless Onboarding Controller. - */ -export function getDefaultSeedlessOnboardingVaultEncryptor() { - return { - encrypt, - encryptWithDetail, - decrypt, - decryptWithDetail, - decryptWithKey: decryptWithKeyBrowserPassworder as ( - key: unknown, - payload: unknown, - ) => Promise, - importKey: importKeyBrowserPassworder, - }; -} - /** * Seedless Onboarding Controller State Metadata. * From 816abb74b008f11236060af18e3cdafa1a08f4c6 Mon Sep 17 00:00:00 2001 From: ieow Date: Wed, 30 Apr 2025 12:04:36 +0800 Subject: [PATCH 078/147] feat: update package.tgz --- .../seedless-onboarding-controller.tgz | Bin 51865 -> 50755 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/packages/seedless-onboarding-controller/seedless-onboarding-controller.tgz b/packages/seedless-onboarding-controller/seedless-onboarding-controller.tgz index b3e07a6b87f08c22b53a9c1109e6afd00ee3bc9b..bf7b82110d9f91a4ff7dbe33d3dafc0459a67f02 100644 GIT binary patch literal 50755 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 E0RP|)@c;k- literal 51865 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 R)SL}qTUATkkV=q|`Ww+XwI2Wg From 5de4c1d5dcdf155973b512b79d7cf2af28d91218 Mon Sep 17 00:00:00 2001 From: ieow Date: Wed, 30 Apr 2025 13:29:26 +0800 Subject: [PATCH 079/147] fix: make setUnlocked public --- .../src/SeedlessOnboardingController.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index 9cf6f57343..7e2ee66792 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -153,7 +153,7 @@ export class SeedlessOnboardingController extends BaseController< this.messagingSystem.subscribe('KeyringController:lock', this.setLocked); this.messagingSystem.subscribe( 'KeyringController:unlock', - this.#setUnlocked, + this.setUnlocked, ); } @@ -417,7 +417,7 @@ export class SeedlessOnboardingController extends BaseController< */ async submitPassword(password: string): Promise { await this.#unlockVaultAndGetBackupEncKey(password); - this.#setUnlocked(); + this.setUnlocked(); } /** @@ -436,7 +436,7 @@ export class SeedlessOnboardingController extends BaseController< this.#isUnlocked = false; } - #setUnlocked(): void { + setUnlocked(): void { this.#isUnlocked = true; } @@ -757,7 +757,7 @@ export class SeedlessOnboardingController extends BaseController< rawToprfAuthKeyPair: KeyPair; }): Promise { this.#assertIsAuthenticatedUser(this.state); - this.#setUnlocked(); + this.setUnlocked(); const { toprfEncryptionKey, toprfAuthKeyPair } = this.#serializeKeyData( rawToprfEncryptionKey, From 51da76643b1ac73b7e3cceb511188fa51857c186 Mon Sep 17 00:00:00 2001 From: ieow Date: Wed, 30 Apr 2025 13:32:41 +0800 Subject: [PATCH 080/147] feat: update package.tgz --- .../seedless-onboarding-controller.tgz | Bin 50755 -> 50719 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/packages/seedless-onboarding-controller/seedless-onboarding-controller.tgz b/packages/seedless-onboarding-controller/seedless-onboarding-controller.tgz index bf7b82110d9f91a4ff7dbe33d3dafc0459a67f02..ed5865371d60dfbd9587d9ca3138d5176c4d715e 100644 GIT binary patch delta 50141 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∾`Y zQaDrW9O;1fg-^Oa0H1AnwU=j-)O((O{4Biql(on|cnkWe%MhJ@GfO0RB1ZU@z)jvT4I31S}hlAvnglBIqGL7nPphZ;BFK-AI z8-R@m5El2MTO&aO7KepcM9`jAzj4Wc%B*$||M9KI%OP`_R(#%P%^1n-5rfVkgR{*~iwqp*vu@ zh+HN;mm;XBIC^EZWAE9l`x{3yPaq0kdOlfKu~>C~`WxalO{96;*y&Czk8~*Mu0traVDHm_uD(2^A#9+yQ_1-4`uw|Dw?fm`Ki-5@mXLF;$_XBq+ zA{E6TIYl)INSsB($ujb76oBonGg8^Y;K)-xDzD|ng6@WhChXS+p(JP?u&Vv>a?0~m zw(o2Fxa0=y4m~^swSt7KrU2L5it1|5&BASslpr(=u)w|dL_H-pUXp6J)6GpboG8mk zb%MLBM3ljz*D6V}W_7LdOu;wQ)zeM~QRek)e6Bp`?7q+c_Ds^$JaOM$-@d-|-$P;* zbjk-d9}D)25-s)7_y!hd=@Nqz)ISMs?wK_kpV0gjFxUk-Qcq{wfNa;Ka6AweL1r5u zSAzG=O#b~>KnFI)6a>l_thxt=pR+l8mh)#oK-OVV*tg*#yqj!zA(YZLzKbSA&-J;*Lh z%dZ6A;uO(q?G(iH4sbPdayB!7HiQ3{M=E}!hLrq=4l+MxJ+783F~k+h4o-j%{JL#* z5|j7CpFx}8_eKM63c13+)n3;1U$$U+$l4OHBa*%EXEYs#(zGdD$4YLAzoUwTDEkqQ zF)Y1(uoV&@IC*g!L@hvB6!~Z!>UvbT1{pjrzhW}QgB|#%`%#1KiHpp76%lGhT(D6W zi>{R7J)En}CVdy!pmv(#v0ABsTsMaUlO_Iem+8L!;@|%sg-^W}zeEVIy$M2PN0Ytq z{=0SHHQ+{4$Ss1E+U5$PQuMM*3Z@Mz26FZDgL?t^Z9RM3X?~V}R}I7nG+wEu8~g5G zARFjyGu)ot()T}cI1;!#^U%+Ma}&3=NHG?K zI!CKYH$~KWjiz9>)Y=HjUG~)JzF3u2eApv~h(K4o{X;*N&Xk`;VQ`SrNFhQA9YMsx}*@hw;h=pZLxW1pvm66eq&fs{zM;Z3taB?@5<1gyuEIoSOUmFqS zh0I@ubcV}Qjhb*{Y;|yZkra6?9R;RBtF_Q!;O(0FfC#@zzWx%hqpA`YEAD&k{BBJD zR5fDd^)IkOt6TXez`x-NKgm5cn6DlD*N020@W6y#LqWUi21%-W4R+!JROXWx_?!$3 zZd$g!1|*z`iw*?*z0CjyjP^|O72i_r?I~h+LiEjKcv%ULvay@u3N|e!&ON0BSt4on z+r(Y-AzV%c#m=1*vPlBf9w&)g2Pi3f_}b&lD9JLyEQ*(bu)R%p2qYXy==|q#jYSMh z(-yVLS|ok+v(Yo60((S9=1|$wU_+{ff1Ok_XzH^K|61zJr?C;x4b|K3abhXCi55uk zIsBEM#MGpC6Dtlp%jbJPr6JM|gSS7jibhRviY&cck(Dn&R7zgknTO8|r&ZO_`EOo6 zD|l3M&S-2v)b)2um7gyRrrlayK~}v9nK5$Lc)U}$2tR*T@oS`XvPXqw?vjS>vZzIq z-HoH_)K_3RFVj)p{8WD;Bb*XJgRUisOLm`g7eu9sr)Pd+$(Ue^vG`NpTnnW-%(@NB z{9iSSp&QmGJ6$Ul?1~>z2|X3oN3~N~dVUBG3i1aa7+V)6zKQ+rvA^*jg@T&7%nDxi zitER)*v41V^xJh>WZQI!6!SjhIfX%*D{BUIJ~GG`Dd9N$UHO~46l{TaSUU18WcYIY z*4z!{rk;Eh(!>ZuT8h7PJnM()y4uur_LUdIRD2+{YQ4KyUZP(k?OQoxPLQ~QLK#A% z2OSck&B3+-C!E%O)jg}+@9L$pr2^32yO z=}gficb&|`zR!zvjbop)E2REY+}TVkBf`hHaO=_< z6Wrf))tBz-FPvqkp3QUGo9&Q;jU2E5m$KI8?&t#UtX6uvm`-P77Y|caD^mq;la{+5X~~&YHvY_ObZM+>*;ugwCJS4; z)SP-1l#Dn953v8d?WKf0m;7QXJ|qPlr+DBJKC33yDSgA90Bw%T?#$gZgct>HlE zkL26qLZtdTxzD}9s!xF+Kx)`D-11`Z=?SZ+FNdyiZQNG2?OXBwPlCwhrJ`&D4FV;?{SorYWXQP0b=&vzzqx4`I1+8b%%mB2SBzvAg*iBf2|7s-(h~et^Rw^8E9&iAvAei zBJkbT)zWpY0c34s#rXnickAK60~#Obb?#AElUWuD0&+JjY{VE1xUW<>c?mL+UtF+0 zGYX~JD#6->ydSfu;!`H}nYEzkzNkd3iB0gxp=OumKG z3}2>ypuf9Y^~9WXC1*ZEdN3ZTSES;sU6Qd({h zvXb5YWUNyL{6PQudNc?x=gxZlxWK0@6OUvmrvZg&BOHQ#EJl2R8P`y^`!e+2^$ZrJouZ`CmU}TH$q9lp(cQ!UY8hE4` zE81|wL%Ly7TUxl`6d52_A9v2q$ z$%@@mOkb}I8N;azfQ;~Fx-+J!nH@&q#($_mhq*A3lkYoMZsOQWCNZefxUk~o--I== zQ2QID!N3-mw)?V-)k=T3FyXG#WCUK*Lj)#}R7Gt>Td3s7>TmWnZ&d!`TpBI(BOcfc(K>Gs!C$<1d|L=6R zBu;9LU0DNHZ5Y3g(jEtMd#$GCjp+yC3eUWwVCgB*RR}4J$5E_85M#0V zO=t5P@Au!m@AtQq3XGrnxHZXY!EhL6*byuswwg2?M_G;{j}Rnj_`6O#12?239pfH( aeXlv5Hc#_3PxCDI`Tqggq^PO@XaxY^+o@~- delta 50211 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

    PP7=bnZdpS|_>Bluk&>!n{`U%% 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 From 37f7a80a9f3edc9e5a15214a3148a38ec1732153 Mon Sep 17 00:00:00 2001 From: ieow Date: Wed, 30 Apr 2025 14:02:26 +0800 Subject: [PATCH 081/147] fix: cannot write private member --- .../src/SeedlessOnboardingController.ts | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index 7e2ee66792..f53e7c3af4 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -150,11 +150,12 @@ export class SeedlessOnboardingController extends BaseController< // setup subscriptions to the keyring lock event // when the keyring is locked (wallet is locked), the controller will be cleared of its credentials - this.messagingSystem.subscribe('KeyringController:lock', this.setLocked); - this.messagingSystem.subscribe( - 'KeyringController:unlock', - this.setUnlocked, - ); + this.messagingSystem.subscribe('KeyringController:lock', () => { + this.setLocked(); + }); + this.messagingSystem.subscribe('KeyringController:unlock', () => { + this.#setUnlocked(); + }); } /** @@ -417,7 +418,7 @@ export class SeedlessOnboardingController extends BaseController< */ async submitPassword(password: string): Promise { await this.#unlockVaultAndGetBackupEncKey(password); - this.setUnlocked(); + this.#setUnlocked(); } /** @@ -436,7 +437,7 @@ export class SeedlessOnboardingController extends BaseController< this.#isUnlocked = false; } - setUnlocked(): void { + #setUnlocked(): void { this.#isUnlocked = true; } @@ -757,7 +758,7 @@ export class SeedlessOnboardingController extends BaseController< rawToprfAuthKeyPair: KeyPair; }): Promise { this.#assertIsAuthenticatedUser(this.state); - this.setUnlocked(); + this.#setUnlocked(); const { toprfEncryptionKey, toprfAuthKeyPair } = this.#serializeKeyData( rawToprfEncryptionKey, From e26e29b9184b783a0f3247fe7c85eb2483980903 Mon Sep 17 00:00:00 2001 From: ieow Date: Wed, 30 Apr 2025 14:02:37 +0800 Subject: [PATCH 082/147] feat: update package.tgz --- .../seedless-onboarding-controller.tgz | Bin 50719 -> 50780 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/packages/seedless-onboarding-controller/seedless-onboarding-controller.tgz b/packages/seedless-onboarding-controller/seedless-onboarding-controller.tgz index ed5865371d60dfbd9587d9ca3138d5176c4d715e..b80e78e8e47a75a3d15e9c797a9387a83008a8f4 100644 GIT binary patch literal 50780 zcmZ^KV~l9Q)@9qaZQHhO+qP}nylv~YZQHhOch8-dd@q^IOl75NpPW?cPi0lDy;tE! zLje4zAz$%YyKk~Jey;Zdxz4VS>54TzUaV-@(~D5YU2w!1m$kRs%1cWpOlc6ICN&O*nw#SSbJ57ucT+foxP_6|G zLDDnDj8?a|xH*lCF-(&w3LfO-h;d>kun_WJGqaH<+TEs)Xe!D)UaMW^G*~XB&t`wS zEEq{zSGBKi+1P?uD>BtPMu3^q9JYPCOpz%n4f#G0Pd;$S9t;8GG>wB!W?8aX9V@Tc z>+%3(Og9-Z?O4>-_;k6cAjf`LszCz}rn!|LUpvK?~&@)YHikWf#Ra|~?$k9W>r~staV2eZ+ zGm4{Bi*rVbWk!Rol^79o)T@UnB@KQbQ5%dA^hT6iBjuDVTTjSoq7L!EdY&~`wn>$l zZKN>Ane7)qVc!`WkYJ0E(LjX#Lqz16XeQQ76J2XS^4;w0?@I7@vHUDQafHTva2*3r z#_W)&C*NEd2aqpF9utLWpGshmCRfGq#fvL|FramjVwQf&yRge5IB8=a-WYyc_v}=cb9o+}hfZt9#;L zUQ-b38}`BAvEP`e!rk_o)FBl|gN6awps!5bBt?_}2#9G4BY1d$Ke`bS+5k{|95u6% z20YJGON6oB3@Oo%t6OW(6!nxuK780Th4F}4F|X{K11OQG1lqivK*MPvAhgYo#;V%h zfEXApc2xm@kw`yrvW-L99CTbm&%_bm0E9&D;}DZh=iLiO-e?|3Wi;>9S`-S0S%3$a zNfP`X;fMKZ#l?*)?y)HV#t6Wdi&{g#$s{93h{R0;Od)?D z0L>^O;aE2h@}$@c>C}2qGi~S{bC4@I<%qH+B1oZr+>i^eEL{i)*62*JXByPeB} z+vB71)u_&U&ew5)q#ONcnDG2(&DT*VE`R=Xwy=WrJRD2H4SJ1*^ zf!hag8v(#TNTMW~0bn*cN-xPqFoHFK-YY@y2 z$<;D%m0DfkUs!Ht$Sw0FtFN7cWh zyL?`aTEF>+O?;D>`&tiP-q%DEV|BeRql$UGQwP!I2J*&icsNZ#R{=k`r$@K`;=>K+ z^euuvZ^1C;kaXw^V;cFx=rqt0dLji>`XYyz&|{uCeR+n#K03r90fm16A$4t?RhOK;yt^v_%fJgLU(F0;WeA7-X z#psH1VAdGq)&#DRiISTB7-X&sIkK9bC%8wql6ZH^^^iC29#!SyDxSpikEshc%JvN8 zPd8Dh7d0sc>R^yI2FJ*#o|2c*9DY(KJ=pdgYi2PAJqm)|1B9FQeHd>Eq99$zpf=Gs zf}MIZ*}N3puVql>6u~yihP|QrC*l5N*gW2_IIE>p+CNDvv<0DH zhXp@o=3SFd<|$|<$}{7?O~g%Nd~5DFf_14C+LzAY&_(kTn>0YVYg2(vKv3v&nQg!F zZ_h3AY3L2(pqe9M)Pc9R@I~Qv8CKcUB7!Urp7h%#b&3wXL96iL4lF%h2d|FK4 zvVf*=fCqzR!M9;9hmtL!Z4yz2M&b0_&5!#A!w%`-g@(~Vt3($3 zTd0PWk0H6U0czt2N2Wksl?5rGN*>EpVTR7Vswt5DFC@(lJ|2D-VCEvGn@$AcT1?j2}O95@aA zL;;C4hPZ11$<;zoqr?5t@pAI4E}zcFk%r|C&e|jhiR{*>=Xqabd~GK7BpLfE_^ITN zYq6y~gfOs}Gmlt?uAnb$NUjxCzqRGqqW!8d%@$>ti z@Uv6)Bgf53sxY5I0|=eFk-xg?H7;4FG}KRHvQ1A!U`4E}nhI}vB8MJ(yl~Y7?t1CS zT)%q7#r`87r&+a%u9K4Sv)xv(D)n5nS|)ggLybq)JDU-E@be;`wz!KK-~A!lSVVPusakvAqOCMPQw|2Uf(QVoIv z*rx`J|CxLj0%MafD#DI+=6D&8N+QZgUZggL3>v4sZ32;RPhbZnv1=?Hr=g)0eRHx% z8*D2JR)Iv^4rLOABbsJvu=vxsL<$ZaHbKvX2A9#CP|6_LFvc(#Fk@NXO5n=7S1- zLJbU&Yu)vQQLnXR4HUqs+ZV;ms~6PblWLQ-f2frI-SKGjSCcF@$JCJ}&fgq3m;x(1 za7&#{z78razj$;Elby!k9|?%Sa`5Be_gEY(inZewb%Yb4O(1kOaFVPB!nNfJm6KEU zY&saET87XNz95?H#e}ATsj9f=m<{{5c^K=Wp`~~J9%kXu&-O+Kk>X^Tq{9}iW3cb^ z!fNdN)`Ub#)&LBZs`1+olG+pCL-4qbbyM7G2Q4&RG`JB%ja7&@fZ7THY~BYr_hBUq z-y|=V8V)l`>wl*7DOcGYRasYg5t}8M4K7OeKG&a+EpH18IYX6kTh{D^J!{mySiu5g z+GObjbYK@L|$wh+dQ>TP}sO5`13NmnzT9ia_hxO}6id9j*)+FfgnoYc3jL zT@xKG+nt_7K$u*2dGK^utyM`IH`uKHGv9X}QhiLY7&06}&Jh`U6ZV0kv zj!a(P7w>Vu2`EdI{GT+pWcgU9y{$JJUyr-s+1lE*zoW^c*;S9bvk&iWe*NDktF8E8 zmwOiNJ>55D!OsS{^kM3jTGjS-RlDyWFY=euX4JDEd`MIe&-y{nBv}Ui{{~2XnScMh zHh&bPEbj=4Kh<;DO15{o`}u{W#JAZ>98asOpl{|^y=|oi&HDjM6diU7pSl)r=D+Q^ z-+mHqZkxUDerQYVgI7~datov_(f!JD3&btyAt+&kd8J&E%E1X z!sQq?N?d^W<661;tAW=HrymoPz!da_KT!yq<1OBDRjJ@8ufa!C@UTm~G^Bj4Zz}O{ z7mNe%0ZYJfTK@)*9lWxq=mC-$HcmjK+zX3XX`EHT%OI)aFRs1DG8#C$Mx2N#GB(uo5%4DpMn-~k5pLi_9y ze)$=)#FB(&7^AM2!Q%pF+{A#oSsBcp7Q>wW0RazJ?uYDPk*Oy+_GJ+aDeF&8SkPc` zTn20mJdJki;0hy4i0~E_!;ZIRp1KDJR>8dcU})19ymqc>ACf=lrf;CfG$AQ zwO)DFF;-M${!*LveWkQV2!|=mUVa8bfXFmir0qbJCdi3O0!oW4^s6*Sy4z6=c@>5o zSp4=9K8H!aHD+`H>d@&!8Kn<85e8P4{0P-}^4+7D`LpU`WK`|dYt5^MEF}y#Ma4r~ zV}j1AD-IJGc+_b({71}zqrQV{;cs&izMFMo@tKDQ&>%{9J=PB4wvOAI74M&Irq#v4 zlHaq6mNvaA<7$d;aQ%2L78wu+ScxX?Q_L6gKl>Qzmp4w&0juF~GjOAa5d$&;=f8({ zu#hR?eU&D|HF4U=SixDp+LiBoDZ=2a{_Z3zgx8UtfnEUno_Buf3$LAbyqmBK2@5El z45&|dfRLV&6VY{&z1f5%*$_69y&hgSbAaq@rjRUjZCq#r;db_ctb8tNvrPsq(&sRp zt_@XVn*+UnFT5x?@2w>U%WS1~zw4npM81T}Q^`284I}|Olz9Su;osk!g(6HXq3?CG86$kAyxV5^K zZ3d~0(I??O-;{ThI&35l$E62l!v;~!DLI28k)1rzUT3!+ z4mv6gy8!%mp@>6qfNdRUV~6%h=zc(RA7N1BvR#2*!Q06bx?i0i>>pkq1Rgx?2idl* zO%#crr`h?*-H&2H0ua`&zY|F^u(?PmWs0SdegyJKzTCLWNFZT;TK(kOD1%fw$Sb7# z+uc$3mi~$OteCp7)zqqfx)W_og`n9}B{_wzu5wplbc)UwTAl)q0<^EkPyWmzq!i4M zOXSeIw%fDSw07}di)>RF6(F5q-T!1FXc;m3-a+S!C^ z{Y}%cf~qVyVY0&Sr^%5P@E`eJ383st#i3}LbGaev?Pl^sz~@?u1G=wpl7eHMaFZHs z4_HTpRqP*BKk0Zv{EFFo^dwOG3py3D`%v)iuFnBsue2QUbJL)Wk&%}29BYuuWpu%6 z2R4dRlf2PHnxdT8rC=+5V*D*mIx(;zs9Pd>fnH-o`i{cY;!91E{N!OPr)GUcfssrWA;Y~CSC(Nu_8%t;JSz<}YNe%)? zrfr0e6Ww+~NefgZB_l6ldlKN|2~bz-d=h+5x;u#n#7&-Xl3qCF{Wue)ICam4$Z>B3 z+e|2%*J38Zl~>s$XJ7PMNmUgJ-eel=aUOG$=r6n5$RpBbtT+jF<@kBn@md#ddJ^nd zQ9cRNfuZG_hmNf};ppQ?2|MR>A_fNlqSxZdq@%D$mpiOlnWWga?u@?}`e!{P(R$om z7R`%E@{2UyG@87Q?lpF*lb>VC&iy~nFL5Hy5HM6K5W7RMqk4{|vF$;J#NWEV zIn}>T-{zl;)qL!qG!MU+ET6-+!~!%CzYivt+U!4r|Dq~x(9BwkudJ!%>0+{uNT+jlU+qgx9HXd)x1oex%!^J6oF z+1!tP$GWa#<9)XdBX(+0Lr3RVzOQ@xilRs)*H83KC)MGzlH27%L=BzYxO4K3lL zIVj6M0?jqiJ%3;fhgR#&4ipWbRO zZLs!4?}cyX?_c?v?_XMSYsH^DMxJH=hL3;t*t zxyQHVmhOqrJU03t&nBSnZSSY)L%VBl)`JfOxqdty(fOa7H#G4Kc+XDp_11kRcKIFm ziM24}!O70;BKz>?TB8hH_K&T9hqYwu%{DOLP!A7~JK|ApS*_#ed4T>F1ipLDJ#WvM z1^rLJ{7uDSK7Lo>_HWf)7yH+*@CH5CrS#@L`s43-zR~Zt*7olgO@8XPyXmj)y1)9% z?*BWKxBAVkzUtMVC|mjYm9PKh^Q_I_T@@56?t@h1n~6wQ(_OvP{R%0_Ets=rV;xP+ZL(W{v5U1cwNbIE zExUE9*3Eyo@UcnVwEZu}x9nOYI{!|bzUceVbWNPLOq{xP`q()ek$6&8`DKu(e$yS0 zs4A^51SaVKX`9;q7tB_>Y}VPhww9^o*U}P8EgWOX1Yei*q{|ye+Y_#5bo{I{{`|f_ zt)ubM@4I+*HUGXw%W8jTj}}k;2aoIre93)gkVjnlqfK^N10~)`7KSZv^Ept~11->_ zi*w&4kKjDERmnKZn7KYTsFJt*waMB&QYB|*M4yMvlZ0E!B?pK;_-Vs)#H>OZ z-YBq!|AGNaB=zo1HS;hS6qMe8dqMVNefh6MlU50Q8BMeS6r368XMMR;POsdEdC?K`r?RB2et<;bLjNk>Nn!GCRDHMW?>U)*%=9av-1?wVb$RLq|^U1 zjZwtoOVNlqI0^g5z*%q8Bz(+>SPkNFxC?4DM>QG%>3hDKaKy%3KCkT7VdmY8Im zhO(X-faHJy0MjobnWZDUpg9A0ueoGq>un-~-@)n^#*K}>IT8a|&0)N}I;ujwX@U`Z z9NTRDQ)iTx4p^xVks--tK%gbJ;GA}(X8=YNT>yv=w@6|rvDqpz4Yq>4g|tN>ZLZ8# z;12DY)^xQZ@HWIJFYdUID{}vqwkPwPLtWIGs}6qPs3JJUDyY}G`j=a;1gW17g$DD; z6mSQGyH2s5NJ-OO1w6>mhyethQ{SqF*@;ytK8fu?AOK(qm8#ABfqb zf0qsZ4~L`%VuJOfm>XYq<5asoOzTn0DFx08>tUqP(z4S)Z6NR3iwL9zTYBP7Y-}HR zV0=8TeBZDJTDW!gUDbZ`2(SG69ALgtomSrL^3%v3UNP|PY=?9VJtWlj%cs>DvXXq<)1R6&9*qtq zEZ`~i&}k@UqQ|>5(ZihkgW_1}^Bz-B-zLO;Nh2y!^5s7nqL}5`!bs?6*t`L`o-8xh z`vI;fu?HqDKB?$73n&ozjU(N@J3V;kwiZu%1UE8mgslfSrLUX^%XcECotnv8VJh=y z2MG|aR}q)V&!jXS*jp{<46zq;&S8=v|7uh!qcF$2QmTOd04BAxB7Q2mn&W~jhk)v%pw&BclzZ;Py9ADTvugl3 zN*pQBX~V(*(B9)Yrs$6Otdbm)Olc^G)U_xO=$vht1$2HQAYztN5f(CAMUl>cN$g0m zqg%urxP2}okeD-3nj>?mnDOVyJa`N`(xMX$#E6-s_n(VzAeqZ=MuqD zj2IvXA|0=4uvwkD1h2ygsd@#0ehA0r63BiQI(6i)oU9CU6NWFwil1u&Q}6{woq!sW zvC=4%#Ak|8G(bRAP?OSGX%_3-vJnj|TuK)~K~HSC`?Veub*RJbDquzP6vo6n#~HEF z9$aZATj~*~vj3QLa6O}Gy~^cZcDr~F7M;?aezpiQ@2t29Bu?yr5qZ)T0X`fiVg$Z* z^O&oIGbW%>GVyi`tw*(+{5^wpw`HBaNPWu#s{Xzoy(!&_7@QZ|+3FN&=d?}iFA9R* zA<>j2!lV(sM1|wRJjT_&}t;*ZAw@})n%$b>lH+0R02W~R}dE!;Z~6Il~$yDy~+n9 zkLr0YMNcq|*qNw&zHPChSRQhFBlXy2MI*d^^J^gKG4+?PKz=8Ce{Xjd8Qhnm?X47` zuWNyOi3+M+FCUKXj;qQhh7!r@sSy?|Q1lt-K>t-Y1H6cKyN_OEiMhQ2?yW+B!j_w&#Ndh;2!3sGBH?A7dI2{Wp?s7y~HF*ml+AZNstj?72iKy5K~Tx&XF>f zzi8gvrovBBpd`m9LCNrQF(mNCuN9Yd-1hiCmMto&<|89u)CikWCKD?+UO7UA)B}5G z>P-ITspZmWPD(842v|tSc@PY7pH~;ADCU5OP0=5+lI6}&9&k0c%_ow89n}OqhGE}%&F`2h> z^0@mcWcS0s#%Xw)t%!8Wtq`cL0Bp58iE#*&E38carro@?x* zg5NaO$r}cFV-FaybBZYneHw_-){pe8k(-R}#NJ4D-)pGpgxdT8=}`fAszx&?!az6E zgaYXyqLucBZsK*Z4$yq}r8SE}s-@PBrL}bgO+yt387bezW5MORU3ls*9CH_~Sq8ny z8@&bv2pRT&OjWF^PJ_Uv_SsRbgCU(EtT3kXW)H7k?!$`yl%KaQ`{?Suza2b0=OIZQ zGZ?0CH_{B9`ZvDZwzrwwpGZYja!~{cCS?Q9YEflEkLyd&NFKG;7*e8ECCFw$P+8Ae z9h9p9r=cPGrfd2sH6UowSW#LM#Grtsv)OCj5oZm9Gl+TMqtXlNG$8-{PN0ghK!j^B zm8Wn#J7%&)J#m_$4Vsk8*gV?Mfh~!W<*x?;HXeh}PrG+(?FKw*urF?)lVR{-b2ZyD zX>IjObsZ+$#p7Wkils(JQ#({Lb(Nz=>o@`HEI_H~48*s6)tdSUsS?jfP8n|^HU!X_ zC=j+K;y9N%-N`*uV#S3#U%MJoKcw!!vmt){xhkBzM=@FZN!D{hcN%(j14Umg&7eJe zYgihG;!0SZ?qeQ8Mo^*Kl?p?%;Err=B=un&F7a}b1LSKnlToA^Og7{SzLbv)!!)ok zS4bQ7J89J-wizFcmSjK8v@x7Enw*I{#w)7am5$rF9g#Dw2SmQm^n{&O&6Xd7SV z35f|iaJRE;1$SsNXK@!-Kpu03?1p*sw%Mjy`ZqgQ?qEP~*XZtVr_)}uDmC8`M$P1_ zn2E7jg5)`1>hJ1Kq#dU*X{`aW_FrVJ^?$q(J{uyTQD$%Pc#~<$nDKt7m z)QT<{0u5?+`f%wQ-(!(*wY(gbwkOxIjO6RKHHY!X*seAMmNGjkkgO{QT!LG3kb~>J zNRBdXBvSRP0cStsDUh{B6vRXV)m^SPC)Hssy)a-lvrv@cW9+2sjnMsvqF=BP+MD$Z zK>0UPDe97Q*X?@f$A35Cw0S?OBvCr&b1O{*FNCz(ia&3cQ4CMe)L7PeS7!oZ&D0g9 zj^fVot0u!s`t+ypLT(XV0l$qKk>XU@&NNj#Q-NJwh@IEgf<#>EI5yx$X}wkU5?vo9o5pm z9q(|{{$GY^51rzhW{XkD^o%j6J>GUPfJL&OskTQ+zW4l~Wj??Ov;6uqrM5OI%-XIO zdZuE`G8SRXSYFaxRa3?ao!G`3(wo3Ck>MqA0f{C`z{l@!C&_!0P83x6 z2@~9EerRQ5LnjXGdv>OHYRUd3hl1?)-ozz`{YK`Q3o#k?SHcUIT-jNmdD&p67b{PK zH4;K+l`PBYuek&q3fqT8W!H;0p;y=)#_2b%^!1%pcAU>|f1|kIRR$$FrlJ>l^Lw8cr|R)D{=Nr|g3l)_iJO|wq4G1ES0iey z9Hjfi`R~+6o_klG+aRa7+tN-UVcz zn=naxL?9kF57@UyjWOXEyw?u4M1)a+uedjDlv`V(_GF%VuN^pRKw_luGIE# zlvJbMD=agiDRxbsGL@J+d?B4d4{^rxQ12HZN5MWfbrcwU9_tz80q+W4T_bWuBwmJa zL1dycwqX~QFGhgb$;0e=!JFLe#;?ANsXg~WvFh=8(7i|XNI>@w3^5r-DPqKIX#^u) znGtxX!ZFr7G5V$ie@f-(IPgWdiT}bHqK7WPl8mn*Bawr~kldZzqmGZBlQI#2(A82# zmu$Ke_9!|==B@#!%Y^I(eQG=QcN(*r3?`j0O$xn4@?`e`yQQNl^04{j{H2&I{3Mf3PBcLW zFrjPl`7@KK$2aX2K`!7&pf)+EXb$T0pbAyKKa7emYfIC4hQ=wlq+$1{ODv_d%c!^9 zi~RjAM5EEpV-vr-kg~a|QAunnm~e_>*T3dj{Pu3 zJZ$pRgUIjjiqBEJX?f{P16w;ZvjbooshmSStd|fz%Osw(fVLrr!d@*>VSN;hn%5=? zI4xEqZb~;r)W{5fsL(y@?5Esg^BqPOf#=11zzO7~oKh~s$^P`2=)5dhdFpByn*|&c zwQmvzsMW;DKQ6h@SzvG6Ii=9M>G;%a8cU!$r;P|T+s}K2VB#F5=}3TO8Ai7?zds}zEJ#z0k&qsGI;r6ltZf|1b`pQb(_}Y5x7-hy zKKp3M`U5k&n5`?Qs7uYP_Iz>TM{6o=q-QBLRMvd$+w85qOI*h$ak-K_mN#Tfn!c%b zG;N=!R|&`tctrwp==mcawNk!TwMz=va#ry+$C|99b1Uy+ z2YNR3bb3;tcrr)O8<768Rap`uHh#l<%72*qZu^jJVch5ZhgW|@G`r-m#8>R^byvZP z#Y!1ORX$Xysf17yF?;v0@FF9H)(oYEo&u9U4AVF>|0^hC?nE;YnDDyuBD0Hh8zv^L zS{n-HOO9!#FYHXroOIc+`((QB5Gil?5w<>i4h3+>t8}|9^yFNuW&@)z+U@gnr&*(a z(BLG~X@0Z(1W%bs7{&KdnTfl0em^Ko(V!v}RTAcM(u|g`+jtK(MBA{iCe+ zXabd80EswG_1Sr1ixJ>5|Fd{=Pai<^UESB$o))OQ3|@e=nZn3wjvIrD&7SF`26-H0 zXy@97Cp)7k<)+m$?i1F@RLm%&icLDE&j|{B%RsDBE|${^(@CA9zt(I#J$Wq+XHVlr zb_??0HU(RYQz#r|d;XqDLVgS6@oXR*())`5GQ4ha6Y2T(o3cYidP+IPvuok8VVKw4 z{Ok|Ba@$&LMsg_*+OO2@93NlZTY=?jG_BvhE14DP+{sn^oo>9759T>OMFYyNE54nF zZ+Nc)&Y(c869K|-{3EVijyBXS%0nlsB?KZ{L!X*=zgL~>__jJ%<%lZ;n$R=$ISy&G zbkM2o6M(BUi@nQ0^m>iz8qCL_n$46?n*44N(@0!nU|2sb=yyQ+_R<6_+U0vtwb~V% z!{sYsE}cfFJmI--)ilkSk=TlV__!Ud*<{QfmTl959e?qQcefb{zO%va%k2?rSO{tP z^+*w5VT!C`@%RY+zY0HTx0Ciboy>2xeP(H%R1fpKi>~m>jez_>+nmf8l0Uic-fb(m z6hv$5tza!pm(X*x#U;oJK|m{@}~0?bx2 zhf%IK>&KA)A;SmXNwF(vE?xNs^49m{{!`$OC8%`lWF3JR+K=yl#tj|hx%<9T4()uX zlNsiqUb`Nl9s1+blvscr2SJYYqdVkhy|c9BoGylEnw{y89A!P0m=5h=5mFeZ?OHFy zd{Ok3TC4C9w$unDITjm_#_`E^$Z+Cjgd9e-$w1!y%sRfPxnd4J?}9~Mv|5*UJ4IY# z_KSPM{j=%+X8zAQUxa84d(dU!`v-7+Ys=^13^DNc-(!cF-x~33cziyRf1Mq#=ihe| zXX|7ezBQkRH^BGJ6Y?|rbLPotiqFlHnoTF}SM+xuonC;^E*8yQKa6VlLq_dgJ$(`I z%YH6>nYx9)8oPSxy^qh=`77DeYI)D6$jXUzzev^O^B`4UNY(OhjZ>?wtD7(3N>ahE zx>B>9wo;vkc6af*QutRbl)N5o*i%Q@4qLEzAy0di!2EuF35ge+Z(WO6ub~G6x)aXUIAmla3!bz+p>glgeyh- zwgJn=o$?ZlkT-yD@zkl?=NJF-0`Stbm$9G-&QJ_L;1(a&dkYqxg4goTro`j1TlnM~ zJ{ZJ*?TcmSN>Y6X{(c?4z2_7EQXi0y^)=r^aZn6jt zuC3ayh32FQu7p|l*J%BN1H17hdN$^(ok+Qw|AvP1AsMa&S(jh)kKaFoixuJ*z#sx> zJXZ=IRNw{^Z8f35f=2C~!vvr>_|^l6miN-e%uA&#>EnR z-~r>x6{5Fi|d^1+ZSL^g539eQ$m8$c%Pxj?OuD~LA9s4QOHimaXeYUQyr{r zu%gvr(D%SNSk%k3V0V>1vC;!Oc-~H#&W1ze^WPLG%z~aub4x(1@u8sx?7z3-CQA~v zxortnU`xVTJTY#UuxyL&7$tROG5whD9s&9gmEs1MJG?kX3^|;aS*hS*`N$(fZYS@m z_Sei&P=vulN8MKLfg}G>i(+YyedBn)`|C(OfYk=5eWy6fET=6t8z}AzEiJu}Yqnu; z7-_)-PI+HYbesn03E2Y#N|&r z1`BqFfx+mo;hwvPk1O>XXj8NdxpS-dfv0KPV*XG+$$PZ|SW***WFOB37RZ_V&pI}0 z=+G{GPTF`6AC_n2vxris8H|Q8^JhsJWV4(u$Vz2u8HZuFSxj(2l#(VxjL7UtSReM?uTNDS7e%;#L3n zoNcXUT%OdoztMg4bRLfe*dxaRm2AcNOZSa(Yyt_!-cd$MXb;2Vo9Mf56iP-dCqf-y8 zeH;*{dS~J0PQ(NuxzKjcrP3LOl-aJeEusg z4cvuqPM6vYXCt7;23_lrrkMdpYUV&Rnozq;2ZLP#6k}uSlJgQI?5e}t4(GJCgUJBS zC_jM`gzmXYAIr4sHp%g9ROcNeEb(+Q+6jS_2CT zqnw;=464v; zp)i3-I(=kc!{x8-El!KjarNOf>4N23+BqVs!BGR@g~NJyrjpY{O7RvMKrqI~OG=+* z8d~KS#Zm=QWhzU8-PDTZS2J|M#h^&wXB#iAkGz zoY=qOo$$jUOZ6pqgqcePWyG@b;;a>C5Sr0ygU5sJxJ800UhxV#5!0;vj{~QlFLDW$ zwrtH)civCUl4R*^)9`R-eu2!`9o94JcpRG(6Wfg_{=3&{*OwP8qBoxtP)XILt&?F4 zY%)@fUzz6K4>0UO^}O>`QgmQ?xQ_c9^tRPcSEIPTXTY0L(F*qc`VN2q`u^2xvCwJ+ zGb2kUB5R67lw1YS{B0A$x{?FzDym6Gox|LEgi!*sSCysto|!SFe|kt2Q(n-4!`JgC zroRV3&!UAlFiYN-S;9r92PtG958iAoA0iTXcBmfuP|2kT zA$ac(Fr?WDkaLvx1Fvw=2;8NB2e>XI{^&1vx?u%1hc{_3REDTMCFQ)1HM>! zR+P9r?}0s#?S=K=VM5JiW2X#s!dL>do+}1P5p>nC)-BU>Z_1CLGL0#O6UgvxxMY|v z+MQ=}Z#~pk$XmQ%v?;lbLT7(VR>u%0V%|5Zc?HhK&^oBjj0W}8^XM}M?d+CH1m!g} ztg)X&qytiHE-Dy{OPNQsx9}qbT}?J2aOq>fQpLQiV6v8EcR44<;5Q6xr;B-uJoNKMG^OB__Am+-o^7HbvUU;D%=IVVA8iRZ`(SyV7xK>(Tl z8Bo71!*46>dbew>g|Fqf!4y@asXEwqlQu-d4lmUr9*MFaHOyS(S>TV9`Tg-}T4yp- zLvcIFZi zY_hO7(_m7iZ=}mJzPEz;_Bzh+-(*Bl;^`=JSrWtLNFJH;{)sCJT50hL3ep$#UyXWax- z;p0=~F0JI0Ybe>_pd%$${W%bcn(l02CkNVL>VublcV49p*{F{%^Nz8BjTvt%>A;o0 zJg(T?5WAqyt?Us@EmO8pEF$K$&u|o_o%fw``-Irfu~aPz=Cc%GY^}D0=+?U%-(0^VJ3F$a53z0`SV{wcPzO8yNt2k2EG8 z^e(7U|IP#h;pVDup34Z}LxKP+ukWr~$z=b18iIfs2-VYDf5P0Dne@dzFT(LVPPUR`HBtgaGgA=oXI=;dL&VTilcc!9G47_y} zsSCc?M-z12kFNLyF)qfl^66tHdlBDT6~{#ZG1>ugXw>!-FSK ze%m+*P+@QbmeV+od?$;8h3dZry@#*l()@$jgpo0<2!g+bmp(G1Y(}xDgaVHUgOqnL z$_PPFIpZJ z$PQMCxjy}n?KVGITA4(wy+m0Y$jSP`u!vwg(fItzGA7(lkLnqMX(c9pa%q|TOh&s*mT8V>~CMuNy)Jvk$n=}08U z+dSwhzRbiuEU=Yi%8yJIC$E*Ps!cV%vOp zJ~P%!5*rPMvHNYwRrA?Gw4Vj1cO%(+<+m0Gl%(wdTUo!i%pXjTBcwKX)c{5z;bK1o%L; zAf3~0w(W+DDZ4tXB)lileoYu)H>O)d{5;%y2V^00_?Yk!WI#JceH|#QKu1aGpziVu zCt^4-L9eM45u1YchdtQaL|KEPkcNY1$o@MplX`R<-HvxO7BX?|Yk~z%Hq|bA5gN<3 z7@J~pe$7PPpl67>SB8{ot8KSg99O*zqojYC){n-}xu#H| zt*6WaF44Gu@24YqjNc&7UIpRscl5@(Fs)wzq>`c@(J*NdZ^FEO35YQFfAK+;{81Fc z2FQRj2<7TuI7iJ`DTw>mO)-ohtj)6qv5C^i7_Q+vNf<_!2`8>~SSK0xHW!^U;3pC{ z@c2qew^~FY$73Ar`O#(1gS;`j-_2j*8vk`dk*;>91rlb14Q$`&VltMM(!+{m-X5*p z`MJ0m7%%i1tP!5i{h57-WJw4fWT~ag6?wwyp~U>99|)6o(5b+-MAn z`QB<&2uSZ!yX8qceFjolXcc56941VI!KnCja}H zNQnrQQSglr_un7^u)|Yda(7jF*2LKRP+(*RVMZtl3wTq1s7yF*`*TZh_id@}`u9~f zPv^E^9oxR#`g6#bhnfJ*4%g6Td-IMi6=JNtG>H(Zd2!Qk+{{!|9ocwS0mM=WawAW| zd=MPji*{`!Hfy^fimjLo?}2k*dI>y1a8Pp!@DJFU`5&ET1o=g5(+%sm%Ug&stco2g zD+=5SHXJ9befPeIln`MhOOB+I-+jP?CJHKdg|H?m2JT6DdxQ7=o zJ}5Q1D-wLDDH&g-wrPP;$~8p@HwbA<`{C6V4HE_49(Oq|8b<_hK}xd0MFn*3w~?qE z4`y=MOJi`B-=|{wgT7B(|*?4LVt;+U)wWTlD^)MU!iT~ z=w2RWMAn^4m`06P-sC@=KYgNRKeH(ONBq`iqEHU$&k83^;7@?^O&4Wd z8wC;Tt}sR787qwXG!&jg5bJ~fxD;eY)R9KKAZ?HvrmD=Cx6*06G#0mz$%bUXxtpq$ z4jYHgStvjMqVV>M&%2b(4KuqAzus0vu;5WPb|DY5m12Yzvwt~2rTkII)!Jtmv>7D% zE#+Yg@-YgyQ7HwKnvnAKnlxnmXW=Dt)5)Nb;bEt&XZK~^(NO%gN};1-t+cL|Ns%*g zY;*($A@XKP!PuF7M>CIHZS(q4B#HNyS;iBpdG13{*OC4rGsR6G8jE=&JD4Zt`Zg}N zY!{t1Dkb%&zfP*(%$`?UZ$gPQ`rl8{Ha=*^)T&22brIX*T#=I@H9imfgX|NLq_PVL zC!&-i`J9%Ate~QV_(taO&!vK>YJlOgOw1CyGIeS8X{n~vgRnRVj{n2{O&R-VcqNhZ zd^?dML6A{UL&OpDKiz9hrqlVa5s>AF;FCo5;R~p0Hm~L;X68`6m;qCtywkMu(1Ch@ zrX%?x)mo=2aHn^+RF00A4q(6t!%r~NrB_NL>kuf)QnP;yXO0FNvl+it?TCFqgO@?9 zHqv3k=+sTjGxj*5*)}dFR71{x`|)}jlZp0UuBoY*GBjhFY#m-l3}HNu5fItWgCtbl zO+PRvMbo9}+kA9f=@)DqZC*aC3@NHS&S2z}eI!TXi1E|FPV&J~8rQ5QBH2AG&(QMm zj&8|Mid3M=9Bu{NiXm%9b*ylEE4yOHRLICce#4N&$Hg8?Wi~ zleU}VV$}7>4!kxYO8(gsk6}jInP_tQAgGsvwNooN+ByHRuYMZ3|?6}`ilPal*v=)$; z66(NG#_?T+A?J=nV(*$;x{IU0Iw?2Lsc+ZVt*CHlG&QrJr_69Sv}xI#_&{=bn>X>5 zTawZqzO#dO7y&NDI#gn=w3okLvlmQFm(Ve3s&#@u?l5p>Qy`=+`Zt+2SfB)H=zV_< zB>wHu25VDMT4r4^#qX% zG>|N9I)5{zWmF*q^^J45)?x?gub7y#4MhfUBO%{5j>LghBTOTQX`$hz=F+jlbj=7r zhuH*+COtc;;=XY^UX3w^TFcvQAz4V)2A`FpxB1Hg>&`oyjA;CYEQm_m%JN>CiN8KK zty&9LW)rnNvK7LH)eOgx6fn;8Lj{bh*SKK5F zH<@yPgVDs{&hV6n&=OHd!juV6>ioGqrk4SeII+2n+2_bRWr7=dA z{ukUGFoa+!Th(VtreHP9fRXHlFQVvXtv3+S=#;0`X*V)+PZ0AfWDfnB2bvK0jWtMG#;QgMVsg}98v(jPTCRlc^!2~#<>>X`M( zhiZ?vrzCMSBzy0q+ zAa4)%Vm!%<>_q878-f?VwvL06(dwU`tZWO6X^trrx)`jH{@h*R{QXgLY#YyEaYT&2 zHlB3ND&)11RxujS;=Z`u1gs$IIOzC=Nh4GL8b503IU@kcbH`F@`7otPkEnV-i8>Yc z;*I>sImpHicn9h8z@v>dM9}9BqL*vZ^DP9H^z})G_wKiAUDS;H`H7h z+|zm*<@WASrcJW5W4sGrc~2LFaA*O#5d<8Q-(jzzrEGL}v63iGqqnK=k()YwCYH|X z7kAwHQ@VS(zciZE-U1pSKy88_|1Fh(Xo_OvRG-!Fy83IpH$*$~A^5q$C4S*C?2`^v z;}~9YVM4?3nxJP_cr^&Kgn~}in&;SfCfknDYO&|aAnP7_?r#p3G4jr^a7`#y%tK#P zNq8Z?kXCpFaj%fWv|=p$DVZQ|h3JL@>;zvm0<8_ad5Ra&%tb5t@22G+-7c5h zg%um+sziFR7Z$qz^(Uy(iZXyTWc$pyDLZ5GROnKVTvyE=w~;!tI*`ty9C(ew_Dmtc z0U3Q)eVE=qVjpp|YJWtBq+)oJ#b|p;F~`lP6#34AprTR)L$U4jsKmLJGT&a}&MPj6 z&mK~Ez(g6+#-N=o#gWKOU@ff`CHe^;rwzjO7#xcoZP3mRk}2Dp(KW~6(;>=*cg;t{|{7+J~JDyeT0hn!$ z-vh4tqio?M_DVUFlB5(amU#a76QY;>aObAe#TPz=k1-mjYJ7IvAKGl){<2k)o*H{j zpR+v;8;v-#*ZY%m_i%$?6JPkgKU{ATYYVoa{Q^-i6pQGW-D!S8B?XeGlvbIO2@k~G zQaEo@FR_7!cq|pqB0@VQ)sb;j;^ktFp_h)JQtI zj1!Bv94?s%_mf*9C7)0WsUFUSt^&BY)Yy)2KCIY>!<|iKKSvn_Q z#{G$b*R=zm4jH6{**`wK8r=JpUeOu-GapoeP1U{If?r@a1ip!AUFH^(`=@;m!=C3J z3!UVdtd^}MonDEapwY3HNi8kvU=55B*+pr8jO-W#!Vp^Et|S^4bCg3c^$w zrAL=}kD^+YIMl>ra_98|TmJF#A`0}T*SvB7NlGCSv!;3bwVs{oY2yyHJWFwpBsWKjY48i_kj+t4e1-r3z+ojrMhHzVttPSWeGGfrLWxUVITWGPyAU8 zXdvfkJz9)V)rC9Z36FIQa6*(?EQBnANV@@kAA(NW=_P0a$OiAuff_7HT#a^*$08!o zf0GL*^95o8O`|g)7YI>t&ze{W!gMGVyccO zA3@YK1Mn}zN@D&@y6fOXrhV%dBQ0(F&1~A{enT63;6&EEZHw0+ww4+4m53#>fz723 zR{Lg<`kdYZ4BP_2V`dFxeS{k(-d~7P!MyWJ7F~ur(2x`{qUH0v0-3B?Gy1S0)<64j z53429thF)5k+nN-z#TNKs?(%)IhvPR8;4K5TU_C6txh^KOp2tJ3PJNJf^I%y*rcXf z%b=<($NIJBTT?NQ6E4kN<8>kMmRW=mTt3{N@i0fb>{UXGm4F??0HsLrRorcpOfDo8 zn3E-jHc#-hljCLL(AlXuq1@#mOM1<_VuU{*dZj?7(_>^-pOEj5JtIA27Vl@de*#2yk z<8;;>c8=Ffxqjv+$dB;G5`4X+Ups5gAhFs8aObvbCAHidcIl6$KOih zpm{OTX`wTlNN3RTFo8Uk$XStzEo-=iD(t5jtmrm9K zG)7@hdh1{5Ir^c|pR&PkkbgA>dm&C(Z|{jeowY|O8#?v*j&qL$cQ^^n!1sHm*4+1b zisw0{3*Az#rVvdHd<4cM&us9VWP76DYT){J`q*7@@bf5)dA`+cuf5Fo@cM{3D?TsA z#^n2jlhn=BxHOy4`^r^@E*TZx186hrrB}~VkBwj#`MK0;kIS3N{Ec##r+-zw=mEGF z61J1c!je@@xgBM=6k$71VM&8(+2dO5c1+pNR4H#BXX~NmKxcjWOMM|nC8dz8^^d7| zI!HzOL~wbx{8SjS+Fqo1nB!o-kVJjnvB~K6N!Gi`=>%NT)v1bDy`anL2ya+vC)btw ztYBjzi$nPVYX3CD8MOi0zTf~)bc*47n#(7{^qK|k*S#Ts0%0NFc6*Y-6?V&mC}4__ zAx0u#zf1;+kMPuvKAE;hGZ!E{DA?9UwV|0M8RD0N*dR!x)?RBJPG*wp_vVmBXxGRU zaQ?0uu9{Q!*Lt4asaYDHSERjWvE7R?gUHMiSRGKiCDJ3;K zf>=&kb-SC%`Kg$v`HDjA@SbAhezUpa=0+XJU^<0>#P--(r?@>in+bI1j>B}EBMGZq zY_FMEcdc+3#j{2F_;HNLek$_gI}VpiQ!mia;-mgTqNGEkn(p{y!$hJ#1oMENZwG=u zDahObP@tYu4eo%d0UpS{_yQ0Inu|=sK;74=o5(xxBu1dvqvPtP-Ku$?me9`3evdh~ zHTlSYqbRIqyEemK;FujxBWN-<=ESV_97GTVsE%i>&mIS;JsUgEU3|@>Tf;PYRzr)_A2%RpZ;8XJ=<8UOy^z52 zPVdJ|T9-?uqUZ=4HY&C-)|I^_iDeke*{;0kc~;?Ed!tY_tH{Q}kX~ye9W=*=cTM@R zUBzUpacyRs-U7~z%PY`h|9g)LRt&YtDaXOho~r7=Y7Dj(+vev-Tb~E-o~3wBK(r-5 zJ}~WtaNV{A8xf-~D+8S!`X>eZf#4C9cAH?}Q0Wba>v>}F#E(MlpHnfT8Hzm5i9Qp@Xabke7M}A>ci$2 zIr7Jq!#t_P*NEGDm>XpPD%1OV5)#;)xyxAeA~9gd3A;zF>R$tA7{iDmwW%-*37-vM z_4YG5#w_%%IPDdp>%69q$}F0<-Kk`}KZNiCcg3LoJWc|5gvR3+NOpp>0o}KkVq~V6 z6EnL|)@K9%uE1JT4;%OBuLq|{f{y|ead*8K1=0q!+UKBDHN+{Z>j&b?RVa%K0M!P`5r~^2*hmW8di~A z^fN9IN`F-`nhb29bjDOY*~P1tWGxWkM1$pFzUX^B87Ae$m+g3xHr8CU2zg;>bQ^IY z$`etM)>aQq(`6jArc2cgXX9L)?Cb2-^ACvFR-)dE6pQIi`f+tp{YaU^V$f;aQuu>u ze^ARiDx?O9^PhBUep=qCzoiPl-I)!l1+vhq+bJr+r+ngf%A%*HrpRLP5MO)S+t0pt zJU(~#{!c;mL;vw$=mFwi~B{(=Jb~c@23ai+o@4QXfPPs-qR0Y>VSAs zZfoDLlkUfBZR?8Cmcq7)tg{lu^@-Xkud4}@fM1m3ygQhTf)!}fnxF|XiOBY4?*t15 z$i4k_ay4*rXNL^b&0BEH8z`hNzDhK;9tong_rp{MqM~ablOvaYhqwE5ba0y}LI??( z4OCh4u&jT70bj^eKmxAh5o~TQJT7$eR?55Kr~_ARP9lGH9XzNcSi4Zg57K#jqCofZ zN|gE4=K;_00p) z+v){CS#I1Gymffgr4K+Z5lLt7QRbmhYFy7`(Pc$$>-e}$J&muZi_X8?B<*g^xYX`~ zEc+?3WV?pO$`fehrpkmRj`jMmGoP`g;b9;e=Rql($$urSf_1(bUc<_hPcG@_ICf98 zX&lKmNCmd)^V*c<^)zAVq|CI%j5QJ+ay=Qx9d{|lclR73U&z`_m8ZB;Q}b5EjL&&f z>Yp4UH#TK_`WX_Y65mBOo2076EOV`6is~7QnZ%2ZVCN4diw`pjSLDOj$3-?6 zhM7lO^o836s4kH>hTr<_nbd}Od9HCLli*Lw?!#5)71PYa-I&em$~{QcEVw`3W;Mrs zOXr%vZ)fOxdddZ%*hkMAG11B7pR@~}>W%eA7Pa$wo9+?Rrg^;X300YAxHcJ8#z$iT z-0I6H%EsgOiMH8~YQ^fGO=l%p1U;QWidg&TarWaY6MPIOi}NsIM%fL2ZO5V%jXU0( z-1D<|eTFCHp2^$W^Vcm`EUTASh-FRHb8&?i%(J3&dOdm?Uz6%N!b^Og`&WI(OvfH} zu%{+}-HTJ9nz4VlPI@&pGi6mydUFpR?7x5tc#6l~p9l54F=E%=pWh8Q)!>)kI((8# zhTfk$-m`0Mf10+fTJEd(a$p>Utey_X>eC4~rpzzd#kG8Bv9 zJjI3VM0}6w7~@7OL#Wvw3Spt?|5~U%^zA^N5Rb7XcGLpFWjA;{J_)QMXMVY3%U>-Z zH<%xv;KA#aFr3`$rkhI`&CQ%0jzgP4TNNHZbY`|ytF;fDdDF`EoE@E;{}~+_l#gMs7J%pZ-FQ6FE@V=Z7{)&KvaE z{I%}aPszQh{KbXxrPv62sC2I2whXDG_@2RsvNKRX1g@U4Ihery6b68lfU)W8G|kzt z1UzT4ozDzzG+4dC)<^7BsQDjL&449S`%8;6;h!yowvlDqw}Qw{<^P5>HJ7IJ^Vznp zSG;`CHJnL0`nhzRI6t(o6q7nDSJhd|_U3knUOuONahKa&tVj;AcsUT%FOs;~d{)OG zIL5TvJPVId+t3H2JzI~~FdXs;4#(!*&ep>H;G~a%z z|DQg8wZ8vI|4x&8*Le7LWBTypSr_qhug=T%e_7x|()awrH_?^t;afBB$G_s`H2>nK zwfW8MfA%Jl6tC+mqFa@^*?VR_ISjnoc#R-6D*XNJno~Ha3v+-#Ra-AQ{7&6NpQSy^ ziWm35jtOGaMi7;NppAy7-?8;H_8x*Lf+je3|F_|yfX190@wjG!npSV3gZ5L`N^g!+ z?{moxa1;W*WhfTN>qQe0;k`l<=2}XV8?W@Y-1(Jq8Ijj`!H@{&NX6w#>gNwN8saf)AEK)um@;a~6X;Z5lH?PB^u&ya3;b?wpQ{w$- zD#P`v(%u*ovWGq0+1{sTFvglL3rPz(TK?x3rOH3?$Z303_MkiN4+wB!9nvV?I<$kP zmrvJ2OJ;UBp{3*u)^^mvaaaiuDISuq{rk|IN6$ClnD97VOBfZ%jEOTCUTjIBtCWqM z%s|K`tw(Zi@iZGe^pFq>hTTSUGO*yn3z75g>B?%%Ar1CfHfPzZ%kGpsmX8kSF9V@j zI!GzBZ;;UNa7$A}Mb)}iFmJg}xp(tX z?c3Yv0KO*L;;V5q0dei<;#+;4TMv_-fo^;vq`iUiSf_A?<4B_ZbGv$B;O|g3!&G%a zApms$9+h-=vuI|Ly_L8Cl%DS4(8;`nD45IYzjl3n89Obmx}F%gDe z`-1b_15Xl!--^qo55{8`5ZCUQ*X`ySL~RbBd+h8RBhdt(;>|a3O2tAoZGIsV$X5Yg zyy4sYv{<74kWqh^n|=wmIPek0RJ))NN8_Trh<`$iAWzcmes_R~Yw5C>=@N7J+(UpF z&;IYyUEk3#BXecZBO040pAsGZhf$?R+$NBRFuQWUMjtUH$r4yk$h1p zOV)O`1+8Hu*{sf!u-(@Lw8xFGg{;Yn{AhVN7hmwkj$1jeSl*}7Ky_^pzNqw+{T+@s zJn^`y_U3rP_6c=__$$~YUYXMB%d@@l9HPiASLYHc;ow1nr=vAZM4xoTwRJ0p(?6y-R_NW;-O_P1Q5>z?_fHC~yTB#1a9Em0i7-cqdMg z8I>Kqx>OY8-8dw}>UEYwFGR7;gqUb^5^!zg9oPh}0}xYTyNi}A02hG7R@cn8XAJsP zgMqU+oPxCLis-3yByx$4EU0i}{tCI}RFYx)Ut|+^Pre(X?L`j|gh%2ec}wkKMLTvL z)QJ+_p7ZvML$jJg1<9%(Z1dXc#-6bQy613zJ>kB z5{c+aR|vrMV~&*|#on6yHDfVpQ!S@xJsw8F_j&j4wc7;}*7Fv5amCTUIdU}a8$N5U4 zx;V74cJ0ijx!wJ-K=%{#B1V;umycpgi9@HH${tWmB5uW$F#*>y(v`;BpL-vC#da!2 zUUZfO|Gy@vEb^jXrsWowPMN)U9kosZ#-WrsNLjfu%%n6Ts{#PhzmBM^6t99rxUwSI z?O7(AYEsvok)_-;4pv&i`$A0QCyIGCpl5ILx9W!F+Fr90k{0tWvkY*C?V_pI%SPKG zf8AM6=R>(?>F9~>=AIM1_^GxoQ*|YpYmpSwz{Hj@e0p!+g_Itz;2h~lL@y;WD{Di- zvsEo)^k3B9@hL#EKkj0nq6p?*=Q1g0r=IhuNAYH;LhNP8`0=@1Sp!EKp7Y&Xm+ z=_`MXw{euUA5)g4Eq-%`#fmDwmnQ_1dHWCW-TDGJ8Y*P8p#dY)sJ8+F)W;k z)UM$w`y1IfkX!N>83)UZnR-H}B|_ zI-HxDH!}a6-sLXsS?Vq&l51u?knb48iU9Eqa6s(Y!Mqkhi@7n0CI{ zbh}PiRL+r9*VVqP|xR$PC7PPGEkXlGv?T)u_}I>(OFBV`BNz@=I3U|Ep4Mc9G45RN*` zzF?5~rB7^9eG&y0HOn2+7skCDrcwOd6=i>c22HgOpXs9=k$Mz-L;c$#1~GQR$KGwJ zwUyKBCq3A61Qt8`2~9yM{t6r{eBwK%*~lEYn{T#;=m58T&;XTc)q@xjWf_0y->;Qn zrke&v%B20ax^HE5UWaAGROvH-Eznb_^qGY#nuvTqN@T#df;>*CjXVsrd>%fF zwkJWXi#32vedf~(1ha8N?}EmlmwrpKzqDz}MtuF{k@hxKCig zw*P@iiH5EM7B+$Ldp29f`iVTZmU{kaK_%264i}i}gfmRUXlZ!Mn(&5`$VQP?8~$;L z#I-C%qP;ldfyq;1ep#G+4Jq znU-d|dWU+37`MKvhE8bzkvP4!dbfyHoV&o^&y$)lNWpT5LKSs+^_p$}E+n1KguGKw zY3yxa<3<;z+?`<8-MimhazwUq8?#!$ev#|dn}`ThrVZ{ueH7=t>4JSyqqo8)qb*gl zz{R7L3n?H5FV4c+8ao#KOlPp#Yp;&3K}wy6VmbU?#Bq%v16}$q-FTl!u&+=0$C>kki6ezF5F^Na9^jBhy^}e@#FKDPMXxzk0_Do656Ec&g(H8Bz zDMbhM&>3_$Qnd2%tksrI<&)G)4br9;?L)x;j@n|p;EnjuW3@v7Wg;7D#>#@=sUwYj z=wHKII5!?p+XfO5qI@wW^+2Laj$c;`jhMB}aDH?R2_D;|U`s)?(o!*|w;K9@=qA_( z7egxc$Kv&=F>a3FT7YPa-PBhYVt>TAs6~}~=x=MAw^}q~=Z2`HaZZhnWb=DglQECY zf5QzCnUiCXIEFgrh+n!#@WnE(se4b*cB#A(p?l!W!nl>T8oDX5G1ke4s>z#K(sAL_ zt2X_MR?EtX)+7h|d@fwC#0UD#KjADy=jdDX?usX$3VSf+b~QfItun2;y(D8OJEm*~ zo&3(B8<~r!nXXB;XM0xK&NZ|Ckv5o5r%er6rr)(F-X+@P)qfeVk^c z`G^(LiSA?SYC+Ho!kP#BBG&%O!x<(F(gkjd{^OP@b$PlhCH+cfR-;CY=|jwAA$Cyt zFM{gSs8F*#xU>5GEN^`s*MwBgEcyM)je11t4jqVfHa*lXq!45apBgEY_f+HoOn>K5 zL|s5xa0$DR*#>IIJ!t>)wCKUOAXphpM^`#It5JdsCtN3wMdppOta9u~sGrKzN2!CD zZm=7417rV{)M*zyqnGUae#-nS{TMTSns6HYZclj7QEh{xYdv`+FcII6C~Mh zNuMSRZsqRY2JW3=st%{%tm7@m<)~B+h@e_g!G9Jg*NNfrR z$8-x4zVjTvk+VGQ;reZmvo*B`!~I;q9vTmV$KCVXVDAtd1?Jxf-DMTtB3)K1Ql@pF z@~u1yB-uYzLSDKxhc&NnZ=71P^DaCsxXZl`{eX`}Wg|4K!C)OvO5hI8?Ss%#gsxgX zu78r`Y@Ri52XP`uRBMllqxOv?ht>w{5p+Q9q~p~;0W;XMY<|=CaW}L;_E<0|apu>z zZ$|)PPOO!OD6q1X{I=rzGsrA4nD6=Jx$F%`0v=*W3a|stTs9Zz@MzQ#X@R0!D$c!c z1xT4<@R#fm>1=;tmIqcJZlj0?#F_jnu~w8H_Qs{n%+z^%Ncl)z&QLx116!@LE#I=j zm+JL90LIK6(+OPNa{MV1Z|E)`f6)%;h5zY$<^)9n0lk76L@6E^GDx4YGzQBK15^ny zeB&!9H^^2T@#Cr4m!%1+0_;|ZJ#FrFiT=S3D#d}#W)&E1ms9+$$>fgrHMGiGBoT~2v2K8Y6a%Ed(gA2wmE@D8+Bg`Sl>P4xlY3o^L zzzM}NsO%iGB)fzYf3Jfzfg5pKcvrPeG)&3gNqJ*3_m?fKZSHXkCUAI zRJ$0VgZSvgItwP<2jFT@AR?zf;~|aJ5}@90|2_zJ|4BWNJ$nIVSAcsKr8_=4kTci@ zDRrjQdrYU2_dhIk5zaL7Qwi`~B84uhc@gcvx#9P607Zdom#>WE0IBshAI zD*vSP!;zyZd1i0gy%QU|z>?JvHP`0G-oO&LQP3H`r@Fega%*eQ8F#W#;LC*}qE^QRIj(1kEaje)gFS52P1z<>juam`*4 zz8jz5QhwCL4Zy@`owM~gF3C@RaLp+ygPSsC^~*e$%$yHHtEx)aot;8%ft?1AykCGs zvC@vThI7*1*I(s`E8Yhl#sQqewDFxa@Sm~rinZ5~%{VtGs;rJD=L9WINr>4hh2kf$ z2`*@L1y{l+?5&u%)xrgBy~as=W^`-5O=fO4)I#0e-XqJVa%?wm3rlLEYl`cur z4@@n^<9dzd7EcZ9U3R#%$w<>EDO%^YI@ji}TT#hvNlaq}++xudSs4-{ic z)x4GEb(Pir@yDi!p$MH9Hf#M#M@r=(4>^nr*$g@;M|b`HFTq7)hk&BV zrBYZY7rSByXQp*0`{xTUd`9Mzr*vEpGAXtXN?3;LR|q+lXtB^5rg#tWM#)m9PNO4d32V+DWw=#*n0v#Px zrt08I!IH%c%q?As)pTfJ*8pkl{A9PnnldGL;_IDkvqJH0rea%dQqv+#rN7=2!Zt#; zA(wkPdgi#Ue6eI^=ZXQh#SzqH`6{1gPJT)X*4Ea7L##(A&EWKutG1ozddq0Tq~Yg8 zjf|mYS%Qg6Rqr|R6O4+E=;)()p_NrFk2g|6v-vnmca$LlH%N9=&h<3dw#n7|bKKRl zVPVsCO3{4cEWwy4z~Nk97oWE1?q{NnjO_$g$wuw0we$Rc@cLNwR%> zg2+a>eLY`cRQM0DAd=l-=_KnxEJqyy*hr!i93Q91kj0$FG~F~&to6Mos9m61uzu9x z=h4|DlHcnqw?NFD-}Fj?`wpj}J7}B@;$W-<5g;U%C+AC~&eSIBKMEk`{}b?SEHk>= zuuwoN7ecIvgq}^{ z`ul9G-R=HFN5dZcOl3!RPr=$6dU`tAni|>y``B7vURk^QuDybMHRq_OfS>8IUT>zX zweyWW*uU|#J(Juyn07XM;YAM~O*^3CQn#j1kh$j&zd4wye`eFT`l#Eqt~5Hy$w;}k zd|Fy^!2RYaR+jIB?u)G28@p<`gAnFDBt{oha^rk18YD-JQ@?#qkng8|jo5tGR3czO zFlzd_agyYA4O@y(!rFp_U_=j)V|ih8`mcP=K!QN8&c~n55~CEK9@`$$qn58vGt0`U zah0?H@70w}&QhZcU&&68;(7eO=MO+%x$G_9b*OJa!n~h87p;PVg0Jp#BBN?^vdW_{ zxESD<@T^x{&}M<8P<)rDQB?R1;3C^r&l+SwSxs<|97R8M4!i_C^8hYDJNk)p>$oI!s3YBT$eorMxi;RXZJO$HWlmr3)cHO&ks5c(`Yqx zXYo;Rupaq$whA1wQ^d3dMUfsN-5GM7A=Ag+Z%(RX8~ZK!+D#8pDMJbj9Z6K8KZ_(s zg_mPb%5IQ<;`8SIoYCtYWz!OH@hWjz!;a30`2K{!cujBTBrFJ-eb`^X64>eu{Y>tC z&~d}eDqP<24Eo&K;UoES?rmNWA{1&O4!sn* zQ*>yGEPTLn8=;7rECPoPNDU;^+_FcfNS4DW#GA&3n}_UrGUwPWQUjP1Fo`xh;A(-r zmG_VhMV$4m$@7(Xk45}03ngB&l!k*$$G5o42hyGfEAa0X(DUDegCeqs=3+lRp^2;|PZq?ugBGl_;e?a|*O}~%&C_0AW zn;lnbSR}^zYi=Q$#{2w}EUi@Kp>`Ya18}idoJ+nzOyvzRnemJ)d1w9!{*`DC^ch1# zAn{synX9!KP&ZC|L(lD}u98s%r1g)peJU*bh~j(N zBZRoesJIdoI+O6vTnabti@9n(L6#K`A*^@R)c8e&}Z_dD|Hk=-REmz_TXG zXP#h^L2OYCA}$$v4yR4KE->3J5be3Ul)2;?M_o~9T>|@-INBGON>I^xH7$Xrw#fY= zzV9t+LSk%OxVbzyh?HX2JhDcMa8i1Fa_>Y^ zYwGsGv?F5&03JjuZ^$=;#^yE1N-r{#_x>eX>~*AYd74Pjj(i(3 zZBJ#hZU1Ec8CX(=Io*2@0&(4nez@@54eGah1o7RVxSd1BQ6)G%y{C{zSI;gXTcc15 zgx$YLd4ig+EtPYG4wPCfJ))6rRbfnM*u=9+U$hTH+bzDb6ig*mnyzTdM~=PK0rd_|36Bb4(aU$OUkN0%uZ(&zntXW)jXHnjb&kwL!DZ|T z2z+RRFbFCK!8>cYWy6SK-6<0cM@vAT-L@MUl>S%??LYHh54@t0JVva%yt z0Q(;*%5CHOv=zvP^U)ox@Ng?=rx*eB*qej`q4%isBg(9@V}dgzRW9idUK0Y8>v0l( zvjXoYX3M|KeSagqSugT5S?W)~SN#b< z*r%+f#MatbI=GBSNtFq1J4}cTI*)+-amaOG>3>S@EiVP3_=Tv*Pr#H;y8-uw`d>iH zLJ!$-2EXkOSNUX~z6_6%8678xozf?}eQ^%H1^#`@{{>c$jVvKjk{|j0V|2U*M1`Il z%n5sJ*6oU|kQPZk**IA~+fw$qi-BS^M7(T3tC-YQ2%M&s>Qz0WDpzOXbi=m&v&al#mC&Z#EZA^S-B(-etm7DyDb(O!R= zt?SOS)f5L0c@mUxR|Yp`_!mnMn4|)NW*82j6#8j8%qz`hx zn@)B^mi#9)mk%AM3zJMwl+GSbpEA+!24^<-kFr$v@3$nk~8oD%} z3nQku2(Yyf;=B$B&avD0;o3RqZ(^AOZ6^UPuX|ZZv$6ez6 zp=3gT@eBY1tjNOgWm=V6_ zhaiF+#e7yzslU${@b$6nI#;mgOS9|ih8vVE))>rC(>ex-{R)X_oIaEs=+%7luR$nt zEQ1efEZ`jz*rKafISPXb1YTEqP=!8o8}MmuFNxNAR0bdG{Lg%K;)YZD@=Mpm<~i!? z$E2|UV+Yar@XC%M_=o?PB9pBG)?D>HrAQv z5K7~=@LG8SS>j@UMJ(bRHW~EOR_2H#Wd&GesLIg+`LC1<{g$B{ga@H4KP7Lu@7s$GLOt`6kza5B5bpl1O z-6zZB?*|O`bH}thnqP?AuN1R)5l=ztnYoD37-@~!{4_SJ@)E+Rsh!O_JmlU=kHOQ7 zdO{({xY(V`jAnIjnzx@I-B(P{A&+4p$46^u5U{MrSR5ieMcbJx;St`;{y)avDLS(6 z3;c|ej?=N7j%{{q+qUggY;}@O(y?vZwr$&1O}@XGm;b}8nR>WY>)dl+>aKOqJ$rxl zXTO?~l#tgwwW15+J3fX_xw^~5X=%F;Yk~QAD90tus_4>h?acbe6xUY9%ybG_D!}BM zk9j!OK2#EieNZmWt&utPC#)5XH;BlKG@DvQOMp^5vocX8Chuep#7%tCA{XBq5x4)I z`;JMKm{6lOaOWHcR7)`R&48@`F-RJor~fv1eirDe>#k+Hq32O=6^_Nj!-ccYVN2$WKyjho)we^BfZ3LPWTjk0C6rJYdgsl;aIjeT!Jigk0|M|^+lJf7fsiHiM{(2e@zE_@0>3c1u&d4tN{xYd>BJI^L3wq1t z0YS(dY!WqK{_Z)=AgpvP8ozITaX`f=LV|E=~4ku=Tw?&tkjmjY`{ zr`5jRRc9{I8QyOj)~Y=^NAFrh>l@u(S6fne+%?&q>h#;xEc!BENhKO{|F&NE4vdZr zGg(K0om`_et<1HKVJhV7S=E31lZgMIPd>0_{g!fqh_I z+bo=wh|(p-L`>u$Cp`}tp^Pxl2d9<3cRC}xq$ms+eOk<;KoZUTvKJ*bJ0f>% zD5cOuC~IXyFc-eHcpL2sUfA2tQ!wd-F~`~r#khYg)bxh>e4flMwmxojK2Uqipx4XL zuFwyU%8|m311;&&g(ffy4dOXcC)e4?z)QnUzw$iD>*pdVr263lm!(4p(2AYmWE-92OW4ZU`deRIki^P3IR4UG?JL^9=zp{OVeg_0<#TS=CM)2 z8y6Z6TNR=Bv&Umc+iM*@*`l3WNTg9C4fP;cS_9mLg{%2r1V+{vf7Fe;h8NXgguSXJ z=v7VLS!D370M#c9enY@r=ZBpth%ETxLW!ViCrY}Zfe`Y+5KvwpO{xBC`l?>J_lRbA z`4mBtK&aMx_>{$KLzvs+usBtiXLt+%-=ifZxpK zl@o_*k%{^U@B5dS&N(D>AaU@|z%q;F*Z(?_@qJ(%D(u1Bm#Q#SfT1kh4+EEO@X%N( z$q4!NjnD~eqa#8{cOp(Vfo`EniNg+Ey25Ls47A2x-aEwqrqoLV6-zGq2WZHfXAM~4 z7a-49Ol{Jj$V@ch#0`7MRPv2xXgG5law_cjoRtLpqW!SS7S}(F@TMLN9 z;vb|G)HLPNiPn%BDhchb@V91-WduKw2_^O)u^2d;5CpPF@v&ZwaAFJAp<08fO;F99 zSfCSE06rhPjjpY)87DOT&Yj`yL{XgtUl=^bd9FsYyvHW}{QVUgUZ|U)8o#Pjp*WI3 zHN*_J@^`3@4NM!A`4p45|QN)N5 ziDWd6CM}LGqR0aLxsSKFAbus4t{?}>ShF8`))LjpWgNiBg+c-u-oNy(eej~6m^9>r zYNH1K2O@mxL&q+ z`~yt$rxUpAyLq?P5kuvyZ=1oIW8Dd&S-y6QRJlVQ1E{aLWLVOQ5M%}mVABY$ZemOR z)uLX**diTI?#7Ig&t6xrtqtOqaKcGbfVSh|L~gIZV;yq;?L@f3OEGIDNHnwpTgRXg2 zv*mN*G~q?4E(va|vs(HcFheNpFd9oIST~pS&pZB1vd#_$YiRFyKCWU!n$MgZBZ?VG zq%Ddyf~h$a24}j?a~8`Ct%v*Ld08UL0q((Izwa(`4o%K<|MIqFg1d-TPfN%Y6N5em zXnHj;Wxyx*`|?M&p8X_gDmP0ER1Ika5+wSmUegi&AWA{DnYVV9hi0lbmY2X-QZ1eT zPbZ^*BjYD-EblwM0;bWDn%;RGgRjV33Bu_*?7gYXk<9cWT1SrYSVJ4ESA9W2*9zB0U(>zab?;W5I!<*eG3vjaLe7TI}$?6{Zk6qqOE$k@jRYReZ|P$V<@9-HCw0Lq-i0 zviY6v=f6g<(1sO5Mx*;{)#;fWILovuVZp^720!1PY3;59(7we@w(Jvl8|RHpmB z%eopIxlr*fZUv)`TX#Q;TTA;seqjW9>tlznH?l-YYrT~xC{Ea13>_4oVNZC&0&-RI zV5aGlL1WXg(&6jF;@+2$P}_B^Q}Tz<*Zk0YbE+}gAgHRKaVHAxHN zKU#p8OI+ZZu0|I<7XID}vvir7=c|30w4E+qWil)uVEG|SA1&#bz==cxqdPH=Qa_|o z)JJJdWJwy|2Mq;5c31%k>NIW6W%AYv%k;uj(*eT_*=z6%jfcUYH5bz2U^PA-vZtlJ zV!WNV7Ckc50VdXnAg{?_q(Wog+Qz>E$zzECY86r`2o(#CsY~pX2%;42h|lP+KBWcM zIi|$AKkD|f1`00U@K*jT;=nZ`i?hH!S0B7)T1@^NLOD3zOu9*^xg?B^bZMwNx9 zZbARa2QP$^YtP}gm8Eb(0wC7kQ>M*|@KuI*0*lXG>w4R`Z1~ov@3-krc>S>IiV;|k z5>i)9nA(s6xo{VxIFX_K`5v>f#{@=aUP9ZQyrJd!oV2+#p!urepQaS}RDzs#*E^tZ zceMqYzwL`}J2An}n};QUC=iTIhGmBDzf(v;R-V34392Y;+o< zd2A`G)Mff_S~*{Xm`K%Pi%6tMitWIjraW-=WpoWqPR+wg{JkEn)GG8Ia7~_}7&r^F zEl)jFNuFx8IPn$of7W_(XC1q<5uvL3kna0vIE@?A3`~z9e^yhkWLV|e!p{-&NZ15S zy=HunnL4R(*kB=q-GhBL4h3apZb5BQACP20RbW-ZicEBlUj;<(Dfx*az3~6|XQ-ka z#}cbc&TCOua6Rj>2fjHNh+j-3JtfP8fgl+U@3KXNJs?w5iqg0Uy{_C&#$}g_w#GhF zN8Z~rrog^aa#yQrU3yGg0J^-hMTC3V8HI!X&EMgf788wY=P4KzC?K0d#hBN=d^^rK zk_ynEO@^po)%#WO)E9mjnCI=030NJO9~yAWL9zN0n-uO`Eao`TP*GM+COUE79XIl_ z3%6KnrxRojX6Kyl-)Px+lhhZT!%QY_lS~Q+x;W#hM5;Bfch{wn5p?-`C1^~bcI1GR zRwJ7Z(k$tI6|Y$zj}oTon4jq{pO|3^;+W-qoY&;I>rD5}_eFJE-riGA-m%MOpqNU@ zjXN7!7jTEn!1>3wimhd$CL2PM@yjYw1^nvu5i``&4W=U4@lOppWrd%U(Z!$~g|3a? zpEjdSbjs)n^v{GS$yy(bel<$vDCX8IJOqF)AXB`;31d(c_PH{SNfs(i@P?d06egKygVcTs`1&@Au8D#rhu~Ps<=Q4_y~hPtE+ry#>##?)weP<l50Q=!%01NMe$;tit@2FT{z;s zD9E{iSma7Nn=4~A)%a6o{6RHEM|X8Xd68Vfr9h)}f5fFe)o7b~nGh7~WQQI$o}e5D z)^Ik$R*r@Dmuj|71u?}N%cAM@Tg?KMy}s?L+UfeXs@~m(Bq#MJT^=I2^*=R>RlvPP zMwq2NI|9p3B&qs#6%0RS2nCB^lai@k)wps$xKlb&d>0u)1kko zta+Zid`)DO$41x+q-Xq)S!PdqrZ$k|d(CcBgAD~rSa!xiR!tcD$Y&MV2v5$24#6@Ti2y$4YHZ1G!#kqw%Ld<$q3-yvcyPEN)d16+I1!_L%9 z**qQnUYqd3Uuxr}zkb>bDPU>x$5&8wurvO+k20auX}=jDG@D1}=Itu-L-#O|>yJ7& z#5ve)152|4Ujxgb$z_42+wcxV;RHLR*K9DAj%#3UdHW4!u)qUx6GaC#$TxYaS8iEF zI`dBgfO4_SDl?tvlHjQs=tnZ~H+GJ*Xl1fs%irBL(0c)jjYPG$NO=-VExp#9 z^OYU9==#{K|8dbrS@?+hF06j^uOosfjz)s1f|{b3DBtFe-`MZe^;?e&PZ}2*W{OO? zJ5K$@U-xY8dMY@mTak2Jk`gQ<;=&A^xTNmJ^%s!0jRj%RZ9mFEmKPDQ&41qtTzFU< zr%IPme%o0>_Zg3IgMEDsy5+c9&~m(}%SyO9`v&pO>d(*8)ClQOTO@ZhYsn+8;~rf= z`$W@l-cIh2DWuP`lVyh$r(XP9I!wYx9Qb|Mc@i1ndH%DrP#^8c8z@pTa=Gp_nWG)k zL5{}WD_IBJXcamqc@sV_|A96#6{c|nRg&V`kijbkf)$eDf~-?m>jRY1qAzK>A9gpX zZX}d`YfMRQY!p*M4eV@Rp;c&b&u-Yxe3DELOtW%R3!v7gH-%t4^Q?lLAa-P7G%;Np zIWhVg=k}dbt(e6m#`@)ZARL@Jf4f<9BXZiLHesJ(|E^=UKv_C#*_VAlJXUQxx^lBV zHtW?iJ*VXBt495$=ZsOykd`wq{XjIwKi&Gm?roJ;asu$4h z9Et~|2Q6Z`ErTUrj3NAxdul<5zv}n%@xsr0-k`&@CQcmsVLdvTuXZ zxiGQWcxNKCnS9Tp=y~D8+Khv)M0OnD<T^A-2cA5-BBIP|7nMnAu|`!Wu^P{)$t_| zO3nkL0Hj6Dg8X_vhG}QY@2-Arx<-mFKcp?Qs@hvVA>;OUQ=1_X$8X-EC7bAEuzX_Sd%+ zLrbcoR^+n5t|N)zM?>5-F@JMQ0tKZY$~6g?dyB!0tyd`g&Fywlz;$7*`-s>)kPrKVry-q$-sK>d zr!3FUB*ArR)$N|MMu_`-n^|HyU>%E4og*L=g=Sf)NiSmErm3kKwxmFJLeaM8QeyZ9 zAMuc0bUWBV)^2JRdWYs)E$%A|dTIWXo6c0tivmBPD6@XYv&f=Vm# zlmGL*57unHX+bZ15CgD>bwl#`JHGnX)7{R=d4P#J_L^kwnrwHxtgTylhZ(}B`=&~A z5X5F&dJLS~Hg_g6;)h@}^Qz&UGJo{Qcu3N=59?su+=QnXGv&zOnc;28rDH=eA3I1S z5RxUbJV@l(uJs4kO{l`A;4AxC3`!>Ka?L(r6r6k%deU3ekNRUwS!UJr*YN*O%mVhG zm?dxe-+hmCI#b*yFMUeHSn zxxG|wDjLb=quC!ha`iHMBhH%?v|EFySRHzT1D+8nTIaN*RCE!EYR{P-Te=k13=WrR z+ikwQwL?~c;&b|^RYlTJ3bx_mif(t3D&uhdT7d^N-_Jt8y{?EXj2qT{Z~*5ZQ;3hoT8V6P`v zVPMVqWfvGVgr_H;X(DAW*^Ol^+!Sp`a@j+sZq$(nSL;pYHEAmTJJ6h zo574dPSc-v^ZL&ax@P8m$=XMqfigwzohIg#76omNhYjQm_fuGeEoU(Dd#v6l1M67U zzt7MJblLUZLmc3$CHaW9c2vjw{L0 z93O?KFjdq14gV>enFY0y1O9twHG z5c*#nw;`+fpA4srbW}c{%IV1%b{bmoni2IPeyd}wLulLC9IU4m>-Q@ek)9#uBWbRX zbN!_ML#muhNMyz?yVhE@zsx3F!tnSE1-hF{n!6gKT5Tcrdzx*-EP+R5Ac z!j|dqduqqFt37`5(Gi{5P_-Xic1%T)ajbJC-r}b?Q)CO%|KWzvvpufovs$o~Umnf4 zysWX-TX-JknW=}YQjl>KaMP4TSC2Xzyr|1BLeo(+#xqMPr(2QwAoD{KtZn5-j-S01VE$!)Dv(b4T}WgF*=@}DX+mv&u` z-wUmXm1dSK4T8>rYEtLOx?_L9<&CwI@GD!^#f}P@epPlu{zcCJG7)pVGJkf1%%~%L7_>M^sto+A?QV zRc(78GqruX?wbT}$XlV!Pd3)Y#txRrdxWL}J7+G$85rgm+x=-8mO>)h5v~+7Ca0$J zK{s@MYN%oY^iS2vZD8`5>C|Cj)Q|3$s4?9Z!uC;-Z#Ru|Ki1b9BT^ zX4-yqaiT?L{~yR^Jv=s#<=NHYXJIiVpyAZ*1KxMy{u@#C9@pBs1AL*H{Tg*(M@-SS zh!NpJF=5YnC0DD_9aRYtWUxkMA;bq795kqPotzf;#=>a*MOf`p-4VnVLwZWtf-e0h z>cO!uMI(RA_1eR<^^X)&yhlQz4AK89;#nW?K7MDI5IsbEIU4@8<&Hr% zPsM<_BY#mW2y4YbM_sEoBPYZ`T`GUBX==H(Iu_VXoBqbJ)?XJ%f&tpRf*6=8+Ji@y zNHq|LN3C5&<8PK8a(-;?qV~-+KvE;yesI~6O4D(Yi%4_;|xmf9$9+N{yrXW54XhR@{LKdVLj2j zzPzwsQAYdqo``NDt*o!oC)8uTw{5bGRty6etLDVsO+PE1fmC&r0nXH{Gj{SGhIAl9 zD2V-Ukx^RXq3c%htypZfWwaJ%yvgYx8X?rl(WJ`{x2MPQS4Y~B8rENSsW?`G`9;T? z|4>nIloTB1-zvLh5)z5JhAP7kxEM3MChkqaEFJf)DXgJ7uJF*tg+3-0O%O@+W=cSdCFe%@yx@|PhTO48E*36hHna3D=ZkVsq6IToow?V>fSZ#9AL#7 zALXtHJ)s|PfqK`n>?I2%+x8EK@w*Y1A2ijQ~ayQR2n+~T7+$fQkt(oPZh=|r`TL)c^{9y~#I@EoVL zYAnR8Nps!IPJmiRylwNOtsNF@GuqVTT{((EjQZo3-$BXaq_I%fAN#J$=C0R2@%Ci= z+XPK+u`sKD9NY*Ss|Zk?$gO=(niGbD$?hf_w%54GOp1RM9j_B)XIVb8;a;jOkRDV{ z1G&j1-Ir4y5GHt|or#>=Xl`iQoXb*vhfRP4-`W^iS}5>LsEC71s^Ibcp5#zPwcIXE zfZ5&0J?F5atb5e=O5`Dge^=3i=)5746Vwd5km7_qwnAW8gl;kjoiJvutR@T? zU((%Ft_EvHGn*8ySdx7oQC-wuK9$n9KtG;5`>TE&Udo~A;8S5&_A*eyk&_KozKa9> z8+O9Ag@z3I*)vu?%TbLci}l{)X?y9oDe&u>AM&`{&^w-C0!+v8YkhU2_M*Feee(5M zkAPwrp}!Z4eE>>90-+i#QhQ9aG7inz_T2(b8is3`Ih1~r6PMXkGngb;(=NQA zroifSm+Q2VA9{=Z!PBI&8 zp#)A><*W>@hOWt{$`j*SfwGidNof>Ps(z|d>yC*T4KVL5^SP~A;j%rn zmAXS@O;3x)$^wKA%;F#^hi5B%Zq_4Ws1wQ@1A{-<6-==N(H;d6&rE& zzsaN2`28gsAw9uLIJ1P@Mpn3q66ukWD5#_u@d+rF)1S|#!TI<4B;@{yQ4gs&Q}w9k?< zZZbx}UwTL7nsN3;PN@xIY89HQ{^#2<7vEmJb3kU&XUP*0*di;QR>y=X2WVQ6NzacpoBQ zdIvOL0NU7Ju-yTDdH=p;Oa4FekEh?zZh)h{Lx2^Z7TZC<%7)F$_Y8L@o8z%W0lk;t zbx28tws*)ODN2}#9HLDTF$)q>);}m|BQUZi!4%9wsMxs?(KG)WUWkjXsj+}goW{7! z@ti1r`2fV-5SF;-&eXzP0HyxNbdh@x zs%IrFkkFxCGG4dJc$Q7eCB~9QoeR(LXu-Pqkuh1p@AJGmrK7sDKfdT7w^fP4Fc~sm zfg;g2f*JJ_X4QIKnm}zoB6&9`8{U(dUfuDJFFS9T?s+gql>%FFq#7=NHN%g@OUeRoI_qb}G#TV^esNz>mps#*5!=>PRS54W+7SVdR3#p` z&G}`&*N0b@Rk?T1_%H#{M9OObR`4z(o*M)*c|;_0(BiGydR2@C5ToUF)P~n5;h>W- zW-H8#d8Xai^3v(2DEr=&*u!d$t6k4vasvHCM^_otK2iUIVSTjS7N#IC9?P4-D|=$E z!FMYr&9QsLLbTw2#olQYL5$-ENFN#+ogm;VtW-p4igu$7V1kvXG$aPw| zFU+PsL3@laM)6u)$tujSp{&Q+j7xP=By7q(UgnVGK0Hn5N~6Qa}JJyJOmC7W5>hx zD9^z;%YmA%tcnWP@xk67t5Jn6bb*_c-2A@Ip;xy-il>`uUYiVR3_#M}h_{nDpNot% z8fSun%}6hlvViMdCDC#JlKNvo`@5l&X=n13IYulW*~u|W*Sqzd*5K!>bFw^K`=QZo zl0u{H+^W~O^j#EVXJp+>`XFuo4zF}1#ey?ENqMom$gqxO$ibzSvn_I5NB1X!6QPr( zeTo@cFi&iV;4KYe`=M@NY@_6VBwkne=H z;O_)pZjRd4&+>W;v@vFg_r}BwL0V_06-PJdr6;~nmoxkJ+@VV@W)DVbHvj@ zC8-}5B;9ne1sB`7z3Y$FzBeTN$5l}bJ)j{H?2~0HXjm-(zGQyO5!W5*-Dl*@2dotZ zj1ma;2Elnj_@{rvz7zERTDgWwn6Q`MXEP+Zh%b`LC}47zA$Ei-i8t^126Jt7kcVBZ zih27b*ry)^Uoh@PUc?gsq~hWaMv6ms=HIBx>yGVZ_mlc?g~D?j;E(ocu?$9igz7eS zb?g11jc9<34BJjHNK8QE>m3ATRuN@TTU3BytAQNEe+yVDir$R6iy(Z4m=Je?uMHgl z*Y0sN_mJY%Lk2WM^Ifj8eRgQi?tQ=hu@0e&J(aT68IgU+l3l`3bjK+lKTlTe2~4Ph z46Sg$p;gDYiiwCpqWgY8NKYZGQ^VTlo-7nkVf+L)C#QU~Wy5&E9oFnWHjHBq#EJ1K zSq-NR_9>G8cy4L?;kQcY8UaKdgrF)woYFW2&rj8AtSJTYMEcb}47+HU%_TY*jr2MI zXpkSV@6@BYA9bC+Y($owk%(JzZ=hcLg<=Kq6WZ*l*h>avAAS*^k5YA0NdS7w1fduN zQC0C&35$3CsRKusg~qK=PMxlUv#=_YN_+V%4STJe4U3T~j|Jb`j~DzMk%e#`Z`BIX zJq0Y)tXd4gx-csx89ncdZn15UF4@xl*lt~INeNj;*&2j3si6w*CRq0h-PS3{9j*=+TD_#xXR$U78l(74R=aP zP~B-p&7oPidbz5Ol5SWA{m}x#`C_nEODI_Ca)$o1b-q^F)8XLp(#z6tjm|0!a!K`Z zX1--gWJ;yVs6cD1x>LC}jXQaGYeQSdT1=vRDK1A!C=N%Zz|{U6ke>Bbz7e>*l#CBF z&L0Ij3&e58U}k>(?TpACron4?0zzl1O)$2x`D$2YhDUbjp5cW*0V}pBL&VX_hhuR2 z&E1U^AUC8|-MT4j3fg$sLbo9KLf(O3;w?u1ZNFLWyRR>7+24VkyrxgvZ=(WM8ve5% z<1z$a@(TyO7nTMpr*l}rzH>n66&eYsr`hu>Z~glCK;j8Ql1FF5qeM0Ch96S%BPG&r zya{9&!uL2F#RRwM*?HeJBwVA`I6QHdqQP|0sqf+@H*N&w1VMrO4lun`m01_>2X#D8 znAl{qonM%#AG^tSfJES~UzXUH{Q>ZQ2Z4l-ZIQqF8_F#}fY~dcd=+?oNR#!p4r)E+XL`zFfRk2w#*WN_j&}xKpF~*ei$9?i|p-s`SuEg+M%@eHMq`l-*W9$ zxYh{YVV>nlzVmnPI`-wt?g?E&~0&i3ks z<4MNO!?yICz|HH=?J%CD&+SgJ?=o-se_zFRH^*F!0-xC}Rl~r4dU2Qis;aq<0p-0) zvi)|hd)G8+*Vl=BaN^kqZ8twEAC9|NKF(P5uw$=2#~eJPvhT-g ztX)|-LV-FQq3P0nljOTc2@cMZEv;nVu_`#c|L5?>FJIPAdo-keBsh7X!XdEU z_8n+zFJQALur;244Dctr1-?!bAq4SWh%t>IYy~uf%`seHQbOWxt21#>O5+K3dkA=t z#C%B2-BHk8*B$EGIp)LLNTg_w%t4rIJnqD}OHShX4>L|cZ3PSy#r1uhs!k{?J@kFk zipppo+FRr-JzyKvH8?p9ys-DCJA*Gr(AVXX+C|kj+%Ijuf5kk%V==ihW9df?+nLSPwGbO~w{0Dlex19g9PK>FRc=ui+&Zi){zr z8a*RAlhR~S&;DSBy(hqrWcFZi(qMjEQ*$cqSxG@>OUz69d+4cD7TO38h3GPPcC&D( z80&M&_}vL9;2ICL#^T}FBJCNOD(fgj9z+M@L~l|*sORfA4v4bN7y4S?Sg*eTrpta@zk6mp0R*8N zCx8tuq7U|;g6`inolYK*ZkOV%aX)+{t&5{PGqT4jCbb2=;r;A*y6kQwf;VK%*Ax8I zVZveEiGAsk#&~tU;fCJebmiCcW_}7{iiOnCttSQxsMB*hO*4I7-4rH#UWn=5XY?qI z*C%*xlTe7XZDiCuia#L}^%oMc8XY|!U98TgL-$fmW!ycr)C`YkbO_&g_KaERZFr2d z=4e0TaM2H^NiU1Jh2+m?!whw`9EWlyF^hlfbc|d7n7=q5hTJp|)K4xRJ_W5MS@i0b zx-j%l)j+c`DmWZ(fTCf*vIF4vcJ1jin*zAs$(vC%&b6*%Bip*6?0K?d&NQ?V*{TI9 zUEVuw#Z;e`VMD;qPKZ=K*mLH)@t$lyd>b_KY;O8WqqzZ*J#KOC}tzIOY)6rZ8`JHDrnzWP${Der#8zqIpz1^fu? z*^X^hd=tn&zD8GjnK|r=@!c!dJtc&%`yBXX5(pUZJI|CK;rSqa)W+o}#(fzs+FrZ; zvDz!(7Q>ywPn;4iEwkw(eiHcJR8B;wl&uBSvB#B13%k*3p#t~w*5%dkDIKCee$%&k zDb^kZXtz(kb;ljEi~$nGzS@yq?VSYfwhL6g(pAO*vMSlrw`jM(XQ2gM^f&hPfX~*z zO<#*cz}ANK1MvAS=>q6l4PY>NzCLdUrX%@H;y3Fz?6Vhb3?;n_n2vQW=HCJx!PMO_ zu0Zt2fqWZGpMWNJ_p}eB=ev`yZMeJg!msv*9eD}mNWeL(Y!1q87Ei;RwRb%)4(?Rk zT^pxg#r}r{DPyxXq42;g=GBroO4W6(CMyUHE?s`3xmCm>`eMHWk;ZJI!A}e>xUmo& z@=^2(pm#K|zV_B(J`&im`2yIO-cJIO;V=9I(Y%F4`rU{B%Kr8qoY8UFOc8c4+HPkZ z6e{5$g#~<>8HWchncgh!YGov6E{71GVzcA4bxrLLeSRO-fk9BNlS$4)0?u zRy9C+AzUuEdT37p?E{wA3EugWM?s4zr4{TTA9Zs*61D0PF#Sr%@g0Gl_yig{f3;_u z`}%Ia(<4mxvj)e5P?8bSBK6m=TC8dV{YEu7tJsWeXWrGg(bBJY2tqpg*0gM&cK|DT zDPuo6U52eU!jF7lmw|jofR(N9Wohcl%^294QfvdPz6Mbd2UGa_+hpnQD4~WyH_ggN z9Q%9DrKc3>zuh9Fb?>7nED!s4DJ)uasH@Lx;O|dp?~QYy-hDUMGcYU$INiw$X#4DT zB>i_zr31|N1a8|t0KV_+HP99RciJZ~?yY4B$af4_12K;i0|Gs>)~Sc^()~izDpu(B zpR8)z!(jnl%duMWy>H#}pTMJ`B77jA{?C7F>N@b8+kau@vvIO}I}PU1cbg9Sfn(7& zi_6Ob8-(CZs==9xE+@i2U|1e}l2d_Bkaa2O=#|im^^1WXo}np*`qkcf`2o1TwQ6-C z@O($R0PLr-`;li=P|0xPSPguC0B&xqt!&hN00`NSyS+U#?y}+W6vaRC3&#t(nR6p` zKYR$3D9{i?>Pv+qx#8*@Y;!#4&kQ1Y6|bSjU6eZ^Ssk!1NeLmJ>-TTc$O{d&3Wj%G z%ed0MlHlnJr7Ip^Re9B5S59>1U<*IJ6X1n!jC}v;ggPFbC=0q_;E#>cA_?FPdZuPU zgHsJat-A7Rr1yx+o-KA}u|aE1BZq6-L2ptsVQV{h$qIw0`(q<`rolvu`=Xd&jz!_Z zY5e&HB7XHBbO-N^wx$@~)2{KsrDT^WZi83e;~O(RP2RjC`|yXJoGVO^pMGz*c|+0& zh(flp(th9edJ+_2WqpMN#t=XO$%6rdy1e&23jOn5lsPx1X`bqshVV00or-&hn3l}A zx(X)~x@(DFb6c;RtxD~<)&)yU64Ph&mkYnQE+Rr3n$>q#*%5mgN9b!B_XPQr%vTAf zOvad#qvuT65yI4Lt?_c|88Nn0lk{Qw9*m^^QIo)vF%f+!L?Q=8;ofU>OprVwjNVUvGDy(d*>AE6@W=+;`mC^S9qLsL(!~&={gm*oE4S_E^KjeZ( z^YwKUSUSW+QOo2T;C*5s@(pb<%goLl{areZdv-AG$Fs)ghDV}(XWW-msAI(QnvX(D z_@Stl@}otn5hn5BAi|vhKF=}9xy{2Bf+0+i9Upob9;C=EwN-0GCW!^J{j8;Rg`pe6 zZBzn+b>Ko=m=r}J0g-7MN&mbe0R#fl5hioL>`Vje?T1I6NQCkAos}vp9rpmE?d#>?IM;9zwQkZUdUk?e>bna5 z_j@G|%H%8420gfH~IN%S`@rP74Y@pX)a=<^PQ(fg+SEdt|6{|g;ZeRzecREPNk1yyL; z`3og3J_SMe)_iF2k4PkGU?$b+h(iuQZAB`1SJr4kyxaaqyN z5l>Hm(fi_3rUQ zbQ7Iq^p%8>|1^}J(?o;~1m~6Zr}FsJDMi8!PZzXBl6PEG02T}Ia=S?Q#HT8CY1fr% z?{IiB-;dyF9?xV7b>BN>$0z z`qWRkSDZRXWj7(_LGu&NX&MR1);kl!r#VjQCiy_h*nS02+mx(&11=I4R5oyES zZ`=r65N*IuLhne{?3ETPuDbK)KgZGUBG9R=zMmTS>Aj;+`%|rJ1t& z!R_#Uhv4!SI1kvCx`DI9xxnt@m+kcQb)I##kKxUuui;MK#>SiRkT$#1H&x{y02&2R z?iVh9^poxJr0c?BPH5Pst(Zf5BdIpV3Yb+6%L=6`t?deBxlYSCOi5ShL^S^BWt)?(ir-xg>FC-cu6eoL5L|`( zuW-VwF59eKX+@f^unyPKT-DXD@>Gu<4tj?OM!>$cNq@D==f|}c|DN6}WS4R?ETy-z zB`g+v`uds_7lB$w#Mswd`K}n0D)pg0I0VBWKjpZQA z3+t;OOvaO_-18(|-n_C=DX-D3k-2+o&2F-=Rgb!Dr?`X(H~T)aSOVxB_e$u-PMG$# zotb%g^tIi|Oa8U}*bh|k_8)%-3O*ubV4xs2p`@LftCj1b#)%YQh^w~o>>@GDbuf+dGUI46Lg#R0u z{r~!T%k?Rcrh>dE|L5!3`5kbSHl800BOSW?&|I{RWegj_I0-M>>9svyUqp#g|-}TR5090Ui1aNx*Xuk*i zuR+2KQ1%1(|6@3d;b!*@@C10bO&*A{%kTSYZf|V2Tm!Omu;YGyXOMQ%qP5-+W4)mN zNn=?n^(kDlHs>TW;(3hYUdB8@`SQTm3*r#-1Tm<12H5Z;FjR$6Ih0^dXIGk(Z_x@H ziY@*X;-Ys@@JQKZ`}jlW-l0E3=9|&#QI^fZ3=qCS zC}}uNvM5i|YY7YXJODO|a^BOL;M-6|z#d0~FwPLv$d6 z)N5#HrlL7xYKsCrX8FgmUVUQ!)wA<@o>Z2I0)AwtlU^~0;=3*RLEANAG@5Z(9Cs^#$G&~cHb8FYqqyP|j? zW{wYT)I@Loy}8-ml5MC#KH%#{d$+xzj@bKN^`IqkSs{?^_D*}p#=#NK1WIphwl~__ zqIjH~jl=apG`$GZOyIO-exIf9L)Ia+KkPHL$FR>k%4g)P>*06|QpErZ>=_^5vc>xE zt%vQM_9p*248!RpOsOF7@16FR#7V8OD{J7Y4deGwn#4foYjCP`l#7$WB}H|+y)9qo z*_sM?Qw}L-vvhE_cG}+^Qg z)z3M`4XD&{cuu`Edm7PZkQi~X9NWUQyHasNjVp#xT+^YFYcF*Q{57(xR0%Snv z!R+$#a(jMiJZbv!Si{A}g-k0ZDJV{qjmrdQ^m5dMBPxmXDw#+tZPW^t3UW7FoMpx@+zQt$gbOFpKNDS>hp@3q8duQ&^JRR|E^d;VVaB|4 zwH-`D3`*I*XHAi{g*zv1G)u|d#3U}^J#;3T6;eMMRswMk>-P~IStI^>nY9m>0wau) zbsub+{C;R+hDmhlLAKaItau1*QoV9E7F~$ZxM5fQ5|hasKn&GgT4BM8gZ$(ImLyl= z^L`ComtwJzZUSf2g$a2$jgTojNoPlw@Qw8EG`JmpKP6w5(!PFE2takC-H~23l3Uo= z81ZyZ?9Xcp<9;IC8J_o>khXi+U1CV3;)~HiqapW|YMQ2q*MWnZW-vo0mjqy%kzw|M z|4O1|G1Eq5xo?UzMxG`o{dDzi4qv31km|8w(4gphC!q zJRdC_d4uF&F`V~Az#^77q;(pw-uqTd z2^&L3S_n}Bi3tY+!nZPK6h@u=F%yL0^A#;1;G__d5<@{AOjxI-W=0O0{dwZF8N?%p z5GQ|}sS;a~NQIJK-^oE!EhTdq;LS9U&&*;k;}nxC){E;whh^aZIdJm+sgW-X&p+Yu zB7&du2Mhjv0E$C8rfqh7I$e#wVqe`K^A;l)Ew=VLaXtq=a~4j^t%&*eADosGcQo{% z6Mbjjmy1Jszb%Sxle@FWJ)~}hR?%f3GmxMb>d@}`@O3W>?JljyU)~_Mi!5Rm+VAz( z#WTPibm4PHv$k_|^zi0U=X!T32GEL@uswM*oTYGmL}=B^O~QzzI2N-ld|kXjLKOjy zi=OYjW%9#)&JQ8;62|Ts@Sv~_VKeJZ#RziTIJgp;r1|hD&FFg{+(TKr-R1A*xk>S0 z7SYA$yXNzH;dXrlc+P*nE0*?V9G?_j_$+w83&j^KWdsPR+B{5;-w&= z`1p(D67`(A8W1JBr+1ysKgBROoE`C^_T+bm1iGGrY@Hid4gc!ce>B05>Cg9WK8MO32VUN+joa7FVxm--K%cbmjl07 z-O<%|OD-Rv`rBatp8fSPKnNo@Fr21&^Id1MyY`u_x2C$e-5IG;a%83k66bVswAO(A z4xygEAH!E}1PHAWXPVDuwQ2X5)D<~mqUW-*?B5;T5Gob|q753xrmOqT{#!w6%7|X| z`Mg#dy4PsyS29XfLLKpP~ z+x~}B-=m5|{MyssjJMi(N3o9dUfs>^C}xN025$${vj%3j;%apk%y>w@w1wS;zkj*h zJ@*#vuRdUH5chs7gg1hh!daPC&F;gcL69?&Dy1?O-o`>4@+lb3)(Hz#qlok=%?C=F zdU&K)DK2wLIi;1PZ=yS~n{Cm_HjZ>y!nIsk0Dm0YBw-%1#LOEv_srk@h*<_Xs11h` zlK2#uyk{dzS5|a|D1gJiZ1rWbM#6(j@|W45attVfY%C$<&6|6 z%&9j{qd;`(AsaLo#Ep+D7+_u}<~5CUxTRV-O4s(sxyt4Iss3IIGl@*E!dee(FgGPk1rMVz4t^? z(J>Z|H#NIQ@>}0Ad#0ACreSCzJfXCtdkHNEyoMb?0S!6K&p}>?UTq`L*J2aTh&1})b(f+ecsyNbvHOq%>Z9P4LS6Tt`rVVEbCa%kOzsDdK2g+Rk~|TqFHz2Cnfvgf)&QFGU=!n)t6*-a~#Q!y(s;7Q}I-+&VAevKb zsFhv#c^R9?hF3SmN0smh>O7uMy(^v#zbeVSp-x3U#&^^J66fVad7S1_98Be4F%OZ~ z2lVW_D}@xXjC`()6bo%Gfn_lsnsk_H$hOU$CF@9)KX+xpx@~AN)Ofe7V3? znmc6c{w8^QMey2esDMpk)WZhF>SDHCQD@CL=AML=Z?{SV3>h{Z^T09mV9j$8dd7p% zuI8*9#m@9%{RHOKf3+XmsBJkf9GKMVfMHZA#9(Ggu0{d2e>p!Lq99vYqe+(?W)dLi zr*Ix zhbAQBSav;gWOJ9Xo7d3e;o{N+7=ClB9p@=&2h_PXrtglWtj(FS3l{y$TU}K=^gNoF ze^|1A+-T4Zy7ypD$vcK0(Q!s5Dos$@h zarMFw<|5=E>HM<4XBT^dN=J;RN8tJ5=}>FbN#$&tU8-_vI0u8+oGTk}EElvg)f%$yts`HTQ*MNa!>AC;(w1o zLaMU0fVS7#<^nM21f}DZS?sm?HjR!WaUFXE1$@_rO5>b)CESoC>GVV|Mvm+B@OXCJ zVGDALU+f2i)Q?dbh8p6D!6God*~|7j4%ldqV+Qfg8<^TRKZ#ZzJiWg3(dqW)$O$-N z%}q8vzj+M3zE@BwDO*92vvfZj5K6m(e2H&XDV__v9OzSWwd0%dl!X-dqvbEoqxaj;c}T z7EK#$YQx1t(7#*Q`hui)lnT)SD%YfT^%+SN0_}9JE1~&^4PLdotlNb{$CO6Wf&@$y zgK_FTQZVTlg;Rl!81q#K6Kn=QDf3Am7suJo2JsX8+{6}trdt$3)HWTdI21YAm@|Q6 zUyN57F~_;1Ojx(NxTHa&Uv_!&by=@A%9_-hJag2g8jQ>GwjK}Wv+anbQ^a6!>}2>! zW^%G!+qESR;S+D0H9M;@*sR#B+*h|9MN~JxlF?KpI%vE4Bg^CA!9gEjI#k=)`^(?C zrai6+v*nD8pH81+b$*GeC{=!)Hg;wCT4#T6ci7y|1`yfWIdpyzDH1wV&jkFl7K?8X z&shdLUf5M3MMrNl9eGI0A#MUVfKsdap2iyglXG6d8qTaNujS`@rNr8A{3@z>aJVo0 zD#aJmi4~7!-KPi@nGh(FtzPR^>dUWX#4i*Tp0gI}xD5+^eaHBoH5+AI0VG7~xZrz^ zl9Nk~_$xuXgLl!6-j%cdcaM}FxNW7())0mg{g<4U5W@C7vLn(Tz*PWyp)VV=t+nU}X;Ze$fd!l58K#G#C*nPa!5U@o_5r zbQC@AycLoW4_b!4LO_sFdONa)mrwc<%|Pi4S5KJGm{lL1A|~&3M8u!`p=SIf+~# z6T0CHLgEYEVT}8eSc2?QMf(0wZ}(#{r@l`C;o>zTWlt|3n# zmk;J=oH&}Mogtp*R|ZCy;+f#Q9#;w1 z*-&H8%8IhH49F8q4w-b_iII%kPh#Zec4%coDR{ALEIogF13rcx!GyO>wxiebYRg}^ z)$n)ma3SD9Nms?8(Qb3HC@=!ica}#O zS0&RJ>re0wnIQ?Itk*63s|RhdD_oG>JC))r1%Z@_3w_W?nA)hw%iJY>y(_%GOig>@WA4G4bM2$*ohoS-861*aWT=T}mm{{LtEl&O9IpG| z=KNWXF&qG=Q_FvBFz;^rA^{S&tcqu4_3-%5tanhPR64yCpO;zNxMSNs9fc&5lL*7? z{?~6^fSx9MEY|L|u2FFU+Z^NyDg`2y(=Fp^c7zg_?J~^f^SRwV}G^Zei$6*|JAoA+vXCiq99uN6Xxnfz=FQGj04|m>Dav1n8hp!YzRq%3G zMV0hmmutGd0x+Z=HXMV*T3U+`{V7h?d~l-KlI(m>FXi)a1||1PT~8q=p{$$P>u*yP z3Tim$6)M<0r=9s)dYAaGd6vlxNwQ4fJ1v_EXcoLaGV-e|+XlR1 z39G-#k%M~FG@_K)P_GFJV@JVB@wqm6Uh=TDbF+am zaRGJB!`wa^9fR&->mipnkYm%jN4DaWTgeKQvf^rYcFzc zdmJe8{y%skJ6*J#r~^Txo~_*zEd2tB;&P%YHeh{vk%k( zw&r()V!D4oH~7n^A|L&d54Co}Y*a9?WM;`HC0J&0#*KS7d`P{ttHa3_rvI9_iZ;-0 z&A^RIm?R>p{APA)>1<$lKA$u8CQahqEP;l{4;@ey=|($1=Ja zB#GA&5Hzh@jh9-b@uyYgwsmT>Rvh^qmbV*zd;3Tha_cq3;wAPAOhk>L8#K6Z-chQk zV|AeZ4jy_WYk;pr@Gxw`uDFJ7QhMnC2qi665Co=pSHzJbl7T~F(S$nekC@DIEsp4s z+$Mh41jsB0^n4Y4Vr%4O`C-0(!)Jc(x1bPX4h48MeEyC5zB%k)rujO-dY$4O)pnss zHtGPlm?qU}W+@cq7U8$i0j~cJc^IpB=>xm| z@2>jN2jet-W!bxHX50EwSxiY#uxogve>Yw;tnfrrJB8OwK0*N_-66R}NDN z?tmR%b~u|VU+UMBAEkcQm){QDS}}J4eDuQses>SI%huoj>NIZG-^4_|zwm@o2vx5P z`Gd|OHp?|%@NJ*~N4AI#404QsBWy&6kpXty-gyksqpgj?rsvq!pI4F@zlL^Q>6L(m zjhukzxfLA|F?r+HDIt}j!fVVv_CFRqKC+uZFWHe%PwpR)=pqkjT^Jf1?C0cl!_ruBJ=wG6Z+s|7EuqB)Eye+dF6x z-8qP9dD=(9zRczMdhOR;|LldG^%?vYEdDI)?r9?Mum8yVAbHxkT>6}4ywhF_(0tlS z{q!*V*8hKopH)vg;}c)+7O#KTzrR7AcBqgv-v8O_a)e-Doi{G0x%b@GIRN+Kz}@hn1G zW$Bt!L4_ino`8DXtWJHo<$sH#=*h0JWobuMd-2`S_!@g8@8JrDuS#Gd(R6FSN42q7jCDD zhqY`0du?P66gwRaGN`Tpe?1dD{e1mayEMxD#FGrpIR9?!{@k4}vfKDR>0e%6RR4(h zcL4H^;7gr)wQ9QtdZQuh|05<`v8Dan7?x2eI9NcRdvVr7W2IH1d9w_Wf;MJ9GX50o zlaq2PS3q*?;ukj_9St|c=vWt5w)vo+dvlrV$Qux1vO~I8V(&{kB{t*KJe!ief(ej8 z3C2ccbyORdb}7DOu?i##1h54GhbxyvvCM~P6%ZD~2ZawueFbKqm}5sFCV3ivPFk^e zvJ!|v@G87Jv0*BuFuS4vm68L-8R{7w4)$Ybq8k}Sl+W($5x9VvM+8TQ7 zFY_LR36BQ;Mz6v=8F6dgLIUGtVWe5iUG>DU94F24?oo6c#$k2RQl`37k zNzZV2=NLwFfCDagRGm!&A=>1uwERC3IGa?=-9sn zk>p6(9+`S#DIM`tz`sDuAf86Rj3^FddD`BkWSN<$=kaA?Ka=2_O>iacVJ%(ce~QS; zA-jFcTK;&WQN2p;;yoPAd$lXFAz1TR!)X_@qU}*}`-Xw4&JdczKq@P|#YU8~;1-mX z7bb{~FomWutwEfq_xDem83E(6%bZA!EygL6`(c+RTBP)*dHbfxf-hNwi928n?kfJK z4En>FtAIwuc`Avt6IBTm5iF1-gIYSdQkrLyn^+)vUBgaw#5Gp;0IIRksoo?uqc0jx z!;ea?xj{61UJD@FdHhWy;f0g`78dxs7z|Q&QrdeaX%lWr$P|SwVbCa(9Nz0at!%B& zJ481a&kSfg0r_BGFyoxIg$qrziUp)r=t!m}+(FGQcX2U$XgN3&;`>FD(M~ybzMT0~ zU#UjAIvPw7($y8n+3#tCUIi_fhDYd<8b=o?mS!AqWEA&t1nXVvH;q)zZR9nRgpzxz zbOR}(i=bmQ98;00ceO>;P0p}yNq0z`4N)Il{81M8fJNGOXbz7oHFRJp_i#@N(J}&v zjv$s3c0|m0`x!WerEG;?!oQOxw5$nJZ{Rc&du z`3d8&1{6hxWPIH?7DlInp#^oe12oQ9sHSnJhwq(j%;1L&_VDs42X}bq)Y%v!x$|j$ zXHA=FT#rcXhV%hVpkN%C(}o_l)oZM9EG0rf*2Ando9!UriVo>b#F+wvr0O2dDbp;q zIOj^}Q0~Mg;Z~bqI-`^a=-@ZEJZOfvgD__s*!t0MR^v%)^BQU4ePK%E0<+x8tDh1j zkd$E=F$QZ}UPm(2-Lr+*KK8z-@JI6%oxW|ZkITJ472|J7R?IhHMoLYO)L*kP8h?&k zlzIuqgvnukB~l8*bQ($L)Zq*aN1Cvcyiyxubxc;`;L12v~`aA{WiC~j1c+oQ$; ze`=So2xJ)<6Gz;@E#Zm&euD8so<;>VAp4*G6AXLSpwJPaT)rl`37OIgYe}7ERriY~ zL-z|9@%<9#UC~($KfV|%q2r@Q-ie}P^d9U-XJYSs~5XXJa8 z^ni9+eKEGdt+>WZV$gd}2LTF7{z3-Id`6os>Io>h137Md`-Uygj}5ErguSW^Gx$%x zTRPtH0}#<|I+b4pQDbybf>UgkdcTXlaDvNE8>{(c9njR+j6w*g7NA<9EodXoJ@1hMh_;+@2f&nNckduP*uf{WYH-o57aoAU_q(DM-TI}XwxN=%DER7!z?a~k z1=h%LoWb@FZiet07}hHa6{XZ)u<^gsvzx@ zoyKgsxyQ4GAF&AD_+cj(WF1-3v2C>_FGo@9VzJ3>)j~S2nK)U+ShnW}5@5M+bib!v zmaipGkO&0}#&@~jv5{&$jb68%M^=@nGrXfaInD&uM4xaaV=t0USwOFeEb8rb4m7Uv z5)9WAmbCinwXAk&`uqH~WA)2p$=`ojs7;i#k6j}8BPST_VZWnvrpGc+vjf+Luw%8;J!N>Mgk@lnkGZZ7WdOK&`&heGNmGDqS55;-hdpSLvrGRP zl&3@k)ZP1EH|w0%+O5j=TJ{gDWvX*dfsn0TLd-7lo@tQ++e?knpXeQ=@V`__ZamDR zI--c7#ARU$NSK`(kX$z{G;0gF;3Bd0|2oLT@SFr<&Akb@fbEp`*RGqufxlkd0#-Rn zA?pY#Fb!&Dg=t_rTK&A< z$DGQaX6_zIkZ|2;&__w}jY3}(_Gd2}5^&BNU0ck-CpDb^}iQ+dK>lYb3~ z$1d6v=rH91n(pxEpKC~VDbGI_vMzkXXJSwbGl#bQo(yl2^gCE;>m3Qc_i6vIa9e*h zoFHGp)K--srQ_Rop+EnzI4Eo)#H6@_dtnWkcGUkEaIvj10Z`y*R93$@f;1f9ZC7A; zma<*3lTWZ}Jj`NyXTPXl;*W~#j3}`7JWebnwGb-?+m;W`%JF+tKgwU}wNZH8&K-N~ zB~L)YEsf50dsWabVurt*+}T1G36Gkv21ba@tVPf@_X@Qg?}d?{8CWARTfp5&N^woH zt`7hZemmK!8{JK73!0oJ>e!|J)gzgFg5?K!EZEG z%T5ePrZ=Ge>J5IQ6!d3T@J~}Z*`$eC>Yy?9aY1{*m(C*Gna3?RJ!DFo(kkwGl$S=% zqkgAzZ?jP5GY?5d*Q7QG3=`*Q=UgAE0`EdG8T0TzXTT!av7hUTDv?zkQ7%Qbf|po=(_to3_RzjNSQDi zVCXz*M$Y^0U++C3O`yo4<*qo(hmIuYgvxDKW5G)5oogUZ+^HW^q0y-4u%axh60ZDR zq=TU49d+6{aM#EHS3psirh^cgIFPV#Tn*tb*7)*cBr>Qd7&emDW*`sHJ`f4Hhb$`r zKrI!hnH!<-`}KR635N!4gD)!v#4T~$q9su1iKk!oUcYvkbC+*fUh;`b7rO_Wr`Z8g zXQ6*W;h^pYi4YGZ91s&j>sZ0km6RH(=M1K|0IPP>qsaAHV}>lKPBtSw1=fec9K>LH zNYK`T=R#$7^Yri&cLw%+<9tBlkhYu1mh?sZCr5hnPwKi)s_sLEWt0^kbUleIc;_5 zNCVvyYwrxI6H0e>U`?*Px2cDZ)!?14^V%l2ahT1958;u8`JAcZi1;gFbTqGTGk@-} z89f{JpwDwTcWkn7Q9o~RE>of6s#zPf!-2*>C+E%+1?S@rw{P{l(`Qqu;XKBylYVV9 zHZmm@yHJFE>41&RF;Zmg`XV~1@!#!lZM8aiFs{~Vc6PDBkb&*`9F|Le+_*mF<{LZE z;D(kN+7Q|^h=UGq!hX*Fi*Vg04~Cpos6@WE);qJI8hLGwe?*VM9l9TO7!jw1Q5Q$1 z4P4&E@}GlOAuX4`LrU$QJSp;a@o{haf|7(cp}!5X1nAK%1QxG+Kw|k1t5uDcJU=)axHD)>z@^en)co7^dYu z$wRS={k1S@EKWLd+yPAX3p4=XCfx2CylKPj^W}9G86|P!VY4e1dN`3qLtrM&es>LY zih;|i&1nS{3v07IbHQ|)<1N(Sq%6=&%bos3Hkli zsXcLRX^TfpJCgv8L)*2xxp6I#^+da&NB+Ja0DE-_Nt{>Oi7&rlTPo3V_R%pxY=&I~ z-^%d7>uUacl+BIPyj-(|F*T`9mVgpBc%MB00Hn3Tcg<2Ung`)rvEXc!IhB?7h_^o& zL-FK;*r{h9EGB+)AC|ljxZsVDk_hA_YNiN_6yHiZ?m)%wz=%INb>%yy^zY4e<=1n&Nf) z*k|ai@~rR1Zwi`gtkqw^IyiIEXA(~z+wOGF__uv?;TdRf0&8BvDE`r1rDC*wt9{Ct7<#h1^8-S+HKJD%n zf1Z^Yd+Q1=C7M!76Av1oCA)0KBt&4@^_$u+xA{NFA&7ljzJj03(O1Y}M z35r37Z?1|rK}^$zNkt2?Rw+yw08(IQ(ygGAqKK;aLO-Ti^uj1GCMGhGbk zmGH{rWxn!zq$ytwl3(c#$|Kg*uAP zwsG}bGFAQbJhTQ7TWT+Xr*%gmI!ht1LnO$75$=0H%3c((L!~IDX3cWHcvyEEXH|p{Y6D+9txeXXTgSW#MqIP57nF1!2@cdhH--%uw1QI2 z2A*>05!(Goig}LFLx~jj1j@I*|0O#bWBF+~TJ@tM(1M&}7fA%JU@%PPsGULat3rn{ zlbVFJG~1^^3(7z2#%EN*OFN6-=|(c+nvqcL*-W_zN>qHnYH`p|SpCPX8G8h-u41 zOX})aTQ6JK6w51q5Vj{YQsiG$GHBkgDfPTI#wqiYb%Bm>*ietDLYPz9jE$-IMf zJ?r{g)UBFMYpF8py*Y(G%B$ojO5SqI^U@XlTJ@x8v#`!{gcyK`(5-FriL}@A{y_z0 z6TC0^YlJ(mr0eLqP2Mu%1Nu9F!{|nVDUw??{IQ4{R#%fwl6Wnbk9Yr>!WB{nnUw{Z z4c1OqM^;K=x4hq$M`DslQ+DFh3URRt?{OA4uFWtRw(-|9Gz2?W*`W@e!qRjEZ~F}K z0z(x0L=PXNHcZz+*Nbz=i1T1exbKm}#1^eOl8p<`Rj>ACCB#AQps^P_N=0Or za+=lg!JOcH*1{+l+(VS?I8a@XA zB&q%}{5qVcc5jZ1gr)Dow#nDzLeRBDQ{w62?A4B{o0%C<%g~^z$R1I;GT?D^?5tE_ z)IQUF^YHF1(2tul#|xzOgN{e2-l&vkt^`UTX?Kn4kz=J>&^Q{{NaOh-2vy@T6; zT97{DaIK;8mLdCgH^$jx&&7G_cAf5AjMkcaBF59-r`orEKmiEp-fBlbIH( z>v-S#w1bCxO+x+VMb7=j%!ng8+N zhKL_aMt9a0@M<6sq+fcKY(V?LWyQ~JnlIpBJx zFZ~q)h8lk8)&o~zQBQ1VZ?rgyjf4+z1kT-DrmXXLg0;+?~_aPTxKHk8* zetK*<0I9)em3dqO4t&fDYH^=8c>&Kt7-%=NeW{Ir-wQiIv)7DEK{R(-ez~b)ZTg@; zgMzzFGjs;9qgLB26vuhAcnJwpQ(BPHech@#d?AX*zYPvaY$2_Lg^C!*ME|xFn{eR= z#z+bC)gO#&kKD1g1zB~5qlsKOm&{lU8f`}C62TrES;TaU(F>|yygl&+5!Z3yg;H^Q zaB>p#Mr>jUUw|&$a&?Ews|(7%)N@lYh{>(}ob5vOMcJ)dj-^xAcm~^SKRb|%{ZZ>x zC-FYAzAst=KNX|s#Y}Uc&Y%h>sK_okHU)*)3d#E5;5f&=+y!eYUsAwPVNL-z&#gp{ ze{D}g^TfHeUAt1FyO1K3V+wLa%e9FfeorQy{O(C4O03J;1pdO4!z{N`&9BZkPs&Z; zsoD|r&lFr^t-eoepg?@y(~+wy)QzwdGQE6y_{9i8U-RzZxf$7J%T6H=jlfk=fR)k<=Dif_3c#&E-NYT?K zgl@i=1~pz|A)44zaTt{~Ah^tN_ELKBOuk(ZXDS?+J{&*BYj`+D{gNyC z@?ta23gKep5Jcl|Y57O`dW-FTFE6Lv2fWWOKMm41Jl^a*B}?imwzRa4Er(Q7#SZFSJMx&$Q7mOjGWq{t>e=0x!UliGQG()o38`x*^DYdnxQE2{ zW(QTbQ`F5L_{qoh$Mr8HJTRngsc6q3XE$MCa2W-`0Gwz&#oy9J>!!3>aqzMw6vLmf z*KY@A=GhVn@6_?_VjgTBbRRCmwmF0!*MB42yrcggc!W>Q0TFi>?w#_qyY_R}{a?w( z$nt|<<0>Okc)qGTUqE1^bnkcB4phh3I#>}4N9e4*QoF)r5eKTChM+Fyy>`~Z@0x&m zTR(gR?e`-ri7&nSpUXt8>BS$#@<6c_#k4Y_g`3}*;5%SAg}cgG3z8%$g0K=KmpN{_ z{Od?Z=z_(PK66+1y96cI!3+oi33Y>L<;hKC$55aHxmSk*vTz--JlvM5s$AJe*W#;vz&u zyanKo-0&{F7lA_vKtP0 z@m!Fc@>?Ocn+>z9g~=9kjOT8#`_?Nyp?|$>bO(L(c!hKkWL#qp_J)RgEo(tg`$ zey)wZRxocaiKjhquwcGqRqhV}i|mWetWrj{j7DHaLWzOQD+Zz|kbekSI=+N_`aAs_ zy%BTAL^cxjOU;ypve0;t*+Aw67DArj76LY4@MZ!7j>tD*GA*z~_`Kdza?pV{H^Mkk zdL!kJxugu45h{k$<^?vZ{9MdET@vJ^Y0fS}iGwFj;G~bmjIsi$?^jzKts}#b+WH@( z`Qu9yWf1IKLAxweg#PAz4u-@;bWI7OMZ^*-CY*I$z>Hb|K}C4~b&I zdT-^06QZJ0R+I%kcbznC1h^0ouXXt^HL(6{B-RKLjT@1R;}NBCx+u$im;ZRT_qG%6 z6Z)bPVx`=Hze&EO6c@Z1q?yyg#e$aS!z1Az%xqc;y^wZ{m{O7T%S*qkUg{^Qx@pl7 zfkx8!L#P@VVSRMgxxFYCkl=ifpDoD(c-pm-kjHKPfx|P)8 zEnk$7H%})7pA&?jQp^j^Cb$PSkN0tVa(8XR9RzRIJ`h7mcR}gD@;3H0q=1+$Z3K|I zv(#JO;expk@wv)x&;fk@nAslG{F2_Wyc9#Ze1r2m`K}dK_*v^Qln`G{X?a#q>4%cg zpH4V$ON5B4ASD(Z8;VLMyRpvT1_rw8T^DU+!Q>d*S@(aSqQeLCBl5R-KYk7YB4Z3O z6mdPj4{#Vjpi(e1w+@^52BuZK+7O&1x9b z@)k>5p>RQJ_XaKilntX%Q^2`U26roDf$Ey4bgg-Z_b1J1yOi~LLH^)P%LsAn;oHRh zik&qyAu$&p!yEb)Aq|(>kZ|qU<~LicvwSxE zq|i3q?2Dwh{z#s%!_ucxz9n!!38ESzdpl$QYV`|*ruaiwYB2q5ox-5wYt~@u$?v;& z(ro_h`hxv4#P_g6JPiK&Y-Aw~ME0PLQ>N*;ZsRjye_S^2hEt942WJJ5eq1%9{E~N| zVn3%v`w^L4NS8GGoB)AH{VA^)vYGM&QRCY3*-6s*fgTIX43A{NDa}=wTDxb)yj_AG{d|r zhh-JlSA35-Vj^}sqTijWKl23L@v9JlU-$x=1Ki9(uR}HBdsW>D_GTn?FscQ*=J>0e z(8H^%I#&MWLnCJ|?^oGBYYtfqf5{5wt3(1U)q9#AUA&z_8>O#sWwl`JIjo>%>$cU( z{Ng*=7ediZz~H(sG948CrQ&T6&yC%RVhTH(z}Gjp=yAz)v^Pf1k>wcpjhgr&e@r_2 zZpo8z3In6!%|aI_N}se(F_}_Og>fyw!rz*t%aL6n!1Jd?_;Cf;cxFo0P);>VGGCS| ze#R}5bmKSYHB)bG+j|5z$+os^kYHcNDD%1^{Eh6ZB4c+Rfw_f*M2OgP&s0-9FCGK& z$xnTe$y$cm@o@>*SbSSdT*&iWSL+6n};`N}_pecp1qY~(jn7+{!?1wFNU^re=; z5QTt9FB%bHrsP@(b2nh2Cm^!+CJmHMEx=6(Fi@+}Q}>9%f~R^E*YJphxS)QCO8}<2 zUOQaCpV-G?vvRWP22|ws?CpQ0ybhzIzZ)`F9>ZNA2+liq93cA;Jqfx&;BUfX>>#Y>iFaEd3wpZf%rIS+0XzYa6t$N*R8z}5#t08wC?3uD?}fTb96+~P=)hZs$>$!M+Sy@-48k;1 z2GX2h10G=xQ7#d;^c(TN4mq-r5mXIJh{|#zxEA&PMvm__{En%apW<$vqRqu3Ru&3k zA=GgZsmbFY{I;-Tz}L^I?0j{Rxj$*E_G6&8yPjJJA1x)QuQA@3L6ID`my;*Wuzo{U zv{w$Vc(h2%o}1`&OX1^Cg#SF6)_zB%XXucSj)JbPrcwH=T8s|uc`o!l)S!5x7jYMK ze;B_LyJ`1AE%5?mchgT3qBM;14ij=6i2VdFfC6M20VxlEU%j_1g%g%pNwVK%x9+_h zOyN2BHR*}G5!kcI6ls7+Iggn*E$j^63rmYPyNJ!)-iJ13O;&LA|6S^vvs}lotjPEfi%2O zy4`2YlUww59>#~HEL^TNhSndagL$=hqgK1npL`A6NYI7xF{DuQiT3@q%c22RMuCJY zhdCeCtUk?wjT>Oy6DXW!6M6SLL_cC2a%&o~gV6sJ_8r{ARQTSsvkIBV4#@2sYBS<% zw@iuLksVe8+p$`)k{SU=xi%fw(R2)RZ*6CjYYCH(B+t((W$kU;HTW4sT+!GPH+Mc@ zsbp1L3OQeF|F*3x(X+B_Z9{(KmAv-ndML^v#-3&kycARp7`R_Y#Yn;%#TcflUHo*q zl<6MU(Fp~qLa$Bfi5-LpQ&2Ebb`PbMoYJ(J*YcWs_Ox-y4f)r8f#apj+pW;&e!5IQ zg}Em;lncFqJDyp>q;!~&=<-$9pj~(7@Q!SgV))8^XHVFaUDM!)K^Syy&&q>XzWBy! zu!}9o{@>73eT}ES?b-;w%gE}{_ZH^;ig$kQF?M<6BLYR#8P$n+OHJA%$v-OorZh*A zI{9Z1;Jq*<3TM<7W^$h$Z|+)GHT^J>y9VBi8sT3e-)vP%3YdAft0Drl zK)MOeg7CY&Rh2tLUw%}E;}$b%qzbRUYxAXPGi5Fjo*$ov@jb$C75vw_N`X#!^yWQ4 zqGNBIb+8b)T2D)++EP2hb8PypZ7z8K#t>JU*DW>yU z5D3r}X=z@U=2L`B!}R=8B>K}^2WAX~9Md|7dIXkP&MNGZ~yJ4qnwtBwPPypT^5)i=!UgMT*AYP@W3oV#Cp5R0^Byt0vrHT^n%X4k%r18FBK4Fv0GOJW1KJd?-i{`N3FUhQeb1 zk2qm>3$2XC%>KhY)ifAHdW>HNn@y*+5iYdr(gt4wz<$T05nB+>LFQZWTK467W z>SB2%3DIHZOPGEGtfU2NFd&+KWNvz9AaqGe_*W`SE;70w#)F67S_VPbxn4SNE%zMr zcgXr+@==I4w;M+eoI+Cya*};&IE5LaENgXo6{G%4-R3{EZxPF z)%D!xah0H744UP9gx1?NZQlalYX+T7wv!_HnZ@r$vuaerN5~vf5&I z>Hu3lphutMRTE$hNT2RD*vz)FOr8Eb7Q};M!T+s;f0ty5OMceVhW;3kW*&ikTFKX9 zHo~8OHh~%1{40K`uDvYhMD6kX7}}(x#4g3vSL&qNIm=*Rqz^{n&lGWlpQ8&*KZt0Vu#7FkE(fXjNJF(LO_Cpi?fecgTwR466gLy!#F#D$2e8Os zHbZBknF`<0@zj=+Fwa9A;XlKUO+W}AWX*bD=J3V;tYh`_#PI9_hW zkq(?dFc>6&XYE2q_X}ZyYTu@Q7Yq)u>PH~sW!%FEV%>Pjz~Mn5~aN~dxWacxyYH___~2Ks2Q1BZvF_x<-ji43p%Tm?JNs9Z*4`40TFT7H)(q$8$o zz|p3Kj}GLB`+HjvKw`(oqR1?GB^AN*8Ht6!ElZf(2|%(@EGZW#1*nsWY2dSBl)ft5 zeyA{F3gw{&8V123fcVJLe1IGVkSRD!AV6^T^nQcDe1fe127$yJ#Ef~}lIqeFmOSq( z{S2>cYoPs*=aJa``)Ki9TYY{S{$AyF8w3MpSrce0eVYW8aEorV`tA1U6TMPWr~(av z2V00NZ1dYRebMz!tVaSyH}I5jo34`hUV6I!3fa$O3f#OT?T*lQT5wclFK;&dJ4Nq) z>%HObEUKk%`2s9K;qbWY&mwXMgA(pR z1A7_%BCd&fkOiJn_G7{$q*#q1K&$?q8bc~p%3C1}wD^>Slecs+TSCLH^|T0Zb&3^j zVL$4(3GMK%KJ!k$3?z=uL*D!}cZSH1TEa3k6qGj&m)yq$bViKGrYiBj(~tpky9b+j z)}Y9w>7W_1|C1m(j#kDy8Vi}|^d><9CnswW4-6!8Em5(}6ztimSPg(+9MupimrI2_4UP!S$NMnhk&*%Q zn+OXqPGr{?v_Hm|(>+;3V`2q@;a22qRlS^^kVJmFvwFv8KJW)`7#DcrJ_`42Mi z!^?#{01y_!nt~ptwi%&6q5ji=elz!5r5K43CiJWYiZ;NQ_X9xpO|?!|DOMD`f_rYW zCp?H(iK|5Rdhf=UI|H>T`2{#aHg`cu4P7(ljH!vAD}9Ui;mI?I#MN5otEbv#qbX=0De z5bL}D6e|+5Jh}RbUk_$zeqg6@wQUJjzwO9rJY|h|DtA+EvJ9?Q*KcZ;C}Z?Ris(_) zvmehXI!vicX{U!PAQz($JH?V`qtIx-J-$dg0(>=D*V8&YXAjW%O!3rVDa=H`@NrEG z34HD`wi&M`^ZCbius-qiy6Q{($eDjjz&%bdf(j#9f?a*)s#1)`txaaf zeU7t3X+qe+@+@dYN#)yrKa3vdV+Y`d#~2bNN)w<835y*hi1ey+X>0;caX)4=E zTP?{-%x?bu2q2*cZP2)0J+b@I{Q2l5Xn;ZpQs;Pi-)z04r< z9P(J1iO50W12W0V9@R;9?wCq7}|> zKl%HBkK>PA1Dl$vAb-Eki1LrjQj>oWe6L(vjBQO(VJacZU@>Ztrv zQ)Q0JTq6FgZ^>523*FRx?ob_Ze{=L7yV6Mbrd6*vNECJS^taSMAS%5(^AH!XO$byb z*oXTl<5quQlbB*fRO2=d8o9(+#G;YhY2oi};$R3sDhRtS?stb_Nj;ZQ^-==0F$4P1 z*d+y;=M!SflX0GmxA8KU3G0~&2%Wy-!CWEBkt1Z;{mN|0=eu>tCKl~5Bl zQkMP-Tl=fCwX`EL{PA@d9nE6)$2RSJ;D$0fkfo+~_1by{pUZZzczk=<$Dn#Qg@&8@ z8W)K{mQw^?@C}qmr@H%x+UovLG9U}?kQ&i8>eQc}#r4;%Znk+is$;IUuRr;@;XK@# ztk@KRQg)mG8W<;*rQr}p6^e;8BPWCJ+v;3NvP^Qd*t|EnvAa!zS*(mfLDO;60DWk4 zL49yZUvOg^8R$bAMQ2oZhN>->VLPnat#YXNydArB;FY~NKNa_&e(_SU(jJ8TNflQQ$1x+0C; z@^Xg;Q!@*G6q-&37LDsr<4C?z3lrD_w^q}p1Aj#r1c_ynMP7sr%mPw4z;)@>$GVTO<-Iw==>9x%WYtYmzgnxl1JTdYf| zE_^f(RlWyC$Zg+Jdck1UIN|1~=)(sA#@TC0N6Z*@e;zocBDt@0x$JO)R?|o{@f?ZPRrhR%rpN;1(xBhPeCKf=8Lq1!~27`zYdMM$%a(&@ z^n3*x4q^bDnC#-#PY#=F;xPpdZl*Ci2jYi8*l!?T`W|k;)}q zM%##Le`7$cSbKn^0RpXuKEs%zqzDcfAYfLLU@g3HG!PBvasQ1TEjVrG;ft55;aN;A z-I>aBJI&r1z?$-z{KIp#8N@uVyf+5CTDn8+dB%r^7?HV0U(oVqTMn z#2#D+_bIK9+&`*h0AAla(v_R*E{*O-y-W-G4=A!GIX|#J#&5l6i$ld}0lMG?98=z> zuArc8eET`bA9}F5)DKC_T)$Ep77R;z?t*AOeB9rg%%wLV8=9);&F%B>j7qhgXsH@o+Tz)u?a}G8-XT8B-G)8v6=OzDK5@8y= zOp)Dldt966t?<%p5q%|UMfI+=0F-lC z^49$b9w9$|Vj~Zeti+0| z;wgC79&!<9JYxj$Dkp@~D(=n~8xobG z6@i$LBM6Vwuu;)Zv z=FNt3dA@9MU7=M6%dW}g9aPlerQn@1M7pp)PO0Wx&jO~wH^qqW3d}Y($-}i?TmHTZ z*ZW)Zt)dwV9Rn%N+`eazq)-L*Hl%6Z{J4khkVwco~ zjTdG6=TB%|C}rJ~`R|04Wzbq;&mkZ>!#KTT%=#P@t)wfkPOlXe5J9NkZ1FNX=ab+i zmJOTmA#cU>>V5Q`33sT1u0P@2Eu|IcNhGa?IZ-Gf^*7O3pxLw;!swaFrQ5UaW7AXc z-LbLgti;I?l-H(PLuOCD(e@I;Wgf$o)T=XXbJ>p{P2P$z>I#*1=&eVXklzj8A5Fb1 zWbcTZP^Lh7@or#_$W$hfEm#K5KPF(qM zu_fN#oOkD$kxH+XM4-~7?SJ4}rzbh6hixrqh;>uGv2ppQ+gx#^9KzzIc7QCud3(?o zYlIIrqK#vq12fC=hd4RR@Tku?r;h6Hm>w&RV@0eL7-_qjk8F+jPt={}Pw@xR|@0XJUx^sbrfDQ_6EaI*KNDdg8S}cP&Cw=O!p7g1Ev|+3=!PK>jQKH`r_Y z!`SMH{i>Fj`hwfOtA#Tx$C4JKK0fRe`$<2B_uiOm7S`|l>Q*x;eCQg-W<$WeJF;GMg7I|Yn8o&C z`MKVsG;=}S$0T=ZFfcpf0EypnBs9@eF>#fWHID-f^k!+Xy#wyX36PfsA(cV!s|dKn zjHO(3EcdDlq)f~5_xzOVRT)^e6H;>#uOSL+(p%t4&(RN+{*(=FoxH1I=$){5qjMnf ze8CZ=Z1~jgC&@hq*!j#S2QT1-RQt&PC4v8pF?3hCmPRZixCIP{D!0XRn(Kvhw}}(T z^=ntd(a%GL~X^h7JOaI5TxnXa{50 zP#ZG%DSDrzFrzs0Iz=9I1`T5DoJz-pFen=s`|lEMDfKy88|nh5+aMc2rfZO;|EUhs zfj)q7Ikf}En|IE~dXk&LGei(wC`AEl2eMLXk3{{waIkq|v%aTHGPSG3{bwXs+K=Y? zd6IH9<5OzoUdGy>;Ydlq45b<3Q5Hkjr4o_9Mf?46c3C;yRjD;xA7QNQTFObevbXCD zBD`Z`l=8ia%!zV_<{F#gC{C_zF}6@yoX4ZKU{;l&*05QSYNR)Mz zeC^Zmy!&m;rAo4{pFF8mDq12S5H!`9#}6*`+!mQy1r;q7CUS8cKB1^Y4~YjH>lK`S z@bUmwVvM(%LO-mLEn9_Z3q4{D7if;iOat8Dcp!s4{TF)fd||jRcMUQb;qL1&ys}yI z$*{7^2*HZWItySqXurw!4Uh>}+J_KUYI(ft#MGAh1Qlo$@>3Q}!}!&j0nclp$%$XWtkOvSdF6e_W~rEzOV~U%@ESp@3<*StMVm zu-mOR(wxvpCos3g>I}SZa@@DcQNbT|Vk%K5cNbE##fAYXrk~Y9W=Jh4j7t^pk0;?i z+)^xTv`pGtNPt(VvV}WmlY>G>^%I9c)pgK#A%1S9>jt#~DXtIH#_AtbB<9r)tGw)f)BGFGkKl zHdj!^5Z?QXc@LM&|%u;{&d zu^c;)Wg4z(!A>dq@)QbKh5|z_0l-AE7@mH8^^-z=xc#l!Jr|uG3my|1ab;DhoNzn( z=$=TyE3b`y9iiW^Z+Ri zUR|HbqFA?36eq#e5j8Sj$@#Pic%u=WtKX3206*Ic~OwsQrb79u7 z`<<&#OVQ9`~mR{y&3%y?MT}N#6C%x4Xz5e*Yj%@3^(n0==whS#CqY(pbW2!Sdor z?UdWGkdCjH?mQpn5FbImu`k{|e^P9gG zQ@vM$u>JQC$x>8m2T=C=DhT4GNP&%XA5#E*dE7~nKhyFP9}^a3xK>wwVnv~B?4(3% zM3APX=o`KMa=PN=(2VTTurER2y7s&$DCC&fyoSZW8U1MIZ~>FrMOSu?Dxhikbsi07 zcC8N_pk6TtypukLlYyJaaZjBc?stD0USC>XH9&5T;*E9z`a3Q)WSeUID=vf5nY&Gv zTxV}=pEqq{@t0u8y1Gupg>%GTg_qTU!d+vYo?7ie(Nh`(=Et7{qFhbm zJPb;W`_B5ir_5)YjIxcW`5krJ8OBG^>Cu8u=Ow~%P!LbKXB4VBgGL&rN>brCXo#=? zoKz7V4XSY-lCG5=?(I6%|LuNHp$f6GVLa~GyVS9NtknKDuGd)Iwd~*cvtTEEz5_+F zgYtan{So_0VrwTVUGBmn-z-Z*#&+KMkzQ0~IxwfGmtf)S_C{Rr{+=OoZB zYa3&gf46kba zHUAf2F)|h}Gtul_EH~}T)H{Xyr)v&ilJ95B<5h2h=Vxo%aCexJ3P1rOh{wcOK&Au_JyT*p1_FMQUZwx2t&(Y2Z>q&H|JJk>K*d+W8=zX)F872XMgDAm!W1SQB`i68>m|1pQ)dEN}{3T4j2 z&HA*MfthE{BlLUj*feQW@vLwBM{pcT5xv?K5I+l~Kb2ok)Dv9a_>YPwR1(K(okkE%6Br)LtSIDDr1+&TA4I04LZ}@H_oLKI)-_0eA=4Q?g+o3f;O9d`3xWZ-GJUv$k^Qy^% zc@t_|{yj#OJ?{~quQA5#RWp+)MsEoV_GT1YdW`CR%7hEuKI5YNe#_PxIO)j*eR4f% z8su)`W+xP}yr!2I2CrF@CnFSRsYhszk7d1ArieD!^y)wP?W@oo4fT4$X#F8>%3!`2 zNL)OK{m&e)<%9~HaD{v3Ja!yRi|r0T;%&5z^m>vE2uqgEm3+G?|9lmco$UI74MYy6 zP@v?K+S-iY{8b4~$IQ%cfnKD#dJ@Sx(jzGZS-9ftNfqj>MHquU6KjqC_vE-KKHl^3 zR#>l1_x#kWJ{{ODsm<$2>w#(%04$ovi<}s_KNuH)bzwFwV5EiLJh#vZJOK7i08=00 zb>V!j@JG5k?`NlwjOyz~((C*D+c&W%;%CR`=%?lW zNAvBc>hnkC+n4I6C;4Y*{KxkH@5idVK3Z=-TTiBAzoymim%F;UIDftnb2DFmr2lWf z`&GpE^wcx1lsH;l6vjnRo|fpS`%c} z!ku){ZX|&r>ECot9|E;fUkUz+grU{|i|WCo1;E(rQ_hH=AWyx^m?MXF&n8-JL8WHW zgtsx-T#u$1)2T_k3Ak!nxQNETEzGX8jM2O*-h#5+X6!xJ@ABHDMTW6S2C_#dty<@jI1@Zep=`!jiW2ep!`!$OG z4#TtjkP@l;@5KO@n%s=csZx1;O11?6DLKkSevHB@_+dZp1B#lGX4+Qdy%se1tt~6@ z)71w>|E_Rs7d?hR`{AYFd{ZGRe%l;qAyTy>ly)*qH4D>fw>b;yW$g{$P4sTsYTO|M z`t>b;g}f)uDVd`LErFjbqiR7v+1*}VpRH#{u)E%&n1=G|SiM}cJISutMubZqo*Ut7gc z@0jMXQT?1af~F$$ct#9z~FzQjhyf z;mkaxzy6*OC*POxx6uBN0sff|s2>HV1+KyBX2YAL8*$F9^Tm!6uPs{$gGLkSfaSZd ziOkl)L-2@^4m*8kU;~4DfiY1gCss0 zU?`#;IskN^@ZStA>3Q{OKzoUa#V1;2l#eS&$bw=$4+Zc_7kV<;JZ}YKDlQ}RXve$b zjGqeh0As&%G@#;4$Z6pJVWn1{o>fYdzZ`8rs~MLztMVk!_A~+QyMk;XsEWHGN7ZA&dHDe zQJW?&$GsIjTn(y1yglZZ zYU;NP5JE)bApc0iWW_vj8PSgs-Yxg`N=CDqM+VQWAMWzr?k+xqW%i)kMM>U?mmDv` zcQ6bGR6L?X&8fYfZ)rDc`|ssm7@3krKI^zOuM|Tsl1p;-HvN*=9)^+hhpu$p9@Jpr zPz6HbBhODOQJW!yM)qO1Vd@W0OuyrE{E?BWKFGFzbjWLyfXmO-Tw74G(E2*2F_z%~ z;{=6WvCCeyBPL(w=VyJfM93*^owOzNcq^oN(v{L23aqC@pd7>>)+z&R3FF7Bb;jU{ zqPEw|{{e!MZ7wv5OiTDmbErjE%H|c*D2Az&?U8j{%~;u{E*QM{ijZ3)CNEI|u-Rb? z=6c^zHiw=h$SPi{Q>n5Psvy-!0NXSP^_7<>i`S|QN+|ga1XfWt72%c;3zU~67(H8v zQI2Q0(*+lWjI?hxyf4H=exjIX3A^^9_SkV)uI)FPAZRh}E;0aTpe`DFykNB~^4Fd9 zbUu{3mtb!Ac3^C~la_lE3MR@ zdupSOW;N_Y30E}3f0+x8o?d5^V}y|k(&O20Or=)p8o@AiFJqAbp-Pnpx?V#{q(W1=&)D}{*eg$NUS^#Gv%1g7^vdzZvvTt~Wg4ohfHLWbtAS+5CUh_A48iE!Di zWV~Qv7lp?>7z>Z&e^ye9#@NHEpL+S*DIWmiE%Gg56dZ!za#!#&t#a3m!Z+NqKIxQX1ipU7?axpoL&g-#Pkjl8wJbhYSP77G%%~^cpqixq0&}2 zF|%wG;%5XErb5{8yO>re+em}gVg&&ha@O_p>uCVg@cywg(Z(suO>eMWKv`L<0pxQhxVe7*f3tTM@V=y-?4J#W!@pvg$IvL@Vwf zeKm7gg{Dvut}q03+z}4>1R@kFS0bx{o3oW$+;H7=Qo4|oFeLgX)$K917!1*zUQ$;sfF@m3CPl;Raco} zxJ{lF#Ie(Rnd#u!1T{dyZoHy94GP1;4bml5qBYritVj@E@5T5Zn`LnUv#Yx$EUDin zq7ybS@<4A{qe}ofT0}tn5v_WxOs)((P(@w-Mep{R$LHluy>0^{wL&5(_z{)8M^H>( zk(64iu~gEFHB*>l!+!AVBt`-2k!|L<1krB~h9NUorhwoKvUu<&n~pJv zX6i1`V7lx>k_|7%E)h zESx+8VMSKnxSQ0_%u^%$yP)JIK?Hgyu+B^`-9?T=^NOK&WuN{nbST1ZN?|kp!K~;C zA~Ti=f##fO`T2V|Z>6L@km`utDpC1SYA8P-&6`P&~>qYrkbHbPze22Di!dU5g;y?z%Q>4v4Fs%Am z73C%*$}~&q8UERGTnlmfe&(L&B0}l49e$#Q>O=DljCXLAJS3AoL^4ti z5GbtDxKCZYYO=AYcc3+i`4CEj+l=36;Z@5471h6zd2YG2UrtjmIX_z6DUKZ1HUB#~FTk_b<2rAnu$nv}WK0@aH6CF_s- z@>J@O$(tSLM2%4yA(S^lmVQDpeLc;hQ&_LiW>y#FMVt7q$`S~%N>>{W%2qwUq+bS) zF4?X~O4t9jtasu?Wh_84#As3%Y+V@g1Z#z6?e30ZtTHw|t0@@zKITnQD~;s{U3gtj zvJD-60Nxf!2h7LuYc`?L?~(_$ip{rU8|`W$4Bb%l2vy~Opq7URI8OvK-L6LNV~ZlX-5!ol zkdBcsVuDOp_t%rGGvs%p3TQ=tT%{5~&4IWE6=b=HS&D}aC2ME+Tp+b=`C*yxO$M43 zuF1RY*Ih;y$d=x7yDhI%V37a=eYAY?&BGq)?->AgwvtM9@_BgoXxx(9>Q zfJXh%DCzRP89|fHouvY7zZ7Z z0_c7*cgy=YIvu-&Tq5t5NpzcB15%i5bFSMfc<8!s8y|Tji=d`+bIqAZcG=hjm0Dcq1M(O-ZcQU;Y zzh6O}zKC!H4%|#h28U&r9G$HELn31&Ccj=dy4S^szsnfl0P zvo@6a(IMg9eCiUaWzsHkWQ4pZeyAQ%tgR+`fjCEwl?xH)Dvy#LDb;)hgL3$3p{A=U z#ua`TA0;^bvFQ+eEhb0JyyE~T^o)HnF2A8(d~y%WBu2(y4G$rfJ+lzgf7m~20NVe` zDNTUf(M5+gL7$Ol=pTQhfU}(3Y=;y9xcKFlWduV%l8Ug$x0~PbXZ_H;zHpy%pTXTcI%W-#a#ZC&G!O ze-~9&OXH<+|K`|%jQtg01jFYUnWxEOIE570Y#Z?CzpmeaY?h1g>O~?8Qhd9t6yhXBxm^O zIV~FUxH3?S%rcQ+5_WQ9i4`5kq{XovOAo=rD;M}5oTv1G=ehdbm z_IuhZ@s@n3f?K3e5N7EhT19F;*aNKX{dYlS<&Gi$LMISVM&$`$x@Yc`>zx2Mi*613 z893I5*_Gm7)%K)pI@eZ%ag}r3%%WoYqxp-YGC*?y(w$2wii20h&L>WITee=cV^$Kc zzRqXcMA&#zV?Ufvb6S{uExfDx#x(jsrey$uEqN$Sfqum9$91ONNU7^lxMEXG4_&`+ z$4M=!+0AV~TRK5+0d2EOM1tn9Mc^9CKWhf65;{$sw`<9q5z=1k4fM3O>uXV^cIl3m zrJEbsOkyWv%(v!SZj)?$Ku;4!t|C}!7GSH88#{g+s+1mS=A{^W&r{b~&oGWrkJ!$a z0h$^fHHvYRI?P!*M0g}tG+JKBQ&B4#XDAMZ2-nnSE|)EVE@c_;kVid{O>qTrfd|c8(JL1jG#;ktm0Mdgo&hk?Y!XsleZ5CjA$>@nJZF2Qf z6FE7{ZScKHDCd-&+zEp5OZ~dRRp%Ee(h}{-QDxutM~@6jX$HJPVnri*oy{0;@vVBP zYnf!+-7Z1v{E&-?YDm_I)5#S`0->jWxzHzEeE8?)!_j5{>%C?ZBi`FPD~g^i(BL?k zjVyVMtWQXqEO0k@J_zau=JcH0--6 z^kAtT1+13zg>Z|euqIO}iHY#ql#D! zUWY%vT-Q{uvw?5odlbO7KP>WVG+w5-M7Da?AAUuRnzheMYRrBV2>+w~3c(#CR9!?5Z*LxceuaM? z#{tq`jmoiSOcsx(0d9=x#Hn`G7^DnMvI~I0Zg|?B!Roi_@YNbrGv(CS7gH=}1)|Wb zv}e_#ALHG7fKetU50ln{FMIn9}}o*tJTh77+RSSJ&sF;8%3!v>U7%R7e$?XU(b*=F-%~0#gU_Ac^hl<94yUC$XkheWqocVJw8xbt=S!r{ z)FkUa3LxYU3ivj>>SSkHD5R7LA(Y2bEUBe=AYNm|3JpB!DVYbLaQ4B!DB9f4$A)Dj z1Pj@CFZQ0HT}=~~hbZfZ)zdi7ul$@Fk8$IKjPzNd4jrh@_^#6t6-__V6gz!MK75+z zs?&FZ5AVH`kKaGZ3PWRIVZph$aKHK*8VhE&$dj)EeyZ(mb^7T^*f1jfGw8OaT%(tqZz0}=p!ayox= z5*&i~@Ywc{9-$K4Wq!j1Bh%}J#UNzVYk46bL9Qh zI`9&7&jYvs?ey`@j@W+CyMrCx0%Ukd^>q>+Dtk_l8BOeP5r5kv`*$Is+xK4J2mySr zaS?u-#11_8BFB9s(ZY__L3$L5jf&QI^MBfU0%&5mL+ZLb#l;D^xvu*Nj6!ip&+cnh zZmQP#7p(VooF8-$rO|5W&f+6uV?6TjY~?v*r;P9j4kJE1h%n^7fTvHq-=I~+HuPEY zwHY3wP=*vBIg+SEe>RGZDlNyNmEIuz#OKZ7ozd$ZW#bZX@hWke!;S5|>D|OZdrxoY zBqRcxeb|4%5ZLMs{Y>tC&~dj6 zJ6r^T&OKcVVuV7C#G%;ycSsJck%bSKZX*y;lZ|jt0jYt6nq7b4D3ayS4|u1sVCNY+ zpUgRS|EU4Y37ABi9dI?n+{$~%h9b=RR_FN&{)t8SZjB{gvz3JdPbajv^9RzN{!`%J zb6SjVKJ+;~_h~KnXLRSv{+pG**vx4RtXo7M2U5nJoV_To(N8`DA6CNg^&*Ws8~<(= zFc8pvaHamIu>K&N1hPVr9%>h<^AX8d*02Z;UI^QRdT8Vm?@_kd>W-^9hCAT24G zywtAWgi3>=9(HUxFz^O;PT zF#zpVR6C(L-|d%8P4*M`7`mo}$KZ^o)-66TEc!OzWf?Yf-<1f@CL-{3P7*Jvw_pM< z?ML@K3xm)jp0)S9eeM%7X8+hQfx!UDPK5lL3VXso2!~$Z$biglg*X^IRHGh|J~&EY zibC;o%msUgy|ROp4;DL5p-*kJC+_0LqDSo45h1m|S=YpT-oR9X3QsDraaB2lq!w{} zuaIM7Gg9J%J66@kO=yEZ^m&$>hk&wUik44MYCh+{bz#O|5%E~iyHLnzvZK4!HD52d z1ioUlb=#IbT=<7L^?i^0M?GLr7(F2zFD#Cil}z5cL8va65b1_(7+uN9ZX-}5LKBz z-_xs)*?NHi(ai30O(L;)39wf8i+8r&ghz*oJ`dzQPY?*WUPrDApG9)xps-{A?g(D? z5oP`U5fg_fB4v$uA%9R13M7v{$#LAqQA3;&->VrF*q868W zN`Q)uf%e@+*LvS&&4F_;pxd&43a&<;Tbr-Ew1(m(n66Cac@#0c7Z86vTji# zX2V%7j|EE?asZMj>uUfVHNDMjM$zUSeqg*6<7nnO*H3ylf%68gC^;+*ng(@@QP!hv zu86i5gscrn zjOyyljR*7yvLGn(_4oJ?(R1s8aEWD%2TaMS1ZOdwiiA=*0a0JYZ&#!o7OwD@uWsC#cuN#y1|in zLn`?MAcj{pS6d6&g9VFR;aR%#CZ)#Lu@h+M7B6XM-bTg-Znl5-|3rO^uOH$Nun* zOE;CQ(vm@KXHF}8`j!^gCn%tYV**glKwPBVu}qM zbzrzxmS*d<^K9M3@e7el2z6#~qgEUhork6Jxnc|99{9t>5Gde|t@c6@A<=qY0FapK zvUK*|?RC+`uFI1Dgy!<0Wwm3F=^azpgX_O1_}yU72IEQBNY+3lnQw9jk6|{=T@5JO( zIbZK4_{a1ZFkRNyEAt^FXskAYZjc}lgQ@~ko+69w!6%Q|Q6Tv?;21;vcev~Iv7WKJ zQ4%x4*EA4Bkg0gb>M14uj4oRn+oo^@L%B3dyKcHc*=()G1PQBSfY7Iqc+BBL%z;$J zH~$)hyv%}hC)@SgM5$%@GEs^_`V(=~jIY=Ed7cnX$tudRQ#%6I|LKrnQidnmj+*`>p zSej9HD7Y&-yK|`#z1mI74h*F5yhq}jF<~jm zZ~P4*fMfp@HjUyc6|SLaKcWHT<)#>$G^g}Mv%Nd#7hO_U6+PD?Xf6j{STgQrU-wu= z5c)~(JikutP?4}+JW(wyE6iqW5hV^t>dM4Go|v+mJs3MFPYqx4U_j8pKhFc8U1~(B z$jp(q;a?-p&_52a5wDjd)_}_+v-SN?yMPL3kS93i{~_!hgCqOCK<(J(#F*H&GjTGp z?POv*nXqHqwr$&(*tX5S`Ty>>x9Y9?WmnhQ-5>hYseSfd=ULAR=cI5{sAeW0_HuX} z94XtG;{L~k#yfU`lRg1Rdpf10q+W9$7*`5^(C6oYK3OFq)VgNj;ip zq>m!c7@|>h(W2Du)AdbNs$Gaqal7`^+mvqaDweY+Q%~HloWgWasFO*Mn4oxi*|ry^`oI=MBc^C0bGOBDC5U*FPdo!BxzLx%kh7huoQ) z1q6v1XZg^2VQiigo#Hm+56ey<+~UifQu2#1x+J0hNd_*8JY*d1f7F)1WLP9o75)|_ z1A{tL=8m%hW^cgp25zY;(Nr0#x*T6L_?oMFZJdBBL81?zBRK(XLS*a+Sujg>&ljO$V{8{#k zwk3CiY^_VwF*iP7m-J?pvMmpMhTlvZ_*?2Hc0=QAxA?7%6Rtj zb_UfksQhF@0#h!_S`JJKq2&U^F^<9U1?26F={mA9eC&zWhfwaEJ+!CA0SeLOVe{pF zb1J@1j~;LdqPSW zp(9Y3Huo)0E~e4I=3h}f7u^AYYAa760yL8~!mgk$&`|v<1_2S2{6~sbk*wo!P~M(K z5-(>L%!{!V!4REb_M?IbaIzobco*Y@bo@gEn{w~6!ZO!4eT`Z+spo$ci{(fE0k}V1 z73_W^%I%}x8gCwX-K4@&NyrNIb#2D7D9T;?ozwD?k(yq|9xsMliHV>~9-bjtRyw_w z6uN9}te+jJ(9_smakgyYh3x)HT8K^7Sm;%ZSrIGt`%{l+L~OTn@&|k2%~=vEqkM6a z`~}C1B@5MGL*`Q}JA< zgiEM%Jr>~AG+wWA>fR!LbNgL=(m===_PPKtCi*MV6A$Xwn^pp~B?br)Kgfmt{f-~0y3BUzsZrmw=WglCis5WLfxJ(z4d<*Cny0iq`aFz=KCF)>X^yR&Ms!*y-0egm6-E3Y8=zC&uW=2qIi30qFkLza?H0Au5stFK*A=jWW1-v}Ms*EW1=o=O7?wqZu_6IlY1zoU|UXOqG}R%w1VicvBg z(LX3wU|L5Qmd=ggC`&zGZ~Ar5O>QVhba)RqP}%vX6~t`VoreU^CNunpYu}j`Dy@qI zyg)6Wx-2;I#17Ry)3vgFlGCi#rJ6iO5fR}cimz8TYmCJ5`=NSf?0J{p(DGSml3Ngq zxjY#Ks%Q{u065HUl7~~e`5T`U@yb-18DYb;y*QsIc^%jTe zQD*KwXry@LFX@&|!F<$(0=lVrMT@H+38n!6e&Jfqnfnu3>u6y8PQNL&?&K$A)f`D2 zVv#Am=od-5?U~G4!I2t)EoD7iIIr@6K$k0?Lvba$&C4a-oLK4{;0iFAvbLK*XM}e` z9@vveV`+v|5cy3v>piIljV|8}!1#%S$>9zMH%ZToHnyaBCAiUs-sZI6OnPOu${dOK z6G$un%WRru^~gG2r~E!<-GYbcNNUaK!>}B-fUXMcoq&dv_)5I;(MP%U8XsB_AHZ!& zcu0zpU>QZ;LIaWaN{2D(K^UZb*1iHclx0^x6z@+JNuaz!N+G5#*=S{@y67KYxk5N= zHI1(^ju40`oDcuyB~M*!k23s+jw3%Zp34}AzPbiHZpK`XLvSj@a!`###=M{&7TF0i zTr1_+urdkN0jg`sl*xbRW^d}x`lR55Qw<`eA&8=D0xRP#No(Tw5%;B5CF9S@L#bCgu zk^;a7R}hC~Q(Tjy#KV?4_Sq0O>(*L^&f9V1-m+bC1@U%8xZ%?1cP80%APgz={YPgd zb8BRzYX(t|C-{*3^x@!Nh+13zFynp1^e4^{^k)ZfF&#G;n?4$AB7`n+^5+8j6qW$9T$Oc7;) z)R&3R^>y=yj*^0?vT+Fj#{S4IfGIGtqY@m2uW`}HZ|*_8p1yczmu4fG7QUwZ2Gd?m z9TI7|0*Z&nfxiUR*Mm+^+5W_WtvGkM)oP6%S0{8!hlRXTAU2NuCEoqAPPqh(8@PL7 z4t1W^4WW_udO8EPj26@w4*&y&&XW?B!&!fHVdp01Ckh=% zLe?0>?Ic^I_-6*f$l=V#N~MxVOu18^?G+268S}ECt-5!-e~iZN66JlV-?<8eP-2bQ zwsNv5Ei_AA^{%#Jai7^$ib6jnq20pSG2f6~p--1LSezc`PG*wNu<)&j7adWVp}#z^ zbkuS9ocTPd@D4H{k5`EQ>Mj?y_yvSRwii$gLIYVYs;m@y|B%5_!XJtpny)8ea$u%9 zIA=82G~JjCXVur05|t}}zk07a`&w*C&*T!7ukOHmTv53}^nrKNcgPK|OH1Dl@Z@VUeb%P*ifrk}R$GHfupTA5{rKY|SzXJE=ffm&4U0jPZ0bZ?I=SIvr8W98g%PmIW__~oK8%UdnI>oGsH-T0!JXyySpstRQx zFFHtLqEu=UK7kY()j7TRJvLqohL%%Q>eicJAW*`@I5U8OY%etVomhvmEM|aDJP6bn zy)AJ{9_9LNAl&==yI@;Rf7qLOGFu7l53|xd3<68+Wf&HKT=TrlKIV@A?{V#>tES@v z7|Y{^=6E|r5tmYeOT_3%QU8x94P=}2<4M&L*kcN1J8h=vD9%-EEdE5(`(2brMvPoy zgON6CHcvD?tqJ#2Iz96;>2Y^qcPdl;(=;Qd2+riBRTY;IP0q1S17>N3{LCHC*mVtmiD_Y#Z^|G7Q-)Aus5lH&I#;CG2%aXvrDPwOjLKu=^x|4^={T}icp+2)X&NU*=|pDdH_nxFdVySC z-nKzSSX|}G!cs2GBGrVuIZi{{8JMyBOslB$5qPRk@>6EKhcr?XYoq4{(#7hoMaJWH(ltNxY2x+kx zXQju?MWdW=T87W?%rtAguq$B>FVNC+UhaAR&`{#*LX??Ex|{<;cb{7|z`O`%K1YVU z@a2tVMn9YHpiJ7((BZPM)w_m|Fb$Rh$?fS9o=1lPbl=jY4 zmLx{uM#E^=LSK3j99u|yVeClbVc*2=@`%}J`A`W&Zs4kAh!;{Px6ILwE`dy_jig$5 zJz9bikT*utbqly9DaX3h(OFtw`0~RyIbK}*7O=R{OI*9jKV&VWIun-k z=0e(SJ7AWRPuPzeftSaIFHChfVGaExacZ%Um_r(UixjQz>9NaIyi$KK^5uzg^nq+3 zNuE}-Dan?s#St|$Y2&UhzA@`%o196AyV>eT_e-4;Ik`Cqe^cFw<3^mR5x0y5oWog^ zBc8zgt@a+rZ?wOL9o~US>@b=8*3Qn4@0@|Zx+z|x^fEU8z(8gzfvzfUixx5`{S>R! zZ(!n=nYTPLg?$TSvg4NCPu=B6@C4r~a~Y^S2+neV{uio}l|Id8tYI^py?d~3o!YIR ziny$PKZTGs@epihEJdAj}$U=)Mpz1r(lr-oe95G@OG;#fkhFR{WmFr4Peqx zx^A@Q2y+~U9K0kG6$)9{ZFnsUGSsj%b7xig)L!w>R3a-aaitzW(hm7!TI(D7QB( zAVyCN1vE1^7@7_nwhg>W@gVgro>P1cOVur+Z*18f2NQbUer&9b62ndiJjR2^{6_Uy ztTLS*Xa}r_<#KlIK~JP17FEyGTGXjFx_j9rGZs9R56Mfv^(z$%dEfe#fF_?F{LgZ& zO6NYyAh2Ztq}9zLHI2*i$3L2Iaxw%}3kBT>*Wx(3R&i@TmNg2`&dO(7w|=dDnpW}; zw6x9pKx1k#_I@5R5e5?}pn4T{?>?O-AVPHq0&jL@0<+dPb|zq@2q-IAE_4e9Yt zg^!u2SSHf`Ae+gz=++y=3MmKi{)2=s_l8VPxAQ9g}|-LX_2} zp8v3Q-F`$lw?J(M_wHg5d*yajJ0ma+xWO#ha?yF%mXLc6Z2i?bZdL46vrfLV#D{=7 zgfFcw069ZrNtu>+Fs@Gm3}q`cR`2l?p0W=7@Gi|m(kaxL2xy31)3-482av>_&};mI zgc?=E;+P1f-A#`)<2t7&b%m@;$^3S&_!_f>kLarTO|5l2;=w#LQ$*dy%a+`yZf&3s zi=6?d7_8t@o3V9Mf){p0FWbv<)t6nJ)DHuEdb!r5(33CjCXBSzxUvq_wfaaW)LJ-yQ3S6S$y)9rq6 zSUeBBuWxtO1aW-2{=kwnfASFSevPprcVfN&#JER`lkGDg_^TP`iv8Gg*9tHGx>KoJfKo0i%cm; zdkJyBDZig$E=ljC0ZZM7gcHwzl?bL-QkLhjq!hV$nFB4Dw9P<+zJ4Cu(Ph%0WQU|< z78B0hz8bD^ONmA`3?ZE&V=D(Z>u>eSub*Ai9p3)%rn~Jb<|7o;b~*ar>XpQL8bxkd zoO)73MvUkk6LU}3L{Lx);ye@o`L`zQ-}MSbLOiY~`P{e`x{ps?MEZO_BAcArP#p@P z8SyRffSRZ0tXR|%Rb4h6?;&J?$$U0^ZuQRQBkBOU+IZt$(5ZK4(Kh|i#fb_{i}7GR z`qdkk^g-k9X3$7+y-&Y_lpHKX^6CB*(bjpy5g`Pd2|}BejKcl@+$%ed0nzEj|G8JfBNnE|N>i(8 zh^?i|&Ey16Zv|goZ$p#|aXod{s*!i?e;2qTYHBFq%%HjDlEB|56?#jvyl=ra*zP*e zN}u|CS%ccadxGrWy_-qw6=mH(gztHd@eGW0yWKXmEZ!pZ|KNCMO8Cu(&%J&by1ahn zK4Qp&#A@PR$u)2K;-7XCui+ZwLASGuS~G0KmBuy6)tQCFieNIm8%riATU>Gy^J~2k z0Bf2yflqA_t??4o62SO9Yienz^`_6todF;Ik{$s=K*SzgRp)d=`2W$nw8ewuqkehMUKN_1omRaNKZ7~o0Elh=Zp2E zL%7|QhGHh19~L)12}k?v)d8vMKb@mMe-G_xaNAQWyAFkMrq58QoDZz~2TwO|FVNb# z6V7V`%l}ia^onM$61NucwRU~`b{>YRm&01S=|uXl=$$tBM=?3_lT&y_e}ep`p;pyQ zheyH48Wi-e;nj^4#RW_`C#oh<+Lovdj8ZSf!+|@T{K7GvK7qgf6e`O*{{#cx&#Gd; zWCf#CYiP&CXEoeT)NFMFZfmH1aFzZFe?Q#YKXVK-+ZfAI?mVIL5hA6qf`Ws z<-5A^noIG(gdA6?B?6R7)+TJSg;g>CF+VVt^#7+`(My@2d;3qll4-js+_oX6nO{Wx z;PRN>;Bo1$$+wub%E!BG!#Y>0Z6E;J*v^nSnUS8&U<95{PQ_JIyu|Orl>$Fo7S0ue zdd9HH5sp<*p7^0EDB~XN6{U~X5TM6yKUguV`5D1f1m~o#z{`c73x)6|7s%mwZQa~c zd#Gl{N8OwqA;~Tcy`gr52L0#UHybbDo4F(5>wnV5sJN3C1a6@;)ZxuE*jkbD_$`)t8AvbjYpb@ z?_UyZGPOK)Eh5)U;*vSwtdiB1y*>00jhk-o3LPs;Rd)|5)l?_+nnBV$b3j9;M=SiI zcA`Vb-)PjvU%i393bMh*bJs{+scecmWMh?G{^nUjgi8k+W=nC<2TFJ&)>=xGVuW6O zQ;1NpCF6Gt;4L%v3gu|}z#dK3yJAB)U(D&DE z)xRwc;gtPuaf{QVx;VUPPRau);%2BPWaQcBvE;C~I+ev9g9(}*slVUs9N2JIYc0Ax zH~uYcD7uK}bmC!*->}}69d^^{PV+`;6FQ4^Ys#8&Emdsc*Cls)GXQMfd+@+H$+sYv(y%SYgZW5)@zeqq&^5qjUH?9q0|usnFfO^q3zi&A{D}# zKP-48+M#Cf14V8d&#$=cns#VN?JZn4*=Tvk=1Xn7BNzm#%Y}udKaki(ij()zPE~&p zYhZwE#vyzx&GyI@*eqaFygf@gcCkt@vrmHG3k!X~cOqdue^-tR_@)=FDpzgp-2akj zpWT&WRs3Q4$nSFyI{!!=w>;A(XceptReW?iSJk$%tQ^%0*S<;3M|`FOP-{rUSOpz3By|hWvE>=k!X5^ifRDIN`NK2|6PwiNd`tHf2tS~ z!@pH+6CF+AmK(BdZ-_!6+hutY&GKs^CO+0y*BT2e?aC!;+NO%ANWfa6)}5hbPAjbt zkblr}=C~`fPpftQygj6~d*ytC`^+M({hY+2-*lBh=CEBrkPWDS?7hH1I{RHFTC$)8 zP9Za!D`M37!BLU(ia)^Be?u^A9@gY%8MxA3Q&W$dis!2%_OmJjM^|+bOJ}>S@0iyP z4?;iQ%RXef%cfA)R~roBfNmaM&gbEd53#|iRoLp=y0W=LIQ)O{%OP@q(_lqtE}|JE zGbZ)&#{MKT*dlf{E|x`+yhL`8i1u1kpHtj`$ZjLu2-R?77Ok44+Euzpa2}C5Rv$3U zDE~*qgjCOy+0`Hm^38ZiJNCfA{d?v!W!jH2h%-ezBP{fJgDEgWe zjaAb#gX2QvKpcdTmo8q5S^1+r?4e7^S z1|(Wil}o!mjQ>>*fY!hlvXL?clg2v-h6mSI>u_Ehf&T%Q4e0ArMM}yKy*FrkLC~;0 zPq#%Bvz$A)?wRo7vnFa2o4AnW`fEAApOLQ2=scu?*%@2?;+k$$lCANREF7VT^eqGO z{j9VIYyOyrt*z;?Rp>9B3ZGpdtr|N!L-SmbWrm`oj%E#juqGt zDrK0A#{AgX#6J9tB?-hIoD}ZnsO*?w?fJ4Y+d zdeaK_YK5h{%9H3CREAj(Sl_SYRr8nVNE&O>>{t=^%Y1z6s*Uz>;Mp|`)u+wv+H=vG zpm{~@mTJ{bK(D6yYBMlHJXgy8=wt|$39YakJlAjUb9wu#-Z7SJUrN%8rMTxg6LQRY zcmnbT{oOJ)U`;MUx)QrFVKz$oY{64aGu^GZeut5^7%ujywlY67q&I4KfY^+L3ozyk z1xhC|UVR1BHKav_JBOyQQMO$!%C1zQs#YU{r$&VAX5Fh*%7^A~=l;e; zXwcw$pIVauRxWs_5f*$}v7M-_uT;U`RGfdI>0Y0d(b}~3NWIzsLOh=V|FP7RO3@zI zA)xn!xU1!kXq~~+T00tO`ga6AsB83Nr6gVJB-FqqUTz206_n5*>k!MzooA+2lS@r! zO2oHPxAl5YK|g^`E=lbZ%H>hmCfORddIr2PeRBV1fDYeCy6*nFP;u4?=f^&jOaNmD z$hE<*F+Ss`=U|DgXsxDMj8+yp`sqO0fS>fEiI*RqPmr}k4s@e8jl{O8>3^gOijO@s zQBZOJDcCQ(RrScm?-O_TSA`yMGi7>C-kXA1dhF9uSV47OfniJpAkhCaRg}3rfBe%_ zSR$3_GR@>NZom6pqnA9nVCarNX{N~M`}k4fbJ@C?2GuZQ|3xbRWJJyjzXx6|9f9wE z^mNp%X9BPPqk+lR$n;KaThyoXrCR58=S~cYxm~&H!*MBn&&@FixxCz=JQ0j zd-2w29hio$dz#gY6L%VtuEw{v2ua8+a!^FpzM?#+EjSXSrNDM3v@?gfj@cUkDY=p$# z)Pdsr88eA`{iI#sQwO-n*5gn{LZmzH#oKFk zi<`_uqJP!rU$?jHXi?>(;p}fh^!QQE24Sz`zp+`}so8e#-kxS%%hrwSiaD_@0>JYi zvMycyc}}K#rfL7l)9PMESjJL4Fm?`bl;QibqC8S=c|GAr08RX8^Sa9Co-8oPZV7_{A7 z$Es8f2ync>6Xy?AS6KFWW;e*!t^>TNz@74?@kf zyjvYBv~kQW;4!RO|6T{QpmVX3>hwsdX&G77;1BUgJ~H$EzwLy_untN%lsgqLh5n9d4AI*!d- zxgd?Bwte)i?82~7swA;fMH!ojspPwJIV~3Cd3?5=P3}CC8u=;SN;VapOu1gUrj%s? z!$&*TPaCRCw6m&6;Wwk2=|^!0w!m$3p)YvG zc-J{i1r%Id&RF#v-(xn*tDmN_ItkFu*2X6NDW?j+8};FbEg$^(ZOI73A_hy&iH$9} zG!}_2vk9`?#=MuGXGIW@&l~O_B)RsS+zDLF)0tnt59>i3P6F3cu3Ix`TMp_piskp|e~$S;@x4M(BB+qmt}POcD-kMG^U*hG?2t zEUzQK1?fDb$x)o;1=HZ5I4+t$VJ_J&eUtd+t~mHEu=Kt`;PYF!f5XBSJI+uY7p-ET z4TOx6)7s=mH|+HJNKFI`nsI6?KD(B?@loz_XDV4MfoPnyGYa0O`sQHzAsO-?fX^gx zNaq%L5@3$6-sjA;+5qr+&+Z@c9$o7^a4qQ0#!~K*m0BTl$nXjGrb>Ec8egPxj zaxSBw|GS_?|Aqhi%4>rFFC$`9vZ}WEeP+a1%TUz z9{^}PweMl-75F>Xas$5Vgg~%^-lKe1~xnH3cq`%luNxyVrT)zfvY{vS4Rx5rjEzObl z+fP>mmq#CN*fW%2Kp-DJMXY=lt1n?r4%|p8%ZZ>SS7ynsAC>;cOmWMMQ&^MQ7jo+= z+bF|Q-3cyz`*34Y1%5P_(^(U*=MNdGp0CH{=gyk0z*sZL{8O!B!(_;Pg`)L=ES~WPpG;9(08fGWbz{p* zM>H{xy=n1>)m)eAzMJyd@~n)#ac zV||!=hgoH=b+HqSy?f8^=x1^uvqFF^!x}M)km82$kt7&%@K(arl(7(I8x#5+!_v7x z6#Tsm^`z<1$lY`q2fZVX37PFBsgO?d=c$aniy-eZG6nJM+uKKwgxsOViRLc(%W`p% zPqK;wcy+445dAX)%A(?)+oGRB>l!kOg{^&g)VJ0Pptl`$FLo&_%3pDf^aneB(<5&z z+ObBh<_#_$b-^ND+k&_`a!wQ9cYrw+lCSC9@WEmV`{0&24c>IDbC)h%<2beMx+H(~ zNYxY9Jee|1{%0RYF6Q*cjUBhRpq+1A-6(SBTGfUWDzUZw1$Bzu#@72gT1SFOW`Hiz zDGG}`&g=dCopWQjtLIY=d>jo)x|1g$*#m0VhyAlyv8$5sfFbfYAx!hw7x%Yi|5?f$ z+aOztsR5RFYe8Sh$;kbwWvbT6wmIGerBFZw;N25S0^4m)e;!#Hx&4uMy_uMqZQSr? zQ@z4Rx4&=DGuH9<+??=xM{hk{OjVSo$6U$IN6$ZhI>GM+*4CE4@uSBr{aw)Qj_a}~ z9_bH`pXTk^D6o*9D0YB5-EI5bqKN=`C+5D7PyqVi1%%EaW}OkngTxN%mB`!OY0(OK zc8fO%p27=Y68lV?)(cB7Kx|U$Mq2YqCZM4)S13`Fe$hqZd$F+o3;Cexr!O}o{S2iA zH~YEWBg|_58#2M;su-3Y(2xiY$)b$}Q0E3wy0GPd=SKAI-TUT^(1r>|1q6G8;JP4) z5B%O;f!<#$*HViT^$B<{1}2;Ngi{;&Pwg^BkK!cq6<*(9udNR8a;R0aY`+9~4}cJe z#JtG=^02$6=H~f}9E0g3uu-4i6Wz<|(ff5LM>$g-KxfyX6M)V9hDdCJz7cvO0-RofPF3qQh z;@5)Af4R>7*{MFaM{?`OHjF9$RK{L!MD`&^b_qk__gDECd9r#>a8eayc!d)lqbABl z{FgW+rq2h2%rxRU4V+!x$z;hi78C1aR zrn-IEgd#U58MEZpNV7(X`Ue6H+U%*sQx;?&VUb{yQFT*E5PHi5u>=H3Rq<5m2jA&) zKCUh+vs=+`b^1=eqUx+l?d7v{sl5vJA57Hwth!#leBkd4tV9cJn}2XUQovFvX2lV$ zin3FZG4sC=7u$#ElP&GAZP(S7lu&e(tw7ik8>`tKa^w^vsNqNnxQp zW?k%mT)Q3ql630kP3#CTL7hfs5DHL1Y-04WJoQdm=2U)R0s9L)`Cu%)E@Ic{5^L(} zT+1KV)3PI2_Vh1rIiK2(;A(@|$_+HwKmP~(ldjk8m|SqMm`7i^eYmJfuA$wnqhm@# zBlFKT@2rTp`qVGj-d&V)*mY5^CP#9rV(y7j?QTg=LS^V&i(6*lh9@N@u>Lf&_RuU; zy+Tz-Nf(gGfb|dYd@)F?H3TemSx4vDsz9s!>2L^p>1Ao8R%ewKrL^W)H`g*HJf%uy zOt39l-LV3X){Q(gxUs!+ttmmi439G<1edc)aC(0p$iV(8-vnG_+|BkI zM*;WSn_EDiR^v^e&+Lic)dBSa@E_t=XYP~v4f^uqi{Qd}9e8UwO{0K4yGFU?O4aWV zAF2CKpL+O#f%x}+#YdlA!!eiLlLQ@Xf#RgE4Yv?|pJCd8xh#Dg2D@7)Jsj7n=%eAA zobzFOC#lvpvJD+HTLxIpl%Ncm{wea^qxk<%7+4rn42;@Sd@(#dB`W{$YqkOQTwVg? zK1O&w9zKv`$-V@EIK_ssfG#Siw!ZaeE#l99Uw@_ATOUlP!1_VdhluAu%K6cj_-0NU zFKnA@qX;}x1JU*skz@+4fpTcOPWV4ZAbjG691l^DP9VKe!+e8DLd^WlTB zuc4=tA|KNCdX0w1SDyJD6?gR=Qnh6cMwk<(;l(ZtgARs31O2=EZVy4unNAJ{m)%q%Q6$nMhC6y$61v~`PGT+ zPLE@Z-z@M#9#!BoDS%wL#)dovF49L+k(F9nQ!|^g=#R#P!H$r6<#%Up!o$%NB=G8T z+!qEW&2+YNmY@Wh~jBT+u#JG@SnMN zi^(h{leXdLG&t76u}&lz^v`Dz+F#nXc$jzFM}g4EpMDKtKp)PSg)hdF+~n7si z*e0yIa`RMyb<_h8lsLx}9QHJ?XAD=Bf(KrFK}9onJ&!K?l7y$wb)TKuzm`aK3%1w;YyPT3g9hUYcCa|4X``4A(5DQZjRoaSJs4 zEw=c1y{Vf3ytWp!zVh1|Qziv2BLh`@z?f|PSh@X##Jp)Xh*12NM+BLKQC`-WIi-Q- z4UtTxS_LYM7bt-30K6W~z-#i?MJ1rF)(vGL^-zyXGR17D`wW5BX;YU6p&Y`ogoiG^;F5!H zBdW$qRSe1A3B22R0nGCA3LWm>CGmBO%QP*crXtTDNRYIiXtD#O=E7~U6=ZDzkA8q# zKMoE;Tdmui7Cc}~hezgJPGO)H7%{EhE~sSd&+TD@nArW6z^8}5d>+eIcC#qd@?#Eg zq#H5o|M0FsLpr&iNg|>0Kv~_Xa05VHi-|?hh|ZBsgOcV^u(FN)oA{x7>Wx)*(Ae{p zPb%uTFd%!tV(I9A#FfG>uEo?`^uUcukE5; z&D0PSG?3tf&m={69-Z3bnQFj|L?Z?C%9U7E}QC5k9~5EPU8ae*z8nflib&IkrH%4M{9dxMiUE z7SIjvb32Rg@ZC=rI@SybED)%E^c#82;pkm0m;?G{9~Xx+j}+_YVbZ!zw6MTcq+tvr)H^=z*&4EPB?&@cAPt;f<;v;B30U9Xhl3^ZAs0H;G z(2aJfBMomsYOr&=pumcxB7+k3nCtNcAdCV=zz$cZ6&XAM6MRqd1>n29wo{ISMOw9<*tCdsM!o)O{5o%g$Avzjiwt(dIXn(v>Pl5A4u=7kLI@R1Bn`?X!FnH*QM#^`_qs^swFZ+`e^3C` zfD1>XHPiYbWNAfTS>rVd8bz)~uz-~-2tUsUN3o4bpMTxebKCof?{flT9K*zDiL0}l z54S*-`l~1SXG~oSf^ws?dy&iAKEKW?(})%TX#jjeVA35ekq$v(>w+)XL?m(16s%f_ zzMqWWV=oJG;D22=81xAGClnK>DEctL|CSLPRb#QBA5IQcx7#v2P1FSIvY>%RF}=@? zNYJ za2lj~D-9aXzL_r&|EI*e3co!?wU}s0|9jUj6WW*RQETsi!Ij!Q%1V4&Zm?5a(?bP1 zfLUKo$)Y1uT1|PK?mGm@o(<^9D`2^Ae(-CG-_W*I+j~&rg_y`-(CmGt-=OhaN8qySSC)nU7sTLGBsxq#@UOJWXDu=?{9VcQ@% zc`t8Ayg4~ZX1Ha^YWTsn2N(jD1Z2VMgyu3Dx>>7wRULu>>c!XvL7@Y@6JwanIlzcw z>0cMc9E!$#%YAcdm$Zr1TD-FbCQOu>h@?-~xpf(r_3^zAPzRi!sNvmWj45bM6g ztXSDw9G>ZWI3=ZOKF!oFw&?Jzed6$aCiNJShY4iehDr>VRT}a;C5;yn{Apnn$U36< z6psZD0c45w{avFk(uZn%+EkkjG)6nj-= zm&dTckU%i{wxvmC(LcQocY$LN5OderfK~7K0W`~9Tt%&bedlG?ZPzGKpJVQGD1?Rb z7GT#iom{aZmgDT&Y~BjM66d&VlsRT5&CcQB9HzHy#oQMnP z9DaKieB*imy5R%8oSeMO*TaFW>l?tRVm-lrCL;Ivx@p5{R|h2*$cOLb<|#(z*n7|ygBHGO3)F~o@eM5CEDb=*~F8a zuk9A;XfxGbLEAD{?!u>yr9wOqaQH0_`SPJ#vwSi=7zbEr$i^;aUB4pO&6Rg06goOYY&Y#j`DM_mIa;d4)CESc4$sz?d|=s zCG2_aj1E!VuBL8ohUzwkSdwJs^mMLT>&>R6>$SD>eB+U-#$_>n`dR(+c%M8dyeFGx zX}jvqZgqLLs+#Lyw&kV#vXYji#3jO$N(Zh#)K%AQE=%5x$ptm8tOwnmKfVe9vL3`0 z9w*we=2cBf`Ax1(^{rcLwo^rI-RjPL@`}bB0>_y0abM3!_ktJJ0&I^xyu9mEpFQ6@ ztB;;@0I=){B;^?x4a4oI12)(R|D)H#AQ`=lsL?S)jT;7|)-Y*(apG05g%yVC?{3L` zcIAQHQ)2HwWG^}&h`*yg4b&ba%=aWbpo!_4Fk?z#-!|OSjFTIxrJsk`$nHK{%C>yP z{GKzYKtpb(o%a1Ll3Pjv8yFz!GwJSxAhE$--fJH~?In0r0#1ix1>g4U`jVd<{Nq#O zG`3Z>%}o;OoPYH6BN1N>JE3+sRcAol{U$@rdTYP{)!l!A;ayD>S#ULYx;*32;ce9& zzjVJ3Ec$y}oS_Js-yZ_&H^Hrd*AL4e^e#)p7&jAy(70{1<4xz=8{R-$0a@$Tw5x2_ zzvlC$_Vg-IG()F84ti_uv#P8?&jpexYkG%C1RLvrr>a2L_B}xqj!&0)@q(!L0Wg&( zfp**hsnVbym~X~M5xl++J~tLm4Ze-{&~p{z`4PR`zDCiZf*_TQ&LKKWfz@R)%}0)nwZ=Y(pQ6o;_hw{8XR-ATkn+xb%Fc$1V#g z0|&8k7X^IGcRWQ#!z_57PYom={)Lrr9r8bC?hDyxCs}RmVUpBX4`13@1^>glU;Evl z8`vWwz8-Y;N=jJr;aBo1xcNmi^*PhwfeVZo1{QP!0a^7;w?K;z!T%fhe|_9{dh=r| zBQDP&{k%SY03z=!new|bgGvk$bpxYD`>wzS~B0vQOi zu?j!vHV>rV8U(H$fvexMHf-nLFJt2G{Wc%uZqzt<@Ujr!Trs}W5F)Nn`lWYZtKPWT`cXWpi%BBf4E74{ z*t?h?aaGP;`m;pt!7@}YoA+u^-`V$&`_pm$nRm?dOv(j&tjIcfQ_^WBsewm6#DPak zlp$|K6U;846)sePrQ{rMR$y?ThkMQBf>aep0bK?FhuAwxVctI3L@~Qi9S!Tk1H>Bt zu(O1{&n-9nFMn8wVJ1oG{y+-GIUR0rU_%26n72z;gF$@oOSY+JilpMI<~&lfZIJ4;yF88p3>Y( zM`L}op7urzB+!TxE`F`T4{d7-6=NYuvUJfXBY!%NCL@5CXKSZvG#ZEA+S)8l-iE{6 z%d=q;pGD&imO?zewYB$QdYWWVZa4`8coQdUX?PZq4J45{eJ)BfN;PoKR!eEQ_Y{@PmjVHT#*G>r3L zvi5$uHcdwJNtk(W!z}mK)?gv0d6;JV@M0~CCSjb5w<_!|&e7s6K(*8lhUcLMjm`by z@OVWP*kzCp&ld+pt1&=X6c59-NdN%X*x|ySWLK$9b}kp)D4d1yD2#_us4Nai1t9sZ zv2)$pJdY-94chNJ`S>@ETye~huD9~k+ZIclL<%_LoD#X`1qDB)_-q3?Cf+l`PWex z&Zc2X1%ZF>bhac;YK>i416OSrzmL)+20CAZQ>CL^oD450s@t7y`8vB99Ph_`6O# i12?239pfH(eXlv5Hc#_3PxCDI`Tqggq^PO@XaxYX-uS-& From 084ebb8b2f3d9640c2ce9e4e37e8d8ac4f0fa301 Mon Sep 17 00:00:00 2001 From: Nguyen Anh Tu Date: Wed, 30 Apr 2025 14:26:00 +0700 Subject: [PATCH 083/147] refactor: use recoverCurrentDevicePassword method --- .../src/SeedlessOnboardingController.test.ts | 12 ++-- .../src/SeedlessOnboardingController.ts | 55 +++++++++++++------ 2 files changed, 45 insertions(+), 22 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts index fde37a4473..9fdb093d48 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts @@ -2322,7 +2322,7 @@ describe('SeedlessOnboardingController', () => { }); }); - describe('recoverPassword', () => { + describe('recoverCurrentDevicePassword', () => { const GLOBAL_PASSWORD = 'global-password'; const RECOVERED_PASSWORD = 'recovered-password'; @@ -2352,7 +2352,7 @@ describe('SeedlessOnboardingController', () => { password: RECOVERED_PASSWORD, }); - const result = await controller.recoverPassword({ + const result = await controller.recoverCurrentDevicePassword({ globalPassword: GLOBAL_PASSWORD, }); @@ -2370,7 +2370,7 @@ describe('SeedlessOnboardingController', () => { }, async ({ controller }) => { await expect( - controller.recoverPassword({ + controller.recoverCurrentDevicePassword({ globalPassword: GLOBAL_PASSWORD, }), ).rejects.toThrow( @@ -2399,7 +2399,7 @@ describe('SeedlessOnboardingController', () => { ); await expect( - controller.recoverPassword({ + controller.recoverCurrentDevicePassword({ globalPassword: GLOBAL_PASSWORD, }), ).rejects.toStrictEqual( @@ -2441,7 +2441,7 @@ describe('SeedlessOnboardingController', () => { ); await expect( - controller.recoverPassword({ + controller.recoverCurrentDevicePassword({ globalPassword: GLOBAL_PASSWORD, }), ).rejects.toStrictEqual( @@ -2478,7 +2478,7 @@ describe('SeedlessOnboardingController', () => { .mockRejectedValueOnce(new Error('Unknown error')); await expect( - controller.recoverPassword({ + controller.recoverCurrentDevicePassword({ globalPassword: GLOBAL_PASSWORD, }), ).rejects.toStrictEqual( diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index 450e190ee5..eed849b260 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -561,30 +561,53 @@ export class SeedlessOnboardingController extends BaseController< * @param params.globalPassword - The latest global password. * @returns A promise that resolves to the password corresponding to the current authPubKey in state. */ - async recoverPassword({ + async recoverCurrentDevicePassword({ globalPassword, }: { globalPassword: string; }): Promise<{ password: string }> { return this.#withControllerLock(async () => { const currentDeviceAuthPubKey = this.#recoverAuthPubKey(); + const { password: currentDevicePassword } = await this.#recoverPassword({ + targetPwPubKey: currentDeviceAuthPubKey, + globalPassword, + }); + return { + password: currentDevicePassword, + }; + }); + } - const { - encKey: currentGlobalDeviceEncKey, - authKeyPair: currentGlobalDeviceAuthKeyPair, - } = await this.#recoverEncKey(globalPassword); + /** + * @description Fetch the password corresponding to the targetPwPubKey. + * + * @param params - The parameters for fetching the password. + * @param params.targetPwPubKey - The target public key of the password to recover. + * @param params.globalPassword - The latest global password. + * @returns A promise that resolves to the password corresponding to the current authPubKey in state. + */ + async #recoverPassword({ + targetPwPubKey, + globalPassword, + }: { + targetPwPubKey: SEC1EncodedPublicKey; + globalPassword: string; + }): Promise<{ password: string }> { + const { + encKey: currentGlobalDeviceEncKey, + authKeyPair: currentGlobalDeviceAuthKeyPair, + } = await this.#recoverEncKey(globalPassword); - try { - const res = await this.toprfClient.recoverPassword({ - targetPwPubKey: currentDeviceAuthPubKey, - curEncKey: currentGlobalDeviceEncKey, - curAuthKeyPair: currentGlobalDeviceAuthKeyPair, - }); - return res; - } catch (error) { - throw PasswordSyncError.getInstance(error); - } - }); + try { + const res = await this.toprfClient.recoverPassword({ + targetPwPubKey, + curEncKey: currentGlobalDeviceEncKey, + curAuthKeyPair: currentGlobalDeviceAuthKeyPair, + }); + return res; + } catch (error) { + throw PasswordSyncError.getInstance(error); + } } /** From d9a62f9642aeff7154922d9aaad3eedc65efde07 Mon Sep 17 00:00:00 2001 From: Nguyen Anh Tu Date: Wed, 30 Apr 2025 14:26:51 +0700 Subject: [PATCH 084/147] feat: increase pw oudated cache ttl to 30mins --- packages/seedless-onboarding-controller/src/constants.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/seedless-onboarding-controller/src/constants.ts b/packages/seedless-onboarding-controller/src/constants.ts index ac05b9be93..5cac8dadfd 100644 --- a/packages/seedless-onboarding-controller/src/constants.ts +++ b/packages/seedless-onboarding-controller/src/constants.ts @@ -1,6 +1,6 @@ export const controllerName = 'SeedlessOnboardingController'; -export const PASSWORD_OUTDATED_CACHE_TTL_MS = 15 * 60 * 1000; // 15 minutes +export const PASSWORD_OUTDATED_CACHE_TTL_MS = 30 * 60 * 1000; // 30 minutes export enum Web3AuthNetwork { Mainnet = 'sapphire_mainnet', From af08c93441cf1b0d434d080e290529226463f66f Mon Sep 17 00:00:00 2001 From: Nguyen Anh Tu Date: Wed, 30 Apr 2025 14:28:28 +0700 Subject: [PATCH 085/147] refactor: correct latest encKey variable name --- .../src/SeedlessOnboardingController.ts | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index eed849b260..29ce337a76 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -593,16 +593,14 @@ export class SeedlessOnboardingController extends BaseController< targetPwPubKey: SEC1EncodedPublicKey; globalPassword: string; }): Promise<{ password: string }> { - const { - encKey: currentGlobalDeviceEncKey, - authKeyPair: currentGlobalDeviceAuthKeyPair, - } = await this.#recoverEncKey(globalPassword); + const { encKey: latestPwEncKey, authKeyPair: latestPwAuthKeyPair } = + await this.#recoverEncKey(globalPassword); try { const res = await this.toprfClient.recoverPassword({ targetPwPubKey, - curEncKey: currentGlobalDeviceEncKey, - curAuthKeyPair: currentGlobalDeviceAuthKeyPair, + curEncKey: latestPwEncKey, + curAuthKeyPair: latestPwAuthKeyPair, }); return res; } catch (error) { From bba8844db4733a63636f5b4ae7b2ad6c1adc69cf Mon Sep 17 00:00:00 2001 From: Nguyen Anh Tu Date: Wed, 30 Apr 2025 14:31:24 +0700 Subject: [PATCH 086/147] refactor: verify password naming --- .../src/SeedlessOnboardingController.test.ts | 21 +++++++++++-------- .../src/SeedlessOnboardingController.ts | 15 ++++++------- .../src/types.ts | 2 +- 3 files changed, 21 insertions(+), 17 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts index 9fdb093d48..fcc6b598c7 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts @@ -1715,7 +1715,7 @@ describe('SeedlessOnboardingController', () => { jest.spyOn(encryptor, 'decrypt').mockResolvedValueOnce('MOCK_VAULT'); expect(async () => { - await controller.verifyPassword(MOCK_PASSWORD); + await controller.verifyVaultPassword(MOCK_PASSWORD); }).not.toThrow(); }, ); @@ -1735,7 +1735,7 @@ describe('SeedlessOnboardingController', () => { .mockRejectedValueOnce(new Error('Incorrect password')); await expect( - controller.verifyPassword(MOCK_PASSWORD), + controller.verifyVaultPassword(MOCK_PASSWORD), ).rejects.toThrow('Incorrect password'); }, ); @@ -1743,9 +1743,9 @@ describe('SeedlessOnboardingController', () => { it('should throw an error if the vault is missing', async () => { await withController(async ({ controller }) => { - await expect(controller.verifyPassword(MOCK_PASSWORD)).rejects.toThrow( - SeedlessOnboardingControllerError.VaultError, - ); + await expect( + controller.verifyVaultPassword(MOCK_PASSWORD), + ).rejects.toThrow(SeedlessOnboardingControllerError.VaultError); }); }); }); @@ -2541,7 +2541,10 @@ describe('SeedlessOnboardingController', () => { // We'll use the key/salt implicitly by not providing password to unlockVaultAndGetBackupEncKey await controller.submitPassword(OLD_PASSWORD); // Unlock using the standard method - const verifyPasswordSpy = jest.spyOn(controller, 'verifyPassword'); + const verifyPasswordSpy = jest.spyOn( + controller, + 'verifyVaultPassword', + ); const recoverEncKeySpy = jest.spyOn(toprfClient, 'recoverEncKey'); const encryptorSpy = jest.spyOn(encryptor, 'encryptWithDetail'); @@ -2612,7 +2615,7 @@ describe('SeedlessOnboardingController', () => { await controller.submitPassword(OLD_PASSWORD); const verifyPasswordSpy = jest - .spyOn(controller, 'verifyPassword') + .spyOn(controller, 'verifyVaultPassword') .mockRejectedValueOnce(new Error('Incorrect old password')); await expect( @@ -2643,7 +2646,7 @@ describe('SeedlessOnboardingController', () => { await controller.submitPassword(OLD_PASSWORD); const verifyPasswordSpy = jest - .spyOn(controller, 'verifyPassword') + .spyOn(controller, 'verifyVaultPassword') .mockResolvedValueOnce(); const recoverEncKeySpy = jest .spyOn(toprfClient, 'recoverEncKey') @@ -2684,7 +2687,7 @@ describe('SeedlessOnboardingController', () => { await controller.submitPassword(OLD_PASSWORD); const verifyPasswordSpy = jest - .spyOn(controller, 'verifyPassword') + .spyOn(controller, 'verifyVaultPassword') .mockResolvedValueOnce(); const recoverEncKeySpy = jest.spyOn(toprfClient, 'recoverEncKey'); const encryptorSpy = jest diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index 29ce337a76..5ed7e1091a 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -392,7 +392,7 @@ export class SeedlessOnboardingController extends BaseController< async changePassword(newPassword: string, oldPassword: string) { this.#assertIsUnlocked(); // verify the old password of the encrypted vault - await this.verifyPassword(oldPassword); + await this.verifyVaultPassword(oldPassword); await this.#assertPasswordInSync(); // NOTE don't include verifyPassword and #assertPasswordInSync in #withControllerLock since verifyPassword and #assertPasswordInSync already acquires the controller lock @@ -452,7 +452,7 @@ export class SeedlessOnboardingController extends BaseController< * @returns A promise that resolves to the success of the operation. * @throws {Error} If the password is invalid or the vault is not initialized. */ - async verifyPassword(password: string): Promise { + async verifyVaultPassword(password: string): Promise { return this.#withControllerLock(async () => { if (!this.state.vault) { throw new Error(SeedlessOnboardingControllerError.VaultError); @@ -534,7 +534,7 @@ export class SeedlessOnboardingController extends BaseController< globalPassword: string; }) { // verify correct old password - await this.verifyPassword(oldPassword); + await this.verifyVaultPassword(oldPassword); // NOTE don't include verifyPassword in #withControllerLock since verifyPassword already acquires the controller lock return this.#withControllerLock(async () => { // update vault with latest globalPassword @@ -627,7 +627,7 @@ export class SeedlessOnboardingController extends BaseController< now - this.state.passwordOutdatedCache.timestamp < PASSWORD_OUTDATED_CACHE_TTL_MS ) { - return this.state.passwordOutdatedCache.value; + return this.state.passwordOutdatedCache.isExpiredPwd; } return this.#withControllerLock(async () => { this.#assertIsAuthenticatedUser(this.state); @@ -648,12 +648,13 @@ export class SeedlessOnboardingController extends BaseController< }); // TODO: use noble lib to deserialize and compare curve point - const result = bytesToHex(authPubKey) !== bytesToHex(globalAuthPubKey); + const isExpiredPwd = + bytesToHex(authPubKey) !== bytesToHex(globalAuthPubKey); // Cache the result in state this.update((state) => { - state.passwordOutdatedCache = { value: result, timestamp: Date.now() }; + state.passwordOutdatedCache = { isExpiredPwd, timestamp: Date.now() }; }); - return result; + return isExpiredPwd; }); } diff --git a/packages/seedless-onboarding-controller/src/types.ts b/packages/seedless-onboarding-controller/src/types.ts index 75d9c72461..7d8cccdca4 100644 --- a/packages/seedless-onboarding-controller/src/types.ts +++ b/packages/seedless-onboarding-controller/src/types.ts @@ -99,7 +99,7 @@ export type SeedlessOnboardingControllerState = /** * Cache for checkIsPasswordOutdated result and timestamp. */ - passwordOutdatedCache?: { value: boolean; timestamp: number }; + passwordOutdatedCache?: { isExpiredPwd: boolean; timestamp: number }; }; // Actions From b28ca60c5af2b92ff0814268255dea183f5f32d4 Mon Sep 17 00:00:00 2001 From: Nguyen Anh Tu Date: Wed, 30 Apr 2025 14:51:12 +0700 Subject: [PATCH 087/147] refactor: correct naming --- .../src/SeedlessOnboardingController.ts | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index 5ed7e1091a..600d23bbca 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -620,14 +620,16 @@ export class SeedlessOnboardingController extends BaseController< }): Promise { // cache result to reduce load on infra // Check cache first unless skipCache is true - const now = Date.now(); - if ( - !options?.skipCache && - this.state.passwordOutdatedCache && - now - this.state.passwordOutdatedCache.timestamp < - PASSWORD_OUTDATED_CACHE_TTL_MS - ) { - return this.state.passwordOutdatedCache.isExpiredPwd; + if (!options?.skipCache) { + const { passwordOutdatedCache } = this.state; + const now = Date.now(); + const isCacheValid = + passwordOutdatedCache && + now - passwordOutdatedCache.timestamp < PASSWORD_OUTDATED_CACHE_TTL_MS; + + if (isCacheValid) { + return passwordOutdatedCache.isExpiredPwd; + } } return this.#withControllerLock(async () => { this.#assertIsAuthenticatedUser(this.state); @@ -638,7 +640,7 @@ export class SeedlessOnboardingController extends BaseController< userId, } = this.state; - const authPubKey = this.#recoverAuthPubKey(); + const currentDeviceAuthPubKey = this.#recoverAuthPubKey(); const { authPubKey: globalAuthPubKey } = await this.toprfClient.fetchAuthPubKey({ From 63a4fa25dd537db296fab30b85a8c01bf4c1617c Mon Sep 17 00:00:00 2001 From: Nguyen Anh Tu Date: Wed, 30 Apr 2025 14:51:48 +0700 Subject: [PATCH 088/147] refactor: use noble lib to deserialize pubkey and compare curve point --- .../src/SeedlessOnboardingController.test.ts | 5 +++-- .../src/SeedlessOnboardingController.ts | 9 +++++---- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts index fcc6b598c7..59bf5baf32 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts @@ -76,8 +76,9 @@ const MOCK_SEED_PHRASE = stringToBytes( 'horror pink muffin canal young photo magnet runway start elder patch until', ); -const MOCK_AUTH_PUB_KEY = 'dGVzdFB1YktleQ=='; -const MOCK_AUTH_PUB_KEY_OUTDATED = 'YXV0aHB1YmtleW91dGRhdGVk'; +const MOCK_AUTH_PUB_KEY = 'A09CwPHdl/qo2AjBOHen5d4QORaLedxOrSdgReq8IhzQ'; +const MOCK_AUTH_PUB_KEY_OUTDATED = + 'Ao2sa8imX7SD4KE4fJLoJ/iBufmaBxSFygG1qUhW2qAb'; type WithControllerCallback = ({ controller, diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index 600d23bbca..dba288c579 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -22,8 +22,8 @@ import { stringToBytes, remove0x, bigIntToHex, - bytesToHex, } from '@metamask/utils'; +import { secp256k1 } from '@noble/curves/secp256k1'; import { Mutex } from 'async-mutex'; import { @@ -649,9 +649,10 @@ export class SeedlessOnboardingController extends BaseController< verifierId: userId, }); - // TODO: use noble lib to deserialize and compare curve point - const isExpiredPwd = - bytesToHex(authPubKey) !== bytesToHex(globalAuthPubKey); + // use noble lib to deserialize and compare curve point + const isExpiredPwd = !secp256k1.ProjectivePoint.fromHex( + currentDeviceAuthPubKey, + ).equals(secp256k1.ProjectivePoint.fromHex(globalAuthPubKey)); // Cache the result in state this.update((state) => { state.passwordOutdatedCache = { isExpiredPwd, timestamp: Date.now() }; From a4a6ecedc729092a9ba31d95c019f941be7b1a1b Mon Sep 17 00:00:00 2001 From: Nguyen Anh Tu Date: Tue, 6 May 2025 10:02:14 +0700 Subject: [PATCH 089/147] feat: persist nodeAuthTokens --- .../src/SeedlessOnboardingController.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index c657cdb002..f1ee6cc2ef 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -99,7 +99,7 @@ const seedlessOnboardingMetadata: StateMetadata Date: Tue, 6 May 2025 11:50:48 +0800 Subject: [PATCH 090/147] fix: fixed tests --- .../package.json | 2 +- .../seedless-onboarding-controller.tgz | Bin 52021 -> 2277 bytes .../src/SeedlessOnboardingController.test.ts | 87 ++++++++++++++---- .../tests/__fixtures__/mockMessenger.ts | 57 ++++++++++++ 4 files changed, 127 insertions(+), 19 deletions(-) create mode 100644 packages/seedless-onboarding-controller/tests/__fixtures__/mockMessenger.ts diff --git a/packages/seedless-onboarding-controller/package.json b/packages/seedless-onboarding-controller/package.json index 3ce77e5dbb..261909a7b5 100644 --- a/packages/seedless-onboarding-controller/package.json +++ b/packages/seedless-onboarding-controller/package.json @@ -49,13 +49,13 @@ "dependencies": { "@metamask/auth-network-utils": "./auth-network-utils.tgz", "@metamask/base-controller": "^8.0.0", - "@metamask/browser-passworder": "^4.3.0", "@metamask/toprf-secure-backup": "./toprf-secure-backup.tgz", "@metamask/utils": "^11.2.0", "async-mutex": "^0.5.0" }, "devDependencies": { "@metamask/auto-changelog": "^3.4.4", + "@metamask/browser-passworder": "^4.3.0", "@metamask/keyring-controller": "^21.0.3", "@noble/ciphers": "^0.5.2", "@noble/curves": "^1.2.0", diff --git a/packages/seedless-onboarding-controller/seedless-onboarding-controller.tgz b/packages/seedless-onboarding-controller/seedless-onboarding-controller.tgz index df0354e87fd648bb58fdbc9051056640d5151594..0d5e6cd8526dfb24615b911a4e612468756af723 100644 GIT binary patch literal 2277 zcmVKkHWvoG%Gr$&Wl*1lYr=wvq_z$bqeFuPC-x zS{hqyBvMCGNqxJ$-+mZMvfVVhX|Zh=cL=}Op7#tn57H$|ZrBQYqYFPe4<^%duSkFR z%B$b+pBx zjuU4HOQ{NGfNNMVjVVY0uYW=;fo=8uvY#1K>eF8D2C-yG3-=OP^icE$Uf=8Y4!RB# z>Bly(G(%O}_Ii#56NV@7Gb+uc;9^Ix#^M&0C)KK_OH6vVLz3xbrpOOG$JyJ1*VjT} zj%4I71lR*VO)+&G7ec`eXF2eq%#mDWhD!l*2_{3(h-r>mgA@zNRLaE)5-E(5d5+41 z{nvZPC(j03TUOj;)xtV=iH2P=ebY;%!d_YBd5>rh4jcd%{K{lVE-`~JrC(5KR8VQs z@q4w!36@ZEw#*C1Irb%bPWnuTpLuhEsFNrY8@#geGCNNK`cwPgd1F2 zi3^t8RHfAlWu}$agR;u{|~j1sawz!$2FUcG#3+Yl`H<-1=d5I%o@Kk_`4M zjms)0KvCs}yIPet0(At>kcf8WZUilrEPl_j>oTPf5VmAm-$|AJ(QcDI$JsqVr|{@z zJAZY;-&kQLcCY(`AX}e2Za;dRs*r!D7%o~o*fmM|0;5tLg zlSXKXRPkB7q}zL;Le z@Y0{n{3w0}(=+g+SMXC9jk^&1<7yVn=P;c);pNpN48~muqtWDg97gBx;yQ+C8p9;K z4C7!7@f1j5BPtB$B|ftz3e&^&gmJEgc0#YK`n(s4Ik~ubY_2F&x4IX z7zh3&jLzr8OfLS_<>_gC6S>TT^gKu#8d%XYmPlo;b_rLzh@l*f*9%~QY{+&kQ zf+o~<%5}F>uDiX{ymg!x^>9z!Lt(Z~70t`@+10*2Xs#!=gXfUT6?F}fZYF7a+X{s? zEYEGvb)2_rrUbAwg)cBcD#v*%$^v*T>q~g|_FzQ6sc&~H=o`+ zEydT?@kst350CG^{~QkbgQxue9_v>Jpd(m;om1$1ZYp)U#C2OgxDX>fs`P7UiaJre zG!5oYRE%2Q4X){j?wrDF2LPbcW{$-JbOJ+{k*er80KZtCOcq$OmG$Y-8@W-4y@GMk z=74_0`zBdy^A^>LO#8JqrBeB4>Ev2hsL9|DRtgmh&5cy+tt_)Htph7=T2DVyyhkh> z+0E627%#)Pwp#NPgXIzvL&h&zuF=BrJ&p4_4tble03BWsb_dc}N%S4BM^~aA7b(8? zQm-(&vD%WQxMWpsJ|QgL*(lKZ(2{o){;T2&KTlEed5V%9Mb3`8j`vaNtNA{HYywGV z`qB6@u%w51>XTQY`t(vsBhjaNS!} z3#o}N$&nF6NLS$!6^aDgFx8SzQ<+$E$?jApEpqb;ds^AoFzb=m^SoYTVXua}+vi%H zeRdE2RLd>P`NMiz%%9WLT-Z-bg|{5dmT$d7A8C3d50=SyzD9i@BEBn;$(U)r=HZ@{N zh9605_WsM|wT!#M?&y*A%SF{}jUdfMf^N=8pxeBVe!9sIQF%JsCS8gpiWEh{aVI&p zr+`%^a|N0^scziL@Vv>vPvM?f{kt`8%TIq#>>is_=)8Hp>1H318hR9WH71opw|=Ou zbv=N1SlPzDH-mvU-0EO@EfTk=48FJ6zIW{PcVlonemo3vnamCcN&%3 zcGgY5>iWws8^@W^|9595}3wc^6HuW@4KZd-BZ&2aZXT90k| z5bi(6)~n4~DG}9Uhvknpb?4ZjSaGo{VH1nNb8qk*e)|pn_TzAep{b`M+nTm)EJ;vX zM=Zgn)ztq(*^y^6(zGy7l*K!3|G2aAoezKYp!~F+*3)`g|7YvJqO$ literal 52021 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 = ({ encryptor: VaultEncryptor; initialState: SeedlessOnboardingControllerState; messenger: SeedlessOnboardingControllerMessenger; + baseMessenger: Messenger; toprfClient: ToprfSecureBackup; }) => Promise | ReturnValue; @@ -91,21 +96,6 @@ function getDefaultSeedlessOnboardingVaultEncryptor() { }; } -/** - * Creates a mock user operation messenger. - * - * @returns The mock user operation messenger. - */ -function buildSeedlessOnboardingControllerMessenger() { - return { - call: jest.fn(), - publish: jest.fn(), - registerActionHandler: jest.fn(), - registerInitialEventPayload: jest.fn(), - subscribe: jest.fn(), - } as unknown as jest.Mocked; -} - /** * Builds a mock encryptor for the vault. * @@ -130,7 +120,7 @@ async function withController( ) { const [{ ...rest }, fn] = args.length === 2 ? args : [{}, args[0]]; const encryptor = new MockVaultEncryptor(); - const messenger = buildSeedlessOnboardingControllerMessenger(); + const { messenger, baseMessenger } = mockSeedlessOnboardingMessenger(); const controller = new SeedlessOnboardingController({ encryptor, @@ -144,6 +134,7 @@ async function withController( encryptor, initialState: controller.state, messenger, + baseMessenger, toprfClient, }); } @@ -415,7 +406,7 @@ const MOCK_SEED_PHRASE = stringToBytes( describe('SeedlessOnboardingController', () => { describe('constructor', () => { it('should be able to instantiate', () => { - const messenger = buildSeedlessOnboardingControllerMessenger(); + const { messenger } = mockSeedlessOnboardingMessenger(); const controller = new SeedlessOnboardingController({ messenger, encryptor: getDefaultSeedlessOnboardingVaultEncryptor(), @@ -427,7 +418,7 @@ describe('SeedlessOnboardingController', () => { }); it('should be able to instantiate with an encryptor', () => { - const messenger = buildSeedlessOnboardingControllerMessenger(); + const { messenger } = mockSeedlessOnboardingMessenger(); const encryptor = createMockVaultEncryptor(); expect( @@ -2039,6 +2030,66 @@ describe('SeedlessOnboardingController', () => { }, ); }); + + it('should lock the controller when the keyring is locked', async () => { + await withController( + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + }), + }, + async ({ controller, baseMessenger, toprfClient }) => { + await mockCreateToprfKeyAndBackupSeedPhrase( + toprfClient, + controller, + MOCK_PASSWORD, + MOCK_SEED_PHRASE, + MOCK_KEYRING_ID, + ); + + baseMessenger.publish('KeyringController:lock'); + + await expect( + controller.addNewSeedPhraseBackup( + MOCK_SEED_PHRASE, + MOCK_KEYRING_ID, + ), + ).rejects.toThrow(SeedlessOnboardingControllerError.ControllerLocked); + }, + ); + }); + + it('should unlock the controller when the keyring is unlocked', async () => { + await withController( + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + }), + }, + async ({ controller, baseMessenger }) => { + await expect( + controller.addNewSeedPhraseBackup( + MOCK_SEED_PHRASE, + MOCK_KEYRING_ID, + ), + ).rejects.toThrow(SeedlessOnboardingControllerError.ControllerLocked); + + baseMessenger.publish('KeyringController:unlock'); + + await new Promise((resolve) => setTimeout(resolve, 100)); + + controller.updateBackupMetadataState({ + keyringId: MOCK_KEYRING_ID, + seedPhrase: MOCK_SEED_PHRASE, + }); + + const MOCK_SEED_PHRASE_HASH = keccak256AndHexify(MOCK_SEED_PHRASE); + expect(controller.state.socialBackupsMetadata).toStrictEqual([ + { id: MOCK_KEYRING_ID, hash: MOCK_SEED_PHRASE_HASH }, + ]); + }, + ); + }); }); describe('SeedPhraseMetadata', () => { diff --git a/packages/seedless-onboarding-controller/tests/__fixtures__/mockMessenger.ts b/packages/seedless-onboarding-controller/tests/__fixtures__/mockMessenger.ts new file mode 100644 index 0000000000..01a7124e14 --- /dev/null +++ b/packages/seedless-onboarding-controller/tests/__fixtures__/mockMessenger.ts @@ -0,0 +1,57 @@ +import { Messenger } from '@metamask/base-controller'; + +import type { + AllowedActions, + AllowedEvents, + SeedlessOnboardingControllerMessenger, +} from '../../src/types'; + +/** + * creates a custom seedless onboarding messenger, in case tests need different permissions + * + * @returns base messenger, and messenger. You can pass this into the mocks below to mock messenger calls + */ +export function createCustomSeedlessOnboardingMessenger() { + const baseMessenger = new Messenger(); + const messenger = baseMessenger.getRestricted({ + name: 'SeedlessOnboardingController', + allowedActions: [], + allowedEvents: ['KeyringController:lock', 'KeyringController:unlock'], + }); + + return { + baseMessenger, + messenger, + }; +} + +type OverrideMessengers = { + baseMessenger: Messenger; + messenger: SeedlessOnboardingControllerMessenger; +}; + +/** + * Jest Mock Utility to generate a mock Seedless Onboarding Messenger + * + * @param overrideMessengers - override messengers if need to modify the underlying permissions + * @returns series of mocks to actions that can be called + */ +export function mockSeedlessOnboardingMessenger( + overrideMessengers?: OverrideMessengers, +) { + const { baseMessenger, messenger } = + overrideMessengers ?? createCustomSeedlessOnboardingMessenger(); + + const mockKeyringGetAccounts = jest.fn(); + const mockKeyringAddAccounts = jest.fn(); + + const mockAccountsListAccounts = jest.fn(); + + return { + baseMessenger, + messenger, + mockKeyringGetAccounts, + mockKeyringAddAccounts, + mockAccountsListAccounts, + }; +} From 69449a9c8ff6c59a2fd065705a0bba6ed2294e78 Mon Sep 17 00:00:00 2001 From: lwin Date: Tue, 6 May 2025 13:36:29 +0800 Subject: [PATCH 091/147] feat: removed toprf tgz packages and used npm packages --- package.json | 3 +- .../auth-network-utils.tgz | Bin 41285 -> 0 bytes .../package.json | 4 +-- .../src/SeedlessOnboardingController.ts | 29 +++++++-------- .../src/errors.ts | 10 +++--- .../tests/mocks/toprf.ts | 2 ++ .../toprf-secure-backup.tgz | Bin 100678 -> 0 bytes yarn.lock | 34 +++++++++--------- 8 files changed, 42 insertions(+), 40 deletions(-) delete mode 100644 packages/seedless-onboarding-controller/auth-network-utils.tgz delete mode 100644 packages/seedless-onboarding-controller/toprf-secure-backup.tgz diff --git a/package.json b/package.json index 5998691cf1..9176377f11 100644 --- a/package.json +++ b/package.json @@ -46,8 +46,7 @@ "resolutions": { "elliptic@6.5.4": "^6.5.7", "fast-xml-parser@^4.3.4": "^4.4.1", - "ws@7.4.6": "^7.5.10", - "@metamask/auth-network-utils": "file:./packages/seedless-onboarding-controller/auth-network-utils.tgz" + "ws@7.4.6": "^7.5.10" }, "devDependencies": { "@babel/core": "^7.23.5", diff --git a/packages/seedless-onboarding-controller/auth-network-utils.tgz b/packages/seedless-onboarding-controller/auth-network-utils.tgz deleted file mode 100644 index fd22df00044f32f4c1949a254da75beab758f16f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41285 zcmb5VQ;aW8(EfSG#u?kTZQHi>9ox2T+x8jTwr$(<|GjT^lT9{zv7Nf8RQjqr>2y7x zr|_d7|NQSlzUscz+8lde|L{Gb@@zQKU1NqemjDknX)z6}PZR*o5dM+O6%7gZV-3{I~7V z+Q!R&_Fbp#i-wNAs;&<8)!W`~@!Q+p)!rq8rmmK{qK>|bo`yDlu<&rPfc35))wYee z$~^Hv@U0)kUORcSwR`kVelH*R#&JbH%FNunOYV>e5%wMLeD5Om5PU?gC>Cnzh~?_^ zKzZ>xZYbd?>Ba(i$a9rIVI~<{=*z*+{CGh^A}+}V>4;={#4t91Cu#I>Vu=ASnSbH6 z$}#?E*xFEUj}|(ZPrWnimeenVK~FPHKSNK)(w#wYlVJntNp3i?@p3|d1L}b1GHz#> zDJqFGtkti{!GW;&PQt4<7Ha6W?~OT;%|8zDeeyLm#s4e0^MzGr$R8}$6NLUt(!2`e z#mxM=2l0M)E0_)uM8K^LDfT|z%`wGKdcNMRi1*xtU@~Sl3rk4zK2LFTqKITJ@P`R@ zfhICe63eW}H#eb(1v6fLe;*n})LrqBglC5UztIHI_iilgiv+GIsd$$gaxIFP9}`E+ z!GG8{Jxw(y_}ehuiuDBQob28s{p3g(4Z@u899;7)AUh=O?OvE2BiQE}H~yLDBJ_wy zrYXPBM32V#Sa>Z)=*k@n);&&c0EXh%-q{(Y)I~Z3CtFhMp9u%omAI}2S{MJ>o3sX% zbpFKIOAzem0!&;X2MN9&iDI_jpBw1UZwpB4Ioy&{L($ZrBmy{omDKg#=p;durxq2@ zrbR`WkA4T}E2+Z&PR?*)^gbXIltf~2FOfu?3zE6!!-PS? z=%6fZkcU$)XkT)Pv`<$NFN6la6|w!BL}Ae`IYhjOPo|rMA4<7DV*P6>dS(GzL?+~r zf*%w2V9OKlq~FQloCmX1{I#*3TWZiNOz_p3MJN4z1IhAZ>v-_pY=1p=cb)glJArGY z_Lus#=Go8E=lsX{yEp3eeTMph<|5PqZD#6i{EjImR^D;pjBWhk-~sDzqmkK(XgYi$ zY^sLFiXjkR7YPB_WBuuWmjo+#;vygT#PK8`2YyeA8EOgcc+Y@9q>(8p&^dnRNXBVI z?U{;moEOLF$7z;@m$V`12aXyaA1;5SoSa8e zgoC!j6Qf}7MH2b%TM=P{fbX?Pa0uXkwf1ODCNI$Lxh59}o2cgu`Wv=Jt5e>H9QQ;- z@nN4FhBt2i42zqV5W`9*>giV%>`N&c5kFi$QqU_FTQrVn|@Lm_dlCB=O6cmT}}=HuTN&~S$&?( z^Jd=0rc3_MmhPs1vRb`8ME|_%#+q_Yx$C%W9<1U7Lb}RxW`Iy$x|$GDr>QqKJX#+w zTG$`mPnYSE-`(x<6dnR^dN=OkbBK;Jc0 zb!}|=kv9GGIL+NdZtrsb3FO(?^}3nML=(>$Gqa`H$)IWc2+7&=So%bgv)PF- z4^DjeF@D-l-YpNApB(hp%?-B1^dC5Mrk*%e>%g1WcA(S6BflT<$KQJx%j?N@*Mdof}KLqjk5WEx- z0s66nU!s{hIvd`SjXfbI{xw)vh#tW;*YTX zi9a!XT8cBgz$<$ck&h5l{2An+;#_?gM@ZLVwKA#1Jm??@9Yr`p~^_X0}8cv0gFKYo|Ud0kl6;DfTP_YV=k13~) z?Pe)sVpQCO5&q^z5z@OOa?6K^p?&f|q6WrSj_{AELBdINV&9Uue`>jWH?3EUKdD9E z9Fbnu3~_}hrS|-w_{dJx5QByo#hBxgcyI$U7M>iMQ;hIRj5$X#69WX-xfYhi@kf-0 z^Lq?32~PFS6j~~IIV45CaqRgFtx4>v*iOP~?13!LOH~J7-gvO%Xz$*`XYi5sK|awB z_Wn{%nHNPA>m_tq0-W9|F7We{N5?0MJkY8W)bCMkkFu#{w_~aAr^Ju5d1FZH1kz?c zW_Z0Qic`)gL4?<$3vb#?N3IxQmhnM%=RxGOlSEsd%ji2t;n@-U z=p(4(LTjjt8BCF3MPCF{oV})m&^g9>0h%Nzg{HjJcjeV|k&+nB@=sUk_e{{A-O+QB zS~-tqrr=RO60p2Qgdh6}%!~v+V<>?{RD4uGN&4`@YnDN?+S(?u&xUgN(y1u}M+TQO z<_idihhHWj{JI{+_dCRjN!Gk134~7hfy@tx71NFWwO(Sr>qJqWaM6DwISWLo>T*HO zA$HjSsEx&^E>n{ppI8o2aKH=?>rvXc~K5)N_M33+3US^l2H1tDE) ziN4uHy%^qqP)+w#?L-(7vhW(um70q4G}C({c05dceSezgcByrR>zlO>?Kl~I3V4_$ zaSN=b(!L4LW{Rtl&5=gB39Ut{n&3|jp#dsVo`!fL-&46&?NC!?Id3p8xAKW3FbKM~>_tZdL+>x?p1tamB> z%B3<89Z$ZmJI$_6C4M*0e5_0uowZNd`GFD)Hs|l9@=;=^qOY@lou=`1$Bv4$Sm(35 z+S^!g6POlk+sbg%dPDXBVwtuSSZ;m^PdIfsIU+*oW*m>kD4{w-t1+HI?0=@WbDg!8 zFls(%NhMm$iDndylm6?4K`h74N-!Z`oyRCU z22mS@4AKicSMw~#q652d$LEkdj%O4U1g~R+^wDu+1Hh7=ymZ1av>&@B8DB-ks*O-~ zxe)K;UyA&aN*N9TH0-dqX%!Bt-#7%-KV+jt_p z^(v~%T0R7UyEd5-X_H93%x?_=$3MZGnRlA%X^}I~moY)>15x$dfdzZEh%+9-Kj=71 zK;#jr#)vxqJ-}F!^W2bhh5Z)!mVA_-dIs`lngAt)3juJr#>w_790StWjL>Z@c|Z)t zTL@U=eVd)9>ExcA!H%ac~Jay7| zcEXm>4fwZj`V8_@ns|P^85EQRwA>{P7Xs@ca^rwOAMp<|i5%Pq*V%;fYCdhLPT#LC z%SuF6rgJd4JUy+fp&<}uq{eKXBlUSW`=fMBBu}Apy4Wp?H$&{35-Wn(7?HO^FO8KdvruH(*2?)Cro( z=w(`{_0K4XjKn#0R+xHRQuDe(3F~yWI`eQPNc^%!ChtC$nk^xv?t}yT*gx{(fEk`J z2dXZ=*(T#Vr-9jb!F1DphxT(Tta{A?mgdK&L+FH|^zCY)m@ zz561^T$~V(*P#?p{&-@UvyUGdC{NV9e}Y?ZpQQM1>v%X$9)4T_q9L+mPdX1`{WS7o zmh9PXC_vT-axomn?@ko}GkdC#VuRp=iX$<4@cZN#A*7S-(jbMjK}79FL92LCY29^E z+U=q4kR9IGg*%E4258?lO)6{O`Ls&E@2a_6v4E13cf*`&LJs5?Q)tZnzfgD;JWd38 ziS8gz-TAB1MQ;>@xSfx=wu?F29cKL(L_$x`9cw`+LC!Ir1bPl#_9*w^Da_Q_THnDi zgln%>P(I|yE>cwoW#4EPNqT0O61hbXW%B7v;hOe+3$nLb+lXoIUSb+eZ zE6E87{6)$5aT{*ESst88yYLW$OTt_5^2>$mvW|bEP`2uAYm5WkJS+H4Y7L;+jjqaw zYQIP4rC)ZHnz$e6VNxDRMW`wRJ37gSGn-LDg#*Gyi964-^l@_?qBA$AB0WKJ4F`}e3L%Q;?T)`CM;{C_56 znssR8CoaOXE!Hvi8U2J&zJq9+ne82VK$+N|vPTh&?qzY8-WWw@3l?hH<&F4ug>DP6 z`ynz`rQvuDh1nCa|Ne4Gni8X|V>c$qru|G5J5}5{j~`V*d6`w9k>(^ZSwo;M(u8>_ zPrdO&%?NXr@wWANFr%6%S9LX$EJzQ)ZUo`nKp9Sc-6^UAWDMJI5J1K|+(@po4Kts_ z>^t#E+c5wn|gH5OwfE zKM7aGujvTDNO6_f$iy`Q{)oxvKk9Bz_P;rr8OSQM0r`tWwM3- z=L)N1e$(Tlh7_%06049zYwTWBq%k`T8{!mRyK2RZB1Q!Qgzt|P6-l6MGp7ivWR6k# zEj=Ko7^mb5eZKPpqkk3}TckwT2J0Y>B#o?NI04TwKmH`!tz-`7-W0{%bDymn$4+O? z=M%#@m6UlRb%|{n55+9qDJDkeE4u`Up4G~sml;3x*dN*=1GX#>`Jw$cx3i!cm%d|(2&ugZ& zJ?y(L@YfheM%?eJwc8=hHiIv%T&9yLqmRHLCBCI2r9hi&rF=a)ld|wY8{6+O9Z5G zV&9=g{h0yjI4I3#{kOl~hTUs9fnlicVgTnunl9_W=>j*nNtRDFUy2Cy3y$xMK5d)T zHIA~n?~+uy7dmEl;&3pSe0W8oiW9rOmLx~)T{dbR34z2->p-2cMJ#mOtF4u+h;SvM z&K_{Zt50lIk^bhCHvVdMg3cewHNELa1CHo}L;cr0n~Ep}2L0X_+#LG%j*c2bB9T8fTHKhgSV8= zE$7$PR)OzU=LRx+MDZf;JQ;%`^+6Y1x3@u1Nb*1<1O9uY>{45b}{TBGc_qcrh3{ImKSL%CShUo@Wy56rj5 zY_&=!0f_Gss%zHg*8&HKEQqCFIHXqA2P3ZM$>;u$GL|~(hWWm9gn}y2;xV98BkQMG z+Ej%Xs0}~JqBjj}ktrf@#?&D9g#kq#+m5h%(vpG|0mfVa?OWg>nDHgZysO1&3Y)-N zT(&%ithQF&9rFv=V)(vEbYqQAs~IB`WGu%|Vo@1~xOADXraqh=za=x1CQpGx?c3}; zhQ%`$HV}n1{#kxnNKX9((t9Y^V`TrYjf|$)v|n@vVcjxp!v-BjNg0N2)naF>;-a(2?_+h_6dcO;A{#2Zvr7f5eC zEJ-M<`2A{K@{g6&p7PH4AzEs5#Szlg?>RRo^^=VQMg5jSEckEm z@MNNYv86U~Yl`H!qSJhsH#IG3fC;xJP1M9_l`3b&1>*1Lof}1XBq7&}rG2dMdwR@a zYy(rMQoXG**4^?`| zR3I)YMAIWECr}UGMqsZJfwr&bZB8KBaPQ3b!j@Oa3U1U&cS z3zMwm8GXcI>4m?U>^sE2(3;jlIeiz0L%j}Swhd&a>N1A8w>zo`&91*N^Vb!0Xy5pj zSoui5i0Br}4(Ip~jbSo~tps7?ZFJV=HbDLyB=7s!D~eVMUHffSsp^3q2hlovcr2DO z*u#-EdVL1V=Ai!4H0zjCzi94TjZmGnZy5{8(lfig|ta!1Zy z3BDt7rG#aHbifn4+bAE?I_qK$;8nde)Uu`mr|Xb-g6m}2k)p(H+5e=3Raml9{!n5_ zRyOCOzlc7ibtS4s8w4?yaZFuNIY$M7j3sJsoVjc_ZB`=FZgGdDN_~~zxM!Hl2+&oY z1G&H#42h%8gv~y+IIN)0X3J?!Yo?UNC~95~6nJKxH!)2@K-ahViQ>Z)nfAUl%Y&^#QBt{G*c{#$TFF;?F?Tprr~4#yg# zPd%2?Od+d4fA$%Q-GbMRY-*X~Y@4tbMJqYLy8ClORB){0C&?`hhLl+=oTfwy^$IbQ zx=RgNb^;;8vAv-NssN{o=WA+|RU99vSS=OVpR4qdUlP}Dx^zf?Y^kWcaAvP%phKN! zm62Q5w9tB9-u#Dh%b$td=H99I+UMb1`mJO2WyV`-mO*sa?VT2uyzlmmn2KV73J!x( zE-p`+R#}JIjdlvCH@@-Q0b8aY9{XO~wyARKK_#PRpu4*DzaCPiBp-?6J>j=1%T8C7tFM*;Hp=;#sForM?0S(@Lj zV!?PWqbMKStQri4|L2XZ2lq~b0%Ecf0)ISFE)*Zi18ryIDjFUWfuuvwH^lSaMAs=u zkiRjpmM?zR?hra$QqzpHlH|zEU#cgj&Us=7SfN;U9ZMm>^8sKaiUv^*O4DefBC{kx zutK?ma(ddw>pqD6Xc5%qUpg?{bcOCqHJ>hxuuIeZxHB>h=P;v+&5P`^FlII=Ekp*< zNzzpdM++5E*W9ogKw8t#%Vu57dr;Ds;8_SD7Dp5Rz?yck_XpB_gCQW~5#fVea1QFr zv)ds=A9Kd;nzk+`1bdg(^=mP|dNgPU3JXhWeucpXjXU)lldBYZP@<7yJK;hs8Rvv` zNGw^{BU^`ovrO!6H~Q5DF;-eufMTG$SZ*L~sdNcdc@3d;?fPp`Je`;{Aa>zFJ{V)d zX$OjPZl-`Oh*Sb{n`$8Xfd1R>@jP{;D7QfJEn4h3HZlRkOBpQB`9Oj_2W3cpd>03l zV-n)@B$g{_N=+cwcm!?h=>0;PQH5fmWZw|LXgQT{1lATpXDJPWtkXDmHy%$~6PuBr zc*4V4dSo*wie_#J*C)X{=z>VB`%WGjO+zPyY$%q=+=b^(l65PQ2niK3_Sff zvmS^plGA|&^1yEm6fGsvDkf{-Ase2$(hPIdTJRDfyZ9=ilql_&WI{V6FJ;dbiqisx zIdHusu|Cv9F|jO=-aL zx@!p((zsm=1m>d@3#nf5G8Vc@u^?l_--?}!z4(ny;ID$0>ENIxJ`9fd4KFxcMK5kf zw8C-k)j;p1Pu+lLNL2q6Ouav%lFe@ZN|7LpoiOuU5eI_2I);M!v4?g|tgZSQJH=|G?f8Go|>ii4b;R`sXzEGGUtb1$aksT^U; zqSixnN=$?7eN!9}ACUkJf1Edn+OefVdM4977Odj{+>vGsIgDEkJ5tN~E(H8H^eo!$ zaAG9Q-d+^FlG~nDY+wf!r-)V+0L*lud4rfR-z*|ch)GSWh_RvX+UIwj(5=Xab1Xv@ zHA1Njj?8-$sPXI=Bq1#!Wi2zIj1=fRZr>Q$V;3(>#x;i8l>d?Fdk2!Dj8B@yAVhN;YKSX8P=j1L8`eL?cgsVg)By?9=k#QCxL}l zFBbn?0r>CEOybO;*B*G3v$GI-HL|c+WYX@FV4M{z)o=w}<|h^W zHj@`*;mISRGC+w)8hfJgfsb$K-7jG$ttTW3DPkkz2~==yva;n;GYZ)^?!gbD(6tn6 zhHFSKhx!*X;d2VVLNwj7%+zy&i66{?hfvs0+u*+6a2ZDv32{&*v?&+U+~QQJe$s#= zea{-dio&&%3k_%4Q#nl=|LKE39f36(ZlcnBHn50lX5Y4;E=rOSjqvG9L?Pi0C!9>0 zKI_y(p#vK^fyjottjbeTj;tBH)!|d-=*=tx8#E|(@bfxrZvCJakWA9BvW?`&cI&^_ zTLf@6jzqs_}2M6DjKc~7phjoh6owbV7wlm54 zshKW%sY;qubnMd?X<3N=Dg$V{1IJ{@-R@J%rN9>VZ&|Y8+Eb>b99k|-pR$dwZT3Lp zS3WV9;#>=l&$jre`xo13aa2&|dV)-K__D6A5>^LVM_GWKYfS97?Cq=h1)Wc$IO61) zVp&@9+Dq3s-=;G6no)-`@x(_lH)WYbIZtNMNv`$b5AN!k>jAsD9Q`9$WN(A zVEf+VOK`S*fDYT-g8pf30P*LLIvn((QDGK%EhDzyu0aq>q&i&WD=bbL>|C&kCQifE zC4M6P(}sgsPa^(hPO@8b!$|~yR{R@eHAF9ED7fxS{n_L4GP}hUr@5BzMH^|)4a?$z zEP!lsWYeXx;6NnEBfH-rUXXjRPdHZN6obvYR>vG85(1+qrQXvt`QOdV`7RHg4l8H2 zwlAI5Sa%Pmhmg?q;Y?rXt{WytO|<9g#u5^cR&9egvvQAU5QtK%Y!j!G>eS^%DJ4m! zLE6crI6JlKA+@UkncWI2aBK>DwKxCJe0{H|eZA81gtO}fH(E<8btZW4Pq&Z;r>f;- zM3169hVX9P>aiVxfU0B~9QpejoqBMd5dRfAynyP(Z}+fg)qf_PDrxG;)?YUp8<+n| zQDsy=$PfKCqW*<{25aV^{&LCm|EX=G(1kGRn#to*+7Cj@C$m-RT(nCw?->#hjelPX z_4rzH3<>kBMVw&u=X&lh+Z>E#zJa5kjb1Dc(?R;1^}?bc9D-NnX$G|DD8m|&biR1{ z$%>V4|MBOqj$z~ZoG(q|LO^I;dkn=`NH~~aud0^mQlrsV7s~`PM@OL)US(gk)2L zNMiFsD~#k5GSMC&zHKADIVS%PnLnekL5iOEz!4#qFDsOV$Q{M>^`hb@-`qp>HO@q} zsrc+1H(dOYl{@W~GHWUDvKCnAz2D-ROjvvx!xnVBgE-MEcFUY>o+v_MB zDg+#bb~gh|X42!dG~FHxh8&ok^|Vz8Ghl=w;Ny2mIvzOXd4jbDHrTr+NkQ$#HioD~ zg5pnxE|lsJ5ppzsAVh6*4pSd6ybBato~v4YxHeS*hcDUFWov&PET~#oPfMlZslKl~is(~J0r zPrt{XlhReGKfR5ue7wIt^Xd8E#ICT5}KP*Q1H7VZa9J;@Hg8zNnnO6?K~mdy!PjF zW=j-SS5pd<`lm4&j8&KcJtPP(SQBp3Zxa*ubscA|{59HOU?tiE4;E8x z57q&~&h&56F+~haCJnNcL((yKA%uLYUENU~AXtIzqAI%3x>*RJ#F}+zkM_ELVfm>& zaT?%?XgZG@mkkxjZA2(7selKo2|pfuAKwCmgZy`0NidQVMlit?9u>VqjZoTiXW?uN z+zpE`5%;lJW7`HyicSKES*fuKKM73Q^?5NmT_-(OeG%DO{{&RKTVgyL>B2qJS0P4} zcTU4TaBXx&iiPj({;hsgYsk3fXzb2}N+17ri zh@h|Yr2%=REn@`EOy|pPgoVxzQ1pw!Cx?H&JbDCxak(N^674vcUQE#KC>afbS&hz&qhL`k1`EorA>8fC`Mk`n95Bh>5Bb3V9f+jpj>BI`r8a8Bco6EDoiZmJ#f(G{~YDW21l@&2SEx687QE zbqJ{ zu}70scl=orVo}`FuL14Yk=5%f4hW*Q9-H_xfV_bk%P~+(6d99F5L++2f7Bm5nNnRy z(34qje)Be9yL`!&5c2NmS~NGHb<7?`YYjDb368$v=Gq$qlXyrcW~D=R8yXvhXI%k@ zECy(C%-Ywwu3K&hh>8FNL$rR^wj6?>tN-hL)}5c=F5KnQj*eN=HqYjcjEN5ThNo{+ z)3aiAQ@2HmbQ{4E8eMRx3IAs{GcJ5H6TJ^AKBQ|9)}Uy4d!<%=$yUwEZinH&a%DG; zJH*{(d)aBGy?ofslL$qHO@iOmMaPSm~sSv(^azXkV9t zo&!;)|B?ClMCl=Q9aGU=pw@X*rDdnDgn01$;8L0InAHwRgK2;X@j4zMHJEQ+Y+VudV0L&U-LX>@ zQS|u;XMbuD%2oOWjylLWYQwKvZ?RbcbzS5QoIlTQZN6OD>{G^icP;Nd0Hl#Mv{>PY znm?qvMl6crE$5}V1L=3G9Cx9i@3JG5|6-F^Z?1|i)2~8Y<}Gy94vB#n^I6p*#iKcH zST|C?q$_N{@aF#z!fqMcY&~7J*t7rh+*&f}^OF$)!Xb>svHv6dCWVdkB|d|e?Mqw3 zei7T$r3%lhXKC4i%3f*csQY@lx`N6Q&>2u;+l#Fa*UD$f{Gid5FHyrW^S`j6hzF$= z!P#Q-^|_`|q^Dq})@aTTTRBzn5#RV^2*66NleFjm!8^RCl`|q!&5u+WMW@y~&T*~q zTUg|x#wu0|JD2d7${dpjyaKvVz!QyWsk_C-PoTL8J|*bDrLDpkp4+z8JQQIzEdVDW zteRhBdB^lkibDHWZa_IZ9#R_!>04dro2yR-r>FlnCM6)bo~*pn-wtw1c}EyNJfPyJ z^Ws0euuf$FNHu`l0krSm5Op&4_@PuWqbq`B3a5fT$!ubk)X3Q0L8aP>ii`cdK5L+% z!mm?1F0K^r!LAaa^#s?E>_cY)cxpO@u@^TL!b}}(vG<7vGknI3Gr^em6T$x|VX#-e z(*K1jvX%`hjEe+W^$0A2*GI5{(kE(NNNvI349QlNQFN?(lhLAWqtq3n>`_vgQ`ss+wFi272L$-?@tbq{S)a8&H+9DIj<|9C(7@$!P_M_csBTZ2N;fH!K?)c zo3F#u*4MtWr-0d?hwfptk|^3QK!xgiT7rJnJ8TtED2>(?o=autrS0!$ZY-|gtugRM)8$IS*NFY+ii>ggZ$~7rL3B~ zSUAV}lVkyFP)!CVw+QM#RNbXkui)6XcPuH*yfbg* z8DpKVN0f%Qr^8nK>W4F+{XE~oQck*XVZ4q-&+VxZ*!2&2z@t0JcUH*nnVL}`ZUOHXQ0UiwFgj=Kcpe>uU%|8fGt zYq#v>Zs+@TY4p5q=jE@Z%8dUw0WUi(_NtZ{C#E2HZ?KC5QJD=n2YZ+f^`#Qld80wM z>^axNz5V7=uimC{=}FyiEggNb!G4!99aWo>6*(=2suXGS6Q*j9<48n>^X{rM=%l3q zZJiYmj{rQazOZVD8mBy%V?X3{T+~lFD0W z-eky`y7hhu-8NlrQ+gwrELw5HN;m(*%7Uq790JCM{#+q*j|A%?NumK*8F<=~Avsr~ zt<~}(UB)2ae5Th<8Zk>-h934V$lt4ZYFgBVnRAw2VTH{@5>e(|RwMmw*^-_WYa*^FUJloyscJdztulw}PpdP5d^b<#y z7nE$>lhWPcN&_x^TMFbwiRqpzo<+B)u3Ua#$e8Z`E^l2yvb9puIFQzy1@*j=avud9 z1)OaztRC~vyHZqsBXS|u6BKR%{#W(SZ22G6e;eJ3D*CzSb@OBcGqbiJ4`xP{^o^EP zg_M$X1n>l+5q($)`BTwD#k)ZQRNVxyvH2%fvn6kMtfoycp)1g@SDVZm`ENeK92UFw zD_%3VH8#^wJm-94|x55e&Ax3t7QOYacAThcjaF^emNl;y4@cII+cGe-wXrqz&X6;@Cj* zx$j$JVSMhJV0K`$ovlY-HC+1P-Nu{wh=1(%&yN?j{&{jY*b{$NBkSGo)6pvE9~yWC zC}4x}@^lP;0UG8|vaSq@=+alVR7Rbr`K&*}h)kRWp!+U1Ujh=|B{AKxcos3=Erg)g zf9b*gE+Ok;i`H{2tXk9tf#?YG1=xG$%fJ0YyiAH|#=Tk0ZI}((2hYZoTiBr|0w$XL zjn9z@IV$lFww@X-_}i$0g+l06P=MHou71@E*h8qqqUwhb?dH14S8JJxzp$zqj%6Rf zZPs*DIuhi)HJJ;dIgP1@*oL(#LMU`D4^M{Pot43J8Im?NKK7?Y87RYPiHAE2jt_Bs z8~uaUIKcUUKU>_0ItQ)k2&T%x_nA1Q3av!ZzSc+1Vy4g#xG6-|ToM2!qhax8QXZ@} zDkC7|l#8YO(E1lDs;L>AtRQ!vD?hmQ3%Ljh4ZR@30BRaj4m*wC2R%Cp**-C#-V(YwXuBYndB~13=?(}anka^6V6)r zA0bzBfuaJOj<78J?w?f!7dM{j0=lOv2RPOrssXG_M>X@R%)L<0)Q_`JQ8{O$+l(#^ zggpi2{5oVctOrzLX=W(3gt&&O;`Ruh*`xXhoHo~vn%=ic*ha5#>4%@?f zq+_0@a9IglM<*HR0+po!Rg{RR_{f7v*#?vtN3uVPEDtI9DPu3s5e&I= z3=TA}2*S!H$u6?!K!&Euz789}?i$^*`oqFd$x|j5$5odyr{cwf~(y;W^Mu4|U2F;jNfh8staO%LWYML-XncJvZS_V_{_P4FIEMYf0fK z*dG{kBH^4Km6lBCqn{x*>LZ`lC*wUc!cVi-LE1r1lK6dE1bLJBi@izQVCp1P$?7_; z1oP31p|YPC3g&WbHEbv>83oa^ys?Y0cw?)x^#lh|cPeZLR52pG)Yik=RA?bjE6h5E z*@u>rYDJoBSVj!Y{WOC70OGD<9`-5Bl{8u8GMLiO2+@Zs)38Ofgp`bom2wjii={)8 zRG)l;aG2%=Ytx5|vs$|_OSdQVsb>F;i+YpJy(Zd1c9rX(49Cib=9NoP(YPd`nQ*oP z2pPGmr=>tgI?bX%JQXt;q&ggz_<)`YE$W}MpEtZFEZPq%vWS~;hw}U*<1`UY7apH36gCwqb~~I(4PV+?#J>xGZ)wzFHucd!Q!cj&t3y*X^dn#cv-Q7> zU>TGWCOP;2a6x4W8Al2&^uiFaIC2l?On@Ytl2MSPoq(01LsnFH=>t}sU)t%a^9;9k zK#iIt+8O@@m~Osfp%Bc`aPlmdW{;XiS)77fS|lOAi}SA+lx~>scR3b1VO6aj&1JV& z>O!O_>ziXP9fy*74{7l*vXwCe+5VZV(3D^!IMu!!GYY(&68#2G&t^Y70Wce)GL((T zfE(NJE@>)=zK_20nO9clPGlRg9Btg&B2;v`}H^>*;e zV*&elP&3Zk46q75-hUCe_lIZyOG59(BZa4*IQKxBUZ&{rZusoZ(!HX42HA`&7QA^? zdXQ$ZC&U5$w%9~|AWB^l;B4Xxk_zWVBl=&aPBGKgBT@87fG}+pH~2+x1)sLMl1KMm zgdz*Om9Mjvz2CFv%a3)U`1*~6wP8WdW;VRJUMew4pfIiS2#nFVahFm{wSJWA7v$#EL~^h{@0W#H&BCW0-8~H165)kv3)OuOq(8$ zSBSr)aLIekW@=o-$&AE?nOVS39ZqaNha|-{BoKCet&q(pI17xBGuFTjkJ}2!G)z~G zOWT=tpfPA3EZVvTJjnvIvOPRV?)u+Uo3 z3|=4t)MBhuYabD1#mBkFFnc?d^Q7o;09P3Gf)*z?I0(IH(09oP8ZGJ{B(tihLr}i9 z+6cj!nyHNEK6pk^PSAfdWq7O4Qm66I>t{bodFo3R48DfO*78jhQycX~`g!V8iak)h z6t&DA!#a{!jR_?>N}O9nZLC`d)jjGn048&1JsI62s0?pJ=jo@Hc=R->&m0^xgKEMi zL;t%$7M@7DBU$FrCpQoMz12BYF~&rwNf2T1ECn+(r~LXk^8I0$FEykk(5F_OAY_A> zj^U^dGLIp>M{P9F9H`ngBzvv^0OnY?Zmnl{n^~Fs08ByB9XBFX-HE3onsLWLBvdmW zx=Ma%<+_eEa0QX3^8(YFp{|N8-RZRSN|%I(@o*$5s9Pg;RPK`FNmQC)=7DEx=Lv9D zL3&2c7Y4~Gp{5GR%ppUm`#8Lq0*oOfK2f768oQ*3?_XXtbsmYQMS0I9q`PIbz8FvN z0=8_ayi9Ezt4oc!WQtqqScpM}SWNMM0;mM1YjVI75#o-PxMxm26q3n`vinjvb%ACzQQ zC7AuoKMu~Ev5b9~7x@vo8M=Kh=!o^8T^kAdia zWCFJ|Q*1KEz(?G74~wm#cVvp_&uF-9)Y`>=dX)3JfxZ6^TkjYgSn#d=CYgyfnb??Q zV%xSRwr$(CZQC{`wrx*rYrpxQbKbi5)V)>fL)WhEs@}VHSFe87TEDJC#?#y***PHB ztv#J#MzhZNWezWTaSj7AP7j{WmS_ZC>@F023Pv4U6Ay;&IKmj{??pj(>}L-k^=LPB z4YF{T5>yKnLPT?d1Zoq|h<2C^WQC#$H;y(v8usrGRAh#FDnrX6b@lLNcxA%Sj+;8< zMp>~hWcSH7?W9s?vN%AE1N3w&`tb2J?$@f4s%#}hbOooOVb9hDAeS>!IcN)6oM?$) z?M-|F%xZeN9|~|GL3OO*$61SpyRPS)jdu>i(FFy>6v4WGV!aV`xi7N7BQ8Rl`hM}K zK6h6WHWNTs5wKCc#|Ckoo)$6xgu`at*_oR*PXtlhONJ=X06lS;6IkN4Zkx@)v>}`- z(gZi;&G}Xa&X)(XS3s6KQY2=ut9?n(S%E4&0K(vP`n^i=x+h;!(mt5W%tQR4ub3$M zeeC7{)N}=gXfO0zpInE|+Xn1ZO_stov72oG}*#OhQu@~-j zXWI-^KaGN`Wp9tXkbpJ;W3RAZ9}R0Scs~uE^;1?^qoXisWH9ZBCiCEHouKYmk{}Y= zQyEJx^Lb#_O8s1n;Ko>U5(hfH^?vz5Z=3-n?0OWbskybjlc&Q!3Ep!fYt5uz?opf3 z6gbwnSLNh*pEDHXMWU-qD6vItpq1rWQdzbk5(SaX{7TM_ruEV#V1Cs-7mCCiO;1@8 zBbv>iK`F+<{j4jU1|h4D5OSXpsUdi2XCnQ`rPo9`9;TVJ2PQqg*Gu^spTb&v8Pm=FM)&~8n)dzgD=kymvqJ~9b0qKKjYx8iU3xJK)xVa zL9-6ENX~pOt8~syt8U&9xoJx~LA<3dLz<+JYTK#)x*d0Jstf6XrF)A8Wty}lH#UC0 zf6(PR@e;T{>Ug2f0>N|mbTRTOs|6ZboqgKBR=R9Zhr!bBW$I?8og1g|?7E&;V0vTqmYtg$-4SP1SBg-GZ}a*NuLN=RLct%=)7M45M9k#PVMjj65diK~Fi|lZc0l zxAnAl#APJR3-5FKBk*zZvCZk$jr`_A*94S20t=rxYk3i(bH<`t*G74NJ`mmrpfu zWOtTnr0f)k?uPNipv|;SHN3Wi1dQ6Q3zE@m5I+q}zr>^5bqYTT&9{s9;5+{n>lHDN zvi~RBZ<#uv1|?j&osi5R)vvt}^zeWu*Hb6Xp#Ll$n_x{h*6Ym@WWz* z)#i91`x!8Cb4vM%xflyZAzpSF(aT!>gUPFN^vo9!*C;i}xEYo^Z-p?IbOrUCbE>~v z`8-pF1Xfh2tj$b86~*`X<`ay)am|0@i%Q;3SHVXCub-up!tShE3oCvn9viq{*~@C` zra)VjN7XP>L~QzskhOk&BI%?9Xg02=XspjRicucM@B|| zrew3x4{tr~dT~b_iD1)Xhr-0e3GbzS&gwX?=Uv7*orAXYP(BIcP)Dpg%i>3$=Q;hA6Lq6te2nDd+NKN z(_{Ca|2Da%?s&ry&2c|=M~6kc3Q!&iInD7Ie6z-5T;umhtl6zEXSkim?HwEtAGKWw zNG@BQOM#4)s7IH<vDC-9tLGmqB* z>)E28g+<5{_+!l9C|rxoHSERXTX@5L!_;9jhyCS&!l| zNX-`SA*;Mr4(?TK6OFn*)6h)=$+omQ7uUnj;ym-_QQ=scfBzOd+3fgFggY*{O=o4T zo_M;h>o+I(n79p+i=M|TysBln8lyxu`ghlq0=nKJBK3`-p3-f$tYAti7UB%`ZVMJX zS;X?7vI8IDe|*{mDV@svStp|&Udtrjzs*L{_CWWO!4t)J??fMfkZ~ zA12(^6saHAx<;YwLCrj=pZvEzY*n&^ztYQIqhB4Yg?!?tlqIA^hLHT$#=_d%?`pm8 z85z(m2G9}g9@LD_?l?o#27i%dVAU)ar431C`&#k4??=cfSMgX<$|kTGH``va@l!s0 zBJy~zF++gH?q)tq&zK^yHLZ?g!%_73h*JQYgW~UV z9Tuzh!_axTSaIK#i_*Q+G+hWtb2y!Awa#vF7ruSz4Gi+G5-N@x|hHA zJmdiuuD(`Jw3-iaIMH3vyYRslK})E_PAx-+%YhnyICQg|m?5msPI7RA_|xC0Cn4dj zw*u-uO#oIm+H!8S1f4z9(z)OL!WDMX-Y~+Jmoue@&VKbe8>}y$EB5a9iuuwx*27gc zKWnUCH!k;+ffk65m}#ebVDaQ@25!Z#fFh7{3T)SZ0!Dd%zvj5S2rQR8)4JR#o&ipI zJthCufyZZfm;|svdd1GMd*V&LqFsODT|!?jx&5NSXe4f%mJVxB2H9m%G$woqzliTRkRF`xn<_7!RN%$ly3%7@E|= z+W)4|WOdSuxhwZlxPqrairZ-KhJYqgc&-rSj9SK^GI#jZ5R~pz@yB_=S7%7^S&~A;uNWUMw(ficJ!`Z!Uew=S)}kYQ{XTn=wkKoPHxf0QD^=x6(m=;*Q^viiO^H1;f5wTT*V8fD{ApcvsgX5~;G z#kjC=80_Kmy?Mv_tbaaHJ;whyzZ~G>PvwKSD4k(Q?HaD~kNhq=qa2A&*9{NL$nT8l zlC-mP*GLay<>qE*H=9pty9TRlQ}Fjp2u%?i=8L@%4xz^|CJYt>S6|E_;d&Sg^R5ED zlh91yU7~?tbOu;CyKKC~3>tBMu2b;&%Pa$&u9=@cQHbVNAffjLKXTci5?z*pR}6n- z9Ca#1QaEkg#-kO5!2~S~_R6EinJGq+9LhB1UqPi*U#c<#eh`^swd^tL+H=KO^)o8N z)LgyKbtK$f7$4?&KR(974+=l!ZXy*Me>x+?jIN8C_Yt^E?xF)PL20>U;hP4>hnA;dWHUpEiCI>Aiu~>LR zk8W-*ji&W`*3WWnVZmRDXj2oOL0qLA5&Ab+*D*Jl2(|#yE4bxPMpLo2^a0#75{{pD zuCjJ(z!_f2r^`49!TzOBW#!sGAC;7);(xrC2X$!Lmrc*fo@h&5eHN7++qF7*l@1Tf z(>*Qdxs`zVi$@`RaouGU{b~=B?U2iD;yAEgu!-@~)2f^ZJe54ley!s*-~p8H)D>jr zQRVSh=B@oJ2v3uyjPJknq#8>P>p0^JH9SL0x$o}{vE??C(OHVW|1I-CAg zM++ph?DL8H#HR%ggiZ$N@ab{=wD`*W>_`x;ZskoKPK9_+MB~&3-Hl$&5FNs-?z56f z7Rv;mt4YR!-l2k6=JFvc%{~uQvPiL9je5;%dXvU2N!O*col{Wqd_t`5^WJYiL+8PI zz%^~rIV@Euvahs$P96n1xB-PwpqXP3=*lRO2P!;3UHk5M_d?;8L9-+XP7Php4Y2OYqswACcW#$D-S^?? zc^CR_klRKx0@0lfB#N+a*#Kv>kNFt`qO&(-K`GLQJ3CP?QhlyWP&bqvmPdalkKxI? zKzAkDIkqyp)`?YYbEMn&H03{#=d_$ zRo|{%ZN&WJh12WOiSzuisldhN_d)9fdm}ve-~7O+6uC?b7o@n)YXlpjv5b&A*yo=$ zHcZ1UKO_f-qV%lu9a_Au;#vyGy?lCKq-RBD)AR)gQ(mi3*{${^lk>2XNCg5K-;pMu;H zzc9zVA~(wQBp4dna&f<~*at;F2w|JA? zJFlia$sWp{W=k9~xr7?8Jb0}n|Lx!vLB{S)CqE^~n$7tUQ(9f!hGlAWzO$OhFk&fl3iUQ?hZO{Kaz7)>|Jo@GilD+7>;3 zp!<$9<@(y{G_gWkI5u? zMY2&ZKwbEQ#Tc3F)3lw0=Yw!{m?xKSnlz`KP>sx*qKVrPG|F1HHV>2PUwlH|dLk?$ zgx~*>fA(*3p}y*TtmE%9^KCp$e%1N?Sv)=S2sKCl+Ba^r`gEho^-((F_lyg}LjrFi zuBRn8Vh63}riha&TbPPwp1%GH*A`HdI+ zeYmLUYjK@rpdyXrcwPPCx zdPt%l@3RnYP2|7GdDi~W|8>ukLqYPZZ2a7reI-D|vx53r_a-*8sNYgMh%c&_ylh%~ z%&3@=L(E;E-1(7Im&{4Qv9iADv)d4>uVKg<<|6vRLw7_Au{coLon}BkvBmxVW>#f% z3$P%9Ml}IfH7ozoie42zw+9sn`Al%Z9GxA8NO(z{Md5eZ9k@r?6@IhaAcz)iWb)UA zoxsh8J+YcYO{LM>Cuohz*+T&|37PL>VJKOQ4EDcAWWug>LuFrbOI#c zfK?cQlIhgm&Xwy_P)n$2;CS^*kbvwjxmLQqL$Z3KhG#(EgO(ZSNJi<+PLe%hDTYG( zgQndzSCmhdEa0EgAKWmqC?>P5eW!>gRsH`1tQY z7z_Y~_si{+C6>ms*c9$e)OS%acT$nF3wae~Da}0#$oEAQZc`8Z<{MDBRtzy1RH5Hj z;CVRz?eG?OL;%$m1$4fCM`oOsQjw7`K^Lx zC=6TEQpU6p*|m@A7A^P~MjrX;ahqPTVjUc~&-@dd#co^``O?!>@S-)+4<-9>oo3$VF%{9zS< zifn$;Ph){3i4|^4B*+&nrwnIM%nY}0i%QhosSC}KKikO--({Cwst&~{;&6P9W=7@y zTVp~)m=~Tl176No9q%6IC?>yk*)-4#ZXW6JUw=$g!*%_tL*h)79ET>gh62+6bCPKtSOZh!pYRKqqDTpM)gl>4NVc z17n#fc~QyFKML|^5gmTUQP;PM6WzkjI#|aam*hA$$79N<1uJChsTs2|GnOjA+7R6$ zvwMZuOTT&W96zX9Yzti-K^E|Q*1aFyYc;U*Vi9)*&vBrrXtOu{z`Xl$oD|*8Zjd2X zReV#&B4L>LH^Rg-DWl(%FF=l$&o3z7bVT`hXz*?1SISjEv1ooK6pwFT)1EdHO*+uC z2>|cgvGMO>*^6xoMIkLbua0Upe6x#7$#zj1pOoEpN04!=9)x^j+ z(bUFaFZd*T)sZy6OOz=<1r*&nDH06!XZgz6&O3CGsgV}WNOx!DloOha%GzIs*6H!j zCQ@<=M@b`X19{ShaDEvk#<77;66P=pZT5k=Wfl^{wUbu1;hp>r*d;@R4h;Y4DS!|_ zH3sLNBt^11*T>}_s0tSwZyCorBUY^s)%ZCif4BLYN#b@={*Y_I+(AkpcaB`$JMJSa zMi_6fz;^!G-srulmd{fLapzqdYBMH)OPn=ysH^?lKq|eki!Q6KeB55y{{TJ}K=+O> zRcs~J&C_ih6p2MW;j=06Hr{JYlCoc)_7zcNK;fL@Rd-|}s`vk=rkqwOF-)xJB zV+dvaF}yQ7`Oa9FFuaiAD1FfC8(UJa6WUjm8l36P{_A71QxUz$@w-6?wes^k;@X=- zEj_BXB?odg&L9|xA~5z&p^9Z3?*b_;uvQeXmrX_yWeRhM{<1c6*2P5z)jYl%7f zS$h_(ggZL;S1*lbB(1$n`Y;C(Z@G(<3P4Tnn(XEC=p0wZ`QmDC0NjZ$`Rz!m^t%9` zrg?*RyxG+sY`%ljR?{YLH~i!J+kov8lrx~dV~wuh6RbFXa?qj3EVs;xFzHm))|K; z(QCYGvzbXzet@qbk1l5_n+y7UZkJUH6Y5RvSc+q+(4OWnV$#L>F8nQ9(nA1_8`_Y= zChT{%W;x_9wD(W52&z?w_zoG@^HMu*to-i`8a30GFS}%%dc}nbc#CN^s0(^_vIUWY z;!d;W^8XwdOcbYV|6B8BhcjAPX%i^Gsrs?BC@Ayx8pV-XDE&b<4rN+~FUpTk6gH$E z9)L|eB|_fJc^>ku`;&h6XNa2dqo4zkQ9A3|Vp9R}#rMqw2z*1vQa1D{xByvpl%u=A z3mew|Kxx@yDr;EyKN(s0rjrgpIBP^3S;3b|>9mWEDe(!GGkxV1FIw0}cV8TTJ_ydu zj4JZy`lNa=9(8``TXot;A3Y4k#q1bX(>%TZi%QeTq^y|T6qOyZ=uo8zH(zV?`~}Ji z#lYh$Er?obo1fxUUIJpf{k?K^A`1&X*ivFY+qVoqm#B6e-GHfizJsb@o|U$IK%Jwc$eSpSe#gKs8iozp3LRHOqUFU<5TFIVPVNcZ0%QlLwt z$FvAGsb@3k4IDG1O>5oei9_^wUlbk95*u3R9V1l+c@{h0xvzkBKtq(hsugt_1^Ng+ zp~KuZan}un_X}ujlA3#>f8FQ=U1;d`g15|dhU{&2%Xe4Ir5KiSgh;qrVTe90(!?U$y(yf4m;8%wrt_hTToq}`O6?cX)ZyW&x;Y7ooIi(!g3u%$X+YC7LIf!lWa`* z_xUKd|LJeTLmMo;#GJtLPvXNvsA-dIQ|?))|x zeEpYwF<= zn}>9p#H=>rX0w?in?56Cbm8fQLOwAz6LqC{ZTnT7lw}!8U7%br>?Xl$ z0;PEQ44H^FC)S}Zfv~6{Mse+W0PLaOiZlcr@;q5g`!V(`+&AZ=P&dVtJ?Z_7qi-$U z9NhOooe22R?Cvk8;{=<1vgZ`^PZY1Pzc2HMCTv2 zsOZ6Dd(%(OD0$kcAEgYt(-2hy<{T1Tgu7$*9J>6ZtN002gLl}MA|{ag z|4pLfUGhvJ)2tX`j`V8wCADS;9vl$OPo}mpN6+9U&(CL=z<)(h81SDH2QiyFBR`Y- zV^ZAz5Zu8{@Ms)k%lOcqNP~rJx%cvEv62P|ZJ;nQ7Y`sF{fi zz*{P`&4g7b)ztf5%agg*Nf)V?piA17P7}zEEvp5F7y`VfYB~6Ei+`-usLJYvZ_;3g zVm0O+%=uI9wTwemo}1(CJjgP(qC+O#*{{!x&+YeGywi&Peqcz{{D@Q7mZOo;@5^qw^BB$Hm88<*- zj)#oQI%e2y0n{-bTK_0&Ib9a3b|%Xq1tF`O$-B;V8?&RI%A`+Ztw8ovO+5-& zio~%4K%2U92>J*wqRF6VvD1ZX5OZh272F_FPvu!JFhvJXx zn4b;`rjkH}y0Rad5;(X5zyj+T1x|5*yS$nYK;pBl8I9^%M#gl-!IKqex8#VQdX_xNS(^;p6{d3Jpa0_j+vbTK(p9QT@+ zIAN1T;T&UaL0aeygb;|k%kiDl zy(77xS~OXmTk2GcTAIRWoJfn!dyy6!$h9hq|@Yme^Jown*8QF-J(eyI6CxZMMEvYC;b=swL?5<3ytpIdyp{6LJP0ZWy z7f3!AHwKr`JzLtjpjOMDIcUeqhbnj--XnI!;7ag1$JTJvCzGz#9vhJ-P3dOG=ks#s z-6Qisy!!Cahd)v;+Se8R6}-%qnz3jy&I8Lqc|d$1uRhKj2uW;JHr7yw`aOhjVAWBH zAcOZ1kN*1_&g=AQoacQQ4U>~Dg>-M$|GD~TBSjb8)K1ODBD;G4d~o46X#ur&tOcS} zV$$P9Gtz-wh;*4na~<0!sTKQaj}m4WZeV*OTkoEuMI&sIl9T$w@}dJ>aVt(-Ip<=* z0|$!ZvOko?WZM9j^tu(@6>oaP9LpwU3uH zsIngf@7orG1M)e6%VMhO5mBiZYQxDuwHReZ{whe?nlTuYg+jVsg1y$#w_NMehXE{7 zdK^2AcP;@`!UYI}3?Am-{24sU!{KDb=t^c&NOZ~+zn;+9G|U8ai0@p4)lvjS-n8S$ zZ}nFT*m~PliOFmHWj(~BUp(EE#uFKmUo`rBrqd-^u%n@og_N@4{vos5u*{>zr1@_DPG~+d<{26oRCRkxV6C4takO;*EY34N>bxc>) zsQ9hL&5SbmjJ@L7&e1i*)UKE=VM+QU*vaXmIVo{%b`&^%bTZ6hov5QniD$lPf6o@y z9G3Y2YPu|}Y}Q4Vw(lrg*LX;sDaW7Kl2|4Q$w?lJ_bXX1oHu{3i^iF1MAJl*4cp1* zY)K+21pJ-goXpb3xa>{Y%yzHVOCL1&!)FfZNuG_*J?Slr zwe_H0tMGV?(+^uxr15I$5!?aOOv|*xycSxPA6xHc=u!F9ceDbu6l$rGIO|#zb{nL1 zCw`3GF-SzsqCuG?=2|{Dk6Vw=5H4`oIJVyp{#o8ubTecmyrZw$b{4Z+P^bxVlIQg9 z5k%M<@)%Uqu$<%|U)Yz(MkkRTsHRl}u7wNLp=)*R*^7**r!IQYR=~oprR9;(QLHhU0v}E2b9Vh%928A<&0c*;Ru!U40l=GCO z#$$JWf&+Rr!<5)CD?4Zx>eO*pi>S%BS4Kg4kzc6jStUL)ENRMX zDc@7S!|$T-6<1T+Z^j14f7RcG44rEo&cITr*|AMZW65E_T>ieLthNyYPW6m?6B%^-c(~FxM`<(33LT1{x6fPVSF9bWoaNvTH~pK zB6l9R=-}H_-w|_zc+k4X(?NfnmiN4s(R{;s;Xem|_~sK&*L3y&umqC^)bq83U+FIA zc^(Gie8>IcV$m-A@q~TaHroE-BsYL|Q=~MDD#LQE?e>6Ua0}0$kMbGYS zCM5cZ)|)dA_REk2x^2x9hdt{SOi#^q7s#qKviQ@q+J*|o`$}h(DkyN6bCrLHNt@VS z9a14mP97MjT+uljvE5{sn)^o3rgZ(*ofdqtYIpm1tbfsO-x{*+2~FB;wP1(>>o7KQ z3v3W+?E`BRX&Z$!ilWDPsi7K6xA4a#uxM0P4s1Fe0V@}&I1DQrA}xR^8QLcLNA-D{ z45%V-M=9KZ$Rs3<@<|DXIZhCZ25FI*C8ryKe%*KRxpHi3-sGsuwEFHT#FVzQmUPP~ z%BQep+EwAHa6MIT&)oECyq7WBm~Zo3kz)R&0%|%ms^n+%+nMyWKmv!+D%`_2^(NS8 zFD1`R@p~(k%i|3$*2OHvSO9LJ)Os%?l8D546m{knqLCE4SF7HTVjqd^5S72t7TUQG zPQyiaqaT+cTxUMDs~E9(@<8cRKMOZ(d$UEL!csA)KT|2g7(9dwrY+>1>Oz9+Uoc@& zte-#jTHwSO@bZVlMT@2DsOT7+>}bLSgGo!l_=Ai8ES=ZkuDpW|pVuSSD3FvISgx`_ z3?q70ih-+y@D;a+KVX@kf!6Xpzxw4TupgzOW=1Bz)k*nY#l{L7r`$$3=>(=9h!;m!WmPI z>*9i>mfAk;y6JR#cFtSl#&jm zdhTu&2<$Sw+aq*f*JvAaLcMu;WZfx!!5GT>+@s}D06CVC({QTAKuwdGj zUR5AORbR~OnJVa~ipD9GkZ`f0M^jXUZ;L_E2Z9hlX*fP{2LZD$Du9?t$H{_`2By!% zp}#sM2;&e|s+>!gmoX{=jXYZJ4~6`lvL6x|CBiR2TuxIEA^{&xwN?uEtCk9mGJ}Lb zwYgr6TYddUZzBrYHLbAtalm^~`~>)i{p_^Bdwprz-QR9Qev;U3*QGfEow2rJj81gr zMyjZbp!+hTye=|O_+`oYJ&aiGTb#U`Ox9}j>16N|5=p%s?N=hGfLyZi%n@zk3a5ld zRsz_I@luZR>ZVYqFi>MFzcQre?KPT^W2L5RC8z}pGicb^skjCy)f%F? z1mx>98?{V2t8+@hX9~N7LOoAR7IT?cT1v?0JkPWOZG@u=C{fj`cvILfv^m4)9xj99 z-O#sjxo28P7~_tJ>j8-Qq<0D?j3NuLKzbz$G%Ab*Gc7!aWH3k%`YJGNIB5k^CJd?m zq49ND_}#{ZeLsNN5+3b@!N_pm#|jtZC?yn!=s*%>@;?Wd5Ki)RsL(*^L&KybG)^+g2G)^X^}(;-m8cB-Yc(eDen64_^@mw^Ou>*%+kt3 z_sWCtuxwC$$~V)~`b@#%s($8XPj<@}fnOzK*5Om)Dr|nuWj}7&GB0>hA6-8@Ux!tI z2Dq4mV;|?o$4AGH>8`9Qb)X@<1mu(R`md;fFJiy8m>nT80yy7sFRlM_w;&$@UQhoH zegGW~NU~<3Ns<`d?X;YbuLy^p>j>ct;RhVu2*x|7Xz??R`4$KRlv~fb@aQ6!nI}>P zS^07t>eg$TKedpYNcQOtb__HzjNky<+2?7mnGwk`Ulk@vtq#uonlFdGYBk2FLe--8 zL1}WJVqMd^TEMwF{RZ+Xde6K0w?YFFtWd}4U7N@Z`{(8qH8W5qL4p+!V(`znXUd;5 z&?-p;U-|y_2ee_m#Gn?9#29_g&by)*EQdX5mX5LhcXE`EehlKv{yq6=!WCp=C$Go6X zdp?2%kEABpV|>>gG9Fr^*O5ty!`)vD{uG&+XO7mnXPnq7=^!-e+wWbLiaE!gJW0Pz zhpFHGIy5?CVmtZ=^GJ&HFT>@=ZC(X|%utq5zhP--EGn^}G#TPxY*5 z^<3Afur1=AfRRw3oC;6{N)*EW{l)W_<_C5Xyz_3RfJh^(93$Y1o~AGr>Y6vf%6uMl zOWx~iIF_PuSaZ0iyD=L+4jZheNdN11aGEmYziIPON}k|~AvJ!6dwU-JOgPDhdtFSC zo`c~Dx_VWQ4KdVE46H}lHP;nnayjPCW2Ou0iO70ALnPcvPdBqjBUFA?lyoJbt(iwY z4W*Q@ZoO(YJW#eo5o3{EI#TO6T^#V@E@6Rd=yAfqkTtl;-yjERId=P`*7t@@Ec-YC z`sTR`@Q9^^!E>Qye!%k12RpqchsXQ5%pCR^x?Wc44K#3%AS5UX~nawH*&oMPBMN?HsLtOwvl(bfawPG@-yooU(xzxj@Nv2+7LmffWqH!NevmG}z5|lR0 z&*xqc3SOF_T?-@}VK0!*W!l>PJz!Vn*a=EoN2eK+;9Ig>qNhQV1_hL1* zN@%G@)mCWX_(dWavhB!R8M$K+TyQ*LwRJ*%<69n)Q7T46ES0WTYfha@$^KU z!Hv$v6ilw=$VtBh1b25EhTUTKRXEkD4^0pM=?-R9%#iK;3RgLYcoNrZtA!7?@BgJ8 zAZ-%~#*zrLNFWO%32yeMT$xAWTei^@9lRmh3+I3|&8Oz2t@q>hxRZGE$J5rJ2fcDhv(RC74>)v>r!z2gl3HWq{ z^z|JpX|$)#e} z_{SF6W|FOZfh=dCnM11Axk}O$Um#=_|JbwFV|nQ?!@RP25r*OUa%P9Y^K0QLEhOcf z?A#inpH!=8r{f~alJaVt-N0@&fFW;54vW7^(Cy#kJ_U3(2>&@?gn;c_>p(oaHR>Nh z8V9VXLv6lhI#TLIiiXk(fsgLwh^j?`itC-8Ol9;y@zxhQU_8nM9X>Pc3L_TS`sn9fA&O+)BDxN`9b%|D!yg4brrn(LG$v#ov{%+ zJ~VZUU(fF-f)rU+X>4rI@q>8U`2bIa-H=p|E9x1|<>!zM=EpuA*Ai(pdfV1|s~aGP zvE}nU%1dbUZ@9z=|CLn1(HR?@&hYgzTZwoUD>2etRS@29+Rr#GTrr1mcX%w~?#{7M zFOdkvFF7=p@I$=uLGG>`Jy@mpr;SG_>x~5M%SclV#`q|Gnt(?a-Nv`A?I)d0-*&IwBOG;m(Bn>VYEK@er1}I^Uw4ZzU>VW@k@^75wwxcqXIzN=CB&1wf3T?1 zTr1rW+79zYIi(*N_vN&!T#(cc4(ZGjqe0(#Q?Qxw64_@s%Bh1}o9gq_sb%_}L0AWy z(HxR7MGNPgt?kgR10%UNXRI2H%yIvMaFDUIj6W;gNz=k@-}_d%=O^ONmg=g@M=H1u z^S{0h({+Bvy?X-%0vt=kqg7%EkT37rR(>oGijJ`IpCsAK^}L2L;YP|KLo>-xMW7MY zG8K>xqTPlAd%!it5b)FLxuaVKC;mh;R5*&6Gs7-slpf?pUTOXw!x>4*pK7V)n%|Pm zF#FuOqUx7gpogPKQe^@A7v7fs6mZ6Y^w8_XJ_)FyZ)2GeVOP6Il5S#7&&>L&?kv3j z(a)o5XtxdlHAByBfF8f|GkV^){$WJtS(AX6s*w+afTUHJ+k5PQ9rH7o%k-|;2cOlY zU9a`q-g|WlTg|2WF=Y<#KX?96Ws#I@)PO=w{-B7=P}!vGJT2dEj{-;0Ksv?4R)a2~=NFTQ z?lFPe=UPtX?!r7NYZ6w|ushuKHyk>*VfQ_*h<=p0O~EnYS%uKQy?jhhV1pygq=&I` zX{MG*%Zg}a5AV1At}!RPv2hZ#i{QC>QTFd=F#;FFMZPm%O8gLg=F1KvUHDBK>k~Q! zb!9Q@?sw%$Fw%RxA;md~+2m_vHkg-^ORM#%WnY)?Y9u-<>Jwp|Q5hO`7}m45m`J*@ zmPE<$sj-})vuvvjkUDGXo%e)x zBIy6lv?ZxG3R$kUWYP4T1@F3O{aAAAINvq{J9;Jr2k(G9N$i@A{d#eBv*##~vni08rEs_(&b z+cV(#oLcVm(?j?Ui9kpGgz_n4prON~1PhmigBm+6gBlkd)aR;gHsz}2ap6p!(&Vb8 zMa>F!ZyY*{5R+4^Mp-$j{B4#m&j7b{QUTG(qk>vIr4ekB?{?=?-yDopcK490P3xdq zf&0>_W+?whr}C}&FP-WY=1ZqSC>X`vQ90N@iZCO8ri`|U%B=xi=Xk!>KaB|zoAh7=kmR^+qn=Ms?tvyM~}8GmZhCZ9TkG$9UkA1WFF z^_VmdnR?{zh>ww6qbBkM$ZUSot>{et;_dgDy#%?zsXd!GL{uNAaUUwkq`@-RT*J{Z z!(M|tAr8Lif<78CD#^*OH*mG_u_U8vQs;n4w)EzCPm;2@ka$V!*CMxR+*0Z$-%(a; zOIP<|{99?LKFj*PDB1K@!B?|)P!3Z4vjh1I&HWsv(vg=;^<-|`tI3V-<|&bMcT zs7F(LOA4!R)8A*w>R6j?-FYJ^4)1p%%H*L__{!>`lHD|FkxR##-^@YZMksOU<9?4q zrJHV7BXyz*T_A;^MxXJw{q=1DyVQ*ia*wxPVGP}7(5*66Ly)4h3O52(FN<&xr=sNI zN5!CI3gQB-4CFdT)G1M_HJnm4l12OS;@a9y@d6sK2Mk*KVP( z?-CK^Y>a-m@{dYm;vAbwX9`>=Ep;3VVYR~AIT{e?MreZ zrp6SQ9azvG-m8yQAA&IuUD(TTA!MU|*wF@)87Kd1oM(1;=Z#jVEa&_LvMA5qj8UG9 zF8XiZ{6BJ2I$}-GeTLexx@n^Q-zLid1(LpG;JPgi()P2QubFQ0mP|t}T@e2N1Zf|Z z;AYEPbtu9xlVL0xin;k>T2(Y=%9;hByc`O|vN&FvoNUMOaw#qSK)g^9IUrs#i8qE9 zKN6OP@FG({#>N)Qb{?RYOGLHec?sQ2Hkg-4Ruz($AXpiUm!Mb-!%K?d8i1GlV4!zp z>X@D2U0B&Hal5jW&FazG2GpgcuwZm4N^=bB3bPb>8%aO0_8HQj;d=dVqHRYSzBOggzdMs%OQ7FEqoOM?^;^ILbP+_EEB$~ zh_odEyc{P_aan5{Y0w4-c5#XwNNw3D_bv$s=FcovOt7liqaZBU(hNe0=kSIC3|5dW zI5e1pFIan(@y_G~eCAsgN=zI3%J9TW+$3p;Vup>H6H?5|0e+Zb=BSqg6)VCK*1IIy zLS~VqjK6q?4Bfn8$8r?@%VCe%?jk%P$aE#YiajR6oZsa2J(tzp3H_y?C6JJBH9i<1P!Ky zZM5OlZRgHy=MK9Xp|?)|oRbY>akEBO-n1DsB&i0m)rKvi9W3To2}GZv^ZC{E_lxxR z?cjmlssT?0&FO-Hkq{%7+ZssIGdW9<`w`<4#xd7Wk%(+)j)+j{6D^B zA-f@R)C~smPqERE>8EA8QL^3mW|JGSwh426J&7=8j^3SVRu$|_(>A7oU*=nLF7QVkeCXWQ$xZ7lS+I7H)skml&w~DEQ_$ouUF2*C&L7T_ zbb5CYB=1Hk%r96Z8x}0`TL#mc@|hkypou$n;8r1}{HcIiKhk5D|ElfT9Qkj5Z)abV z|Ms@;9n|vQDjqBTtKb7KyjPk!7vB}&U0)Nd34&hwNLUdTYbGV^9n6C9OOzx^Rtw!rOQ$5~P*y0DDOQbj3%q zQIB*suz`0-?`_NYqh9I*vJb(^1lm0-ybA>-LAjn2cW=te@OMm*2Z#ebz(^%BYnD59 zHSWYLadbo_DCD{e>dVvqAW4~Du26~k9s8IHP&xR45(?-LG2eZ(qX{<2e@IAV=HDt2 z_dyR4xyd2oI{G0JNI|J*XG97fU)5Z`r&l#s{^1q1z;SeKi@|T|{ls5m?_#M#wVr3A zBkK_s$`m@D8dL`W zSMp@&|9}rF(*SDGogkW02q1Ja43gA%Nc9B#Gl~ehAJHZ72thKvK#-K7k$ML)RxS>Z zaxwmisN8x?K=h9u-a`Tc#xXRqFVNBIP+EChKi`r_$>jhEM0cEPdf)gqJ7q z{yK4(M*9)f!6d2*h6%aW`9Jye^56b`J^xqnd`a@(q?Z3``LCA$T=L(fGWo9*CHGTC z{@bnB|CKzM^53ME|NeyX-(=PHzuViphW+n$J^xqo2+Q4XRQuQov(lCE&*__oiVd$c zgkx%cnur^6Ve?BR0omc0_lte(^52T>e|PWc=f9n;TK~V2C*%A#sn-4%od6$;6X1$1 zfu#v)Sxev&6lzQ0+7h_71b$@ILez%9wIOhA2wWQi*M`8gA#iO7{0ScI{3mcrsssVa zKL2g+?;RW%_kXqh$7&uM{s)LO3^pBrO`j(=7!X@B4Gm@KA$sCu!&|INev?Si@M({A;?FPIin&yu`g1?*w z?cgu)XY0J5ir!gwRF2`&k_O7iij#zZGsBKP4Q2q65?r6pQf}Nb91WpcxXH^%X!$rE zi_$p{gVWZaKOUo@f-zbT+QBJ&rLd3;DUsmNLjBWZVPsinKLEeQ!Ag()Sm|*-D`oOf zHN$@PDTjTY^oRPWQ+&2^XmEpIBcQ+f;{d*rP%aeLo(?}9QY{=u2EmqhXb$I%uxz?G z(>9ed@MY!ZW>!T>a8@!8MoB7ixaJjX24s>q8ONh*CEJY4O24@o{Merk$M$F@WDQO) zlfme8lng~4vM{?^33afFDy#?m+nuP_{ZRH`v zMFtGIn1POLHV8;MD_PlrL}opd}JBx~F2 zhCvGN<={c^ZUlhqKto$!wB}DPo!=pBZ5vaVkn*3zB0I2bO8J#=wW|j?6BA)?)E|%D^Br1S2Pj;%u^7O7 zSz=Fula_aWxha#pxwF*TUahhAnM<0r%ucICuu-bXCdby)Rm9^1#+v`eRK9tKe3TQAC?5ri6MXa!| z;xft`LlXx@hh4JL7D^fU5s>3Y?AKx@qO1v;1b2Swpo%4(N&iy9-yceX47yyC@Ms}4 zc;_0fjVbC(lk4ZWx(}4vQ>hvnKqHwdV}-O&BN}oOg^$u_NT5c))i>jj8eB8m+R$Dw zjjLFy;M~$^G5icZJJrc#6bf03w}xI?mTHaN;PckDP-~UDH6%*Ls1WkjCi~GE&rWql z((6s>{H6`F8AFw6e)I+j$r8kNI%b*D85GB-_U#?lQpQUCCF#F@+P_>|x34XFs*V*N zRvzoh>!NZ*LaVBZCgkDu%BZk%OARcmoYIX{DpXz>5}lrZY2A`FTBoW`awyS)3lg^v zf)H8N6HHqvj^U)cr0%kn4A$<7*mrl81KVYy*Gp)ne`-CC3CCX z^Qd_hkw(F%J@8y5rKezP8VbAA{TQdaj);-zA^AIDCZ92-t6K6JG)Ql~1`Ew`7g>6e z-k|25sF1Tb3=( zeh$Oek+d0wUhNjOot9p>q{9e_f79eziJDFHA&j%j23s+~O$gCNgp6Np*wE5e*R%*9 zV?$e8W?5IBWf7sGY*{o@-QzI6j8JN6>??oSdc;nvH)egM8C$!oq+vcpS~J9?II`Le z6IkHa*e3gV7|)?_X4ov80ccKJ?JY*jqSXCZH}95>k$s{K)(Mz}XLqCg#j{N9S+wp@ zvWz3tqqd4=atN-hjf}J8=V5#i(Rn6k7oQNXwD|y2;+RbdW(QBZtWQY1#{+IGG}cdK zLHt>a&~|KPj5H3zRIBv+E@cczYG2eOyC`fhjgdP&C-)yjO)`m{t~t@BF{(1;luig_ z?nH=dwNceZI-@1p%;U`&chz;(T6@~f%2NM6;$-8a?4-8Av`jH&=EN6W!IF=f-^F40 z9sJ&mQ77e<>Rdse6IP)kraCvkD(?2A8HlQ%gyDql?acQCJQ1L1xy`EcT64Z2t+`+v zBQYr8AF&~Vlf*%UwjXVKuZ3u zT6|K>rEv2jT63-J3r;c^FJEkOKIt+@ojPVxl#;C<%_-nVh6^AF8-asD$P)iH{ zoou@)utf1$SntXZ7FgHDa!!U<46m@yf2R!&gjYMn)s|}QD zJZuZ4nutwIy+4FQPXXht7b2>>X1T@PJ3tBjS51A4Z>&?yQ#cP&Bm@6gO{_$o;&xR^ zX^ORxS!WdImONIQsp!aMCM7&+)*Z3z^X;SDl~wzaEdhb_xGCb8=4l&+_*1ovY6tW_ ziMK4q=Gqdy9oISIEqr-c(wVKHtpKXEf8{zW%w z;=O97P;=fYJWNcNmSfmF%OysyLc=9SG23n_YZ{feTGA(1F{34(dkLE*%LGLhOMK^B z7hB*5#Qv5&i&!P8+fvpP@w7A2rVZR_n_G`&I>ZZ=Rzn&Y#bU^$N8^_VRx2Q70&7M< z&YE%C9<-U|nDxjeD76%J;B zG5nU<4q%$j7>>$$1~ZwY9rO&7nCQqxiCUO=)<_z?WY$O%G!R)!p|`rkK*zqVoOo|L z#&(}!*&;S-Pooydj+O!12yGS6tXoV$TiwH{flH>(xG+dr^3a~M+p{x0E8gEa#qR)} zU%0W16t+y!vM+hI#brq?LsL7b;uC5yD;3Pks)5ZxfhtN#= z{>pr?JHm@WQJccsj5rLnE9;W3tfsb7QB)c_N@-W9Yyr#)(2NqXyk8&JUYP+Xz6Osy zO)*uzk+lcb=jVZC=rfGr{VH8E@(-ET7%ZzYIu`}oH>TPKJzLl(W0z;YU3rkhFZ9Wj z|10XBy!dbX2V1)R_uhUj|F7i9v;Qs<1k%d_JPhNkI6xjDfG&MP0L2G5)hr^WG9>eU zgsh1Kq%tu|nIl6~J(!NPQHsIHmK)_fGQtdjAr2uoq~<%a0ZLq;3!}O0%d=mx`TAKz ztbuHVM2sK)j@h+8QxZ}O_Y-6ed90e{a6_c9^Mr;O8b#Asx2TpzlAXiwa1mu$O5+ic zVAY4=o9H0Qu_%3F4PkT`-b9zWRg+@YcY-X8WVzDdOZFG}+KI!h==&~0BhE0hdJ}or zS<%2wvLbj?jLz=F;ge~%@!23ty4U~ef`FFL{~T=X)$9K%o|Wl;CVBdwNv;2>^*^=# zr`G?}`kz|=Q|o_f{m)0%|5P00_zQh9<^NBp|G8Jo|0{X&^*{bWplkh4t^cX@KVOIb zr^+DUdGSBUAA0 z`(a?G(?lE;5Ce-U3CLm4?n9mzdqZfezcIAq)E+oG3LfZ<`6fDAml=gF)=-^uf4XGQ zrpomPGPQ@Aybi$enQN`<037J~Tmo>o-NC=yh#PM2@jA#x9c07Dfm|fD`;aT2bvJVH zv5uZmW%LZ`YHm$d2h8}BUf0zDGwOgD*$uA)X4C;QzSLX!&nIAp)zM$cP+g1+>G_{i zfE@$CMf#&g!Z5G_GRpZ}gI`dbfX_PQ#iuhpsZCBkN!SY=Qve;WipILgGk}>~!1|eS z|F^pM4?AZ3hrR9k{%;jep8dyUCGj7m;exaSATbxNVipsEBhxa25y*F_;1&xLkFPa0 zga)@OVZ!;Zm4=0of7W3ktYIN!Ka>ay;ezqc2n(SBSF2#nby$e6Ei6Q4pocmvL>(5Q z4h!*FhlS9#2mAiHR9FaG37n)OEQD-R#bF^lHp4G8EX0#lhK0y8SCv5=K6YpboA@WB zjjBRJ)bSwdco20wh&mnwJas&XIvzwF52B6-QOAR*<3ZH%AnJG!bv%eV9z-1vqK*eq z$AhTjLDcaeNZY8)&Y+=W;1Xten5 zD&IAy-N|go&7-*Y@nkk6nJ2TM;?Vh!ya|XBsliswMjKw;f`{odaCmJ|7u|nSrQ*#R zUFV27tt8bT6A8`)?O-v#O27~o3WR1CW5@SDVScm*0 zsp?j@aC4f|a-oSYSadeok_Q{?f2eiKX?!MWH)#fJc?N?)$%Dw>mt@q>bV^J{rR&a=DqANNT$cR4O>bqO{(P8P9tv0%*&QgSz`|E zx;gQOfb|J#{w;TO@8~w3Qg|@O!POa5bC}BU2eua*jo2Nzya1O~ltmfFLotUv z(`=%CmKXR>z?@XAUstW4>{S4xIu7H%16695DJ!CNY`$FtAuz{%Wi!glrtnf#s_cS^pN0*QGCI?sH&I??}s45tH{uR8qL-& zT~&o!u5_uSE+AMkJzJJijT^#z(tw#?*<+Fasto-JPagj3t`YxX_uf{m|5?eC6aT?? zyR^mnMEVpJ$r|fbN`d?+&=B)o)_xAVn^Z)L_ZoU4m;>kGw`-gtZ*8pf-gFH!>KqBQv_$3Ojbgz7*S4Kc%Jj0pjL>(JR$IXY#zj= zb3!K$pKeFU++QAeKZ?+6o&VK^{(`5B{I`8j&;M0CA4UF~)bd{~|9x!vua4hR#p7E4 zKe7C`SD*h^^JL0@zM)@g`R{9z|EdiA0Z*R&*VguqY5!H9|5oyRa!~%_;QC*>otAN_ zmSdV_zgMfRv1)6q3~Q_cqI8u|Z}szqJ@);7wf0}TX8f=1y{&rxU&WIl|NBD!dD?#= zq(21Y_t7oEis7)?EWsp&+7j%uumnqLL$KNqtTqIz4Z&(du%#a^|FQpD7wK$Tbs0JG z-`+jL{(pCSyVn1#dnaz8xm%U_JssCGur3n@ncYfMgpHATU^=AnqnWivZ3DKucWCrYT1#ASDK@ zL`wB_a&tYK57S0F_zh0CjiT+{2Pm;|^e>CNjA+>bFUkOs# zB%w8Ybw$KmcI2+5AS5Cc+A#eKuO~wwEidMJR}( z2z1Ug12$;Nu-mprO^o$hN#{>BAvu1qRJS~NgSl<`6*TZGXn+d3gNkdklvR=DQ{IS1<=3oF?;RN=|c4M7cej4WPQD-ox2|e;l0mr)SA{cGkWE$P;K$Ym=M; zX$?2&`wfw>m7WK=Yl=eoZGSwn)8=1_Q@^}=H6Eqs?aO)cc9dKb(l>n~lwD2&_AS`h zSoF^Vo`PjuBq?yq(X(#v_hG0Xn^9LIn$-B#BJ^~Pg@y6T9232XN!9|iTf{hI_ zf9C|@?*VzSk&ed6bRphi+HDw%;w6x5^SD1aPZVlwjEmFb88NZz{$g-moD|K*2&JRx zAlVob0iSfhIO(UBfwiS-rRQ>T4U@OsidN#=CN`R`t9r?taB;VcJi zs|;Y$;xD`C3!87`%T{Y=uXSJhvT-@SIvY(lCZm+#a%{*ox$)l}u^saj2l|(M`@emt zmgvxAdN!Kkj-1YhwEo-oTif@EL;nvCcD7^&HcMhySY$T3r<073Kr9sVP z6Mxs5UK0J{Y<{+hN7y>N7}AwiuXVq*Ee3{uKJTaJ;`0IeyqL|e(sBP)y7?;Izt0k& zK0*oLJlCJHp4{GdBufT^`OW2GMj52FC5IX_){d-$%2BO*@(Wp(H&TdVzmc+2*A1&9 lA~2qvjgz;@n0@)4jpCj9*i%3CQ$Nc;{|~P|#XSHN1psd{J<|XH diff --git a/packages/seedless-onboarding-controller/package.json b/packages/seedless-onboarding-controller/package.json index 069b478f97..35fda8a402 100644 --- a/packages/seedless-onboarding-controller/package.json +++ b/packages/seedless-onboarding-controller/package.json @@ -47,10 +47,10 @@ "since-latest-release": "../../scripts/since-latest-release.sh" }, "dependencies": { - "@metamask/auth-network-utils": "./auth-network-utils.tgz", + "@metamask/auth-network-utils": "^0.1.0", "@metamask/base-controller": "^8.0.0", "@metamask/browser-passworder": "^4.3.0", - "@metamask/toprf-secure-backup": "./toprf-secure-backup.tgz", + "@metamask/toprf-secure-backup": "^0.1.0", "@metamask/utils": "^11.2.0", "async-mutex": "^0.5.0" }, diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index baa7120143..7a60a5aa19 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -170,12 +170,12 @@ export class SeedlessOnboardingController extends BaseController< return remove0x(keccak256AndHexify(stringToBytes(idToken))); }); const authenticationResult = await this.toprfClient.authenticate({ - verifier: groupedAuthConnectionId || authConnectionId, - verifierId: userId, + authConnectionId: groupedAuthConnectionId || authConnectionId, + userId, idTokens: hashedIdTokenHexes, - singleIdVerifierParams: { - subVerifier: authConnectionId, - subVerifierIdTokens: idTokens, + groupedAuthConnectionParams: { + authConnectionId, + idTokens, }, }); // update the state with the authenticated user info @@ -344,14 +344,14 @@ export class SeedlessOnboardingController extends BaseController< */ async #persistOprfKey(oprfKey: bigint, authPubKey: SEC1EncodedPublicKey) { this.#assertIsAuthenticatedUser(this.state); - const verifier = + const authConnectionId = this.state.groupedAuthConnectionId || this.state.authConnectionId; try { await this.toprfClient.persistLocalKey({ nodeAuthTokens: this.state.nodeAuthTokens, - verifier, - verifierId: this.state.userId, + authConnectionId, + userId: this.state.userId, oprfKey, authPubKey, }); @@ -370,15 +370,15 @@ export class SeedlessOnboardingController extends BaseController< */ async #recoverEncKey(password: string) { this.#assertIsAuthenticatedUser(this.state); - const verifier = + const authConnectionId = this.state.groupedAuthConnectionId || this.state.authConnectionId; try { const recoverEncKeyResult = await this.toprfClient.recoverEncKey({ nodeAuthTokens: this.state.nodeAuthTokens, password, - verifier, - verifierId: this.state.userId, + authConnectionId, + userId: this.state.userId, }); return recoverEncKeyResult; } catch (error) { @@ -395,7 +395,7 @@ export class SeedlessOnboardingController extends BaseController< */ async #changeEncryptionKey(newPassword: string, oldPassword: string) { this.#assertIsAuthenticatedUser(this.state); - const verifier = + const authConnectionId = this.state.groupedAuthConnectionId || this.state.authConnectionId; const { @@ -406,11 +406,12 @@ export class SeedlessOnboardingController extends BaseController< return await this.toprfClient.changeEncKey({ nodeAuthTokens: this.state.nodeAuthTokens, - verifier, - verifierId: this.state.userId, + authConnectionId, + userId: this.state.userId, oldEncKey: encKey, oldAuthKeyPair: authKeyPair, newKeyShareIndex, + oldPassword, newPassword, }); } diff --git a/packages/seedless-onboarding-controller/src/errors.ts b/packages/seedless-onboarding-controller/src/errors.ts index 0b42290f18..7837c11a75 100644 --- a/packages/seedless-onboarding-controller/src/errors.ts +++ b/packages/seedless-onboarding-controller/src/errors.ts @@ -1,7 +1,7 @@ import { type RateLimitErrorData, TOPRFError, - TORPFErrorCode, + TOPRFErrorCode, } from '@metamask/toprf-secure-backup'; import { SeedlessOnboardingControllerError } from './constants'; @@ -14,13 +14,13 @@ import { SeedlessOnboardingControllerError } from './constants'; * @returns The error message. */ function getErrorMessageFromTOPRFErrorCode( - errorCode: TORPFErrorCode, + errorCode: TOPRFErrorCode, defaultMessage: string, ): string { switch (errorCode) { - case TORPFErrorCode.RateLimitExceeded: + case TOPRFErrorCode.RateLimitExceeded: return SeedlessOnboardingControllerError.TooManyLoginAttempts; - case TORPFErrorCode.CouldNotDeriveEncryptionKey: + case TOPRFErrorCode.CouldNotDeriveEncryptionKey: return SeedlessOnboardingControllerError.IncorrectPassword; default: return defaultMessage; @@ -73,7 +73,7 @@ export class RecoveryError extends Error { ): RateLimitErrorData | undefined { if ( error.meta && // error metadata must be present - error.code === TORPFErrorCode.RateLimitExceeded && + error.code === TOPRFErrorCode.RateLimitExceeded && typeof error.meta.rateLimitDetails === 'object' && error.meta.rateLimitDetails !== null && 'remainingTime' in error.meta.rateLimitDetails && diff --git a/packages/seedless-onboarding-controller/tests/mocks/toprf.ts b/packages/seedless-onboarding-controller/tests/mocks/toprf.ts index 0b7d2cd364..dafddf6be6 100644 --- a/packages/seedless-onboarding-controller/tests/mocks/toprf.ts +++ b/packages/seedless-onboarding-controller/tests/mocks/toprf.ts @@ -76,6 +76,7 @@ export function createMockSecretDataGetResponse< T extends Uint8Array | { seedPhrase: Uint8Array; timestamp: number }, >(secretDataArr: T[], password: string) { const mockToprfEncryptor = new MockToprfEncryptorDecryptor(); + const ids: string[] = []; const encryptedSecretData = secretDataArr.map((secretData) => { let b64SecretData: string; @@ -101,6 +102,7 @@ export function createMockSecretDataGetResponse< const jsonData = { success: true, data: encryptedSecretData, + ids, }; return jsonData; diff --git a/packages/seedless-onboarding-controller/toprf-secure-backup.tgz b/packages/seedless-onboarding-controller/toprf-secure-backup.tgz deleted file mode 100644 index 4470e67993949854498e03aa48eb96428c6a55e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 100678 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 z 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

    N*5q0J4m`ozb1! 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 z zg0LndwK!_+SOG-2|8XxcOo3V?a~1#1UTzEd%v~1%{AaFQMdsda8y>{|d2NnL z(U48CE|eK4TaxIw@dH-n>Nt(MRwaa`P<%h#Z+EwTSyH=y-T3-$&W=?2+rD;V7(`28 z`BnMDU)X*m{koVv8Yt@pmJV3irDz1w6YL%^o4hKY#Y)IPGaa+_%fT1QY{{JS1B zLJK{03>TFue`e>-dW9dmL{52%8Vy;kBi4obrJ(FlE2F6P$klmYjg-H%Q<<3n3l&M8 ztqo{;k9a0__X1I+(cLrhQ(I~K;i|gy`6vFOG6J=}+nINFr#@(>y638PMVh&us|5dA zLuSVRVZIn$^Z_si-HumDS6vT(8IZOj_KXI8Y1E6{|J1NSD-$1PR@AjOf1u!P4KU$f z+Ge~^Fz}fmJ`OkjyI!ByX>{P>AfJ)o>#Y)6cc_le=I$!Jdd7Y|>@&)$k{a)Sh|BTd zFL9Y6`z0=ZyuZW+_6+!Ir6f#Oikj!(Vt&%b*9#iBQ8HhtT`Qg%1Rw|vJ~!y4% zKM7(M9#Ks4H~Xq!Tha$4pxxFnsx*Zn_LtVzSCE~+_Bb0BAq<^`i3owtN<)l5N5ou; zK$qx2-oHuBWFKh%vh2MTuQ@?ugWmf-#CkzNS1T_PW$-hVa26%B+)87L5+u|*KVT}%@}Lei7_i6$>pi#CgB#7GVH zxB&j`lO58ByiE-f5CJoK7+XFzr!>3&_BCcjVq>U{DmhJ~fO3Qx5Ln#(D)@;&=mc?# z6LKZY-i)>au~EMSn1wL}gk8sC0A7$;wUU(7V@81m0LssPWu3ZY#FgCIg~#x zhbM`+VPaM1BvqGv~3%C9r+80aC=Y{gX2O1CTm|#D{J#KHZIJCwX27(^k17U+3^71tI7HDT{(4sGfjw z;zu29+{rzXkhP}F<$#dlBzrVK6-;xOPLLANppElm7_;KY01`*>7-49K4yZAK_8KlH zsq&rvW_8q6r!A8${{ny5&!?`Q`<`vRoU$X$f*-* zni8p@b!^JdV)=3vu)Sx$I5*Ams*AR|ZwP)9s^>%(@pqo*lhRk*2-^;go6FYr>yDy$EWP+{rVKEy4J5UcKWpWh4;&8ZjWj<{EY;j2Gf+h z^#HUi7oebA_rS_7wqY3q-YtwxTb3bX=0VG#-Jpad6I>pt0kFyJ(fj<#d!CGdHRGNT z8b6(sMtqDux`)SDj>&}_L3Li?N_B||$KURX+3O&tou~e}$5V6x0b~Ubdb6<@DA4JL zw>MHbvm9_O^)fh)CFAsAe&N4xh_=CsXLESNcyib5v-rJeuC6#nR6 znUY&VMO?@9f5;ScZdj*aXZ#armFn!VVHU=1PBpFk|&u>}xxSSZR2(*nXt_5l-m4bS1%jO#+9Ohf!aaIe$;4 zkbhFQ_Cu(}b%$BmJCJquGgJ38gojqJ#&-u+BkFwzR)j6p!u|(lI1zb6>Ky4H2&JC9 z*r+l&+$exSnR;iQD?NsHgS*?^SzsXh|8U?aVf#Wh3|vq+^8HHv<1!<>q89SBHi0ja z1;iZGEgU4++Xp0_fXUIje(3)cXoXP;*Y7qa6fkEhJ4(>rk*n@#|I7oJM)q#;1^$%&h+6a9{Fgzo zvAVY6_%$e*uiiUBLEqo!ufCG)52b+aehPShWoE2Ok~i&tt#`>6Dn$M&zE& zU9GVAw5?gl`&E`NTo%3|Bz^8rgDn=zJhNJ4WEN(Ar{~=X-*#tkt2tUeo1&b}nOsJb zVlAjzK=CPEDdVitjub-qXR9_{9sdFG6VE>1AgS%+m2^!*t1MHjDuAmr3s+VxhwLuB z4`*v3_O}i=I#?BdB&;Jnbd(a3styW$`kYs8b%i;K7PS-|yuLHXs;<_C1E09XaR&QJ zyf%kbB+Q=Q*cf$kW5(d`kfF04%>34~PRl78Y=U>oR#tKNa+~9K@V`FfAN5i)UFhyN z|2n_N7(&rd(ge?v72fag=ruuJ5iy-NswRvWVR5RndoYeTxRdxet@7cJ;&WM)m3vNQ z#i7yB5qj5bYGJj>6(J3tVLyN7I>S0Gns>8KdtP`Z|Eo@}Z0%$M<-ZztwrAe>^nEr< zhsVRizNM=v$){T~NNWYwlUc@y+?hs!n$LZ;WGEzYx1Lt=>2S#ZT&=k10TM($`!0Ei}I&Kd-GqiVi_+smMp46 zA)1WIz>j{#_J)WxRop2FuItQ-UZ%Y?KEo0E#2|>lgl4m}1uz)o&?;MYGQ6@R_b=t0kL7 zrj3c5OYQ>kR`x<+oqXpN$-wnMP9RB(X6)i465ABRp^SB;N7kxGA}6a_=5&($Zy<6c za9_4&s}PxI2O lbw6;QV#an=G7@y}!1k{7RrB+U;^&+1fpj4QfD#tqe*oW~_V)k) diff --git a/yarn.lock b/yarn.lock index 79ebd9bcd6..955881f99f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2628,20 +2628,20 @@ __metadata: languageName: unknown linkType: soft -"@metamask/auth-network-utils@file:./packages/seedless-onboarding-controller/auth-network-utils.tgz::locator=%40metamask%2Fcore-monorepo%40workspace%3A.": - version: 0.0.0 - resolution: "@metamask/auth-network-utils@file:./packages/seedless-onboarding-controller/auth-network-utils.tgz#./packages/seedless-onboarding-controller/auth-network-utils.tgz::hash=71b1b4&locator=%40metamask%2Fcore-monorepo%40workspace%3A." +"@metamask/auth-network-utils@npm:^0.1.0": + version: 0.1.0 + resolution: "@metamask/auth-network-utils@npm:0.1.0" dependencies: "@noble/curves": "npm:^1.8.1" "@noble/hashes": "npm:^1.7.1" "@toruslabs/bs58": "npm:^1.0.0" "@toruslabs/constants": "npm:^15.0.0" - "@toruslabs/eccrypto": "npm:^6.0.2" + "@toruslabs/eccrypto": "npm:^6.1.0" bn.js: "npm:^5.2.1" elliptic: "npm:^6.6.1" json-stable-stringify: "npm:^1.2.1" loglevel: "npm:^1.9.2" - checksum: 10/b3e5d557b6a9adcaca4cb6cb45f1c3ca59ac12c05601dff701272b2765c60d36235a9ea566064d4437f45cfb1de2888c35e61cd1bf34b2f909ac47e7e7a5d775 + checksum: 10/5becc59a4fbb76be0411a50118ca67bbf9d15dcf3552062c6c873dd1662a2f1ff438a7c0afa3f9112a7a539a0c1e5a5d853bf69b3e35219ac54889cefb895d9c languageName: node linkType: hard @@ -4253,11 +4253,11 @@ __metadata: version: 0.0.0-use.local resolution: "@metamask/seedless-onboarding-controller@workspace:packages/seedless-onboarding-controller" dependencies: - "@metamask/auth-network-utils": ./auth-network-utils.tgz + "@metamask/auth-network-utils": "npm:^0.1.0" "@metamask/auto-changelog": "npm:^3.4.4" "@metamask/base-controller": "npm:^8.0.0" "@metamask/browser-passworder": "npm:^4.3.0" - "@metamask/toprf-secure-backup": ./toprf-secure-backup.tgz + "@metamask/toprf-secure-backup": "npm:^0.1.0" "@metamask/utils": "npm:^11.2.0" "@noble/ciphers": "npm:^0.5.2" "@noble/curves": "npm:^1.2.0" @@ -4498,21 +4498,21 @@ __metadata: languageName: unknown linkType: soft -"@metamask/toprf-secure-backup@file:./toprf-secure-backup.tgz::locator=%40metamask%2Fseedless-onboarding-controller%40workspace%3Apackages%2Fseedless-onboarding-controller": - version: 0.0.0 - resolution: "@metamask/toprf-secure-backup@file:./toprf-secure-backup.tgz#./toprf-secure-backup.tgz::hash=928fb2&locator=%40metamask%2Fseedless-onboarding-controller%40workspace%3Apackages%2Fseedless-onboarding-controller" +"@metamask/toprf-secure-backup@npm:^0.1.0": + version: 0.1.0 + resolution: "@metamask/toprf-secure-backup@npm:0.1.0" dependencies: - "@metamask/auth-network-utils": "npm:^0.0.0" + "@metamask/auth-network-utils": "npm:^0.1.0" "@noble/ciphers": "npm:^1.2.1" "@noble/curves": "npm:^1.8.1" "@noble/hashes": "npm:^1.7.1" "@sentry/core": "npm:^9.10.0" "@toruslabs/constants": "npm:^15.0.0" - "@toruslabs/eccrypto": "npm:^6.0.2" + "@toruslabs/eccrypto": "npm:^6.1.0" "@toruslabs/fetch-node-details": "npm:^15.0.0" "@toruslabs/http-helpers": "npm:^8.1.1" bn.js: "npm:^5.2.1" - checksum: 10/e61959c0711a4b9478a59438d887129c30cb4153158b75ca1db3c06e0501b014a4f68bc011f99e41c374751a8d3782e5fd04f97c053aff8fb1208f1937ff7a74 + checksum: 10/ef6d1cfabe13b793807398c1bd00a27c0eb20f84411d54425da49c5742dffee83b3cf0d12daa7af170d4175eeca4b2eceecbf1465992ba3a35f4ace77d49e4c1 languageName: node linkType: hard @@ -5245,12 +5245,12 @@ __metadata: languageName: node linkType: hard -"@toruslabs/eccrypto@npm:^6.0.2": - version: 6.0.2 - resolution: "@toruslabs/eccrypto@npm:6.0.2" +"@toruslabs/eccrypto@npm:^6.1.0": + version: 6.1.0 + resolution: "@toruslabs/eccrypto@npm:6.1.0" dependencies: elliptic: "npm:^6.6.1" - checksum: 10/a9444da5a65186b3b361095df2fbfd66aa09ffe5723610c71636165e2798942cfc74d89a5bf63507aacf2518baee453bcf04ff353c5e2978a32c29db276a2c41 + checksum: 10/8f79621ec4bd712eb12e70c0385353aa70221fe2b501ee674718c74a4147f82ede3ff38a045254b9da4bc9a5d1f891b87025904b7de8f6b8962791681ee65837 languageName: node linkType: hard From ef48697f7ed1dfc97dbdc74b590befe4f6f562f3 Mon Sep 17 00:00:00 2001 From: Nguyen Anh Tu Date: Tue, 6 May 2025 12:48:46 +0700 Subject: [PATCH 092/147] fix: add missing catch in set locked --- .../src/SeedlessOnboardingController.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index ad5febad94..617fab3d80 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -164,7 +164,9 @@ export class SeedlessOnboardingController extends BaseController< // setup subscriptions to the keyring lock event // when the keyring is locked (wallet is locked), the controller will be cleared of its credentials this.messagingSystem.subscribe('KeyringController:lock', () => { - this.setLocked(); + this.setLocked().catch((error) => { + log('Error setting controller to locked state', error); + }); }); this.messagingSystem.subscribe('KeyringController:unlock', () => { this.#setUnlocked(); From c1619fcbe87906bb5fb8431f425e163de874abe5 Mon Sep 17 00:00:00 2001 From: lwin Date: Tue, 6 May 2025 17:10:11 +0800 Subject: [PATCH 093/147] fix: removed 'assertIsUnlocked' check in 'setLock' method --- .../src/SeedlessOnboardingController.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index e0d8a72535..74694e3669 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -427,8 +427,6 @@ export class SeedlessOnboardingController extends BaseController< * When the controller is locked, the user will not be able to perform any operations on the controller/vault. */ setLocked(): void { - this.#assertIsUnlocked(); - this.update((state) => { delete state.vaultEncryptionKey; delete state.vaultEncryptionSalt; From fe94eac3c422f3c168026efbe14b13c6242f29c3 Mon Sep 17 00:00:00 2001 From: lwin Date: Tue, 6 May 2025 21:03:12 +0800 Subject: [PATCH 094/147] feat: removed tgz files and replaced with npm packcages --- package.json | 3 +- .../package.json | 4 +-- .../src/SeedlessOnboardingController.ts | 29 ++++++++-------- .../src/errors.ts | 10 +++--- .../tests/mocks/toprf.ts | 2 ++ yarn.lock | 34 +++++++++---------- 6 files changed, 42 insertions(+), 40 deletions(-) diff --git a/package.json b/package.json index b505417143..35e61ff181 100644 --- a/package.json +++ b/package.json @@ -46,8 +46,7 @@ "resolutions": { "elliptic@6.5.4": "^6.5.7", "fast-xml-parser@^4.3.4": "^4.4.1", - "ws@7.4.6": "^7.5.10", - "@metamask/auth-network-utils": "file:./packages/seedless-onboarding-controller/auth-network-utils.tgz" + "ws@7.4.6": "^7.5.10" }, "devDependencies": { "@babel/core": "^7.23.5", diff --git a/packages/seedless-onboarding-controller/package.json b/packages/seedless-onboarding-controller/package.json index 069b478f97..35fda8a402 100644 --- a/packages/seedless-onboarding-controller/package.json +++ b/packages/seedless-onboarding-controller/package.json @@ -47,10 +47,10 @@ "since-latest-release": "../../scripts/since-latest-release.sh" }, "dependencies": { - "@metamask/auth-network-utils": "./auth-network-utils.tgz", + "@metamask/auth-network-utils": "^0.1.0", "@metamask/base-controller": "^8.0.0", "@metamask/browser-passworder": "^4.3.0", - "@metamask/toprf-secure-backup": "./toprf-secure-backup.tgz", + "@metamask/toprf-secure-backup": "^0.1.0", "@metamask/utils": "^11.2.0", "async-mutex": "^0.5.0" }, diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index baa7120143..7a60a5aa19 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -170,12 +170,12 @@ export class SeedlessOnboardingController extends BaseController< return remove0x(keccak256AndHexify(stringToBytes(idToken))); }); const authenticationResult = await this.toprfClient.authenticate({ - verifier: groupedAuthConnectionId || authConnectionId, - verifierId: userId, + authConnectionId: groupedAuthConnectionId || authConnectionId, + userId, idTokens: hashedIdTokenHexes, - singleIdVerifierParams: { - subVerifier: authConnectionId, - subVerifierIdTokens: idTokens, + groupedAuthConnectionParams: { + authConnectionId, + idTokens, }, }); // update the state with the authenticated user info @@ -344,14 +344,14 @@ export class SeedlessOnboardingController extends BaseController< */ async #persistOprfKey(oprfKey: bigint, authPubKey: SEC1EncodedPublicKey) { this.#assertIsAuthenticatedUser(this.state); - const verifier = + const authConnectionId = this.state.groupedAuthConnectionId || this.state.authConnectionId; try { await this.toprfClient.persistLocalKey({ nodeAuthTokens: this.state.nodeAuthTokens, - verifier, - verifierId: this.state.userId, + authConnectionId, + userId: this.state.userId, oprfKey, authPubKey, }); @@ -370,15 +370,15 @@ export class SeedlessOnboardingController extends BaseController< */ async #recoverEncKey(password: string) { this.#assertIsAuthenticatedUser(this.state); - const verifier = + const authConnectionId = this.state.groupedAuthConnectionId || this.state.authConnectionId; try { const recoverEncKeyResult = await this.toprfClient.recoverEncKey({ nodeAuthTokens: this.state.nodeAuthTokens, password, - verifier, - verifierId: this.state.userId, + authConnectionId, + userId: this.state.userId, }); return recoverEncKeyResult; } catch (error) { @@ -395,7 +395,7 @@ export class SeedlessOnboardingController extends BaseController< */ async #changeEncryptionKey(newPassword: string, oldPassword: string) { this.#assertIsAuthenticatedUser(this.state); - const verifier = + const authConnectionId = this.state.groupedAuthConnectionId || this.state.authConnectionId; const { @@ -406,11 +406,12 @@ export class SeedlessOnboardingController extends BaseController< return await this.toprfClient.changeEncKey({ nodeAuthTokens: this.state.nodeAuthTokens, - verifier, - verifierId: this.state.userId, + authConnectionId, + userId: this.state.userId, oldEncKey: encKey, oldAuthKeyPair: authKeyPair, newKeyShareIndex, + oldPassword, newPassword, }); } diff --git a/packages/seedless-onboarding-controller/src/errors.ts b/packages/seedless-onboarding-controller/src/errors.ts index 0b42290f18..7837c11a75 100644 --- a/packages/seedless-onboarding-controller/src/errors.ts +++ b/packages/seedless-onboarding-controller/src/errors.ts @@ -1,7 +1,7 @@ import { type RateLimitErrorData, TOPRFError, - TORPFErrorCode, + TOPRFErrorCode, } from '@metamask/toprf-secure-backup'; import { SeedlessOnboardingControllerError } from './constants'; @@ -14,13 +14,13 @@ import { SeedlessOnboardingControllerError } from './constants'; * @returns The error message. */ function getErrorMessageFromTOPRFErrorCode( - errorCode: TORPFErrorCode, + errorCode: TOPRFErrorCode, defaultMessage: string, ): string { switch (errorCode) { - case TORPFErrorCode.RateLimitExceeded: + case TOPRFErrorCode.RateLimitExceeded: return SeedlessOnboardingControllerError.TooManyLoginAttempts; - case TORPFErrorCode.CouldNotDeriveEncryptionKey: + case TOPRFErrorCode.CouldNotDeriveEncryptionKey: return SeedlessOnboardingControllerError.IncorrectPassword; default: return defaultMessage; @@ -73,7 +73,7 @@ export class RecoveryError extends Error { ): RateLimitErrorData | undefined { if ( error.meta && // error metadata must be present - error.code === TORPFErrorCode.RateLimitExceeded && + error.code === TOPRFErrorCode.RateLimitExceeded && typeof error.meta.rateLimitDetails === 'object' && error.meta.rateLimitDetails !== null && 'remainingTime' in error.meta.rateLimitDetails && diff --git a/packages/seedless-onboarding-controller/tests/mocks/toprf.ts b/packages/seedless-onboarding-controller/tests/mocks/toprf.ts index 0b7d2cd364..dafddf6be6 100644 --- a/packages/seedless-onboarding-controller/tests/mocks/toprf.ts +++ b/packages/seedless-onboarding-controller/tests/mocks/toprf.ts @@ -76,6 +76,7 @@ export function createMockSecretDataGetResponse< T extends Uint8Array | { seedPhrase: Uint8Array; timestamp: number }, >(secretDataArr: T[], password: string) { const mockToprfEncryptor = new MockToprfEncryptorDecryptor(); + const ids: string[] = []; const encryptedSecretData = secretDataArr.map((secretData) => { let b64SecretData: string; @@ -101,6 +102,7 @@ export function createMockSecretDataGetResponse< const jsonData = { success: true, data: encryptedSecretData, + ids, }; return jsonData; diff --git a/yarn.lock b/yarn.lock index fdd5a7bc43..d1864f29b3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2628,20 +2628,20 @@ __metadata: languageName: unknown linkType: soft -"@metamask/auth-network-utils@file:./packages/seedless-onboarding-controller/auth-network-utils.tgz::locator=%40metamask%2Fcore-monorepo%40workspace%3A.": - version: 0.0.0 - resolution: "@metamask/auth-network-utils@file:./packages/seedless-onboarding-controller/auth-network-utils.tgz#./packages/seedless-onboarding-controller/auth-network-utils.tgz::hash=71b1b4&locator=%40metamask%2Fcore-monorepo%40workspace%3A." +"@metamask/auth-network-utils@npm:^0.1.0": + version: 0.1.0 + resolution: "@metamask/auth-network-utils@npm:0.1.0" dependencies: "@noble/curves": "npm:^1.8.1" "@noble/hashes": "npm:^1.7.1" "@toruslabs/bs58": "npm:^1.0.0" "@toruslabs/constants": "npm:^15.0.0" - "@toruslabs/eccrypto": "npm:^6.0.2" + "@toruslabs/eccrypto": "npm:^6.1.0" bn.js: "npm:^5.2.1" elliptic: "npm:^6.6.1" json-stable-stringify: "npm:^1.2.1" loglevel: "npm:^1.9.2" - checksum: 10/b3e5d557b6a9adcaca4cb6cb45f1c3ca59ac12c05601dff701272b2765c60d36235a9ea566064d4437f45cfb1de2888c35e61cd1bf34b2f909ac47e7e7a5d775 + checksum: 10/5becc59a4fbb76be0411a50118ca67bbf9d15dcf3552062c6c873dd1662a2f1ff438a7c0afa3f9112a7a539a0c1e5a5d853bf69b3e35219ac54889cefb895d9c languageName: node linkType: hard @@ -4254,11 +4254,11 @@ __metadata: version: 0.0.0-use.local resolution: "@metamask/seedless-onboarding-controller@workspace:packages/seedless-onboarding-controller" dependencies: - "@metamask/auth-network-utils": ./auth-network-utils.tgz + "@metamask/auth-network-utils": "npm:^0.1.0" "@metamask/auto-changelog": "npm:^3.4.4" "@metamask/base-controller": "npm:^8.0.0" "@metamask/browser-passworder": "npm:^4.3.0" - "@metamask/toprf-secure-backup": ./toprf-secure-backup.tgz + "@metamask/toprf-secure-backup": "npm:^0.1.0" "@metamask/utils": "npm:^11.2.0" "@noble/ciphers": "npm:^0.5.2" "@noble/curves": "npm:^1.2.0" @@ -4499,21 +4499,21 @@ __metadata: languageName: unknown linkType: soft -"@metamask/toprf-secure-backup@file:./toprf-secure-backup.tgz::locator=%40metamask%2Fseedless-onboarding-controller%40workspace%3Apackages%2Fseedless-onboarding-controller": - version: 0.0.0 - resolution: "@metamask/toprf-secure-backup@file:./toprf-secure-backup.tgz#./toprf-secure-backup.tgz::hash=928fb2&locator=%40metamask%2Fseedless-onboarding-controller%40workspace%3Apackages%2Fseedless-onboarding-controller" +"@metamask/toprf-secure-backup@npm:^0.1.0": + version: 0.1.0 + resolution: "@metamask/toprf-secure-backup@npm:0.1.0" dependencies: - "@metamask/auth-network-utils": "npm:^0.0.0" + "@metamask/auth-network-utils": "npm:^0.1.0" "@noble/ciphers": "npm:^1.2.1" "@noble/curves": "npm:^1.8.1" "@noble/hashes": "npm:^1.7.1" "@sentry/core": "npm:^9.10.0" "@toruslabs/constants": "npm:^15.0.0" - "@toruslabs/eccrypto": "npm:^6.0.2" + "@toruslabs/eccrypto": "npm:^6.1.0" "@toruslabs/fetch-node-details": "npm:^15.0.0" "@toruslabs/http-helpers": "npm:^8.1.1" bn.js: "npm:^5.2.1" - checksum: 10/e61959c0711a4b9478a59438d887129c30cb4153158b75ca1db3c06e0501b014a4f68bc011f99e41c374751a8d3782e5fd04f97c053aff8fb1208f1937ff7a74 + checksum: 10/ef6d1cfabe13b793807398c1bd00a27c0eb20f84411d54425da49c5742dffee83b3cf0d12daa7af170d4175eeca4b2eceecbf1465992ba3a35f4ace77d49e4c1 languageName: node linkType: hard @@ -5246,12 +5246,12 @@ __metadata: languageName: node linkType: hard -"@toruslabs/eccrypto@npm:^6.0.2": - version: 6.0.2 - resolution: "@toruslabs/eccrypto@npm:6.0.2" +"@toruslabs/eccrypto@npm:^6.1.0": + version: 6.1.0 + resolution: "@toruslabs/eccrypto@npm:6.1.0" dependencies: elliptic: "npm:^6.6.1" - checksum: 10/a9444da5a65186b3b361095df2fbfd66aa09ffe5723610c71636165e2798942cfc74d89a5bf63507aacf2518baee453bcf04ff353c5e2978a32c29db276a2c41 + checksum: 10/8f79621ec4bd712eb12e70c0385353aa70221fe2b501ee674718c74a4147f82ede3ff38a045254b9da4bc9a5d1f891b87025904b7de8f6b8962791681ee65837 languageName: node linkType: hard From 5e776e25f925866b32f72efd82ea5df9b8b37194 Mon Sep 17 00:00:00 2001 From: lwin Date: Tue, 6 May 2025 21:24:02 +0800 Subject: [PATCH 095/147] fix: fixed lint --- .../auth-network-utils.tgz | Bin 41285 -> 0 bytes .../package.json | 2 +- .../toprf-secure-backup.tgz | Bin 100678 -> 0 bytes yarn.lock | 20 +++++++++++++++++- 4 files changed, 20 insertions(+), 2 deletions(-) delete mode 100644 packages/seedless-onboarding-controller/auth-network-utils.tgz delete mode 100644 packages/seedless-onboarding-controller/toprf-secure-backup.tgz diff --git a/packages/seedless-onboarding-controller/auth-network-utils.tgz b/packages/seedless-onboarding-controller/auth-network-utils.tgz deleted file mode 100644 index fd22df00044f32f4c1949a254da75beab758f16f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41285 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 diff --git a/packages/seedless-onboarding-controller/package.json b/packages/seedless-onboarding-controller/package.json index 35fda8a402..cedfa4871e 100644 --- a/packages/seedless-onboarding-controller/package.json +++ b/packages/seedless-onboarding-controller/package.json @@ -48,7 +48,7 @@ }, "dependencies": { "@metamask/auth-network-utils": "^0.1.0", - "@metamask/base-controller": "^8.0.0", + "@metamask/base-controller": "^8.0.1", "@metamask/browser-passworder": "^4.3.0", "@metamask/toprf-secure-backup": "^0.1.0", "@metamask/utils": "^11.2.0", diff --git a/packages/seedless-onboarding-controller/toprf-secure-backup.tgz b/packages/seedless-onboarding-controller/toprf-secure-backup.tgz deleted file mode 100644 index 4470e67993949854498e03aa48eb96428c6a55e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 100678 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 z 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

    N*5q0J4m`ozb1! z_i;UA2^p=UppZGzkc-3T;f zs*(1$SF5RrV(sPhR?^~yo3pmEoLzvjewc%%Sp=qY$WV-($wZg>A@@`p^30U@gGJlo zV?)+otdx#)oMIP_&GSrS65Vl`+IF(}R+NRvt6m63Q;8T>4S6DV1vbqA zM6VBw7FR#nX4oMkaF<&TxUKrd2&QdG@s+&M@76Y>lABco9UJT2>(ZUC-((~T7G{i$S56qy^*go%OF35nCa zQttuK(<21;K$*DO{|{yF7^6!RZELsf-L`Gpwr$(CZSS^icki~n+qSve#(Vpm?;_{o z$M>gFSu3lOnN(7#`HV3~tk}RjYzJunT4>1u zC&L18?2tavNbSzt<{h?UdAC3Zbz1e^9wt@FUo<&dJyUWc;e)KsZoy@Ez)eX4Af(%MK;mr%oLd&s`P|8y7QmO2DMX3o? znMPK#wa`RsMra-J5>oi|UTr_K&2(M5C25KZQXg&clq6!wAyUR0=u7OCI zo30dA9F^)tG^t!PA)od+v^eUB!(TAw2$mOD@os5hKHkW>88RYyJ6TI5(PAJ>^!I2K z78BB+w#bLxm@Ou71`sRgnx!y)fvSNNE++!Wm8!1% zm>xWFhQsLX?ICvz_%MY^VdP+OEI3uj8)E#_i(ue>5JqckWf_zE^s3US9FSn!RHWB6 zbdYBFG{t!-$h3OWR|97$~{mU*DE8CP->bB*3=Y9*(h!$)S&Rf(I}`4@8zO=O=qINHR`NR*i;XNir?PF z9Q76uz~fE73pi|BP12Y0ct;dS%z9H*Wz`5OoIsvBEy3sY|BQ(%Mr|rzx4zdl7d%`R z>>^B(!2y){Y+feGdKlegtqe0bJ4QeBG#%4Q%hVy`OwFt{G|+Mbq&3o1$+UN}_qgkz zY;JV9YcR^376e~P&HT*k)6mcPR-24EC@q#;*`D`A5Hi2h_@eFzPB|gZ?+Ehi>+CaM z1OB$HO!fSiU{7 z6W$=tLbKuMO}kt5a($SA_&Wa;&@MiH6E~?9(k%m1vQyOpWwrb~G2qrC&f{+AYFn*e zjhD1L`z3ug)PL|nZfE<@rQd0Z)TCXHmvormZ>9^0(%<$>cpIRH1&(e8KvKS4LBRQ> zu)%BDBeMy@ootYo)Wjg#=!>}cL`E6&zvjF1NbA4G#M%*r@`QxXP`Vs>UD-)7&mW1= z_z7h8hI3FDZs@DcU5?tVHMx8J;Ft~<2pEC6J-zA9*34EuS(8Y%+m}vcahLtfw~+|e z1#`uItSSa;!btg7uT;@uA!!{XY)wnvL%<`1)8&07@!f- zy$rO$KU_L4!PU>y?Tc9qcjUiM5qEFCLfJFG;$789R`wD-~Y~ z^W7iucUP4NSNDh-z?4WkJ>a(j^v_drT!N|1zt0E}t2^N`_0{hHkiU2MhZRjdu2%i6 z?Tim@!)2GvI+S^9uHZ01jF-k-{_o_4JANh_(zU zopu&Db`(jf30}+twIP11xLZkq;JECpRN+&@w>!Hzo`YFEKhZ5M)VEU%YiJ~qbe&!O zH2dGO&zf7r>619w{ls4PzoAA-|C<<*1$-{^4~90BlUKXrL|oSb!cn_~;fpb)6u@{2 zu+CU;v0~9j(w)}YvQ_-!KpAc(niZp)lE#SBRC<6pz4DXrdSQWX!qlBY;$`I)}>h9gTfJP;-=K+mriN#~W138}y z6$PDPw4Z4h{Lka!DHP1d%@dLeZQy+iUBPfF504D1FIsGQ^(OeomzvOLGdWb5+nzC_ z#z^)x*~ITnLYPrj=g8E3L_cNN{h8x3lQw{HgKR!7b_63(Sg`fBI6OdWWD0)mYjyl? zQ4T2hfEI{7koNl*quyOWBO8I_T+=%qae*)))W^SkA7W=GgL0eLn!&a_PNE6%MVJ&q zs)n`ri2oPM8R4Gpq=XEvxwnWI9qTf_)-uyhViu}uBKCG?z7vfmkVv?k2eX5 z@Zzhiw#CgdcLm#HcuggIQiOJ~B}T+92I^lLd~H#Rg!<8mDMf4}rY3op_I?l+4j51g zru~{RQSh&0*askApqBcF1keEiZWm*M;nVEeNxn!^d>lE7mo?B%vHPDilTY5_$UwOR z1DAClgUOxbBu=iumj+I!mT+fr;jx`lk8FAW;f}<)Yha}>P1_X2P%}Y`LhwFHP_pJ* zqCYh>knBC1iUJw=h!w(z@){7fHJ}8j?(d_M$Dc=WZiuS2>oy{27cW8;`Ce(5u@X6G zF7+6Fnhc0mJ(#efbK6h34zMZ60cJM&-DB8bYA*l!1WZHX7cDIbz?i5O$;XWHUswGn zl>=37m=rcXlkA2J7hi?e>;y&Zr*lf`h)6(s+C~50oP|l>`{OkIYpQBobe-pr|{@iR{GCVEw9;>O= zzr4;h===9V84o`zrk<^HDVI8PERA3P=8w2uNjJCyiiaQDzyMd!>xS^}suDa;_}X0w zbH0;*IRt1@KuVR*B{+x%M8E2gAd-=3QWSP!Fbv%%c#iZe<_O)Xq4!QJ*&U}>fod+p z+4J3}$}e1XuzDRZIZX2!X31B|ORc<&Z4_QfR|-|$TdM5xny+P;7>a~bxq!yu2MwY6 z3ocWIaG>3o5W^d%I+W_A;&(NkOYxe;#^J4l55irHK!A9kv;yy!zvl5{Tx7a4J`%3l za8bi*v5Xr<8!hPkVd?3_V>nJ%jit!y&}BwI@|zND$Hk)N4rDeCTr<6AYSn}X%J*)q zknSz6^S~7tlwMm(suWC=@%KS150_w%+*z`L2g{F>d)rYtVZWur{_M^*$#`6Z;uW!Z6d1fU|BWc@0*O2-Ui=Z6e2vB1>@+Z7$!{RwA>z~o>N|rW+0zCYMcaTk;!J4* zdFI5>;t%FugOYEwtxDXwQ=TRCEfocScbpEw41%spa(zb68WlEm)t}O-XEyBveVB*k0qm!Fwn)ZP=LdyUh;*ES zi-zvZ!#EETEu_-=Aux(&Ig17MTq;I(SDS61z#=B~PJ@Y*Oq59ohkmxl^1eF$>4)D3 z_0J*cCQ2_q#4(pA!=nSD#((_7u_JICM~7yBSScZw-lWdPJ!j#8z9ecP6$2{gsv$sT zZVW=!tlXZft31b++`tCBBTo!OR4(NgGz(^UlC@Py`M$^k?xt$m zmHTMVeSzFy=UIO~3jiOOCIHPGsEPP^stRS2iq8woAU+W-;ekPB17&zmMx)!S$nZYV z&Ytb4Qa|oIh4obH6_8&p*%QEEBR}w7EH=0>Dr*LfLz+dTeYch&@7{e1UQ-wrTGd?* ze%b$7+%m9gck<@dNTV5p{?$rng5&FOGQvxPnQz1QmtwkF|D>lr`*E#$rAsP!zt}}c z!cqr%ZM;n8{G^Q>l%`tJ{Qa=LW!Y5lMJbDoq~Bj_&zf=n?xa`zsw0-AKEXE$ORsuw zK#^8rq8ZWT9MdZp2yLU-IKH4Os_Cl~857IY zi8X7m9r*-lT}Srfl<@CJmPN}CbD@B2PlsFxQ2O1`kLyZsf+vJ4!N94t@cHR4Ne*N1 zIC?XlJg`{#d&o)XD?eUfPWh(S;W*!oFP*li2&OcZqwViI48XSv6$AbjM>`e;_#i#| ziG#68ugGn?RQrXfX0ulN{MJd3L`R%C!bZ0oO8URuHR&7I`e~b%OmqkPh3g5dC#||w zRHMc0Pijq0EtpOH^8=-jHgcg3tJH$D zLZFUL_S3MNiC+U9rPqCnIuNG`TV)vmH|b-dpX@#gO>#j}I+I}N&KZ4<8)YdydZc1* z9LGi7d$uF!_i}bbxZ{HCl+b>1WsHTZqBQsr1a6b;TuE!r(wxnhRi_DqZJPK#Kiz?d zJ1^~U-jE>QI$rIAy5E-^47b_?)qQ;WcEZ(sx@FnFtm!Bgw@of#w7?BqKb2uJ^&pB} zap0^|Wz?0nf7QeL_bHF%)Q{$#{`qm4nC|%NrCb&C07m#$l>W5<~V@QMa4`wjiINt-~w%w)%O&Cr5uuzi&a&ADk2WT z8`*UoN4yKQ-)9c=p@5|>nW;xF1amHB`Ic4lK!g1rN zz4T*<^Sp0nLtc3?vFOU73*lk5xil)LUGR0A!Bg8f<-CpIx1aSPuLmlI=x(T!;fe(b0hmW$7O)Ttb<%s+qHg&?F&WEv5rjd--RiWJXSB@p@gbO()iN?u9!6jrKNny3fCH%e5c?7vuzV zO?gRzD51jzQ1!EcaZlAhW^6e)!qF?~%7>jq-i}2MxP(yU;4V4`5te!Q-)%#kbV2ON z7)#I_+bfik2yEe(lBxsyiL_nsn-i$8lGq$@jQi#(x@1Xi%!TiMn*`&eLDk(bVlGh7?@js@hCP zRHwKyZI8YuN-DCL;z#$UQLtz9mJW=I$(97n99u+{B@q+M<8N%0vbIuKXXGp`kbmih zxu53$m7`U9j^#*ip~~hOTqnt&xccJ;`+Ffw7q;UUh_mR{$5Jbf0$NjD~Uvg+wexc@gh$Z6>Ub0>4xFh9jYTXW;Z&NxuH4 zMk8+-+6y9pmE#fwxl5%}s0J>OEatK$Q3wxN9?8jspfO%`&KsIhY(Af};&=1}abPnc z;Is>Pohb2_zs8`{{igqH zwa78gND34>Y!aCMI*V{2Qc}216B&i-DC>vk^-4iVv2KwDE4(I_OI zlRT<#UxoGci%&G1n>~@#hM#M#MkcY7&$$2%I=A{in;^LZlLTwv^E<$ls}}Lu-zWta z&ryA2OlhQRnS$c@I+mK$Aaa_0wkx7m5;d&Qr0CU#BC+Z(Kfb$3p8AIc1T8BN&6Qn6 z8I%4CAa?5g8%}@kz8_(B1tm`qx4foAf;lC2KUnV zqJYw*2GtD3JfLi;Dvuy;Um8lAh7A()@F9` zlLQF!@guqVPc#n9mRMg==fnZmm3s(eA3|i=`XT@jVc6?RNh8Ajd)~1-3hHl#+7fch zjHz}@iKkkTUVoq$`XxWYL+A4KS*a1Mu`@dx-@c_oPm|mBQP~FQiHFj> zK&OR#=hEy(0RM)ASa_Zl@KyhkpyIIk0r{=P=OAY6Itd;3pyRhAI{efF z9311LaT*dy6VGD=84*^UGL*@Yy?wI)c`C4D)w+G*o>n=?MeVb>L*+jr(1Z8Bv01ha z%idKXM^$>&P2ke;MSmm%cySDcF{d?fnfh_R zm46ewUjtGcnuQ+9#cApVrK^dXjFz8Wm^Qx60y9PJgY z(R!sEF@Zeyio;$uA~STL;-sc~hyAX64UW1e>&Ztx&la7&i3haC)9I@zrsPgG!P z`ZfJVJ!9Nre3wxkTCW_$gw@?;Zrp_irO!qu5T|&V&a^dLmZO*9GbMF8$IM5!i1JA8 zgPo~8@;;j7(4zrLr$bHIBSJd07N0@s_QRqjBllG~< zd)kG(9q@FJd}|s#G)T)yQ$z(;`?9cFnOs(+Fd8o>h5GET)6q~&9JpcAyjHcIA;!VI z@L1`sbbF7sO*}m_tXU6`+)-^iJvC6S7qwDMn19Y{Qn$I_KLFHYQAp`5 zCk*cgDqB|LZUze7UL2FmNp-o&!&%Wp&X=?YA^}6jeeDl}gV3g(vrGTsP5D#{KVNSnnOubDOHDL2pty zb$9Z!a(TS!w(8+S0mp|vcI=!oR4hKsO)LGL1$Vq=d>ng1c>9_Y!Ag9!^6|FqAI+hN z>6r`&uieI|n8D2XKIHM55*MB>B#Z{9Me@u)t&>Frn=3Q)@FyF6eG|2u&=oCf>3vyt z>vMrLJS-eZEnVAN=E*5IdrKKad+Tsx6x$7Syhg522uuI0%m2m2IS+2b%3!FIX`y3BIi_Mq=`k?I0hZ2QSu4QV-4X|fI428B#Z#!x z&ZDuS0m5Hp8;0Y~vX(Tv4NZm))VTvgsog~98gr}U%(IC}U}M+HcD1=VcXq{}v(Gcs znrZ$`lg?{K^4G>f?d1roop=MO7o(8M)(Uy0LdsO!IzPJOm_9#P9l>#eeU{VqPo18F z&}N!9q^J&+)kn%&(sixo`JYx$jLnVqKebN%hP6st2}06xOTUF=z~bSFh1Qh9uYns) z%8deu>uNNE(du$`3j`#3WwV_be7#T*gU)+EnYlWcvCeU~9&tSPa<=v%6DQ`=8Ywxw z2j)}Q^s^GeJpjDx=f2E^8#c^j%mpkIRea<$Rivb7V_r!J1%lcy?x+<{*1QECHgCG~ z!wX{ODCDH}x>MOo+l0>*m}7}KrG{Xs@kIt~u@z9`+)C;eyOUSfj*YR>*+#gJD5Y|i zI(Yvky?O9SMX8plqf4oV$U{{_q}G^;OYaMCz_GSfs*gktDin2irk7nj zmF|jQFBYhvg>tpf5$tJUi{5XtlheZE1QWeZ_vAnl#U&JK{nR#j^ACZ##1yO zGF3Aq3B!eZ4^U}4BP=sK#dL%Ky|u>&p!9URqSd=49y~)v3OQpcSybIxNX(FFD_#7l+f|a@dgY)raa2v8xOXKPu@=?P2T(v5Z98A_ebH1E9;_I*+?q_ejD&2{dWo zuVgcm6#0n?NG2-*JBlcV4a%Rb`V^*k#-s1~eq_K9cOwRc3X+jzy47Ukdp#EXL>8Hb z73BSvRhZ3c%dp*ZU%JGpFY99pR$9G&Ro+}C=4o2P^e`5`Jz7Vk?tjh=oZy=BI zjXF+h*2Zo`?`tPS22dBTFBotV(KawDJSs&I>sb9-P+!QN4?icI;x<&oCQiJoqakm& z!uyF_90ak^+o)Q#mN;s6A*kHXEkLj||1VsRe{`R$C5^9upKX{vhRhF&%9AGo{yT+D z2?E!@5UvQ>`_-pnmVnK2>GWlIx7Fm^y70GItRAinR{jg0)iYKtm0X{7e;_`JGcm*` z-Kg}xl}69cFC6$kaQ_|VX^-2MPB$iiZ4S1QpI&6X3arM16*g$@ltA}fj7zRccO12H z)0bLEng$7*(t0=kPnt(N$XIP+3t@`C2Zs3d2m7cNLh*^HPLzKVIDY?l2-A%41y;Z+ zm7`hwcZ84n*czOQpHjwrC8XPbLOf>vPOjkpe+&;f9w!2E@DEO5GrTh!$O6t$72J3; z#8q)bs4uF?#HU%%A~`!efvXVgJhWsytho}f?`+p$3r*u57Gj{Ue zMuVQ+uwPoAI~b?Ue9qJEdba4Y7n_qrTxWvvqxuQM&SOT&fN>EZosQrzMe2_vCUxE? zqxi@9Qred}IB$mC34`wF)-q?^wU7ag|KN5t|HHe~=Kvzv@a0PRY8zqNQ#dk1npI$tI{_+jWd5HaX+9?^MIaUPMZAj>@H*)+nd2mDo z_jbYL>{uJbkQ#4DLIx9RskSXRt=MIX`@~7HqjJdOlp(Vy^8_x^i~ZTl2F8<~wsdvcH3evD^zZIBw*PKn4Jg2gOqKK19q&eCIDX_f#&}cQ{;7MlT-(1P!A=SUzv;QD4BHDVp@3l6mQvMBcF~7dbDV3uJu@Ypar!;F zDIoJw-dMx5=Bz9=J+^DDNZm5vx{!8ORX-TENV65ub@^YAFEPe7JRc}-@|S0qT6TjK z_jy3K%sATYdKspM;jI-8RswUL%PB+{a5<1Bxs|PGCqf7DJd{OeOw=DadK`*01H>BW?KARKi zvzUeAS;)6{y=p5&@}zOz)j5F=NtN{G^=L?84^)FvOxMN8#{g#Y{{`(75C5;wPIchw z(O%?B*O0#eJC;WetDzCWcW&++hX&&+g=2+puGYLBUM+eTlFI)?&6pA2NqxFU|I@gK zx8%u~7D>os)uWeAR{S%q*6$wQ21#|M6Tly_K4it(g18_~UM?pF`B?vzS_)LYW0KeM zMzR?`5P28EI3FmzmB~|ime}`t8^oW5Ed*C1^s&`gzqnGGza~%&zVK$?W8g8|oUstQkwU8EZ=Jua-rFau#b;U39wqy=Yli=*cK^DoFhD zEVpGtLninCJFt7(_yKlkly%>caaS|2&Q~@PC1SKFhFQO6HC*1`oVA)NgT3-tNFcux zlYTlLsC)IGjE;9$hB8Oy3EfXKew={|3gzThR_5&9*IBZ5FbrRl;F>?ViI4(2OJ z@N{$y%G{$e)cs~$+61T|M3y|6Q+jDl5&Kphu?c->T{{C|Kt5w|Vob>brk zH9n^y-GF;b6I;J$!W^CCKU>sux+aR52Ge-&WC(oZwcm6t2NGfL)4V7|><)uHdWGF#-fs3j z&(oUq*&F#}N?oCv!&{e_u)NfV$P13%y=4!G&DDRdpAISNL4PIZZh!Dlv*3!I7gZpAJMH<&$8IFB64XJYqB!sz|7+QuI~yCb})IUY4@;}xSi+U606 z<85>*(2bIS-g&?65%AnR4@5K*Z7HbFD|m)iOGtrDC^xZi+7D7frLiXfi9&c|{kv^A z7_@|er4h)g={yLC2tY@I$iGF;DEJyka0&$(d3^2}_*+Fv0+!Jc^6OvRi-H%PGBcaSeGG*paI zNQFH|rKW@V1+fWi)pXwpm<)y`8n^q}8Sf*b1r?*2PUyIZ$xFMs_jn3W=i0K2I*@ycv3roYkJ zr`mrXptGwoylyVZ`O+&}?UQdW&UELHH`GB0o6eQHI%_BTC#jQvf4|b$v0-6)q?*q} zRvDmoV9VlmcGe^F%u4ED%L4y2g$c1C7=&jsz~kmhp8Zuud(eJ9#4(t)Bc z&uGKY54Xd`Up1OLukV^JvLjDuk-MC_WTQQ9Ij6_lSS%QE=|B9 z)`(`mcu2)+Ur5xTEkMsWYPycIf}3pW#E#oblVXmdi9dd9QX~(aV%_M~np+~@(J3EL zooc`H_pu(3=mF(HT4ruDVs#N%h|?7EkXetX0QN}v3~~nXAy5D^PNC&@BFT3Lq}v@B z2_2()wFi8T^Z`^SW9px0>_(-6N@L>QvezUby6~{X*GuVs^~yPz$L;<3$vt9$x^b+M@I}u zOd5%+iKmycK8BrH}1o5N#Rx=A{$;H6+ZZNl523KY5>lHC4a8a7fU|Ry0G* zI6n!cpPF!eS?l^S>S5sZrGl7e3{Y-Eglv>F3)X2y+3g!I>8cj;+Ann}+rL+o##lp^ zLsKckamH{X_c_IC;fJ6x?^>)t^Iw{6flDKs9?0_{Dl9iMZuCYi^`NM>`h8(_@_l z5SZ{_wFxYXA(-32P8kuuOJe#$(L)Qw)4M|6U(eEM zJ_fCCF>$u>Z{asmi~KsiE%JAI;d1E{8G~l-9_Pgo>7Z<7l&U8F=`4d$n5PH@c-G-t z5$u!}Js!feqslLmG}WF8NkR5I4qRc`E0ChxPxv9!LzTs7XS!b8DFz?luH2v4l<4Np zEBKd*wqM?f0}U!mlUBa0cl4jzx4pVDjwfPgq8r&C+AJFJZSuOX6S}_bDv9mkiZA21 zrFz5vE)-CrY>d_Ak#7ac;4)EF2f8&AO+wC0fsq%6n@NzZVTpmG9Y@6$=iQ@V-xe!o zJ3x{^Xf0{!S82nB~(hn zT4mu1DOpT(!NY_d_sa%dzBtAG_YEoA0_Y(YY#K2Vn)T6-Z}j~AWMz>LFef#f+wuV- zjKm(P1ZpSy*a8)M!WE@BxlyJuARrehbsAGIpd8oxhGrM-=LBN@0-oiA-C>o#dvv-gJXeqV1~Llx&Yt?= zFk`)q0_N~?wr@Wm>>9###}s$=mVBPPIjZPueJwI|c$IozwkJ_wU6-Ndhx~7?Sur7s zU&};?#DGy>BM^mLInQGM3@{sxnb4Nl@t%id*+!Ao^!h$|uWsJG=6`BFcP-z*d5>MI zx3k^5^G5pb*RG^fHeU)g*3L(;%|Ss}veVIBGJX6Hdv&^d=QN9nZjY`OQ|UBiyqwi< zG2-#|pU<|;BopqIp7au`V4v~yAMa*e<#*k*F>zV_QaK}}JIDdKO1Q*L87!7_Z#r>IfN+af z15mB{k*vm@opQ)$dwqb7`iJwljKi#ikSqV0`y{@y=J~M{M>ibg;kXYP_~C3I{1H7) z6*Fwz$@NS4b^*rYc^EFG&6gMrw?lWqae>FJ7cOG)by}JsXD}0@&b5*oBe#y0f!?OJ zmd|qy_f?KMp^fz5DGiPePGX`wR$P6!+T8j;yr(B|rH9CzLfgCk8bQ1X`y~YjB@obg zsAY)5Q%}Jre1y|l+0kL6py?L^LnX(*(ftOWA?DnzOjNB>q2usk;EvFk24|z)Vkefr z;k6q6NI6_|`DHZS_;<3ORrXuyTL-dlNz!eCVGmb{!#2G=1{gVe`O)Oij zk&ooC!rTCzyzFmt3a>qXLda<1Vdrxn&?DvXU2P+Qt9-i$RfV2Dod5?DvYNoq{SfVl zV&K$Y_w8z>smL^923f*XVPPSU6HPUH07ESJ%}0~-ECwmBJQ;0jGKlQD9E^2kB@GCq z(d;0^9?FcmDK-9^(xlw4w5yHyQ+<8r37RWjS`cR#-@c`)QPAh+n$#J#IDH$P+QNgl zZk?=)m6CgMS!U-6&EF{8016K5^CHguEE+;feS8v24lg~%`$2HXcZ`OlU_+$bc2YT* zFj5&l&|FJpa0Uy;_(G3LE<5L-pkTQkGnEO{-hj95jh>~$6CMect)IFM)T)=|+3>sV^$NdQRKKSNaP3hf@6;H%@nXG^ zAqK9zfsbLO8D&W&y)CU93rau9OjF{vPhxa8vDMYj zv;=iB7T<_aJXLD`q2S-~}SL1|z_C=mfG22%E z7aGl64vHKDcrrv{aA25P`$S6Z)7Fa;x07adYWdVK!y42YD(|D7;_KQgI=()}2Ihnh z+<3>Izfs48U;<8sfoanM{j?G!2FC4o0^J9~POF9>+8rX8NfS5QA|ws{oJo*_fo=P1 zI1rB-~&kYZ+=D~Xt%eakZN4kZlE+X*Kn9!8)h#C-^?mq@B-CGnP|Co1%CnMfI90VV?FJQC>h z0ybm#@qPj$m*M!U!`>>IU^Nu)FN{604Jh4JJV%N?9r&sqFjdWBF*p*0+eY6Yu75Ov z?)+h%R=rH~Dx}`U^QyIWrz@&|-c1D~afu>(lKx7~LZHSlO*HXG-H`N2Ke~Ht0_!o1 zb@YOD%f9d~+Kv?^qk|rRR)ywM6D9!Jq&$?S+eA1nr{fxEKR7B;r@mwhKC3x$RjVN%?~AC_1WD}Xc*$I=kOjNS7rN^WDHgKjiUS`V5U`B_{R>q0(a;Y@Y>-ZV=R-N5t zu{zlld{UZfHZmhZamhTZP@KdjcOf4}E5n-2ua2IqfmgkDuf>U|M`4qBsgzdPm>aNo z{G>926IJS7y?L+F(vdZ>yQ##LSlPIo+_l{LrqRk;#u5jFAChYjStZ_+ql-ia_yE;27nGMgy21mcWnO}T>e zi1H<9oL))jRkD*(&+u^;M9*7Ex=rK9a zSqHq+<15HN!^5ix>2c>42y_6Om2HP_-hpPX0eqXD&s&cG?>4p90J@_IB1noi7Aoi4 z`!6mErh%$oEq~}bViOf2{krq`!~0muqX0LX;_UtU2dF4Cn2uYO*#tTgmi-xPDR?VsNJ7V&c( z{NMQMu7eGsxT5J%7<|;wD~`uU!#erLVo!-rk1{TdONne&OBkjt(U+rZXydI)QY&SoKL zyFq9nyJP%20~6?0KWEpX%>Ct^^&w--ni0*#B46i66O+!lsjc0^13=HmD!{f5{qtwG zOd){kQ6TKQd=7y6o-YhgISYXK`ny^NI7fTWU;3#y;O0Hw;_^QW&H66a_>b+MGjCM{ z*?<>xJb=~1TiMUmrFQRU7Q;WLgOrbZ1@*ns4ds;|4c@Da^!FnyPgGLoKfP5pCEhYC z`!m{YZW2neomsD|$rj=jBmZzDqkC7ItxDr1RNFFEPOq2hH;K*FZ@z zq!MDNg=wM0WVFJbk^+ADH-~|{fV^71<^wer8{5VBnoFX3_IvF}%3=RoP_+*;mXxbwTNmvc-qU?%Mm^o+W&h;+j zsz8YOPqidTMFfxTTp=84(|D#3Gf>>!U(@;E_!vW>9}hDj1|3FYFuqhx0Wq&4GJXXV zqG~84^&lwPe$Yup1MPp_MBfUEdH&D+M<4<@04!w7s~Zi1KeUe#?hGspy$s+_ulWvO z15C0*81N@hVk{v07gV;81PuPBSv8KkwiBUg%c}Omst_ygW3k{23b-E)npgve(-u(r zyNEz!Jw$N~BE2rVVD7)xq8K#Ex71Q!>w~7;cJ`b^+lI|ROaGmX#7d#@4@Z30h=K7M zI{esCrFJ)zTEU`n+N9}dK-+s`QhgUOzagA|5R5-C!y6Fy(4@4vx*mruKYy`*=`yKwZuy}@<=MqY_yi=5_yKn()spcMtv zGB1FuL1SvD!KEGd%OPHwHv_4RT}40!K`Jx4DS?nGtP zaD3##^!2&ZjK6aV>PZoQ4WbSP&Nu7K-RvRjm0N$S1AR9MobSuzEV86W4GWAJ`DOWB zED^u9AWDSjOO6mqcu#UITge~h)Si{?K1+A&psfg-y|10?O#vP*HF{}54G&zuDHO2- z;vv3P>wUZOQ)OVPtA()$5V9TgyKQkb3^)?99r(M+9kK}g*9Eo$9`@ZH&g>pu<17{A z$jH!ioH-+xPEynANZUGNMUyQ|q&~?luQ*1Dib~#0cz(;P6%%56m@pr76D0{-36oh& zd&s7%e9u@_BxtXsmN9OK?U*;AZVe5ov=$6d$z`b2pzo7JW~1Er2R%^A6(G(PQfr>H6n+2h9gvdCzukDT%IK1r)jsF{tj>dF-@@4=bt|j(%fyX^W~|MJKuWN2h|K z(uW99M0N`q*f1^@+=T=yd2eWm{xg0DDnT{DQ+wv=j=KxYOVuv#hi8@v?PbN9ibv29 zxv7K%AjqF9A-4dnDxR?7)E9GGBCh>L2*z0fec3{+q>H9@C9boKfZ5j_gw&~&I4n}& zBX+mq)%=mg%=N$#-(2vXWrJag*Fer=D*SjB>|ex>mD_Mf+O9)q-eY);#nArZ8odO? zHBs`j78DkSt)@D^;fmf2zUD}JZ_m3Q=`(Vtpj}8!mA0g(El;k!7DAoT!)+}}+miNr zI`3u#kJmD@M#ndzweP^i4>kK^yTn6|eXWS?wG%f;iXSJ_Laf`Y!4`Ea*pl&}a`6@u*4 z4Vv+-tSDfMhJCM;LLh$3jQg5QR~T0h>HJ&A4#g!h{P)59*ax4qfA^M#gP$n#)a)uG z;#MeB`}LsEp+2ClyWD?l zPhhnie{e7M1-1)yu%2U*q5IHZ^mBKv8qvRz<`HsGAqfd!vAyn*;jxFr)4zr8a1pw- zg!Zyee#hZg8y2xg1>ff(2Fu{b!!hWO&~Jmy5|52(zRza|_F0lwO0th}A+g}$Uiz=+@#6?Qrs>AIj2X2-Ogvz= ztS3JId9Dy+^AqlKVt&S}+Fq0{(3c>4DL>gPH3+#Rf=1mblr_}A+iibInvb_I?8pC$ z$WJ7|sImCM*suP3nr;!`l(7;Z_=zzW8NR;;4LUy$aSK=jYI5>ANqPASXAk5Izgc1u zRj^6(XA~XUhuRkTeaf-KUqw@!!rxI<{Ks`FeYf=C37^}tnuxl?ff;FfjdaL@)6E7R zIq!f&KO+G)Iipc#s=uodOg-yD^s@d<`X;t*k_PyIU>R6DybMXMxPPGaJ6e1s z0Y|P`xZ8^MB7>IO<(U6C@9ydwjLO%`Qw-=_OhS!xtYGjuR?2e{)p;?f>wJAoz5}X1 zNdVK0^Q?A4;4f)=@X}q)>*PBHPS`cu+rBTouvb%|{?_Lib;&B0@#(Q#FqS+v$5!?< z`8zVw-yroLE-XP__OG^ghr$1rC%XF7J-QrRR!tn8B^9}f9^%O{4sa6bZX<}`G`_E3 z1CCKms!m>L#e@|r=KA&!hwii*>#Wyv(ZPSO+nJW?FBZWq9}zZDyQ|jHgMLmjBq8(SXZASi<-7nuc|03D+11GmRv<+2(snT3Z9)r=wt$J zb%85usA+h{BjQxhDmEAHx{|j5MAx%^Y89+5lT!}ALHqJAcFtO^Qr%KxP?n{|FT#*o zgw@3>zaJGom8{GYXIt&vBGv8As&QvQXhr|QpUdE%N9yYFbq!nOyV!9V=tEG7H|e`a z2_4nUPjC&?Nb>ioKcqpR$75}qVHt~E_N5uZs9kG^RU8pF(=oFH&I{T7MyC;@7eniL zx!m6zd+A^Gmau@_X`cWT*CacBkAJq)L>&1^Ic0d0a)od@w#FKn0GeXW5WjM_Xg29H zy3PQz4Se-BNsjuFEz%WeyA$gbE}R)V2+vb<7wzq@jTt=~dlXP^GH&*$f2HCofIAF6 z*L&u6Ey%MAp8xb3In*#l?B^z13`TLJ&7ytqpfU%&<*rEC-Mq>EV~sf7t~}4BQ`Z+_?8`|f$~uUFMoyQ-`AuI}pY zU2A`ci9oNO3M=PvVL0lsEGj6rI}9wZ5J5z@E@O zCmV3?mcXbkEVdAh?|U*r;;E~7Fh6OzWL8PtObt(%o}Clp`Lz^_E%kbMT}Yhts+;wsC5q z(*_x7da~uv_y(0}wXo|GM0(@hiuG+2ktpM#UYY~dVh2?$3dP0QoYbG{g9z&b`L&AO zrpu?-(_RqLt*2I{Pj-*!ORXP88-POB`(@>keE4o+H=F$ z@10_I^^RpsJ`8ck_iOZDmvJBCe1KWLc8ym(t1R+wj8E#BpEGlO1Du2f<_&?S$Gf3Z zV}{lZ>Ft?3L2Y?{`3g%ff5PcZ^@z6$BB`Q$uL-CrIfAx(erxKu75Ma zzoBQhskcL(MMd}M3=}?G&)v_Z=vG+HPmwjo%=i}AoLQXMHB7+I>AjF~?le!T;Ic0p z&aYqMjeKv3&+45YQVjSGq{Vccl)ovV<`bnz+O^JBFlS#hj(h*zMTc1u8%ywMKsYf1vZDlM^r~0f81J&TF_g^0SFIVEKZ!D7hVNJN z)phmDj)NB`aY3p1A2}vMkh>KM_)W>)jUwE$J<;y}f^)Xe@$xk&j3{sW%D}5!b$q8I zXSol2#39h(-l1Y(=^%v*9?V8E^W;^AU)`pS{#&9s0RJh^T>$(h{=V5*VW#=Md3X{6 zw1!ipeU-XF-uW@U(r5n4MC5auDinK9bHProm;6M*=52%`LIg#(dhXJF1M9c)7}Hk; zLnsQzGPWOn;v%|qL03>G|57pAw3{B%IK;A62mt` z=2#!?%w3y5Y==S6$k9J!5xoi;r8JdV4X6V_W%l%e{TpH8y*-paWcC(>Jn4E2C0-Q^ z0F4l#P5+5s3pdyxhvJ`Vi{FTlBtgJH3XS?TC>p#^JYbJx&=$_1ErLl$4Ez6U_p2gr z<`;h?WZ~Xx7b`TeSUh5|%Ly0L6<~Ii-R5&QhWL9`=)a~W{eSW3S5wPE^EdwIoMWi2 zhi2#g|IRtA5z?yvajcaPQ**#MDBM1KRQf@DfESakdB0&C%|Z6Z#7WBVW&_DX3OOG` z&UjS$ByYfX!<$hn&L0zAxmU8f#teki#!8&zjqFoW7Vlb8KPdI_+y-PoMt?%FCyJ;V zP|Q7)vnLW_H%Q!=lk}nwEgW}Z1Rq9=UxvpvJ?JW=dZ(yJ@u{g(HknCbtI!a~T0`m9 zq!x|na)=~BZMgS`Lm+5Y*(WGM3!yC65qQnN>2F;Nw6G?evfzp`COOUyP~t0QlrG=6 z=jfyA3f<{%>`9?wl1{hvp(#@$#K;rBHrl0~VfXdhJ5z_yf3I2#hm|(pMbM%TpYFc~ zOWDom8d0CUvr7hslXqGl>y8TMg z9TK+wW?Q*3ELe6}i}NEaRJ=Ty-unrkp&OT@u^l#zBk!eWgSwfOG1B3eCMId6D&l(j zYW$?J;WD-UoiP;4h$Yx&s!@ z1F-)L?6Sq51lG|Qd>`aK&!c9%se@G9kIXOj4;qTDbj zt9+IGu-@)ux8-@<7B|}xL~0>%s$3zh$Mq4L<_w$hCbqchiQHZ~I3^@df>N)lyw#os zDjxYS6;F5z5?*3b46XrlIew+YSET?Yw=Kah7|to1a&RJkyBqY^Se~{T+%$d)d=pG;2-{H zF&@FP2C|~MPGe>pe~Pp!@4qY&{T&(HPKNil*W=n+y*KkQ+O%xA$^t#@cI$1Y!53@G zA@Xf((Z@9g>r+Y<-Sh(0Ki-#ZMwhh0yT{YuRlQ?0v7oK_9ZBb44%`4?EB)L81-e|O07Mo=56MJA0T_K>S-A*32i$pAhXd;3N3j6?vXJdU0vrt`q5);gmYBZ|l#_5p zc!~xsgW?;>qsDH#<;S?ZJ=*uxM)=l8C17k=g+R0^{Nh%}U#>Bsc8QWwcodcq13Y8?Kn22i=1p$cyZvYv{Z}2X-ERWXI0yj$@%;u4^4$s=_QqjZFGlRs z&W&BWHS;<-+vV}Qxky(5NHPUT@Sqke;d`Xb^+5x3%|QmL0Bqxkb4SFoE)e?hhfq1^ zq=Xq$VG2AfY%r$5T9jkF(kZnFQu53`Lr4)9p@I&kV}qbDxwkEae^rg)&{aUp6@f^g zf;;_ z_2kaZA$nu&iCm(^A=V!_X#+dv!*0RVQr82`z~{0jgSczQp_n5?UH&zOB-SmriXwbo zrxvK_DN7myz-n`?$r>!sHifo8n2X!mr+!jpG+p8arQCAAt+_nBO#DfTr>Xkt;H0^c zvra%D@_#&o*U;7uj_d=%Qg*sK&5ml+;CL8U{aP4qdzR43VWr`V+8thh1Md8ClTw=v8OOp&^r@B0eY1L+lAyHEMD2q4JNXP{pujV$upp0u zZPH&aYZ|RlP^rA7D5-5BqLP?QOdhV0Xxy^D`sN}lB~*lLrhx1kgy?l;_9k-`WEasY zyvZ^z+aIkJmKmD3>!14?Nu-=XvkLR4HrnQu`+3%JQ z5&FOjq=2^iT@E_)nrB+Jcq`#7KB2i_+dJmqUzz&6a^r2+At~p58K{($gOYsA3JT9u zltzl}py2C0FYSY%WS(n{>7*mWZl>s|cY(-WMM{lWzbT8&EM{KN>*cP5_-jE0zaRRd zbstf{urrkF8{g;U-Fq^4Zzop0hT2<=W&&q97wZqfM&FHHxiM6^Ukat);cf72vc)l4 z`DIStYFWZ&)G2BuJx2>-jN6)u&b6yv88iOTcxR7qxQBrlp&Sot2T3ynN6bji7+ z@+yZ7fQI{nM%F}4I1ZGOUHFoxiji)g>&6&~`ADlDF&xwGJ-4})BYmP0)IinzvsBKO$W|8{WTnllWzm4x#zUHe?y=}1br~OeoHG9!;N#m+q zthjt+RI6Ryl0sm|>sZFqSjDuK6`wF{w<8NXP^Z>Kv>II2k)l}f>x=T(E=U*5y1$_q zxV#;gN2yS)a&W}&ymDYFurZ<3iS|NuTJDr__%LwQ<*}n;Be2T6h8Vg^wCWKeD4No| zqFlV9q+%z^{*YKm`Q>tHZ-@OtsX}L6IhM+?ZN!XV@G!$=A&UM5O{Ul~JA0=aVy$`K z92p|fLWMzjFWDS{L4GgM^lTFmh6K+%3FuX}8Eq8vp9%-G^|Ulwz60#6ZBW1eL%}%y z(N@NCyQAc{6#WdIHHzJ@DO1jLIjaiJwM|pCJ0%Jx%p}bwQfJJ@H>`pe%p{LTg}NJy zoGiY&&pAje-O9X=QYvtDnLTt&BlqG(?Z=2Yj6LloTF$rxJ7G|=7Bx(@LIJa_=y!8z zYHlh+WJ`9X+^3XxwC%rtA_7~Zy7(|M7KcPyi0$=|+HS0N$RhiE&b!19VJA%E(Xr^+ ztuofG-r^DZ;SWy}i>u~;@*{S{Oj%>cnbY~A6l_GxTEftZDCnPx@in(e?Q+zVRY#n~ zmx&G4km@V-A)=zzj!l6(nx!SsxtqEjG#baXm2*TkC(=Yiwd(?sK z$bFj>&IDnUVeLy-i6zhXcvsOBTj;&J;7<*II@X;0_?x^B^rF13rge%pFI|LI_W$t( zj~E#B-E{gr>mYII_W8V|Y0?(E4G~0cK@R!N9KhE}-b$(ft|l*HBm^u2XqDumUcDW6 zgswnT=YYkU`wG^R-;eCg)2u_66|MR#Ji-bm-+lcJs2`Oedo-(#YG`J^(&9$p2$k`se>S4xE|t3cz^{`02|4Am;ttEU!9%9r_CZ{r;%+|Na_6 ztjvFXA@6&91K>qq*8FX@0btLoGHSY^#de)%EA1)?T`Xc`iys@s#9;?f!{%L`K{ z*n(jRkWE4fkXZuLB`2DI7mK`Ty(Yrm8;F0GrPr6I+}D#-T@6&}rZ2-Zdg3>}53QjH zm#3uzTV#jfse&TQ2UGEJehPbjhy*o-GW{~ew^!I>JO%bdjHpfzO6m(Q6fCx9v!`5f z9ORJ*4+Ptojv9?eh#-Or7Az$*B9IJ$R>gnljw>PzaXaSoF=CteoXQQ^A zzO8k;!~kK~+PFc}LwSvU^Z0BfsUbYfz0)e`y3w%FdTuBshbX(id2ueAPU>6asg#L4 z(FgxjHp^jkbuVFR8hx0hoSvmd`oWzHyUdrRRkm^}86rv|@b!5-JaAZg`$~oRIKb=6bg;m$AjjjA z|N4f1ni5-n6MmUo>-MehC0apW(jyCJyH2dh4|}OZZvc4oQmK z{o8{tdyp5Yclz{S7PPY=)Q`y8C5lJP!robLp_#eAM_uKl9`a*e@0S&FV?cPrY~ICK zx9`wd4m!2LEU^9^i;UqxbWw(&LW?DFSUXEGv%NNpGC5@cmmArog1@}X(@}-Q<#n? zRwZz6N~Y+x?%QjMOw!#c>o{ zN?+Z^wmYj2I&Nk*v+RY7ZMIExena%USEh>>Cq*izbLb_Lf+p(8pA}q*cu0PYf0cn} zzL4xdKDiWk9PT|+Bz_k>W3(XP95V6U@w1cuUa%vsJ&272jJdsDrpFt-S4w`e?&6~A zDg35`+%TGusKaL4QU|iiT)E(Tm@*2c2#Zlg=uAI?Nkk#LjGcw3n?9-bMOh{XCaJ%J!AB~)DeF3+d zUy!(M)J# zK+-1WQTdFIg6d5CpZ5K+BwT!Q@B!J!TX%)IqogLs9a|pt;qH&Swmn0$=L5;~^bq&; z69^vpLTC0X4?1}*oDUu=haGkxF1OAE4VJQ1sC=tZ_7k}knC@ZMJjx<-zCMTLH@6z| zL*@6c%xG8q++HW6t>=LW=Xj^zrMUlk8A?>!7+q{k@&ZeQB4#fC$V3q4*)a~bx^QDE z2Z9^P8^)DEVjO$m{kqSCG<{T(18&Y6mgOv7)A&lJ;MtWqOSqNA zbNF|i-ni#9<9x-@Z^W6gJrlA#^L3WkBdjHkb2@Kg`Es_-ZIshRe!gu(9qvQ7`m3=# z10MOm0o)c@^5SuF&HNRvIVb1b3rSFs#iAktYke)tZwGR53s+MG9(?;$izub;A|1LP(X3kqmNKERtS`&pG6j15IoA)njB2X^*_lCQ?56yo1PCg=TL%i-6gDcRi zva?6&ys}?SGvv<=Ip$~o+%SazKCimmca*I8R#>tSzWzU8t>Q_ z2fzJZ5kX_zhQPX)Uq^gat=@Ql`JT8NvrV`2 zBA396oRD605xWYR%0ZM#3kcPF^^+z_WO#9KWiay#mNC}XUgiQ9FGu!2R>+wJI7;r@ z{h2lc()bKJu{*-Rim)!zZ82T~`@?9e%&HAEA@!jHw=9%!9m?>=SP^{q%=v58Tn$xK z>_^>=HT8=g5l+luu3TBun=>}-FnyNfi}ZES-$&-R_AzwbK{;n&Dx@DX9g1oY^dpfF&bSgF2izt3Y+}TEPE%pG>9An;#Bw##U#9Y|@E0Wj zPpwgH(6^KOADCi7_HfoW4D#(-^n?Ubi`%Wm8` zjHpt}#ImJq){^a|HCQ4RS1@i zxvmwPHBc)^x@?W6Ci$NJ=*sCcjHj&_%C{;Gqu9FyreU48IA~SRK`1gWt_j;bmZ8Ou z6IZw@wMTF;an|p)1|KY0{NaeZVC^w0`y>VU`MT<$Q7fG$h;=HpR)8~ss>hf27TcC% zq{NyxVth|6#Bm)0^Bb$>4ThzR)5C2VzKx!0ErrIQT0B z^acE9*KJTGZCyc?D}thKMX@11ieBD#xCUesh6_nFI)YZjGlXWK$e9<=IIM%nF(d1@@luN0U_j$wiwh z8E^!(HEu!wlZ8`nHTCD#;{k;`suu~~d@DhRvyRAy z?W)|Ym^fM^8^pF}gbfh4zg0wJWu@NIvG3h%a}?milI`eX7ER5ecWS);=BTZ~_cE73 z7ZUZ0ra``5{GbB6+ef@@ZBVt9+_o*&4lmR~QkkCE(*JZ5%X*T~qs>Lv15^t1(k<6G z?S7@ZZ$6Qe34Z6_n)HV+Dy)uAUdIQ8frZ52k6M;EfX-Q#IF|9ffm~w7fm5r_Vb@;B1$Rmy5HVQX?;QW3>sHz2VqIg`K$ zCWTo(Wi|fs(6El$=^~nxF2Q=xkb@Ld+DBi*vMDI?SL}@3tk08|iORRN6(f(Eb7H3gil+kZmnCN6zCYGV0amyW53rYNy81eBUl^pk{Sf zn?G_yPHK?tJ~aK%+nCs1f=S)__0iN@!Q%$L6I5aA>hb|8&@nomqG=?vTdjKF1*z{< zQRwk|t)J}k-&XJ>$##Hd2fyopAV9l=9}?h6?7Qnu&&OMV^1U*Nk^b4LaK7)hHc#_v z{a4U*Owxr$QoSHbphFH@rIqXmycV(VuK|2hT!!J_vLqwp%;;e!?0>A%u+u(Kdc zo7*NcLP?Uo$5>KYkcsosd%^dXHRg>PV2D=MpnE*de)+iSz0&TX>2A0|7763axJ=A3 z1u#M0Sd&XNBPqJH?BkxXhA)7pV<6CrTI-}*+`d^q~f=|wiaVSVWw+7Zrf5e!!!Woxt{l#6Q zCCj+4++;!(jTrCokkj_B<-pPAqtr{3gJZ#eQo-95fs=Hjf=h;HTm}vVL5+WE5ZUqn zmVvc)E)8fBk%O78~S49JU9`LvaQ2F-Yn@9;#3_0*S>6v+>*l`l{?n5 zUsuGJod3$_IA`g_B>l%8Q_#pbS$YAzn^OeM-5`{$`3tU;b=oz6CKJ+(gabk^$wZNTdiWn&|J>!4Xrt%4@l^v9zj3k(b~Wbk9B&VNvvvPu(D=l1QOZbG zN;jkJeTLOYYKZHtB~Z|akcIuld;8}3S6m>P~P>W)iHbx@iFW53QkI%*XVP!EC|9W9yan#RBDArQ@KYm%jW zlTqbz4W0cos%3kY*V3SWJwl>UaU+IqTr}9sDU$NDqPg+6ctltN^}n%ZGxT=Ij&wwt z)pz1{G(Zqczb!Mlptq2*`r-3wIdGmKX~Hee5B%XIEHIut=RsP-7i4r*`-eG3%V~*R zEF8lZenEfYYr5tMY6W)4bj)Cyr{}B|OZ7Hl``;JCYldz&ev9mFxHSlP<6X z^c!m3=3+bbyT%MSTx-B`u8enw)pG?LQU_v_!lzg$0+b2Dj%l_~IG5krbGQ`UcO|LV z`Qrtw>w;;F=ZbCiikEgYO~Wp6@7_`|(8u4@t0>?r6cvn>I^7`1;#$X<|8j@*Xiw3w z@}@&RHnWH|G2+9QRox1=sZd`{kIscb|1%cMk&&&a!)Im27$>MVYInSZjPDn#H7`75 za7@@A!%P48AB5tPpF9A2*(m>r9HlH1s-XQ0UIJanm5rMSUydU2ki6(yAhaZnJQ!?; zbvCslF*Jp)%@V%8ZA_Aj$&Vikn9t(Wj|tv|RRi-*vKyT#oKhaly1zRTb$6@l6DaVy z)tYDMqFh8kEUDww<(=(VN6ZyBHTE=_Ln6%YndQyxzEQ2wB%kOe40s_TrRrtK)?@kP zjhj?veGGW*)5?>y_nu@Z)0g<99M$k|8nI_&xED4{2v&gN{uxI)B35R*$zp|f#R0*3 z1`E}{))yL$l8TH(HCiXY<^nRrbq?zflE>qae$k;4|EqBC^L%;UjXhzme4s77v5DgPC!08?&M82b`w&=L9MqQBF<11uiT*RUO$W(z zM4_2!*JDI>w%G)!Hu41>fxLV;=Z$O`utw9dxnS~?f_S4=>qx3KC<8G_xe!x=dzG>d ztK4DlLdag_EiWmf!B?c1Guqd1&ITP=5$7e za-^eArs%OrS;_flritL&_w-JI)H}yyB1p|l(J#&L>)Y&J0+ne8oy;eUTC>Ja8Emw& zgzJ;52fNgzruj_o!%J1KZ+9;(557}tZEFg%O#ZX|?8{{tDh|47TeGx#)6{LvkqixV zi;7Uiz5orsoB<~d(;nm;`{NOQ;W!g7#+(hCbzKDtPC6}`QS02v5oD%uH>@X5eAvq> zzb%67mv+jZzaEd^zR@dssecu#T=T-G7TOXJ461n=g9iaW`YILPcG2DSpKAmrvGf zBl6fTvb>s0s#!EhLFyE9zV(TUm@C^XX|M2(YH{twqnK;PW)-N2l-$SW?vQNE3Du4{ zgs=YIXbUcvXs&O9aqj<8kA-y3_lt7p<*rhmxqLI*9npYzY~?LjhM?ai(j@-@QPr$^ z2Z5C=n&lp|qga}0qFn_pNE^R3DPZ43PTvJDufVnQEe;}fX1VUrzUJ9)t9fyty2aIr z;9NaFrHW8SDU&0d@bYUl0#WVVbLYp`(TO}wWlt}yv#W6MXFsF5x1Vh*c@2ZWa1l5J zF%qd;4jVfSn(*>$jw`E-oHR(IiAz77o^0p>0uwH`w2?mx!rh!0VdFj8*uA8vtI4u9 zF0^^FeKsyh)lRwcpi%ONr1}$61Th{e<`|+(m;FyqT4n8A!?RyJ?BwZpBGOuruZOfc ztHN9*7D;S3d;!+f^Mmjk9xL$huED{rw+1F0>S&_bO`^cy+Rd^#Wyz&2D+u0vn@5$` zU9$W-p?n&vBMAt!$^;nl=ex3h(AMYAPHb>V?FsDaj^8y>(OaehdXXCw%-&2Aqd2zp zPu)XE=r`f_oo%t6S$M#;2U=J@hnHJpP3vE2KGJRg+vUxpjU@g@AAYqqRomTWKcCy( zowtCVh+bl`Xz8VJB%gj9w<&Mk1o4I})3CrHVg=)KfdnDeYvXHt_M-*_^-EIyB8LiW zE~Vf0xsg%PO5}{h;f=xD4zVD~tVcPOdgu-nKbtL^T#8%4npZp5`p`CGv#lA1+h}Pp zWUGT)nN$UvwVRCSviHsI_;!2dap#OT_AU3c)-%)L_ zcz0B4o7-eN;Bf^f(ha265e9X)Xe}+y@(R*#8m?FBTHe?dl9I>wv|fmxyLVMK$rNbUHS$X*8>20A2j)Z?U8Rl|HjCVBP^n~-~*5}{Owl{(7OTvF2C=O0pp|V zZh)jCz;<&d4g&3)-_N0j06!8xYHx(lLg8>}J$o*rHIVahS~_#9|qzL_PV6(oE*bIZXmX#bh)GiL!wZI+_Q9X;-8>`OMm*E4Hry*STMOm2VV>@tZ(M}?_ z8RVjz#AlqQMffxlaRlt*gRdNW>zQ?)$8l0cd|Ag{dN-G=6?`*UHUTp}qKxK~p)gFG z4kh}6jRaaLP-r3}eEbUWEv|5cE-8`M%v2R|v_*pL!->C9j2`0evZ-m~ILjX3CmyD8 zMfH?L@beU?3F5+T&HBxGdK{?X4$Ya}I2hz~C2)K7Ku*sC9qei68rOyPk4E~4%1jrB zd&lFv4&&*u9>`IzM*eCsO~v5skfW}KuB=ftOHkruLH@bIjv~W5SOlx8myp3|93egk zuFhc7jRBU^X3>v9NM93ud;+g^K$b-s90`7Eo{xu z3WwC0M7$O*fGedx5I=*MD0XRfT(D5)?F21T2#j!wpGB^|Of|TOT6WQdWNH4V6hY~* zb`RFU(!99@?$2TE5^llr+yoke`eCiyTRN+R*>DKzv4fSiK}dpCc%3HZpJcX*u_)D~ zLbuEwckjLucmiSPWvYWw%KmF8LL;Ky)M%nZAapOovEUi_ZdO_Xa`G+z0srS!e4>#> zMbW@P86`o{(RDGcFRT9n7(QY#@;Wa;au6V#WG zP_KD$L+Xtv#jJ9W9uDl=p)z{8*oeP+GH~nf)mnC4@MmjkbVDr{UzL`R&v*uF76(03 zf~4AhV;Hkd8FVXA^b^wSph(1oTk&+FAwhV{!^>hL{!98}LIvVp67<>_I!F@C?ZT1&;}p=e z2u^hOE2i@0;_6%9X=nJ&rqIV+vcJ^gDV~8pG*DtKQhE1q;wp5UiVAieTAriC1|E>n zkK9pZ>ch|Bv5Ops`)OS(8pdC2aCl;ZWHtb3}A^IrWb8 z)>fb*2MX-lVX4MQH;=*ptzV<_M0M?kc$IgtTQ^5g8pp z(MR0W6I6r!RL%H&WSq8DVv@i0vaFP}cK#!bq8lJ7=rHIh40GBavO*&u_{{>xD7das z-#8;XVC9qO?J)`YN1Saf{u{rMvVTO%>O`2F@U1hV+(CuizR@Na_OX5ML=~nJ0zjKaHK|7UYz_jK5gbQutU>9K5c~om&c_OwrIBJBqBo6qX&}gnVLP{zi zTCQUt@9C;3#3hyx)sOYsJBIImCI50nwYY5{K#6jnAXwo~C;Bt>3vnk-@Y@Et$Rb8` zM#kTcjICuY$(srw0%UYUqi9dyznX;Z(A?)|?`jZ`J)7^xo=FPqJLuPkbO=nYUi=%` zkRZvtWGK%J%E*kvIM1R#bH9o@8hJ!4y{FZqkZe!oZk}IGA1&Y!A&brDh%?HU-JmM! zoc`CMW9a?-DG3GFc0t^y@jS-GTx@%8JQ%u9Plv%5N)}&3Y)RY=7z&TkxFw1sBMnNO zW!RwyhVh?^szS4LU5RKiZ&vskyG}<=g0ti60*!8KCfD^M%5zk;oEm=kcz0q^AVqCT zj;;~0n;)GJLm@COuPri|SAsi?R=(o!tPw);n~x%>ray!s1vK@NG#zP&u2nwf-ohK?bWgwL@Q@#)_SGIfw| zP#UGA$F%39MS0KJLbabnD_q6ZD!i3<0SE#4S)bG{(l_tR;t~*;%qx7WSNoC+uJR*s z$^9cL&)soNn|r*Wo+b8t?lQu4gX&S&IGZ3T;`Z|Lw)gsJN#|_@xk`iYrVBQ#OX|?! z9mlZ=Xm6I%Ka)$!YpF}uD9OB$!x6%|4HRB9=Vy)rq~oEBlEf_`MD?PrMGd;*vIXX4 z^^kX;!&`M=-q^p9Qe8}`ee?qzhJy`;;Wj8?}?L7yF zMD?EDOULtqWxfmw{&MA{zg(1QzbOJ193uUSUg_LcCx{#e$oR-EGtwDD+PDi}D( z2eQ2DMDEDSjyT7z-88%AZqc}Jr}Cr7O3f!+s(UhoZH50OxSgcBN~GAWv#jS5G`>9e7mSlHrkl3stUrLDFeFM_~5Fn7t**&lr9a!{>jC=m;8YS3*J9 zm9Yo=3JKl~9+Y-L;Il8-l6{KQw)I+Q7m5Y4`HQpzvKI|*ke%U+0UKfQ+5L&<(p12CtfYNtKto=#h|!C|RAgEl#Qs2Hm@MVHCB&Y5c(f94`n%*l~)VE=u; zt(q_aYNWgFp4X&I7=u3^&V;!QFyy$&q~OAsd^bs2yBq0O>>L!|jl^sGB_R})HG!nN z*_IDhwF>T+I05%Y$Vepq9kxcQAjB+Ss*vrgKtOa#pPqxa+d$ua&o`n%c|&wDbU9;L zaxs82d#@NviokJ^MZxIdlf?&$g3IzXHhG;`jxd|M%5$n}Kk;%7rL6mvj7j z`G-z>>-~pLzg)HkJ9){%*ZCUg?SQZRu;?89|HGm|q#dYbbmUhvU<9G&3eM>Notwz#(Pc=o19 zO78NulA5!-wYJofx$V6ITK4kvvU~|7-d6P*3dK&%2RIUy8*dDX* z5q}DX6MT-vb~-OIV{3hx+8KoR0`zJE55=!T4~7I7hjzB zX^%U9LsRbc+gykg)GVlzMnHaj(4!dZdD$JfA6y2wK}s+*gx6ErD41Al@6YLeYn!&#po7@ z>a?s+d**Dz)}oGxZ!12|`ib2FGWoG`v+%Q@HqG0Vk+Kk%$QK+`k0DEz&)Q(vk05DC z*C@LNDg%p?iqROqKGr?JOzphi=_48nlB~U1fWVRI5oW@+9p3+@{Z2R&%T(_GWBvZ8 z4>I1gJtJ1w&%h-wu1FCyZ4LR<)W41?XVZAcfwO=-1kAt|l}4)7jryf!+Y{y|CdC%qWYYssOM^SEsh3IY^oxzJm#PD23xiwNr-jd#WC`QWZ63Vq6E4w*+! z(C3I^V0OXR^B2jbB>3}wj&t_ESja(I$xZPL_H_d`-$kInGNH>E*M^F7FT+T-aq216#O`9P?@- zL)OCT+Yc8WQ<1OU2Glx-(=kpOxR5WxnX`K)t6SWZ8$z7cID3H|H+KY0uqF>~@-N`T zZ^A@Nrll>lvj*~hu=Vsj8t}-5-mG@G zBq#1ls5PUbq%CW+gq!K5K1x?9kyl0~xJE@bRW%N|kLp>|9i%A`UmlDzNcIrP{@7Q; zQ#axP%y!PwUDif>8KMNaU^r(AIQ}F~$xa_4pyhpd&98^11PPvr(7euTncys~?m?$E z5z$v&N|f&-KqUUQL1CzweZ0nlX*CoihTs9uM_quH@7o4fW#D2y3TiBcIp+3Fo5Ocq z@*h0<7>wG3jq@{Y50H*jSFSelq&{O&5w;58_*!Zabzfh#^i$+p%XDIwdT?-6)ja!3 z-quCU{y)S1OVtjA^|F=o3;l^m7_twtO_1*~O1d2+F2Db^iR_ghgh}&2#g8_C{*#~I z7bh5q&dxh5`HH0lZ9>TyG=}jAE`l%d*s;|+18D}ivQb>x!r!x2)Z%%$5-(>V-?gon zcs2|r(cjxS!Q5j zq;Ihc2|d-z5V-5FSE#WFg8Xjb_#%FRnoks@H#kM_lSWY+=5zl_y3f2^RO}Ym!V92c z!!D9Z0R$B&ua6}0hx>2iY#X?`UGyt&xMfllC6GhGh!t?r{Y%0{5*y__@FqY z_5b=gauFYr1Ocuzv}zI9z0M6P0$;lOAHS@46R0nK6-*26r^Z}#tv5rPP-Y&mSwt3&>ys~LY zCk6$3OKZ8`jy2d4Uu+2>8)MsKR(VbL=|o}!dKd%n+kLLVS|BIknHQ{ws();taT~$+ zI*(%+g|-Euf}=S7J=i|Y9fu4!I2e*;;IHmsy2Y%E4w_^K?-P3@H#0S2yFw+Grj(xh zXS5H#-%3ecwvzblHQgRq7e>I$aVMeM{|xx?@_yc-?PH`$UESvV+*-9Gu_eF-OK?Jz zo|AvO4Mqd_r-wQNrN1LKXm+gaaux#V7jL|CK&p!07In(`jDmD z9iWwBX$RR~o^UUSkYD7=u0;8M(Mv>xSAHR`&d3gCz>-@VIpe&hO}|Cq*^&B*V;d(c z>~An5st@9&2~^(OCkh#6zD;NhClvasEs=C~HYyB1iYHD>P0u@}=HG}sb91b^M}uph zj=}x}cpXqJtGkBFV~yBtJh7K8{=>qH(h2h+@p;#Wt)6Cte^=HAR(}|bOt#i$O?2@K zW{S@nSt^n~r&*G9oj>y^Za5I}UL}>EJ)C6R2>``%Xj9|HA^2=#@1v(d(t zWZStV!5EB?5?!jLmbP~U#Ta*o>TqmlSNn zUpmGha39Vv6R5w!6wL79P3?K`x5R#liyl-btz}j#P{wjLZaN=F`&YuXn==+W$?-TI zMUHZCGog+e<^%yWWVHB@R2MIYf=%sTmTos+Nh{wU z*QfuBv40M(Bx>V!;Up6~6Ki7Iwr$(CZQIU-6Wca+Y}>YZ@;ooT_d9j!)T!$IPp`Gt z>guXp)w{3j{@s&H*DKvYSN6O>DiWWAL&tfiC;OtfuxMXmJsgI%>Z3O*k z-#J7mI4Lvqtv;Lr)8ZVBNEHnW z_coPYv;@*9w+<_}Jpjv|vTuIW&z1K-yg$p(=zvpl-5#Xx# zB{yKOgNRNSAqYh7f)q*DMcLDlrYLI*V(?qikeQb9%PGf+I~5#)w)kpIF9#YO%Vx6J zsxFj85*)cm3K2sT%qzA6u@A!gcDZoU#0fr$=HqaQN9rut{RlmGtcMZBdEQU+h{rR_A%IqpK!q~5&hJwZr3bt&Ew}_B zxtPd@1xUmpL@$&lIVEd%j@vBF&hua&m;f9j7;bA#T^ROD0U+&e488Dq9xdG7kRWW$ z2PSo^AqVE7!)pS}jTeBTJp*Yuy*Bh;UBfqBIdoxXD2-D3kRvpSE_jYPB`9M8%A8VQ zzGyzK%M%ej8q-o#a#Vv%8wl&O9-5}Zr4)qc=(q~d1NUjeVnN}5eB`jO!meL)3pa0v z)k$xwuSxwQ6~mK>I}_SAGE;w{)NF=b5#`b)&-K2LC0VSmUWraQJ`5fNzitn3++th` z|L9t5jW=d6t$Aer1@DS&toGwH$Fp;rnEt%repn4|3*jqFKUWsyss80FgYvb-DO1@# z=~+@v^^lGw?{!{jAc|~dfsL?DLGkXrpaV{pBp&p-tzm--Kn)&at5MSu zH4aU@@yCp;P%?g?Do|BTC7ueisD`WG+~e{VQ+KcAV2J>$slk`?0v;9%gS5Z&T+a{F zCCzqg2e`rXFSXbh6lxKO+oXms?+g_wZ3@OY>R?PMr1t%)W!y3I!bK%Qo@$+}m|LnC zI&N86{hZBAfj=gUwcGD~ejj9QYU}Q( ze>}m=Fwy=O9^!9Djx>g0T+u4^6DC9BPdBO@^y==xl<}VFi@dBNz>U+HrW}_g0!LY_m z`jd8o#6I>H9oar2;y|I4A&O)nWethg$4*>2pIo7?{-mRE07*C}WE-s_6nF7% z{-a6@HcsI`-OVT5mg}SVW}(eyokLM=hb@*X6etRO+P~Yzr?(9cjrEH3rZV}~mc|m6 zknTHjHt>!Qt;qxT{;Lfy64#MZ>`5}7nNF??s!Vz|^qQXm*PejmOq zN34};j{dYA*>ZLxtb+P`}BbwWX`o3E#YI^t?%LSCE z_ve{K$VjL)CxbPaL(eQpD@nJ zmxib3+9h7M@8d%PTQd#&;I=F1()wo>&bQkW?^xXT`%WMD;0MdzH*f3n&euk7jv~PWhs$*g$hw&~Ra~+ad`& znZNUOxfGeVY;5Y86x@9r!*Kbr%-eg^NkT=4QagXIpeUj!=pg|ijH(kf-)aTLEb^5 zM%OwqUpvk4RNlgY6AU2cX1rB{M+)P-KW=Hnv~YICP)qCP(BTo&$f60GX(o@++1-CWmK5X z7ngU^nn|C^{8X1uhvB7Q!>|N0HhlxrZFNz95LgmS7k#{H3Q&4ou+$uwaqojSQdlO7 z=Go1tTS}bJ+*s-J9q6xJLBWcV3u7<}WANKDw2mSpq~WkK2sDe%iF_iC#*I3 z7tX3+HR>zK*6oCz4{9yEQ#Q{!vGcwY!yLjXGzfNh9h)@>B7M@CscV|%re&Z7#JyFp0y zA-ad3QTzpVmmB78?CPrcwUnbsZ^(u((BkpRnhMG za~%rU?X!+Oh(Kv`kTQ{O0eLq`c{kva1dkzyNlp!kyG7~>Dj#9WECv_E$z_iu1eJt8 zPc?$>Zz*cPCcv;q*TFJ3QJJkTZRlY=CDf-xeD{|9kUbN4yTdR~!y3qso_EsFA#pMs zD}b8B&7|0iorB^ZKF0=t22kC}R%%(pyb=VZRn%#VCH_KC`jAbxT1sglNt2_jfQt=v z6adr{H*r`fG|EfZObz-MJ&`0L-x^WLDU!)hP$iC(Q)G4eNbUh;=t>XX;_u>83y)h| zB!%3VP!Cdb-`DkzY=@Hz1VGa*8+DWR-$Nti4-0z{z;Mgxou4e zAj^B)vv7fc#U;2iJ)t0FCSA&m*AAT~8y0A1@GgC>sRtw~2||`^TKJ8T!H!DHzOuj0 zKARr1g>ONrc9OyIHHy48T3Gq&#dS5V8ue!9?3%TibG-^Vjnwlj&BSxOu7TQ9L!}p) zn^7T_P##fp@-=Rr%ps95Oy8JBBkG%5EYXJ(>rsz)M{OiXOxmNPpi0&61X0w&X-YyL7!XMS6O;Yby_*G%$p^?$Ss{LwIz_}!k4^7 zcCu@;vrSf>?sneZ92F*uLe#@in7a0qIT8?B0B!5IdVOi4+cFZ z^CHeU2|sY70Bvq85C9WBfA$#j&B1J8oB9~opfEZf*6wSmb$Bb%tMSrn8MGpIOfvUx z*6x7Nvb>m})2z-ZQ_547D>ZR05o24+ELFX05)82vPr_05=jM*Mv_l zGL?j;G=|YZm4VcZtP1dnWqE^|ppr00o*tjdY{j!l>=T-MnP;!`6iru@N&0)z9bQUo zKPpO!r+lRB#In201<}D}WL?W!oh^y2 ztD08zt@raZJ{b($5Pr9wbeNOCbuz7^xtY$4$JjhwFq|T_w!Na9gDv{53C0ZV<_?y$ z+?-SLPQoc#jQ$THRtA~A+|gg8G$u4Gn?r1&xm{LT@O2#%HF z#H5vjXot8O$wuEmso%vD88{xgUeDZK3{|GoN*>)MHA;JVGpJ;}vZ`~qD^*uTMCpo3 z`8_D3GYH5x!R#rIDK`EscGFmuIYdj1<|R$#3o!Yk_z%71E?HZOuQMxlk|9{ZTU4~} ztqdwoKF+Dgarfc~B7!4;Z%qyG0k~p6ANGGpZpuEfVNCE&mv_s)GO)s2>th+@!^jME zVJmGRT5naNr}{~Vv64F}*aY%h0EY+U@lCxM)jFNz`pbAcun-0u7Es03)n|vzwfz9h z8b&Jf0)ExUoCA;(jo8?38XAM$k*z4T8n^B1`ZPK`yB^CfzpXW|`@O}aXRmiUtwp}K z$WGB4WrLa+EDnG71hNX4ueNCNhsekn$ii^<1ilz(j2U6#zrY5@2epNH^W5E}l<44z zb5G7UPi#=WX;8vw?@i&aU^Q(Kbx51B#&_N%9&EVVB#AETb)bXGHOi3Ub^+bfMZzO7 zsY@!utamMgpJ$E2Z6@*FOX!Km#hBKEr%e%fkX0+^M3s(~@F!0rt2aP|H43J{zc~^R zD&9I~fx%6PF7o>#{<*YI5zt`83?gdRW4-E&iOcT55~ZPT#uGPnr#k{5hjn5qUrvJ~ zvB%dbx1ysZ9M>F}Whi!B=j$<)xkkjXdWonOjo!XzP6d1{Ms0IN*h=9fbe`WVaf0DZ7 zS{blVZ;!!reY`J1qWd6^pXrs`nvAaTok2yl=Cnd?D!w2{y#h{@B+Kh;2&V<7h zlSch&2RJK`?ogR(z!{!X4$6)_+6gIhip=wbi^8-sN!!0P^7uS!p_8fc&pou#G{s?) z2MB1m`UJ^~zV3rxhj#wbLpU*rcX>$h$EU6x9*K%&y4G+hVEHh;6n;6h+q@{4`5i&v zRlUa*0%$Mq^VaL0O?)Q{v3}!#Le4C$b4O--nh<5IofMa|Gl@4K;`l1$V2=~EhEeC; zd+mz)JyE^&C>t+!*%t}3WuZnXCpkX&QabjGiEXOWk(Xh~cSA78O_nKYD8@Y91f>x< z?%SUVlZL{Tr9en6ykG$#En1KkhFNZ^Ue$nVmae)Tp$@ieyV$yUyot56^%n5R$xmA? zXViFU&{ZeBKbYCUgr6Yzd)(DAvYgDYkZT|Yx^-;Lcbx9LNOR5$bck0g7jqs9ct9d5 z(K!gfx!onYp)L*ekhpl!iszb?So6jn+sLiqM;^D7ip!x9FcG?Qf{YGcGapWY4!{$- z_p|<4CiO7wuuu1<)lW^0o3g;hR)*cBH!yMAOH5T52A?`u zPXqG)XZ_cNYL5qZQYkYqM@yCiW>?ShQL==Mp6<~KVWarV{J>3sR)!L5`!`5Sle@XA zWW{c6uS|^wczChfeCd{FK9v-W$9+f@N{BXhmkx^C1bLmXysU~DkD_c+~%o#wxpF`lGTyKGaEtFbYh9Vh^i_aiuhJ*m_`Dy zxWpFEtvHuZMq6x*@}?4YJuLf7`sz4A+9@39DLqed4H{9=><=%@(Bi3gzM zV6RgAh!6jy2PY&PaVDQyyiqeLkPHgdauX_gsPM!&FEi_3*5u@wj+UV0f`6skOLzM2 z;C3ZaRbuaF?m8nESpp!vgkgBZ&%LK5)4DJSewcH;@k=j z&zvFME}Pt#!NFxn@4-$nq+jkz5AR*x{CW`sPjP>@m9_GtC>8ao79_x~YPtHLDPlqy zu%jN|8JfWkvgV+>5w!zmb6nDbY-iwRB7MvlIKyh59oggUaq8dJMSqA;D`xW$I0H6S z&WE-=^PG36pf^D4a+*Zo#rX5AK>&$+W#6t6*M7nZ0~cpyWLGSbXJvfUqD%}xjmMQU zj8}woWi$bKu;aK{BpG4Qy z`KO-)RwmjL{|QLp&pnjrkvav>8u=`Or?}D!1A@r-XHqqBsewDI=1l0-!Cm!@XDB8f zO4u(V`z7an>`Hm9UpSNUl3q8*L}s6P=G_)57|xSVc41wQPv-%|5eT5sN zXw33@BuF?={<553#Cb#oKm<*f=%b45QT6uU_wL_U)9TWax45sojV_}M5^z$x4o}z2soeavUP57HMeudbC+pD)5(^%+7{d43VaYJyLNOx4;Zs@sTX~^NS~Av>K)4d$fwvAc>+u zZXElwunwz5LdCG$suFp^{Yy=uz$sF@STxW3gi?rilEiuube6eGUsiZ5tB( zM}|~zFL{gY(H5gjm#3`hy&WmEsD7<27i=g4su^?ug8|yqe9k8+@p;qq{O^KwDwEHu zJjO)_b2gI-vt!NCD4%}*>7n3f0Zq~LLFh&LKpcsRCWYPx9`%zEPc$Zh5a2}qdIJco3!8wuMkgTWu~i8C67 z&<5K%tKDV~8_kiBRZJOo+KFD{h7MW`ZZt#7VGwS*ON%XKv1s)*Q~R|M zxMCWjT588@Dss$awi|8j4ef7n;rk~%QgU(~p99M^xxCQonf&5U>&@XW+iz5c-%RJF z2kYNIB_Pi`xi;VTH&<`{U&o|h-L!oPI&L$1<#x(x@a0lZ}hKoV(3tpOWqa8GZg*+_)!0*FZ}*e{_K*jq*JHRZLYMnj1R zurfh_(6^7PHWpL91$H4G_$Rg3ZN>#2JH6ckj#GukMZM7nL5=L{ivEI@ZpOqJLU{9t z%TMglq*e|G=LHFNJM9u#?zOH*7xq?CEVTGD;#of>7JpM}?MIw{11?v-x4c@_zwP$y z48A*Rzg3=k$Y9>LLq4zjzuXMIsUme&zG*M~(4TtV{uuvv#?Of_o=Qiwr=I^c?|Es& z{eKT#!qWa9LqALWEc(CK`1yvGve-Aog`eEdB(`t0!LMW13qLkiv?o5cTeX$1=l{LO z|JbyJrs4RN&ES*omA&Edy6Exy>#Zv$Z0XJKdw28a8e=|uWW#3PpUq=l6SY)qT^n@G z*n-F(F`Dt>`544I`BtHK#>;8+P12hhuFU?NbK{y3y1TP*UOjOwp6H9DvxATVbqb=a z{YSbA1g&%P$aG*1Cs9DlcEp9_G(Tj)5IY{YV*i{OPYpgSl%UoL#PV~a4=`Q>w<`Ou za+T0)pu{Rlv7#K)KtKabowaKZl{qApSfv~Jg$r;M+vf2kp8J0lu0Z2Pm?nLhdsi;? zW7rc#8*^+SIz%#;Tu18H2tC_ZIlg1zE%jYQLL(t;lb<^PeZZ7jOOzZ z3-uI?tkq5X(lLmNs%)!4WDIAGg%sS7G8yo6N^qN#5GeA>LmbZEuyFp@D+s6Sixqhl zc!0q3T(x|+e&N8b`iCdFZ?N{KCO4*oXAj{PHTG2Yddttg^Ur8m_q_D6|FAvWEr`bIi#ikh-c^pu~4czUTA- zY`HFr8*2jAFQNymlVkJ(IE zzcmCIw1|7BLe#1hxpa5m!N{5BujYVK7FC5@tIx?;SMW|;K+AN5sG?F(kz(2CjE@ee z_!y54S)S;(BGqx9r0z78^qj<(O&@U!m9(dG)nP#xo9Z!uj*>43r^}&6mCsXqk?qyw zbQcj@g|vmtvxgTiS6;%>I|(a&3m@yNGKdcjW?n?mg@>qZIQ5;<73{FW|Ar)KxbSZ8 zAu_lta8S#`75NNc8 zIc>4JE*BMq+p+-2{b)WS|J8glMCX`alPgO^OZ>xy{6O10DF&Br6)1UX>tpFNXL67o zS}GFe{R%77nnpB6K+T*xnph_|%`PhyCDwl;2@-Ltrp)EnYo1OXWG~-80`s{^6={?ZMB~$E6+)&Rr9j8>dJA+Y^s~9`W_8?5((Gl8yCwS~Y|i{sysuBJToi9mP>In@iPmFb963zbj9MJM$gqr+ zp8_-OIozytQ!{YQYAdF1Vs}&9ogM7NhS6)k^MYwjVTLdqsz%;6&P@CD=gqDB{I^BW0jG%{S=otfonD!i_f=)0GjsKV z(h|1GRsg-7%~#ei!OC;~l&hC*U~X;rAN!!$UoVPD*g|=ukw0%7w;7W<%rT-;G);r= zU@>RC2iNq{ktI{EHUamT5y}@NEOu^oj&*65N>WR~3&#@2G$gY4U$kRigp7lPjKZ&@ zh}u}MdqUa`h;OPa%ZU)UdP5p9WsB#{E8zI3YON>=$QN6gs%w3Cce>vX*4k+?k5U61 ze*hS5PH`sg)%na*9wGlYvp4Z}dCG4>DwIQ4&1c@T`*c7zY&=}yQgh_C`s{&eX#61i z2jbaK>ft5HrnDrgRkJ%;Fv28<=AXpr%nAxmdF7@(T;T4iUHMxK-l(iO{m;l*u?YvDRN_I3U9#{EZE6DB}m!lgXy50Pt6ETo@Z z4yo#Dzp?_X_w0qePKjXW6a1}atet*Ae-)3CuO<-JLL(3FfYfDj_OV!@>ylj9W`Mx2Df1qtv$thE(M_wa zNB6b@80~VGXMPK8KTCrr-hNH%nJ-hl3pz}nVZh6&8=P3EZbdJLTqixB&rtaRD8_l zAvSp(uhhb%WCWh3{n{0O>v9SXj@QQ~D}U8g&uRBlUm@c7b_o|O~%K7wEFzd5qpUAk@D)lgTb z*OI6Q_q_jw^BbW_|0Qsv4R*giAMAauUCR@~IvN%4^K*FX9za~Zb4|dvOJsIVYv{xT zui4UaZ%xL}pnq7l$-TRU%~!z7Dr>~F;h@fVtEzpTTgdZd>Yis*I<$7lH?=?X$aJU= z7JdAUkpK*t`x=k+1pVIx2My4bk9UZbq7S>U)$FH-Cp(WUnaWHPALX4et?tODO~kpk za;>HcE|HDpp~ssnY98OzTvb)*P#%h888|2jxT(jlg`*SUI6}-E11jV!?1y#aSz+N? zu=CtN;#!@ATdjY%n#JFEmE$F5c)^9EJ*wB?68MK}gPE!a6Yu-ey9Vn7O@ma3>Mp>htzIWC5Zemv{NL6>JQ8V^MQAP5 z(x*rkNV#<~I^H|RH96aB76jysYN#=ed3)= zm1}(1J+Fu2$$@_yMs(F+|EZPF&@Q!+2;4+Sjo`dT!0fT*|G%~H_Ytk-;6K(v1{&R| z^$POF^V{M)Gy>5Iq~o9ZI|o-Nw#1K%WYIp7_)o8*NyIBA)@gjWq|vy7fn+7j0pV6L(}lrxNW>P8=CBU~>2*R02kZtH zV&N^h-ucS(p)JscKCw`-<{+@7Re_2K^nG#>Ed|>~qmST4nkp2DCB!?QqS`zWm|Xct zyB-;OhIYkM^enFMG{{6&^WkSNutiMbUT1c_aTq}x68-^eRYjY^!H06ZVVufMte8rc zgfs2s8wA7_KGs+aR}9o_N4tfPyTjKbl#M*YaU=96(->UVtXN#uHQSZBEDp(T>Q*de zxonv4e|#^vrE9Y=u2b$o$4AV5zjfBx!C|Wc3;7Rp4AX*ukK&(7gJa0$j+LmgyM7tP zYWQcwkiS_u7(s~1h7l|aNxlCbs5K&-OKdostSb_IbJfwmyX;3uJVHHvL zu}*?~q8-+LE-iqj{t*p8+EH|Rd1ci;_9Wo`_6(|fxL?GR(IDoT?^M#&Y21!1%Fzt- z0-Fjkq9ju=2O`(=8C3ZueGh}S3%&%uAiRfT`2V#KO^vS`stF_tj8HxwYE&i8Z^s+e zZzZ}@-1E4=9}cO`Pi1I#dq7OUnhiW=5yxWX_X~Bqc{Q-6CU!*O%S0B_SGi~~&c+~A z3$O7>^_GR5Es@%@3xFGzaRTQ)Dlo$U8rMo8+|eOH`ADa7O<6n;bhtX{k3N9#A-iI}WYR=}E=CzoL!AZcA}ocIHIEzu zi8^wW4HIspN62x=+k7|ZFqf=I;8B@b4_GfThKWCgs;dlzdp%%&0&u-Bq7|UzzT)rh z+X-vu%><{NGw9vzy#A8#w}z#AXHf7*p{a{q+mmCoh#Sk*N&Q$8572Q4G=~#pDfWYt zQGjzVBi_4qEpAqso|hm(3O|Xis|#;uSI0xX_ADDJ@SS^fITnng1n>S#{jvn`ZN_-R z4R^1Z0CKB3&7mxzfyBt>_N10qeha>@KsnZ-71mq1(xH`y?9o8;cV(W=GArc8*0pz8 zVT@-y!u7L;oe^~U>`pPJ_=wd96!T(+cJId#y) z_Tvf^;3-M4?1WU|wQ|0Uq>^ZI0pAj~|MCTV*@GtKHqoAMq4R9TXb55#suCB~jZjrs zQHudiG=D?^?wnGdB3tYqQNZ&O*-5U|&elo!?|(%BYf>v%y+`@%>mX)yseao2$3rS^ zl#I!SNpuXGW+1l4KYv4s*m+ioPKCvYd&XZIi&-EkQ8jy}m3q%7T7?{ru#aRhx!6o2 zICWnCPfftJ`KEnY5U1HJ+Gn=^TpB7xRqjN~xk0oA@Z$-rHvJ3M6ivdRm*>zgN5B&T zpmYG2RAs&sP^8DxaEl>;{)D~#G@%E0?w^LX za`|d`3;%TVpl=~j!ce>s{_6+O{-1up8;HVJaA_k-)&KMZyy5hsE`R+mKj3WhfA|4X zvXKkyrbW}`1=!xO*g+UCe4}~C-l#YBxohuv@$%Gv9}Fjw$E%*GExaQY%ILwqYgQTu z`Sna_DjmXsaBhA9jEB#fX)`UyT`Nsa%qWF8SV_6{1`lo)EQ^ou%0Lwe zNY(sk9r~TNukh2MWH^zd$JDcA>h#wyt}FKG>&{0Ryl7q_Hy&Sx+f;<2jvRUkVi#sB zae!c>s&1-q&l|Ifs&5I*+<$q-)bNm+Q|9hBf{3*avC^R{BV?@~iB#OZDE*X~3a!s! zBbZfW%#ic}XQ!kI#{^e3vF@tg7lg!jXxZBh8K;4)+!>*Jt5)Sc&7+l*!B-ITl7wuN zpE4kx%y6|5&7dBMu;!{CldV@iCRYv>89w|TQp5r6uK9Nd%8Y+N(QSC`Pg;|vtH7## zmwtTmc3_m9Ub?E7{{_^RY5Xc^Vg&IB`XBgDw-iRfYZf@2b1NQ9EA{p)P#~Ko^1M6R zL1CQ57s)yuRnx+vS3y&vTuz=aAS3MIJG?TWemS&kxPKzgQ2G;2TMy=-bZqZvo>BaW z4RA1W!eMdJQJ;8BUwTiBVl5K3Q#mAHqX;5+X=ezg51$^zSLI{bMLKhcRi@3pe8Xoj zI~RM;P2*erG{wD7img|L>%t}lfk!^`oyWDVV&!U8ei;#*ucf_ts5Zi812rY#&@;M( z(qUHEiCYUN!h9If@Plo}@u*E3|Ia6e@6BLi{1E7h1OTRAF}uw7rqD=J<^KN#_YW)E zCyB-c=4Fnzv_h!(WG!MzrqD#qy1o%mxo#GwG%FEN<+&ebR(i(2@%%@hmvtEJ8jwjVG2N&vt_Y_-$QO z7bQIIrQBK=&?$aBnijnSDT{5((EgN>>A>I4gb=~Aa$P}ua4%(P@;|YB+E@*Oe?24g zxbDixn_zFsI5JzHyeQA;)fSW_oO1I@f`4eaoXK@s7&l2EEu_2V^GPz53nu7=nOeh# zNMzUDO{up08gC(-q%9VrlAiBw9W}}20{=gOHDm?pAPzFYbjN_dVfvC5=%I8eJ_%t0 z6!XEmWG-=7?!{Zn?`JNE#mUqz<+BY$$(cTS(76w08YU}Muv~o4)3Ut&bhnTr$LL>= z=m_Cu6Kp@#SHuE4A;RDG)&z561}lnAj9Oy%8Dup zWk3>eIWk<9^PFiS1SuY5{c&f($o68B!EOG9j1>AYl&wl0rZsO zX+Rh>9g~1x7Sdsqc=O%j7m6vGv<54ria zl@-9W9x`y?1l-VAub-pLF0H4zXF6~!+fETovm!AK@ zWM~-LlqeCNekB{WXQ26>rOhPQ-UFrKoyrYHRbOw(FL*c1GZ6{9BXxHbA-0A&HsNAj zbe6joZ_*pEGtqJtB{-Aq;-HNte!WuyRa%9Qz9uFmV+9{*ibWwf`HZJY3?Mm-EqF(l9EN3t$;k6bk;|ZJ(E+y^x5?6 zbc|{(O=OB8(2(-mnyxe&Rn3NMS6|i`yRZt`pRO2EIbAN<;2%Ug@rDqX!~sNe(ch>Y znatCmPkvsl-=orXiZogQ68>q)TUh-B47xqc91Rgm5$kAW5+6$ z)liLdT1(04DY}|$U>c|7egys_o}-^+->FVmGz63}JQ}I_cE3IER5iRcHvk#0TD`Ke z)9Vd|vYeH;{n^Yd?8u#c(K=Jv7+Wf@gqL3PM zC6Or0^kd~n95GKWmAAKAdV3|HaVU+@Mq;Tcege@VHPjin?02NX3&E_fvNlJdSf}BA zADg8pL2Xwxm5C=(A@b%9;up_68&AOBK921+ zm&s%E9BWrgHU1ht`6J~qi{VqEM!+sQ9idE1UMQ^xpQLaqK&t2I!2>#uk%=LoELz}q z^gDW@PSLYbp#ZNo;or?ZOJwRhnT`bi@Qrn&KISIiP-piMmWh`f9zt}d@^qL@J-->8 zJu^S~X=hq&>aA|md%m3BHCv#Eo7y0^{;-dvku4}mA1cBeU2BTpFGh8iG)Kk; zd^AblabRlLI%9%P!Je~S5o#1}w?{F*)6GSfogT~=zYV1BPY330#=G0^t4$rRo8JEK z^;Wm%Es*bP(y!EBvOlEqUY!fA_Z+yQ*W35vA~IL7s62aA*xIrAI8EI(y_*$l9;&k7 zxDnKpFIc()M@a%DPhUQ)o~$R?kM$`h+c%_v5?#a})v0GMXV4CuL!d_`VRT_Z^VaO$ zl{cj#K=l<8G%AHP-d{^Z;mrZ^d4vX+C=>6YfBV+=hH8WAoDNC`tfP;TOH&e_OHS>R zKRK};^m3Xn?Z{Sd`we^`C{Xh8h^kg$=0b6J2#7D%pu9YRM7cR_s9`^Mf#~sI_L=`z4=6ktsZXsf#PzO3$ARaHEjv^iupMN>{ zQ6)_gumJHny=o7;EXfc{YVEamOghFWyLAGQ5%>)X1Dm_rs}lQ{iUtoUL8OqPBwR$Z z5CKL4)T;F)Clir_yDT;l#K*C?I7~qG8^4N+BcL$5&%DwEAFC0k_*0e+Tcps}GrP-f zz=GWlZZOBcf((gE0;dv)p}UC#;2A;3g1}E`eNU5YS-c47V7_(Y4ws!X^39+e$3_qr zeN8-0>H#PBBw!nSEBt z8KNfU3$W89R zTYofvwY9NX{Ro{avPIe#+60``Z&=E+3DQdbVxwhgi z&3rf(`{`O3I}jpke>HBApUzC2EOv3;lA=Em!pk_18O`_lPG+y3JUx>IH^%KXa)hXiWuatveB#x zrMGNZEO73NEw`%M% zExuNR(qIRb;)3#6?;Dc+t2&&?sIg_ol3;7-MoS|IJp=*lo1PcTw6IX1#)!`K67+$w zZRyc-bKao^H~*)(rKv+3q=?&lm~&>l_&D7nRDZxsyW`WF;Nv4m23^kxe*_v4E~R!x{_ML^vM$6+nOa~ zE*w+L%);|8^%4qMh_3NY3ESao4~`R^CkV35#+HIC0E_|+vl-kBTZ?{Squ&^36TLvglG4;F+!zpO1} z$3H1uk^YQT__GP-KJ`0WNt?&d1{~%3)fI7NYIUYcd7_Q3<;>dwkV3n!<4bsBjEh{O z4Ex)n<~f_1I_^M$dBfdfDqlg|SJrCi z?=yqfqG!+Zi;C6rZB&U&rW-NWY@(GUVdi4>*`K1h?QEVv^Tp1`hBZGE%IRDKm#s37 z+6Y0!Dfm_dlD$WVPT54*CP*9nM4vF2Vx8-mh zVPgAubAP}CNeihIc?mDeV<5~o9~!-~p==tlX#7S~D`tmv7~)M&I|oi6qfAKhNXD2D zaeWp3z(>mB4;!cKJ{Ml|)wELW?mIi9d?N0C^Q)cyd7=>*P%(92HkQnG1`T7}?B-B> zGiSsVQMYwY)(KA_B0}YzsT|Ez$-#0bfs^Y+C+7-63TSc7bafp$wb%Brufd|Jp~1e# z#;Vy^0n8f9KwyRvZ>{wyn$0Ip&N}a6=-WGHHjl(Lz$jV6H9Xmk{^P6*=dj20!Q1p{ z{cS#~vj*SC)_!xHP)z{Rzxn57&oR@aSe$!kbP3Ch84?6By$`OL08+R3xS6;XV=k5p zq5{9iMuoFI9%730SHXK}Q!Fukp`?Jf%rrrZf8mJ+CvQ3K19*@@aYk%|rk}m8MuckNV^dQTs#(Zy z#isC^4NHA8Yxp*-h)Gx9=U#c$GieO8?;2)kTTyAR?*AgQOq5mM_t+f(Y9$^Vrzk28CXxSVNC@*x!<*y}j;82YeqEQL|ug>l%#+I;c6L8zMz1y~Xw{6?DZQHhO+qUi9w%tAb z{qxUc4rWf~q*hY3l9jAfQh2ZXe&ll#5I@Kfqhll}yxk&pt`fp{uXVIRKX83`3WWG> zg!;nzY}g_aXb`~&pUp!kH+M)>3c+8-7`PDK6il(Zlbd$k7yG@Nq%^VN|9UB@M5Q#9 zC8FpC!7y4tQ)>3H9T_>=;%Q7MSiTm;U`9(bUb%hqXpwoV;Z&q~c3@TDaEPgJnzv_k zC#1N!7ZCrL3|`K4&@4>PQYriDEFatbF78?`Ku}Bg2SW&C5dXy_vb(-WMEqk9T_=MauR4)BU9YC-(CL;3cw+?%n} zGW4w9we};v`(Yir1U8%6F-s|`Yo^;M)~jtD*S8&ouMFR#-7UH&7DLzgxFb0VK+P7H z_oUxd`8{_qZc3;?(-<>x9!oo7SIAnJ1zK`gn)crsya_Gt6V_~J%c$z57Yzz z!WrB=Bs<;QqtIj)umQA`==f)zHyC6dQR*_w%!nM8ZQ8!faHd1eq`D>@HrL+L`yH{E zFie)Ab)P+Z%z*=(LW9u6e7LJqwomp7orq3=4X=F*2j;U?+LXkvE|3SjOzLP8>4wU^ z%&Zv5S1#-Qn|gSV_T!67g%CWx4=15{lale<*u0q~G!WBwL zu{JcZy!C*yda(7+?vQfU@ULVP7yC%CU*&}c8CSet?WqSK)vIOQIl(!tf7xEvVEh?( zr%Ws2H~facArQm4C{@ELYLb9{Es+gDb^vumxDTkxMzo!_K{RH&+l; zuP4U+dLQGJ-fxA&L2THORB}t7wYCqvtD4NeYq|y*#tT)K1<_$FlgyK@-0&OTZA6lx zF@yy|xsj<2E`LB-lwA7^IN1Lh{IF8ZEGre(h#cs<45S*eZyu|+#cw*yyRcKXGHPAf zF$sMt|7j8nCyKw5$t|N|0Fxmnj@BM8WLCH0W(3Mzn^HYoB;z@I7Vblpo`y;jprAS| z*va!v+dn!8SJLeuOJ{LzLuJH zEzFH43=$k9J;=%qZrrrVH|b?^xIliZ?oprH&+_bQQ&~o8B10lKcDZoHebu;6e-WEo zjGlHBKX3g!_4(4Z7V`C!Dn5EmtWmxtqTSBee_3D2 zg`73vRlB_K0`s|S1^gJFlNZup_w_MA)TvxC`0C<d+*2eqt*`$4DJ-yrihJiqhiQc-ys7^1{M;V->o z&g3QQ&Al7y!f0iQH;E%$@<*@K0^qqX_y$9wk?~B;^u3P!M#H)J{mWo!^q|r@x^8{?drneI0CiO=j;g zWD+-w81{G8s{P8%nEO;@d;lb%=cWO!XetpZfkfM?5qc@WfEYAnYa+*6lu1p^xl6(^ z1)j|vH!6JgMuU4(r6w#Tuu5-w^u{198-y>)Iw~_+_nd(;QH>aK@+w|-7ZT@)cSH@Q zzz$}%vE}RhV@8*FBSU!u9#U+HA2q zhtNOJ1Z`kJv=5w%Y}cBlZQLv)8qvL&b{_Z8Q0U_a4A%?phK}kvke3rP7p^AZE06=_ z?(n^nE{sFLcdQJBbqJ=t>v1N*Jb1Xz#lJ88d_U$_ZO%N7yom2P`wvzcG(d!`d4rat ziu68;yI?S5^a`trz)_O~aGkGZX@)O4BUi#jn%P3Wq1ZSMYy@V(iISm?Q8%Hp$PHd{ zcu7})X-OTBpUPw6_*H?Kq76qG%{!X)G?X`s7LVV7#fmkUigU1``n?ug>e^qT%vf2l zo9m6gV=gxNe#;Hch*7b@m=`x=G#XwrS9AHkXT3(*f470)7c!r@p02BSv!tx$lM1FGW-V&UqQM6b^(lSL@5CAu!Q`INlb^B(IKv$D#(h3D z3a=(Hw{lg$uLI3)5OP+j^$nL^E`X$^Si*}8Lan6E{HOV~36ZRm^KLA9pf zW+Q0hZ5Q&7C*GJ6%Q?KbU{Dl$2V#8$aKK{+3Kq*h2O zeZF<@Q5|shT{?e-`IvulOM`$D+vW^e#Z_T*cMa>vp`i&%rL&)rEo+Z-jJ4q(TCka1 z`VS9#_YYG@32|6#K4)zjTcPK~7%m5eO6MT9%fi2qBZ4*rEiO5(=pDnxf3b^Hhymyl zpt^koAkSA7P=UdojTlk8s@<#C@u7hB`kpA_i}s5Os>;NsSlAsxO1?`Mj*J`fZt-dq zAbN;7dse3~rEJ+^_5Kits7LJ*n0#QDR9RTnYvY`acHOcXT5|}4)VAu&aV@h&c@Nwj z+3IVM^jf01m5Y4wJ?HiMFNJf6v%sHn6k%T@PmB2ChWo7E1GJA7#b%*Y#_y75fk@7~ zOAQs^Nmz0wB0Vkm>(*6P?W-K>$?&c3YF=VqSzTfnDtM2)b?o(#ZAvSxTB0}{SPs7i=+Yo}z5 z&>OQVpL}O*wh9=9n^UX1vxo$o(3d7c<2b3YC*T_{w^tS%GLx12cw5uuHE50y#p({GD9-d$uPWV|Z;9Alw5a})~7C0~3{PU9qEtVvCo?7s#F_p+{ zB(<~`cpq1y)Yut+5^3g7j5qw4N72I%0zfW&qcA!1Ch9BtCOcj%#V}5~ZdeWI$>Gn< zT=x8J0b$u6{VLg3nXcC`Q*RtU)81K$Bn?w#4YRK@)XX`7yz=R(LxAx{JN#5?z@&hc zd(MG6PJt@6y0mR+%G)Zw&}SX_&P(P?e9&x}f$iRHc~ifLjgc}JC#-Rocm3f_4KVuN zlC=`I8ONxm{>L`v4I6m%ldDi1*`jM4WoM(bTneW1G|x}o5a?$uU#bCQr6yj z!Jk*rl2*B8BP#m#tsUz^=Q3U=rlxpTJrl|`pWR|3GAT_5Z$4&wsR?sHVV-}*S1POz zVB*#RhuE?25d0HH*7NfW(ym^9#xT~R&DtU%=bYlXUP%Ihx>Kuz%Y$T!VK?H|yGm7J zdRIegA|q#kg$a3kPJu=%w%Ddrmrs9O)?P2aGYr%cGKM2|-MuTL^U13(*+Fo4@34Y3 z_jd+oMm@`C9iHWmXMXFfK-HPEoWqs8RL9nuKVN++WVxbmQG#;i;)+KBhZ3xfVQ4ci zTjgk-@!yj3w~!Rd_~Qwq3qoH1o>WySlGDa%_^OdC~br7o+1D0q^fNXnX5V!O7FzN zvkNCU52$Ar)!iX9t>4gCjeH^!(oYfw@=R)uRSUsr+xVZwo&>26g7hXJL3E|*yx-c1 zf?|mD;kmL=|1+K>PX`9`PRNfWEt2o;jI>>X@SfIV*V@ZZyo9HJLR9eB;|2}0)(y48 za}NUNos&hq-|nb7&MwGa$mo*Uw~-mjpb?l)N68PxM8eFLH{rB@r#X^1s ziF4;B>(ph;1K`#+XHrpxf;i=}H&IiP{sS}u1O`N5#dr4Jd|#>%UtC4LE(x(NR#W8I zOHKE3w{{)`p(ja4M6r&olB=eDS0u^yl3}=d{dmfUpZ3hF%ZIW78~`oN)i~h132F`T zq)0$?1>hkfg?Yn(ujEvZRjt{+c-CbCVh62i>BR`tvSG(!n6K4iV%GGbJg_M`lc&}J z9OA}o-L`QnD*mlDZPBiJz#s(M)^Oxfd>Llub(WC28LULa4(6C?*%qTLl)yPV*xO<3 ztTXyqiY@bj>4~`6Dv-NCEedi|Eqx1 zX!lUbexb(f{$py}c5y3bg6_WK6k1=%q6h4-dH%Mt3pKICko6O|#|?JFu4;8rv@(*= zl-cvt@8IHNb z)%iB42@$>2G;?*Cu*#{TD}?k!Ho{DQBw?fEF`j0pMH)HHMzCRL@DJLAe`gz7mG$-q z>?!7DVB4F@Gx?4kyIf*19rwiJFhgnadWv|7q|~0J5G(%^9!$`m3~I+XPT%cnm?nL4 zS#;SKQ1zyqAwse`>XFsn}Y3y+1i*dac#AUlyrOUAQnhy%~X?!Pk6JdVp z0&5lw@g?VM6XIf4PoI+>OwB)zAjBiZG+qcHON$=Y*`)L)i>5epd|iu{h9N46e!zi$@eydofAR3}Kv1=il@7SO7 zC>%$DpA=59%p;{@YrUGyj5c{vLAp7HjG<4~30xwe`?K*+K){y8j7l-*WN;GsB?|vR z>-4b6Xzavt7aIWkGktn%>N5PQf+a?mWxwgFxX|PUZ-`FVQA~Av|s3^W*EvLTx!7sL~YKsf)wqW~(>mop)>@vit zyoY_`llZZ>me_O+I4q!rGC!cDX_TNhl1IN%^zA#`N|FL&Abd42scTDWb^bXMpsIeh zPaPNo=|8Y~RsEq)t=>m`HU-fidX~<(VV=!!>9ApxgW8rjAbBgFEmM#(u#!}PrN=I+ z96~HPjx})>LMzO97Wws)0;-+BhsH{rTbQyRqr{Om-d29QEJoEJ*A46~a%bI~()#l^ z)UW;$K?Ibf$)j(NC5?DTGSMcf zli0Fwm48+WRTLz-#%O_hM59kKU0;RSu%bAd(U?Foog{>&DVO7?6V~jafuX@ii>boE zL?M|mv{v4k!0)A}29ObVwc^uYK8_t+DE8R;Jrd)0y_$J|A2as~2wt&i^q3nE7@-r! zbr_ClnrbTt2hHr?s{`Ru<0bWPj4rj>5bUh>nvb(VzonD=>UN{95CXgx(SjBh@MOKA zx7bplOCd0@RRY`RY3W^FZ*IgS0xBacDr+LNp%)jJsp&QE_i4h1rk90fAP$P6WmdK0j2j2WgR7;rz)( zw#ZVuLkW&{3^vTsv#XIq2?%t27Q4UQ3j(9@g8)aqtiY6=v~BbooX1ER4N)9K1qwAB zOpAs+xjIh*2!ozZ2Ml9ZB}VNJOB_svMnYc@<}kB2VFiK8evbMS5{=kt%5R4XkP7lG5sGU1e+`e1H!kpcA zlO_f>ZRUx09J^LK^igmX?Ymz!!WxudSMqdXz`hD4ND+Ha7E^MvUn;VsR}9^W&5gMy z9k76mcT#@CG8Yho+-y*^N$RZ-Kf^zE@p`bB#!)30Dq8AIOiEgCTp5|m3S5pgyN*%^ z|NViKJ1KTs{&m_IY-Z7mb_|C(6pvwsw#dA0W9UzzH8!fBDX$g>oi*ChnX->i`}K{W zYD!$F-LB3HJRW;D!eQ^=zagh~29!~Rf6(L!;|SH00~was(?F<58chqJKodaugO^;` z;L>-BSp-S3kM{4zprHEh=4?C>^>XYi@WDq(wWdo_Tk4s@WFC_ z|JkLSPIChhnK3|nw`r6EJJ-&`g7a8qhdA7F_ol}TO_K(LIke&AA%CkG6KY9w>m3}* zWDET~D%nBM&^a@2hgsXkk)g9lU%ZHF15?a~Gu2x>l0ID|-U&}h4eT1M+68-{y)$|6|8uGR`^Rl{##J*R0>E!ym6=BO;?84#&3tffnC4a$ZgO7{{=`wwiY)x~dXhuN zSbiyB)3-d=R*K!}nq(=r8Xw4`jCv8}(gM2vPv%1K^$^=G9l`gx&d3MDS56Nwthd#h z^+l?#=IUSh?9No-s>ee<%{sBC31kM1S-&~i-`8}uwh2$gOOj(7!Rop%6+tZ#rY@0J zX>xJ%mH9yu>YgokYJ5ui-9m~m)KkkfATxiC4}ZY5zp_7Rjnr2hNk@uJ8O251rS|Za zw=(R9+W3KTu|9+V0))bTykVDRec(K~xwb$gr|x~p!r}3P+GwECu^&Rr{HN$wK9xtp z@TI=uf$iRv{Q%Y_obTZ77omP&y9u6d0LF2?G(ZexRK#n1e=ZbEC3YVzUxvu`Fr|!YsrAYQBm5A+6ikQ_&}_=JnuG4Zr705oz^}@qf6JZ#2$me! zY(WH6k4^dsvZOz8x-%n1+`!2SP+8nE_B=r7s%>ZpqA(#s@+-Y@N)Z}5=z|j}m$q~O zM&%ebs0l($0CR)&$DVOeyz+HwGQ5!Upp6>@#)26o-S-4?I!P=DZ=$&81Qsb0Z=tMp z+cyT!hzWm&`@xxN1*Y87zpHP-2PHScA%c>uDPaa+rsJVS)buFS4AjG8lCHfgd3;s{ zlkl~B-N~Z5Al*W>03-r&8Lj)`;9v)-;s&{`1UDWs@Q&mz=|r5OC${OER(raRQtvQS zkY6gO3>F2DJsx&Z_JZIBKbnnhO^E>tj zjqh`Nd(!+bLjK%7fo~9L-gAD-*dQ@=2tPT>Ei*unVtlMTR+6QsUbg~-Grgp=O!yx) zw{V*|kiZxGk|5+Mxk5m#eh(v*(n7}d`*cA-2POWVf#bM<{g)~PBBG{yCwq{uJ0BxQPP#BMtDw^9S59|GQd z%`oJ*QOJ+ODi`&5lshstE0MX}2<%5u(-pZ^%zSr}wyU5%ZlIs!;Uj($wd(cQMHyMq zc*J@4a~nH6H6=DU3~xuM)fGWs??WE z6k}0;e#JOkFBgMLGqK$*1TIO$*t$W0A@wlakCo_pLq2wX7nJ+Ps*?<&^|Rf3-(3o9)|$@SrXO-V{)baiVT$ zv=dcm?X^{0yhe=GOC2M(l2N-eJ(XEIHJNM@mkX2kwAZI18`cU%MBBZY7k|^Qp29X> z4gWy5uW{RNZ#)}7ifcVR1ms>@PKxvs%P+3ApDaRb)%FTZL-=@NDyoKKuBB4HfC4o> ziAJ}Y)aos9j@HG`yNOmmNu!-YQj;+qe83A|$K`eq71NxDvW|8y9^4CWw{v=d1e1D~ z6@y}NWLF0`4`YvuwXzj&p<+kvjJsA$TS6_=vzQLm-R5R8W(;{kl}laKPNr#3YI`21 zx0VH2zp7@=B^N&`z#Gw=lxI`+s6(GTgz)NIx-}S>l?!$YBdR-*t{P=sCD-QMk*+yQ zOvAl?i|WYi10+3aA`ocL05zQwBCTUI##{m6Fyr6w`e+x?Zhx}P$lV4hMAJ9`LeV+a zTJ_QLX0ie&_ZHahFp>h>gYGc6*&nw4w!>K;&G^Y zBerI;XTZm8pOU^oX24!aYy;*@R+DBx+PfLoi~VegWq9*ar(y7BBX1IAPmJ#cLLay# zZ>@Al$nBWv7SXxV(TUsQXEUzvxbddx&MqVsM2_Y^b{3qKap%ybx+O}1E-rqMDNZxU zt|ljKejbk=a-Y}T>0eF1=S`C%d*6PHvwvnCyB=nL*jj9Nwwz{uTwPjR(N2DL4{t1m za~D<4H6ms2gLInx9Md;pc___**dDvSyC z?a=x229m?cHCIbRQ;Nuq!ylOHxRk-#T`~i_=wSCDA&xb}&V_<-#L!!MX1B4dP;|nQ zL;9A?^@i28t;XQtELE4mCxCab#=10V-0c$5Mo!@F?!s@wXKb@U1Vq0Dymm2gQO^SCr^U9inTs)|A2K zNVWi2VkJT~00x8oi@PKU);A=3VEPgXn;zmWeOOeBi5Nn}U{*9v1+AK+mgep!do_d} z9iR+was{Nu*w=1A2akou!M3E^DZa(Xein;3gX@S$M|Nl4uzhQ33Q?@o9rE!F8ZSJl z0)O=#-ii%9wsffrak&{HI(iNIeW-<(AC3F=`0cGC~-x7*KbCN}iPjpyeV_=m5K7xvGrTz&8tA066v?(fLX;GdI$ zAIJTl_S+w=S6|vsKJ@>O-F)3YC&L3j54}%x7oR_|&p%u0L%#2{zU|++=>NCh_#yf| zaN_v%on`c6eRI9DVo#-+cTM~?eZ<1ZNlsB)jSo-jgZJ3;2#&t(0^bt_zc_QW61_c|Ilg>rs1Z$qro0>t3{MBwFF4ml zes=qg`V5da0H2Amu*Ho76XQXVyc|0E1Q*Aw(Hic?fWIJ9`nCVH60J=x%Jch9VMyK6 z2~0Svxz*j~O5UV1p&=T4uu{I(n^{Aa>(#vPAz#;w;A-8?tKB8#nRb!T@^Y8^MaS7~ zjy>#I`}ke+P%l~eG0%C<1FzSto6ie_&$iq5?$-U{c7HK9Lzz#4=b>x(V6zUKirc04 zzPk@5cmL)x_u~Bs$Y)11m{c!&80I{Cpmd}*sHwYy5@!g_rt`sd6Sm_5iL@KkjN!2% zpQ%r!SNLOIl|7VMx`S1wvv=7^@>x5&!2k|lDPWmr2Ig;c6{a5KZ+@qYjoq8U%C+Nb zG1UBn9e1TLkyVdJt5zdeE6_0smHk=2NaGS2L^+6ek5kJNg=HnZ=^}|fIb$m zsPDAe>RT&LLG2ouND#We-gF(FWq?y9yf@k2RqpPn5NVRAz`>j92Z7iyUli>#@_xJ1?2dWYhibkq@I(&~i^%zOyE6KyqQ zGpjNvWkJ_|%TpS6+34dYYH~T2JExqHXPS>n2XhmFCZhP!Z9JCJ1DUECk!CbAk*cQD zQ~8?)g@S8I?Xm@Jx0S(4MIzJ00qqp~1su#N8ocs0ROzJlI}fe3S#~3lvASbY4(Rh2 z=v#!?+VvA$TF!24&H)r4+^Hy@d8LG@H^@@MSLcM~fxIsaUB&!y$dU$g#7DZNY>tnS z$I$#=6<2YE$|YPaK*@0W*QW*L8S_THm5(yt+ZpK2w1ul!aCxqc9SyE`Mw#duh3lKE zL&H633~!dZz)QH8C_Q_&pTlX-u5}=VTu!=J(IG@TkJ(eN-CGtul`#(_az`p z`Q)fn1TsWn3HKho`1}-#g^=yV#ygG9Ri3NTQL8qm3GbDf4L85mD4%m5vF3S|=#iLK0@}I3q&Gyt5y)hX7Z|UkhPC3Y>qgJ-2fvVDL&8OG#5Gl<~ssREv*(V!?Yfu5d97JU@M96 zP;=8;23((TpQsj_8j~iyNVdNZu*%=WDcDA-!#pkPH}%H5x`|k$_JpRCYu)Sz46O1E z_&nyZvle9C{d#Q+RkuvfF(~7tX zlk_d&JVs*|=`Ih-tAjQyb-U?dYdyUYG^punNN3(G4E(9Wn-=z45}D;T)m;Zat6jV& z3s)&&qCc@7UHYz$r%9n%ZV$R+@9tm(Spdm!~Dtm-{ z?N7bslg%Ni7ne1*R8D9UE9S4^HnWVe#xR5m*-F}6`G8^R1VlUDYqMAsdMZPwJ& zC5V0bv|P-#mwWCXELgHqg_Fi6WIaO~qN3i24dM8^IkB2AtASLdcGskCfUr;cr^kn# zcljPWZ1XL9n9fdc7A^B@O_x?Jk`d`eKL?gN`V+3okEgX`*Whc)aU1$dnR?M1XShwW zxtH71T#1_PsoUF5o0=e?>L8$QcTrFX_%HyZZ{LtRdAyxax_b)fT)l1%m3h3s`(SXL zSGF!FzKu0OO)hXuEpN7nPUZq`*w|YZc^y_Vqg`F7*06GZ??w0b9M*<~d-(=ZE_kzx z>kJW{M3Mq2i>RosWJJOf+7WGOnv&sl^6S$4jAR~kfun~ZtC6v*Q2%5B#G-k(|a$H9z zprLass;E^8Wk`1B;jW1M#+U(x9DqaR#^RLEB#5-G_r-|!!e<$&;7*GVPYb@*SMqlR zfK{i`u`7(#-z!?9@Hq#d@hC72V9`<%v=jo!w{0+Mkg3zGx4)IK92{776lFJZbxZBY z-vW0jZK}k|0W*iIx2G4|vEUZJU&TL|OxDr2k0bWGJ?BF-`_w%jk#G0pPEt9pIZ?-Y z>R~^=T-9SXMYGC&(bfml-{-X_qM0ezC?-YLo+#UkYKg?*^+>~+wtQ`N$-ACj?p6-V zCOKD4dCS?xX;gNe=U0@WgAKjeV&Q9F|@26qSjj20V zRE(D&Q=tV41pZKLh2!jor018HFDf3Ej|cf5!_L)ZpJ1;bVet_Y|A7=|G+Oq_?_@9> z$`Ksx@gq=?g)x$%iAE&y(iZ9$=<;QHdE&QerzK36WX%hoe@Nt@ir5jX z@eN|>%4cvAI?aBPDby?5K9v#U z5gp|R*kXwuXi_1U{aM9-e003wmkzJEXvt}7M6<@!9yb8UKc7Jxa zx3}&N_^hpMXs&;JV|%k+W$jcwc;|DK@}k&%urhC@NmUTRychPlH0&LA=<8iIFpNb- zxy<#KP;jS;gXP_Y@FI4Kh}THSo>$cafyDk0`Jf>A?JGEaw<+^TAG|94v92$|00d1` z$V;de!LiksE6bElVSbbpR`f5zcUOQ~7Fe#agu-8gQ1!I`>+A}3sieg6Wm zTz@o61+3#d9D?*e5VGs%#xNQh67)|~BaK@qWN)t?FCvxOLm`8K<~?s?MFG^gIJnA#pu)hZq^EKZrDvT2+{ogK5+^j7C0vx#M$MPB zGw;X6bTc zYQbmmH7sj3MHr4nkuHNFiUb>Oak#P1ddv)1`9}zyc$8E;UK(GR!f73I_)mn1JB#}q zRVAR&@7Qg+!$ai_bl|67_9>+Rt>W%$9qx>88?hL`gv3!MjKbhl%9!%~Na}?Sl2!N% z8Pe9`n@Bp}6i&f{StCZTVIs&wQi+a(*rJoOYMUY~J%$liH ze4YMJf-lOM+&M5!SxES*GJS(AB$hP$u^IBV#afT{Do1!|*&kl6DCCtVt%oqkCq{cv z$|YA;sf@Ivp+hPVBxA&%u|@EVwI38x1sCq>)wj(@?qrbhY?!xM=j{?`9sUhp2rrk+N?ZFL zrm<={XO%jB1fu}X7l1BM>QXOaeV4A>@)3`CADx5D$O^?i z&Mp$t6cz~@6ccYU`nSioWo*n-FfX38l0EwOc)(hx3&X{mXNF#ciP&K{RylX;F#)eP z!c-DnY^XoV)$EA8e)PfBK;~oSMM_6L&eY$1ssDx{XLvLkfF`iHO3obonsfMLb05Nz zFqKc6r#RF-b%n)k!Z6zK5uQZUsRuq)s{P}2LG5O6nQfmT;aW{c3je^_htRmZ)L2G#GwxNm~#W?xbW! zINRND&uz3g2rB)(IWEw4Lb`}N@o24zQ`axK$ zYGdZTD5h$G<_sCL^_Y~lKa&bO-S2@t}s25j9zZ>ZoU7IEURM-BCxK399S)8!fDxdJU|=U3ygDdVT;JdBw8HP zdWtoV5XkxS=JNpK=vy8H!hT`|oy%`=*6;#}fl-_}I9hDkt*ShRd0ttF=IS6JMQBLv z8zr~l8puKU{B}@l+G4ewv7l_SOX_jfAQJa#JKl^ziH?`Z zi$NuZ6$!^X#+Z5vxhAHd++m{rGxUTKiHPEdV)rBg^A?iL(zF$R%uHevns=OBlTXp7V`mS3-|Rz)59_9&nXOHO3Fht@;R4|w zpwTHNFZ~Us|7RCuYecNrhJfp`qOgd0y=R^RuRauWrXRAwrXTpwGO05g);&hc(rrIf zc5Ib5h33q8gJ%8g)tcFIh_}#R)L<&tV2{4-ARls+*YQkNYMR}xQZ(z2gt>owk`~)i zi02N*1DxK|b!F_xQgT(Wxg+L|eG#g`)10xK{bAqbh+olW-|I0Sbr?y?{g}CopK1ST zs3o1Rrm`$Q{Jk6hh9(P!xfUHC_uJM7eGvQ+H>5x>iYe+T|hUdLF*}-pl zcGi2Q%(!%1z?(5mLsWRa5hEw%R4DGzp{DK9(EuwY;*ruxcz z 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 diff --git a/yarn.lock b/yarn.lock index ee752e0c94..b2d33a3b83 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4257,7 +4257,7 @@ __metadata: dependencies: "@metamask/auth-network-utils": "npm:^0.1.0" "@metamask/auto-changelog": "npm:^3.4.4" - "@metamask/base-controller": "npm:^8.0.0" + "@metamask/base-controller": "npm:^8.0.1" "@metamask/browser-passworder": "npm:^4.3.0" "@metamask/toprf-secure-backup": "npm:^0.1.0" "@metamask/utils": "npm:^11.2.0" @@ -4500,6 +4500,24 @@ __metadata: languageName: unknown linkType: soft +"@metamask/toprf-secure-backup@npm:^0.1.0": + version: 0.1.0 + resolution: "@metamask/toprf-secure-backup@npm:0.1.0" + dependencies: + "@metamask/auth-network-utils": "npm:^0.1.0" + "@noble/ciphers": "npm:^1.2.1" + "@noble/curves": "npm:^1.8.1" + "@noble/hashes": "npm:^1.7.1" + "@sentry/core": "npm:^9.10.0" + "@toruslabs/constants": "npm:^15.0.0" + "@toruslabs/eccrypto": "npm:^6.1.0" + "@toruslabs/fetch-node-details": "npm:^15.0.0" + "@toruslabs/http-helpers": "npm:^8.1.1" + bn.js: "npm:^5.2.1" + checksum: 10/ef6d1cfabe13b793807398c1bd00a27c0eb20f84411d54425da49c5742dffee83b3cf0d12daa7af170d4175eeca4b2eceecbf1465992ba3a35f4ace77d49e4c1 + languageName: node + linkType: hard + "@metamask/transaction-controller@npm:^55.0.0, @metamask/transaction-controller@workspace:packages/transaction-controller": version: 0.0.0-use.local resolution: "@metamask/transaction-controller@workspace:packages/transaction-controller" From 82ecfdcb0922c912613dbef506d840ac06547d97 Mon Sep 17 00:00:00 2001 From: Nguyen Anh Tu Date: Tue, 6 May 2025 22:25:27 +0700 Subject: [PATCH 096/147] fix: check password in sync skip cache in change password and add srp --- .../src/SeedlessOnboardingController.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index 617fab3d80..d3a5c7c9c6 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -294,7 +294,9 @@ export class SeedlessOnboardingController extends BaseController< keyringId: string, ): Promise { this.#assertIsUnlocked(); - await this.#assertPasswordInSync(); + await this.#assertPasswordInSync({ + skipCache: true, + }); // NOTE don't include #assertPasswordInSync in #withControllerLock since #assertPasswordInSync already acquires the controller lock return this.#withControllerLock(async () => { // verify the password and unlock the vault @@ -367,7 +369,9 @@ export class SeedlessOnboardingController extends BaseController< this.#assertIsUnlocked(); // verify the old password of the encrypted vault await this.verifyVaultPassword(oldPassword); - await this.#assertPasswordInSync(); + await this.#assertPasswordInSync({ + skipCache: true, + }); // NOTE don't include verifyPassword and #assertPasswordInSync in #withControllerLock since verifyPassword and #assertPasswordInSync already acquires the controller lock return this.#withControllerLock(async () => { From 6fbd735f58114eded34f095e448e00f3c3a44390 Mon Sep 17 00:00:00 2001 From: lwin Date: Wed, 7 May 2025 09:54:07 +0800 Subject: [PATCH 097/147] fix: fixed lint --- packages/seedless-onboarding-controller/package.json | 2 +- yarn.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/seedless-onboarding-controller/package.json b/packages/seedless-onboarding-controller/package.json index 35fda8a402..cedfa4871e 100644 --- a/packages/seedless-onboarding-controller/package.json +++ b/packages/seedless-onboarding-controller/package.json @@ -48,7 +48,7 @@ }, "dependencies": { "@metamask/auth-network-utils": "^0.1.0", - "@metamask/base-controller": "^8.0.0", + "@metamask/base-controller": "^8.0.1", "@metamask/browser-passworder": "^4.3.0", "@metamask/toprf-secure-backup": "^0.1.0", "@metamask/utils": "^11.2.0", diff --git a/yarn.lock b/yarn.lock index 42f7d03c14..4b3b3a0c72 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4259,7 +4259,7 @@ __metadata: dependencies: "@metamask/auth-network-utils": "npm:^0.1.0" "@metamask/auto-changelog": "npm:^3.4.4" - "@metamask/base-controller": "npm:^8.0.0" + "@metamask/base-controller": "npm:^8.0.1" "@metamask/browser-passworder": "npm:^4.3.0" "@metamask/toprf-secure-backup": "npm:^0.1.0" "@metamask/utils": "npm:^11.2.0" From 765bfcc8929b797e0a3e0f9526b97d1c9afbdbb2 Mon Sep 17 00:00:00 2001 From: lwin Date: Wed, 7 May 2025 11:48:21 +0800 Subject: [PATCH 098/147] feat: updated seedless-onboarding-controller tgz package --- .../seedless-onboarding-controller.tgz | Bin 2277 -> 50686 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/packages/seedless-onboarding-controller/seedless-onboarding-controller.tgz b/packages/seedless-onboarding-controller/seedless-onboarding-controller.tgz index 0d5e6cd8526dfb24615b911a4e612468756af723..7dc85b7aa655af1a3ad02cfa628b53c453f2ff19 100644 GIT binary patch literal 50686 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

    XL6-K(}+pC;KGOEOZv=kV)!iD~K)ajuWZL);d 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 literal 2277 zcmVKkHWvoG%Gr$&Wl*1lYr=wvq_z$bqeFuPC-x zS{hqyBvMCGNqxJ$-+mZMvfVVhX|Zh=cL=}Op7#tn57H$|ZrBQYqYFPe4<^%duSkFR z%B$b+pBx zjuU4HOQ{NGfNNMVjVVY0uYW=;fo=8uvY#1K>eF8D2C-yG3-=OP^icE$Uf=8Y4!RB# z>Bly(G(%O}_Ii#56NV@7Gb+uc;9^Ix#^M&0C)KK_OH6vVLz3xbrpOOG$JyJ1*VjT} zj%4I71lR*VO)+&G7ec`eXF2eq%#mDWhD!l*2_{3(h-r>mgA@zNRLaE)5-E(5d5+41 z{nvZPC(j03TUOj;)xtV=iH2P=ebY;%!d_YBd5>rh4jcd%{K{lVE-`~JrC(5KR8VQs z@q4w!36@ZEw#*C1Irb%bPWnuTpLuhEsFNrY8@#geGCNNK`cwPgd1F2 zi3^t8RHfAlWu}$agR;u{|~j1sawz!$2FUcG#3+Yl`H<-1=d5I%o@Kk_`4M zjms)0KvCs}yIPet0(At>kcf8WZUilrEPl_j>oTPf5VmAm-$|AJ(QcDI$JsqVr|{@z zJAZY;-&kQLcCY(`AX}e2Za;dRs*r!D7%o~o*fmM|0;5tLg zlSXKXRPkB7q}zL;Le z@Y0{n{3w0}(=+g+SMXC9jk^&1<7yVn=P;c);pNpN48~muqtWDg97gBx;yQ+C8p9;K z4C7!7@f1j5BPtB$B|ftz3e&^&gmJEgc0#YK`n(s4Ik~ubY_2F&x4IX z7zh3&jLzr8OfLS_<>_gC6S>TT^gKu#8d%XYmPlo;b_rLzh@l*f*9%~QY{+&kQ zf+o~<%5}F>uDiX{ymg!x^>9z!Lt(Z~70t`@+10*2Xs#!=gXfUT6?F}fZYF7a+X{s? zEYEGvb)2_rrUbAwg)cBcD#v*%$^v*T>q~g|_FzQ6sc&~H=o`+ zEydT?@kst350CG^{~QkbgQxue9_v>Jpd(m;om1$1ZYp)U#C2OgxDX>fs`P7UiaJre zG!5oYRE%2Q4X){j?wrDF2LPbcW{$-JbOJ+{k*er80KZtCOcq$OmG$Y-8@W-4y@GMk z=74_0`zBdy^A^>LO#8JqrBeB4>Ev2hsL9|DRtgmh&5cy+tt_)Htph7=T2DVyyhkh> z+0E627%#)Pwp#NPgXIzvL&h&zuF=BrJ&p4_4tble03BWsb_dc}N%S4BM^~aA7b(8? zQm-(&vD%WQxMWpsJ|QgL*(lKZ(2{o){;T2&KTlEed5V%9Mb3`8j`vaNtNA{HYywGV z`qB6@u%w51>XTQY`t(vsBhjaNS!} z3#o}N$&nF6NLS$!6^aDgFx8SzQ<+$E$?jApEpqb;ds^AoFzb=m^SoYTVXua}+vi%H zeRdE2RLd>P`NMiz%%9WLT-Z-bg|{5dmT$d7A8C3d50=SyzD9i@BEBn;$(U)r=HZ@{N zh9605_WsM|wT!#M?&y*A%SF{}jUdfMf^N=8pxeBVe!9sIQF%JsCS8gpiWEh{aVI&p zr+`%^a|N0^scziL@Vv>vPvM?f{kt`8%TIq#>>is_=)8Hp>1H318hR9WH71opw|=Ou zbv=N1SlPzDH-mvU-0EO@EfTk=48FJ6zIW{PcVlonemo3vnamCcN&%3 zcGgY5>iWws8^@W^|9595}3wc^6HuW@4KZd-BZ&2aZXT90k| z5bi(6)~n4~DG}9Uhvknpb?4ZjSaGo{VH1nNb8qk*e)|pn_TzAep{b`M+nTm)EJ;vX zM=Zgn)ztq(*^y^6(zGy7l*K!3|G2aAoezKYp!~F+*3)`g|7YvJqO$ From 458437b992456fca57189cff8374c30efd1eabe2 Mon Sep 17 00:00:00 2001 From: Nguyen Anh Tu Date: Thu, 8 May 2025 16:58:21 +0700 Subject: [PATCH 099/147] fix: correct setlock synchronous --- .../src/SeedlessOnboardingController.ts | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index ebb89f1fcd..a15d70c44f 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -164,9 +164,7 @@ export class SeedlessOnboardingController extends BaseController< // setup subscriptions to the keyring lock event // when the keyring is locked (wallet is locked), the controller will be cleared of its credentials this.messagingSystem.subscribe('KeyringController:lock', () => { - this.setLocked().catch((error) => { - log('Error setting controller to locked state', error); - }); + this.setLocked(); }); this.messagingSystem.subscribe('KeyringController:unlock', () => { this.#setUnlocked(); @@ -481,15 +479,13 @@ export class SeedlessOnboardingController extends BaseController< * * @returns A promise that resolves to the success of the operation. */ - async setLocked(): Promise { - return this.#withControllerLock(async () => { - this.update((state) => { - delete state.vaultEncryptionKey; - delete state.vaultEncryptionSalt; - }); - - this.#isUnlocked = false; + setLocked() { + this.update((state) => { + delete state.vaultEncryptionKey; + delete state.vaultEncryptionSalt; }); + + this.#isUnlocked = false; } /** From 4820a8cc97d35e5e1b10ade89190ebb2111d1243 Mon Sep 17 00:00:00 2001 From: Nguyen Anh Tu Date: Thu, 8 May 2025 17:02:35 +0700 Subject: [PATCH 100/147] fix: correct test and doc --- .../src/SeedlessOnboardingController.test.ts | 2 +- .../src/SeedlessOnboardingController.ts | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts index 9396727836..0c7d877100 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts @@ -2257,7 +2257,7 @@ describe('SeedlessOnboardingController', () => { MOCK_KEYRING_ID, ); - await controller.setLocked(); + controller.setLocked(); await expect( controller.addNewSeedPhraseBackup( diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index a15d70c44f..a9bdf6eacf 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -476,8 +476,6 @@ export class SeedlessOnboardingController extends BaseController< * Set the controller to locked state, and deallocate the secrets (vault encryption key and salt). * * When the controller is locked, the user will not be able to perform any operations on the controller/vault. - * - * @returns A promise that resolves to the success of the operation. */ setLocked() { this.update((state) => { From 630ed14348174cf3506145aac2c408a643f74176 Mon Sep 17 00:00:00 2001 From: lwin Date: Fri, 9 May 2025 11:49:25 +0800 Subject: [PATCH 101/147] chore: allow 'toprf-secure-backup' package in lavamoat --- packages/seedless-onboarding-controller/package.json | 8 ++++++++ yarn.lock | 2 ++ 2 files changed, 10 insertions(+) diff --git a/packages/seedless-onboarding-controller/package.json b/packages/seedless-onboarding-controller/package.json index cedfa4871e..24c81a108c 100644 --- a/packages/seedless-onboarding-controller/package.json +++ b/packages/seedless-onboarding-controller/package.json @@ -55,6 +55,8 @@ "async-mutex": "^0.5.0" }, "devDependencies": { + "@lavamoat/allow-scripts": "^3.0.4", + "@lavamoat/preinstall-always-fail": "^2.1.0", "@metamask/auto-changelog": "^3.4.4", "@noble/ciphers": "^0.5.2", "@noble/curves": "^1.2.0", @@ -76,5 +78,11 @@ "publishConfig": { "access": "public", "registry": "https://registry.npmjs.org/" + }, + "lavamoat": { + "allowScripts": { + "@lavamoat/preinstall-always-fail": false, + "@metamask/toprf-secure-backup": true + } } } diff --git a/yarn.lock b/yarn.lock index 4b3b3a0c72..ecb774b935 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4257,6 +4257,8 @@ __metadata: version: 0.0.0-use.local resolution: "@metamask/seedless-onboarding-controller@workspace:packages/seedless-onboarding-controller" dependencies: + "@lavamoat/allow-scripts": "npm:^3.0.4" + "@lavamoat/preinstall-always-fail": "npm:^2.1.0" "@metamask/auth-network-utils": "npm:^0.1.0" "@metamask/auto-changelog": "npm:^3.4.4" "@metamask/base-controller": "npm:^8.0.1" From d77a46d18d299495a12d57dfc9b5e3c2e5c946d5 Mon Sep 17 00:00:00 2001 From: lwin Date: Mon, 12 May 2025 19:22:21 +0800 Subject: [PATCH 102/147] feat: added new method to clear the controller state --- .../src/SeedlessOnboardingController.test.ts | 24 +++++++++++++++++++ .../src/SeedlessOnboardingController.ts | 10 ++++++++ 2 files changed, 34 insertions(+) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts index e24d5215ca..021d533bf2 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts @@ -1389,6 +1389,30 @@ describe('SeedlessOnboardingController', () => { }); }); + describe('clearState', () => { + it('should clear the state', async () => { + await withController( + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + }), + }, + async ({ controller }) => { + const { state } = controller; + + expect(state.nodeAuthTokens).toBeDefined(); + expect(state.userId).toBeDefined(); + expect(state.authConnectionId).toBeDefined(); + + controller.clearState(); + expect(controller.state).toStrictEqual( + getDefaultSeedlessOnboardingControllerState(), + ); + }, + ); + }); + }); + describe('vault', () => { const MOCK_PASSWORD = 'mock-password'; diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index 7a60a5aa19..4b424de0ce 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -335,6 +335,16 @@ export class SeedlessOnboardingController extends BaseController< ); } + /** + * Clears the current state of the SeedlessOnboardingController. + */ + clearState() { + const defaultState = getDefaultSeedlessOnboardingControllerState(); + this.update(() => { + return defaultState; + }); + } + /** * Persist the encryption key for the seedless onboarding flow. * From e856469abc226eebdda6527f15f05b319a5c25f5 Mon Sep 17 00:00:00 2001 From: lwin Date: Mon, 12 May 2025 20:12:24 +0800 Subject: [PATCH 103/147] chore: used 'some' instead of 'find' to check the existing backup data --- .../src/SeedlessOnboardingController.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index 6ade3f52b0..bb083a43f9 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -725,11 +725,11 @@ export class SeedlessOnboardingController extends BaseController< const { keyringId, seedPhrase } = item; const backupHash = keccak256AndHexify(seedPhrase); - const existingBackupMetadata = currentBackupsMetadata.find( + const backupStateAlreadyExisted = currentBackupsMetadata.some( (backup) => backup.hash === backupHash, ); - if (!existingBackupMetadata) { + if (!backupStateAlreadyExisted) { filteredNewBackupsMetadata.push({ id: keyringId, hash: backupHash, From 264641d1008657e464e3af9df4762aee06d6e824 Mon Sep 17 00:00:00 2001 From: lwin Date: Tue, 13 May 2025 13:09:59 +0800 Subject: [PATCH 104/147] feat: update metadata class to support multiple secret types --- .../src/SecretMetadata.ts | 202 ++++++++++++++++++ .../src/SeedPhraseMetadata.ts | 181 ---------------- .../src/SeedlessOnboardingController.ts | 10 +- .../src/constants.ts | 7 +- .../src/types.ts | 15 ++ 5 files changed, 230 insertions(+), 185 deletions(-) create mode 100644 packages/seedless-onboarding-controller/src/SecretMetadata.ts delete mode 100644 packages/seedless-onboarding-controller/src/SeedPhraseMetadata.ts diff --git a/packages/seedless-onboarding-controller/src/SecretMetadata.ts b/packages/seedless-onboarding-controller/src/SecretMetadata.ts new file mode 100644 index 0000000000..1df2fcfa76 --- /dev/null +++ b/packages/seedless-onboarding-controller/src/SecretMetadata.ts @@ -0,0 +1,202 @@ +import { + base64ToBytes, + bytesToBase64, + stringToBytes, + bytesToString, +} from '@metamask/utils'; + +import { SeedlessOnboardingControllerError, SecretType } from './constants'; +import type { SecretMetadataOptions } from './types'; + +type ISecretMetadata = { + data: Uint8Array; + timestamp: number; + toBytes: () => Uint8Array; +}; + +// SecretMetadata type without the data and toBytes methods +// in which the data is base64 encoded for more compacted metadata +type IBase64SecretMetadata = Omit & { + data: string; // base64 encoded string +}; + +/** + * SecretMetadata is a class that adds metadata to the secret. + * + * It contains the secret and the timestamp when it was created. + * It is used to store the secret in the metadata store. + * + * @example + * ```ts + * const secretMetadata = new SecretMetadata(secret); + * ``` + */ +export class SecretMetadata implements ISecretMetadata { + readonly #secret: Uint8Array; + + readonly #timestamp: number; + + readonly #type: SecretType; + + /** + * Create a new SecretMetadata instance. + * + * @param secret - The secret to add metadata to. + * @param options - The options for the secret metadata. + * @param options.timestamp - The timestamp when the secret was created. + * @param options.type - The type of the secret. + */ + constructor(secret: Uint8Array, options?: Partial) { + this.#secret = secret; + this.#timestamp = options?.timestamp ?? Date.now(); + this.#type = options?.type ?? SecretType.Mnemonic; + } + + /** + * Create an Array of SecretMetadata instances from an array of secrets. + * + * To respect the order of the secrets, we add the index to the timestamp + * so that the first secret backup will have the oldest timestamp + * and the last secret backup will have the newest timestamp. + * + * @param data - The data to add metadata to. + * @param data.value - The SeedPhrase/PrivateKey to add metadata to. + * @param data.options - The options for the seed phrase metadata. + * @returns The SecretMetadata instances. + */ + static fromBatch( + data: { + value: Uint8Array; + options?: Partial; + }[], + ): SecretMetadata[] { + const timestamp = Date.now(); + return data.map((d, index) => { + // To respect the order of the seed phrases, we add the index to the timestamp + // so that the first seed phrase backup will have the oldest timestamp + // and the last seed phrase backup will have the newest timestamp + const backupCreatedAt = d.options?.timestamp ?? timestamp + index * 5; + return new SecretMetadata(d.value, { + timestamp: backupCreatedAt, + type: d.options?.type, + }); + }); + } + + /** + * Assert that the provided value is a valid seed phrase metadata. + * + * @param value - The value to check. + * @throws If the value is not a valid seed phrase metadata. + */ + static assertIsBase64SecretMetadata( + value: unknown, + ): asserts value is IBase64SecretMetadata { + if ( + typeof value !== 'object' || + !value || + !('data' in value) || + typeof value.data !== 'string' || + !('timestamp' in value) || + typeof value.timestamp !== 'number' + ) { + throw new Error(SeedlessOnboardingControllerError.InvalidSecretMetadata); + } + } + + /** + * Parse the SecretMetadata from the metadata store and return the array of SecretMetadata instances. + * + * This method also sorts the secrets by timestamp in ascending order, i.e. the oldest secret will be the first element in the array. + * + * @param secretMetadataArr - The array of SecretMetadata from the metadata store. + * @returns The array of SecretMetadata instances. + */ + static parseSecretsFromMetadataStore( + secretMetadataArr: Uint8Array[], + ): SecretMetadata[] { + const parsedSecertMetadata = secretMetadataArr.map((metadata) => + SecretMetadata.fromRawMetadata(metadata), + ); + + const secrets = SecretMetadata.sort(parsedSecertMetadata); + + return secrets; + } + + /** + * Parse and create the SecretMetadata instance from the raw metadata. + * + * @param rawMetadata - The raw metadata. + * @param type - The type of the secret. + * @returns The parsed secret metadata. + */ + static fromRawMetadata( + rawMetadata: Uint8Array, + type: SecretType = SecretType.Mnemonic, + ): SecretMetadata { + const serializedMetadata = bytesToString(rawMetadata); + const parsedMetadata = JSON.parse(serializedMetadata); + + SecretMetadata.assertIsBase64SecretMetadata(parsedMetadata); + + const bytes = base64ToBytes(parsedMetadata.data); + return new SecretMetadata(bytes, { + timestamp: parsedMetadata.timestamp, + type, + }); + } + + /** + * Sort the seed phrases by timestamp. + * + * @param secrets - The seed phrases to sort. + * @param order - The order to sort the seed phrases. Default is `desc`. + * + * @returns The sorted seed phrases. + */ + static sort( + secrets: SecretMetadata[], + order: 'asc' | 'desc' = 'asc', + ): SecretMetadata[] { + return secrets.sort((a, b) => { + if (order === 'asc') { + return a.timestamp - b.timestamp; + } + return b.timestamp - a.timestamp; + }); + } + + get data() { + return this.#secret; + } + + get timestamp() { + return this.#timestamp; + } + + get type() { + return this.#type; + } + + /** + * Serialize the secret metadata and convert it to a Uint8Array. + * + * @returns The serialized SecretMetadata value in bytes. + */ + toBytes(): Uint8Array { + // encode the raw secret to base64 encoded string + // to create more compacted metadata + const b64Data = bytesToBase64(this.#secret); + + // serialize the metadata to a JSON string + const serializedMetadata = JSON.stringify({ + data: b64Data, + timestamp: this.#timestamp, + type: this.#type, + }); + + // convert the serialized metadata to bytes(Uint8Array) + return stringToBytes(serializedMetadata); + } +} diff --git a/packages/seedless-onboarding-controller/src/SeedPhraseMetadata.ts b/packages/seedless-onboarding-controller/src/SeedPhraseMetadata.ts deleted file mode 100644 index d932d15fd8..0000000000 --- a/packages/seedless-onboarding-controller/src/SeedPhraseMetadata.ts +++ /dev/null @@ -1,181 +0,0 @@ -import { - base64ToBytes, - bytesToBase64, - stringToBytes, - bytesToString, -} from '@metamask/utils'; - -import { SeedlessOnboardingControllerError } from './constants'; - -type ISeedPhraseMetadata = { - seedPhrase: Uint8Array; - timestamp: number; - toBytes: () => Uint8Array; -}; - -// SeedPhraseMetadata type without the seedPhrase and toBytes methods -// in which the seedPhrase is base64 encoded for more compacted metadata -type IBase64SeedPhraseMetadata = Omit< - ISeedPhraseMetadata, - 'seedPhrase' | 'toBytes' -> & { - seedPhrase: string; // base64 encoded string -}; - -/** - * SeedPhraseMetadata is a class that adds metadata to the seed phrase. - * - * It contains the seed phrase and the timestamp when it was created. - * It is used to store the seed phrase in the metadata store. - * - * @example - * ```ts - * const seedPhraseMetadata = new SeedPhraseMetadata(seedPhrase); - * ``` - */ -export class SeedPhraseMetadata implements ISeedPhraseMetadata { - readonly #seedPhrase: Uint8Array; - - readonly #timestamp: number; - - /** - * Create a new SeedPhraseMetadata instance. - * - * @param seedPhrase - The seed phrase to add metadata to. - * @param timestamp - The timestamp when the seed phrase was created. - */ - constructor(seedPhrase: Uint8Array, timestamp: number = Date.now()) { - this.#seedPhrase = seedPhrase; - this.#timestamp = timestamp; - } - - /** - * Create an Array of SeedPhraseMetadata instances from an array of seed phrases. - * - * To respect the order of the seed phrases, we add the index to the timestamp - * so that the first seed phrase backup will have the oldest timestamp - * and the last seed phrase backup will have the newest timestamp. - * - * @param seedPhrases - The seed phrases to add metadata to. - * @returns The SeedPhraseMetadata instances. - */ - static fromBatchSeedPhrases(seedPhrases: Uint8Array[]): SeedPhraseMetadata[] { - const timestamp = Date.now(); - return seedPhrases.map((seedPhrase, index) => { - // To respect the order of the seed phrases, we add the index to the timestamp - // so that the first seed phrase backup will have the oldest timestamp - // and the last seed phrase backup will have the newest timestamp - const backupCreatedAt = timestamp + index * 5; - return new SeedPhraseMetadata(seedPhrase, backupCreatedAt); - }); - } - - /** - * Assert that the provided value is a valid seed phrase metadata. - * - * @param value - The value to check. - * @throws If the value is not a valid seed phrase metadata. - */ - static assertIsBase64SeedphraseMetadata( - value: unknown, - ): asserts value is IBase64SeedPhraseMetadata { - if ( - typeof value !== 'object' || - !value || - !('seedPhrase' in value) || - typeof value.seedPhrase !== 'string' || - !('timestamp' in value) || - typeof value.timestamp !== 'number' - ) { - throw new Error( - SeedlessOnboardingControllerError.InvalidSeedPhraseMetadata, - ); - } - } - - /** - * Parse the seed phrase metadata from the metadata store and return the array of raw seed phrases. - * - * This method also sorts the seed phrases by timestamp in ascending order, i.e. the oldest seed phrase will be the first element in the array. - * - * @param seedPhraseMetadataArr - The array of SeedPhrase Metadata from the metadata store. - * @returns The array of raw seed phrases. - */ - static parseSeedPhraseFromMetadataStore( - seedPhraseMetadataArr: Uint8Array[], - ): Uint8Array[] { - const parsedSeedPhraseMetadata = seedPhraseMetadataArr.map((metadata) => - SeedPhraseMetadata.fromRawMetadata(metadata), - ); - - const seedPhrases = SeedPhraseMetadata.sort(parsedSeedPhraseMetadata); - - return seedPhrases.map( - (seedPhraseMetadata) => seedPhraseMetadata.seedPhrase, - ); - } - - /** - * Parse and create the SeedPhraseMetadata instance from the raw metadata. - * - * @param rawMetadata - The raw metadata. - * @returns The parsed seed phrase metadata. - */ - static fromRawMetadata(rawMetadata: Uint8Array): SeedPhraseMetadata { - const serializedMetadata = bytesToString(rawMetadata); - const parsedMetadata = JSON.parse(serializedMetadata); - - SeedPhraseMetadata.assertIsBase64SeedphraseMetadata(parsedMetadata); - - const seedPhraseBytes = base64ToBytes(parsedMetadata.seedPhrase); - return new SeedPhraseMetadata(seedPhraseBytes, parsedMetadata.timestamp); - } - - /** - * Sort the seed phrases by timestamp. - * - * @param seedPhrases - The seed phrases to sort. - * @param order - The order to sort the seed phrases. Default is `desc`. - * - * @returns The sorted seed phrases. - */ - static sort( - seedPhrases: SeedPhraseMetadata[], - order: 'asc' | 'desc' = 'asc', - ): SeedPhraseMetadata[] { - return seedPhrases.sort((a, b) => { - if (order === 'asc') { - return a.timestamp - b.timestamp; - } - return b.timestamp - a.timestamp; - }); - } - - get seedPhrase() { - return this.#seedPhrase; - } - - get timestamp() { - return this.#timestamp; - } - - /** - * Serialize the seed phrase metadata and convert it to a Uint8Array. - * - * @returns The serialized SeedPhraseMetadata value in bytes. - */ - toBytes(): Uint8Array { - // encode the raw SeedPhrase to base64 encoded string - // to create more compacted metadata - const b64SeedPhrase = bytesToBase64(this.#seedPhrase); - - // serialize the metadata to a JSON string - const serializedMetadata = JSON.stringify({ - seedPhrase: b64SeedPhrase, - timestamp: this.#timestamp, - }); - - // convert the serialized metadata to bytes(Uint8Array) - return stringToBytes(serializedMetadata); - } -} diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index bb083a43f9..e3f4aa3c2c 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -19,12 +19,13 @@ import { Mutex } from 'async-mutex'; import { type AuthConnection, controllerName, + SecretType, SeedlessOnboardingControllerError, Web3AuthNetwork, } from './constants'; import { RecoveryError } from './errors'; import { projectLogger, createModuleLogger } from './logger'; -import { SeedPhraseMetadata } from './SeedPhraseMetadata'; +import { SecretMetadata } from './SecretMetadata'; import type { MutuallyExclusiveCallback, SeedlessOnboardingControllerMessenger, @@ -313,7 +314,10 @@ export class SeedlessOnboardingController extends BaseController< }); } - return SeedPhraseMetadata.parseSeedPhraseFromMetadataStore(secretData); + const secrets = SecretMetadata.parseSecretsFromMetadataStore(secretData); + return secrets + .filter((secret) => secret.type === SecretType.Mnemonic) + .map((secret) => secret.data); } catch (error) { log('Error fetching seed phrase metadata', error); throw new Error( @@ -550,7 +554,7 @@ export class SeedlessOnboardingController extends BaseController< try { const { keyringId, seedPhrase, encKey, authKeyPair } = params; - const seedPhraseMetadata = new SeedPhraseMetadata(seedPhrase); + const seedPhraseMetadata = new SecretMetadata(seedPhrase); const secretData = seedPhraseMetadata.toBytes(); await this.#withPersistedSeedPhraseBackupsState(async () => { await this.toprfClient.addSecretDataItem({ diff --git a/packages/seedless-onboarding-controller/src/constants.ts b/packages/seedless-onboarding-controller/src/constants.ts index df26d8a55c..c58cec354b 100644 --- a/packages/seedless-onboarding-controller/src/constants.ts +++ b/packages/seedless-onboarding-controller/src/constants.ts @@ -11,6 +11,11 @@ export enum AuthConnection { Apple = 'apple', } +export enum SecretType { + Mnemonic = 'mnemonic', + PrivateKey = 'privateKey', +} + export enum SeedlessOnboardingControllerError { ControllerLocked = `${controllerName} - The operation cannot be completed while the controller is locked.`, AuthenticationError = `${controllerName} - Authentication error`, @@ -25,7 +30,7 @@ export enum SeedlessOnboardingControllerError { InvalidVaultData = `${controllerName} - Invalid vault data`, VaultDataError = `${controllerName} - The decrypted vault has an unexpected shape.`, VaultError = `${controllerName} - Cannot unlock without a previous vault.`, - InvalidSeedPhraseMetadata = `${controllerName} - Invalid seed phrase metadata`, + InvalidSecretMetadata = `${controllerName} - Invalid secret metadata`, FailedToEncryptAndStoreSeedPhraseBackup = `${controllerName} - Failed to encrypt and store seed phrase backup`, FailedToFetchSeedPhraseMetadata = `${controllerName} - Failed to fetch seed phrase metadata`, FailedToChangePassword = `${controllerName} - Failed to change password`, diff --git a/packages/seedless-onboarding-controller/src/types.ts b/packages/seedless-onboarding-controller/src/types.ts index 052bd92016..d9d833e4ec 100644 --- a/packages/seedless-onboarding-controller/src/types.ts +++ b/packages/seedless-onboarding-controller/src/types.ts @@ -12,6 +12,7 @@ import type { MutexInterface } from 'async-mutex'; import type { AuthConnection, controllerName, + SecretType, Web3AuthNetwork, } from './constants'; @@ -181,3 +182,17 @@ export type VaultData = { */ toprfAuthKeyPair: string; }; + +/** + * The constructor options for the seed phrase metadata. + */ +export type SecretMetadataOptions = { + /** + * The timestamp when the seed phrase was created. + */ + timestamp: number; + /** + * The type of the seed phrase. + */ + type: SecretType; +}; From fd81fc49a407ead8fb4ce8e5b7b8ba3138153813 Mon Sep 17 00:00:00 2001 From: lwin Date: Tue, 13 May 2025 13:10:05 +0800 Subject: [PATCH 105/147] test: updated tests --- .../seedless-onboarding-controller.tgz | Bin 50686 -> 51318 bytes .../src/SeedlessOnboardingController.test.ts | 71 ++++++++++-------- .../tests/mocks/toprf.ts | 14 ++-- 3 files changed, 48 insertions(+), 37 deletions(-) diff --git a/packages/seedless-onboarding-controller/seedless-onboarding-controller.tgz b/packages/seedless-onboarding-controller/seedless-onboarding-controller.tgz index 7dc85b7aa655af1a3ad02cfa628b53c453f2ff19..2cc948fd3a6536ac68b99e8efa6361f2e719cef7 100644 GIT binary patch delta 48841 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

    m#qA!wGtO;*QiOf^ixZz8HGoKE@4z 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≤bX!EkAa)6v6uJs-U^t%`CXqdH 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 IOBjg%11X9#00000 diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts index 294685f710..e1e7bda737 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts @@ -24,13 +24,14 @@ import { Web3AuthNetwork, SeedlessOnboardingControllerError, AuthConnection, + SecretType, } from './constants'; import { RecoveryError } from './errors'; +import { SecretMetadata } from './SecretMetadata'; import { getDefaultSeedlessOnboardingControllerState, SeedlessOnboardingController, } from './SeedlessOnboardingController'; -import { SeedPhraseMetadata } from './SeedPhraseMetadata'; import type { AllowedActions, AllowedEvents, @@ -48,7 +49,7 @@ import { } from '../tests/__fixtures__/topfClient'; import { createMockSecretDataGetResponse, - MULTIPLE_MOCK_SEEDPHRASE_METADATA, + MULTIPLE_MOCK_SECRET_METADATA, } from '../tests/mocks/toprf'; import { MockToprfEncryptorDecryptor } from '../tests/mocks/toprfEncryptor'; import MockVaultEncryptor from '../tests/mocks/vaultEncryptor'; @@ -1263,7 +1264,7 @@ describe('SeedlessOnboardingController', () => { const mockSecretDataGet = handleMockSecretDataGet({ status: 200, body: createMockSecretDataGetResponse( - MULTIPLE_MOCK_SEEDPHRASE_METADATA, + MULTIPLE_MOCK_SECRET_METADATA, MOCK_PASSWORD, ), }); @@ -2117,29 +2118,43 @@ describe('SeedlessOnboardingController', () => { }); describe('SeedPhraseMetadata', () => { - it('should be able to create a seed phrase metadata', () => { + it('should be able to create a seed phrase metadata with default options', () => { // should be able to create a SeedPhraseMetadata instance via constructor - const seedPhraseMetadata = new SeedPhraseMetadata(MOCK_SEED_PHRASE); - expect(seedPhraseMetadata.seedPhrase).toBeDefined(); + const seedPhraseMetadata = new SecretMetadata(MOCK_SEED_PHRASE); + expect(seedPhraseMetadata.data).toBeDefined(); expect(seedPhraseMetadata.timestamp).toBeDefined(); // should be able to create a SeedPhraseMetadata instance with a timestamp via constructor const timestamp = 18_000; - const seedPhraseMetadata2 = new SeedPhraseMetadata( - MOCK_SEED_PHRASE, + const seedPhraseMetadata2 = new SecretMetadata(MOCK_SEED_PHRASE, { timestamp, - ); - expect(seedPhraseMetadata2.seedPhrase).toBeDefined(); + }); + expect(seedPhraseMetadata2.data).toBeDefined(); expect(seedPhraseMetadata2.timestamp).toBe(timestamp); - expect(seedPhraseMetadata2.seedPhrase).toStrictEqual(MOCK_SEED_PHRASE); + expect(seedPhraseMetadata2.data).toStrictEqual(MOCK_SEED_PHRASE); + expect(seedPhraseMetadata2.type).toBe(SecretType.Mnemonic); + }); + + it('should be able to add metadata to a seed phrase', () => { + const timestamp = 18_000; + const seedPhraseMetadata = new SecretMetadata(MOCK_SEED_PHRASE, { + type: SecretType.PrivateKey, + timestamp, + }); + expect(seedPhraseMetadata.type).toBe(SecretType.PrivateKey); + expect(seedPhraseMetadata.timestamp).toBe(timestamp); }); it('should be able to correctly create `SeedPhraseMetadata` Array for batch seedphrases', () => { const seedPhrases = ['seed phrase 1', 'seed phrase 2', 'seed phrase 3']; - const rawSeedPhrases = seedPhrases.map(stringToBytes); + const rawSeedPhrases = seedPhrases.map((srp) => ({ + value: stringToBytes(srp), + options: { + type: SecretType.Mnemonic, + }, + })); - const seedPhraseMetadataArray = - SeedPhraseMetadata.fromBatchSeedPhrases(rawSeedPhrases); + const seedPhraseMetadataArray = SecretMetadata.fromBatch(rawSeedPhrases); expect(seedPhraseMetadataArray).toHaveLength(seedPhrases.length); // check the timestamp, the first one should be the oldest @@ -2152,31 +2167,27 @@ describe('SeedlessOnboardingController', () => { }); it('should be able to serialized and parse a seed phrase metadata', () => { - const seedPhraseMetadata = new SeedPhraseMetadata(MOCK_SEED_PHRASE); + const seedPhraseMetadata = new SecretMetadata(MOCK_SEED_PHRASE); const serializedSeedPhraseBytes = seedPhraseMetadata.toBytes(); - const parsedSeedPhraseMetadata = SeedPhraseMetadata.fromRawMetadata( + const parsedSeedPhraseMetadata = SecretMetadata.fromRawMetadata( serializedSeedPhraseBytes, ); - expect(parsedSeedPhraseMetadata.seedPhrase).toBeDefined(); + expect(parsedSeedPhraseMetadata.data).toBeDefined(); expect(parsedSeedPhraseMetadata.timestamp).toBeDefined(); - expect(parsedSeedPhraseMetadata.seedPhrase).toStrictEqual( - MOCK_SEED_PHRASE, - ); + expect(parsedSeedPhraseMetadata.data).toStrictEqual(MOCK_SEED_PHRASE); }); it('should be able to sort seed phrase metadata', () => { - const mockSeedPhraseMetadata1 = new SeedPhraseMetadata( - MOCK_SEED_PHRASE, - 1000, - ); - const mockSeedPhraseMetadata2 = new SeedPhraseMetadata( - MOCK_SEED_PHRASE, - 2000, - ); + const mockSeedPhraseMetadata1 = new SecretMetadata(MOCK_SEED_PHRASE, { + timestamp: 1000, + }); + const mockSeedPhraseMetadata2 = new SecretMetadata(MOCK_SEED_PHRASE, { + timestamp: 2000, + }); // sort in ascending order - const sortedSeedPhraseMetadata = SeedPhraseMetadata.sort( + const sortedSeedPhraseMetadata = SecretMetadata.sort( [mockSeedPhraseMetadata1, mockSeedPhraseMetadata2], 'asc', ); @@ -2185,7 +2196,7 @@ describe('SeedlessOnboardingController', () => { ); // sort in descending order - const sortedSeedPhraseMetadataDesc = SeedPhraseMetadata.sort( + const sortedSeedPhraseMetadataDesc = SecretMetadata.sort( [mockSeedPhraseMetadata1, mockSeedPhraseMetadata2], 'desc', ); diff --git a/packages/seedless-onboarding-controller/tests/mocks/toprf.ts b/packages/seedless-onboarding-controller/tests/mocks/toprf.ts index dafddf6be6..a240e8a112 100644 --- a/packages/seedless-onboarding-controller/tests/mocks/toprf.ts +++ b/packages/seedless-onboarding-controller/tests/mocks/toprf.ts @@ -50,17 +50,17 @@ export const MOCK_RELEASE_METADATA_LOCK_RESPONSE = { status: 1, }; -export const MULTIPLE_MOCK_SEEDPHRASE_METADATA = [ +export const MULTIPLE_MOCK_SECRET_METADATA = [ { - seedPhrase: new Uint8Array(Buffer.from('seedPhrase1', 'utf-8')), + data: new Uint8Array(Buffer.from('seedPhrase1', 'utf-8')), timestamp: 10, }, { - seedPhrase: new Uint8Array(Buffer.from('seedPhrase3', 'utf-8')), + data: new Uint8Array(Buffer.from('seedPhrase3', 'utf-8')), timestamp: 60, }, { - seedPhrase: new Uint8Array(Buffer.from('seedPhrase2', 'utf-8')), + data: new Uint8Array(Buffer.from('seedPhrase2', 'utf-8')), timestamp: 20, }, ]; @@ -73,7 +73,7 @@ export const MULTIPLE_MOCK_SEEDPHRASE_METADATA = [ * @returns The mock secret data get response */ export function createMockSecretDataGetResponse< - T extends Uint8Array | { seedPhrase: Uint8Array; timestamp: number }, + T extends Uint8Array | { data: Uint8Array; timestamp: number }, >(secretDataArr: T[], password: string) { const mockToprfEncryptor = new MockToprfEncryptorDecryptor(); const ids: string[] = []; @@ -84,12 +84,12 @@ export function createMockSecretDataGetResponse< if (secretData instanceof Uint8Array) { b64SecretData = Buffer.from(secretData).toString('base64'); } else { - b64SecretData = Buffer.from(secretData.seedPhrase).toString('base64'); + b64SecretData = Buffer.from(secretData.data).toString('base64'); timestamp = secretData.timestamp; } const metadata = JSON.stringify({ - seedPhrase: b64SecretData, + data: b64SecretData, timestamp, }); From da85dbdc66c7fe0c7588c2fa2597e714896530ca Mon Sep 17 00:00:00 2001 From: lwin Date: Tue, 13 May 2025 13:15:04 +0800 Subject: [PATCH 106/147] chore: updated seedless-onboarding-controller tgz package --- .../seedless-onboarding-controller.tgz | Bin 50686 -> 51318 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/packages/seedless-onboarding-controller/seedless-onboarding-controller.tgz b/packages/seedless-onboarding-controller/seedless-onboarding-controller.tgz index 7dc85b7aa655af1a3ad02cfa628b53c453f2ff19..2cc948fd3a6536ac68b99e8efa6361f2e719cef7 100644 GIT binary patch delta 48841 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

    m#qA!wGtO;*QiOf^ixZz8HGoKE@4z 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≤bX!EkAa)6v6uJs-U^t%`CXqdH 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 IOBjg%11X9#00000 From 25eef9460b6ac73d4bcd6d96c4228bd2214b506f Mon Sep 17 00:00:00 2001 From: lwin Date: Tue, 13 May 2025 14:25:15 +0800 Subject: [PATCH 107/147] chore: update 'ISecretMetadata' to include SecretType --- packages/seedless-onboarding-controller/src/SecretMetadata.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/seedless-onboarding-controller/src/SecretMetadata.ts b/packages/seedless-onboarding-controller/src/SecretMetadata.ts index 1df2fcfa76..f6bfca2dfe 100644 --- a/packages/seedless-onboarding-controller/src/SecretMetadata.ts +++ b/packages/seedless-onboarding-controller/src/SecretMetadata.ts @@ -11,6 +11,7 @@ import type { SecretMetadataOptions } from './types'; type ISecretMetadata = { data: Uint8Array; timestamp: number; + type: SecretType; toBytes: () => Uint8Array; }; From 511abfc824a6579800dd7c3b846609d59c3691ce Mon Sep 17 00:00:00 2001 From: lwin Date: Tue, 13 May 2025 15:45:18 +0800 Subject: [PATCH 108/147] chore: renamed 'seedPhrase' field to 'data' in SeedPhraseMetadata class --- .../src/SeedPhraseMetadata.ts | 32 +++++++++---------- .../src/SeedlessOnboardingController.test.ts | 12 +++---- .../tests/mocks/toprf.ts | 12 +++---- 3 files changed, 26 insertions(+), 30 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedPhraseMetadata.ts b/packages/seedless-onboarding-controller/src/SeedPhraseMetadata.ts index c162fa60be..b56c12a583 100644 --- a/packages/seedless-onboarding-controller/src/SeedPhraseMetadata.ts +++ b/packages/seedless-onboarding-controller/src/SeedPhraseMetadata.ts @@ -8,7 +8,7 @@ import { import { SeedlessOnboardingControllerError } from './constants'; type ISeedPhraseMetadata = { - seedPhrase: Uint8Array; + data: Uint8Array; timestamp: number; toBytes: () => Uint8Array; }; @@ -17,9 +17,9 @@ type ISeedPhraseMetadata = { // in which the seedPhrase is base64 encoded for more compacted metadata type IBase64SeedPhraseMetadata = Omit< ISeedPhraseMetadata, - 'seedPhrase' | 'toBytes' + 'data' | 'toBytes' > & { - seedPhrase: string; // base64 encoded string + data: string; // base64 encoded string }; /** @@ -34,18 +34,18 @@ type IBase64SeedPhraseMetadata = Omit< * ``` */ export class SeedPhraseMetadata implements ISeedPhraseMetadata { - readonly #seedPhrase: Uint8Array; + readonly #data: Uint8Array; readonly #timestamp: number; /** * Create a new SeedPhraseMetadata instance. * - * @param seedPhrase - The seed phrase to add metadata to. + * @param data - The seed phrase data to add metadata to. * @param timestamp - The timestamp when the seed phrase was created. */ - constructor(seedPhrase: Uint8Array, timestamp: number = Date.now()) { - this.#seedPhrase = seedPhrase; + constructor(data: Uint8Array, timestamp: number = Date.now()) { + this.#data = data; this.#timestamp = timestamp; } @@ -82,8 +82,8 @@ export class SeedPhraseMetadata implements ISeedPhraseMetadata { if ( typeof value !== 'object' || !value || - !('seedPhrase' in value) || - typeof value.seedPhrase !== 'string' || + !('data' in value) || + typeof value.data !== 'string' || !('timestamp' in value) || typeof value.timestamp !== 'number' ) { @@ -110,9 +110,7 @@ export class SeedPhraseMetadata implements ISeedPhraseMetadata { const seedPhrases = SeedPhraseMetadata.sort(parsedSeedPhraseMetadata); - return seedPhrases.map( - (seedPhraseMetadata) => seedPhraseMetadata.seedPhrase, - ); + return seedPhrases.map((seedPhraseMetadata) => seedPhraseMetadata.data); } /** @@ -127,7 +125,7 @@ export class SeedPhraseMetadata implements ISeedPhraseMetadata { SeedPhraseMetadata.assertIsBase64SeedphraseMetadata(parsedMetadata); - const seedPhraseBytes = base64ToBytes(parsedMetadata.seedPhrase); + const seedPhraseBytes = base64ToBytes(parsedMetadata.data); return new SeedPhraseMetadata(seedPhraseBytes, parsedMetadata.timestamp); } @@ -151,8 +149,8 @@ export class SeedPhraseMetadata implements ISeedPhraseMetadata { }); } - get seedPhrase() { - return this.#seedPhrase; + get data() { + return this.#data; } get timestamp() { @@ -167,11 +165,11 @@ export class SeedPhraseMetadata implements ISeedPhraseMetadata { toBytes(): Uint8Array { // encode the raw SeedPhrase to base64 encoded string // to create more compacted metadata - const b64SeedPhrase = bytesToBase64(this.#seedPhrase); + const b64SeedPhrase = bytesToBase64(this.#data); // serialize the metadata to a JSON string const serializedMetadata = JSON.stringify({ - seedPhrase: b64SeedPhrase, + data: b64SeedPhrase, timestamp: this.#timestamp, }); diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts index 021d533bf2..ccc606499c 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts @@ -1504,7 +1504,7 @@ describe('SeedlessOnboardingController', () => { it('should be able to create a seed phrase metadata', () => { // should be able to create a SeedPhraseMetadata instance via constructor const seedPhraseMetadata = new SeedPhraseMetadata(MOCK_SEED_PHRASE); - expect(seedPhraseMetadata.seedPhrase).toBeDefined(); + expect(seedPhraseMetadata.data).toBeDefined(); expect(seedPhraseMetadata.timestamp).toBeDefined(); // should be able to create a SeedPhraseMetadata instance with a timestamp via constructor @@ -1513,9 +1513,9 @@ describe('SeedlessOnboardingController', () => { MOCK_SEED_PHRASE, timestamp, ); - expect(seedPhraseMetadata2.seedPhrase).toBeDefined(); + expect(seedPhraseMetadata2.data).toBeDefined(); expect(seedPhraseMetadata2.timestamp).toBe(timestamp); - expect(seedPhraseMetadata2.seedPhrase).toStrictEqual(MOCK_SEED_PHRASE); + expect(seedPhraseMetadata2.data).toStrictEqual(MOCK_SEED_PHRASE); }); it('should be able to correctly create `SeedPhraseMetadata` Array for batch seedphrases', () => { @@ -1542,11 +1542,9 @@ describe('SeedlessOnboardingController', () => { const parsedSeedPhraseMetadata = SeedPhraseMetadata.fromRawMetadata( serializedSeedPhraseBytes, ); - expect(parsedSeedPhraseMetadata.seedPhrase).toBeDefined(); + expect(parsedSeedPhraseMetadata.data).toBeDefined(); expect(parsedSeedPhraseMetadata.timestamp).toBeDefined(); - expect(parsedSeedPhraseMetadata.seedPhrase).toStrictEqual( - MOCK_SEED_PHRASE, - ); + expect(parsedSeedPhraseMetadata.data).toStrictEqual(MOCK_SEED_PHRASE); }); it('should be able to sort seed phrase metadata', () => { diff --git a/packages/seedless-onboarding-controller/tests/mocks/toprf.ts b/packages/seedless-onboarding-controller/tests/mocks/toprf.ts index dafddf6be6..ce8e2185bc 100644 --- a/packages/seedless-onboarding-controller/tests/mocks/toprf.ts +++ b/packages/seedless-onboarding-controller/tests/mocks/toprf.ts @@ -52,15 +52,15 @@ export const MOCK_RELEASE_METADATA_LOCK_RESPONSE = { export const MULTIPLE_MOCK_SEEDPHRASE_METADATA = [ { - seedPhrase: new Uint8Array(Buffer.from('seedPhrase1', 'utf-8')), + data: new Uint8Array(Buffer.from('seedPhrase1', 'utf-8')), timestamp: 10, }, { - seedPhrase: new Uint8Array(Buffer.from('seedPhrase3', 'utf-8')), + data: new Uint8Array(Buffer.from('seedPhrase3', 'utf-8')), timestamp: 60, }, { - seedPhrase: new Uint8Array(Buffer.from('seedPhrase2', 'utf-8')), + data: new Uint8Array(Buffer.from('seedPhrase2', 'utf-8')), timestamp: 20, }, ]; @@ -73,7 +73,7 @@ export const MULTIPLE_MOCK_SEEDPHRASE_METADATA = [ * @returns The mock secret data get response */ export function createMockSecretDataGetResponse< - T extends Uint8Array | { seedPhrase: Uint8Array; timestamp: number }, + T extends Uint8Array | { data: Uint8Array; timestamp: number }, >(secretDataArr: T[], password: string) { const mockToprfEncryptor = new MockToprfEncryptorDecryptor(); const ids: string[] = []; @@ -84,12 +84,12 @@ export function createMockSecretDataGetResponse< if (secretData instanceof Uint8Array) { b64SecretData = Buffer.from(secretData).toString('base64'); } else { - b64SecretData = Buffer.from(secretData.seedPhrase).toString('base64'); + b64SecretData = Buffer.from(secretData.data).toString('base64'); timestamp = secretData.timestamp; } const metadata = JSON.stringify({ - seedPhrase: b64SecretData, + data: b64SecretData, timestamp, }); From ed1203793629afef06ae6ff1830fcfb7dafb53a3 Mon Sep 17 00:00:00 2001 From: lwin Date: Tue, 13 May 2025 20:54:29 +0800 Subject: [PATCH 109/147] chore: updated tgz package --- .../seedless-onboarding-controller.tgz | Bin 51318 -> 51302 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/packages/seedless-onboarding-controller/seedless-onboarding-controller.tgz b/packages/seedless-onboarding-controller/seedless-onboarding-controller.tgz index 2cc948fd3a6536ac68b99e8efa6361f2e719cef7..9d2dbcd7935d822a46483a0d2fdba31e0482c830 100644 GIT binary patch literal 51302 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

    qUc7a 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 Gk$(VT{8u9Y From 0b67570b54d2c46d164b542a0ae9e95807ca933c Mon Sep 17 00:00:00 2001 From: lwin Date: Wed, 14 May 2025 11:16:38 +0800 Subject: [PATCH 110/147] feat: add 'version' to SecretMetadata --- .../src/SecretMetadata.ts | 53 +++++++++++++------ .../src/SeedlessOnboardingController.test.ts | 3 ++ .../src/constants.ts | 4 ++ .../src/types.ts | 5 ++ 4 files changed, 49 insertions(+), 16 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SecretMetadata.ts b/packages/seedless-onboarding-controller/src/SecretMetadata.ts index f6bfca2dfe..45cd32fe51 100644 --- a/packages/seedless-onboarding-controller/src/SecretMetadata.ts +++ b/packages/seedless-onboarding-controller/src/SecretMetadata.ts @@ -5,13 +5,18 @@ import { bytesToString, } from '@metamask/utils'; -import { SeedlessOnboardingControllerError, SecretType } from './constants'; +import { + SeedlessOnboardingControllerError, + SecretType, + SecretMetadataVersion, +} from './constants'; import type { SecretMetadataOptions } from './types'; type ISecretMetadata = { data: Uint8Array; timestamp: number; type: SecretType; + version: SecretMetadataVersion; toBytes: () => Uint8Array; }; @@ -33,24 +38,27 @@ type IBase64SecretMetadata = Omit & { * ``` */ export class SecretMetadata implements ISecretMetadata { - readonly #secret: Uint8Array; + readonly #data: Uint8Array; readonly #timestamp: number; readonly #type: SecretType; + readonly #version: SecretMetadataVersion; + /** * Create a new SecretMetadata instance. * - * @param secret - The secret to add metadata to. + * @param data - The secret to add metadata to. * @param options - The options for the secret metadata. * @param options.timestamp - The timestamp when the secret was created. * @param options.type - The type of the secret. */ - constructor(secret: Uint8Array, options?: Partial) { - this.#secret = secret; + constructor(data: Uint8Array, options?: Partial) { + this.#data = data; this.#timestamp = options?.timestamp ?? Date.now(); this.#type = options?.type ?? SecretType.Mnemonic; + this.#version = options?.version ?? SecretMetadataVersion.V1; } /** @@ -129,38 +137,46 @@ export class SecretMetadata implements ISecretMetadata { * Parse and create the SecretMetadata instance from the raw metadata. * * @param rawMetadata - The raw metadata. - * @param type - The type of the secret. * @returns The parsed secret metadata. */ - static fromRawMetadata( - rawMetadata: Uint8Array, - type: SecretType = SecretType.Mnemonic, - ): SecretMetadata { + static fromRawMetadata(rawMetadata: Uint8Array): SecretMetadata { const serializedMetadata = bytesToString(rawMetadata); const parsedMetadata = JSON.parse(serializedMetadata); SecretMetadata.assertIsBase64SecretMetadata(parsedMetadata); + let type = SecretType.Mnemonic; + let version = SecretMetadataVersion.V1; + + if (parsedMetadata.type) { + type = parsedMetadata.type; + } + + if (parsedMetadata.version) { + version = parsedMetadata.version; + } + const bytes = base64ToBytes(parsedMetadata.data); return new SecretMetadata(bytes, { timestamp: parsedMetadata.timestamp, type, + version, }); } /** * Sort the seed phrases by timestamp. * - * @param secrets - The seed phrases to sort. + * @param data - The secret metadata array to sort. * @param order - The order to sort the seed phrases. Default is `desc`. * - * @returns The sorted seed phrases. + * @returns The sorted secret metadata array. */ static sort( - secrets: SecretMetadata[], + data: SecretMetadata[], order: 'asc' | 'desc' = 'asc', ): SecretMetadata[] { - return secrets.sort((a, b) => { + return data.sort((a, b) => { if (order === 'asc') { return a.timestamp - b.timestamp; } @@ -169,7 +185,7 @@ export class SecretMetadata implements ISecretMetadata { } get data() { - return this.#secret; + return this.#data; } get timestamp() { @@ -180,6 +196,10 @@ export class SecretMetadata implements ISecretMetadata { return this.#type; } + get version() { + return this.#version; + } + /** * Serialize the secret metadata and convert it to a Uint8Array. * @@ -188,13 +208,14 @@ export class SecretMetadata implements ISecretMetadata { toBytes(): Uint8Array { // encode the raw secret to base64 encoded string // to create more compacted metadata - const b64Data = bytesToBase64(this.#secret); + const b64Data = bytesToBase64(this.#data); // serialize the metadata to a JSON string const serializedMetadata = JSON.stringify({ data: b64Data, timestamp: this.#timestamp, type: this.#type, + version: this.#version, }); // convert the serialized metadata to bytes(Uint8Array) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts index e1e7bda737..0db1fda280 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts @@ -25,6 +25,7 @@ import { SeedlessOnboardingControllerError, AuthConnection, SecretType, + SecretMetadataVersion, } from './constants'; import { RecoveryError } from './errors'; import { SecretMetadata } from './SecretMetadata'; @@ -2123,6 +2124,8 @@ describe('SeedlessOnboardingController', () => { const seedPhraseMetadata = new SecretMetadata(MOCK_SEED_PHRASE); expect(seedPhraseMetadata.data).toBeDefined(); expect(seedPhraseMetadata.timestamp).toBeDefined(); + expect(seedPhraseMetadata.type).toBe(SecretType.Mnemonic); + expect(seedPhraseMetadata.version).toBe(SecretMetadataVersion.V1); // should be able to create a SeedPhraseMetadata instance with a timestamp via constructor const timestamp = 18_000; diff --git a/packages/seedless-onboarding-controller/src/constants.ts b/packages/seedless-onboarding-controller/src/constants.ts index c58cec354b..8428546e04 100644 --- a/packages/seedless-onboarding-controller/src/constants.ts +++ b/packages/seedless-onboarding-controller/src/constants.ts @@ -16,6 +16,10 @@ export enum SecretType { PrivateKey = 'privateKey', } +export enum SecretMetadataVersion { + V1 = 'v1', +} + export enum SeedlessOnboardingControllerError { ControllerLocked = `${controllerName} - The operation cannot be completed while the controller is locked.`, AuthenticationError = `${controllerName} - Authentication error`, diff --git a/packages/seedless-onboarding-controller/src/types.ts b/packages/seedless-onboarding-controller/src/types.ts index d9d833e4ec..806f85d99f 100644 --- a/packages/seedless-onboarding-controller/src/types.ts +++ b/packages/seedless-onboarding-controller/src/types.ts @@ -12,6 +12,7 @@ import type { MutexInterface } from 'async-mutex'; import type { AuthConnection, controllerName, + SecretMetadataVersion, SecretType, Web3AuthNetwork, } from './constants'; @@ -195,4 +196,8 @@ export type SecretMetadataOptions = { * The type of the seed phrase. */ type: SecretType; + /** + * The version of the seed phrase metadata. + */ + version: SecretMetadataVersion; }; From ceda10ed24df78a315f86b6e5bb108bace69f547 Mon Sep 17 00:00:00 2001 From: lwin Date: Wed, 14 May 2025 12:20:18 +0800 Subject: [PATCH 111/147] feat: make 'data' field to Generic in SecretMetadata --- .../src/SecretMetadata.ts | 91 +++++++++++-------- .../src/SeedlessOnboardingController.ts | 9 +- .../src/types.ts | 2 + 3 files changed, 61 insertions(+), 41 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SecretMetadata.ts b/packages/seedless-onboarding-controller/src/SecretMetadata.ts index 45cd32fe51..6364315505 100644 --- a/packages/seedless-onboarding-controller/src/SecretMetadata.ts +++ b/packages/seedless-onboarding-controller/src/SecretMetadata.ts @@ -10,10 +10,10 @@ import { SecretType, SecretMetadataVersion, } from './constants'; -import type { SecretMetadataOptions } from './types'; +import type { SecretDataType, SecretMetadataOptions } from './types'; -type ISecretMetadata = { - data: Uint8Array; +type ISecretMetadata = { + data: DataType; timestamp: number; type: SecretType; version: SecretMetadataVersion; @@ -22,7 +22,10 @@ type ISecretMetadata = { // SecretMetadata type without the data and toBytes methods // in which the data is base64 encoded for more compacted metadata -type IBase64SecretMetadata = Omit & { +type SecretMetadataJson = Omit< + ISecretMetadata, + 'data' | 'toBytes' +> & { data: string; // base64 encoded string }; @@ -37,8 +40,10 @@ type IBase64SecretMetadata = Omit & { * const secretMetadata = new SecretMetadata(secret); * ``` */ -export class SecretMetadata implements ISecretMetadata { - readonly #data: Uint8Array; +export class SecretMetadata + implements ISecretMetadata +{ + readonly #data: DataType; readonly #timestamp: number; @@ -54,7 +59,7 @@ export class SecretMetadata implements ISecretMetadata { * @param options.timestamp - The timestamp when the secret was created. * @param options.type - The type of the secret. */ - constructor(data: Uint8Array, options?: Partial) { + constructor(data: DataType, options?: Partial) { this.#data = data; this.#timestamp = options?.timestamp ?? Date.now(); this.#type = options?.type ?? SecretType.Mnemonic; @@ -73,12 +78,12 @@ export class SecretMetadata implements ISecretMetadata { * @param data.options - The options for the seed phrase metadata. * @returns The SecretMetadata instances. */ - static fromBatch( + static fromBatch( data: { - value: Uint8Array; + value: DataType; options?: Partial; }[], - ): SecretMetadata[] { + ): SecretMetadata[] { const timestamp = Date.now(); return data.map((d, index) => { // To respect the order of the seed phrases, we add the index to the timestamp @@ -98,9 +103,9 @@ export class SecretMetadata implements ISecretMetadata { * @param value - The value to check. * @throws If the value is not a valid seed phrase metadata. */ - static assertIsBase64SecretMetadata( - value: unknown, - ): asserts value is IBase64SecretMetadata { + static assertIsValidSecretMetadataJson< + DataType extends SecretDataType = Uint8Array, + >(value: unknown): asserts value is SecretMetadataJson { if ( typeof value !== 'object' || !value || @@ -119,45 +124,54 @@ export class SecretMetadata implements ISecretMetadata { * This method also sorts the secrets by timestamp in ascending order, i.e. the oldest secret will be the first element in the array. * * @param secretMetadataArr - The array of SecretMetadata from the metadata store. + * @param filterType - The type of the secret to filter. * @returns The array of SecretMetadata instances. */ - static parseSecretsFromMetadataStore( + static parseSecretsFromMetadataStore< + DataType extends SecretDataType = Uint8Array, + >( secretMetadataArr: Uint8Array[], - ): SecretMetadata[] { + filterType?: SecretType, + ): SecretMetadata[] { const parsedSecertMetadata = secretMetadataArr.map((metadata) => - SecretMetadata.fromRawMetadata(metadata), + SecretMetadata.fromRawMetadata(metadata), ); const secrets = SecretMetadata.sort(parsedSecertMetadata); + if (filterType) { + return secrets.filter((secret) => secret.type === filterType); + } + return secrets; } /** - * Parse and create the SecretMetadata instance from the raw metadata. + * Parse and create the SecretMetadata instance from the raw metadata bytes. * * @param rawMetadata - The raw metadata. * @returns The parsed secret metadata. */ - static fromRawMetadata(rawMetadata: Uint8Array): SecretMetadata { + static fromRawMetadata( + rawMetadata: Uint8Array, + ): SecretMetadata { const serializedMetadata = bytesToString(rawMetadata); const parsedMetadata = JSON.parse(serializedMetadata); - SecretMetadata.assertIsBase64SecretMetadata(parsedMetadata); + SecretMetadata.assertIsValidSecretMetadataJson(parsedMetadata); - let type = SecretType.Mnemonic; - let version = SecretMetadataVersion.V1; + // if the type is not provided, we default to Mnemonic for the backwards compatibility + const type = parsedMetadata.type ?? SecretType.Mnemonic; + const version = parsedMetadata.version ?? SecretMetadataVersion.V1; - if (parsedMetadata.type) { - type = parsedMetadata.type; + let data: DataType; + try { + data = base64ToBytes(parsedMetadata.data) as DataType; + } catch { + data = parsedMetadata.data as DataType; } - if (parsedMetadata.version) { - version = parsedMetadata.version; - } - - const bytes = base64ToBytes(parsedMetadata.data); - return new SecretMetadata(bytes, { + return new SecretMetadata(data, { timestamp: parsedMetadata.timestamp, type, version, @@ -172,10 +186,10 @@ export class SecretMetadata implements ISecretMetadata { * * @returns The sorted secret metadata array. */ - static sort( - data: SecretMetadata[], + static sort( + data: SecretMetadata[], order: 'asc' | 'desc' = 'asc', - ): SecretMetadata[] { + ): SecretMetadata[] { return data.sort((a, b) => { if (order === 'asc') { return a.timestamp - b.timestamp; @@ -184,7 +198,7 @@ export class SecretMetadata implements ISecretMetadata { }); } - get data() { + get data(): DataType { return this.#data; } @@ -206,13 +220,16 @@ export class SecretMetadata implements ISecretMetadata { * @returns The serialized SecretMetadata value in bytes. */ toBytes(): Uint8Array { - // encode the raw secret to base64 encoded string - // to create more compacted metadata - const b64Data = bytesToBase64(this.#data); + let _data: unknown = this.#data; + if (this.#data instanceof Uint8Array) { + // encode the raw secret to base64 encoded string + // to create more compacted metadata + _data = bytesToBase64(this.#data); + } // serialize the metadata to a JSON string const serializedMetadata = JSON.stringify({ - data: b64Data, + data: _data, timestamp: this.#timestamp, type: this.#type, version: this.#version, diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index e3f4aa3c2c..281be8691a 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -314,10 +314,11 @@ export class SeedlessOnboardingController extends BaseController< }); } - const secrets = SecretMetadata.parseSecretsFromMetadataStore(secretData); - return secrets - .filter((secret) => secret.type === SecretType.Mnemonic) - .map((secret) => secret.data); + const secrets = SecretMetadata.parseSecretsFromMetadataStore( + secretData, + SecretType.Mnemonic, + ); + return secrets.map((secret) => secret.data); } catch (error) { log('Error fetching seed phrase metadata', error); throw new Error( diff --git a/packages/seedless-onboarding-controller/src/types.ts b/packages/seedless-onboarding-controller/src/types.ts index 806f85d99f..0fb2d6340a 100644 --- a/packages/seedless-onboarding-controller/src/types.ts +++ b/packages/seedless-onboarding-controller/src/types.ts @@ -184,6 +184,8 @@ export type VaultData = { toprfAuthKeyPair: string; }; +export type SecretDataType = Uint8Array | string | number; + /** * The constructor options for the seed phrase metadata. */ From cda67647fa13a9ef8485f17e7359b7a5c865f288 Mon Sep 17 00:00:00 2001 From: lwin Date: Wed, 14 May 2025 12:20:24 +0800 Subject: [PATCH 112/147] test: updated tests --- .../src/SeedlessOnboardingController.test.ts | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts index 0db1fda280..225ec21e37 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts @@ -2207,5 +2207,86 @@ describe('SeedlessOnboardingController', () => { sortedSeedPhraseMetadataDesc[1].timestamp, ); }); + + it('should be able to overwrite the default Generic DataType', () => { + const secret1 = new SecretMetadata('private-key-1', { + type: SecretType.PrivateKey, + }); + expect(secret1.data).toBe('private-key-1'); + expect(secret1.type).toBe(SecretType.PrivateKey); + expect(secret1.version).toBe(SecretMetadataVersion.V1); + + // should be able to convert to bytes + const secret1Bytes = secret1.toBytes(); + const parsedSecret1 = + SecretMetadata.fromRawMetadata(secret1Bytes); + expect(parsedSecret1.data).toBe('private-key-1'); + expect(parsedSecret1.type).toBe(SecretType.PrivateKey); + expect(parsedSecret1.version).toBe(SecretMetadataVersion.V1); + + const secret2 = new SecretMetadata(MOCK_SEED_PHRASE, { + type: SecretType.Mnemonic, + }); + expect(secret2.data).toStrictEqual(MOCK_SEED_PHRASE); + expect(secret2.type).toBe(SecretType.Mnemonic); + + const secret2Bytes = secret2.toBytes(); + const parsedSecret2 = + SecretMetadata.fromRawMetadata(secret2Bytes); + expect(parsedSecret2.data).toStrictEqual(MOCK_SEED_PHRASE); + expect(parsedSecret2.type).toBe(SecretType.Mnemonic); + }); + + it('should be able to parse the array of Mixed SecretMetadata', () => { + const MOCK_PRIVATE_KEY = 'private-key-1'; + const secret1 = new SecretMetadata(MOCK_PRIVATE_KEY, { + type: SecretType.PrivateKey, + }); + const secret2 = new SecretMetadata(MOCK_SEED_PHRASE, { + type: SecretType.Mnemonic, + }); + + const secrets = [secret1.toBytes(), secret2.toBytes()]; + + const parsedSecrets = + SecretMetadata.parseSecretsFromMetadataStore(secrets); + expect(parsedSecrets).toHaveLength(2); + expect(parsedSecrets[0].data).toBe(MOCK_PRIVATE_KEY); + expect(parsedSecrets[0].type).toBe(SecretType.PrivateKey); + expect(parsedSecrets[1].data).toStrictEqual(MOCK_SEED_PHRASE); + expect(parsedSecrets[1].type).toBe(SecretType.Mnemonic); + }); + + it('should be able to filter the array of SecretMetadata by type', () => { + const MOCK_PRIVATE_KEY = 'MOCK_PRIVATE_KEY'; + const secret1 = new SecretMetadata(MOCK_PRIVATE_KEY, { + type: SecretType.PrivateKey, + }); + const secret2 = new SecretMetadata(MOCK_SEED_PHRASE, { + type: SecretType.Mnemonic, + }); + const secret3 = new SecretMetadata(MOCK_SEED_PHRASE); + + const secrets = [secret1.toBytes(), secret2.toBytes(), secret3.toBytes()]; + + const mnemonicSecrets = SecretMetadata.parseSecretsFromMetadataStore( + secrets, + SecretType.Mnemonic, + ); + expect(mnemonicSecrets).toHaveLength(2); + expect(mnemonicSecrets[0].data).toStrictEqual(MOCK_SEED_PHRASE); + expect(mnemonicSecrets[0].type).toBe(SecretType.Mnemonic); + expect(mnemonicSecrets[1].data).toStrictEqual(MOCK_SEED_PHRASE); + expect(mnemonicSecrets[1].type).toBe(SecretType.Mnemonic); + + const privateKeySecrets = SecretMetadata.parseSecretsFromMetadataStore( + secrets, + SecretType.PrivateKey, + ); + + expect(privateKeySecrets).toHaveLength(1); + expect(privateKeySecrets[0].data).toBe(MOCK_PRIVATE_KEY); + expect(privateKeySecrets[0].type).toBe(SecretType.PrivateKey); + }); }); }); From d823bd6d7454f47ed22f8b1d9f1ce8080fa617e1 Mon Sep 17 00:00:00 2001 From: Nguyen Anh Tu Date: Wed, 14 May 2025 21:54:12 +0700 Subject: [PATCH 113/147] refactor: add await to follow guide line --- .../src/SeedlessOnboardingController.ts | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index 2cd5114dd8..e38665e6bd 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -194,7 +194,7 @@ export class SeedlessOnboardingController extends BaseController< groupedAuthConnectionId?: string; socialLoginEmail?: string; }) { - return this.#withControllerLock(async () => { + return await this.#withControllerLock(async () => { try { const { idTokens, @@ -250,7 +250,7 @@ export class SeedlessOnboardingController extends BaseController< // assert that the user is authenticated before creating the TOPRF key and backing up the seed phrase this.#assertIsAuthenticatedUser(this.state); - return this.#withControllerLock(async () => { + return await this.#withControllerLock(async () => { // locally evaluate the encryption key from the password const { encKey, authKeyPair, oprfKey } = this.toprfClient.createLocalKey({ password, @@ -297,7 +297,7 @@ export class SeedlessOnboardingController extends BaseController< skipCache: true, }); // NOTE don't include #assertPasswordInSync in #withControllerLock since #assertPasswordInSync already acquires the controller lock - return this.#withControllerLock(async () => { + return await this.#withControllerLock(async () => { // verify the password and unlock the vault const { toprfEncryptionKey, toprfAuthKeyPair } = await this.#unlockVaultAndGetBackupEncKey(); @@ -324,7 +324,7 @@ export class SeedlessOnboardingController extends BaseController< // assert that the user is authenticated before fetching the seed phrases this.#assertIsAuthenticatedUser(this.state); - return this.#withControllerLock(async () => { + return await this.#withControllerLock(async () => { const { encKey, authKeyPair } = await this.#recoverEncKey(password); try { @@ -377,7 +377,7 @@ export class SeedlessOnboardingController extends BaseController< }); // NOTE don't include verifyPassword and #assertPasswordInSync in #withControllerLock since verifyPassword and #assertPasswordInSync already acquires the controller lock - return this.#withControllerLock(async () => { + return await this.#withControllerLock(async () => { try { // update the encryption key with new password and update the Metadata Store const { encKey: newEncKey, authKeyPair: newAuthKeyPair } = @@ -434,7 +434,7 @@ export class SeedlessOnboardingController extends BaseController< * @throws {Error} If the password is invalid or the vault is not initialized. */ async verifyVaultPassword(password: string): Promise { - return this.#withControllerLock(async () => { + return await this.#withControllerLock(async () => { if (!this.state.vault) { throw new Error(SeedlessOnboardingControllerError.VaultError); } @@ -471,7 +471,7 @@ export class SeedlessOnboardingController extends BaseController< * @returns A promise that resolves to the success of the operation. */ async submitPassword(password: string): Promise { - return this.#withControllerLock(async () => { + return await this.#withControllerLock(async () => { await this.#unlockVaultAndGetBackupEncKey(password); this.#setUnlocked(); }); @@ -511,7 +511,7 @@ export class SeedlessOnboardingController extends BaseController< // verify correct old password await this.verifyVaultPassword(oldPassword); // NOTE don't include verifyPassword in #withControllerLock since verifyPassword already acquires the controller lock - return this.#withControllerLock(async () => { + return await this.#withControllerLock(async () => { // update vault with latest globalPassword const { encKey, authKeyPair } = await this.#recoverEncKey(globalPassword); // update and encrypt the vault with new password @@ -541,7 +541,7 @@ export class SeedlessOnboardingController extends BaseController< }: { globalPassword: string; }): Promise<{ password: string }> { - return this.#withControllerLock(async () => { + return await this.#withControllerLock(async () => { const currentDeviceAuthPubKey = this.#recoverAuthPubKey(); const { password: currentDevicePassword } = await this.#recoverPassword({ targetPwPubKey: currentDeviceAuthPubKey, @@ -606,7 +606,7 @@ export class SeedlessOnboardingController extends BaseController< return passwordOutdatedCache.isExpiredPwd; } } - return this.#withControllerLock(async () => { + return await this.#withControllerLock(async () => { this.#assertIsAuthenticatedUser(this.state); const { nodeAuthTokens, @@ -1063,7 +1063,7 @@ export class SeedlessOnboardingController extends BaseController< async #withControllerLock( callback: MutuallyExclusiveCallback, ): Promise { - return withLock(this.#controllerOperationMutex, callback); + return await withLock(this.#controllerOperationMutex, callback); } /** From 7b0ec56fc8ffa8ab92c15444240ec234ffd779a1 Mon Sep 17 00:00:00 2001 From: Nguyen Anh Tu Date: Mon, 19 May 2025 09:31:03 +0700 Subject: [PATCH 114/147] feat: setup update tgz --- .../seedless-onboarding-controller.tgz | Bin 51318 -> 65658 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/packages/seedless-onboarding-controller/seedless-onboarding-controller.tgz b/packages/seedless-onboarding-controller/seedless-onboarding-controller.tgz index 2cc948fd3a6536ac68b99e8efa6361f2e719cef7..313ca97a96b906742ae99ccd2c30e0775f7b50ad 100644 GIT binary patch literal 65658 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 z zTNC!qO$Zy!oL2QF9i>8#O_CLIpwZ+PWu?{A-|F_)AVbkjBjuZD<!w%F2UVQ`%eh>{(u3#iBf=zr{`z%}GXDGd%9Afij{p3JSSxbL zmOF@iY-TIsh7P(rQu2LF*PSjZ<64J8NG{rL_Q?^Rz~g_ha%`;B2ZOb=gtIS|)??r0 zio2}&u}SC~J%L&e^|1(;X94*Q&1?}N}3wNt%1BDbcb|NQCy5g>k*Q1lLFh z>qXV@JJx$YyDZ!eyC&#Qs{Eh?UPph??hmBBmwihbn?4A*iM%xJH`bUxDP9i|Th#Z7 zAa_Z9$qC=PyowmT-2Vl1b`g;~zM}7Cze)uA>D*F7)WNG-dj@w0bfFJD57hoEU7RAS zX?N`DI$5@1Rhew6aB`O`s;sMH4yy}f^7s8gzSO{J_o>xV21L>P!~#IM{B8?nGQ2rF zeBmN3h@;lv9HD~tIzL-9<;%vg3R8~gx^`h`Q^j6*jeu{rplAtJr;?pph6z7kFT~ZO z99`?)R%F{Mb*suShw{$(4_9QHQTn`khYu3m(ogml=kJIi7_dk$@3IcD z@B@hs?#Q$(wc^F&Opdb-sXwU}Fb($S4>tvPlN+Sctt|LB78%(}#MRZUFc+R~C50M{ z%XEkoT%m&*{+L!8N}X($BeKCTcsjefDNekR&s;b6U)d*tly?TxC4`G9ZKV(lu#r>p zebdaEH(kLojA1E5E=&)A9lo*bIIP!z=B4}C4u|E;u*^-H&k3x6^(@=ljjV=9?W*b; z?!2`tm+>;T$yL31c4{Sw^E*V?&dxW?X4X<{ssB>hznn3arGRmjKY zsTBAALwSM4$y#w1c47@+x8n^e%_l)T&uYv&edb3ZIn7zR+ z!^|zA#YOy}T{Ok0v#n;^ACU16Wmu2bQm?hG9_x!vjWtk*2yP)ETqRY}s{Y(CkS^kO zdu!=qDZA9Jwyn0c24I;~1CkojzmQFezQ+?9l8Jr&{?mxJOl{e4t>i{xVm%KN8c;3k zUmSF765z09xnf96s{<$sf{+DnBxA&H&*wg@@)~?!A58%8CiZ)afXh61Y+hWD{N3;k zO~@Ghxw4{!22wn$0)-Q7li4#B4pTZ%s3LJHoS59`5YxB#V&SK_ATquU@h>*-s1{|C(8Ob|wyej&JkLuDkf~7(Jn2 z%hv5(6WhAJp*4iBa8MX*SoYgB%)VeiKZQ>h{Ak~ho4a9t85o4d7m?|eaC^t(;I7r{ zv@aKH#*w@d1hUqoI!D(L(ZP<_Thz3c~%rufcQp?_1iBluMJjV{OfADsl?~`oH|~;C({gHSXqZl3;6JzJPg?oek8S$RYQS};kzW5O8n>}kyd4*?4WPQi(vy? zp>B{LZaTYFPn7*?&sg4^DL^LNQs*(Z zChqV=;i_N{evRfY+zj3|sj`pg+dIX?fi3{wTQxxZKn#oF-wS!P9UBZ61qS`*q1b48 z^MeW@#fDj^s3X}lr`sG6#CTUrI28ggTY}nM8Q`*>>@wa=)Q`^>Q*LO@E$bT zdI&Dz+D3Fvjtbqb;l;{C&qIdIIVB*? zufZ#3hl29#S#Ff}o+G>X`iIqdnbCOvEka5Sm*hUF$7L)$gz$toKe2mBkXe226y@9p zB*pCU_Zna{p~0W%j~4Fp?hVs3fwXgPQF3MzzV0P~iA~fJAC7f|#lL<5Twh;Q(@Wc| zh9SLgkEdH>pYXS7p@^au;DD_G{v8uK z#N!wRs59RKs@FI6D4o|k3ldmKDGWmqrVBumq~6c48&$dqAG27=+apwXkI!X#h6234 zO9M=^8c?^;?mp)!US6RI-U&=#TY4fHDl5Jc_*7W#hB+oM;#;|sTM7)W_Bw8u-Kx{R zJtAO9LpDce1#xD{JD%;sI>Bf;5A-Z&4l0PVt_;KZN931-Sa2HgXd+j%G5dYF*c6it z3c_rjPRpVsjW%6cfm#?N=~_BV7=;^2P12K3I6%BLH1 z7?p^(GCB*>KIskIF#G4%@VfjjFkFbPImFjQi7k>o&7e!*z4EDKf2gtnE1WZOy6nOK zj4ul$Xt~;A6_@An#k*59%1)#_fVVu?`mmVY0#(0W<}HL(F2~D_hu@h6fUz;!BE ztU)rlW{1ZT+3tc?WVKrZ9QYb3B6sB@^aF&7Rc4Ba6Xe0FECZ8h(1gdJU^kMQS!0WH z-lR9Qz@;%+{_`$CMRENsYziOKPj-#TeP+!4xx&T3s%ueD)M_^fu(BF(-0K4aFIXRX)1`CN-7Ss|!o52fn+Q#wtNQKZ zXykJY+8uhe8lrBb3him-> zgpbj?e|VR-=-#Dcu}sYKC(C~hI4U1Zb0Xqlyxtgd-5BH5B2zu&+^KllZ%Mdl!Lg$19=54aH4G`4XyUoEhG2WJ zUV7a)MMD?2$i=_*9WPMfobNf4pj)=ISB2RLmqaOlz-twt5K}1YnKwBD8dsIty4CFI z+0wXA>S#>X5gghwldo$S%QhiIA}K>y+O$tR6K-1Bjc$A_VIkS|QlCaUn@xMj44d>pJZ zQNuX6qf_`nl_e+#R()FWI|mv4R0kOszczPx^zFDHw%l15hLec!iH(m|Rorf9E~>iW zF}@Laa_+xsaf97czux!XFcg>2h1(8~SY&L!g@b}~vKvl0{ zjHHmdG|Sdew)re%4OKYsSEO_WE3dnKRE4yrw@nCEe3kGdG*A9a-^M^^2lavdl|?nA zb*DU@HGEb~HOXlk%|us)+E)+!F63ae_Dm&Piux+cU&9xoG@@*8 zKjj*CR?i>&bW}-#V~sBkCf!A48H7dW=0X^I0i3>G=9vuWU&dic4v;A!nR_7|H{S%_ z>S1JLT5WSl!t|_`B^cp1J7+pGm@fYOTL|Pd9WZKla7wDW8vT{w)t3HO4F`PUDukMj zDI;Z2{0ber_@sYCz_#I21p({^xYP9gH*O|0;I`pGQnyBRGWqm66g?W~I^V79#p7>Y z5!!6bk1CAgN?dFl88NC)6hij7kwl3nT~;|Gytu9DNe;rVp46D2r`OtjI?iBh%cP8393q+gfe5ay6<9SBzRZ_PZ z8ZBo`%;#aLibUFkU09WNF@J38%p4-NwGhN92JTLnh@w6}oBs_xJ@p+eX^R5I!sX^U z4Ic>~D(%Fr9`saAW`mtY@Dht4uqXH0i#@DC3gPj%o+}R9+dwd6eaE`U$LIups(A#| z=hmX1*0@m56z?8vPII@w2!V+H%o;FYxAGWWP|ZR{afFm~D)RcF(4Bj3K<1jA?gI3} zIq{hVXLU|#E*xfrB~cnK{ecrRLw!2 zCb+b%ic(pulCf&!Q&4U$Y;0miVk!Oz>j+|>eBQ>8~2 z1+-SSh<-~}APeIsx{~>fw%GB2UpakAH8FG(T}`)S+$ zi`ep53Q)%4UwW2}D7m5IK7w2T(@A&Ic$c^^dG97YcXUxJEIl6?U!5HIHJ$lL4@ewc zre@r-Chihh*aqh9CZTa|#ws$RSSrS{Vg_|1gFbE=P9RWO^>=T3NDXLf{ywNaQ7#o8 zb2Y^wuDPR^ec0aur*lbRvnG%FoS(1CQhy1U0mnVqulj8Hm=clt%d7L-;pc@2OyfI% zrpMA1{Qgy29M+?W5oVhuD7*vTa+p53i%z+tOuOIfvrsS3wQE62o_%vU_}0sieM37~ zi3RPqU~=ld^iZH=-bdIuxy)olDDu0`tLZM;Gd+ichp`dt!+sEkcsShj zi@^R%hS)T`XP)_ZfWv3&H1NB$RXV5gI-wTNKZy)#G zF#IbdoQ81AeohOV;7wGPT(iI?{WI6ULWhSIYGg>!L{$d+Fp~bDz^t-Gp{P<@P*kbE zkcU*kq=@U+W!q*o@>^ zljyebIc}IlaskD4VL`>cjHbvs>*MmaS*FwdaEp0a0WKIIXJ5Nd-SpPDTx)YU(C2ah z)vvN&S{0HyUYd5SHsv zi5F*u7Hrn%*PM`cTvjK;Mm?id3HR&)qoVlg-}nb)}Y+$XA<>@q1QU> z2{@YR@mT!Ybe%r^3PBy9xJ@DJOxnp$D zo%i2L%_OVw_KT}ey9dlz*`a6-pd-=n$d8pr-PRk{WW!`4@GdEq;KDeksGX&5df|g0 z^t+6-WN2BrIc2p^`T5DtgrecFT?-PI0BgcM>IjgTlsLs*<9v$`|fW{YtQ<@qmW@e2L#?JIg$$2m~^|hxm*n zI>EsT7GD`=f((5{P@cM@OFo%_1I-K;$MyjgJ_`rpK7t>wwL2vJ_9N@Rqk$`qG5-exFxV98Fx%3uC2%6y7it?s^sa>`%25pV+V6KzZ*2+vVWjy(iHR}+5 zxs{<6Q*H^}4Dzy44(U?`Qn+bVn&R8# z0jlm<*@JFvf*F+R{D-_HeAuSf9omCCmiQYbD;twWO`by_|I+)}+&7N?fHy35F^4dT z9-_}Ml&uT9dym|lk;~I1VKtKb+P?x7h{DM6n25c8K28SH-2Xc}yL}e=lxK?gtH}$| zxmbkOS|bH%$+H=$jc1OtAaB6S5^0&3}FDy%UrUM`&VU(SRoa)pcTZ2_L)pE3&m1P z1Q&7+duhX8xw5X}9*=PNm?O}JFL&oc;sG1QI?`JFmKzFYm)j1k?=uS0spBp0 zQF*uFJrt=53Jj}7T=R`F$o5mbo{nnTBTabc!ip(0NGMe5^Vi1+Z9Bop00>Gy203}X zd=tt*#Y8jUxDUXYF;iG1Hx-#fL`L0%YTPrZR`6{m?zu;s-v1eCM47jsz3`e;0nq=Rnq|ww$dY`^N2sqa zQA)R%OxFAj1QY{M9tATEiLd&yp2|4so^9xXH0oYzX^e1fjS9d%w{%=PJz)}7UW6if zvxQ?T;WflgYa#`~2Q+v%gOowLJK?{^vbs5F;Z2%~`;(+cJ=2Vby|i-9$$I;vb~V2O zfT{-o-?>57ruW(?bhRp)deUe2sH({t6`kAo=jtwN6gnSW~OJI}o#O^$* zVFaNm8a`F(kBL+Up$avI>pycQ+mt@l%!$b9VD)WlWOTD;8d<+Sl~~5o4_PL?vn!|I z=d&=yPV-FUD#altC3hPQ*n@khq!-)CGF2Ft9iewRE2@-Rbr_7fJBR{8o^b_eM4d66 zL|f`faSsRCjB&vJL!p~DI6E(JOQhPn3etnPZV%Kkz=Khq4jxKZeiadAFL9ZQZIZvW zH%sX1fRY*fi2k0MKVGrjK^EsRv4G_zv%023F7}Nv8Y4=vznIjXFO0&g=dHCYCf;{K7i97G@!Dwx&bDX4#=7WMgpcj^vNw| z_NPLE^2r05?SQ&}h0@3C@NxFAV)<@M08hEML~!sl69Di*3P1&$4qmz-mv7rug09o5 z2mknT@5s2i_k`pR`Tl^Y{wTXF3Bg3VC!X19{WN!fz@Ml=O>+Vylt9F1LDmYi@NNh4 znPy+HFyx4=5-d4};DPu1&P1(h&Kq@49Df2O*4cM2O;_VY2Kr0dd^XjhcfsfFp?vV0D2rq;=D|noO z+G+26qccKfB=6aDNAmI`-Y`2rP6UjEPS3vfKYs+=6t%)x0E5hJ+D6WrBqTxGa1F)A z#r@oSST3W5Sz`wDC;p@rX7FAaNiKth*cwBlnFB@%d9054fTIfzq&QoAuqEG2n$>uf z&^&n#*`gKP*-x&tI`tzp+?-)98Z$coVM#UF__7;JeFTiuIbG(2#5wLpQB88S>{bta zZNk^_s@xB@$){&e>T!ddBKLr7>7x}$zpFES)x_@KmqNEwt}YISPNvbc;26&_NYSVG zEYo1L;9_Y|zI}dauo2DSSFM>dAJ$p|QF@o$gS-*{1B>^;WIeOQ6&-NpUM+m)jhs3n z+m0U#6_o$b;%3*8ttBFayUzcp_(i=LiEC=DAKGflY1p1@XbXwUvHKSI)SP#5>}T`mm{+>1 zDXD^<-i})?hwj|x<}F(p? zCPylsXo_xJHe-sLxO1EnwVA5)qiebo^E$8RY4qp~K5^R1={tRJ^1n5oYlA!t!}Woh6asBop#x_A%CV69}70z^8%C@cFvkRk-H0@eB3k1 zQKdENLu{GiMNw`Xx!}DMBv!i+;$I>{9#tzLjSwjNkmn9QDQFc&yXeLUH|XU4XP|4 zfRHf?6akYQ%>yA=Fq+XtfM!I|8nQ(-n>i0pFN7WkL^Ce}`RNiyhJ1=Gw5 zhh;?Z9dD@TM!L`41*|V-B}O2s!QsU3-CWH7;B@WyA2{7QGz@AdRC8YKQ*OFUT0aGp z1_N$*KQs(;Ubn$*F8r@BSexkC9ypA*1;mSaVvz{ALBnxUelGqfw}8NYm{_zp-tjxl zUtThqW7;DJt)%P(bBEagn*lSFFqu=hw<~=VuP3fd>@iNwY^v}2RtigoJ0Kca269xd z+oT~6f&F2i?(o3`F%taUL8pV}r4 zMJ)S!j0*;agzxK?h&R!Uu%Xb(0v_od=3aI>Uy4=-E z(|ZyDXQ;7QXR2gUE*x%r=88mznsvE>4hdo*$0WM;206|GXdxS$f&Y(fPZLgxvzU~| z^DqJ_xU0ufG>fh3gu*BIvFomFsA{gr)w8N*>1DXi2P!4hqV|n`*gG?|ZTarfGx$pj zfG|iCok<~T@~lV74u&D`Tls-5Xwy#7c-xbjOf!&Pg`V=CewP61Z^Arw4w3f?&AI9AvIv z|Fy3$-xO*WOGJ(GJXzOywk1t7!tClCuy!dZeqWQQt7N!rKp$tei4EJP&s&wlho+dbL=b86{16Dj;9vP*V%w6W)CQIF6gWGz+y9HpCooc3 zA7QmV9dn*}`ziBCN!x}ZnuH=RkZtWdrUXH&xk{?ov(d8X4Olq^_kLZWbRzw00nRGU zAn0y89Gqlbc)dy;=g6Qb4aP;ay4VD3zGdAtibV7AqxqnKY@AvV+VO-ovC zMst&Uo6*F}%j)e>o>&~iag|J>u&9tblPJ01>Bu~}lSx;sBeHG_yO%DukA}`X0g`n~ zdKo}lQ1d>|iCD`Z-5@nEQSY%^CK0Dit76qftsi%0l=BlI(Lk0Z!Nr#n1G9|ISYg}t+8wrHmlQB=WtL4la7-8aqW{FtVUQguz}Ak|wjU-_Sm(}%>EGbQVC*;> zl)u~pQQ9W-U1O*_F~8ub%l$Um^6C6U7TUmo+L({w z__IAn|G)>4`2haPv43bk%c?a*vqV++3Q}6y9>~uUpjVpgky(6q)Tg0rPxwdnI_mz3 zx1{J?Nq2*0uuREutGXntoSiTh>Kp241AMSTkq!ic6ig?V=``1xG$F{oJdAZGzhZz* znlg#{#j?PI`Zd#0wzajj+R6b#H_#Jua>!FT^C-Z+Au0AlKee&gH|_WOUHz%3QT8?; zLwr-D3!VhLp)Q@V=IvEb_p@SX+UO`|G9S$$J3N~eBqU1yNs^&}Dx%3T9}a$Cmesj8 z?vvi1Y@T4!bE{t{p2!1~e%Q^B!JHmL^$ZmGqG~%4?X}|B3Qa!xVB%r=5nD=G4!Yid z6is@|*(bAzA|QW?+4m)2(->e0Ak}op1%?CeatFZxDvhDf5RsuzTRl;eFTiC+ILax1 z9P&<0le;^KyIttE2iu>kC3ROsghe{EI;;y}J zA{Jm>b-_dbo&l}8`~ja;dT8MktHq&gk>-n*9SGlQ@15rON2IN=>#dje5XSL_067P` z!Wqm|#=@0p7Cv7cHWBF^aKrHRW(~w-z+nL1`5`habpe0Ym$%&e9&jL%`w05tZQ#BV z^hf@1M1(saY~McDO}F^)l^wiE@*oYs8fj*UgFPVUiDIwbFtz|4zb|}L@=9!1>p(1pxP&SwZw$q;ASQ$?M0PFO zN*8!U#336Rb7uFiWUp(E0^Glz9Hpsvu6mDyy@j8){cD3!162Ec+|ql*5bOWx>>YzM z3)*+z*tTsunK+r)wr$&)i6)rXwr$%^Cbn(sd3N6aMxC?w{&4Di>AI^|tzKQVx)%Dr zuiuq$;oUD;bgU`Jo4WbXeY9t?;g!cVUQ2n~Y^DdBK}-<7zI#svp-ARz>i>Se0DGb+ zve|S|cAZL+U=v`vW1)sB=i7KYA@QcH*TajR+GXN{7g|B$jEBp@-joKhz-J73XgUY& z`iJ;|D4pEd>CwEd@1FrpkEQC#!UOs{z2Ph!13Pzd42i`-5wnO6{&>|LDGTHWku z3lz`Z$wbLVgx`zi?65GgreprBoOS9e+Ln5sFe7VzpsalajT|TLUS}K7NcllYF$;PhS#FY37YQGTFK#y({`VR@H}m3T_VnL+X;JEA=gP z86R=W_y@UlCt~%hG;duw;&D24b1nuhfK|2ms#WM`^nym50?=RlI%VWc*sDs5U~O`lfo(%3Eg4Z}^^u*Op+R2=bXl~o<$NC5tT5UXS8F*~~ag1cqXq@zgmkLjwilm2a^U+bUd7oVO5k zEe*4Y3tsOp2XGckftXp&Z_@ReyE{s+p+sZB3c^3ZJoSTS`BWY8VX5*l;jeWXeYAql zeF_qm(Ogx%@EBuVRKjh&2qd|g>v z#eJw{q#&HUd=6O_q4|dnO5pe8 z-=nAXACI_KA|kh_zq2e!zoHRr5*PN6n!(6N%7gyem(dXgKLFO}%Lj7Owz`6v5TWww~yq$t!t=bXaM zOWy4}yM4Rv|19pIPhSz`N3(oC!P;?8ADh3)Oa1BtN`(NL&exOfy>xdZC{9;YexhS; zUl#G(#%UiIy_TgUV_j(@12A>y=fusUb~@MLpD*opSzcDiG$)bQlwVflK6<_hnNDl7 zHW;6!u^P#Cj)Je;X$ngVsf1YcGkBR(3D;US$<=H+_bQf8(qFMVed8l?OWR;R!L7ta$^x6@t)JM6QRkAbvP9Ea7Q#E zKMqrs^;i84xj7zrz~kuC2&eWHTGH9kV!_E92+b(_D~BL|L07VblVcA<;gD|D(k=|f zmmsgZf1jyMWPDg>X?9t!7cG|bg8*&;$6I|Z+40MYjn#BPzPgG!vXiW=ok~>yb1!4* zYmJ`nUel{7)ZX9&lVX^Xdio}SGxZrSNcrnXxns*m86Gn|bhcMl)_9LMQq!_OuSaJc zX3$eWfm9yv5%i?szw{>{5l~TJ3@YN|E%P^gqBaXZn4~OnY9Bbx$r8kATkRt^C#8Lw z`agDDU)$3i1wRlyPBe`>)wFlf5%k6GO#Y`&w$6=AE-ndkNW%dv3#SB>&NeKJnbRc zB$j#LpC!z0D(p$vpK1tYD8)Q{F>S;w@(ZIv>}xw+n2zXAYD3?;M4g=C!X-oVD|a^| zHMCmLo_Z4au7-N)FXYtaFy9s0ZD%W3&jFb#{;qFf%A#;Uu8FiMM@`<=3XDPf?ykOY zhY#j3Iws0TN>QnplydcvBD_`fO_2oJCn!I89tjoN%bK{-R0DgF4ovz9<)Qg96x0}Z z!)sb{^#jB4k0;VnHI)U?Xk`xJ1?2Jhdo>8IUzQx|1MDUP-9H@ZZi)kVnPecp6Ro@o zBDR&}$<$e5?nV2OcMt|X9#+nTC?sHTGN`z?fu>IN&JB3RDVgJAS~hi;kmh}7 z+J^(u;)j`o*t)s~V?5OKvdS;`vy3C#_>M=f!LauYiaChk*4va}F0C#aaebrHWOEW+ zeu^Gi@*h+bm!YBGDcd|0_t8Mox_YPHS<+2Sh zSD?zLE@CTTVT2M&RM`!E_L1)by7o~yR}Un>Ij8R24&~#qHc6|Lcmz&dDl}V{98aIXvF{pz~sZ@z}>m^Vcg2vS33$3Fb4j&=IoXq|W7E_llrC`HoO z`25hB|Lp?HbEBaeI?}Z^4^>W^Gnim4oqbg103lmj5#67tKM|qNK4+Nws1|8~jRc=M zc_CTnu$-}Fh?o>)j)oZ(Ps`s1qQpkFxA19yNaik?T;-O2{_&|SI;W>uGMSF* zS+5{yX;#eH9nl;%7GVlIN?z(SeO_i7#IHv641eX}<=NKCSPJ^4xcnB`rr3N6c)uU! z)#<;uE1fpDBVHCjTF%k2A*H{nKQtE4%WW6~ISnyHC`Vy!>7-@D!%4ydXU=NFLtlHiXyl#@bs{$<1TS7NO( z2}$rr#`3AnzY0j@epbJdEqrR)9#hPQ%Gcpm3VPeJ^*=S&t$M8L(&GG*HiTA7&Rhvl zilY-wP6s0!NMwl1BNpI^R%fg%)^1;>_-PKCU2Z=|C`Hi3T?95LRP_Z$7D^w?J?r_^ z7bE-7xHsU;N;hjvGmC80`rIYTc#CT-cnd=EQ%EaljrQ9!{o*_GZ_C1QIE%q5BLJ`r zDCJXQq!w7FHgjwdC6q6bsWv=vzkaKMW>b`jQ^+V5&VUuRiG;@cV6=(Smg`v+B&b0= zP=@YlMM?=b^5dn37Htt^wJ21uf#}FSsxsC=2v`dy{9?{BlXRQbRw?g&xU_vYt(vC4K1H9#xw#o*1{jLQ&|rr7`t?efbcRIAKh|*uecC!o z5aM84Gb{E|mformyc01rGLJfndUWLFlIC>2Zbhu<)Q8os?_WJBe-ldZhnU7KfEYsq z;_gGV560_1ocj5HQ6XEhrcf`mcKbGhiwQBxQ*`N|NG!1rKZzg9EuTa&%qa2q^4IeH zoN~<`bHklg`$;4iFjROswlxjQTa=z*OjwZ!;HnHDz@*06@A~Ekv5yhtS&q{yXndqG z2aVz*)e~a9M9;nr9SuV5;xsnGxp%};Zji3FdOs7X^$c@;(qk8DhzgS7_>(`fvMg+NpHk*sAzg?+>*Bzx_^X!c-7RCjKIJ3$da-2gDe;G7Bq(Pu zepX;;sl4Y-uKv9(XBR!#)*$%jr&TF^_9sGP*3vSD(Nlu%fbcUbwWE!D02kg%Rr-1d zT5pcSWMpBr)^nZ;zKIIq`El8GwEV-bWt~hE|BSxsJ`!EAzdnHacrVKFy} z1lo^<)r-jW(SK z4lf_l91RDoSTMH@ew9abRfUc4@t`bCi6NM5`E7nZ*Z)|TN96#?B@Mztl8fznN;S)W zPGq239#+hsbgsqqx;}4%{cs|X-Ve=^=!OeLR`66A!FYE^)jWVde;OseuYti8Kr*uGembZaO~Ot6U9#(7B8*dry%yMGmkZbQBCFs zm1x_c=%zyw39*D^uuk1?>+&Rt7UXr(+>%V>e`Mju-$J15w_S1H1coMp42uyt)v*`K zp~o_^E_3?Yq^|`Qx(G854-@%C@h;Mj5*~4xTdUR%tQi;*k9EHTnSYcnHz|Non!`PL zpOw5WF0^hPG~{&oxUV0~!&r8$NPiAN`mE`pS>MW^I#_7KW39@#6EvhniC2lRo&lgb*os>4psMM3jQ<{`;Bg>1af6i62nY*YS6lBXo?#sn&YtJZ= zT}rI%Q`*F6D9S0tr9}{jn%}JRT$HF!( zJ)D0c7*lDVesJa=8PMNAd}igSdE++o(&Xq<4g z>9%fnR+t`O5Y<2%LdNb1y{xRPaEq*aw-HSxVibViWJ!1%RXaW?D5Cw#dD^hK-9u6$ zy|^&ccrKujKX8FGfzgPxs^?L-e{KB%^jO@n<`Z=PkURZ`*rirJpY|pDE|u;FJnXr+ zyFVaNTFr{n%rWrEsF122wSgbc$B^27(&Fm&)`l?aWc{^@--pK+S-LT$FaI8o zvXOOVcjs+385V2|$X6I)^$e2nNCrkp2CiKMuko9f z+{^&F;#5jIbHPwN%r_3;v#F3s@Ug;1gnF>^-d8G+i)f7YkY*pC^5%-R33eX<0!b?` zgOa;9GNQqkVdtg@zAC+=#g2hwlvGmDmmLaStj*B!hnY--rp0H~eJNb$_3THkB9%+2 zC{xDB5$UY{L8{JKR9jvm9&Z7@8AN(Y+=uq}n$T0$?LSIof8sjZDGIJ61GCM2m3@K< zB9bZR(mgmH+*2T3S&-t~zHxViD9NQ1mrZ7C7jU-C_R7^zNl?w#2cf&^Kr;G34tm;_ zLip1q|+%*5n3B{|C|4oTdZn!RqdW z&KNKhxb)texsl@Ywex;Z+Z$kZ2JA5azTZ^?Zd5-%>Rel^MSCyeSe4owkVgJ2&u7p(sF0@wco{h-(2(%|Ce#x+$A%w=6B zX6L%TVQE`V&N}D;)!2mQc9@b+%f4NP3EnvuhPT6@& zA z+4)N{9Rd`9r?jS$^T=+)^dM(@HK|OHEI^(7Dj6@ntaH#hyoC&*Z9J zzjUsbPy55$33Bw8>h#G*HlR@d8Mxuw^4wxix${Nu)b+vXteHS*=vu|AAEBa0%q_q8 z*s!&Y#MsYf`bSNA;_rq};70&Eh*S^+bAtH~>ELiNs-XT|E}SU@i&FzQOQ86{F}#f9 zg3b+8%r3ml@5f2IxmCV=H|Al>-W{u4rFDf~w|6K%Bn29QQ)=|ityFg3tq+kY<-rTp z_vQG&?vjV?of={ZcNsa!=@Q7g3#*fSoI)Z`c; zkz|V05ZgCBB&0Px5k0D*W#uuc2vl&UyfCOXuMF;}1*_MHhSMTO%rvt4BYjjblQPQC zVFE2W;;=3?UOg}_dgWoPo*Ut>3k8vGIwC}4v(SRWw9gMA;J?&~ExN-z;PF9Psxwxz z6`HLJ2~@l}YMhUX4AL?~FvBlB2Dihx2C!i=o(hEc6^;q$s0!=|h~{9GAsca{l%(4` zi~EJn0t+nE)$#r@_=Cti?1>$ovMjr5G=*Ru`9V4VJ~ft~+GjYmwX!`E&-(htsbH-b z7V>M!%ktR>>Q9{Hkqa-Hp=sqlgG=!YXYyE5F%_9~SQuxBr=oc_ZMf~o&=v`27&Y*X zIFd8k5@M?ShT7!_&~eFa7)!IT+Fnm!pfY+ZfHyTOKa5&r_R8Z$Y$@kX@;q!GclZFEgK8xS6C+P_k+Uj^w(@d)`ljd;k z#+bd26#w-lbPALwiOe8CTfUd8j(6}&NycxxD1OwiJiq`cEq=$);Ay5m!wcwZyTlp2 zYDgPX~$*mxN~ejV=bnWZi~hM46wXD zA1jo+1=Qet!hGqS37{?oZrOWYemN4BivpuAj6(5@;3D-U&MHS_Wei=8N|eZ?pKgo| zX-VArYKyPcQeb>=v#;sP5-O-)e7gjb;C=L=A9M6&6wTztS)+~u@*bh{Qv?bhqixj) z&-LK!X=;m4wGCC@Gb*#%Q!tlGBVvDM|J9IH%_w-siwkwxsT}6GI%$(UYYU&4e1^{l zWbPB+Q{T19v!UnoT~aPVZSTYhBsm$&~#tH>lavYpR0Bp zz+}@X_`ppE_Cq^bf}HD@qjT;;MP9Zqw)u#h`H?&p5YM_K&-4gq71*u|vVLX~6#*AVlYv)jFM+nw z8UV|q!2esbPT4mB6g*e+0Q$Wb4}igTfiOED3YG`s+eLqZeh%W#6PHBJ*xZ?HlF)SNMiFSwvT_aVG(t1E0oqC-qXFeFGdJw2xZC4Nel<@e&M)yq{q5Hej9PUfYS`hS z{6uUMLyi18I}QZ@%IKJ1;=;1OFOVl?+evUj^A0iSEbin9zu(9W=nxU4q>dhSJPPJ4 zWr*BlCC4^q8J^uCa~)z2?~iEag3&+^=3pI!m0)veEN^4rGr@M^@5YcHBS#am$iVI| zQsrSAx)5i1kt8U?3sU`ldu`zVY41zB`>EdaL55HgaU@&-;5ZW_|6SNb9^t^xBfs#A z4SWFw3H#u&`O!mXr;YVvA=Bq>cPp+Q6`zn&SPIWsHNF2l0)%mKeo-HcTl(#T;jtzi z3)UM_>v*R5BQJtK7@`U65DuvuL%g0QTK)_^Y^D7-Hk6-d|NfLCU~edfh2WWgUvIeh zB9_VoSCYTPg@s_|CtF51TZ+TLv?P(AF)AP-Eg z!jt)5S${!OYYAQ`9P#a1(g3B^TZnjS7rk9W0^DDyTfxt5f_F|WVRBG&j5u{EWmLA6 z6jDm)06rw6MRFQQH~R8YmA{Z1+sBV29;S{kF;!{dcRJ2nmS*pZ zTdEEtpE_GNJI_d?booMPw&z~0v+VT7)HcGS5>Jq+A5eeqo_k?tz&eB;u(rgNtc<;uS!f7K-X%ef#5mQ$z;oi+bP48-(I;7(Mf3VV_zXjP5iT5N}B%z*DiaCV`Y7 zTu2bc@87)cNr}O*hV0!!Lti%sV5&Qp4mH0?m!1_Z7Y4L0FsY9LpLzMRH$Q3xJ^-GK z<5s}Ln%_DjLIqy#hurIF$fsunh`cp~94)xWEQcF;QD-4N{Gf%w%y^D{G8EppmtC&A zlZ;)tknGu{UALDx3nB~#`zFqH5a&G##CK3gI3syapn(@_U-7&>gFA4OLEAk{z_a1I!inJ1v03nqV$Q$xyC5y<`_~%bV_vd<`zp8iXVx`qt5-)JS zm*BkXROP*9#gX6jR9;a*{Us!)%=KvCUj@568a?|k;)a6p61axW&4q%_y}TW~YPuy- z@oZKRa`+c?w$|OZn+g=TfV(dR%4|~4SHy_Qi#Eo-eCtoboh}*`{yInk&*0J?{`a*b zQX5|9+Ja#>XNm(j@(()hhHdCzadeE8KAuL+ZZDv_I>j z#na4R!qEABSR1Gpm8&hHv)}fVZPyUSni^7Jb;=Wcr6}~ZW+*BG zom^+4kD0CG<<85C)T|{9{k9?W0bh1zq>?a0aC8!GRwsmJArzDQ#rT$43zjH|+yif~ zR=oZex?{HgsQmG!3NH3EL ztC%CFx>N&P4spS`{V<_98TIc&?90E(Kgz#=uOy858VAi{TjHU+4eM;YoCcowo@T)q zpAl1E^g?aHgjvw!P|Gw#D-e4w<&3m-DNE|*2IOCDk6}_qV@q{$HZhv*2f*az#J-!T zQ;oeEKMZr+mL4wq^gmol71Ot3E~YPIeNJ(`807>zy_6Io^y`A$pcNweYTXXsrvS{fabn8T!X68#8M@=@$?z*T~3w!@cbs<+B(pN6P%h#Kl zzxpCu);}UD*W~yt&2_jAp4qDG1gT9r%^h@g)zwtC!d>(k%5oPgDJ$CXWO%e)oxgO6 zmQ@VzK z3PYG%v0E~&Y9(_^_N_oFiM)|wHG6cO3lH7q-3g{v_mzEU%PnoMt*NKg3`oHa?K~gt z@~%?1r~%nB{*iDyo~QUCQGjEpt12ci-#;w|Sm!y{atB;an7HgchYqYZ1`Rtl6h*%F z8-Lmz7z5+DBKtKEgam+2TIB#MOwZnKF4W-(b`I$uf=#*vUed~Vu#}$WEHrKz2*9T_ zaxna^W8U*XL;7O9K8f-CuCu)$q*h>1QUOPUNVT~d72tg(kFqg2bEVTiqIl{oeKglw zM511SN6j&L^+5fN4hm^`00Cxn=(FH{s_wY&mv)C_w~&|)sAYM*NO%G2%K}#tF28oR zfmi>lS@8w7)>H0;tBnB#?!S5)E#G?Gi|#)Hw{~Nn0gg97F8_#eF`y>iXT8Md={0>ii`uJV8PyPEkT=^gJ_35V0ia-Yy& zoZtR5*6dZ;@?7A}bcFqX2>}Mui$HHcM7OT@>&wK;4m32h_Q%b4qNEb2E4gscYuHKp zy>V(hwwdpFIFSe~RKfQV?EvzMe;|MW*94&`7n~cA2b#Rm7@ET4NYO8B=P>;pm22XYk@ zjs0KkF4!jAUOxo@t9|j_#W-q!!&ZpFWsV}wzdq!_zTVrB2NXevVlF7KbRpP>6VhfjJNI?V*u1|a%j=oV z3AW2r{A%0AdP3r)qotz>H^-D+#-GKEJQjNtR60cyC)AKbTH&mI6vbAQVqBtsnW75K zut7jlUVixBJV6h&?q?DcaxG!kX7_3!j&W8fKl4x8@WQ-x_5n{w1XjUoVw zm1{GmV>_+iw)c?g)(yb{_hKxY@8=_jSSe=xp-UL;FZ_6n%4!sr0THUOc}hG zZP*IDG=G9*G;`@(=`JmtL{-6bQ5-n-rZqmSwx@vAEio1USqnctYG-nezMmq|&xYf? zW#)ikSxqtEKlF^>@`iJX_$+chsC+Tqs;^Beg>J~XlBz7hYd4%80LUFr0vS(&w=DrT zlFjY28>5}a&>h>$Y++IksyKCKyxE?h*nxG?fPf1Qk2;oh-iX@YlSCtA-B-BH2ckJK ztygRXzf<=iPkRbjn1ymgN*LmVulP;Cio)LNx!p{;-kD7D+X~3B9Dn7XDEO2)#u~sG zf9sIJ(JJp%YLy;P)KkFEs2)a5^d@9->Tohkq&P3~&-6L~X^1uH#F`qrPL-?@R`Fbn zEZgyH0G`M6gE~A1vcbh!=xWO87LlfB>x9WzxG|l2f?;8x<`tkj0dRA;FLXoXR`qqG zlc2Y9lw?oZP{My*)8#hSnMPtatX3UVw3KJr9HA{Q(*lF58y&VpX5?O$%JweR^=J%W zm+Z1ps$p1T>)Bq(c;leWyKO6uu6~04;wg^+)Vk2ood)^_3Y`F5U*_I{TC#L|z>Chn znjTQIE+JUKz&>rina$iFP5}UGxGZSe0UW*UiLc+A^KZ=Ur=qimAYNl;e`2t%uYdV& zk%6xY2cF>zJ9n{j)=h*m8?Tb1)|Wq$uJ?#P(s?zJiZvsmW^=ux?+}MKa(?k2P`%8A zZgXwZDD1l4%R%1qo$d|q`>O}wz5s2ufK0={tILhA-oK9#pF98V121;Jf4%pBCB>gR zO&P#OfG{yR<~&gH82G%d0q9Ion*c7k1FheBWB&kkn?FV;zIt0z8-Z)Ko|gbaNgV-T zE5=7FT+botYJz&_fY(ieH?UR{*cs@Rwg}V#5?@GDo&@T@5Yzwof_^^(9`KbO|KX$I zb*`pcsc->mRBRR}NC2rp`S-NjLA@}6o^7ekz_qQN#=G8?1hpgzjvlY!J*Ud5M*IJQjLOto&2Mw3qZZr9n5q- zbQtTO)S6icsESVMJtrcgAs1uxhQ~24ft>Gwwynr~Yact?HO)XRMYj9EGv2ackjQ;Z ztROYK`(|i;8N(hzjuPs}${pVru9v*W$R32?(2o_S))7A8T=P^UueJQm+`o@%;`9CM z7+O;2MqkF~LFNAj5n1i(pjhWByXf&Z3vf?3-yIm9)yQ*)$cM+S1Hok!8#nYo?@Lj) z%-3KS0fx<>T1$YPt?6MPPt!~9Q_CRi}}6vb<%)1?o1IMCV>WFbd$bDosw-Kk4bVSniHO873JbfB*hc*p#Y zSc~lj*gOK{$^nKi11uTO3i*K5xZ|SbPC%jiw_eAi@6Dd0?;8t_;tL2Y8*c)x5C9ty zM~E~4Kpt!D{nTk?ii!iMIs_QM1tRB>FekKeGc?y%%=dap zgdVK4FN_3UTv}cMJzhMjzGrA%{7fw2L9eZrvf+cA_`L`h0oY01AKC!NQq!C7*-8MI z-3gS#zYdBg+j`kbWcWWn!<@;6B>vQw2S@RGk}nh3EI09{k;(r1=%2_aX97i(lYo|z z?Ek!s-il1)9LRW#-U`deKTGYurQ`fFZ60`{m;~nSR^t`A0Px3*#?h(|z}I6HVtXtn z@k&HGI^wsuQTR#=#lB`SH_?y4Tl^Lrk35}g%w~WxjJX~Ex zV^8VcYuqhHM9z2N@ppsCIZ_a(Ac+ZXN|;;=0Isl?VC@reqz#mLy_w6)mLHgbtSZGxEF$=`{ z9NKp#Mx8qy^CE$x`NWYpJWhB6xk`x!M>7oT_wyUihwrpWz|%;Kl6ETeSXo&LHdYgg^1q`0I#gKWuyp06-s%#vHLT;t(Dkk`n9bvP2m zoER$Y*TbeR1|gLZ{OV0B3WJx`rYMDyuqb#_Z+u+`OQS#k6Viy5rbmlaY!E~y^*WS$ z#}BbHGNvap`33@pg;nU=a|FSH+$6~?g(j@sSs;QzG-!e75|zlK#45QW-#tu+0Umd0 zB1(!SRNPQGE1y}Kxt7igMD9sP-93irkRZ_Oxcq2BM`$qbUi?<&kq?1T9 z&s_bk6zp zT&cH-?Zk$>(TtD5Ra+1+8W0!0pTDG6je=uHk)RD=l zhC$n%!ncQ_jtoAoF$Dj1S#dc#LZU=BvT`@0rO(C6jrPUAxxJpHE?k=zu*a~7ZqcA; zOEb~8ONdiKVqgr5FcR1^p6hq#$8JhzHI1_#d{c9?T-%oW_F{A`0fe4j<8$6T*At6U zBeOn~FD7GT5k)Y+(S231hOgZ$YywisBjSXF$O6%r@wzg-Nx$KD?7Uv!D3VnHlK0WmW@wvr z%3yzAFEc`2R$omkAmJRlXF8 zH7iXQL*Yl;y^<~%ntIt}i;sVHHyPYJ#hQ_PJwmYf-bZB&!%t@Aex2xOtsaJncOCkG zB}t<31xBk`3?&GWkLN?thG)zfQ8p1GJ-)zw!4J%G*nARzY03%oxJ<9~$U$B%qX(}e z8~AyTIOLl7n(gN$?}F_Auw?4F;z;)(dZYW|L)zu&Q|^~SIjgc|btLDv$t26jf<_2? zg(3yjmILc;5|p(lC?|>!4(p37DIW1%`P3s-OhTAc?v_tFC|0~cj=@7jP^b>EuO#D~ zb*)Cy;7OC|`L7(j2}r_JR=PKpnl3vF-}HE*CWDTgn?|kf^!u#Y*amY|D8oyY z3_%*Rn^h+yJ;Y52QWT=}nS*w|^i8y92cC4vz93L@M%?>RiIjD~U?)+> z0|X{uLUeW_9Qs)7;}1>_FIduiP!sc-^M4Xy{`8v}q%feAF>_$*-lMDoP836Ea6wUo zl9ccc+EFa~i#I(4ktH6IY0(UgapfBKE`A6FnS(52~6%oM}Mxnf>H zbK8yH3b^tye(NS4c47I~rXM@*nL{j8=vDeDJAwn0t=nxM*A(rFge0ca)#;|400}!r z7skYe%W%wjIaG*~s&3M7*pw=pY?ckUrZUF4)taklfbGhzCl`;l4k9yqDCunA1w$*K z2{22^h&)@s{DS(L&G_o|^zgg~%Z{NeT(oy4-O?fE)_OPfi*~`CF zS>pgy(`u6}>*_;JhQ)E&OL=RSM~Ww{j{xbD7=DaZ9^gQXVcdgPXg4uw(&#kk8;H%T zur-yYkIx{SPpC8E(Irn{q04Y4G3t=xy30b2!5M|ZrC#>XXtboEw1syRJ9XEn?d z0&cLIr?I`*vr>6w%v|jK@DnN|!7QDGs;PlSb^P4BzAm-0+hkX&LP1$6qz>#CnPypP zkgM+H!qN9=PaJ6P00SxF_zjMyCe#eNUz^err73hKgH?ax3Y+m5L()lJ)YnFTPhc!; zC{ObNOfq1qlhO1;%9DqiQQwy3-Xr)+J0h4wvjL$`C{PQAd7&(bV_-fo{uEREzF0oN zOrp@qOA=`$OY@SaD|s$4LlX1fj)LgMxrhR0bPK>LR={k)hY>e6&~jxYP*0Z58>qVT zrTYY*_xSaKTWlF7xr^foP56r3aFnnrq|>fYL%wGolF zOIqZ;L83swUtmP!EnJVUO!l9_jnTk_ll!;_p7Dw>>8$HO!=5LjT!wnXjS2k)3qa69z{Hg+o}>9ga|X z7q-C7E4MBnJLge`j+`(LkioS_g}n^nZ4BTY5r(e=ZHHZ)GeNp02c39J1(OLu;>({g zMl+VH!8*$Y1ESXVpGxyG2Bp-dpo)wul%c;+YP+y(uMKz=D^EQq8d;*%+BeJZv4ICg zVkxSL(%kt~E~6SRxk=)~u4&B4NrdN63 zbLpXIggbB6Sz7pa7!?AI|8q2dM(9Z(sil8#7}jUk=#;w{SBm=4yoPpOvzt|GdBfj4 zKQdo-Os&^!u*6p&-62Ec>Ej(sVPniqr}9ZMOs?48NS)u{@Oo|f`6DFfsKY-h-y>-p zb#QXjdBgfs_zbzO1dw`js(SwT){0P5OY5KQpcjrT5t+k#M^M^knd3?TBaLbr(^Dj- zEfAQcUmbUjEWyX(X-l9wd?GFbf&%{;ihIVaUA@Tt!r<9d`Fi+=luTegPC?O6Occwf z5>rP1faVd$$Ky;3+n3mo?K}612i&j&dRqPGyLcJ!T}@E^55P>kw6zY@{t&VST0&S~ z0js`U$AFE`f&X>RV>#1bfCr<28}%Q7jOAhgRqoH) z7@);L@7k*)7a;ThPk3Yf$$b}iVUO`zxy-7z2E0Cb>djWzI1gNo-~9n*W6u?wK{Yv>9y}bTy+% zZ*{zk=)XT(B6b*W!R|3CmV$z5inT}gey$#PyHQ!&E8zdMlzCv0*qvEFm&qpNK|Ot8 z?TQzDjE)uG$`C2t2#fzCS{sLOFx=u$K8={#P<>UBM>47vWJwgm!)9)1lNm`-LoIl# z?e5maS*a@n1j8E;$4SiuViyT78jv7gtTS)kaVB9m@`?HoPNd2u*#Q^iYaiLE?Mmc} zuJ^CEMVHW-B%Te~Sm{x_a_jssDx=FOSy&9EbP{E>2D^kLKfRmu{#!p9&@c|m#tZX{~f0u=c*-|j(nqE3Z z!%LD~(ddR98>oR<1SAq$y5lew(EX&YIkhGj)wGco{>R7dg@G;guyl2O?s8xE%%?3g zg5N5ke48TP#9RMuWMRj~y1dY+vMS`JG_^3Ar63QVZ?$E5*0CKMv2TFuxpS#n*OP z?6=Z3+IvP%Y|!!~#v)@E=GO5DqEHxsh6VBgBWY@{WnrS0eXw*=(BS=62Uc6dIgUQ>RnGTS|9uE@LqH zEJH-2m`ol$2}#On_}BER;pBZz$(R+MSqL|7qJI{K7B3N?S_)6d|MPWh!7g@!hH=`w ze6<~1T^w4;AGoH#*20q;JCd#FZekLf@DVy4#RjDp1@{wa4?FXSo*Y21USaLSEzbn2 zXx$5!Cbu7&m|+r?dXOW25F-&nm(-w?gH0b|G-lYzWIHUS5`k zS|^2v_PL7ByPdZ9arhmrzv}0;`AKg_pYVQ!4Vtr_eG)9@CAp3OnZVq4gF)fvc6g@#>LSs?HukhgnArqym*ESj!MoEpB z5qU9EH2e<5$!a*~iHJ?|^N`LN7u({jngn+un*JI*CU8(HfPdgOok9G86uoxf`Rapj z%`XvSs7MQ8sxuOz{($hUtZDfXCx5I25rhH-3rP51NXUtyppPbOQ@^H%51RdXW3?D1 zA_tKsK+aW2EJ=TblHJ_P!cZ?Ia~t4KH&RT`;4I^oP$)D==)#0$5R@G_dDE&Fh#&}z zd%TJg zAn-5>ythn1+-Lm|v#wz6Ui2U3w;^q2ys4Q$j{yTKp-CE#Pf|?255YjHy6rB1H_uJV zN3)17e&02pw@bI1BmI|xkNXlSZ>F&cvH8!!kNZ#pp>igDVHKOlsj-KFl|W)xWP@&> ztqmW4(L7?{sjC5TvU_^h>D+TPqr>?T9~!WrJ0#Hc6m;vtxMm>vWNXDnF~&r4Tkxiz z+%g_W!Onk12n@9kjbKvHU$~_pp^m6iP+e;6KCl-)z1U_!Ib6FK2r)z)^?F5!dej%~ zPS-<%{3Tb7%Htc`vqRv4DLj8RkKLW_Gopyw@hTZzzI4JCaQOb+A;Sl~HBZjE_7otDnHL!Tqj~c~d!oDUg}tY?rn%i2xk_?)x)uuebYi5= zfa4yqL7)%QS9bUeMm^TFfZb}-?kTA&a@a)IWo6mFJE}2MJOoq=ER0=8=Yu0t{@0`t zgUZWAofJ%u(Nt&MuGC|06WRtau)ncN^x_R|{~mn<7_0-fZSkhEb9 zK^Z{YHWc?wNuA19onaf?ACV6LyJ6|?6hwC-bjp@J5`(C}7k(yu8JG3>@>a8vA@to! zEVS)^IQc!IKrEm&_04prm46iD$l%r8?2c-7m~QZXKr>@tb|;})Z^43(9H%AXF7h4c za{tm(yubR0y+P9REguemD2KN)t)AJ3PlKdjB2!FdD!Pk-Jmi-*oT(QPtU(p+Rh$cy zH1+UEuU1&*`sI{Xn!btQ#9_8YF9R6vu!L{9wm1Vhwn@S|WR0FPZU)ZXgG4Wb9@K@y z3;+BSoOoa-PgjzMvc;jcEqI1S9n(^(pR_G(%W8BT?Htlc>ei>;L0xmWU%IZPdHA?F ztRh__HQ1Xu)=Hr}w^b#<{`vcogj{9mZH#u}^((5x7vIq2OEAb`(E`bR*AZA@OHC{B>Ttv(~h<+q=4{ zH6!)-es&At<20VYT@!6nN%CR|abzpUkh$J8V)6tc9rAECKBjPI)6fw2~ocoDmt zMYBrJ1(uUN4Boh;eNir@pP+>r|6tHE#yGYbp_S7x+@Vf-ONkPfKGdV6%zc!deGW;V zpy>aQ?XWz`HMk(CsXv5+X@QDU2i@Kx7)97+RApO>3b8bB+-INEDKYq*iz*@P>@|#r zhCMp!$9{yA1ty&nA_6`Iy%}>Zif$ckhni~n7x@Dx2$TT${eDp=fn>n#=1klWlsTbl zdD_^U3S%AX3uqsPJs`!;U;3r~>T7~u;paMxdIr9)DYE>LZh{#big^jHMz;BP=&y8~4%x?GS9``8hsfhKw+H9!zIma40Ef;Oyq%qW&y zVyKx@^m!GN$c|q>$xof|1m--JP_rwMgRm;ev!O;!G0K0`2pa33o=;`$m zPjU8;z5AQ={SDD;v#}B`iAfg+47-cPc14XX_n2n_POjZ5O@Gj^>6jOu5r{p=|k`4APw${Jm&;xLO4 zQ7?rH5${Bx7HgZl=i45!SEDQPqsd8O;fsg{vIXc!Sisd|b zIVUtB8P~Gwg)@hzg2TL)0UrKvp)ZqU$^<1hV9w2^SvLT&{!`A<6zhD^1=MFf#jd zAllUnQ-qs{leF{8{((dM89E&)o&k~fi?>4+pqvm8 z?`p=K8d=5+f}v~e-MvZgd8s}dNX!|SQjV23?DoA{qgVJsDe%>8WXKXQiN`asZ%Oby z3ke0#SMq8<5TtgD+Bn!4PXZo+<;_vC-*LcBcN{%{f6>U?zWGVK^62UHrH4VkH%mdt z8Dnm;>G{oT==HsVMn%;MhLWxG*@#%)7352DyGr>|)aAgClBX5ljISgtFA&9Gi4L|} z3!MYLj6?A6d*Vc-i_>~vFNes}b|W{?(^f(|HgK^d6$=_wY3Xm~rFnQsuPc;~m;cGn}C}7_aPp6E=d zlg#2`zp-me9wZ>yHfwfPWwcqbS$U{wJBp}jek1=;o#>$D>W?Caj}H%XfaOqQXYVg} z@0#|sCc>UOJa#&Df!+BfrmR@?bqeUp_O;IW-tMq@mQnmys%^@uz3xgu{6@yN!N;WE@^{jt|CTJQ>o0>7vPZAtdO%Rew9Ql3Lhq~l|i z1?VY(?tGP!5s#XNzQSjqBMf%rjjx{!r5b@!8LpnNq0y^8yv5Ak>qtnn0-@&)v8=C% z--gun0*@ua5Itj?3#6@oLxFD># ze)o#TVU<(GF?ODsiksV4h)Y_J1a$ZhDAN4$K?NZHd(*(Kq@%qfr=fRIt%mP8l# z#N&shjg>&xurtK>{K`PDbCVr7$q{5kCYm33OZk{Ba|I)xlM~fHZbVEDi)ZTkoPEB} z=+$<_5~k}|uDECzE-EsARgLv~!F5293ZI=i_XdLrm2El0+KQq@k(ZDHofuRUS|W$_ z^uRdqGYGkJ?b%l59XR{YOpq5&N6#SpB(oG`XHKm)h?Lra{=F~jJw;75T=_zH(SWCj z=WM9HXJtjzS#ic2OaYa2(}|gk*GFpP=5}ahLnU;%Y%Dc*cMCC!5y6bVO}?Ys@@6Yg zwAHw{a5x|EsHmgt0I-{+`GhuzUuTzva76qS&3A(POkK2xQ*L9??oDzb25lj^?<8(S zQSkWf^g0Ze5x}aG2_d=iyYF(*h(MIptItG=418V+TGjw%p; zToshlgI#Xudkevlf$X>jiFI@qA$pTsYy}X+Go?8No?c29;f#vzS2~`;PQux@GdJI+ z%9J$lFe}t>drmuZbqp@?UvsPz8B|1ePT^=PY7jvD8B!aJ>sb$R;V$rWRM4|DeX)o3 zn%bF!YJ&~4(cP*nBr&Su&)0|HIOwl%+rw6*)E# zl}p%t)sCDrBc^#HiS)%ev5O(rLgd7oJd8h~2H|eVn1p*wP?C`Y9H?pPuv+BR|2a}f(oP3Aa0oZmm;~jpV`eC;3it&XA7P4XCz}XXYHJ z>D!v$6N&4Tfo%x1qv_R}O0Svix%sim`#@#SLH*qbbgZ?hBzfgo^H;H;6NbdR5~E1WJFgWR8qsyl|s z)gVctj*zfv-D<4dDor4*IUV+?*`pWyiKQ4E7d7p{9M zWi{*$w9MeaC-O#wDnt*%CY;I}m?p*74t?RIg-XJ}6z|GdG9+>cDC{4h4*SC4n!0z+ZpeP|qC7dJC%t2Ny2JMElR?e}XOZz&vRBaJ2(69J_@hVCne zsf71u9bb01o628mHxqx${j9IP9e6aO?*sT5h64QVAMci}zyIkpZa3c~#J+L(!YM>5 z*MlvkQ|2lIdppFFvX6xHj0{FVp?ghB{Sj%cU>72 z&x!zC`Y*F9+M?oe#&46t%Ed)DSiKx&7C;}F&7jvDu1BPt8n0r8wxP$>Hf0dTlMzPR z+iX|jku+-0PpeJ6W6?Ps>>@7!*yondtt*YztF?WEN9xzaPc z?(y+hggfqrqphb`tM}tp{k9qc;NWMzj=($B*>blJN#JU_V@7G(O&iZE$+>Fn_w@}GvQ8%!O(7)kt{$JAPovWqK8K!%!wE&Ih zozzbcvv0lsXZczEyfZfb^bO`n*Gptp4$Dy#C|xom+j`L-%p>@1cSDcdl>H zUkBv8wzqs@A-$u3zpVLc!>#`VQ~sTtL}4SjKF?llj;6-*l^SkdWlHZ>nY;S+xc9`F?9d}?2ZbMo0ZpkuV>`0Uaf4e%Z ze^4VyxRb08ky-ipqqT$Ud!$NDpT$fATgE9~cG9F6_05t1E=r$gY-5F*i}Xe;pTucm z^5o6qM6KgQ9ut>NS(#tfUI*;Q(X7KYNrV5mqq`CMU)5)mG}?)>St^D7|HZXEf7+$n zsls6$d%#{BxdY`+N24@a>;In@;%C~oZ`CWKtWSK&;EaoJK=~n% z|5h>lrSqUoKhq5~{S%PPO!`j3K4m3xy{fgvs_29%!$R3tyH@Lu-?fwQHl zV)1&*2&oGJ4#F1op{Z~W>h=27GKYi^F-z=5D=ufF-Tzcs-TboPAQ<;FioPHn-~h{8GRj2vS*@GbOnd)HNMZ3iU4F&A zw$;7FA*ZU}4^}fER;js6Fk(;RTCRQTiBi&ss_-W@q&f@in|Dsi15mtxv7u-|ARanq zP{E3A11YUJ>$i8)c7JN|W;cR%>r?=8%vz!Pp`Rsqqmr*FqDERFEGkcQal5bDcv0eu z;mm7c?>m~yw(fqU!aO$^j*&1i?aI|Z;6c)nr5=U5=$Vnj2d9;;8hF)`2eb!o+eAHx zS<7qY0Zc<9gfIvqW~)P>^zMo(snUI3q?mq3bK}ADz>NH?CZQElBl!%2VQzN-hd{gI z#zX(?`V~~ukiJg}qk@tHUgj@dD5=bFm?&4dj(MI*Qu-Hi*=9KR*9k-ZfRnct;mB1o zRbC@MbGJaM-IcaZ7-f9S;LQ0^yOXgB%1L`Y@{7c=Y0*DPv+P zN{ha0u4i54S28D-(k~PCQDt|=VxCHk)iM ztL0TCXfb3feZOY4J!4Fo97b0vrP$A?shokC8UUcjItfjVXJ;(F%fNge`x!_XTbPok z_{kE@s>l^V!8pt14Z`i=!FrxZ|drsifucO0h8Z2-0imwEPF&^_hv%zpxR8( zaY7pS0K2pHENa}Uma-SCv~+d)70T;A_%!y8hSh~=zu_AC)9sXJfI{@2K~-rIet)A= zVn~~a@|vYyZ;M7PYYWefuo)BR_7Y`k3$YO`YsdV<74k2g8suNlg!UGcHzl_fX`~`t z> zj#pIFg82;8xr{bR^b;@&2MWCSc1cIxz`YoB)*MVgOd%Z`(E_y>zae*eREmit8LP}b zG8-Zu$M1@OaKj((wl*L0iBOm(%rJw$U2kg0vO4uhULb!-bk#ZltFVD5V*ca5z%avmE$|Hw_8prQ2~kQm>Zc(4qn z<~^eiDo*sA9CRfd93TZRd+KG7*e>ivNX8McBj*kqTeyQ%i4GK@-z|+f3fCV`S6>97 zujJ%@lRZMN25nJ2#Q#!A0z4G3dx|XmWJB?hXq8r6|AIWsx{R8$^~w^8zGve+b;8I4 z#Ggu0v+UcK?59iCq8}tU(Iu#lnGaK)L2kUa%>|YVPS`x;Jblc)g^VazvU*Mn4iC`j zYXV#U%5q}BmFXYVYIP_)Cv*>^l6O*c#Pl|dDKTa(x21k)v=FFH4etanAsfQx;Iz)W zNZk|8M5f62D0zm3TrNEMebRt)%+d6?J$k3#XJ?1z7vh+6lxAj85JhsZ;Fg&Ug@#zN z*ZV^bIEAgXaP*yeLv7J6RR*dhWp+|ptEtuOhi&~}`~ya@9I4kw@}$T>s;yQ-G3+4| zZ2UEtq@P4Y))}O+w-7O*UJ^6{VjtPz#B05I@DeHKI0n<{&$KHEC;xHHf#5RG^-2cS zJbTT1OSeCyo&G}s$)MZ6j2_1dOu9$Y_U9esLG-3s7NR2JVRrH+@RunyG>LwxLT`d~ z{wrRgs?~FM9fP zfZvxoRy>4`2dy);maMz@LVh%h2_*pVl`0^Q(S1~kY>~^)do3zvq9SwjBMHN_=o~&{ z>Gsya4O;x71zHl?7o;4&Knn^Vk{$&;k4>+Q%Nc-4B|jSHvqI1+N0DL+=ga{HoE|C^ zb*J(xA3%JoFd?L9D_aG86^SE)iIWO`lczedp|h5IlLbs&oB<=WH7_$n(TWYUi8HKpo9p;ZE2Uwx z`aVr9LHmu!r|#uJ$5_r^jCES-2ZIy0go}-LKPOs^4;Ty2TUT3ONxr$|V&9bw%Yh-& zjAnSJe8$F{>v$2phbiQ>z^-%as#nf5T8CWGb;~P$IX3sH3z04KOwzz;h zOc!9GlS}dju(rAsIi0}%2PPNL;-ILB2#fL>{*^6c%2Drczl&{cz9A*9dR5J`r`}^Z||$x6~Tz;4!Hsw@M(N0sfA=9#P-iXyrV$t;1l7auBVjO z-R!d49@zvG{L;uww^t?I0u~kZ?!7HcvB-!C+he5o^jZXcbB}P_@meUwxq&q@iv|3x zPB-@T0$nLBszAki@Kx}&v2Y$0?#9$7aEnsCDI1eMCeGH=Cc)k zD+B;j)ttnDWCjDYpq}7&Dj|OkdH*!Ulg%H|OC3LqeE>gR|7vFwX)NPOIUX{nO=^|^ zpX8)a@@YQk-PUt0B5j3CBG6FBq{&b?XAt;XsInOh(ZM zg6--=gP4Y+ly?WOL zMYTv(X0bM+ruXmD&i;D`UZb?G^ktRm_i#?mV38YM%o4XRX<*h#L8{)TG!7 zDoYTf=_E;;BY{i4lcV4hE#5TT#l}Uy`XOC6u`SuF#F$8WGA&L0Cw2EB<1*?>CMLgT zwsBL;!H6<7-K+3675E9VLYD%MA04E2!4<{wWZLZzO8WU23*_r=7R%7T`4C|Nchg>) zeG-J6E2NSBnXP9U%_$6+!&{dp=WXiYV>NK^>%6wfV;p9);X`y}Vcuq;Q2Xl*DJqIC zteG(D_(+ExXTS%uiYF#nq_~eSIFGqVVb!dy-{C+#v%%h-_cy$cKm5Lx!(p#YmAdmN zi*|Zl*y!*iPSSiI?v(@1Jm+w+@#Bfug!+HnZ!Oh&IdJaQDGm~hFsPwJ-pan z;1`*vrw!CE;j&VPX(`FjjKj4&M@ z3!|=~EF1Xz%jL3zH(^be#X*uDPu>(cyZG4meIZGr+cE1e^V;gK;o zL5{qhWYceH;$x}Dw>btdY@qhqQIVqol}wl!_H}NX?@+draP7{i4g@XM*x?hQU-*cv zZLP*oD0}H>C#5imd!o?!TYlF(Oq}G#nUyXx3Y*g4zn;zPx>~png+ikzq{~Tds zHf~_Wf7mK*tHmEP+P+v`XT{Ty_!=|2c4B}RedwF#P%{S6Lv3>~k`S9t&?ChE<4!rm z?J@Y}`JnFj{p2i2W12q7_gPm-7*P_;HzJx?)X=$46xv|iLD>$v43?tb)3bGS7&U4ctCAO z)9*rX5v%OKV!L6g<8)3ns

    ;8qUPL-eiy(e^Etvag^&1o^b;gNU(-xDmboI{-tKl zKM-ocJy6(M#&*CD)!oT*+}$WJyQti-h+0j`uK#e7N>mo^6G%&n)ed>9*K4j0>-Xo+ z&DwgdaZ8DCLxs-#i-zc7Wr?L0hK_6cDAi4F zB=+~-b4}Q^+Zx5*nH8bdz))BW_)?Q6t|-DIgax}SkBS(I=X5rL)9rDs{DE{t>+qp= z=Un2IT%66t?+n(oXz|IU{XVgWFzTW2D^ZhchHw{mH-xWafl<>?Xt$5!7Y2*1bwy#;wkM8S2?b-sU%CF@B`vyhp(wDxtNnVG`!C zB&}&AM<$nm3N<}ZVgy?a#dvDV)R7{p9fmG386%RT^8T^hNhjBy+Nf4#lTK~YL0w%Io=!q7;amPgqJuWwGRz=7}NSqt8Ka#gXXq6eYH;2QE+_cj-Aho~?Fr&PWI zyvPeRB$_{pFLw0sx%amFO*k*jucL)lX9=9{((5gy>u~j*l_3-ceIb-q#0bXO1nH+C zXrQn*&)~|uAfyr!kkiSz?}!AC_H!ju4?}vTw8T*1R}O}-RKnB&T~hpl42Cd_?&cpX zmDV#+zba!2z92NlOc+S0^r`(|j}hz9a7sJtG~6q;cB7z9`v^=WeolhM9G*iWhR&E! zqY;)Agceh5uJ&;k+nS5}1trcvJt`>9N@VE4V5k(yFHbt#9JU)hioE7}8@Ki8b?$T$ zW*%P{kq&fXOYvEc+*9|)f)6J=3)|gv$P(AB;n9tKTue5Jx_*Y~X?)^pK0UX|eI;oN2kP(FDJ&Wn16uDNEIM8myOk zdOwf$MKrx6Y+nxN6E-~TD+jzqde1OwFV{Z}reDg*a#p%V_0;@DQ3PxRJr)DWxeZa1 zU%O)t8Q;SR<|-ZJtBn$w<)VnS0)~q-21W;vv@g!u5?&-S9@vuyveF$~qXDLy_QSaG zs_8RM*?))E{PyF_JO9izaJIm)x#{?*6zp$0e1-E{CJCekwhTHK={it~nnf5^Kh{ej zX>uC#zMp z2u#Nn&m24aB7hb5 zWmc<*wBQ#Jc4(hBG=vK=lc-@<{i+^G^RH?(x22kh)vb^9El#1JoZ44H7=|py3vE0y z^UTpI=@6b5G{ZIsO!(WSTs0B(=D1tbM}nn}Fp4_h;z8fuSHmKP|3J$>Q=MHe7Z93#IdwfzQJV@`81DKWf3& z6JU<#!0eL);U{;^dC(fy`HI^Jbsvqt{kA}dx`7C(7c|opiYlsi8*+wVWf=#M`%_Ak zQ$w+ki&+)Vwv;x9nhrkWO_rH7{dHd?)xGT!f?Jh`jjIDmWMscQnv&{v1u}20E>X zJ|jE&XdPoTJ$q%IR8MM33w>ynXupw)xZ;|EH zNf^K+9`eX#n=I)$`g6|2+2pw1fgoJtt`8^u)ZidS=zH(Kw?k!QCzB@^(&H+v&Xb=?gvi7bF3>M*;9ZU|Mb-$ly`Ioxw+)gefY7?>1q57BF-B@b^q8lsEnPG zO_`j}O^@|c&*Xe-kfi))-JC~^ZCW`S#*lJruIY2Eir@m6L>Vvt$+_9YCU~7TSh4-Q0<>*G&f;VVfB9~hSCZ)PB6U0`1h>rI0*I`Dd)#<>{>`e~V6nb(PRY#L zNNhN60lyFztD^jtHm9+?p^MH79S`q&7f@GJl`f6%OYlN>Z6bGaiCC{Q&+MCRx<_g6 z5APjttI#+8qp%$wtaUt42T5qs&DYshr$uEjZKbqLYIF8O;`V#LbB*|)CMt}Ll~@gX z!X?kWfK?tgUV0R0llHb_9fZxaMpvD9A6&hT@m@{bIfw;ohXIZlumNuxRM$$0qD`;* z3v#7>@yb}$Myx}n!6lDe-d8$;p&2 zBwzo;N+i|9yvv7bivA_^U$7XLlmm-s!@mZH1$?BJ`_}J%{3&VjD>$mMY2KqFLB{!# zAnG?yz=B|Z59SxQli@8MDC~p*8Cr14%Q2%D3b83{;o~JeWYjqKL0N--#)0igiiYII;yaU<-BnF0#>-NLvMi( z-AdTQ!|h6lbB($H)K<99J9F|rE&|kP_P?Dl8Y^9Y{+uwz@{e<}?NMQ_B#_tPkXVHl z#_71#i?W>`ywedDT_XN5gG@@m&!=~M&K)+Iyc(oJP-`(ldOu#FP_WR-Clp_>%8B`x zac{;kO$blTCX5%|EYNjz-Q z0t5gf{}Wl7?x+qa%R#wG8_&ieyVTcl$5C zB6k+S837rf{lUIzFQd8la=-DCyXzbOTpxr~K0_pc!axEH98>38E#7Ojvn<2EROy%r zGFF+Taj1~ALe9$tvmg13ixED&V{#Pt8wX=*9sc|P;D?v@``xb~x>|twhl$whB~^) zNR!b2mg_Z3)S9S73(b1ITThycv}-jw5q2Y{4|3-vbEZQ%@7+gV!fsE;tLG>R_Em@Y zH{SAvr=Qp@ft;_;G=3hoDD4t=HWLq79K1)bg|-`G9})j29I$xrAWlgIkSxw;WrMId zZ~~8qj#j_9+De$Lt}_$JhD_tPqYjd3T|(2m3C@VJQ*x>H7a#UZjbMZaw})_cfW?`D z7`*o|GX-hyCF#3=#e06hS7RTVBA)(JIcm_6MCK-_`uKBD*%{|M{Tm|~WXD7%676g8 zbHPQ&={ciL-ghpfEbcWcq9@4YkSr2ea5Po1w^6Fx@xA51i)Oi|NzTgJeQ-}ByCU+S zjFOsi=vBP;MDv^$d+7DElx2g*?Dp<}Gb#~Ubhp$FPtaBd=k_8d`nURKI1iB&ti>bg zm135=qI(8?O?c?{8rKOo^<$GAGh!TLl5m2UkXpCDu0)8u5br8O+53vXTNtekZf$6MD25(YblcGPgiZGyo#TN<+?S5p| zkoFS~V^EWX6pLT)DkGe@(^t7O`741at;~nsC`=2ctLXR+U)trbet~XWA>Y=^)h@A} z^mmZ45rEKlwfGS{YTkAxMJe59wFX?8Ys31@dyx}o^6V1zN)Rbz0;x2erc4OWJMs?E z0>ghn#efNBx@18Np-L=$Ce%bTEO$xdv_+ELmj=e(^(f!xR{^**K+)}pz{uX^4ADR# zP~Ty91KD>O7$ODVCLH~J($a>h+!4lLA3-zQnzt8k(N}DdBG^wHpAUILC_R%%bRZAg zKt1EwghZ2TjW<%(Uo2IKMcphf%hwhqBzhV@F}D71}M0^cQg>>PH^??biq!#vODDR@T;G6Mz4wnpYcQ`*=_G zz87+Nw@kjI4>RJfQ;}MVX8c|2-iaZd4WwrT`<#mC=%>l52!r;wUr{dxB@L`2S$LmX z`aGR#dBDYXA4R@UT{8sN?@t6(f`Vpy%SFydFj)U}H#N+Ho#3H0J@x4hq_|ht-Z$<> ziwC}pDHsg=`K@^}{hEx8t91avvOUk#Zl^_FpUIARNa=Q#6)Iv6G=G>eg)0egJ}f0p zTx)Pg@27ROA+e~mP^cPRMvBfc99Et-9gczG?ps^cy1#w^q>3@oyF-F;@ZXPmK#6N4 zU&=5I=8lJMUPG3*4PZO$52a9WW-k{UBio&W_e6n~ffl0hA%BY_Syi)E=tyEo= zemQEf(x~b0Y#rvAgk%%m{&cBieDC0rUo*sqYXBgvXyT;p4C<}I>SJ_sR{HI4!-1jO zua}eCcC_i=u#?p83~&}#VXk!WL2?;zTdW7YKoOeZ;bo}@8A?v|ksXf{StrVLP#4{I z&{WY!(W?8>n%sqG@*Fv54b6UOM}U-=X7E#)=#|fAO(InZ4!-88*$R;93E|yc*F_V% z3SSRntCSK2qtkmhIFA*Jh61_IbOHV6j!EEi<#S#Fe(7V^Fso>J659*CD?AQw#A!RA zNA#bv1K|z=YAL3K{L;ODAp*@ik4Y%<`S0M2qBt?veyx-&*Upps3hOX}7xrVEf6yFd ziAM1=0IPHX`bs{*-Rix7uti&dSHR{b)hFD*ZKlFXK0u=}hn&!y@Xrg|b}m;hUZAKu zpI=Qmhk;#F<~v=+PlO#G7xJxzsP#nUMc=H<#-!hN5&EQla*ttlk6debjk+5dgFtQP zg?oGp{nz&>mnjyUVs?&aqq}o2tU7X^J1{Bs2Rddi1B<_56d84uk|a|UVz%z*Y@yrrj1zbx)=-r!7*ND2?pGl!wOM@ig#MSukE5h- zf|qUQ2pqQC?bjAnUA{`64{;qW#5NoCiiQKH@v<_E5ls2tOy4aI4&r~b9V^U^c8VQjTiV6x z#2kfR;0exVbHk^v2iKO=?U#?VKkdqGff^AU&Kp|GGo~EfI$Z3~14Wb*`CjglGfu>C zo#Zv7N5(LVuy|1+^FVok=;pG8bbVDjj2t;XBmC`C1e{4A3gZ5$+*NESE_D(-oa>&C zhFL`?@b*)8>HYp{AF)-lKzQn^vMk>xEbh1n*gQ>h#0K>nAe7n?76w?rjV0eCvCb@T zllIb2X>K+`iVIm{1tl9}`8+pSAYUi!_;Ba>J7(7+f>+inEu`o}?1a);ftoyE#)hp| zoay4vS>P$yq_!HcI$ou#Y{&mKv%byU30a$XGDAC+e=z*s-t^QhrbC?f=02z#ZO0cu zkNF|O@!PQS%tW+Z3a@fGU&~pPZgctVWtBhqF`dieim&PI6pyl-tci0%_z56Sho-$7 zeP5`*glCA__@RW5Wr-A>Wnq+cG8fsX2~Xc38G3mq-vB+$tpq1>8iZYL*#YY`iU1$G z7EV-QCCPE0)4IovI)(4x7pf=vPG~PGU91lJ%X#!5Zqua?wzPz76l{veKhKdfM+=iW zqXR#KSB@^iBqrN~arTc3i3-^`>N&;!;gjW`Qo;(7K#EqtZ)Ka+W`!j5)el;+!ZL7@KbO2{P@&s1^B@7q@8eWry$ zAmCz=Wy?xl1DrNZ@CgcQ;V!2pP=E9R1v4coj30Hg!fa0vQQ_$aA^%$*5V1YC5!zk4 zd1UkihS7v0Q2V}Oz!X(abK}W2x%9657#_#8J)A~TXf-Uuc6RHspyx26wqDQi2A@5l zWdg2nAuW$wvdw&Q#oP|8FkknyvLN~@O3$l{RCYvjY7;2qvp*2W(r&YgE+G?`Vtbw` zqC6lNcTH<2rD|ap;}*4E^gDg6>}E3hCei-K8bmpm z?AgVBJv9?4-*2WcYTc4J;VOut?iLTU&{#_kiB*||8<}qYRRrLr=qS;seUiK zchoCu#Lv;i*?3vR&tEbc-C4U_g?mzAN7XTZ44ih5Cbl@Z_h9%<9e4qE*#hY@W|NR( zbJzLdm|5fdNMCZ+chA_b41Tavlq^sOt#*BF|%ZJ5B!-U!qE*I5)ao#$U!nBqORFpV)>E!oPGe8xVJ9hEUuqV>B0k?Lt> zU9!DcLu9JZJH6N`JtA(SaHuy}L2iR3pb)#F-)#5ad5cWjJ?^O<60wGZ4G3(6+T<6b3rN(bT1e+{BjE^%IhY**pGaUi>)Nx z_UU>GyCTIRcy>i3k5~)%=ux(hVLDe zjaaLj@W6}D)4SadqQ;#KDxt}|g<>roRtS;@h)1K%e1R+8OVZ1~o@5lY_MV;+^!{x@ zsCl>@@Rl}?D97g*n*&zxBZd*v6=uA*Z%D*@*~QedQa~(a|1%`*Q*}=kZac>jt{m@h zjqd!HFcB_sYz3TUW&CS?lpI`TURWd9o~vbil@ZoA8eT$oRMT6(3PoRkgv;@Ha z)y}dyEmGC1nP12Dl=G1*Ox371ZJK{Yh@)=ec$>+7x~XIQ*#Chz9~?JMmI292iX9Qn z%|Q3!T}TEXhVW=cu_1eqr~YK=vB7Wl@F#4#A&VhW`0Qw!yDpdY*1LkQ%mL6Jrj~}` z_$QTms(*V2XA5w=q`HDtou9Xm2#@rg%D-vsH5`jXDOj7E)k)}fF0`CKl{p+z+|^GKk2_H zd#4ytf-X>Zu*bG-+q1{!9^1BU+qP}nwr$(?ng74{BnS89CiT$ONq738lImLPTi>$R zKxaDeo_=qL+(KJ(l{RGXUSjA*<&a1Y27FbG>x37in#SYVBOsn+#K<4VVYhk?$< zrt}E`wXsr}BfzefeI%4}yk=FIzd#)X&punK0S!}x2$U#kn7(K0Y$lpOGkjtM9~HfG$pvkx&#ISnEA>W>#lZIOG#Nj6%3>r2VPtIzjJG z46wuYCk1;ec}s86R$Ed^tx!S)k@+b6bwwFt?u6_%zw!AlM2TqrKO`Q^&f>P zgR$0Xl~%$M_R8?kcz7qER#dt4W7M;rgt(#x`8k4=(V0|Oj7q@Ay6B~gXM_fL)thD7 zZEou@J`MU9epLQ5i#$SX}m;yXf)JBShchis1y9a6@yeuoY_t41fgh*V$)GxSeRg?EC6n$rVt;Vtb_#?}=k-75B3P$!3QJ z8O`K{7=(J0C|raM2sgAdp<+7`!~}u=07`Sf;ZL92D)Tj`O9nGI@*fVxUV(;Y*hY=b*a$Cd|A6>hXK4@~ZH|7@1MahE^=enFh zzr@3zBsxT?+7`@_8xWbgGh(6LIa0s1)XYw297<0IH!z@Cs+>h?iir1Z(8$}PYSG7w zB8lXC^Jb9*fxnEA{R%B$F={KosxOVEq%>q8>2N6)HS^s(|0U$Y$Z$3}jb8n_ui(c9!!^ zk@tBhLQJ{t?bo2W)Kk5-7!^dVjez})zH@kvJBk%jaRlg(V#VA~=?W*mh-tiG9d~{U zHiA*MWo1Q%UBQCoWOe8|mNPZ#R8^@kRp)*#OJCqs;TFf!6XPa2N;Gfdlkj(K5%QJK zDv#T!!dyW7Q#XGZzNhJ{1W_XYHV;&*k?z6+nvxg!*D>KeC4*B-nT4?=V<`c_S-eDY zCBPhPLK_=DLtWKL+IB@dYgR(m(|-&x^RUBnZ!fN1DbZ&3k8rXJS7v)0Xt%)4!-&j? zFm`1xHeRm?`O7Ra-w~gcsmQ!-TE4tV9@rItT;oM4_F8`Ux-xX(P}&Nk9!*;#B;@*G zZ**b;S+a_z4A7>*RRdKz^ee6;9w^JJuf+OTleBe)QX9^HOL+C4VeaIew#ysq1hwzJ zKQ9QQz$7eh6K`bJhX~3=G;j+oa08ZK( z@}fGX{XhJmW|GeYr90UaIio|{`&0zn0X1DZcacCQmKj>eIeAT@t|Rlo9P|SBObi z4k(sCRBF(mV~y(NL*JR)_nI!ENID#JHf>jKXX8|>iLXf3SFM@*WA#l6Lp(fCL%R6x zs>f~=npWAjw2V*5ASN2F2~K)ze^q!cUgkRc0VzSBEjvI1QZDP6qi!?@Hwc>yCH#^9 z>h8DJC#32YTToXpMXv)jSQ9#v=tF-W#>R1&0YS{Up16&V4(F)qUca_qA>?x%ai2e& z4E+}u#7+H3iomAGEe1V?1WRI6*%zm=eK?j4$$>qjMRABj4PxSOiM`d&lMcgh$c0eHI`!j%i{C7wpf-dpHeHmz(Zx`<&b0=EpKqx zcN{xJAKq4?5M2=vSP$}BEfG1UX^g_+#tc^QAIg?d33B}pAKxNWC>Q5`mAvc?c;0=+boV{|6eEeL4x&(I*ut6ZOV z2U@MuVChS()5QyQ$UuxDyuW%=P&nfaYn^S~KR+<|k+__Fs}|&+D=LXCYeB^UhCK7M z!UDH}WK*w_(vk7Z?4mEFx~l5&+ZnSF;1bM3UgnCsqRobb zKw73G(@9gEGk8)*l5^`qAyu)kIEJx&MF<1$`*TQs;1o!4!;JY%6tSq_s+rUKaTFwz zXqqjavL+tAl&$(dLnkN_(L@fh=gG75;x=)c$TsaZzRioi+>^#OMmB`EkNd`i#XBlu zJkn|Qa_Z9M_0o;ef#)3$Pqde&@~A<}lch9ngED=w5XCoSEk!i-iF(33F?SW~Eq~@? zkElT$ z7HuqYBE%`17&iw&*`#d3jfDTaY&cL~9(fgC87v?VD!YOe1}6F-7nyKktENFl84#Bx zGWcz~x_Q12f+v}e5dfarUNR4{fc*z6bX6w9)CYKDlv6=eKd)&JB98ld5;0DX+d49e zqIsY&vR@8Gx&HofOU$8ZZuX7ovf+&12|MpNWVm9V_Tz^#TycOY&zlgNM*PE~I&`tW zg*`mRceV+$EyoRp>?IO^d40`k8XDB%{}63blF(XfQj1^b+z8p}Oh{sk9UwP0B*z@o z0z_KLE(td70Oj&Yox^x~`x@RMy_?KoV4@O0O}SbOn63ew4w*~0RP(2*(iZJMbI{N+lb(ExMCA+hWnjF9WN9qtHm zMO!o0sEifoh(sWZs5Cv1y@NSx6YPLF)H60%4|VX{L(!0}7t_w-TwD3(*7zl5VK4(U z;S?=;MQiSUw59D=VNLXgok!*`Y8al$e-gk=%X-=8N#%tUHJr$#p9==z26{wJGq@x*5#`F z2m{IkJ&>6VOKrF9t^D0on)dZ65^KCDBS-W8t$JFwjaQ2YXCw&T^1ME&;9(&69cG}-KH_rNrDgl9 zq0Ub4*+Xjyq}qb8cIxe0ikPabk1`@lHW79prQy!*?`vp?YOoR937P7L9|OrnBQ%{> z{W0qY^4QOD<+(Sm(x$n0Y81DfNIU01cC%Z#Lb(A2VTq*|a_jqf&=yUZuL4 z(ps~YOm@j&yP|kAy1Z^8wZu5UL|V=?gNmGBtGoDVJI*_(>Y6oxuyP&Qy<3n3y(C)C zewiY>2lu`PEL|a{`z!E;q#YH=vXhc?m4xJR*C;a*V7>oWT6!cP$RrLWkdX8uH7LtO ziPNg3_#$`*&GJlAc>1pxz&?l4O9yBe7E#MReEm%}b**QbmSg!nAo3D60z*%++vJVX zdJ((bo+l5CcN|i*!%pEiB=5>MZOnxPU8Nw`o$w}HnSJuTCK|(MfYeB?#0jL6$3SpG z%0cgCxy8&gRE*c`g}WT+8ucIwtkw*&Q>}7$JQj}&wS9Nj5%7vF9h#!nB|5Yv9Nb1m z{{cashwfkPQ=&Z)206l=yDdWR9~xZKUO#mc3wZ+Nal)gAR|&@x+1z#>BvYp`uVdMP zf(lE~Drd+8Cm1@)iN*;;Te1*NTcbyBTo?@A@ck&^KSY9e6TPOWQUCI(y#$J^hc!4e z4_aCy)lo@^{|2cF+*_MwMmh_9eH5{5bw~Ey6y5)0J2PaIe8mxVnjY8M8){MnX}J8? zN|X;NF8@JmwYpS=vaQmlk7L{H_s%Tq@>ck+8uK4aP^tDj)&{oGJKc!y8q~Tp%_Fi| zPwA-+&o@oTptf;5coL*E8|IxWMoj}8*kw}Z-CE`iw5}05DP&wdA+eQZ#{Zuo(X%f6 zGt|j^lL&&on6zUh9{bG~PvtfM-SUx8RUjv zM2|K+-Q;8$o5>?bhlEZkC<5RiPko7D^a_6l9ir8<{;oId>V*rzYVweRJ@&R;e`INm zZ!Qew4-#3uHXdT)Vb^%_%@Gx1ypk01CiwbRL_+;y7MfTaC1QpXdMsbA!NvVP zWRrK>HWW2;*O|BeI}(iPBI2}?vy!Zu&kNy-dg?It@Q8|ipBTDD!)~|$?NE|E`xYj3 zai=8%lg=Wft?984GtwGqDGTz`L}Q4jS$ox%LucL;96B ztawfhqT$oTv{x?i4`s3E&gsHOSn&+195ZNUS!v@;pyu>EK(rIFs!WsGX8YV~ZX7=K zY)z!GwK!_eFe#8;$_GNHMBIKxvr3J%R?^j*PZDV_b!6cDq+FT1CF#N7EwdXTr{K7y zl3^_L-))ARY6Cl#0g96lI=k7XnOsW9Gp0(9Y@QQs_=V9X?<`Qw^BQmi_@8x$_w^>X zQsYnKA7%mG0we~zol3T8GbKOQqoZu-O)?%SA4cTLP3-C9BKQ$6WtvM(k)Vge?fdv{ z@a9DJn@v4outt%2|7f4wDol|ef$q;nI?!g`sRO)4I}E_SA$(8ZYhi=qfq=G5Ndgvh z72F-n7^dhJ(!qkVo`VMzHVE87yP&EpfUDqP5WuUrc&Mr5M(RSFH-l?6Zf^ZAwBucR z*XIb6X}LdV^w*K%oA=7y8 z(gye5j0H7skYo?1q}6a%T~08N8?CK&5BQrxKx-C+6hMWqBH$8J zmU5A?oGToVGEKXF4u0;}Eht$4IE`JrhRBR5FaA&62w!LVQ#Lqximjy~N+Qy&PNKwf zCP$R^kyGEFO1EfHx3m6yJpUJSy`#F9c)l}6(LJSF8kdZq6$%`UoEDF1t{3yeCQfjd zzbEPrzV6GUH(HbKWV@0cf8M^Hr%+10YvDnpr2M>`m*(F4JoA+kmJ$o^(Y2U$F=}Sn z$If6Z{G7+N#-mJR0%P6y`CnBo-v5jX3fao6;>xNd-%c=8im)Xpvjjpm?{TenImGQ_ zDVKGOvvt#Qyr{5{Bs=w?1eZxr>|@BA@Kppmyx7H~fG}_$(CQzSo=rSI@ zpYZ6mKO7WsacagB%5DF3h%qc5fM9=ioVzlT$u2hnv0I#Khg=I{U$KiRJWlmJ!4a5Z zddCzM{lu(tfNvsae}|f&5OU28MdyZ&DvZx-Jxzdy4}IT6GoHMix8%>)BgouO0->EQ z;^X@P*CvdYtDDmVG@5mfbG2+)w;-i#RqCzd01`El>ltlIUEX8v23+kV(u5JB%fNt( zBu5H~n;5;p+*&~$LTZr3_vDa5C|)nhZHG~bPa>nV&0)*@XMrnKvwn zbVv%DHH2ANC&lHeM)6eUPar>uJToHGhEQBcQbCZ`@-p+W_5era@E&jGW@|e4@JjYg zEikH#XM2#Yncp0zO&7R+)nq0}ndc8G9PjF*pGyKb%6#0678uQap5G)PQ%wV<{TuT2^wW-gX>P zuGo9*7^iSRrG4?Tv!ofP?R1O2!Z@w*63M8;a@|I47jp|cvnm2oYcCJwP}G?BpjQQ` zP*_P%0HNlcu|}sE;}^}>t<5MUd66RgAH*|xsdv-vq&&aTYyGssym{AyPS*1m@$}!9 zgaYz7{Y5;d6H`ccGc^ah_u8^$rWuoS`h+*;o5D5_T2c-h_UNw%zDRumY0nH6uKXSc$ueTRDl=mMbs>T^q z4?br(VMLckQF`eAq{IV~K^yo3QZ0Os}K+eJwiQSNW4(((e4 z+&E1%2bVXR-@oiUIpNktZ{{1-kzMxFuOaAc<*795TSID(D|>QD)~(1`G9ZcuJ0Sef z=I5|X$xE&|{7v3mch=P9L*UkFCV;6(#z5Ox-4m~rbI_bF*DzX0VsnaJXSbaHLBO&U z@mi!qFTx%< zEDa3}S=_&bw>}mY6JI@FuXD>t^-s5Z&k3R$vdzscqsswRA#i!0Sue{EX-C3|Use~( zR&7}y5uUGI92hr|{;PO!QGL=8C~%P9T)}MPjJ&tGH-kYPsVO-X?o+q$EQZxKr962f}c!P4}Eta~2(;;<@6wc;T z-wJok^7Jc%FzNUx94R0IXB|vf^A8D*a$s_|2SG<62ZR@M#D@OTB(8iG5@GD``_K=+ zPiPHyMpD)+UTX`_9`B1HXYjdhU^3fF`NN{hjE@(qJJR3N}77oh=OJ1#? zPpg18?hH-x%+!$d{%kASUK?mSAh%aKiu@2S59D^Y&r!LZb~%c_R^<|wijk{kWkoeD z!!mX^Cw)Fcf%-TZ6VoEmv`Mj;1ys2)&Qv%ftpiCh+A5lt-+;R7Ph2cATvRe+8h1I@ zoH@8x@AOnw{oz}ggz^9rY-m(1`$cdhQGJwGJBXf4q?pg4$M6!&ADN(hHw>|wK;K!@ zL?i>;6B0vV^SUkNg?`AFU}r9^WzL69nuWJv90+OC^;$*|Psk>=4#OS*x&nmkcuHHQ zkxgI}oT}Ncean`r@3pL}&R*&49azAw19vb-V|bx*Y7u!i$+z@jv(y9?lP)G_x}6X+lSJ+wNTD6XJY6UTmZ#u2ORx05 zG3BZM)nG3D-x|!E85!a3Z-?4!A*9NChgzP!1Xi6LwUS2306_`3UyaKF89pP#amZNLd< zvzL%vL9w$C_;N!%dI*ZF-56r%{n&YQ@5?T@05~fNUcQg5e4Iin2~qGHuZ|`2re{-| z8ey|nYz@q&Uu?Yyu0L1QOx7R5%;rHYVjeCF7AV4B)Jg)cDIj*9K6IBKJd3ONF|+`8 z{VQ(&&7cI51)0Jg;LJ-DHkT2o2FiFglH#1LErJ`u#hFVT-m8jZj3 zRmWBm4t%Ve-Cn>_{cPa^{CivQy|*PUsXqz^%U``B?)NAO{Q z&Z_Jj#>BX2c}J9YBEWI{v$5uHWDM0m6=|bZN3wR| zbdMAFHSF5o2_5)`6OVI`!WNY&+?GEr0%EV1I11~}AnNRGKW+ueNiuY#mM)3b&d&|c zU*2Y*r76}JR5U|6?P9nZ*jhXMFARP4KlXAr=zA@M2v1RC3giE2FSo8zs-4&VtGuo; zDdFIDY8~wLC<@E6%(4?$Xu317;%0FPV}jlhZHrN7w)6 z8FplYqB$6kmK5XLu3reDFQ*H7xbN>k%o(+yO{|9Zmje`hN|BIlKvvF0I|J8Bdz0c4 z18ZP7n1Kd2@Z1%ct?zRX&;OKHJjuHqISajX$FyoSRZHA>Mbc?)T@!}Ndmoi@h+Zfl zqH+1%K)^on@n%HXDUJ`sY6)YQaS!|M7D=%8?jCU|N(t{`q4~WOXmvC33G*H) zh!onG!Da1yi@kEaQEGfh2JD#4_v%nzIC|o(@i`9Cgkscy%wXC7PXU-hdV`F1ez|^+ z7C*ltrBn%&-x6%`2SnpXxusDEbb%f1w&sHmieN4Dzb}Da$A(EaUyM*{|6}*FZOEp2 zs++1_CF8md6vZ=XPb&Os!8@A1q=k?jXU)H9LpH$o>RL0wq^&qWPaJm3f8(>&2e%E1`MdFZJE~6c3?pj*f|(C!R4~O?d4S)AapSgkA)>V zd{QEOynrN-qZ1=e1hgAp;)23X8Gv|Cb^P~#(40ptH+Koqe^OLNd~21GI!!Z-?|}kK zg)u7Xw(#w;VJVcVr}aZAw=`=*(c{?BD?Nn;&e=p=X$3HIA|Q?AE{2Pm?zF7deK6= zOJ4tnO6%-DDlPmdnEDSJ6Lli`0jsj3qKSKHdkYES0`CbEnrC`y^NWNh5=%9#&G8fP zKWk$aE@j$V1X}-dbj{(&Po|x=iJMb8q*l$whkKTMi*GT&NCcoMUcm#`jX6~ODe}_b zs~)RHpGq!qvlTT7z!lx&_!zaXub>AS84(fuydQPSuVS2MT_xWT!b--F^J8ivaQT{h zT{}E^`KP2Urb1$>Zt!oosne?_U9IOw8#fY>odLAy`Xg`|QM%GTUCY-qt#V8FE zd8;b$=}6q!WTtz*y~>&=qq3h(NrHyWpX+@`nH*TsB=dQzcA3qRuYy!1d27+gS5{i0 z)LyOHkEi4l*uH@TEekP+m@79YiR;uze|#WImP$S+sLvxWv-$e5xzXC#XpRfs`?}QW zbKkKbYN_{hR&TSm36;lQaYAAfZ&+*Ym=J56R3%i34?igO_Wtmg+V$M!Z{9Eb&7u(| z^y&gYg9fDaNyWm^b)r&^u0(QV5+5uBmrJPh4H>x4HA*w>VqVc@U!|Cq!a}FAS%+1( zWqhA)NtbXLePNxSPdOfiH%bJjT5M*3rr6SP8KLJC7$O?FY0#jdtMvxiR@X5nV`0V} z*7K6!d4qt6z?*p*Z|_rb!TY2l$>!N9aQrl`mBC@uIll&Fu-Tqb{#gNg8PfgGZ$5;U z@`Xqn`wYpr?zmJH%gywH|zpbzTV9Zi{&u_G~agg6j z&7F$ecH-X)_Lrdry84UddX>cq5yT0{XAw{~s^yTa^~Wr=Oi4Q!M39E|vwp*FnC1R~ zeCi&yYqCr$B7h{_Yyv6Tuhh*T^ls>65XQ#3s5G(fz=Wqnw}!SKSvIP+IbaRiS_h*O zXa<&_S_Zb}+K;_I-yJ;w+mLbBK8JLnQ5N`cgh;FR%TLLgm#V4ggo_?0pT? z{j-i!^KwwWUei(rP!>~jZ(Bb#Lo*@>jl`b3vP*>(q4FP zIQU_@!EOmdCAkUj81<>?j4No;R;TlXMfvyjyB!)XdQK`>Bwg3;ol4lyu zC?fLxNa22;GW;0DR&wyC(s{T{TAl>aPFR07wV8d-KNt-gx)(GCJ@j3oeMXG~#$t7Z z>Nr%XAEd=cWbg~}MVxLKVcr4x+j$53Md~{8m{F`=jMi>|@8|1MZ zv@~1Q)P#ujTMV^>`;N@$EvmK%7f18)50Pm#6COZ{2;pUngoA`#L++E^t|auQQ-s=F zn-USOr}VpVxAR8ms(5LfXZH|I!_k5L{<=Iu!ild#)Q{HmA0nlLR=`QhpgDUnF`wK zSiqyRm-pxrg-wZ}+0J7y_!||IJs(XJ0%k-G&CR>R(lzs%lX){^DDy~d}G{WvvPhi*lSju|Rmp&3ktt8cNUsw*#MaDwGP&PWF}!I;12w$l-)>dW43xf4x8 zE4sX%iVror>AWXjuP!%TKn8W4Cd=oGDy5lea_B z+Q5x+6qN|UGm7iU!S4S3-&M~8c~jUWyiRHj+d&q_DzgKp(dA{mP&>DC{I|!iqrpSd zL{=J4nLMG1N<37w$tsNEQMAy`?OI@r1!d5R28n|IXTlvdGh{JVRs)hdQb;1;GgmH5 zWPtD)H%>6{gL@jAFZi{4O}<(j#WB3t@o44+ zbc*0HD6Mc~^N2v*uMTBpl~G8OGm96WSx4E7Ezk##99&h|1OR&vPe>UsDmU+oXSmyq zIAlZ7BZyM)kzW($?-Uoxbh{d{k1c}edV9D&K{|%Qi1}yQ8mob1oguFqSG9*fM zxrjkw00A2{3VTAyR`*SkPi;4v2T`Ve)=d)3MmrKzy`)REPy23_*_C6Te+NP8tGkX14yZA zI6+pdWMKrH;0tpmr)9!3{9@iCTsI~lOK0eQepZt(no5$2NR*M%b%oy5elTMBH_Gux zL}>0&=xmo;6~#(T5i(eVf9(i_rux!HPpY6aKYT^KtCH|E8$45aCZ~C?9`Zk7V(S$g zZ^UjAVeG|~@14;Ug9am# z?$8{p5^?T4ODAH^b$%sX(rYRkdc{br?i`N|oE!2;eo9EDv*~e!dM~rOd6^L|m<793 z0zng_xYPlcN$0G=dR{^xCst7wpr}HO5DcJ=EBXkz;sL{VOeT>z&?SC;{u|05 zb}9;9n*+m9MQ~FoSb0Z-W$vv;HQ>-7q!hAC_?j8aLFlX^066`G;!{p5>_rO4gjP=; z=?hSZy9GD&BQ$uP;2r8YLT-Zm-zy!)xiIPnZ6UjF62F=%%c=3axWYMhAR|9{82`F? zMrL`+Xih=-mY@ba`dDUzFysi3yS+h>0=dCP#Msop;waVIUUh?@=5f(hDJZNE6@eMq zmlJ!{s+c_w_l^sad<#|slpO1uY<&yh1_3Ah?y9Puimi=z8RsT`bGCHyAo>)Ujw?zZ z?o+8fd>KCTZp9;tTXTrc<`vevjeY|*jvS>dP*1m8Lr$RY0Yi#KDbxnEdF5C0+1C9h9xbp~Vqw@db;W z*Y|6Q$?s50TwB?l1mCKEq)nmg2#w%+x}~eOMxO&Ryg|EfH&)NpXwWwbX5PL?cNsI} z^$!>)Y@S$OrVBZeT$A8!J+gRHt}#;UWWKQ3Xqe=iu-kVu-&#}Uu+oJsr*8LEp%v~i zq8`)3qMF-MRvj2`Yzp5B7a^yo(YJsqR~~Zzhko&rE(+=3sdoo1xM*tcUpSexAnOry z#3nHy9{L;Iqhp_08-nT+&yQ@tdtAyT@kggDzy*TLRVQ3#u9)X18#Ob>6BGq!P6Zv{ zPMFLAiG9cBlbZ%PB5x>`1SuX^4I)k3)f0;}Ex4yWz-oU=c;I z=EVi3yMiWns}Jd<>H$jgaVRzxl!79Mag{rCc8{2E*KkWz)#< zsX$6=2a24Nd?nflRD0 z7)Q$R{_MhvBixGP#8$I`5f`WFQhY?GZd68ghH;I*`pK|$A7D!$M{6QMlUe}AMFo!o zy+yO)^6i>dsCJtXT*l(oYS?Fn$U>W*er^$`fMVj%-hk{}A<5%CFt3mMayX^bRLl3zK*ypG17HQt*g0gF7DIj( ze`iy)aim~WqWkBTs>G_>)v>C9G7} zfqnjwjYI~1#=$7}>t{hAyW`YO)dgRM{sEYlL?bYUN~tD`_DyWOX{1=|9S&E$Krv_i zsKw8vvq>PoH&ki{pF79%5o7ZiPED~_$LPgIZwV!cPAE&tlSqlFNz!}dN5~uG_i5lW z&)P7TPc9QgD3767QcZP7ypD+x9C*}KH1kK{?1O(%xK=8}Ltr6+3fXk8@mrvK$r4qB zspy9{(l{@)`P`a_cjJVX4OpWNAEER9{H|q|S$l*b-T%^fpuR{08JN(;wvNoF-g)IS z=xJ+f>*=`Y`^m`282-`d(BRte*gl?~UjDv5{yttVZfWak>*=}qvU&i1TyZ~E!!7jL z=ycF9KKUk|`B-Y%l}Q<_*vfi7cVmW7>8Mb0tX#1#$L z>yI}q>1;(0vlFrEdd`91jari31l~d1wyZ<{1u?}czm(pA?SJgos$9= zjmE|jP+cO~Lx9M*yi53%ii!>D8uAceAm5Qd|9m*}i2?LzbNOT;*n{?XTlNqil6=0a ze3XlhD!~DKZ7Zz*nw0{-CENpv|LM{{xcT+HU~Bj+Mtcen;(7PnZ4eL;e0H7^7*?K^ zP#OlqMgl*BWjtqrH1Z<_;XOkQqrk6)5Y{xmUnvO4Y={P8&-tiwE0kZYFy(b^jYH$pn>5AspI^V8f)PC(*6}0Yhs_CJH)2iR-+Fr+~nu7G~z-= zuhrO{%TLbEcMzn$FyNcy;t_cH{_m{vFYyRkK!5?`BZr5Fz;tx()yS1fV5dLI z4^qet?+NpzPfe#_ZYye>=x({e&F2Je{#FSJLWWAMGk|QH{N7gONEHR$@g;VeeCU^`m<}L<(BK5xz&{LDE#_WyhbFOW#uUN`Zn-oy`T|_V4~>m0rMSW zZt4~V$KCH<;KtXBPY*7-v^_dRM_CPQ#baK%{=x!(x93Xj;h*<~!?KGiyvII5h`*0g zC_t$sN?`-BV&7MtK1KHr9%d#GeQO|Z-Y5B6+ScNK&_H%85J=RC z$ipFzZ@Heg9(luT>LzuR9xxQ)6rJ?iOglm2d^+s;??Hb(Sn>sR!!kLMAyp5i4yYsXFM1y%PY%KrN$lZWV{ z<-SBA0++)28mUiqGuy(a9;}ZSM47b;02u7+(|w?8U7;)w1{0rn9XtdJF4Mh%}#%UoUa{7=2gj z62%BPMs(ir{3{!Ac2T0kG!Y|jcmt3WmYi?&K`5#CWqhILY;@qj+eGf(UiuJG-QL=h zu{CinMe*l)RVRXn{~Af2?3w^8F!mvtza3jzQ=tI^i+Xb9J7S+!yrEPY|I%e+*5asi z&XZNzS4yBBY&yob8+FsWO%{25$~9GuzOOrg*}n&ZqMSO}(bOd2&nc_IVOS9-R$(sm z6OD7&hp=)vvEXg{8QtPc>I!sD^BxtD zLmjnd0Fz`t6`*hGWjsMjTg6M!w+FgJt+Al*tPyxpBbYEqv_(Q1@kB=om8|ksnWbPfhFaFR!)rQh}QqktgRu5=fJTM1rJu z9*phCtAMC}`pjwxW?oiMuBt%g&7}{3{q&R=JH$9mJ2cJg6>+*;EuDUhGQUP*bb;b^ z{7c&@m$fS*JSg(3$;2B&g}=9LCpY6pqWU*U zpm1F}dHx64W@ypxN~|mYGL~VV%(k_hX~9;eL_eE$YyRtDA720_F`v=jzz^_$ak-SlMOgx(DDx+eSJro^mwcmkbC!^9sKVw5gB%1p-^HS1$;8YA?PxKOuWB2jX&_DhR#yUK{Wuc4<-8x({!(; z`9As}Gb`YZY%bJJ8lk|}RS@o0cymfk`OLDV4^W*me!BOiA!mGe@H#6|;1oFf^jKur z!cxUTY7`SUltebZk(f1vgoivBSh9AVB!DDiW9K}!y9nsXF+!HCk7o)}OyF2;Jl!Be zh?;5zrW{2k+kD{N&}ym*4MXo%W&-HfvAtM>a)vSqGqRp7WMq9+Xk*n3Tbk)o z9Up7dlr>|W!i^fn*?hyYf8*KQ>7iFJgk0X73`|f(;tb!8#yw3KMnd_rM~*<9ck;*- zYLGxB^?lhRb< zzOt@ss18|6fDdo#kusW!795>WdVD;MZ4I`7uM|g1DU7~W#*2%kZwxu)JE;}dCXw5< z)HYp~EqXkXwi5!kcrbX=G0%`=e7YS6bN- zI_29CbK_*^-4lZ#k?u^n!5W(Z1DZ4UCRFlLYysj-h3MQ~j=;zu=RfJQBgmVcGX0|a z$9%?X>Lu)xPwbZo=VxRfh4V92I6qT`^E1g<mp*|&VVy9y@s&M8>O~x0L(JPt zmUgK(W$6>#m5oI$F9z8Bizx?GX2#e)DoMq7F&;lZBG1rz62J)U^pr!A++5`m=?u4( zszaEfzZAVl2WTIo)k5_A<>UOYr%0Y?yC|eiLp}lqgq-miD+4(RKr6o=x7aW|Jr$q=Y% zk3f|$I5;K#o1=RDRz(Zm?=6)c=8wtQyvGRwkl6=`7Y|<#2L^f2mZ-Uh-MDbj3ftcB zh{D_~WEW78U?5BdCb&A&V-CK?IHMeCz^BJ|gs;vX(-XN`NWdcphy2~3z$L+GgIzj= zrKfnuyJ??kYw0aSm{zL|a~&|s^a+{zFsEM)>dmR4c02(O1?@C*^q2`KCrm)Wz1@&9 zQD^Ue!$19rjhAN1(b@aoyX-(r#fp3YxS zA`BGxOKi7=kxSOIa5zuHb(TO_MHVB3J;To|CCkDv03R(>8e*u0MZ`BWsE1l64X4T5 zaPu9lAOkKsdt%Pidk+Iv3Vbn0#5zWJfKobsIIu(uZiS7?S@LH{#KJv4~OBpE~U5^Dll<`ijkw1yBiKL7le*!$c&3UijS z`Wz!w(HvV4%M0G}j(f7_o)S0!ARrViSjw$IZTu3`NX0Um$~esX6kO#TwAQ-S6GiEV zhe3qjp65(6()E7+6({88;FtJD9kKF`Q0DB3yeVRcFr;t*F~2fzPLp9@Bnd>vIrq*X z(xA+)h7e??vKdcx1z~dHBu8*E#`k~O_y2n5lVE&+k#{151R=9yOcMh6dh*137RC@y zhJtBR7zhpF1aT5yPm_5@A@M2UsR+!Gl_RC?M_*UY!8hI^3@jUcmZzEhSyF83XnIY$W z&Bcu5d{L=F?r*jB)nDRoIFAiR7`FfKdbIqmvBeo3z}{Q6^)TRBC35>{)?tbqcd zKY>V*U0Z@=r71J_Aa9do-4OkY1;eKwS&`>@8cHk{Wgduh7ikh>q6`rMo~7oZ0m&$U z4fyZxkru8N=)uN?r3$6_n99c6<3W~nOj+==gvu@~_8I@n+=-pBfSiCjQ$D@kx<@b@ zW*QA)M-m?jD$>1d-8+sW$SBSBwmk8&F!wNyev~O=TL2~G!~)I7>~%2lLQG_G9oac*SZQO5KUgZS!Rrc9J*`B8WrGGYqrFSlYoTV<2fGkdFrj1SI9G4bg7T z=Q*V9xe76oF|fP{(*D3;Clos`VCkL(XynmF9_K7DD_x|c==?kca&^Gvy{wsX%*bU% zW4fwaG>zn{4rq%Go!Gkg+UqiX;m^MwxQ}=G>^cj<*@!|p&<{-7%K~co)+lDqt^WN+ zZ1EUQmNQhAEK6>!ynD)SYvQbYDnLysL3>mPP5EHrFE@AZkkRjfjy5J+A01PSABXS4 z3~~mu4nS0CE?oRRyCzh^)*mQ7fw2oLYgvk8yjjSL3%b22Pt)oMr_lK&l61= za3oDrXv&fO5~jp4Q%0!+6Ntr#53K>P>J-h~VbPpg5ZF$0$fmObD+?#9ytM%wTIWoC-!Rh2~XYV~-GU6R@1<)khe%A9Ce4ODP9PMJ{4)BGIMR2W%^>Bd82 znu{3hAPKUh_IiMOCF^~G+~d=%N={#4bXda~lL{YCJ zl7+J>;#e`_8fRKdg|*<;%0^Hh4(y1XMbh4J=@8%<>mFT}@=cbe)iSqFSVRNM>%1gG$lrZu)mtlfl)qcB1pqblz$l(^p2}hcnWv%H!Xf1rCHvg zNiL#H$v=56Oo>!w5PAU+GFLde^S3grfW&7h>KyQ(m(MB8tBWwj^BE9xFq?%znyJeI z1@#~nV*2Yj%X%CqupnS30jlR_FJrzKW=|*ywHPUB1P1BK4n&JXl~EfxmZ|KHDn2_w zvE6oA-u41A_1r1Vx+bMK@|bmt$j7Cj7>!sDZJOuIRi_E(CR1-)Fph<{*%uZ)b7k}4 z5Y;Obpdet!v1>H?A-uAd@zPnm&QdK^5+q6j700!nRt8gkV_BJcRcDxWGtvtdqtGXX zjKoP|NI6G4Pg88RK4FI0b#>dpM7wrE`SNw~D9nc!AsWox!bOH7AeIIuO$U)O6YNQB zaAoVKPpt!)If@xeU_*(VI!HLNkgCL#y3mB9%ANLu%87LsrehPb7v(uj1DQ-Dv1Bb% z3R4!ET$(@ss>)OgiA&g~s-NX!eS49pM5s{`f>X$B8rj;Dxz~ju!PcN;;V=z(M!A9$ zzZ^+k_BaoxnR@sig+td46H~hhl8X z5410&21PIp?nzW&-Ow43e-XrBn~~Mgh7?S)L{-n|T&-=2s{F90NNO-Dl6hk`yUfY^ z;_&LJ&iZ&Rt=w_qgf537^_$YZkRep)g4Nwhh|rK?GoucR z5G9oLNvjJ46C4E=r1r%GQb2;ZQ?!y)HwK#(9yi zt&G~7hn*A@o}l`EQe9e=rVK06b&Nm7xuwnh7=>AqH3w=%YP~$?%DIjWvr}@=QO>R6 za9MKdQGiw*x#ksvqcSC0mdfFB4+G6M9e#AQ;B)(ju86lzKL_ep_rXaia`S<}GVj?s z98)cD9!>Hv?ayanM&c1AFsHM0Yb5q{i!Oh19N;kFWt3lo-CA)85=>+vncUo2L^jg* zxR`ESSxFf^sgFtu&(EQQ$~s?^VWDP$GV7=Uhx7Duv+=Hn^sGQ`{;Etf^tQ z&zZW9O@|G(z`N~PNV#W`d!~cIN)>1fB}pNVY0HC`!>5nUkX4IM2|x$4(+u|XcN%xlrD z$e46G$&-9dpUjusH&JO!I3u>@Bq7Zp9}T_W^#r*an`JMEuO&TX)C*VzxS?*yI0K4% zVb?=DhbmQ+I01~pNtko~Z#(}V)F}rp{i>g#Iy+9EZZSpr%&z5_YC{s%So5O zkUH-%0h=-V8Xn!$2N~cnk6N8evpZY#^3vgA*RBp6bD>WI^~@ z5H8)+a!J>_u)$J)x@m%iWh+DGhXe1^`D+QoFg(rhqN`%x{s1PD0vlQvZl^|Z z-d2$8IxpcCNaIyXR8RAA(w$kPI4O4O5|<^Vl*50z+?J^Wq!V$wBfetBMO(hH29|l?f2z?``GKF^5-xNnxRZf{iWeJcVH=As zEXR&!ELwOy1H-d%jMHyJuft*C9ES@)S0bpcShqEyLZA2vuSeRf)~hOCM|}wHxKbVF zh&wG_+s)0Pzx|^zOA5tc`Jv1*@*K z3gz-`^!lIHIyAhsD?OG_hxZITevac&_zrc?C+Zt+f-g0II#u%ABhaCf4PrM& z?&Kk)-#w|&e5qYDs?rH$)eIIh5{FuoFl@aX9Be@nM?htcy!r%)MBSFT37L+(p0-)4DRGm2d<2+XTf<$ zO;NP5z{AK;^fEB2MFZq03tOnf&3H|QGyE185zB(uOI|}PA$~VBipO16f8E;C^~)Ia zUMdZBlT4@cnBGwoc2?>N&#t8kn6^Vp;y;-cvt0ueZV*dN^73%^7CS| zUO1iQ*IL0MBVP%$VUngW+$}s%ho%{AO{?l6KL9fgCZK8M4XGPYJstG74z)I82Iidq z;JP{GnnY_mvZqShlLWg}Z9&Mg5qnSwyP30ft&xQo5(^#cw~g;^A69387wvMQ6haM$ zywCLZG*7%`7+*CvIc(7Ghxd(m=5b-of0dTDlQr`O;W5AvLfJMdI|-PQFaAo zy#{d7g?sZET&I^tt{?-`a1_6#j1*N{?mHP;`u4Zfib!I{t){Dx-T4O>>nNuk(OOXeakY=F=_xSxgMSqbc&F_01>U5E>r$N^ zo20x$euW!RP|B)A<*@q5iZsenID*rj>Eu!d1ekz?k_AfZH(of&LX`sP*rB)TXrOh~ zJM_ML_T&fZ$=Wj5g+knvyj?hac6jK7j5w|7qT%8ze(-JvHU(Z5QF7#^2hA-139`m&gU^Mb7#F4sW-^ z3_aA>p1fELbap0LBP zKA{jUXqEy<2uqZr^PTg+OPeu|{XG7!w{FlFKjMZ_egU^yxdX9%)g63^W9d$;6Jn;E zURoJHglSQ4lN5~b5aLeOgqTdU3=NosQ^8O*&YC}l><0`jjk+wwK|!53p}}Yrv12~O zSEeysjbmON%@$q1VuUN=%z6qCiw54*! zMSYP)V-EHzzTM9JZ|l{vBE=fMtYKwjmmO)CCmz$n@Z5*!UL$m=0Zzptb~$h+P5el~F zQJ4z1B3A^BS`PmVjQ}{Qq*P^TE7qdBEQD~|+zJ@&oQ zX1nU*UP5R`2k&T{^234|?|^@=a?&Yt*p`@SI(<#yRfvIh$Sj`l&TO7t=oXr2)GaWg z0A^hmTISVNPZzWS(-IV%cXjKYL7a;Qs8vOr2TXOBZW~35QB_L*s-Gyl!X3vi3F1NT zUN{1H=nVf^m{PU5D~KN)5l{~X{iZ=Gxw|^sW!R!CGocjQ&_(DTr2}qTbBRZ}bz#vB z!Fjc?(Cob+P_l?Aya=}DZc}-k($MueyJvheuSVVoL%8WVcTfVOFYFQI z_S;u?p!&f=1TeM)PQvTHln=@WwRl)nPRh;btN~4Vg~~}f-mn))r`(0ycuFFKlm!K$ zKeg)<$PW?0lCV9Ft}Nh}qiBt8$E|8G6>P(0+Fd$JaZM|iUHKPRmyG+XawHaY!DWi6 zLN4N%Qe#4krn8bYI4T-3QES}TsbOubHZbv$4g-_I*FUs@Y3b&rB^j4EOXPRYOp{D; zH~~YS&bqyb<*Argc!s!HS0H=K>^i1Nsze1`W`rtJ`YNU)dX3gFL{$Yx|6X$nVIC+f z22Y4eQch5m^>G4dv-;E*W)kA1+1v}xbLJE;G;mSI83Ou8&=LWUijC?DD1+LI*rB_X zUNb>XwE~9D5hyARhIuC0v<#>5Il!hJp<*C<+01ERM4mXzy9(T{(L(c_F&X%%E-p)6@NOH4XG#TG-}AJNsM{`d53y##1_R=_jZ?+RB^RfUd%4LY68WU8uBr_ zTx-Kt;wSN2h!NJqau{whe8&(MvL3+Eurq>3+VZ36Bk3AEa|{Z_)2_Scyw!r6jKHDU z{oAbUC`;qm@h!UeysCytDRDp42$>p?OQcs}hhT9Lbbm5%Uqd%HjkZmTtm@_?$@Sj+ z#niwT%oPFgFK|9s+#TYWy83AbXHPYHgXKN4M(YP*1$tD(H5n@PMdu9a_!OW@v-v1g(_TA-a?!hn~i^C_8Go+eYT4F(<9R z1(g&&Rmi5yMPv3WsB_HjR;UN;^;E1d(3qPejE{b~UB;eKZn)oR?a9AsAb@hMBQfGl z3Nt^(pp$8CsOxS)qJea(UgA*YQfB8u<5ebGp}^tLwwTkj7bo#LIuA?pbKvr%79i|2 z5rl1(E{m3#I7NUd%==gbjpwDYQn3h-{AyMiKK6LKwmCYQ+>aW5!@WY7F!e&BJMI!K zKT1Nnb+K7kWV$yrI=9t+l=`q8!Q#1`Mr&n~9*R-{tILHijn8PUKmHJFg?rV(Yuw8y zZ9P!ReAaqklEed#c6c7H6#%o7TBtjv4xLVG4VWxtg$jxB^1G~l=6Vd{2*Y2g6;>VKd^{bR!Ca}*3RjvXl-5|`$W#l3Qq}-0 z>cU3!rE3T>`igZeRw<6j_{CboX0tF3=nuut^aq|bF|a%<~xfdE_Zl#6Oz_Sl zYAOt{H=NFKC@tW8H~e?QIzEyIFmt~XPx1jYLZf@@H?t1Y5=H{mP z|K|Sw)}FVyv$M6oyScx)wdrkc?e5_B<)Kjg%(Fa5|F(JOw#?4`NuE_msY-LJuO6&C zL6NCLC5Wf!9G_pesJSp}d#nHXPnex1qxmFUZKDAdMOzRvVVSP5f}P5JK-eI&4ly$d z@()JRapjAi9~?}dpa|NO?OO#NlwtJXVC8L)nn}(NR$79awv2CU-uo3`LB{K!S6O28 zRdC;2&4StNB1*&mOxfE5ccp&#)~++6FAr93*38ynOKug9lKtlW&Dz?*3S3YE&4V+E zF^+(dK~^0A{S)uM{`Tk9qa+zmLfVrt{e9ppNMu4jbbd_&G9H) z;_-_gzdzKD+ns4J`v~X1;`9IV5UM!;?`?1G8|VMM&AsOQe=pDb)wdwgCh=-_r@eX} zO~TdgszwK^?Nv&-KPE}O+FccYXRFlBpZFxYeznS<88iC+r-X6zee=u89Dl$wTaC{K1q7e(5%N= z0$`C3kazs{=68f_9*MTLj@skLgp3E`&BdU7c}&RVBk^YPsD1sIkZW1y_d)x&BSL=b zi#KV%{o7+gev@U=LHqJMLM~-nlcVIk5jilYaptfy)s?K@Qx!DnhZDbw)iC>ZJ!#DHpVpaH78 zq0OSI2413~Mzo~@tKJ3?zNsDY4!!^WfA96dyjg}q}238&y(tzo9R?H0_Cc}%AD^&@cEx~qHYRp6Gwta*slx@jM|s`~3X zUFi$0;=EbC^6DHh^(G6BkJU{TpBVK9^wVH9T;l*pfw>NMg#_Y0&+*AK&T7SzW**P} z+incEAL}VN|BX7sd}$Woiu2#@)~;p$-P>u-fA{h*Ic^jVC$J$F2)LyxmsM_f6;Rw# zE^2+Gm}}cd+gL)#xt1|><;K~NDa#@hA8-?tUfETi?Q7A>y@NJD|+Q8}}>xZ(3(I%Zz@={G* ze88L%^X;uz6s${nzO#W!!&sH1Z()0)uq>&1sb(dmjk@sbT8y-za7w6mG6w03y;|~K zvYkh7zE}!hiU~(=%#z4&Z=Iol3#9Yg8eaIs+miY%Y$_`^RaOlYB0rK{qj~B*W%B>B zrmjN%-`d{ZGVMRx4|f~+|301y`w!B=5-mUkEI%P3Pui!1oKo8e)4nU_pQL9Pe4ap! z-+F}n)?)@AtPbUp-hog29WbsO@tTU&2Ftx9f}_^qCzd>k*Rm+F$kwnf93_hQS;63Hi@%B8)I$qZG9cu- z&+IF#-KK$8#sgcCI}6^My~iU62H&yPsgJgo2O=3ertv zgeEdV6B(h2jL<|zXd)vtkrA562u);!CNe_($Oub|b};>D(GHr&e2UNi_Za_Sf76Qp zu-}~j@8zk`|4x@0{{gkXsFB61_)-O25C(!5{ow-yggB{;2Vu0n%*YTYuD}pRdrgRl zPa;IbNfRNWi4f65h-e~2G!Y`22oX($h$ceBU+dA%f4HqJIrx7K`|r;7wsHR3*?YLt zod53Q`5^KCe+-8Sha=9MdhL!L#uCbJeE#{0_qlfz(kwzWy~{MrvS1v_{I}0hW}+V<;cjQe z!)iP?G<@)r5zimyDlQV{hUc(row6qQ&WSIL=2=QJ35O>dI#1^Dhyqp9z-YDM^TvuW z*^WcH*RpmWrO6br9B|ZIq7!WcM{di_t|Hi5WI_JH!z|!g=$^ig-cIMoAP>Kfrcpk4 zHw?p3IO+-@O5PV`2CL((c3d0L!7Xs}llf%yLz4HyG(Qj4T{4sh(T)QSW?L-7|}F! z!9+`hiPTI1>z(DztCw$ZTGIJ2Ptq1!4sAq0rPypf3&rO(ITe^GmI+(%pYbKGaccM0 zbtE6~NrQiJ+C0oC2wW$Ky$FeD81e*8j@j(6D!iu3cz8~F{GBJT)DesVwj=7P{9=K2 zHz)_lgFG5S1IMf?Wd`c7LW(e!B#V^+=oO1k1>h+ekvXS;GVJW4A=w#+`Hxm9hSY%r zWT@~!@31ac>oA^ACT5)nX*i_`uAfKK5Yu9ofms;gjs~Bi zAJ3<+!_-3m0ozzU01{k0Jk&Ejy10w}l73Kn(5>IuwgriyQ4WLezFO^@5)LNTgOqcM zjt<)21(s!bY;DZSi#`SC|D_IO`T2iqYis+V<^R3g-2b_k$7%nSbWqFq%ZgV={wMAE zfE>@!y!+NitL=CIe_RX>@Hrxt1_+_TC{}FgZ9TgS-dH z1kPyj0U?8fGkMJ?@xj81COvx91yhkYnGpyh@f#=!}oPJ72~+owR<%5GKW8W-Lyf!u%5g8R!^zjocIX7&p zD7=NDGoLzJNDQ2npy*fCSm19QXAPf+eaZ-GH1e)yBeD?knE~&wr|W2JYDVrtdGrUK+Woa`PeREK@$6csZ*#Vi&w)2t!zqA6RaCkZ22T>cs7BXJ-VOqWfaPto~l*0NPg#zIXxgRXWh+(kPp;#Y-0IfKT?t|# ztuC*2s>h(vN67z*3ED6M*B1L1_w3UyYeTHD=C1Zq?`q%bR`ybEV&C!3b#u@9zK*QT zb?Z;_fLnRp`py8f1=l82XIwYXno*nuvF8qTb=m(ist+KU>Amm zCHIA+>ifdOlIz0J2e~eMN-O=f?+m~Ah*yTAd%rSV-r~o+GVEF%&5hx|){Wujl5lfL zxVa?UToP_B2{)I7n@hsYCE@0haC1qxxg^|N5^gRD|3x27{~N`l@ZHkWKUDeu?AZQ) zJ39}X_>cGU==mQYN&J8QGfcxE4|`Dza)Wp1wLtoX{Q{+6Po$A= zC2eoo_AcArd(noSyX%SWu6ge{*PH%)`Rjpq!_7O?wBydOk-+e@v6VH*$m(_P zI)cg1m)npM7Li!NtgLi$>1pg)9;A+$l^=0h1q#!)#{%?n49=6(YXQU=4DoagQJUe# zyvk0%s{r^j*5O&2L8u%_S0n0{zfu?zHU`Ffbw5jU5L6!^mPt7S{z^Xg^m8A&6?u3&L ziX))%)s`}+%x;PkDj94+kaHoME%)k+TmD;a8x`{3*8aX_|KDojf8WpJwEqh_sAc}A zr7NO;>kqmEOdpY>E3j)n%6&}WOWM0V%;Wq-W^La74&HD3glzl#eelqS$jZmRfqDFK z+`~M+gjx%E)pJZ6Ot?9fzkcIm5@JG)ne6T0f@YAu?v-Ws#nW{e)4@aV0(@Vwh?Q^8 zphIRzp!p3kA!-s?$UMuA-~VayKiAIY=EyUK8%RQBc4t^G6jIEff6|l4# z{Hzu;tI5e0VPlK&uv!eP4);<>xX};J^>iFznPprpdvmM?vIGS=i?ukAPD^J zm>Z@46MFt$VTE@+?%OyZe%h1%!64gDeL|-AN9?zM^9lJ4|49AzrccNw{;}n^cYQ*3 z@sB;D&ZSStCE^lOH{UV3;J)c8$cNOY)<4(V#uLR6ycTZCfZu)(4;G)QvCFysmmB`+ zR`TEWUbFu1KX* zZup-@{`)J*f6EU4Q@Q?kcP;;)-Oa6L{olv4eEIKI;@>jlk`E!4Ec+_-C-=D5|NYv3 z_a0jLpSSiK{r|l@CHsHf>)%V+{RjH)|LUDzbH^PN?YNC8w=w1ZPnmLW^=SNmlE9Un zr8|IE$$t-bP5+;rz1=4N!@WGZ|M!yoYN`J&E%-gsl;YnyOA}~Byyp(B^xED$k0yrm zqr5JTAL}?j+6XM{*2fTW^o6_iQH1MzY!(ebYqM>%_Easg)>1tThk_OT5KO}&XF<7; zt0cLC^?#4?e>OKCZdvi4cN+hX`+1!5pQM9Y0w611;Q>gvBj4uWfRNKSgZA`@{P0_^ zy-7o)JRzqkh;ZNSP;b0_40&_mLl_N017`40Gz0_eOhJSsKGq+~2rH!_EIh{oYkLlU zWyh+(C2B;c&{tz|C<=ZB9yx}&{v9Z_%w?_sdGAE`w&H|q{oix`$IYFcO>_T$*qs0F z=h@iU@V-vN^Dqq|BmfG@hpVIT^?bbQZG5w0EF9Mwu{P)fD;Vw$1gwySLNWf9~Ze+yCo30M(HIR3#9Z_hj-17TE6! zHvi+T0cd-k&`4&u>BIJ(`6341n}HGrOND`Z|HnU2|H&Tr`oGuwZ_fSyVdMXEFVA0Y z|8Lw#7J3TT|3}{c_Zt1*y*%ane_aQVX8-@QKCbnD&-tG=!P%qH|9_n4wu&*wreC2I zD|XAcy;|%pqQYO^wWHQku>S8;|G%}lWyk;DYUKZWdCK9*zHt3&YE8qe}kU+B5zC zc6PTL`_H{ROZES7id%xH8fohjeBA5*KK*~Uwl}x7E&tz#&H3+M9;f^#14q;m|7htl z>90(vVi!Mu3@H-|N5a|EAw|6ovT%K?}Hz(|I1g zJC5@(Jr9Obhz+vqc(^`=kDAo0dp&Cow4Nalx7`l9Rbn!>;Pje?0ImQt8u2s{7?1iQ z$S#x@Hx{rW|7;FVhRJ^p#glU{!{%AEdloJ~RinNKTIajQU>um?_aXRv4AIx2o|n@J z!(n&=H9bHIzcDm{;)C-%OffwDGX)zx4E}Qn|BAbK=7FJxr}a=k;mb7ht}enDpj~_8 z#LF+zWIn#2(3!imC;g?p^GR~0b~n~Yt!t2;)m_@Dp}g4>jc9ML!q+=E1fw9kz}AWf z^;n%{dpMIB%UCi_lld$hS+%WkfX>2Lcvn$=AqdlpDP^jNFp$K6_-!dd2pVFsPrM}c zj{CI7j=94opmaqK6@aCnD6wLug#nbd*22byhaAvYV%0Hi0s7M*&7)xQbL*&5fB7Z;M$6qNq+~A= zA|`~M=lmlcBQG0;;?InWBZ(A81UpmGk>No9q_CAF{aRyg-$3$#X+$a4ExH>Ouv-rp zYA>Vw;v~F&VD`u*E-3-t*_Avi3E@;sJIz)k|IQO&usA9h&0o&CmY6WZy=t9h0E=Kx zX73=4TbO%ETv|UAGqJAjHHn76lBT7`oke@DP>2x2(yh0MEWzox{?MoyoWgIrLei;Z zHQ!jR4wg8WN|Gy{ck*?bTxDUp&Ue=^_5N=X#h2bip3k!G#>P0xFXpd1!(_SvV#X<+ zXst?0pT+EV%h!-Cn6eX+DLzBTd0s(E%9SSzvzNwEv2z+kaUACAF@%2kwriG^qApvd zL|zID--W|D2%;eNL-I0jI?w09WOD6=?}n3k1~LtB_BNKl>R2Xx=cVB!3_uKzVlT=w zcIfb42V-l2v!bwxcEmHFL_48gQKaU@`$g^y?qPY(B|hiL`KyC@sNp zy6c&5yT+lu^CRm94AYu-_>K28O{P&6a?sk)q1cCM8Rx0UF^I?StBYuO0rImV$pd9$ z5=lrrsmq>DX5ClL@gMMfEY6dKCswn0L!y;}wJH3oEue-)Pfw}}wR#H%{+Q}Bh*IY{ z6*IJ1EkOrP!t19&lp2S;#`^a^`Z)Ce_Z5ttw^^N8@y8ibT~x zzRMNuG*6k-P~zX3svQz})m5{vFy+z;*DaMQ+F7X${J%ogZb4q2D8WEV$RAMIu64OW z-EMYy5p{dX&>kC;Z4Bzt748};l`3}^N;OpOS|f(iy#izfutK%Fxi0D?kE^9+H}PFW z$F8AnXxLrjP_12et&XMW)*Yiw7;p3j8tqdpd??Zp&?&vF={&TGKKg(3<+0QFQ)x=jfsF%EGt#1ylZ1! zrQyECz!j>tZ==^PQfj+3+TR?k;38hGE_(&m^1_8;J(p|0Lq-y9d$To=d?%NR{f99XvQTI+Xh?RC+y<4)S^ zqMjD$uXV}3P=gKoHe02)S6;8w(_QQ9dm+uWwP@<;tu>{!2RdsUj#^6V6}QfskJfVZ z)ozB|R}aG<^pGhJWHk?ci|MSjR!X$iu2vS;TidOJYGIPJ1; zH1zP3UFf{JSs$mLjmMEX9xUMa5%G5z6(A~XnDDop1GOQX-~zPI_3;wF?mx2;@~UUw>&cuOvgTqlJ(A=jpy{rG<_xq-h#Ux8dU0 zkYYh7_1kmALabk%&gkoB@AB5>M~pXc_NS`D{DMrj1V;`p^+t>>jT%DYA+Qz0P*I=n zeX$a?=vxm{%c4qT2==Z;acQ26s2&R$u{mV(TLU4esS`CO$U>ZGGp_p%voihJdf~ZC zMX~F2#Cxz>2>QN*&trgGQqBRGP22g6#9{rjs(|iwZM&IwKwgoc(nJ8hGKzPBM0D$2u*jSWv3uXs>rz|VG0*e` znl=K!M+t4qtiA;pasmCq?+Vl4Fb6ykK3~`bx`M==pd%Gb{J-4IgTT*$9>F5HD?4uF zvez)+^Fuc#1`$zU!&d|A;#l+RqIX;JN1cpl{eX(t!cjLTB^mNSHywq(*RGBi#whO; zQ52t%kC>GZ6o*I(=KYPDB~1;c;l+=QNb@Hjt0|i6kv}Y{2;L!D89m=*$?tU(Hh;ud zC2#I^rmkIyrtz-REET(855U9R0uFT~ubLC>}K5@Z|STEr|XlF?TF3oTn$fU<#`q`s5aZaR>=}L8^!QxL(zgkjK1%D0U#GQkqQhY4vxsku8|} zcN1-hx>`wj=!LpI3{0kNWd&JChNLv-q5oW7)DPg}5*8N1smsyXcFn>mJL&SUx_l}= zpJ1HN{sNu(p{KmJC23VpnM*w8mF%1y5erupx5#!WZxk(qr%g%VIu1f(8n%V+dHeVU z*DT-uN6gPWVMgFL3wgvLHkS}iT7nif%k&PXqdkc@-rx|=pUsi44%9%MaIm#z$qINg zEFN>8t+mxTKiP@yPFNu!Lc@7*;?z)i7X}VFwCIvQ%UHKOFawkAW6Swgqd#kBL~#)K zahin>S-c{5owBsI|51IjpPEKp#gS0zPZDbg zO}JFmXy8<_!veF?Mlbu)_7WE>yN@#JUnsWbD3Z_+-KB{DZG9tbHdMi$f>d$zmn(7} zOzt|3EvhMz+!3Y(7%^JvA9?l%4JEF6-!PD*dr0`R#_3txYPF!y!1@7UXZmymH$gsZ zJ88rr9~Fpg>R#k6Uw-F^P(Q;j@QE0nJ3o7f%gn@@h$1iC7UyRY!-wU;DxXTPExqBc zL@x_CNlQswjA_z2burThxpgQ(sUx#jn=nu>gLXgOY_9C<;T3CX#f>hmsY-e|BZmFz zEQ!AQlJ}Goj58}BlHzbG!MmMnK1i$S;ykk?`AQ*D?Y}x~*g3nYNGbj+ZVtk%66%n` zF;6=!6?mYjogIo}{oV0r`lfNmKIFyQ> zB;PM(N;?Pw7LJKZ@1HNIpBg-S@~GD{ngREUMlJR(6ZO<0@USZn)>FQ`2@EPJl_FSi Gk$(VT{8u9Y From e1a9ea1bd8aacaa327de5f8e7572ba1a6fc5ec67 Mon Sep 17 00:00:00 2001 From: lwin Date: Tue, 20 May 2025 15:37:02 +0800 Subject: [PATCH 115/147] feat: updated toprf-secure-backup sdk --- .../package.json | 4 +-- .../src/SeedlessOnboardingController.ts | 14 +++++--- .../src/index.ts | 1 + .../src/types.ts | 32 +++++++++++++++++++ yarn.lock | 22 ++++++------- 5 files changed, 56 insertions(+), 17 deletions(-) diff --git a/packages/seedless-onboarding-controller/package.json b/packages/seedless-onboarding-controller/package.json index d91d5a6f26..4889dfb9f3 100644 --- a/packages/seedless-onboarding-controller/package.json +++ b/packages/seedless-onboarding-controller/package.json @@ -47,9 +47,9 @@ "since-latest-release": "../../scripts/since-latest-release.sh" }, "dependencies": { - "@metamask/auth-network-utils": "^0.1.0", + "@metamask/auth-network-utils": "^0.2.0", "@metamask/base-controller": "^8.0.1", - "@metamask/toprf-secure-backup": "^0.1.0", + "@metamask/toprf-secure-backup": "^0.2.0", "@metamask/utils": "^11.2.0", "async-mutex": "^0.5.0" }, diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index e38665e6bd..a1f15500c4 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -1,6 +1,7 @@ import { keccak256AndHexify } from '@metamask/auth-network-utils'; import type { StateMetadata } from '@metamask/base-controller'; import { BaseController } from '@metamask/base-controller'; +import { keyFromPassword } from '@metamask/browser-passworder'; import type { KeyPair, NodeAuthTokens, @@ -13,6 +14,7 @@ import { stringToBytes, remove0x, bigIntToHex, + bytesToString, } from '@metamask/utils'; import { secp256k1 } from '@noble/curves/secp256k1'; import { Mutex } from 'async-mutex'; @@ -139,12 +141,14 @@ export class SeedlessOnboardingController extends BaseController< * @param options.messenger - A restricted messenger. * @param options.state - Initial state to set on this controller. * @param options.encryptor - An optional encryptor to use for encrypting and decrypting seedless onboarding vault. + * @param options.toprfKeyDeriver - An optional key derivation interface for the TOPRF client. * @param options.network - The network to be used for the Seedless Onboarding flow. */ constructor({ messenger, state, encryptor, + toprfKeyDeriver, network = Web3AuthNetwork.Mainnet, }: SeedlessOnboardingControllerOptions) { super({ @@ -160,6 +164,7 @@ export class SeedlessOnboardingController extends BaseController< this.#vaultEncryptor = encryptor; this.toprfClient = new ToprfSecureBackup({ network, + keyDeriver: toprfKeyDeriver, }); // setup subscriptions to the keyring lock event @@ -227,7 +232,7 @@ export class SeedlessOnboardingController extends BaseController< }); return authenticationResult; } catch (error) { - log('Error authenticating user', error); + console.log('Error authenticating user', error); throw new Error(SeedlessOnboardingControllerError.AuthenticationError); } }); @@ -252,9 +257,10 @@ export class SeedlessOnboardingController extends BaseController< return await this.#withControllerLock(async () => { // locally evaluate the encryption key from the password - const { encKey, authKeyPair, oprfKey } = this.toprfClient.createLocalKey({ - password, - }); + const { encKey, authKeyPair, oprfKey } = + await this.toprfClient.createLocalKey({ + password, + }); // encrypt and store the seed phrase backup await this.#encryptAndStoreSeedPhraseBackup({ diff --git a/packages/seedless-onboarding-controller/src/index.ts b/packages/seedless-onboarding-controller/src/index.ts index f078f4a18a..5d46d82f39 100644 --- a/packages/seedless-onboarding-controller/src/index.ts +++ b/packages/seedless-onboarding-controller/src/index.ts @@ -12,6 +12,7 @@ export type { SeedlessOnboardingControllerStateChangeEvent, SeedlessOnboardingControllerActions, SeedlessOnboardingControllerEvents, + ToprfKeyDeriver, } from './types'; export { Web3AuthNetwork, diff --git a/packages/seedless-onboarding-controller/src/types.ts b/packages/seedless-onboarding-controller/src/types.ts index 3dd851497a..a61ac12c37 100644 --- a/packages/seedless-onboarding-controller/src/types.ts +++ b/packages/seedless-onboarding-controller/src/types.ts @@ -139,6 +139,26 @@ export type VaultEncryptor = Omit< 'encryptWithKey' >; +/** + * Additional key deriver for the TOPRF client. + * + * This is a function that takes a seed and salt and returns a key in bytes (Uint8Array). + * It is used as an additional step during key derivation. This can be used, for example, to inject a slow key + * derivation step to protect against local brute force attacks on the password. + * + * @default browser-passworder @link https://github.com/MetaMask/browser-passworder + */ +export type ToprfKeyDeriver = { + /** + * Derive a key from a seed and salt. + * + * @param seed - The seed to derive the key from. + * @param salt - The salt to derive the key from. + * @returns The derived key. + */ + deriveKey: (seed: Uint8Array, salt: Uint8Array) => Promise; +}; + /** * Seedless Onboarding Controller Options. * @@ -161,6 +181,18 @@ export type SeedlessOnboardingControllerOptions = { */ encryptor: VaultEncryptor; + /** + * Optional key derivation interface for the TOPRF client. + * + * If provided, it will be used as an additional step during + * key derivation. This can be used, for example, to inject a slow key + * derivation step to protect against local brute force attacks on the + * password. + * + * @default browser-passworder @link https://github.com/MetaMask/browser-passworder + */ + toprfKeyDeriver?: ToprfKeyDeriver; + /** * Type of Web3Auth network to be used for the Seedless Onboarding flow. * diff --git a/yarn.lock b/yarn.lock index ac8ba8e1e9..c980c5a07e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2628,9 +2628,9 @@ __metadata: languageName: unknown linkType: soft -"@metamask/auth-network-utils@npm:^0.1.0": - version: 0.1.0 - resolution: "@metamask/auth-network-utils@npm:0.1.0" +"@metamask/auth-network-utils@npm:^0.2.0": + version: 0.2.0 + resolution: "@metamask/auth-network-utils@npm:0.2.0" dependencies: "@noble/curves": "npm:^1.8.1" "@noble/hashes": "npm:^1.7.1" @@ -2641,7 +2641,7 @@ __metadata: elliptic: "npm:^6.6.1" json-stable-stringify: "npm:^1.2.1" loglevel: "npm:^1.9.2" - checksum: 10/5becc59a4fbb76be0411a50118ca67bbf9d15dcf3552062c6c873dd1662a2f1ff438a7c0afa3f9112a7a539a0c1e5a5d853bf69b3e35219ac54889cefb895d9c + checksum: 10/f20bc5d4e2a07d3186d81128b2d9e0d38bd42f65aebe14fb796078f0b2209c297068c852deb7811d4e7243fad7bc091d956f06e537d201a3f8e0b906ee10e08b languageName: node linkType: hard @@ -4259,12 +4259,12 @@ __metadata: dependencies: "@lavamoat/allow-scripts": "npm:^3.0.4" "@lavamoat/preinstall-always-fail": "npm:^2.1.0" - "@metamask/auth-network-utils": "npm:^0.1.0" + "@metamask/auth-network-utils": "npm:^0.2.0" "@metamask/auto-changelog": "npm:^3.4.4" "@metamask/base-controller": "npm:^8.0.1" "@metamask/browser-passworder": "npm:^4.3.0" "@metamask/keyring-controller": "npm:^21.0.6" - "@metamask/toprf-secure-backup": "npm:^0.1.0" + "@metamask/toprf-secure-backup": "npm:^0.2.0" "@metamask/utils": "npm:^11.2.0" "@noble/ciphers": "npm:^0.5.2" "@noble/curves": "npm:^1.2.0" @@ -4507,11 +4507,11 @@ __metadata: languageName: unknown linkType: soft -"@metamask/toprf-secure-backup@npm:^0.1.0": - version: 0.1.0 - resolution: "@metamask/toprf-secure-backup@npm:0.1.0" +"@metamask/toprf-secure-backup@npm:^0.2.0": + version: 0.2.0 + resolution: "@metamask/toprf-secure-backup@npm:0.2.0" dependencies: - "@metamask/auth-network-utils": "npm:^0.1.0" + "@metamask/auth-network-utils": "npm:^0.2.0" "@noble/ciphers": "npm:^1.2.1" "@noble/curves": "npm:^1.8.1" "@noble/hashes": "npm:^1.7.1" @@ -4521,7 +4521,7 @@ __metadata: "@toruslabs/fetch-node-details": "npm:^15.0.0" "@toruslabs/http-helpers": "npm:^8.1.1" bn.js: "npm:^5.2.1" - checksum: 10/ef6d1cfabe13b793807398c1bd00a27c0eb20f84411d54425da49c5742dffee83b3cf0d12daa7af170d4175eeca4b2eceecbf1465992ba3a35f4ace77d49e4c1 + checksum: 10/8d0f04e4327f67169d3758db6d45285448239689d35b7371475157bd2e14ebfd82e61451bf60e4c1dcdc17750efbc030636211b9df0c1e769710354cf1e4c8c6 languageName: node linkType: hard From 7c0c40309754c29b434d744ce690b4366ec3e31b Mon Sep 17 00:00:00 2001 From: lwin Date: Tue, 20 May 2025 15:37:24 +0800 Subject: [PATCH 116/147] test: updated tests --- .../src/SeedlessOnboardingController.test.ts | 38 +++++++++++++++++- .../src/SeedlessOnboardingController.ts | 4 +- .../toprf-secure-backup.tgz | Bin 110220 -> 0 bytes 3 files changed, 38 insertions(+), 4 deletions(-) delete mode 100644 packages/seedless-onboarding-controller/toprf-secure-backup.tgz diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts index 0791c0bd89..e78d699fd7 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts @@ -208,7 +208,7 @@ function mockcreateLocalKey(toprfClient: ToprfSecureBackup, password: string) { const oprfKey = BigInt(0); const seed = stringToBytes(password); - jest.spyOn(toprfClient, 'createLocalKey').mockReturnValue({ + jest.spyOn(toprfClient, 'createLocalKey').mockResolvedValueOnce({ encKey, authKeyPair, oprfKey, @@ -472,6 +472,42 @@ describe('SeedlessOnboardingController', () => { }), ).not.toThrow(); }); + + it('should be able to instantiate with a toprfKeyDeriver', async () => { + const deriveKeySpy = jest.fn(); + const MOCK_PASSWORD = 'mock-password'; + + const keyDeriver = { + deriveKey: (seed: Uint8Array, salt: Uint8Array) => { + deriveKeySpy(seed, salt); + return Promise.resolve(new Uint8Array()); + }, + }; + + await withController( + { + toprfKeyDeriver: keyDeriver, + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + }), + }, + async ({ controller, toprfClient }) => { + // persist the local enc key + jest.spyOn(toprfClient, 'persistLocalKey').mockResolvedValueOnce(); + // encrypt and store the secret data + const mockSecretDataAdd = handleMockSecretDataAdd(); + + await controller.createToprfKeyAndBackupSeedPhrase( + MOCK_PASSWORD, + MOCK_SEED_PHRASE, + MOCK_KEYRING_ID, + ); + + expect(mockSecretDataAdd.isDone()).toBe(true); + expect(deriveKeySpy).toHaveBeenCalled(); + }, + ); + }); }); describe('authenticate', () => { diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index a1f15500c4..e087715d62 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -1,7 +1,6 @@ import { keccak256AndHexify } from '@metamask/auth-network-utils'; import type { StateMetadata } from '@metamask/base-controller'; import { BaseController } from '@metamask/base-controller'; -import { keyFromPassword } from '@metamask/browser-passworder'; import type { KeyPair, NodeAuthTokens, @@ -14,7 +13,6 @@ import { stringToBytes, remove0x, bigIntToHex, - bytesToString, } from '@metamask/utils'; import { secp256k1 } from '@noble/curves/secp256k1'; import { Mutex } from 'async-mutex'; @@ -232,7 +230,7 @@ export class SeedlessOnboardingController extends BaseController< }); return authenticationResult; } catch (error) { - console.log('Error authenticating user', error); + log('Error authenticating user', error); throw new Error(SeedlessOnboardingControllerError.AuthenticationError); } }); diff --git a/packages/seedless-onboarding-controller/toprf-secure-backup.tgz b/packages/seedless-onboarding-controller/toprf-secure-backup.tgz deleted file mode 100644 index 779c7a6f4428e068082355564770c69e8d9f5065..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110220 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 w_?7s8y Date: Tue, 20 May 2025 18:15:53 +0800 Subject: [PATCH 117/147] docs: updated changelog --- packages/seedless-onboarding-controller/CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/seedless-onboarding-controller/CHANGELOG.md b/packages/seedless-onboarding-controller/CHANGELOG.md index d140dc32fd..c305a5bcdf 100644 --- a/packages/seedless-onboarding-controller/CHANGELOG.md +++ b/packages/seedless-onboarding-controller/CHANGELOG.md @@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Updated + +- Updated `toprf-secure-backup` to `0.2.0`. ([#13](https://github.com/Web3Auth/core/pull/13)) + - added an optional constructor param, `topfKeyDeriver` to assist the `Key derivation` in `toprf-seucre-backup` sdk and adds an additinal security + ### Added - Initial implementation of the seedless onboarding controller. ([#5671](https://github.com/MetaMask/core/pull/5671)) From 3119075e53ebe923f6e8c48084810a2a091c3397 Mon Sep 17 00:00:00 2001 From: lwin Date: Tue, 20 May 2025 18:19:03 +0800 Subject: [PATCH 118/147] fix: fixed changelog --- packages/seedless-onboarding-controller/CHANGELOG.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/seedless-onboarding-controller/CHANGELOG.md b/packages/seedless-onboarding-controller/CHANGELOG.md index c305a5bcdf..e621033e2c 100644 --- a/packages/seedless-onboarding-controller/CHANGELOG.md +++ b/packages/seedless-onboarding-controller/CHANGELOG.md @@ -7,12 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] -### Updated +### Added - Updated `toprf-secure-backup` to `0.2.0`. ([#13](https://github.com/Web3Auth/core/pull/13)) - - added an optional constructor param, `topfKeyDeriver` to assist the `Key derivation` in `toprf-seucre-backup` sdk and adds an additinal security -### Added + - added an optional constructor param, `topfKeyDeriver` to assist the `Key derivation` in `toprf-seucre-backup` sdk and adds an additinal security - Initial implementation of the seedless onboarding controller. ([#5671](https://github.com/MetaMask/core/pull/5671)) - Authenticate OAuth user using the seedless onboarding flow and determine if the user is already registered or not From fefb8a9ffc94b5361e271dd028d431d461aa8ed5 Mon Sep 17 00:00:00 2001 From: lwin Date: Wed, 21 May 2025 14:44:04 +0800 Subject: [PATCH 119/147] feat: updated authenticate method params --- package.json | 3 ++- .../package.json | 2 +- .../seedless-onboarding-controller.tgz | Bin 65658 -> 0 bytes .../src/SeedlessOnboardingController.ts | 21 +++++------------- yarn.lock | 14 ++++++------ 5 files changed, 15 insertions(+), 25 deletions(-) delete mode 100644 packages/seedless-onboarding-controller/seedless-onboarding-controller.tgz diff --git a/package.json b/package.json index b9f75c1df6..a0a0a4481c 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,8 @@ "resolutions": { "elliptic@6.5.4": "^6.5.7", "fast-xml-parser@^4.3.4": "^4.4.1", - "ws@7.4.6": "^7.5.10" + "ws@7.4.6": "^7.5.10", + "@metamask/auth-network-utils": "file:./packages/seedless-onboarding-controller/auth-network-utils.tgz" }, "devDependencies": { "@babel/core": "^7.23.5", diff --git a/packages/seedless-onboarding-controller/package.json b/packages/seedless-onboarding-controller/package.json index 4889dfb9f3..85810c5998 100644 --- a/packages/seedless-onboarding-controller/package.json +++ b/packages/seedless-onboarding-controller/package.json @@ -49,7 +49,7 @@ "dependencies": { "@metamask/auth-network-utils": "^0.2.0", "@metamask/base-controller": "^8.0.1", - "@metamask/toprf-secure-backup": "^0.2.0", + "@metamask/toprf-secure-backup": "./toprf-secure-backup.tgz", "@metamask/utils": "^11.2.0", "async-mutex": "^0.5.0" }, diff --git a/packages/seedless-onboarding-controller/seedless-onboarding-controller.tgz b/packages/seedless-onboarding-controller/seedless-onboarding-controller.tgz deleted file mode 100644 index 313ca97a96b906742ae99ccd2c30e0775f7b50ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65658 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 z 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 extends BaseController< authConnection, socialLoginEmail, } = params; - const hashedIdTokenHexes = idTokens.map((idToken) => { - return remove0x(keccak256AndHexify(stringToBytes(idToken))); - }); + const authenticationResult = await this.toprfClient.authenticate({ - authConnectionId: groupedAuthConnectionId || authConnectionId, + authConnectionId, userId, - idTokens: hashedIdTokenHexes, - groupedAuthConnectionParams: { - authConnectionId, - idTokens, - }, + idTokens, + groupedAuthConnectionId, }); // update the state with the authenticated user info this.update((state) => { diff --git a/yarn.lock b/yarn.lock index c980c5a07e..fedd242bdd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2628,9 +2628,9 @@ __metadata: languageName: unknown linkType: soft -"@metamask/auth-network-utils@npm:^0.2.0": +"@metamask/auth-network-utils@file:./packages/seedless-onboarding-controller/auth-network-utils.tgz::locator=%40metamask%2Fcore-monorepo%40workspace%3A.": version: 0.2.0 - resolution: "@metamask/auth-network-utils@npm:0.2.0" + resolution: "@metamask/auth-network-utils@file:./packages/seedless-onboarding-controller/auth-network-utils.tgz#./packages/seedless-onboarding-controller/auth-network-utils.tgz::hash=4aa17c&locator=%40metamask%2Fcore-monorepo%40workspace%3A." dependencies: "@noble/curves": "npm:^1.8.1" "@noble/hashes": "npm:^1.7.1" @@ -2641,7 +2641,7 @@ __metadata: elliptic: "npm:^6.6.1" json-stable-stringify: "npm:^1.2.1" loglevel: "npm:^1.9.2" - checksum: 10/f20bc5d4e2a07d3186d81128b2d9e0d38bd42f65aebe14fb796078f0b2209c297068c852deb7811d4e7243fad7bc091d956f06e537d201a3f8e0b906ee10e08b + checksum: 10/0621f133c97f180a91ca442b2f4113bc7885b300f5c4e00acde818db3bb26c8da5e88f183d29deeca3e47cff08b2890073cae2ecc9b81a97da03fa03b55e53a5 languageName: node linkType: hard @@ -4264,7 +4264,7 @@ __metadata: "@metamask/base-controller": "npm:^8.0.1" "@metamask/browser-passworder": "npm:^4.3.0" "@metamask/keyring-controller": "npm:^21.0.6" - "@metamask/toprf-secure-backup": "npm:^0.2.0" + "@metamask/toprf-secure-backup": ./toprf-secure-backup.tgz "@metamask/utils": "npm:^11.2.0" "@noble/ciphers": "npm:^0.5.2" "@noble/curves": "npm:^1.2.0" @@ -4507,9 +4507,9 @@ __metadata: languageName: unknown linkType: soft -"@metamask/toprf-secure-backup@npm:^0.2.0": +"@metamask/toprf-secure-backup@file:./toprf-secure-backup.tgz::locator=%40metamask%2Fseedless-onboarding-controller%40workspace%3Apackages%2Fseedless-onboarding-controller": version: 0.2.0 - resolution: "@metamask/toprf-secure-backup@npm:0.2.0" + resolution: "@metamask/toprf-secure-backup@file:./toprf-secure-backup.tgz#./toprf-secure-backup.tgz::hash=51e2bb&locator=%40metamask%2Fseedless-onboarding-controller%40workspace%3Apackages%2Fseedless-onboarding-controller" dependencies: "@metamask/auth-network-utils": "npm:^0.2.0" "@noble/ciphers": "npm:^1.2.1" @@ -4521,7 +4521,7 @@ __metadata: "@toruslabs/fetch-node-details": "npm:^15.0.0" "@toruslabs/http-helpers": "npm:^8.1.1" bn.js: "npm:^5.2.1" - checksum: 10/8d0f04e4327f67169d3758db6d45285448239689d35b7371475157bd2e14ebfd82e61451bf60e4c1dcdc17750efbc030636211b9df0c1e769710354cf1e4c8c6 + checksum: 10/ec04194eedcf6a02142524fa7f4962cf224b2abce546054f6dc1476064eb934089fa58bd8923e773f4ff7ac73e93b2a87c6c5629fb23f9b2685025c42cb6d288 languageName: node linkType: hard From 1c8c271a8993b5704112bfbc7906ace9a552910f Mon Sep 17 00:00:00 2001 From: Nguyen Anh Tu Date: Wed, 21 May 2025 13:56:28 +0700 Subject: [PATCH 120/147] feat: add changelog --- packages/seedless-onboarding-controller/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/seedless-onboarding-controller/CHANGELOG.md b/packages/seedless-onboarding-controller/CHANGELOG.md index d140dc32fd..a7d98f896f 100644 --- a/packages/seedless-onboarding-controller/CHANGELOG.md +++ b/packages/seedless-onboarding-controller/CHANGELOG.md @@ -16,5 +16,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add array of new seed phrase backups to the metadata store in batch (useful in multi-srp flow) - Fetch seed phrase metadata from the metadata store - Update the password of the seedless onboarding flow + - checkIsPasswordOutdated to check current password is outdated compare to global password + - Add password outdated check to add SRPs / change password + - recover old password using latest global password + - sync latest global password to reset vault to use latest password and persist latest auth pubkey [Unreleased]: https://github.com/MetaMask/core/ From a8373d23c3cb9712599911b5280e6c1b2c12e2cd Mon Sep 17 00:00:00 2001 From: Nguyen Anh Tu Date: Wed, 21 May 2025 14:04:52 +0700 Subject: [PATCH 121/147] feat: add test case for add new srp password outdated --- .../src/SeedlessOnboardingController.test.ts | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts index 0791c0bd89..659a875606 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts @@ -1378,6 +1378,30 @@ describe('SeedlessOnboardingController', () => { }, ); }); + + it('should throw an error if password is outdated', async () => { + await withController( + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + authPubKey: MOCK_AUTH_PUB_KEY_OUTDATED, + vault: MOCK_VAULT, + vaultEncryptionKey: MOCK_VAULT_ENCRYPTION_KEY, + vaultEncryptionSalt: MOCK_VAULT_ENCRYPTION_SALT, + }), + }, + async ({ controller, toprfClient }) => { + mockFetchAuthPubKey(toprfClient, base64ToBytes(MOCK_AUTH_PUB_KEY)); + await controller.submitPassword(MOCK_PASSWORD); + await expect( + controller.addNewSeedPhraseBackup( + NEW_KEY_RING_1.seedPhrase, + NEW_KEY_RING_1.id, + ), + ).rejects.toThrow(SeedlessOnboardingControllerError.OutdatedPassword); + }, + ); + }); }); describe('fetchAndRestoreSeedPhrase', () => { From 61b9a6663deec4e48ea6f4ad13c820dbc98ea83a Mon Sep 17 00:00:00 2001 From: Nguyen Anh Tu Date: Wed, 21 May 2025 14:22:34 +0700 Subject: [PATCH 122/147] feat: correct single lock utilization --- .../src/SeedlessOnboardingController.test.ts | 16 +++-- .../src/SeedlessOnboardingController.ts | 64 +++++++++++++------ 2 files changed, 55 insertions(+), 25 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts index 659a875606..42dbc2d0fa 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts @@ -2800,7 +2800,9 @@ describe('SeedlessOnboardingController', () => { }); // Assertions - expect(verifyPasswordSpy).toHaveBeenCalledWith(OLD_PASSWORD); + expect(verifyPasswordSpy).toHaveBeenCalledWith(OLD_PASSWORD, { + skipLock: true, // skip lock since we already have the lock + }); expect(recoverEncKeySpy).toHaveBeenCalledWith( expect.objectContaining({ password: GLOBAL_PASSWORD }), ); @@ -2855,7 +2857,9 @@ describe('SeedlessOnboardingController', () => { }), ).rejects.toThrow('Incorrect old password'); - expect(verifyPasswordSpy).toHaveBeenCalledWith('WRONG_OLD_PASSWORD'); + expect(verifyPasswordSpy).toHaveBeenCalledWith('WRONG_OLD_PASSWORD', { + skipLock: true, // skip lock since we already have the lock + }); }, ); }); @@ -2893,7 +2897,9 @@ describe('SeedlessOnboardingController', () => { }), ).rejects.toThrow(SeedlessOnboardingControllerError.LoginFailedError); - expect(verifyPasswordSpy).toHaveBeenCalledWith(OLD_PASSWORD); + expect(verifyPasswordSpy).toHaveBeenCalledWith(OLD_PASSWORD, { + skipLock: true, // skip lock since we already have the lock + }); expect(recoverEncKeySpy).toHaveBeenCalledWith( expect.objectContaining({ password: GLOBAL_PASSWORD }), ); @@ -2944,7 +2950,9 @@ describe('SeedlessOnboardingController', () => { }), ).rejects.toThrow('Vault creation failed'); - expect(verifyPasswordSpy).toHaveBeenCalledWith(OLD_PASSWORD); + expect(verifyPasswordSpy).toHaveBeenCalledWith(OLD_PASSWORD, { + skipLock: true, // skip lock since we already have the lock + }); expect(recoverEncKeySpy).toHaveBeenCalledWith( expect.objectContaining({ password: GLOBAL_PASSWORD }), ); diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index e38665e6bd..3631242ee8 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -292,12 +292,12 @@ export class SeedlessOnboardingController extends BaseController< seedPhrase: Uint8Array, keyringId: string, ): Promise { - this.#assertIsUnlocked(); - await this.#assertPasswordInSync({ - skipCache: true, - }); - // NOTE don't include #assertPasswordInSync in #withControllerLock since #assertPasswordInSync already acquires the controller lock return await this.#withControllerLock(async () => { + this.#assertIsUnlocked(); + await this.#assertPasswordInSync({ + skipCache: true, + skipLock: true, // skip lock since we already have the lock + }); // verify the password and unlock the vault const { toprfEncryptionKey, toprfAuthKeyPair } = await this.#unlockVaultAndGetBackupEncKey(); @@ -369,15 +369,17 @@ export class SeedlessOnboardingController extends BaseController< * @returns A promise that resolves to the success of the operation. */ async changePassword(newPassword: string, oldPassword: string) { - this.#assertIsUnlocked(); - // verify the old password of the encrypted vault - await this.verifyVaultPassword(oldPassword); - await this.#assertPasswordInSync({ - skipCache: true, - }); - - // NOTE don't include verifyPassword and #assertPasswordInSync in #withControllerLock since verifyPassword and #assertPasswordInSync already acquires the controller lock return await this.#withControllerLock(async () => { + this.#assertIsUnlocked(); + // verify the old password of the encrypted vault + await this.verifyVaultPassword(oldPassword, { + skipLock: true, // skip lock since we already have the lock + }); + await this.#assertPasswordInSync({ + skipCache: true, + skipLock: true, // skip lock since we already have the lock + }); + try { // update the encryption key with new password and update the Metadata Store const { encKey: newEncKey, authKeyPair: newAuthKeyPair } = @@ -430,16 +432,26 @@ export class SeedlessOnboardingController extends BaseController< * Verify the password validity by decrypting the vault. * * @param password - The password to verify. + * @param options - Optional options object. + * @param options.skipLock - Whether to skip the lock acquisition. * @returns A promise that resolves to the success of the operation. * @throws {Error} If the password is invalid or the vault is not initialized. */ - async verifyVaultPassword(password: string): Promise { - return await this.#withControllerLock(async () => { + async verifyVaultPassword( + password: string, + options?: { + skipLock?: boolean; + }, + ): Promise { + const doVerify = async () => { if (!this.state.vault) { throw new Error(SeedlessOnboardingControllerError.VaultError); } await this.#vaultEncryptor.decrypt(password, this.state.vault); - }); + }; + return options?.skipLock + ? await doVerify() + : await this.#withControllerLock(doVerify); } /** @@ -508,10 +520,11 @@ export class SeedlessOnboardingController extends BaseController< oldPassword: string; globalPassword: string; }) { - // verify correct old password - await this.verifyVaultPassword(oldPassword); - // NOTE don't include verifyPassword in #withControllerLock since verifyPassword already acquires the controller lock return await this.#withControllerLock(async () => { + // verify correct old password + await this.verifyVaultPassword(oldPassword, { + skipLock: true, // skip lock since we already have the lock + }); // update vault with latest globalPassword const { encKey, authKeyPair } = await this.#recoverEncKey(globalPassword); // update and encrypt the vault with new password @@ -588,10 +601,12 @@ export class SeedlessOnboardingController extends BaseController< * * @param options - Optional options object. * @param options.skipCache - If true, bypass the cache and force a fresh check. + * @param options.skipLock - Whether to skip the lock acquisition. * @returns A promise that resolves to true if the password is outdated, false otherwise. */ async checkIsPasswordOutdated(options?: { skipCache?: boolean; + skipLock?: boolean; }): Promise { // cache result to reduce load on infra // Check cache first unless skipCache is true @@ -606,7 +621,8 @@ export class SeedlessOnboardingController extends BaseController< return passwordOutdatedCache.isExpiredPwd; } } - return await this.#withControllerLock(async () => { + + const doCheck = async () => { this.#assertIsAuthenticatedUser(this.state); const { nodeAuthTokens, @@ -633,7 +649,11 @@ export class SeedlessOnboardingController extends BaseController< state.passwordOutdatedCache = { isExpiredPwd, timestamp: Date.now() }; }); return isExpiredPwd; - }); + }; + + return options?.skipLock + ? await doCheck() + : await this.#withControllerLock(doCheck); } #setUnlocked(): void { @@ -1205,10 +1225,12 @@ export class SeedlessOnboardingController extends BaseController< * * @param options - The options for asserting the password is in sync. * @param options.skipCache - Whether to skip the cache check. + * @param options.skipLock - Whether to skip the lock acquisition. * @throws If the password is outdated. */ async #assertPasswordInSync(options?: { skipCache?: boolean; + skipLock?: boolean; }): Promise { const isPasswordOutdated = await this.checkIsPasswordOutdated(options); if (isPasswordOutdated) { From 0f7cc87b5b99b168abc949996b35f3dc8161d4a6 Mon Sep 17 00:00:00 2001 From: Nguyen Anh Tu Date: Wed, 21 May 2025 18:29:46 +0700 Subject: [PATCH 123/147] feat: update change log --- packages/seedless-onboarding-controller/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/seedless-onboarding-controller/CHANGELOG.md b/packages/seedless-onboarding-controller/CHANGELOG.md index a7d98f896f..5b91473be6 100644 --- a/packages/seedless-onboarding-controller/CHANGELOG.md +++ b/packages/seedless-onboarding-controller/CHANGELOG.md @@ -16,6 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add array of new seed phrase backups to the metadata store in batch (useful in multi-srp flow) - Fetch seed phrase metadata from the metadata store - Update the password of the seedless onboarding flow +- Password sync features implementation. ([#6](https://github.com/Web3Auth/core/pull/6)) - checkIsPasswordOutdated to check current password is outdated compare to global password - Add password outdated check to add SRPs / change password - recover old password using latest global password From 24259320fc3eaa8eef9afb40e89df4afceca8640 Mon Sep 17 00:00:00 2001 From: lwin Date: Thu, 22 May 2025 15:12:34 +0800 Subject: [PATCH 124/147] docs: updated and added missing jsDocs --- .../src/SeedPhraseMetadata.ts | 10 ++++++++++ .../src/SeedlessOnboardingController.ts | 5 +++++ .../seedless-onboarding-controller/src/constants.ts | 4 +++- 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/packages/seedless-onboarding-controller/src/SeedPhraseMetadata.ts b/packages/seedless-onboarding-controller/src/SeedPhraseMetadata.ts index b56c12a583..15c733caee 100644 --- a/packages/seedless-onboarding-controller/src/SeedPhraseMetadata.ts +++ b/packages/seedless-onboarding-controller/src/SeedPhraseMetadata.ts @@ -149,10 +149,20 @@ export class SeedPhraseMetadata implements ISeedPhraseMetadata { }); } + /** + * Get the seed phrase data. + * + * @returns The seed phrase data. + */ get data() { return this.#data; } + /** + * Get the timestamp when the seed phrase backup was created. + * + * @returns The timestamp when the seed phrase backup was created. + */ get timestamp() { return this.#timestamp; } diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index 4b424de0ce..d754f157e3 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -556,6 +556,11 @@ export class SeedlessOnboardingController extends BaseController< } } + /** + * Update the existing social backups metadata state with the new backup metadata. + * + * @param newSocialBackupMetadata - The new social backup metadata to update. + */ #updateSocialBackupsMetadata(newSocialBackupMetadata: SocialBackupsMetadata) { // filter out the backed up metadata that already exists in the state // to prevent duplicates diff --git a/packages/seedless-onboarding-controller/src/constants.ts b/packages/seedless-onboarding-controller/src/constants.ts index 3a6b192078..7254bb591d 100644 --- a/packages/seedless-onboarding-controller/src/constants.ts +++ b/packages/seedless-onboarding-controller/src/constants.ts @@ -5,7 +5,9 @@ export enum Web3AuthNetwork { Devnet = 'sapphire_devnet', } -// user social login provider +/** + * The type of social login provider. + */ export enum AuthConnection { Google = 'google', Apple = 'apple', From 7688db39cafcdb9cc6b9dcb4a1694a27864aa6a0 Mon Sep 17 00:00:00 2001 From: lwin Date: Thu, 22 May 2025 16:01:04 +0800 Subject: [PATCH 125/147] chore: removed static method 'getRateLimitErrorData' to utils function --- .../src/errors.ts | 60 +++++++++---------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/errors.ts b/packages/seedless-onboarding-controller/src/errors.ts index 7837c11a75..644d9af1e1 100644 --- a/packages/seedless-onboarding-controller/src/errors.ts +++ b/packages/seedless-onboarding-controller/src/errors.ts @@ -27,6 +27,35 @@ function getErrorMessageFromTOPRFErrorCode( } } +/** + * Check if the provided error is a rate limit error triggered by too many login attempts. + * + * Return a new TooManyLoginAttemptsError if the error is a rate limit error, otherwise undefined. + * + * @param error - The error to check. + * @returns The rate limit error if the error is a rate limit error, otherwise undefined. + */ +function getRateLimitErrorData( + error: TOPRFError, +): RateLimitErrorData | undefined { + if ( + error.meta && // error metadata must be present + error.code === TOPRFErrorCode.RateLimitExceeded && + typeof error.meta.rateLimitDetails === 'object' && + error.meta.rateLimitDetails !== null && + 'remainingTime' in error.meta.rateLimitDetails && + typeof error.meta.rateLimitDetails.remainingTime === 'number' && + 'message' in error.meta.rateLimitDetails && + typeof error.meta.rateLimitDetails.message === 'string' + ) { + return { + remainingTime: error.meta.rateLimitDetails.remainingTime, + message: error.meta.rateLimitDetails.message, + }; + } + return undefined; +} + /** * The RecoveryError class is used to handle errors that occur during the recover encryption key process from the passwrord. * It extends the Error class and includes a data property that can be used to store additional information. @@ -48,7 +77,7 @@ export class RecoveryError extends Error { */ static getInstance(error: unknown): RecoveryError { if (error instanceof TOPRFError) { - const rateLimitErrorData = RecoveryError.getRateLimitErrorData(error); + const rateLimitErrorData = getRateLimitErrorData(error); const errorMessage = getErrorMessageFromTOPRFErrorCode( error.code, SeedlessOnboardingControllerError.LoginFailedError, @@ -59,33 +88,4 @@ export class RecoveryError extends Error { SeedlessOnboardingControllerError.LoginFailedError, ); } - - /** - * Check if the provided error is a rate limit error triggered by too many login attempts. - * - * Return a new TooManyLoginAttemptsError if the error is a rate limit error, otherwise undefined. - * - * @param error - The error to check. - * @returns The rate limit error if the error is a rate limit error, otherwise undefined. - */ - static getRateLimitErrorData( - error: TOPRFError, - ): RateLimitErrorData | undefined { - if ( - error.meta && // error metadata must be present - error.code === TOPRFErrorCode.RateLimitExceeded && - typeof error.meta.rateLimitDetails === 'object' && - error.meta.rateLimitDetails !== null && - 'remainingTime' in error.meta.rateLimitDetails && - typeof error.meta.rateLimitDetails.remainingTime === 'number' && - 'message' in error.meta.rateLimitDetails && - typeof error.meta.rateLimitDetails.message === 'string' - ) { - return { - remainingTime: error.meta.rateLimitDetails.remainingTime, - message: error.meta.rateLimitDetails.message, - }; - } - return undefined; - } } From 1ed1ede488e428f5ee838906aa4d4343f99153a9 Mon Sep 17 00:00:00 2001 From: lwin Date: Thu, 22 May 2025 16:07:14 +0800 Subject: [PATCH 126/147] chore: renamed 'SeedlessOnboardingControllerError' enum to 'SeedlessOnboardingControllerErrorMessage' --- .../src/SeedPhraseMetadata.ts | 4 +- .../src/SeedlessOnboardingController.test.ts | 40 +++++++++---------- .../src/SeedlessOnboardingController.ts | 28 ++++++------- .../src/constants.ts | 2 +- .../src/errors.ts | 10 ++--- .../src/index.ts | 2 +- 6 files changed, 43 insertions(+), 43 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedPhraseMetadata.ts b/packages/seedless-onboarding-controller/src/SeedPhraseMetadata.ts index 15c733caee..04f657c892 100644 --- a/packages/seedless-onboarding-controller/src/SeedPhraseMetadata.ts +++ b/packages/seedless-onboarding-controller/src/SeedPhraseMetadata.ts @@ -5,7 +5,7 @@ import { bytesToString, } from '@metamask/utils'; -import { SeedlessOnboardingControllerError } from './constants'; +import { SeedlessOnboardingControllerErrorMessage } from './constants'; type ISeedPhraseMetadata = { data: Uint8Array; @@ -88,7 +88,7 @@ export class SeedPhraseMetadata implements ISeedPhraseMetadata { typeof value.timestamp !== 'number' ) { throw new Error( - SeedlessOnboardingControllerError.InvalidSeedPhraseMetadata, + SeedlessOnboardingControllerErrorMessage.InvalidSeedPhraseMetadata, ); } } diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts index ccc606499c..fb91559bc2 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts @@ -11,7 +11,7 @@ import { base64ToBytes, bytesToBase64, stringToBytes } from '@metamask/utils'; import { Web3AuthNetwork, - SeedlessOnboardingControllerError, + SeedlessOnboardingControllerErrorMessage, AuthConnection, } from './constants'; import { RecoveryError } from './errors'; @@ -485,7 +485,7 @@ describe('SeedlessOnboardingController', () => { socialLoginEmail, }), ).rejects.toThrow( - SeedlessOnboardingControllerError.AuthenticationError, + SeedlessOnboardingControllerErrorMessage.AuthenticationError, ); expect(handleCommitment.isDone()).toBe(true); expect(handleAuthentication.isDone()).toBe(false); @@ -656,7 +656,7 @@ describe('SeedlessOnboardingController', () => { MOCK_KEYRING_ID, ), ).rejects.toThrow( - SeedlessOnboardingControllerError.MissingAuthUserInfo, + SeedlessOnboardingControllerErrorMessage.MissingAuthUserInfo, ); // verify vault is not created @@ -675,7 +675,7 @@ describe('SeedlessOnboardingController', () => { MOCK_KEYRING_ID, ), ).rejects.toThrow( - SeedlessOnboardingControllerError.InsufficientAuthToken, + SeedlessOnboardingControllerErrorMessage.InsufficientAuthToken, ); // verify vault is not created @@ -708,7 +708,7 @@ describe('SeedlessOnboardingController', () => { MOCK_KEYRING_ID, ), ).rejects.toThrow( - SeedlessOnboardingControllerError.FailedToPersistOprfKey, + SeedlessOnboardingControllerErrorMessage.FailedToPersistOprfKey, ); expect(mockSecretDataAdd.isDone()).toBe(true); @@ -739,7 +739,7 @@ describe('SeedlessOnboardingController', () => { MOCK_KEYRING_ID, ), ).rejects.toThrow( - SeedlessOnboardingControllerError.FailedToEncryptAndStoreSeedPhraseBackup, + SeedlessOnboardingControllerErrorMessage.FailedToEncryptAndStoreSeedPhraseBackup, ); }, ); @@ -932,7 +932,7 @@ describe('SeedlessOnboardingController', () => { await expect( controller.fetchAllSeedPhrases('INCORRECT_PASSWORD'), - ).rejects.toThrow(SeedlessOnboardingControllerError.LoginFailedError); + ).rejects.toThrow(SeedlessOnboardingControllerErrorMessage.LoginFailedError); }, ); }); @@ -954,7 +954,7 @@ describe('SeedlessOnboardingController', () => { await expect( controller.fetchAllSeedPhrases('INCORRECT_PASSWORD'), ).rejects.toThrow( - SeedlessOnboardingControllerError.FailedToFetchSeedPhraseMetadata, + SeedlessOnboardingControllerErrorMessage.FailedToFetchSeedPhraseMetadata, ); }, ); @@ -979,7 +979,7 @@ describe('SeedlessOnboardingController', () => { await expect( controller.fetchAllSeedPhrases(MOCK_PASSWORD), ).rejects.toThrow( - SeedlessOnboardingControllerError.FailedToFetchSeedPhraseMetadata, + SeedlessOnboardingControllerErrorMessage.FailedToFetchSeedPhraseMetadata, ); }, ); @@ -1006,7 +1006,7 @@ describe('SeedlessOnboardingController', () => { controller.fetchAllSeedPhrases(MOCK_PASSWORD), ).rejects.toStrictEqual( new RecoveryError( - SeedlessOnboardingControllerError.TooManyLoginAttempts, + SeedlessOnboardingControllerErrorMessage.TooManyLoginAttempts, { remainingTime: 10, message: 'Rate limit exceeded', @@ -1035,7 +1035,7 @@ describe('SeedlessOnboardingController', () => { controller.fetchAllSeedPhrases(MOCK_PASSWORD), ).rejects.toStrictEqual( new RecoveryError( - SeedlessOnboardingControllerError.IncorrectPassword, + SeedlessOnboardingControllerErrorMessage.IncorrectPassword, ), ); }, @@ -1060,7 +1060,7 @@ describe('SeedlessOnboardingController', () => { controller.fetchAllSeedPhrases(MOCK_PASSWORD), ).rejects.toStrictEqual( new RecoveryError( - SeedlessOnboardingControllerError.LoginFailedError, + SeedlessOnboardingControllerErrorMessage.LoginFailedError, ), ); }, @@ -1269,7 +1269,7 @@ describe('SeedlessOnboardingController', () => { async ({ controller }) => { await expect( controller.changePassword(NEW_MOCK_PASSWORD, MOCK_PASSWORD), - ).rejects.toThrow(SeedlessOnboardingControllerError.VaultError); + ).rejects.toThrow(SeedlessOnboardingControllerErrorMessage.VaultError); }, ); }); @@ -1285,7 +1285,7 @@ describe('SeedlessOnboardingController', () => { .mockResolvedValueOnce('{ "foo": "bar"'); await expect( controller.changePassword(NEW_MOCK_PASSWORD, MOCK_PASSWORD), - ).rejects.toThrow(SeedlessOnboardingControllerError.InvalidVaultData); + ).rejects.toThrow(SeedlessOnboardingControllerErrorMessage.InvalidVaultData); }, ); }); @@ -1304,12 +1304,12 @@ describe('SeedlessOnboardingController', () => { .mockResolvedValueOnce({ foo: 'bar' }); await expect( controller.changePassword(NEW_MOCK_PASSWORD, MOCK_PASSWORD), - ).rejects.toThrow(SeedlessOnboardingControllerError.InvalidVaultData); + ).rejects.toThrow(SeedlessOnboardingControllerErrorMessage.InvalidVaultData); jest.spyOn(encryptor, 'decrypt').mockResolvedValueOnce('null'); await expect( controller.changePassword(NEW_MOCK_PASSWORD, MOCK_PASSWORD), - ).rejects.toThrow(SeedlessOnboardingControllerError.VaultDataError); + ).rejects.toThrow(SeedlessOnboardingControllerErrorMessage.VaultDataError); }, ); }); @@ -1326,7 +1326,7 @@ describe('SeedlessOnboardingController', () => { jest.spyOn(encryptor, 'decrypt').mockResolvedValueOnce(MOCK_VAULT); await expect( controller.changePassword(NEW_MOCK_PASSWORD, MOCK_PASSWORD), - ).rejects.toThrow(SeedlessOnboardingControllerError.VaultDataError); + ).rejects.toThrow(SeedlessOnboardingControllerErrorMessage.VaultDataError); }, ); }); @@ -1382,7 +1382,7 @@ describe('SeedlessOnboardingController', () => { await expect( controller.changePassword(NEW_MOCK_PASSWORD, MOCK_PASSWORD), ).rejects.toThrow( - SeedlessOnboardingControllerError.FailedToChangePassword, + SeedlessOnboardingControllerErrorMessage.FailedToChangePassword, ); }, ); @@ -1465,7 +1465,7 @@ describe('SeedlessOnboardingController', () => { MOCK_KEYRING_ID, ), ).rejects.toThrow( - SeedlessOnboardingControllerError.InvalidEmptyPassword, + SeedlessOnboardingControllerErrorMessage.InvalidEmptyPassword, ); expect(mockSecretDataAdd.isDone()).toBe(true); @@ -1491,7 +1491,7 @@ describe('SeedlessOnboardingController', () => { // @ts-expect-error Intentionally passing wrong password type controller.createToprfKeyAndBackupSeedPhrase(123, MOCK_SEED_PHRASE), ).rejects.toThrow( - SeedlessOnboardingControllerError.WrongPasswordType, + SeedlessOnboardingControllerErrorMessage.WrongPasswordType, ); expect(mockSecretDataAdd.isDone()).toBe(true); diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index d754f157e3..99837bc81f 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -20,7 +20,7 @@ import { Mutex } from 'async-mutex'; import { type AuthConnection, controllerName, - SeedlessOnboardingControllerError, + SeedlessOnboardingControllerErrorMessage, Web3AuthNetwork, } from './constants'; import { RecoveryError } from './errors'; @@ -190,7 +190,7 @@ export class SeedlessOnboardingController extends BaseController< return authenticationResult; } catch (error) { log('Error authenticating user', error); - throw new Error(SeedlessOnboardingControllerError.AuthenticationError); + throw new Error(SeedlessOnboardingControllerErrorMessage.AuthenticationError); } } @@ -269,7 +269,7 @@ export class SeedlessOnboardingController extends BaseController< } catch (error) { log('Error fetching seed phrase metadata', error); throw new Error( - SeedlessOnboardingControllerError.FailedToFetchSeedPhraseMetadata, + SeedlessOnboardingControllerErrorMessage.FailedToFetchSeedPhraseMetadata, ); } } @@ -299,7 +299,7 @@ export class SeedlessOnboardingController extends BaseController< }); } catch (error) { log('Error changing password', error); - throw new Error(SeedlessOnboardingControllerError.FailedToChangePassword); + throw new Error(SeedlessOnboardingControllerErrorMessage.FailedToChangePassword); } } @@ -367,7 +367,7 @@ export class SeedlessOnboardingController extends BaseController< }); } catch (error) { log('Error persisting local encryption key', error); - throw new Error(SeedlessOnboardingControllerError.FailedToPersistOprfKey); + throw new Error(SeedlessOnboardingControllerErrorMessage.FailedToPersistOprfKey); } } @@ -462,7 +462,7 @@ export class SeedlessOnboardingController extends BaseController< } catch (error) { log('Error encrypting and storing seed phrase backup', error); throw new Error( - SeedlessOnboardingControllerError.FailedToEncryptAndStoreSeedPhraseBackup, + SeedlessOnboardingControllerErrorMessage.FailedToEncryptAndStoreSeedPhraseBackup, ); } } @@ -492,7 +492,7 @@ export class SeedlessOnboardingController extends BaseController< const encryptedVault = this.state.vault; if (!encryptedVault) { - throw new Error(SeedlessOnboardingControllerError.VaultError); + throw new Error(SeedlessOnboardingControllerErrorMessage.VaultError); } // Note that vault decryption using the password is a very costly operation as it involves deriving the encryption key // from the password using an intentionally slow key derivation function. @@ -706,14 +706,14 @@ export class SeedlessOnboardingController extends BaseController< toprfAuthKeyPair: KeyPair; } { if (typeof data !== 'string') { - throw new Error(SeedlessOnboardingControllerError.InvalidVaultData); + throw new Error(SeedlessOnboardingControllerErrorMessage.InvalidVaultData); } let parsedVaultData: unknown; try { parsedVaultData = JSON.parse(data); } catch { - throw new Error(SeedlessOnboardingControllerError.InvalidVaultData); + throw new Error(SeedlessOnboardingControllerErrorMessage.InvalidVaultData); } this.#assertIsValidVaultData(parsedVaultData); @@ -757,7 +757,7 @@ export class SeedlessOnboardingController extends BaseController< !('userId' in value) || typeof value.userId !== 'string' ) { - throw new Error(SeedlessOnboardingControllerError.MissingAuthUserInfo); + throw new Error(SeedlessOnboardingControllerErrorMessage.MissingAuthUserInfo); } if ( @@ -766,7 +766,7 @@ export class SeedlessOnboardingController extends BaseController< !Array.isArray(value.nodeAuthTokens) || value.nodeAuthTokens.length < 3 // At least 3 auth tokens are required for Threshold OPRF service ) { - throw new Error(SeedlessOnboardingControllerError.InsufficientAuthToken); + throw new Error(SeedlessOnboardingControllerErrorMessage.InsufficientAuthToken); } } @@ -788,7 +788,7 @@ export class SeedlessOnboardingController extends BaseController< !('toprfAuthKeyPair' in value) || // toprfAuthKeyPair is not defined typeof value.toprfAuthKeyPair !== 'string' // toprfAuthKeyPair is not a string ) { - throw new Error(SeedlessOnboardingControllerError.VaultDataError); + throw new Error(SeedlessOnboardingControllerErrorMessage.VaultDataError); } } } @@ -801,11 +801,11 @@ export class SeedlessOnboardingController extends BaseController< */ function assertIsValidPassword(password: unknown): asserts password is string { if (typeof password !== 'string') { - throw new Error(SeedlessOnboardingControllerError.WrongPasswordType); + throw new Error(SeedlessOnboardingControllerErrorMessage.WrongPasswordType); } if (!password || !password.length) { - throw new Error(SeedlessOnboardingControllerError.InvalidEmptyPassword); + throw new Error(SeedlessOnboardingControllerErrorMessage.InvalidEmptyPassword); } } diff --git a/packages/seedless-onboarding-controller/src/constants.ts b/packages/seedless-onboarding-controller/src/constants.ts index 7254bb591d..e9e1888fa0 100644 --- a/packages/seedless-onboarding-controller/src/constants.ts +++ b/packages/seedless-onboarding-controller/src/constants.ts @@ -13,7 +13,7 @@ export enum AuthConnection { Apple = 'apple', } -export enum SeedlessOnboardingControllerError { +export enum SeedlessOnboardingControllerErrorMessage { AuthenticationError = `${controllerName} - Authentication error`, MissingAuthUserInfo = `${controllerName} - Missing authenticated user information`, FailedToPersistOprfKey = `${controllerName} - Failed to persist OPRF key`, diff --git a/packages/seedless-onboarding-controller/src/errors.ts b/packages/seedless-onboarding-controller/src/errors.ts index 644d9af1e1..9d8c7a0f16 100644 --- a/packages/seedless-onboarding-controller/src/errors.ts +++ b/packages/seedless-onboarding-controller/src/errors.ts @@ -4,7 +4,7 @@ import { TOPRFErrorCode, } from '@metamask/toprf-secure-backup'; -import { SeedlessOnboardingControllerError } from './constants'; +import { SeedlessOnboardingControllerErrorMessage } from './constants'; /** * Get the error message from the TOPRF error code. @@ -19,9 +19,9 @@ function getErrorMessageFromTOPRFErrorCode( ): string { switch (errorCode) { case TOPRFErrorCode.RateLimitExceeded: - return SeedlessOnboardingControllerError.TooManyLoginAttempts; + return SeedlessOnboardingControllerErrorMessage.TooManyLoginAttempts; case TOPRFErrorCode.CouldNotDeriveEncryptionKey: - return SeedlessOnboardingControllerError.IncorrectPassword; + return SeedlessOnboardingControllerErrorMessage.IncorrectPassword; default: return defaultMessage; } @@ -80,12 +80,12 @@ export class RecoveryError extends Error { const rateLimitErrorData = getRateLimitErrorData(error); const errorMessage = getErrorMessageFromTOPRFErrorCode( error.code, - SeedlessOnboardingControllerError.LoginFailedError, + SeedlessOnboardingControllerErrorMessage.LoginFailedError, ); return new RecoveryError(errorMessage, rateLimitErrorData); } return new RecoveryError( - SeedlessOnboardingControllerError.LoginFailedError, + SeedlessOnboardingControllerErrorMessage.LoginFailedError, ); } } diff --git a/packages/seedless-onboarding-controller/src/index.ts b/packages/seedless-onboarding-controller/src/index.ts index f078f4a18a..bc5f9371cb 100644 --- a/packages/seedless-onboarding-controller/src/index.ts +++ b/packages/seedless-onboarding-controller/src/index.ts @@ -15,7 +15,7 @@ export type { } from './types'; export { Web3AuthNetwork, - SeedlessOnboardingControllerError, + SeedlessOnboardingControllerErrorMessage, AuthConnection, } from './constants'; export * from './errors'; From cacd5bcfe036196c4d333891a1728f99147c23d7 Mon Sep 17 00:00:00 2001 From: lwin Date: Thu, 22 May 2025 16:20:35 +0800 Subject: [PATCH 127/147] fix: fixed lint --- .../src/SeedlessOnboardingController.test.ts | 24 ++++++++++---- .../src/SeedlessOnboardingController.ts | 32 ++++++++++++++----- .../src/index.ts | 2 +- 3 files changed, 43 insertions(+), 15 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts index fb91559bc2..c703df9793 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts @@ -932,7 +932,9 @@ describe('SeedlessOnboardingController', () => { await expect( controller.fetchAllSeedPhrases('INCORRECT_PASSWORD'), - ).rejects.toThrow(SeedlessOnboardingControllerErrorMessage.LoginFailedError); + ).rejects.toThrow( + SeedlessOnboardingControllerErrorMessage.LoginFailedError, + ); }, ); }); @@ -1269,7 +1271,9 @@ describe('SeedlessOnboardingController', () => { async ({ controller }) => { await expect( controller.changePassword(NEW_MOCK_PASSWORD, MOCK_PASSWORD), - ).rejects.toThrow(SeedlessOnboardingControllerErrorMessage.VaultError); + ).rejects.toThrow( + SeedlessOnboardingControllerErrorMessage.VaultError, + ); }, ); }); @@ -1285,7 +1289,9 @@ describe('SeedlessOnboardingController', () => { .mockResolvedValueOnce('{ "foo": "bar"'); await expect( controller.changePassword(NEW_MOCK_PASSWORD, MOCK_PASSWORD), - ).rejects.toThrow(SeedlessOnboardingControllerErrorMessage.InvalidVaultData); + ).rejects.toThrow( + SeedlessOnboardingControllerErrorMessage.InvalidVaultData, + ); }, ); }); @@ -1304,12 +1310,16 @@ describe('SeedlessOnboardingController', () => { .mockResolvedValueOnce({ foo: 'bar' }); await expect( controller.changePassword(NEW_MOCK_PASSWORD, MOCK_PASSWORD), - ).rejects.toThrow(SeedlessOnboardingControllerErrorMessage.InvalidVaultData); + ).rejects.toThrow( + SeedlessOnboardingControllerErrorMessage.InvalidVaultData, + ); jest.spyOn(encryptor, 'decrypt').mockResolvedValueOnce('null'); await expect( controller.changePassword(NEW_MOCK_PASSWORD, MOCK_PASSWORD), - ).rejects.toThrow(SeedlessOnboardingControllerErrorMessage.VaultDataError); + ).rejects.toThrow( + SeedlessOnboardingControllerErrorMessage.VaultDataError, + ); }, ); }); @@ -1326,7 +1336,9 @@ describe('SeedlessOnboardingController', () => { jest.spyOn(encryptor, 'decrypt').mockResolvedValueOnce(MOCK_VAULT); await expect( controller.changePassword(NEW_MOCK_PASSWORD, MOCK_PASSWORD), - ).rejects.toThrow(SeedlessOnboardingControllerErrorMessage.VaultDataError); + ).rejects.toThrow( + SeedlessOnboardingControllerErrorMessage.VaultDataError, + ); }, ); }); diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index 99837bc81f..24272b9e9a 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -190,7 +190,9 @@ export class SeedlessOnboardingController extends BaseController< return authenticationResult; } catch (error) { log('Error authenticating user', error); - throw new Error(SeedlessOnboardingControllerErrorMessage.AuthenticationError); + throw new Error( + SeedlessOnboardingControllerErrorMessage.AuthenticationError, + ); } } @@ -299,7 +301,9 @@ export class SeedlessOnboardingController extends BaseController< }); } catch (error) { log('Error changing password', error); - throw new Error(SeedlessOnboardingControllerErrorMessage.FailedToChangePassword); + throw new Error( + SeedlessOnboardingControllerErrorMessage.FailedToChangePassword, + ); } } @@ -367,7 +371,9 @@ export class SeedlessOnboardingController extends BaseController< }); } catch (error) { log('Error persisting local encryption key', error); - throw new Error(SeedlessOnboardingControllerErrorMessage.FailedToPersistOprfKey); + throw new Error( + SeedlessOnboardingControllerErrorMessage.FailedToPersistOprfKey, + ); } } @@ -706,14 +712,18 @@ export class SeedlessOnboardingController extends BaseController< toprfAuthKeyPair: KeyPair; } { if (typeof data !== 'string') { - throw new Error(SeedlessOnboardingControllerErrorMessage.InvalidVaultData); + throw new Error( + SeedlessOnboardingControllerErrorMessage.InvalidVaultData, + ); } let parsedVaultData: unknown; try { parsedVaultData = JSON.parse(data); } catch { - throw new Error(SeedlessOnboardingControllerErrorMessage.InvalidVaultData); + throw new Error( + SeedlessOnboardingControllerErrorMessage.InvalidVaultData, + ); } this.#assertIsValidVaultData(parsedVaultData); @@ -757,7 +767,9 @@ export class SeedlessOnboardingController extends BaseController< !('userId' in value) || typeof value.userId !== 'string' ) { - throw new Error(SeedlessOnboardingControllerErrorMessage.MissingAuthUserInfo); + throw new Error( + SeedlessOnboardingControllerErrorMessage.MissingAuthUserInfo, + ); } if ( @@ -766,7 +778,9 @@ export class SeedlessOnboardingController extends BaseController< !Array.isArray(value.nodeAuthTokens) || value.nodeAuthTokens.length < 3 // At least 3 auth tokens are required for Threshold OPRF service ) { - throw new Error(SeedlessOnboardingControllerErrorMessage.InsufficientAuthToken); + throw new Error( + SeedlessOnboardingControllerErrorMessage.InsufficientAuthToken, + ); } } @@ -805,7 +819,9 @@ function assertIsValidPassword(password: unknown): asserts password is string { } if (!password || !password.length) { - throw new Error(SeedlessOnboardingControllerErrorMessage.InvalidEmptyPassword); + throw new Error( + SeedlessOnboardingControllerErrorMessage.InvalidEmptyPassword, + ); } } diff --git a/packages/seedless-onboarding-controller/src/index.ts b/packages/seedless-onboarding-controller/src/index.ts index bc5f9371cb..d84a882fd5 100644 --- a/packages/seedless-onboarding-controller/src/index.ts +++ b/packages/seedless-onboarding-controller/src/index.ts @@ -18,4 +18,4 @@ export { SeedlessOnboardingControllerErrorMessage, AuthConnection, } from './constants'; -export * from './errors'; +export { RecoveryError } from './errors'; From d00bf53defaa51876ba3e36d95e09bdc1fe403f4 Mon Sep 17 00:00:00 2001 From: lwin Date: Thu, 22 May 2025 17:43:24 +0800 Subject: [PATCH 128/147] chore: removed redundant unittests --- .../src/SecretMetadata.ts | 6 +- .../src/SeedlessOnboardingController.test.ts | 113 ++++++------------ .../src/SeedlessOnboardingController.ts | 21 ++-- 3 files changed, 53 insertions(+), 87 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SecretMetadata.ts b/packages/seedless-onboarding-controller/src/SecretMetadata.ts index 6364315505..355b1b07f6 100644 --- a/packages/seedless-onboarding-controller/src/SecretMetadata.ts +++ b/packages/seedless-onboarding-controller/src/SecretMetadata.ts @@ -6,7 +6,7 @@ import { } from '@metamask/utils'; import { - SeedlessOnboardingControllerError, + SeedlessOnboardingControllerErrorMessage, SecretType, SecretMetadataVersion, } from './constants'; @@ -114,7 +114,9 @@ export class SecretMetadata !('timestamp' in value) || typeof value.timestamp !== 'number' ) { - throw new Error(SeedlessOnboardingControllerError.InvalidSecretMetadata); + throw new Error( + SeedlessOnboardingControllerErrorMessage.InvalidSecretMetadata, + ); } } diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts index cb2be46d5d..4fcb09ea10 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts @@ -861,7 +861,9 @@ describe('SeedlessOnboardingController', () => { NEW_KEY_RING_1.seedPhrase, NEW_KEY_RING_1.id, ), - ).rejects.toThrow(SeedlessOnboardingControllerError.ControllerLocked); + ).rejects.toThrow( + SeedlessOnboardingControllerErrorMessage.ControllerLocked, + ); }); }); @@ -984,7 +986,9 @@ describe('SeedlessOnboardingController', () => { NEW_KEY_RING_1.seedPhrase, NEW_KEY_RING_1.id, ), - ).rejects.toThrow(SeedlessOnboardingControllerError.InvalidVaultData); + ).rejects.toThrow( + SeedlessOnboardingControllerErrorMessage.InvalidVaultData, + ); }, ); }); @@ -1023,7 +1027,7 @@ describe('SeedlessOnboardingController', () => { NEW_KEY_RING_2.id, ), ).rejects.toThrow( - SeedlessOnboardingControllerError.MissingCredentials, + SeedlessOnboardingControllerErrorMessage.MissingCredentials, ); }, ); @@ -1056,7 +1060,7 @@ describe('SeedlessOnboardingController', () => { NEW_KEY_RING_1.id, ), ).rejects.toThrow( - SeedlessOnboardingControllerError.ExpiredCredentials, + SeedlessOnboardingControllerErrorMessage.ExpiredCredentials, ); }, ); @@ -1096,7 +1100,7 @@ describe('SeedlessOnboardingController', () => { NEW_KEY_RING_2.id, ), ).rejects.toThrow( - SeedlessOnboardingControllerError.WrongPasswordType, + SeedlessOnboardingControllerErrorMessage.WrongPasswordType, ); }, ); @@ -1137,7 +1141,9 @@ describe('SeedlessOnboardingController', () => { NEW_KEY_RING_2.seedPhrase, NEW_KEY_RING_2.id, ), - ).rejects.toThrow(SeedlessOnboardingControllerError.InvalidVaultData); + ).rejects.toThrow( + SeedlessOnboardingControllerErrorMessage.InvalidVaultData, + ); jest.spyOn(encryptor, 'decryptWithKey').mockResolvedValueOnce('null'); await expect( @@ -1145,7 +1151,9 @@ describe('SeedlessOnboardingController', () => { NEW_KEY_RING_2.seedPhrase, NEW_KEY_RING_2.id, ), - ).rejects.toThrow(SeedlessOnboardingControllerError.VaultDataError); + ).rejects.toThrow( + SeedlessOnboardingControllerErrorMessage.VaultDataError, + ); }, ); }); @@ -1185,7 +1193,9 @@ describe('SeedlessOnboardingController', () => { NEW_KEY_RING_2.seedPhrase, NEW_KEY_RING_2.id, ), - ).rejects.toThrow(SeedlessOnboardingControllerError.VaultDataError); + ).rejects.toThrow( + SeedlessOnboardingControllerErrorMessage.VaultDataError, + ); }, ); }); @@ -1521,7 +1531,7 @@ describe('SeedlessOnboardingController', () => { it('should throw error if the vault is missing', async () => { await withController(async ({ controller }) => { await expect(controller.submitPassword(MOCK_PASSWORD)).rejects.toThrow( - SeedlessOnboardingControllerError.VaultError, + SeedlessOnboardingControllerErrorMessage.VaultError, ); }); }); @@ -1536,7 +1546,7 @@ describe('SeedlessOnboardingController', () => { async ({ controller }) => { // @ts-expect-error intentional test case await expect(controller.submitPassword(123)).rejects.toThrow( - SeedlessOnboardingControllerError.WrongPasswordType, + SeedlessOnboardingControllerErrorMessage.WrongPasswordType, ); }, ); @@ -1587,7 +1597,7 @@ describe('SeedlessOnboardingController', () => { it('should throw an error if the vault is missing', async () => { await withController(async ({ controller }) => { await expect(controller.verifyPassword(MOCK_PASSWORD)).rejects.toThrow( - SeedlessOnboardingControllerError.VaultError, + SeedlessOnboardingControllerErrorMessage.VaultError, ); }); }); @@ -1852,68 +1862,11 @@ describe('SeedlessOnboardingController', () => { await expect( controller.changePassword(NEW_MOCK_PASSWORD, MOCK_PASSWORD), ).rejects.toThrow( - SeedlessOnboardingControllerErrorMessage.ControllerLocked, - ); + SeedlessOnboardingControllerErrorMessage.ControllerLocked, + ); }); }); - it('should throw an error if failed to parse vault data', async () => { - await withController( - { - state: getMockInitialControllerState({ vault: '{ "foo": "bar"' }), - }, - async ({ controller, encryptor }) => { - jest - .spyOn(encryptor, 'decrypt') - .mockResolvedValueOnce('{ "foo": "bar"'); - await expect( - controller.changePassword(NEW_MOCK_PASSWORD, MOCK_PASSWORD), - ).rejects.toThrow(SeedlessOnboardingControllerError.InvalidVaultData); - }, - ); - }); - - it('should throw an error if vault unlocked has an unexpected shape', async () => { - await withController( - { - state: getMockInitialControllerState({ - vault: MOCK_VAULT, - withMockAuthenticatedUser: true, - }), - }, - async ({ controller, encryptor }) => { - jest - .spyOn(encryptor, 'decrypt') - .mockResolvedValueOnce({ foo: 'bar' }); - await expect( - controller.changePassword(NEW_MOCK_PASSWORD, MOCK_PASSWORD), - ).rejects.toThrow(SeedlessOnboardingControllerError.InvalidVaultData); - - jest.spyOn(encryptor, 'decrypt').mockResolvedValueOnce('null'); - await expect( - controller.changePassword(NEW_MOCK_PASSWORD, MOCK_PASSWORD), - ).rejects.toThrow(SeedlessOnboardingControllerError.VaultDataError); - }, - ); - }); - - it('should throw an error if vault unlocked has invalid authentication data', async () => { - await withController( - { - state: getMockInitialControllerState({ - vault: MOCK_VAULT, - withMockAuthenticatedUser: true, - }), - }, - async ({ controller, encryptor }) => { - jest.spyOn(encryptor, 'decrypt').mockResolvedValueOnce(MOCK_VAULT); - await expect( - controller.changePassword(NEW_MOCK_PASSWORD, MOCK_PASSWORD), - ).rejects.toThrow(SeedlessOnboardingControllerError.VaultDataError); - }, - ); - }); - it('should throw an error if the old password is incorrect', async () => { await withController( { @@ -1922,7 +1875,11 @@ describe('SeedlessOnboardingController', () => { withMockAuthenticatedUser: true, }), }, - async ({ controller, encryptor }) => { + async ({ controller, encryptor, baseMessenger }) => { + // unlock the controller + baseMessenger.publish('KeyringController:unlock'); + await new Promise((resolve) => setTimeout(resolve, 100)); + jest .spyOn(encryptor, 'decrypt') .mockRejectedValueOnce(new Error('Incorrect password')); @@ -2105,7 +2062,9 @@ describe('SeedlessOnboardingController', () => { MOCK_SEED_PHRASE, MOCK_KEYRING_ID, ), - ).rejects.toThrow(SeedlessOnboardingControllerError.ControllerLocked); + ).rejects.toThrow( + SeedlessOnboardingControllerErrorMessage.ControllerLocked, + ); }, ); }); @@ -2133,7 +2092,9 @@ describe('SeedlessOnboardingController', () => { MOCK_SEED_PHRASE, MOCK_KEYRING_ID, ), - ).rejects.toThrow(SeedlessOnboardingControllerError.ControllerLocked); + ).rejects.toThrow( + SeedlessOnboardingControllerErrorMessage.ControllerLocked, + ); }, ); }); @@ -2151,7 +2112,9 @@ describe('SeedlessOnboardingController', () => { MOCK_SEED_PHRASE, MOCK_KEYRING_ID, ), - ).rejects.toThrow(SeedlessOnboardingControllerError.ControllerLocked); + ).rejects.toThrow( + SeedlessOnboardingControllerErrorMessage.ControllerLocked, + ); baseMessenger.publish('KeyringController:unlock'); @@ -2201,7 +2164,7 @@ describe('SeedlessOnboardingController', () => { expect(seedPhraseMetadata.timestamp).toBe(timestamp); }); - it('should be able to correctly create `SeedPhraseMetadata` Array for batch seedphrases', () => { + it('should be able to correctly create `SecretMetadata` Array for batch seedphrases', () => { const seedPhrases = ['seed phrase 1', 'seed phrase 2', 'seed phrase 3']; const rawSeedPhrases = seedPhrases.map((srp) => ({ value: stringToBytes(srp), diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index 144c714636..091e957198 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -392,7 +392,7 @@ export class SeedlessOnboardingController extends BaseController< */ async verifyPassword(password: string): Promise { if (!this.state.vault) { - throw new Error(SeedlessOnboardingControllerError.VaultError); + throw new Error(SeedlessOnboardingControllerErrorMessage.VaultError); } await this.#vaultEncryptor.decrypt(password, this.state.vault); @@ -614,7 +614,9 @@ export class SeedlessOnboardingController extends BaseController< } if (!vaultEncryptionKey && !password) { - throw new Error(SeedlessOnboardingControllerError.MissingCredentials); + throw new Error( + SeedlessOnboardingControllerErrorMessage.MissingCredentials, + ); } let decryptedVaultData: unknown; @@ -636,12 +638,14 @@ export class SeedlessOnboardingController extends BaseController< const parsedEncryptedVault = JSON.parse(encryptedVault); if (vaultEncryptionSalt !== parsedEncryptedVault.salt) { - throw new Error(SeedlessOnboardingControllerError.ExpiredCredentials); + throw new Error( + SeedlessOnboardingControllerErrorMessage.ExpiredCredentials, + ); } if (typeof vaultEncryptionKey !== 'string') { throw new TypeError( - SeedlessOnboardingControllerError.WrongPasswordType, + SeedlessOnboardingControllerErrorMessage.WrongPasswordType, ); } @@ -714,11 +718,6 @@ export class SeedlessOnboardingController extends BaseController< * @param data.id - The identifier for the backup * @param data.seedPhrase - The seed phrase to backup as a Uint8Array */ - /** - * Update the existing social backups metadata state with the new backup metadata. - * - * @param newSocialBackupMetadata - The new social backup metadata to update. - */ #filterDupesAndUpdateSocialBackupsMetadata( data: | { @@ -927,7 +926,9 @@ export class SeedlessOnboardingController extends BaseController< #assertIsUnlocked(): void { if (!this.#isUnlocked) { - throw new Error(SeedlessOnboardingControllerError.ControllerLocked); + throw new Error( + SeedlessOnboardingControllerErrorMessage.ControllerLocked, + ); } } From bf3862a0af307dec8f1bc18bc76bfe7a8f27aca1 Mon Sep 17 00:00:00 2001 From: lwin Date: Thu, 22 May 2025 18:08:41 +0800 Subject: [PATCH 129/147] chore: resolved conflicts --- .../src/SeedlessOnboardingController.test.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts index 8514b55455..e4ca61c823 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts @@ -1408,7 +1408,9 @@ describe('SeedlessOnboardingController', () => { NEW_KEY_RING_1.seedPhrase, NEW_KEY_RING_1.id, ), - ).rejects.toThrow(SeedlessOnboardingControllerError.OutdatedPassword); + ).rejects.toThrow( + SeedlessOnboardingControllerErrorMessage.OutdatedPassword, + ); }, ); }); From e280b1eb3a053d8d7989208a9686b7f33e67ca9e Mon Sep 17 00:00:00 2001 From: lwin Date: Thu, 22 May 2025 18:14:35 +0800 Subject: [PATCH 130/147] docs: updated ChangeLog --- packages/seedless-onboarding-controller/CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/seedless-onboarding-controller/CHANGELOG.md b/packages/seedless-onboarding-controller/CHANGELOG.md index d140dc32fd..3e09f1d0a5 100644 --- a/packages/seedless-onboarding-controller/CHANGELOG.md +++ b/packages/seedless-onboarding-controller/CHANGELOG.md @@ -16,5 +16,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add array of new seed phrase backups to the metadata store in batch (useful in multi-srp flow) - Fetch seed phrase metadata from the metadata store - Update the password of the seedless onboarding flow +- Support multi SRP sync using social login. ([#5](https://github.com/Web3Auth/core/pull/5)) + - Update Metadata to support multiple types of secrets (SRP, PrivateKey). + - Add `Controller Lock` which will sync with `Keyring Lock`. [Unreleased]: https://github.com/MetaMask/core/ From 8f1c2eeeeb8910a496a2aeb942dcc68dcf5a9d24 Mon Sep 17 00:00:00 2001 From: lwin Date: Thu, 22 May 2025 18:19:12 +0800 Subject: [PATCH 131/147] docs: updated ChangeLog --- packages/seedless-onboarding-controller/CHANGELOG.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/seedless-onboarding-controller/CHANGELOG.md b/packages/seedless-onboarding-controller/CHANGELOG.md index e621033e2c..dc495db8fb 100644 --- a/packages/seedless-onboarding-controller/CHANGELOG.md +++ b/packages/seedless-onboarding-controller/CHANGELOG.md @@ -9,10 +9,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added -- Updated `toprf-secure-backup` to `0.2.0`. ([#13](https://github.com/Web3Auth/core/pull/13)) - - - added an optional constructor param, `topfKeyDeriver` to assist the `Key derivation` in `toprf-seucre-backup` sdk and adds an additinal security - - Initial implementation of the seedless onboarding controller. ([#5671](https://github.com/MetaMask/core/pull/5671)) - Authenticate OAuth user using the seedless onboarding flow and determine if the user is already registered or not - Create a new Toprf key and backup seed phrase @@ -20,5 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add array of new seed phrase backups to the metadata store in batch (useful in multi-srp flow) - Fetch seed phrase metadata from the metadata store - Update the password of the seedless onboarding flow +- Updated `toprf-secure-backup` to `0.2.0`. ([#13](https://github.com/Web3Auth/core/pull/13)) + - added an optional constructor param, `topfKeyDeriver` to assist the `Key derivation` in `toprf-seucre-backup` sdk and adds an additinal security [Unreleased]: https://github.com/MetaMask/core/ From ee438078134bf0bd99c56829156cb9664fe03885 Mon Sep 17 00:00:00 2001 From: lwin Date: Mon, 26 May 2025 07:47:17 +0800 Subject: [PATCH 132/147] chore: updated yarn.lock --- yarn.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/yarn.lock b/yarn.lock index fedd242bdd..1179592de7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4509,7 +4509,7 @@ __metadata: "@metamask/toprf-secure-backup@file:./toprf-secure-backup.tgz::locator=%40metamask%2Fseedless-onboarding-controller%40workspace%3Apackages%2Fseedless-onboarding-controller": version: 0.2.0 - resolution: "@metamask/toprf-secure-backup@file:./toprf-secure-backup.tgz#./toprf-secure-backup.tgz::hash=51e2bb&locator=%40metamask%2Fseedless-onboarding-controller%40workspace%3Apackages%2Fseedless-onboarding-controller" + resolution: "@metamask/toprf-secure-backup@file:./toprf-secure-backup.tgz#./toprf-secure-backup.tgz::hash=bb8607&locator=%40metamask%2Fseedless-onboarding-controller%40workspace%3Apackages%2Fseedless-onboarding-controller" dependencies: "@metamask/auth-network-utils": "npm:^0.2.0" "@noble/ciphers": "npm:^1.2.1" @@ -4521,7 +4521,7 @@ __metadata: "@toruslabs/fetch-node-details": "npm:^15.0.0" "@toruslabs/http-helpers": "npm:^8.1.1" bn.js: "npm:^5.2.1" - checksum: 10/ec04194eedcf6a02142524fa7f4962cf224b2abce546054f6dc1476064eb934089fa58bd8923e773f4ff7ac73e93b2a87c6c5629fb23f9b2685025c42cb6d288 + checksum: 10/a45f3c022de89a6de7b736695b40a966ac880f6b30700fd0386eb2fec6f798fdbe52a0b6eea935b19a0ec741d74cd346feb6facfdf5632a30b640c48065069e8 languageName: node linkType: hard From c1915996d0192efd4e177de65dad598b6b1e408e Mon Sep 17 00:00:00 2001 From: lwin Date: Mon, 26 May 2025 11:37:06 +0800 Subject: [PATCH 133/147] feat: refactored #recoverEncKey method --- .../src/SeedlessOnboardingController.ts | 24 +++++++++++++------ yarn.lock | 4 ++-- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index 1fa0204cd4..2e89fc6fd1 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -4,6 +4,7 @@ import { BaseController } from '@metamask/base-controller'; import type { KeyPair, NodeAuthTokens, + RecoverEncryptionKeyResult, SEC1EncodedPublicKey, } from '@metamask/toprf-secure-backup'; import { ToprfSecureBackup } from '@metamask/toprf-secure-backup'; @@ -703,11 +704,12 @@ export class SeedlessOnboardingController extends BaseController< * @throws RecoveryError - If failed to recover the encryption key. */ async #recoverEncKey(password: string) { - this.#assertIsAuthenticatedUser(this.state); - const authConnectionId = - this.state.groupedAuthConnectionId || this.state.authConnectionId; + return this.#withRecoveryErrorHandler(async () => { + this.#assertIsAuthenticatedUser(this.state); + + const authConnectionId = + this.state.groupedAuthConnectionId || this.state.authConnectionId; - try { const recoverEncKeyResult = await this.toprfClient.recoverEncKey({ nodeAuthTokens: this.state.nodeAuthTokens, password, @@ -715,9 +717,7 @@ export class SeedlessOnboardingController extends BaseController< userId: this.state.userId, }); return recoverEncKeyResult; - } catch (error) { - throw RecoveryError.getInstance(error); - } + }); } /** @@ -1193,6 +1193,16 @@ export class SeedlessOnboardingController extends BaseController< } } + async #withRecoveryErrorHandler( + callback: () => Promise, + ): Promise { + try { + return await callback(); + } catch (error) { + throw RecoveryError.getInstance(error); + } + } + /** * Assert that the password is in sync with the global password. * diff --git a/yarn.lock b/yarn.lock index 1179592de7..4226d2ad5b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4509,7 +4509,7 @@ __metadata: "@metamask/toprf-secure-backup@file:./toprf-secure-backup.tgz::locator=%40metamask%2Fseedless-onboarding-controller%40workspace%3Apackages%2Fseedless-onboarding-controller": version: 0.2.0 - resolution: "@metamask/toprf-secure-backup@file:./toprf-secure-backup.tgz#./toprf-secure-backup.tgz::hash=bb8607&locator=%40metamask%2Fseedless-onboarding-controller%40workspace%3Apackages%2Fseedless-onboarding-controller" + resolution: "@metamask/toprf-secure-backup@file:./toprf-secure-backup.tgz#./toprf-secure-backup.tgz::hash=f5c0b6&locator=%40metamask%2Fseedless-onboarding-controller%40workspace%3Apackages%2Fseedless-onboarding-controller" dependencies: "@metamask/auth-network-utils": "npm:^0.2.0" "@noble/ciphers": "npm:^1.2.1" @@ -4521,7 +4521,7 @@ __metadata: "@toruslabs/fetch-node-details": "npm:^15.0.0" "@toruslabs/http-helpers": "npm:^8.1.1" bn.js: "npm:^5.2.1" - checksum: 10/a45f3c022de89a6de7b736695b40a966ac880f6b30700fd0386eb2fec6f798fdbe52a0b6eea935b19a0ec741d74cd346feb6facfdf5632a30b640c48065069e8 + checksum: 10/62c6af775f6daaffb1a11beea2de4c799bfce547d6ab4d38b70541d8d334577d3af2923fd639958c6fe346a76a05c19977c4e2d99a4d5a46267cef526b827502 languageName: node linkType: hard From dc93ada4ad1e934bd0d2855c0ced95603011b880 Mon Sep 17 00:00:00 2001 From: lwin Date: Mon, 26 May 2025 12:08:23 +0800 Subject: [PATCH 134/147] feat: added new state, 'recoveryRatelimitCache', and updated 'RecoveryError' --- .../src/SeedlessOnboardingController.ts | 40 ++++++++++++++- .../src/errors.ts | 49 +++++++++++++++---- .../src/types.ts | 23 +++++++++ 3 files changed, 100 insertions(+), 12 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index 7cdb7aa64a..2eb9041007 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -105,6 +105,10 @@ const seedlessOnboardingMetadata: StateMetadata extends BaseController< @@ -1236,10 +1240,42 @@ export class SeedlessOnboardingController extends BaseController< async #withRecoveryErrorHandler( callback: () => Promise, ): Promise { + const currentRecoveryAttempts = + this.state.recoveryRatelimitCache?.numberOfAttempts || 0; + let updatedRecoveryAttempts = currentRecoveryAttempts + 1; + let updatedRemainingTime = + this.state.recoveryRatelimitCache?.remainingTime || 0; + try { - return await callback(); + const result = await callback(); + + // reset the ratelimit error data + updatedRecoveryAttempts = 0; + updatedRemainingTime = 0; + + return result; } catch (error) { - throw RecoveryError.getInstance(error); + const recoveryError = RecoveryError.getInstance(error, { + numberOfAttempts: updatedRecoveryAttempts, + remainingTime: updatedRemainingTime, + }); + + if (recoveryError.data?.numberOfAttempts) { + updatedRecoveryAttempts = recoveryError.data.numberOfAttempts; + } + + if (recoveryError.data?.remainingTime) { + updatedRemainingTime = recoveryError.data.remainingTime; + } + + throw recoveryError; + } finally { + this.update((state) => { + state.recoveryRatelimitCache = { + numberOfAttempts: updatedRecoveryAttempts, + remainingTime: updatedRemainingTime, + }; + }); } } diff --git a/packages/seedless-onboarding-controller/src/errors.ts b/packages/seedless-onboarding-controller/src/errors.ts index d702b241fb..c1f5664c5a 100644 --- a/packages/seedless-onboarding-controller/src/errors.ts +++ b/packages/seedless-onboarding-controller/src/errors.ts @@ -5,6 +5,7 @@ import { } from '@metamask/toprf-secure-backup'; import { SeedlessOnboardingControllerErrorMessage } from './constants'; +import type { RecoveryErrorData } from './types'; /** * Get the error message from the TOPRF error code. @@ -48,11 +49,17 @@ function getRateLimitErrorData( 'remainingTime' in error.meta.rateLimitDetails && typeof error.meta.rateLimitDetails.remainingTime === 'number' && 'message' in error.meta.rateLimitDetails && - typeof error.meta.rateLimitDetails.message === 'string' + typeof error.meta.rateLimitDetails.message === 'string' && + 'lockTime' in error.meta.rateLimitDetails && + typeof error.meta.rateLimitDetails.lockTime === 'number' && + 'guessCount' in error.meta.rateLimitDetails && + typeof error.meta.rateLimitDetails.guessCount === 'number' ) { return { remainingTime: error.meta.rateLimitDetails.remainingTime, message: error.meta.rateLimitDetails.message, + lockTime: error.meta.rateLimitDetails.lockTime, + guessCount: error.meta.rateLimitDetails.guessCount, }; } return undefined; @@ -92,9 +99,9 @@ export class PasswordSyncError extends Error { * It extends the Error class and includes a data property that can be used to store additional information. */ export class RecoveryError extends Error { - data: RateLimitErrorData | undefined; + data: RecoveryErrorData | undefined; - constructor(message: string, data?: RateLimitErrorData) { + constructor(message: string, data?: RecoveryErrorData) { super(message); this.data = data; this.name = 'SeedlessOnboardingController - RecoveryError'; @@ -104,19 +111,41 @@ export class RecoveryError extends Error { * Get an instance of the RecoveryError class. * * @param error - The error to get the instance of. + * @param cachedErrorData - The cached error data to help synchronize the recovery error data across multiple devices. * @returns The instance of the RecoveryError class. */ - static getInstance(error: unknown): RecoveryError { - if (error instanceof TOPRFError) { - const rateLimitErrorData = getRateLimitErrorData(error); - const errorMessage = getErrorMessageFromTOPRFErrorCode( - error.code, + static getInstance( + error: unknown, + cachedErrorData?: RecoveryErrorData, + ): RecoveryError { + if (!(error instanceof TOPRFError)) { + return new RecoveryError( SeedlessOnboardingControllerErrorMessage.LoginFailedError, ); - return new RecoveryError(errorMessage, rateLimitErrorData); } - return new RecoveryError( + + const rateLimitErrorData = getRateLimitErrorData(error); + let recoveryErrorData = rateLimitErrorData + ? { + numberOfAttempts: rateLimitErrorData.guessCount, + remainingTime: rateLimitErrorData.remainingTime, + } + : undefined; + + if ( + rateLimitErrorData && + rateLimitErrorData.guessCount === cachedErrorData?.numberOfAttempts + ) { + recoveryErrorData = { + numberOfAttempts: rateLimitErrorData.guessCount, + remainingTime: rateLimitErrorData.lockTime, + }; + } + + const errorMessage = getErrorMessageFromTOPRFErrorCode( + error.code, SeedlessOnboardingControllerErrorMessage.LoginFailedError, ); + return new RecoveryError(errorMessage, recoveryErrorData); } } diff --git a/packages/seedless-onboarding-controller/src/types.ts b/packages/seedless-onboarding-controller/src/types.ts index a61ac12c37..5bff5bc7f9 100644 --- a/packages/seedless-onboarding-controller/src/types.ts +++ b/packages/seedless-onboarding-controller/src/types.ts @@ -65,6 +65,21 @@ export type SRPBackedUpUserDetails = { authPubKey: string; }; +/** + * The data of the recovery error. + */ +export type RecoveryErrorData = { + /** + * The remaining time in seconds before the user can try again. + */ + remainingTime: number; + + /** + * The number of attempts made by the user. + */ + numberOfAttempts: number; +}; + // State export type SeedlessOnboardingControllerState = Partial & @@ -96,6 +111,14 @@ export type SeedlessOnboardingControllerState = * Cache for checkIsPasswordOutdated result and timestamp. */ passwordOutdatedCache?: { isExpiredPwd: boolean; timestamp: number }; + + /** + * The cached data of the recovery error. + * + * This data is used to cache the recovery error data to retrieve the accurate ratelimit remainingTime and numberOfAttempts. + * And it also helps to synchronize the recovery error data across multiple devices. + */ + recoveryRatelimitCache?: RecoveryErrorData; }; // Actions From be8fed5e017cc9a31f7c3aa2c6e6b80be6941e9f Mon Sep 17 00:00:00 2001 From: lwin Date: Mon, 26 May 2025 12:08:30 +0800 Subject: [PATCH 135/147] test: updated tests --- .../src/SeedlessOnboardingController.test.ts | 63 ++++++++++++++++++- 1 file changed, 60 insertions(+), 3 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts index ccb3339ec0..3ddd9f1233 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts @@ -44,6 +44,7 @@ import { import type { AllowedActions, AllowedEvents, + RecoveryErrorData, SeedlessOnboardingControllerMessenger, SeedlessOnboardingControllerOptions, SeedlessOnboardingControllerState, @@ -408,6 +409,7 @@ async function decryptVault(vault: string, password: string) { * @param options.vault - The mock vault data. * @param options.vaultEncryptionKey - The mock vault encryption key. * @param options.vaultEncryptionSalt - The mock vault encryption salt. + * @param options.recoveryRatelimitCache - The mock rate limit details cache. * @returns The initial controller state with the mock authenticated user. */ function getMockInitialControllerState(options?: { @@ -417,6 +419,7 @@ function getMockInitialControllerState(options?: { vault?: string; vaultEncryptionKey?: string; vaultEncryptionSalt?: string; + recoveryRatelimitCache?: RecoveryErrorData; }): Partial { const state = getDefaultSeedlessOnboardingControllerState(); @@ -443,6 +446,10 @@ function getMockInitialControllerState(options?: { state.authPubKey = options.authPubKey ?? MOCK_AUTH_PUB_KEY; } + if (options?.recoveryRatelimitCache) { + state.recoveryRatelimitCache = options.recoveryRatelimitCache; + } + return state; } @@ -1703,8 +1710,10 @@ describe('SeedlessOnboardingController', () => { jest.spyOn(toprfClient, 'recoverEncKey').mockRejectedValueOnce( new TOPRFError(1009, 'Rate limit exceeded', { rateLimitDetails: { - remainingTime: 300, + remainingTime: 250, message: 'Rate limit in effect', + lockTime: 300, + guessCount: 7, }, }), ); @@ -1715,11 +1724,59 @@ describe('SeedlessOnboardingController', () => { new RecoveryError( SeedlessOnboardingControllerErrorMessage.TooManyLoginAttempts, { - remainingTime: 10, - message: 'Rate limit exceeded', + remainingTime: 250, + numberOfAttempts: 7, }, ), ); + + expect(controller.state.recoveryRatelimitCache).toStrictEqual({ + remainingTime: 250, + numberOfAttempts: 7, + }); + }, + ); + }); + + it('should use cached value for TooManyLoginAttempts error', async () => { + await withController( + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + recoveryRatelimitCache: { + remainingTime: 30, + numberOfAttempts: 4, + }, + }), + }, + async ({ controller, toprfClient }) => { + jest.spyOn(toprfClient, 'recoverEncKey').mockRejectedValueOnce( + new TOPRFError(1009, 'Rate limit exceeded', { + rateLimitDetails: { + remainingTime: 58, // decreased by 3 seconds due to the network delay and server processing time + message: 'Rate limit in effect', + lockTime: 60, + guessCount: 5, + }, + }), + ); + + await expect( + controller.fetchAllSeedPhrases(MOCK_PASSWORD), + ).rejects.toStrictEqual( + new RecoveryError( + SeedlessOnboardingControllerErrorMessage.TooManyLoginAttempts, + { + remainingTime: 60, + numberOfAttempts: 5, + }, + ), + ); + + expect(controller.state.recoveryRatelimitCache).toStrictEqual({ + remainingTime: 60, + numberOfAttempts: 5, + }); }, ); }); From 74d47f013163b91de8246834c663d46baabdd395 Mon Sep 17 00:00:00 2001 From: lwin Date: Mon, 26 May 2025 12:23:24 +0800 Subject: [PATCH 136/147] chore: updated JsDocs and exports --- .../src/SeedlessOnboardingController.ts | 10 ++++++++-- .../seedless-onboarding-controller/src/errors.ts | 14 +++++++++----- .../seedless-onboarding-controller/src/index.ts | 1 + 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index 2eb9041007..28d943df34 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -1237,8 +1237,14 @@ export class SeedlessOnboardingController extends BaseController< } } + /** + * Handle the recovery error and update the recovery error data after executing the given callback. + * + * @param recoveryCallback - The callback recovery function to execute. + * @returns The result of the callback function. + */ async #withRecoveryErrorHandler( - callback: () => Promise, + recoveryCallback: () => Promise, ): Promise { const currentRecoveryAttempts = this.state.recoveryRatelimitCache?.numberOfAttempts || 0; @@ -1247,7 +1253,7 @@ export class SeedlessOnboardingController extends BaseController< this.state.recoveryRatelimitCache?.remainingTime || 0; try { - const result = await callback(); + const result = await recoveryCallback(); // reset the ratelimit error data updatedRecoveryAttempts = 0; diff --git a/packages/seedless-onboarding-controller/src/errors.ts b/packages/seedless-onboarding-controller/src/errors.ts index c1f5664c5a..2eb5a84c3f 100644 --- a/packages/seedless-onboarding-controller/src/errors.ts +++ b/packages/seedless-onboarding-controller/src/errors.ts @@ -125,7 +125,7 @@ export class RecoveryError extends Error { } const rateLimitErrorData = getRateLimitErrorData(error); - let recoveryErrorData = rateLimitErrorData + const recoveryErrorData = rateLimitErrorData ? { numberOfAttempts: rateLimitErrorData.guessCount, remainingTime: rateLimitErrorData.remainingTime, @@ -134,12 +134,16 @@ export class RecoveryError extends Error { if ( rateLimitErrorData && + recoveryErrorData && rateLimitErrorData.guessCount === cachedErrorData?.numberOfAttempts ) { - recoveryErrorData = { - numberOfAttempts: rateLimitErrorData.guessCount, - remainingTime: rateLimitErrorData.lockTime, - }; + // if the number of attempts is the same, we can assume that the previous attempt has been made from the same device. + // The `lockTime` value is the total ratelimit duration based on the `guessCount` value. + // The `remainingTime` value is the time that server acutally waits to block the recovery (count down from the `lockTime`) before the next attempt. + // However, due to the network delay and server processing time, the `remainingTime` value will be smaller than the `lockTime` value when it reaches to the client side. + // e.g. The actual remaining time is 30s, but when it reaches to the client side, it becomes less than 30s, but the `lockTime` value is still 30s. + // So, to enforce the user to follow the rate limit policy in the client side, we use the `lockTime` value to calculate the remaining time. + recoveryErrorData.remainingTime = rateLimitErrorData.lockTime; } const errorMessage = getErrorMessageFromTOPRFErrorCode( diff --git a/packages/seedless-onboarding-controller/src/index.ts b/packages/seedless-onboarding-controller/src/index.ts index 94ab0259eb..611bf94b29 100644 --- a/packages/seedless-onboarding-controller/src/index.ts +++ b/packages/seedless-onboarding-controller/src/index.ts @@ -13,6 +13,7 @@ export type { SeedlessOnboardingControllerActions, SeedlessOnboardingControllerEvents, ToprfKeyDeriver, + RecoveryErrorData, } from './types'; export { Web3AuthNetwork, From e6fb3a07101a046ed0a556678f297484abcdcd81 Mon Sep 17 00:00:00 2001 From: lwin Date: Mon, 26 May 2025 12:29:27 +0800 Subject: [PATCH 137/147] docs: updated ChangeLog --- packages/seedless-onboarding-controller/CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/seedless-onboarding-controller/CHANGELOG.md b/packages/seedless-onboarding-controller/CHANGELOG.md index 87fa5205d8..3572319607 100644 --- a/packages/seedless-onboarding-controller/CHANGELOG.md +++ b/packages/seedless-onboarding-controller/CHANGELOG.md @@ -26,5 +26,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - sync latest global password to reset vault to use latest password and persist latest auth pubkey - Updated `toprf-secure-backup` to `0.2.0`. ([#13](https://github.com/Web3Auth/core/pull/13)) - added an optional constructor param, `topfKeyDeriver` to assist the `Key derivation` in `toprf-seucre-backup` sdk and adds an additinal security +- Added new state value, `recoveryRatelimitCache` to the controller. ([#17](https://github.com/Web3Auth/core/pull/17)) + - The new state can be used to parse the `RecoveryError` correctly and synchroize the error data (numberOfAttempts) across multiple devices. [Unreleased]: https://github.com/MetaMask/core/ From 7320a8fc6ec3a347ea18cc73d30eb20ce0b3be9f Mon Sep 17 00:00:00 2001 From: lwin Date: Thu, 29 May 2025 12:02:46 +0800 Subject: [PATCH 138/147] feat: fetch SeedPhrases backup with cached encryption key --- .../CHANGELOG.md | 3 ++ .../seedless-onboarding-controller.tgz | Bin 51318 -> 56355 bytes .../src/SeedlessOnboardingController.test.ts | 48 ++++++++++++++++++ .../src/SeedlessOnboardingController.ts | 23 +++++++-- 4 files changed, 70 insertions(+), 4 deletions(-) diff --git a/packages/seedless-onboarding-controller/CHANGELOG.md b/packages/seedless-onboarding-controller/CHANGELOG.md index 3e09f1d0a5..6deee96f3d 100644 --- a/packages/seedless-onboarding-controller/CHANGELOG.md +++ b/packages/seedless-onboarding-controller/CHANGELOG.md @@ -19,5 +19,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Support multi SRP sync using social login. ([#5](https://github.com/Web3Auth/core/pull/5)) - Update Metadata to support multiple types of secrets (SRP, PrivateKey). - Add `Controller Lock` which will sync with `Keyring Lock`. + - Updated `VaultEncryptor` type in constructor args and is compulsory to provided relevant encryptor to constructor. + - Added new non-persisted states, `encryptionKey` and `encryptionSalt` to decrypt the vault when password is not available. + - Update `password` param in `fetchAllSeedPhrases` method to optional. If password is not provided, `cached EncryptionKey` will be used. [Unreleased]: https://github.com/MetaMask/core/ diff --git a/packages/seedless-onboarding-controller/seedless-onboarding-controller.tgz b/packages/seedless-onboarding-controller/seedless-onboarding-controller.tgz index 2cc948fd3a6536ac68b99e8efa6361f2e719cef7..195d092ee357b752ccdaa40589227f2a28f66b73 100644 GIT binary patch literal 56355 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 Gk$(VT{8u9Y diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts index 4fcb09ea10..27cf7d4301 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts @@ -1371,6 +1371,54 @@ describe('SeedlessOnboardingController', () => { ); }); + it('should be able to fetch seed phrases with cached encryption key without providing password', async () => { + const mockToprfEncryptor = createMockToprfEncryptor(); + + const MOCK_ENCRYPTION_KEY = + mockToprfEncryptor.deriveEncKey(MOCK_PASSWORD); + const MOCK_AUTH_KEY_PAIR = + mockToprfEncryptor.deriveAuthKeyPair(MOCK_PASSWORD); + + const mockResult = await createMockVault( + MOCK_ENCRYPTION_KEY, + MOCK_AUTH_KEY_PAIR, + MOCK_PASSWORD, + MOCK_NODE_AUTH_TOKENS, + ); + + const MOCK_VAULT = mockResult.encryptedMockVault; + const MOCK_VAULT_ENCRYPTION_KEY = mockResult.vaultEncryptionKey; + const MOCK_VAULT_ENCRYPTION_SALT = mockResult.vaultEncryptionSalt; + + await withController( + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + vault: MOCK_VAULT, + vaultEncryptionKey: MOCK_VAULT_ENCRYPTION_KEY, + vaultEncryptionSalt: MOCK_VAULT_ENCRYPTION_SALT, + }), + }, + async ({ controller }) => { + await controller.submitPassword(MOCK_PASSWORD); + + const mockSecretDataGet = handleMockSecretDataGet({ + status: 200, + body: createMockSecretDataGetResponse( + [MOCK_SEED_PHRASE], + MOCK_PASSWORD, + ), + }); + + const secretData = await controller.fetchAllSeedPhrases(); + + expect(mockSecretDataGet.isDone()).toBe(true); + expect(secretData).toBeDefined(); + expect(secretData).toStrictEqual([MOCK_SEED_PHRASE]); + }, + ); + }); + it('should throw an error if the key recovery failed', async () => { await withController( { diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index 091e957198..0863f7c50b 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -293,14 +293,28 @@ export class SeedlessOnboardingController extends BaseController< * * Decrypts the seed phrases and returns the decrypted seed phrases using the recovered encryption key from the password. * - * @param password - The password used to create new wallet and seedphrase + * @param password - The optional password used to create new wallet and seedphrase. If not provided, `cached Encryption Key` will be used. * @returns A promise that resolves to the seed phrase metadata. */ - async fetchAllSeedPhrases(password: string): Promise { + async fetchAllSeedPhrases(password?: string): Promise { // assert that the user is authenticated before fetching the seed phrases this.#assertIsAuthenticatedUser(this.state); - const { encKey, authKeyPair } = await this.#recoverEncKey(password); + let encKey: Uint8Array; + let authKeyPair: KeyPair; + + if (password) { + const recoverEncKeyResult = await this.#recoverEncKey(password); + encKey = recoverEncKeyResult.encKey; + authKeyPair = recoverEncKeyResult.authKeyPair; + } else { + this.#assertIsUnlocked(); + // verify the password and unlock the vault + const { toprfEncryptionKey, toprfAuthKeyPair } = + await this.#unlockVaultAndGetBackupEncKey(); + encKey = toprfEncryptionKey; + authKeyPair = toprfAuthKeyPair; + } try { const secretData = await this.toprfClient.fetchAllSecretDataItems({ @@ -308,7 +322,8 @@ export class SeedlessOnboardingController extends BaseController< authKeyPair, }); - if (secretData?.length > 0) { + if (secretData?.length > 0 && password) { + // if password is provided, we need to create a new vault with the auth data. (supposedly the user is trying to rehydrate the wallet) await this.#createNewVaultWithAuthData({ password, rawToprfEncryptionKey: encKey, From 5f8ef7b86423de698debc0a657235bc4003538fa Mon Sep 17 00:00:00 2001 From: lwin Date: Thu, 29 May 2025 12:37:18 +0800 Subject: [PATCH 139/147] fix: fixed lint --- .../package.json | 4 +-- yarn.lock | 36 ++----------------- 2 files changed, 5 insertions(+), 35 deletions(-) diff --git a/packages/seedless-onboarding-controller/package.json b/packages/seedless-onboarding-controller/package.json index d91d5a6f26..25fc745854 100644 --- a/packages/seedless-onboarding-controller/package.json +++ b/packages/seedless-onboarding-controller/package.json @@ -58,7 +58,7 @@ "@lavamoat/preinstall-always-fail": "^2.1.0", "@metamask/auto-changelog": "^3.4.4", "@metamask/browser-passworder": "^4.3.0", - "@metamask/keyring-controller": "^21.0.6", + "@metamask/keyring-controller": "^22.0.0", "@noble/ciphers": "^0.5.2", "@noble/curves": "^1.2.0", "@noble/hashes": "^1.4.0", @@ -74,7 +74,7 @@ "typescript": "~5.2.2" }, "peerDependencies": { - "@metamask/keyring-controller": "^21.0.0" + "@metamask/keyring-controller": "^22.0.0" }, "engines": { "node": "^18.18 || >=20" diff --git a/yarn.lock b/yarn.lock index d91d13ec40..9541bf0490 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3564,29 +3564,6 @@ __metadata: languageName: node linkType: hard -"@metamask/keyring-controller@npm:^21.0.6": - version: 21.0.6 - resolution: "@metamask/keyring-controller@npm:21.0.6" - dependencies: - "@ethereumjs/util": "npm:^9.1.0" - "@keystonehq/metamask-airgapped-keyring": "npm:^0.14.1" - "@metamask/base-controller": "npm:^8.0.1" - "@metamask/browser-passworder": "npm:^4.3.0" - "@metamask/eth-hd-keyring": "npm:^12.0.0" - "@metamask/eth-sig-util": "npm:^8.2.0" - "@metamask/eth-simple-keyring": "npm:^10.0.0" - "@metamask/keyring-api": "npm:^17.4.0" - "@metamask/keyring-internal-api": "npm:^6.0.1" - "@metamask/utils": "npm:^11.2.0" - async-mutex: "npm:^0.5.0" - ethereumjs-wallet: "npm:^1.0.1" - immer: "npm:^9.0.6" - lodash: "npm:^4.17.21" - ulid: "npm:^2.3.0" - checksum: 10/913d2576c121e6171a9184720e87bfa0eba1220bdcf0549e3cbf865020f8eaa5182c9abea562b101dd5155cefb99df13a0552ebdfeb7ca7b0905d3ff9f753e88 - languageName: node - linkType: hard - "@metamask/keyring-controller@npm:^22.0.0, @metamask/keyring-controller@workspace:packages/keyring-controller": version: 0.0.0-use.local resolution: "@metamask/keyring-controller@workspace:packages/keyring-controller" @@ -4308,7 +4285,7 @@ __metadata: "@metamask/auto-changelog": "npm:^3.4.4" "@metamask/base-controller": "npm:^8.0.1" "@metamask/browser-passworder": "npm:^4.3.0" - "@metamask/keyring-controller": "npm:^21.0.6" + "@metamask/keyring-controller": "npm:^22.0.0" "@metamask/toprf-secure-backup": "npm:^0.1.0" "@metamask/utils": "npm:^11.2.0" "@noble/ciphers": "npm:^0.5.2" @@ -4326,7 +4303,7 @@ __metadata: typedoc-plugin-missing-exports: "npm:^2.0.0" typescript: "npm:~5.2.2" peerDependencies: - "@metamask/keyring-controller": ^21.0.0 + "@metamask/keyring-controller": ^22.0.0 languageName: unknown linkType: soft @@ -5066,20 +5043,13 @@ __metadata: languageName: node linkType: hard -"@sentry/core@npm:^9.10.0": +"@sentry/core@npm:^9.10.0, @sentry/core@npm:^9.22.0": version: 9.23.0 resolution: "@sentry/core@npm:9.23.0" checksum: 10/4ee771098d4ce4f4d2f7bd62cacb41ee2993780f4cab0eea600e73de3a3803cb953ac47ac015c23bcd7a9919e2220fd6cdc5a9a22a3663440296336d8df959b7 languageName: node linkType: hard -"@sentry/core@npm:^9.22.0": - version: 9.22.0 - resolution: "@sentry/core@npm:9.22.0" - checksum: 10/5bf5d6b5402dca90c6ed1d6e8834c00067806f9710f1cbcd0dff3004c3f3b6ffae8e43d56592d5378fdbddb3d196eb60d8850ea50ca6eca8e31870608109df3d - languageName: node - linkType: hard - "@sinclair/typebox@npm:^0.27.8": version: 0.27.8 resolution: "@sinclair/typebox@npm:0.27.8" From eb017d934569812e815dfdbc9778a4a81371b338 Mon Sep 17 00:00:00 2001 From: lwin Date: Thu, 29 May 2025 12:55:38 +0800 Subject: [PATCH 140/147] docs: updated ChangeLog --- packages/seedless-onboarding-controller/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/seedless-onboarding-controller/CHANGELOG.md b/packages/seedless-onboarding-controller/CHANGELOG.md index d140dc32fd..4192fe6423 100644 --- a/packages/seedless-onboarding-controller/CHANGELOG.md +++ b/packages/seedless-onboarding-controller/CHANGELOG.md @@ -9,7 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added -- Initial implementation of the seedless onboarding controller. ([#5671](https://github.com/MetaMask/core/pull/5671)) +- Initial implementation of the seedless onboarding controller. ([#5874](https://github.com/MetaMask/core/pull/5874)) - Authenticate OAuth user using the seedless onboarding flow and determine if the user is already registered or not - Create a new Toprf key and backup seed phrase - Add a new seed phrase backup to the metadata store From dbd6206898f0116536daa9908a4f2eae8ac9054a Mon Sep 17 00:00:00 2001 From: lwin Date: Thu, 29 May 2025 13:18:38 +0800 Subject: [PATCH 141/147] docs: updated change log --- packages/seedless-onboarding-controller/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/seedless-onboarding-controller/CHANGELOG.md b/packages/seedless-onboarding-controller/CHANGELOG.md index 7683a98497..4813ffb77a 100644 --- a/packages/seedless-onboarding-controller/CHANGELOG.md +++ b/packages/seedless-onboarding-controller/CHANGELOG.md @@ -16,7 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add array of new seed phrase backups to the metadata store in batch (useful in multi-srp flow) - Fetch seed phrase metadata from the metadata store - Update the password of the seedless onboarding flow -- Support multi SRP sync using social login. ([#5](https://github.com/Web3Auth/core/pull/5)) +- Support multi SRP sync using social login. ([#5875](https://github.com/MetaMask/core/pull/5875)) - Update Metadata to support multiple types of secrets (SRP, PrivateKey). - Add `Controller Lock` which will sync with `Keyring Lock`. - Updated `VaultEncryptor` type in constructor args and is compulsory to provided relevant encryptor to constructor. From 55756f028d2109210ad5b6a58332431d337d3ca9 Mon Sep 17 00:00:00 2001 From: lwin Date: Thu, 29 May 2025 14:20:10 +0800 Subject: [PATCH 142/147] docs: updated change log --- packages/seedless-onboarding-controller/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/seedless-onboarding-controller/CHANGELOG.md b/packages/seedless-onboarding-controller/CHANGELOG.md index 2ce003a76c..91163d106b 100644 --- a/packages/seedless-onboarding-controller/CHANGELOG.md +++ b/packages/seedless-onboarding-controller/CHANGELOG.md @@ -22,7 +22,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Updated `VaultEncryptor` type in constructor args and is compulsory to provided relevant encryptor to constructor. - Added new non-persisted states, `encryptionKey` and `encryptionSalt` to decrypt the vault when password is not available. - Update `password` param in `fetchAllSeedPhrases` method to optional. If password is not provided, `cached EncryptionKey` will be used. -- Password sync features implementation. ([#6](https://github.com/Web3Auth/core/pull/6)) +- Password sync features implementation. ([#5877](https://github.com/MetaMask/core/pull/5877)) - checkIsPasswordOutdated to check current password is outdated compare to global password - Add password outdated check to add SRPs / change password - recover old password using latest global password From 8d8b458aff0f3f2274a1f4f122bc4784418f7f8a Mon Sep 17 00:00:00 2001 From: lwin Date: Thu, 29 May 2025 14:52:51 +0800 Subject: [PATCH 143/147] chore: removed tgz package --- .../seedless-onboarding-controller.tgz | Bin 66977 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 packages/seedless-onboarding-controller/seedless-onboarding-controller.tgz diff --git a/packages/seedless-onboarding-controller/seedless-onboarding-controller.tgz b/packages/seedless-onboarding-controller/seedless-onboarding-controller.tgz deleted file mode 100644 index 7b7153c48106323f66d931407100598ce76af02d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66977 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 XP7^${h&X>U6u5$>0?s!RY_r% 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 Lco6ri0O|$+H?M%W From ae462570f46833dc515f9cd97f1c0f3b5f82fb67 Mon Sep 17 00:00:00 2001 From: lwin Date: Thu, 29 May 2025 14:55:14 +0800 Subject: [PATCH 144/147] chore: removed toprf-secure-backup.tgz --- .../toprf-secure-backup.tgz | Bin 110220 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 packages/seedless-onboarding-controller/toprf-secure-backup.tgz diff --git a/packages/seedless-onboarding-controller/toprf-secure-backup.tgz b/packages/seedless-onboarding-controller/toprf-secure-backup.tgz deleted file mode 100644 index 779c7a6f4428e068082355564770c69e8d9f5065..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110220 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 w_?7s8y Date: Fri, 30 May 2025 01:10:26 +0800 Subject: [PATCH 145/147] chore: update tropf-secure-backup sdk to v0.3.0 --- package.json | 3 +-- .../package.json | 4 ++-- yarn.lock | 22 +++++++++---------- 3 files changed, 14 insertions(+), 15 deletions(-) diff --git a/package.json b/package.json index a0a0a4481c..b9f75c1df6 100644 --- a/package.json +++ b/package.json @@ -46,8 +46,7 @@ "resolutions": { "elliptic@6.5.4": "^6.5.7", "fast-xml-parser@^4.3.4": "^4.4.1", - "ws@7.4.6": "^7.5.10", - "@metamask/auth-network-utils": "file:./packages/seedless-onboarding-controller/auth-network-utils.tgz" + "ws@7.4.6": "^7.5.10" }, "devDependencies": { "@babel/core": "^7.23.5", diff --git a/packages/seedless-onboarding-controller/package.json b/packages/seedless-onboarding-controller/package.json index 85810c5998..6e60255f8d 100644 --- a/packages/seedless-onboarding-controller/package.json +++ b/packages/seedless-onboarding-controller/package.json @@ -47,9 +47,9 @@ "since-latest-release": "../../scripts/since-latest-release.sh" }, "dependencies": { - "@metamask/auth-network-utils": "^0.2.0", + "@metamask/auth-network-utils": "^0.3.0", "@metamask/base-controller": "^8.0.1", - "@metamask/toprf-secure-backup": "./toprf-secure-backup.tgz", + "@metamask/toprf-secure-backup": "^0.3.0", "@metamask/utils": "^11.2.0", "async-mutex": "^0.5.0" }, diff --git a/yarn.lock b/yarn.lock index 4226d2ad5b..2deec67d37 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2628,9 +2628,9 @@ __metadata: languageName: unknown linkType: soft -"@metamask/auth-network-utils@file:./packages/seedless-onboarding-controller/auth-network-utils.tgz::locator=%40metamask%2Fcore-monorepo%40workspace%3A.": - version: 0.2.0 - resolution: "@metamask/auth-network-utils@file:./packages/seedless-onboarding-controller/auth-network-utils.tgz#./packages/seedless-onboarding-controller/auth-network-utils.tgz::hash=4aa17c&locator=%40metamask%2Fcore-monorepo%40workspace%3A." +"@metamask/auth-network-utils@npm:^0.3.0": + version: 0.3.0 + resolution: "@metamask/auth-network-utils@npm:0.3.0" dependencies: "@noble/curves": "npm:^1.8.1" "@noble/hashes": "npm:^1.7.1" @@ -2641,7 +2641,7 @@ __metadata: elliptic: "npm:^6.6.1" json-stable-stringify: "npm:^1.2.1" loglevel: "npm:^1.9.2" - checksum: 10/0621f133c97f180a91ca442b2f4113bc7885b300f5c4e00acde818db3bb26c8da5e88f183d29deeca3e47cff08b2890073cae2ecc9b81a97da03fa03b55e53a5 + checksum: 10/6239dd540cd289ef3a3d8ba2456c3968a1c25bf8b6c73459221da52cf34ce6e61922ad910434de5ccd7ab99443165f2f8bc53aff337f660124c4c65c0d6d05ff languageName: node linkType: hard @@ -4259,12 +4259,12 @@ __metadata: dependencies: "@lavamoat/allow-scripts": "npm:^3.0.4" "@lavamoat/preinstall-always-fail": "npm:^2.1.0" - "@metamask/auth-network-utils": "npm:^0.2.0" + "@metamask/auth-network-utils": "npm:^0.3.0" "@metamask/auto-changelog": "npm:^3.4.4" "@metamask/base-controller": "npm:^8.0.1" "@metamask/browser-passworder": "npm:^4.3.0" "@metamask/keyring-controller": "npm:^21.0.6" - "@metamask/toprf-secure-backup": ./toprf-secure-backup.tgz + "@metamask/toprf-secure-backup": "npm:^0.3.0" "@metamask/utils": "npm:^11.2.0" "@noble/ciphers": "npm:^0.5.2" "@noble/curves": "npm:^1.2.0" @@ -4507,11 +4507,11 @@ __metadata: languageName: unknown linkType: soft -"@metamask/toprf-secure-backup@file:./toprf-secure-backup.tgz::locator=%40metamask%2Fseedless-onboarding-controller%40workspace%3Apackages%2Fseedless-onboarding-controller": - version: 0.2.0 - resolution: "@metamask/toprf-secure-backup@file:./toprf-secure-backup.tgz#./toprf-secure-backup.tgz::hash=f5c0b6&locator=%40metamask%2Fseedless-onboarding-controller%40workspace%3Apackages%2Fseedless-onboarding-controller" +"@metamask/toprf-secure-backup@npm:^0.3.0": + version: 0.3.0 + resolution: "@metamask/toprf-secure-backup@npm:0.3.0" dependencies: - "@metamask/auth-network-utils": "npm:^0.2.0" + "@metamask/auth-network-utils": "npm:^0.3.0" "@noble/ciphers": "npm:^1.2.1" "@noble/curves": "npm:^1.8.1" "@noble/hashes": "npm:^1.7.1" @@ -4521,7 +4521,7 @@ __metadata: "@toruslabs/fetch-node-details": "npm:^15.0.0" "@toruslabs/http-helpers": "npm:^8.1.1" bn.js: "npm:^5.2.1" - checksum: 10/62c6af775f6daaffb1a11beea2de4c799bfce547d6ab4d38b70541d8d334577d3af2923fd639958c6fe346a76a05c19977c4e2d99a4d5a46267cef526b827502 + checksum: 10/9d3b8816c25f40b9d5ed726b32cae03d15442802ecbe816eff21a1bf9e3d681b749ae709d79b937f0f6ce122170ac6a6142f435d6bca5bd9ce8cf03cd0f40eab languageName: node linkType: hard From df6a4120ab3c3ade1b9f6c12611b9a58471f1926 Mon Sep 17 00:00:00 2001 From: lwin Date: Fri, 30 May 2025 01:45:32 +0800 Subject: [PATCH 146/147] chore: updated usage of 'groupedAuthConnectionId' --- .../src/SeedlessOnboardingController.ts | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index a91ae5456b..7dffc39856 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -650,7 +650,8 @@ export class SeedlessOnboardingController extends BaseController< const { authPubKey: globalAuthPubKey } = await this.toprfClient.fetchAuthPubKey({ nodeAuthTokens, - authConnectionId: groupedAuthConnectionId || authConnectionId, + authConnectionId, + groupedAuthConnectionId, userId, }); @@ -693,14 +694,14 @@ export class SeedlessOnboardingController extends BaseController< */ async #persistOprfKey(oprfKey: bigint, authPubKey: SEC1EncodedPublicKey) { this.#assertIsAuthenticatedUser(this.state); - const authConnectionId = - this.state.groupedAuthConnectionId || this.state.authConnectionId; + const { authConnectionId, groupedAuthConnectionId, userId } = this.state; try { await this.toprfClient.persistLocalKey({ nodeAuthTokens: this.state.nodeAuthTokens, authConnectionId, - userId: this.state.userId, + groupedAuthConnectionId, + userId, oprfKey, authPubKey, }); @@ -749,14 +750,14 @@ export class SeedlessOnboardingController extends BaseController< return this.#withRecoveryErrorHandler(async () => { this.#assertIsAuthenticatedUser(this.state); - const authConnectionId = - this.state.groupedAuthConnectionId || this.state.authConnectionId; + const { authConnectionId, groupedAuthConnectionId, userId } = this.state; const recoverEncKeyResult = await this.toprfClient.recoverEncKey({ nodeAuthTokens: this.state.nodeAuthTokens, password, authConnectionId, - userId: this.state.userId, + groupedAuthConnectionId, + userId, }); return recoverEncKeyResult; }); @@ -771,8 +772,7 @@ export class SeedlessOnboardingController extends BaseController< */ async #changeEncryptionKey(newPassword: string, oldPassword: string) { this.#assertIsAuthenticatedUser(this.state); - const authConnectionId = - this.state.groupedAuthConnectionId || this.state.authConnectionId; + const { authConnectionId, groupedAuthConnectionId, userId } = this.state; const { encKey, @@ -783,7 +783,8 @@ export class SeedlessOnboardingController extends BaseController< return await this.toprfClient.changeEncKey({ nodeAuthTokens: this.state.nodeAuthTokens, authConnectionId, - userId: this.state.userId, + groupedAuthConnectionId, + userId, oldEncKey: encKey, oldAuthKeyPair: authKeyPair, newKeyShareIndex, From 4bd767a948c1f92a03e7955d485736d76f9251b7 Mon Sep 17 00:00:00 2001 From: lwin Date: Fri, 30 May 2025 01:48:53 +0800 Subject: [PATCH 147/147] docs: updated ChangeLog --- packages/seedless-onboarding-controller/CHANGELOG.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/seedless-onboarding-controller/CHANGELOG.md b/packages/seedless-onboarding-controller/CHANGELOG.md index 009f8d95d1..1f5875b27c 100644 --- a/packages/seedless-onboarding-controller/CHANGELOG.md +++ b/packages/seedless-onboarding-controller/CHANGELOG.md @@ -27,9 +27,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add password outdated check to add SRPs / change password - recover old password using latest global password - sync latest global password to reset vault to use latest password and persist latest auth pubkey -- Updated `toprf-secure-backup` to `0.2.0`. ([#13](https://github.com/Web3Auth/core/pull/13)) +- Updated `toprf-secure-backup` to `0.3.0`. ([#5880](https://github.com/MetaMask/core/pull/5880)) - added an optional constructor param, `topfKeyDeriver` to assist the `Key derivation` in `toprf-seucre-backup` sdk and adds an additinal security -- Added new state value, `recoveryRatelimitCache` to the controller. ([#17](https://github.com/Web3Auth/core/pull/17)) - - The new state can be used to parse the `RecoveryError` correctly and synchroize the error data (numberOfAttempts) across multiple devices. + - added new state value, `recoveryRatelimitCache` to the controller to parse the `RecoveryError` correctly and synchroize the error data (numberOfAttempts) across multiple devices. [Unreleased]: https://github.com/MetaMask/core/

    jI&S- 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

hPs(l*7%V2E*-MZOfYj046HL7z-O7`G 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 PUF3#lCKHSS8SH-mx7QXY delta 96627 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⪻-rATjEG< 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 z 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Ðe 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 Date: Thu, 24 Apr 2025 15:32:59 +0800 Subject: [PATCH 062/147] feat: sync SeedlessOnboardingController lock with Keyring --- .../src/SeedlessOnboardingController.ts | 17 ++++++----------- .../seedless-onboarding-controller/src/types.ts | 9 +++++++-- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index bcc2312919..9b6715de73 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -143,16 +143,7 @@ export class SeedlessOnboardingController extends BaseController< /** * Controller lock state. * - * Note: This lock is not the same as the keyring/wallet lock. - * - * The `locked` state related to the keyring (wallet) `locked` state. - * However, the `unlock` state is not dependent on the keyring lock state - * - * The reason for this is that, Seedless Onboarding flow can be before/after the keyring generation. - * - * Example: - * - For registration flow, we need to generate the keyring first and then perform the Seedless Onboarding flow and backup the seed phrase. - * - For login flow, we need to perform the Seedless Onboarding flow (fetch the seed phrase backup) then we can create the keyring with the recovered seed phrase. + * The controller lock is synchronized with the keyring lock. */ #isUnlocked = false; @@ -189,6 +180,10 @@ export class SeedlessOnboardingController extends BaseController< // setup subscriptions to the keyring lock event // when the keyring is locked (wallet is locked), the controller will be cleared of its credentials this.messagingSystem.subscribe('KeyringController:lock', this.setLocked); + this.messagingSystem.subscribe( + 'KeyringController:unlock', + this.#setUnlocked, + ); } /** @@ -580,7 +575,7 @@ export class SeedlessOnboardingController extends BaseController< }; }); } catch (error) { - log('Error encrypting and storing seed phrase backup', error); + console.log('Error encrypting and storing seed phrase backup', error); throw new Error( SeedlessOnboardingControllerError.FailedToEncryptAndStoreSeedPhraseBackup, ); diff --git a/packages/seedless-onboarding-controller/src/types.ts b/packages/seedless-onboarding-controller/src/types.ts index 6c9f1ca8ac..ef6a05bc93 100644 --- a/packages/seedless-onboarding-controller/src/types.ts +++ b/packages/seedless-onboarding-controller/src/types.ts @@ -7,7 +7,10 @@ import type { EncryptionKey, EncryptionResult, } from '@metamask/browser-passworder'; -import type { KeyringControllerLockEvent } from '@metamask/keyring-controller'; +import type { + KeyringControllerLockEvent, + KeyringControllerUnlockEvent, +} from '@metamask/keyring-controller'; import type { NodeAuthTokens } from '@metamask/toprf-secure-backup'; import type { Json } from '@metamask/utils'; import type { MutexInterface } from 'async-mutex'; @@ -104,7 +107,9 @@ export type SeedlessOnboardingControllerStateChangeEvent = export type SeedlessOnboardingControllerEvents = SeedlessOnboardingControllerStateChangeEvent; -export type AllowedEvents = KeyringControllerLockEvent; +export type AllowedEvents = + | KeyringControllerLockEvent + | KeyringControllerUnlockEvent; // Messenger export type SeedlessOnboardingControllerMessenger = RestrictedMessenger< From 60cff9bafc31f81811d4d1cbb65966cae88c9764 Mon Sep 17 00:00:00 2001 From: Nguyen Anh Tu Date: Fri, 25 Apr 2025 11:58:29 +0700 Subject: [PATCH 063/147] feat: handle password sync oudated check and recover password --- .../src/SeedlessOnboardingController.test.ts | 378 ++++++++++++++++-- .../src/SeedlessOnboardingController.ts | 136 ++++++- .../src/constants.ts | 3 + .../src/errors.ts | 14 +- .../src/types.ts | 58 +-- .../tests/mocks/toprf.ts | 2 + .../toprf-secure-backup.tgz | Bin 100678 -> 110220 bytes yarn.lock | 4 +- 8 files changed, 527 insertions(+), 68 deletions(-) diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts index 0973f3c015..1d9f608a56 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts @@ -1,5 +1,7 @@ import { keccak256AndHexify } from '@metamask/auth-network-utils'; import { + type FetchAuthPubKeyResult, + type SEC1EncodedPublicKey, TOPRFError, type ChangeEncryptionKeyResult, type KeyPair, @@ -38,6 +40,39 @@ import { import { MockToprfEncryptorDecryptor } from '../tests/mocks/toprfEncryptor'; import MockVaultEncryptor from '../tests/mocks/vaultEncryptor'; +const authConnection = AuthConnection.Google; +const socialLoginEmail = 'user-test@gmail.com'; +const authConnectionId = 'seedless-onboarding'; +const groupedAuthConnectionId = 'auth-server'; +const userId = 'user-test@gmail.com'; +const idTokens = ['idToken']; + +const MOCK_NODE_AUTH_TOKENS = [ + { + authToken: 'authToken', + nodeIndex: 1, + nodePubKey: 'nodePubKey', + }, + { + authToken: 'authToken2', + nodeIndex: 2, + nodePubKey: 'nodePubKey2', + }, + { + authToken: 'authToken3', + nodeIndex: 3, + nodePubKey: 'nodePubKey3', + }, +]; + +const MOCK_KEYRING_ID = 'mock-keyring-id'; +const MOCK_SEED_PHRASE = stringToBytes( + 'horror pink muffin canal young photo magnet runway start elder patch until', +); + +const MOCK_AUTH_PUB_KEY = 'dGVzdFB1YktleQ=='; +const MOCK_AUTH_PUB_KEY_OUTDATED = 'YXV0aHB1YmtleW91dGRhdGVk'; + type WithControllerCallback = ({ controller, initialState, @@ -154,6 +189,27 @@ function mockcreateLocalKey(toprfClient: ToprfSecureBackup, password: string) { }; } +/** + * Mocks the fetchAuthPubKey method of the ToprfSecureBackup instance. + * + * @param toprfClient - The ToprfSecureBackup instance. + * @param authPubKey - The mock authPubKey. + * + * @returns The mock fetchAuthPubKey result. + */ +function mockFetchAuthPubKey( + toprfClient: ToprfSecureBackup, + authPubKey: SEC1EncodedPublicKey = base64ToBytes(MOCK_AUTH_PUB_KEY), +): FetchAuthPubKeyResult { + jest.spyOn(toprfClient, 'fetchAuthPubKey').mockResolvedValue({ + authPubKey, + }); + + return { + authPubKey, + }; +} + /** * Mocks the recoverEncKey method of the ToprfSecureBackup instance. * @@ -308,36 +364,13 @@ async function decryptVault(vault: string, password: string) { }; } -const authConnection = AuthConnection.Google; -const socialLoginEmail = 'user-test@gmail.com'; -const authConnectionId = 'seedless-onboarding'; -const groupedAuthConnectionId = 'auth-server'; -const userId = 'user-test@gmail.com'; -const idTokens = ['idToken']; - -const MOCK_NODE_AUTH_TOKENS = [ - { - authToken: 'authToken', - nodeIndex: 1, - nodePubKey: 'nodePubKey', - }, - { - authToken: 'authToken2', - nodeIndex: 2, - nodePubKey: 'nodePubKey2', - }, - { - authToken: 'authToken3', - nodeIndex: 3, - nodePubKey: 'nodePubKey3', - }, -]; - /** * Returns the initial controller state with the optional mock state data. * * @param options - The options. * @param options.withMockAuthenticatedUser - Whether to skip the authenticate method and use the mock authenticated user. + * @param options.withMockAuthPubKey - Whether to skip the checkPasswordOutdated method and use the mock authPubKey. + * @param options.authPubKey - The mock authPubKey. * @param options.vault - The mock vault data. * @param options.vaultEncryptionKey - The mock vault encryption key. * @param options.vaultEncryptionSalt - The mock vault encryption salt. @@ -345,6 +378,8 @@ const MOCK_NODE_AUTH_TOKENS = [ */ function getMockInitialControllerState(options?: { withMockAuthenticatedUser?: boolean; + withMockAuthPubKey?: boolean; + authPubKey?: string; vault?: string; vaultEncryptionKey?: string; vaultEncryptionSalt?: string; @@ -370,14 +405,13 @@ function getMockInitialControllerState(options?: { state.userId = userId; } + if (options?.withMockAuthPubKey || options?.authPubKey) { + state.authPubKey = options.authPubKey ?? MOCK_AUTH_PUB_KEY; + } + return state; } -const MOCK_KEYRING_ID = 'mock-keyring-id'; -const MOCK_SEED_PHRASE = stringToBytes( - 'horror pink muffin canal young photo magnet runway start elder patch until', -); - describe('SeedlessOnboardingController', () => { describe('constructor', () => { it('should be able to instantiate', () => { @@ -540,6 +574,74 @@ describe('SeedlessOnboardingController', () => { }); }); + describe('checkPasswordOutdated', () => { + it('should return false if password is not outdated (authPubKey matches)', async () => { + await withController( + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + withMockAuthPubKey: true, + }), + }, + async ({ controller, toprfClient }) => { + mockFetchAuthPubKey(toprfClient, base64ToBytes(MOCK_AUTH_PUB_KEY)); + const result = await controller.checkPasswordOutdated(); + expect(result).toBe(false); + }, + ); + }); + + it('should return true if password is outdated (authPubKey does not match)', async () => { + await withController( + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + authPubKey: MOCK_AUTH_PUB_KEY_OUTDATED, + }), + }, + async ({ controller, toprfClient }) => { + mockFetchAuthPubKey(toprfClient, base64ToBytes(MOCK_AUTH_PUB_KEY)); + const result = await controller.checkPasswordOutdated(); + expect(result).toBe(true); + }, + ); + }); + + it('should throw SRPNotBackedUpError if no authPubKey in state', async () => { + await withController( + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + }), + }, + async ({ controller }) => { + await expect(controller.checkPasswordOutdated()).rejects.toThrow( + SeedlessOnboardingControllerError.SRPNotBackedUpError, + ); + }, + ); + }); + + it('should throw InsufficientAuthToken if no nodeAuthTokens in state', async () => { + await withController( + { + state: { + ...getMockInitialControllerState({ + withMockAuthenticatedUser: true, + withMockAuthPubKey: true, + }), + nodeAuthTokens: undefined, + }, + }, + async ({ controller }) => { + await expect(controller.checkPasswordOutdated()).rejects.toThrow( + SeedlessOnboardingControllerError.InsufficientAuthToken, + ); + }, + ); + }); + }); + describe('createToprfKeyAndBackupSeedPhrase', () => { const MOCK_PASSWORD = 'mock-password'; @@ -842,12 +944,18 @@ describe('SeedlessOnboardingController', () => { { state: getMockInitialControllerState({ withMockAuthenticatedUser: true, + withMockAuthPubKey: true, vault: MOCK_VAULT, vaultEncryptionKey: MOCK_VAULT_ENCRYPTION_KEY, vaultEncryptionSalt: MOCK_VAULT_ENCRYPTION_SALT, }), }, - async ({ controller }) => { + async ({ controller, toprfClient }) => { + mockFetchAuthPubKey( + toprfClient, + base64ToBytes(controller.state.authPubKey as string), + ); + await controller.submitPassword(MOCK_PASSWORD); // encrypt and store the secret data @@ -871,12 +979,18 @@ describe('SeedlessOnboardingController', () => { { state: getMockInitialControllerState({ withMockAuthenticatedUser: true, + withMockAuthPubKey: true, vault: MOCK_VAULT, vaultEncryptionKey: MOCK_VAULT_ENCRYPTION_KEY, vaultEncryptionSalt: MOCK_VAULT_ENCRYPTION_SALT, }), }, - async ({ controller }) => { + async ({ controller, toprfClient }) => { + mockFetchAuthPubKey( + toprfClient, + base64ToBytes(controller.state.authPubKey as string), + ); + await controller.submitPassword(MOCK_PASSWORD); // encrypt and store the secret data @@ -940,12 +1054,18 @@ describe('SeedlessOnboardingController', () => { { state: getMockInitialControllerState({ withMockAuthenticatedUser: true, + withMockAuthPubKey: true, vault: MOCK_VAULT, vaultEncryptionKey: MOCK_VAULT_ENCRYPTION_KEY, vaultEncryptionSalt: MOCK_VAULT_ENCRYPTION_SALT, }), }, - async ({ controller, encryptor }) => { + async ({ controller, encryptor, toprfClient }) => { + mockFetchAuthPubKey( + toprfClient, + base64ToBytes(controller.state.authPubKey as string), + ); + await controller.submitPassword(MOCK_PASSWORD); jest @@ -989,6 +1109,11 @@ describe('SeedlessOnboardingController', () => { NEW_KEY_RING_1.id, ); + mockFetchAuthPubKey( + toprfClient, + base64ToBytes(controller.state.authPubKey as string), + ); + await expect( controller.addNewSeedPhraseBackup( NEW_KEY_RING_2.seedPhrase, @@ -1017,6 +1142,11 @@ describe('SeedlessOnboardingController', () => { MOCK_KEYRING_ID, ); + mockFetchAuthPubKey( + toprfClient, + base64ToBytes(controller.state.authPubKey as string), + ); + // intentionally mock the JSON.parse to return an object with a different salt jest.spyOn(global.JSON, 'parse').mockReturnValueOnce({ salt: 'different-salt', @@ -1062,6 +1192,11 @@ describe('SeedlessOnboardingController', () => { NEW_KEY_RING_1.id, ); + mockFetchAuthPubKey( + toprfClient, + base64ToBytes(controller.state.authPubKey as string), + ); + await expect( controller.addNewSeedPhraseBackup( NEW_KEY_RING_2.seedPhrase, @@ -1101,6 +1236,11 @@ describe('SeedlessOnboardingController', () => { NEW_KEY_RING_1.id, ); + mockFetchAuthPubKey( + toprfClient, + base64ToBytes(controller.state.authPubKey as string), + ); + jest .spyOn(encryptor, 'decryptWithKey') .mockResolvedValueOnce({ foo: 'bar' }); @@ -1149,6 +1289,11 @@ describe('SeedlessOnboardingController', () => { NEW_KEY_RING_1.id, ); + mockFetchAuthPubKey( + toprfClient, + base64ToBytes(controller.state.authPubKey as string), + ); + jest .spyOn(encryptor, 'decryptWithKey') .mockResolvedValueOnce(MOCK_VAULT); @@ -1386,7 +1531,6 @@ describe('SeedlessOnboardingController', () => { }, async ({ controller, toprfClient }) => { mockRecoverEncKey(toprfClient, MOCK_PASSWORD); - // mock the incorrect data shape jest .spyOn(toprfClient, 'fetchAllSecretDataItems') @@ -1623,6 +1767,7 @@ describe('SeedlessOnboardingController', () => { { state: getMockInitialControllerState({ withMockAuthenticatedUser: true, + withMockAuthPubKey: true, }), }, async ({ controller, toprfClient }) => { @@ -1636,6 +1781,12 @@ describe('SeedlessOnboardingController', () => { // verify the vault data before update password expect(controller.state.vault).toBeDefined(); + expect(controller.state.authPubKey).toBeDefined(); + + mockFetchAuthPubKey( + toprfClient, + base64ToBytes(controller.state.authPubKey as string), + ); const vaultBeforeUpdatePassword = controller.state.vault; const { toprfEncryptionKey: oldEncKey, @@ -1688,6 +1839,7 @@ describe('SeedlessOnboardingController', () => { nodeAuthTokens: MOCK_NODE_AUTH_TOKENS, userId, authConnectionId, + authPubKey: MOCK_AUTH_PUB_KEY, }, }, async ({ controller, toprfClient }) => { @@ -1701,6 +1853,13 @@ describe('SeedlessOnboardingController', () => { // verify the vault data before update password expect(controller.state.vault).toBeDefined(); + expect(controller.state.authPubKey).toBeDefined(); + + mockFetchAuthPubKey( + toprfClient, + base64ToBytes(controller.state.authPubKey as string), + ); + const vaultBeforeUpdatePassword = controller.state.vault; const { toprfEncryptionKey: oldEncKey, @@ -1754,6 +1913,35 @@ describe('SeedlessOnboardingController', () => { }); }); + it('should throw error if password is outdated', async () => { + await withController( + { + state: getMockInitialControllerState({ + vault: MOCK_VAULT, + authPubKey: MOCK_AUTH_PUB_KEY_OUTDATED, + withMockAuthenticatedUser: true, + }), + }, + async ({ controller, toprfClient }) => { + await mockCreateToprfKeyAndBackupSeedPhrase( + toprfClient, + controller, + MOCK_PASSWORD, + MOCK_SEED_PHRASE, + MOCK_KEYRING_ID, + ); + mockFetchAuthPubKey(toprfClient); + + // mock the recover enc key + mockRecoverEncKey(toprfClient, MOCK_PASSWORD); + + await expect( + controller.changePassword(NEW_MOCK_PASSWORD, MOCK_PASSWORD), + ).rejects.toThrow(SeedlessOnboardingControllerError.OutdatedPassword); + }, + ); + }); + it('should throw an error if the old password is incorrect', async () => { await withController( { @@ -1786,6 +1974,7 @@ describe('SeedlessOnboardingController', () => { { state: getMockInitialControllerState({ withMockAuthenticatedUser: true, + withMockAuthPubKey: true, }), }, async ({ controller, toprfClient }) => { @@ -1797,6 +1986,11 @@ describe('SeedlessOnboardingController', () => { MOCK_KEYRING_ID, ); + mockFetchAuthPubKey( + toprfClient, + base64ToBytes(controller.state.authPubKey as string), + ); + // mock the recover enc key mockRecoverEncKey(toprfClient, MOCK_PASSWORD); @@ -2013,4 +2207,120 @@ describe('SeedlessOnboardingController', () => { ); }); }); + + describe('recoverPassword', () => { + const GLOBAL_PASSWORD = 'global-password'; + const RECOVERED_PASSWORD = 'recovered-password'; + + it('should recover the password for the current device', async () => { + await withController( + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + withMockAuthPubKey: true, + }), + }, + async ({ controller, toprfClient }) => { + // Mock recoverEncKey for the global password + const mockToprfEncryptor = createMockToprfEncryptor(); + const encKey = mockToprfEncryptor.deriveEncKey(GLOBAL_PASSWORD); + const authKeyPair = + mockToprfEncryptor.deriveAuthKeyPair(GLOBAL_PASSWORD); + jest.spyOn(toprfClient, 'recoverEncKey').mockResolvedValueOnce({ + encKey, + authKeyPair, + rateLimitResetResult: Promise.resolve(), + keyShareIndex: 1, + }); + + // Mock toprfClient.recoverPassword + jest.spyOn(toprfClient, 'recoverPassword').mockResolvedValueOnce({ + password: RECOVERED_PASSWORD, + }); + + const result = await controller.recoverPassword({ + globalPassword: GLOBAL_PASSWORD, + }); + + expect(result).toStrictEqual({ password: RECOVERED_PASSWORD }); + expect(toprfClient.recoverEncKey).toHaveBeenCalled(); + expect(toprfClient.recoverPassword).toHaveBeenCalled(); + }, + ); + }); + + it('should throw SRPNotBackedUpError if no authPubKey in state', async () => { + await withController( + { + state: getMockInitialControllerState({}), + }, + async ({ controller }) => { + await expect( + controller.recoverPassword({ + globalPassword: GLOBAL_PASSWORD, + }), + ).rejects.toThrow( + SeedlessOnboardingControllerError.SRPNotBackedUpError, + ); + }, + ); + }); + + it('should propagate errors from recoverEncKey', async () => { + await withController( + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + withMockAuthPubKey: true, + }), + }, + async ({ controller, toprfClient }) => { + jest + .spyOn(toprfClient, 'recoverEncKey') + .mockRejectedValueOnce( + new Error('Failed to recover encryption key'), + ); + + await expect( + controller.recoverPassword({ + globalPassword: GLOBAL_PASSWORD, + }), + ).rejects.toThrow(SeedlessOnboardingControllerError.LoginFailedError); + }, + ); + }); + + it('should propagate errors from toprfClient.recoverPassword', async () => { + await withController( + { + state: getMockInitialControllerState({ + withMockAuthenticatedUser: true, + withMockAuthPubKey: true, + }), + }, + async ({ controller, toprfClient }) => { + const mockToprfEncryptor = createMockToprfEncryptor(); + const encKey = mockToprfEncryptor.deriveEncKey(GLOBAL_PASSWORD); + const authKeyPair = + mockToprfEncryptor.deriveAuthKeyPair(GLOBAL_PASSWORD); + jest.spyOn(toprfClient, 'recoverEncKey').mockResolvedValueOnce({ + encKey, + authKeyPair, + rateLimitResetResult: Promise.resolve(), + keyShareIndex: 1, + }); + + jest + .spyOn(toprfClient, 'recoverPassword') + .mockRejectedValueOnce(new Error('Failed to recover password')); + + await expect( + controller.recoverPassword({ + globalPassword: GLOBAL_PASSWORD, + }), + ).rejects.toThrow('Failed to recover password'); + }, + ); + }); + }); }); diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts index 9b6715de73..b991ca1840 100644 --- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts +++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts @@ -15,13 +15,14 @@ import type { NodeAuthTokens, SEC1EncodedPublicKey, } from '@metamask/toprf-secure-backup'; -import { ToprfSecureBackup } from '@metamask/toprf-secure-backup'; +import { TOPRFError, ToprfSecureBackup } from '@metamask/toprf-secure-backup'; import { base64ToBytes, bytesToBase64, stringToBytes, remove0x, bigIntToHex, + bytesToHex, } from '@metamask/utils'; import { Mutex } from 'async-mutex'; @@ -31,7 +32,7 @@ import { SeedlessOnboardingControllerError, Web3AuthNetwork, } from './constants'; -import { RecoveryError } from './errors'; +import { getErrorMessageFromTOPRFErrorCode, RecoveryError } from './errors'; import { projectLogger, createModuleLogger } from './logger'; import { SeedPhraseMetadata } from './SeedPhraseMetadata'; import type { @@ -43,6 +44,7 @@ import type { VaultData, AuthenticatedUserDetails, SocialBackupsMetadata, + SRPBackedUpUserDetails, } from './types'; const log = createModuleLogger(projectLogger, controllerName); @@ -127,6 +129,10 @@ const seedlessOnboardingMetadata: StateMetadata { this.#assertIsUnlocked(); + await this.#assertPasswordInSync(); + // verify the password and unlock the vault const { toprfEncryptionKey, toprfAuthKeyPair } = await this.#unlockVaultAndGetBackupEncKey(); @@ -339,6 +350,10 @@ export class SeedlessOnboardingController extends BaseController< rawToprfEncryptionKey: encKey, rawToprfAuthKeyPair: authKeyPair, }); + + this.#persistAuthPubKey({ + authPubKey: authKeyPair.pk, + }); } return SeedPhraseMetadata.parseSeedPhraseFromMetadataStore(secretData); @@ -362,6 +377,7 @@ export class SeedlessOnboardingController extends BaseController< this.#assertIsUnlocked(); // verify the old password of the encrypted vault await this.verifyPassword(oldPassword); + await this.#assertPasswordInSync(); try { // update the encryption key with new password and update the Metadata Store @@ -374,6 +390,10 @@ export class SeedlessOnboardingController extends BaseController< rawToprfEncryptionKey: newEncKey, rawToprfAuthKeyPair: newAuthKeyPair, }); + + this.#persistAuthPubKey({ + authPubKey: newAuthKeyPair.pk, + }); } catch (error) { log('Error changing password', error); throw new Error(SeedlessOnboardingControllerError.FailedToChangePassword); @@ -457,6 +477,71 @@ export class SeedlessOnboardingController extends BaseController< this.#isUnlocked = false; } + /** + * @description Fetch the password corresponding to the current authPubKey in state (current device password). + * + * @param params - The parameters for fetching the password. + * @param params.globalPassword - The current global password to verify. + * @returns A promise that resolves to the password. + */ + async recoverPassword({ + globalPassword, + }: { + globalPassword: string; + }): Promise<{ password: string }> { + try { + const currentDeviceAuthPubKey = this.#recoverAuthPubKey(); + + const { + encKey: currentGlobalDeviceEncKey, + authKeyPair: currentGlobalDeviceAuthKeyPair, + } = await this.#recoverEncKey(globalPassword); + + return this.toprfClient.recoverPassword({ + targetPwPubKey: currentDeviceAuthPubKey, + curEncKey: currentGlobalDeviceEncKey, + curAuthKeyPair: currentGlobalDeviceAuthKeyPair, + }); + } catch (error) { + if (error instanceof TOPRFError) { + throw new Error( + getErrorMessageFromTOPRFErrorCode( + error.code, + SeedlessOnboardingControllerError.CouldNotRecoverPassword, + ), + ); + } + throw error; + } + } + + /** + * @description Check if the current password is outdated compare to the global password. + * + * @returns A promise that resolves to true if the password is outdated, false otherwise. + */ + async checkPasswordOutdated(): Promise { + this.#assertIsAuthenticatedUser(this.state); + const { + nodeAuthTokens, + authConnectionId, + groupedAuthConnectionId, + userId, + } = this.state; + + const authPubKey = this.#recoverAuthPubKey(); + + const { authPubKey: globalAuthPubKey } = + await this.toprfClient.fetchAuthPubKey({ + nodeAuthTokens, + verifier: groupedAuthConnectionId || authConnectionId, + verifierId: userId, + }); + + // TODO: use noble lib to deserialize and compare curve point + return bytesToHex(authPubKey) !== bytesToHex(globalAuthPubKey); + } + #setUnlocked(): void { this.#isUnlocked = true; } @@ -487,6 +572,32 @@ export class SeedlessOnboardingController extends BaseController< } } + /** + * Persist the authentication public key for the seedless onboarding flow. + * convert to suitable format before persisting. + * + * @param params - The parameters for persisting the authentication public key. + * @param params.authPubKey - The authentication public key to be persisted. + */ + #persistAuthPubKey(params: { authPubKey: SEC1EncodedPublicKey }): void { + this.update((state) => { + state.authPubKey = bytesToBase64(params.authPubKey); + }); + } + + /** + * Recover the authentication public key from the state. + * convert to pubkey format before recovering. + * + * @returns The authentication public key. + */ + #recoverAuthPubKey(): SEC1EncodedPublicKey { + this.#assertIsSRPBackedUpUser(this.state); + const { authPubKey } = this.state; + + return base64ToBytes(authPubKey); + } + /** * Recover the encryption key from password. * @@ -538,6 +649,7 @@ export class SeedlessOnboardingController extends BaseController< oldAuthKeyPair: authKeyPair, newKeyShareIndex, newPassword, + oldPassword, }); } @@ -927,6 +1039,26 @@ export class SeedlessOnboardingController extends BaseController< } } + #assertIsSRPBackedUpUser( + value: unknown, + ): asserts value is SRPBackedUpUserDetails { + if (!this.state.authPubKey) { + throw new Error(SeedlessOnboardingControllerError.SRPNotBackedUpError); + } + } + + /** + * Assert that the password is in sync with the global password. + * + * @throws If the password is outdated. + */ + async #assertPasswordInSync(): Promise { + const isPasswordOutdated = await this.checkPasswordOutdated(); + if (isPasswordOutdated) { + throw new Error(SeedlessOnboardingControllerError.OutdatedPassword); + } + } + /** * Check if the provided value is a valid vault data. * diff --git a/packages/seedless-onboarding-controller/src/constants.ts b/packages/seedless-onboarding-controller/src/constants.ts index df26d8a55c..9717c93804 100644 --- a/packages/seedless-onboarding-controller/src/constants.ts +++ b/packages/seedless-onboarding-controller/src/constants.ts @@ -31,4 +31,7 @@ export enum SeedlessOnboardingControllerError { FailedToChangePassword = `${controllerName} - Failed to change password`, TooManyLoginAttempts = `${controllerName} - Too many login attempts`, IncorrectPassword = `${controllerName} - Incorrect password`, + OutdatedPassword = `${controllerName} - Outdated password`, + CouldNotRecoverPassword = `${controllerName} - Could not recover password`, + SRPNotBackedUpError = `${controllerName} - SRP not backed up`, } diff --git a/packages/seedless-onboarding-controller/src/errors.ts b/packages/seedless-onboarding-controller/src/errors.ts index 0b42290f18..62e574fd98 100644 --- a/packages/seedless-onboarding-controller/src/errors.ts +++ b/packages/seedless-onboarding-controller/src/errors.ts @@ -1,7 +1,7 @@ import { type RateLimitErrorData, TOPRFError, - TORPFErrorCode, + TOPRFErrorCode, } from '@metamask/toprf-secure-backup'; import { SeedlessOnboardingControllerError } from './constants'; @@ -13,15 +13,17 @@ import { SeedlessOnboardingControllerError } from './constants'; * @param defaultMessage - The default error message if the error code is not found. * @returns The error message. */ -function getErrorMessageFromTOPRFErrorCode( - errorCode: TORPFErrorCode, +export function getErrorMessageFromTOPRFErrorCode( + errorCode: TOPRFErrorCode, defaultMessage: string, ): string { switch (errorCode) { - case TORPFErrorCode.RateLimitExceeded: + case TOPRFErrorCode.RateLimitExceeded: return SeedlessOnboardingControllerError.TooManyLoginAttempts; - case TORPFErrorCode.CouldNotDeriveEncryptionKey: + case TOPRFErrorCode.CouldNotDeriveEncryptionKey: return SeedlessOnboardingControllerError.IncorrectPassword; + case TOPRFErrorCode.CouldNotFetchPassword: + return SeedlessOnboardingControllerError.CouldNotRecoverPassword; default: return defaultMessage; } @@ -73,7 +75,7 @@ export class RecoveryError extends Error { ): RateLimitErrorData | undefined { if ( error.meta && // error metadata must be present - error.code === TORPFErrorCode.RateLimitExceeded && + error.code === TOPRFErrorCode.RateLimitExceeded && typeof error.meta.rateLimitDetails === 'object' && error.meta.rateLimitDetails !== null && 'remainingTime' in error.meta.rateLimitDetails && diff --git a/packages/seedless-onboarding-controller/src/types.ts b/packages/seedless-onboarding-controller/src/types.ts index ef6a05bc93..4fbb613960 100644 --- a/packages/seedless-onboarding-controller/src/types.ts +++ b/packages/seedless-onboarding-controller/src/types.ts @@ -60,32 +60,42 @@ export type AuthenticatedUserDetails = { socialLoginEmail: string; }; +export type SRPBackedUpUserDetails = { + /** + * The public key of the authentication key pair in base64 format. + * + * This value is used to check if the password is outdated compare to the global password and find backed up old password. + */ + authPubKey: string; +}; + // State export type SeedlessOnboardingControllerState = - Partial & { - /** - * Encrypted array of serialized keyrings data. - */ - vault?: string; - - /** - * The hashes of the seed phrase backups. - * - * This is to facilitate the UI to display backup status of the seed phrases. - */ - socialBackupsMetadata: SocialBackupsMetadata[]; - - /** - * The encryption key derived from the password and used to encrypt - * the vault. - */ - vaultEncryptionKey?: string; - - /** - * The salt used to derive the encryption key from the password. - */ - vaultEncryptionSalt?: string; - }; + Partial & + Partial & { + /** + * Encrypted array of serialized keyrings data. + */ + vault?: string; + + /** + * The hashes of the seed phrase backups. + * + * This is to facilitate the UI to display backup status of the seed phrases. + */ + socialBackupsMetadata: SocialBackupsMetadata[]; + + /** + * The encryption key derived from the password and used to encrypt + * the vault. + */ + vaultEncryptionKey?: string; + + /** + * The salt used to derive the encryption key from the password. + */ + vaultEncryptionSalt?: string; + }; // Actions export type SeedlessOnboardingControllerGetStateAction = diff --git a/packages/seedless-onboarding-controller/tests/mocks/toprf.ts b/packages/seedless-onboarding-controller/tests/mocks/toprf.ts index 0b7d2cd364..dc0919344e 100644 --- a/packages/seedless-onboarding-controller/tests/mocks/toprf.ts +++ b/packages/seedless-onboarding-controller/tests/mocks/toprf.ts @@ -39,6 +39,7 @@ export const MOCK_BATCH_SECRET_DATA_ADD_RESPONSE = { export const MOCK_SECRET_DATA_GET_RESPONSE = { success: true, data: [], + ids: [], }; export const MOCK_ACQUIRE_METADATA_LOCK_RESPONSE = { @@ -101,6 +102,7 @@ export function createMockSecretDataGetResponse< const jsonData = { success: true, data: encryptedSecretData, + ids: secretDataArr.map((_, index) => index), }; return jsonData; diff --git a/packages/seedless-onboarding-controller/toprf-secure-backup.tgz b/packages/seedless-onboarding-controller/toprf-secure-backup.tgz index 4470e67993949854498e03aa48eb96428c6a55e6..779c7a6f4428e068082355564770c69e8d9f5065 100644 GIT binary patch literal 110220 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