From a41d1ee53e1dc6af0b54f085053278e039cda8dc Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Sat, 15 Oct 2022 16:03:48 +0200 Subject: wallet-core: put signing keys in separate object store --- .../src/operations/backup/export.ts | 23 ++++++++++++----- .../src/operations/backup/import.ts | 30 ++++++++++++---------- 2 files changed, 32 insertions(+), 21 deletions(-) (limited to 'packages/taler-wallet-core/src/operations/backup') diff --git a/packages/taler-wallet-core/src/operations/backup/export.ts b/packages/taler-wallet-core/src/operations/backup/export.ts index 1472b1b90..b0f1d6ce1 100644 --- a/packages/taler-wallet-core/src/operations/backup/export.ts +++ b/packages/taler-wallet-core/src/operations/backup/export.ts @@ -35,6 +35,7 @@ import { BackupDenomination, BackupExchange, BackupExchangeDetails, + BackupExchangeSignKey, BackupExchangeWireFee, BackupOperationStatus, BackupPayInfo, @@ -74,6 +75,7 @@ import { } from "../../db.js"; import { InternalWalletState } from "../../internal-wallet-state.js"; import { assertUnreachable } from "../../util/assertUnreachable.js"; +import { checkDbInvariant } from "../../util/invariants.js"; import { getWalletBackupState, provideBackupState } from "./state.js"; const logger = new Logger("backup/export.ts"); @@ -87,6 +89,7 @@ export async function exportBackup( x.config, x.exchanges, x.exchangeDetails, + x.exchangeSignkeys, x.coins, x.contractTerms, x.denominations, @@ -324,6 +327,18 @@ export async function exportBackup( }); } }); + checkDbInvariant(ex.rowId != null); + const exchangeSk = + await tx.exchangeSignKeys.indexes.byExchangeDetailsRowId.getAll( + ex.rowId, + ); + let signingKeys: BackupExchangeSignKey[] = exchangeSk.map((x) => ({ + key: x.signkeyPub, + master_sig: x.masterSig, + stamp_end: x.stampEnd, + stamp_expire: x.stampExpire, + stamp_start: x.stampStart, + })); backupExchangeDetails.push({ base_url: ex.exchangeBaseUrl, @@ -341,13 +356,7 @@ export async function exportBackup( currency: ex.currency, protocol_version: ex.protocolVersionRange, wire_fees: wireFees, - signing_keys: ex.signingKeys.map((x) => ({ - key: x.key, - master_sig: x.master_sig, - stamp_end: x.stamp_end, - stamp_expire: x.stamp_expire, - stamp_start: x.stamp_start, - })), + signing_keys: signingKeys, global_fees: ex.globalFees.map((x) => ({ accountFee: Amounts.stringify(x.accountFee), historyFee: Amounts.stringify(x.historyFee), diff --git a/packages/taler-wallet-core/src/operations/backup/import.ts b/packages/taler-wallet-core/src/operations/backup/import.ts index 9c5eea9af..f08d152a5 100644 --- a/packages/taler-wallet-core/src/operations/backup/import.ts +++ b/packages/taler-wallet-core/src/operations/backup/import.ts @@ -62,7 +62,12 @@ import { InternalWalletState } from "../../internal-wallet-state.js"; import { assertUnreachable } from "../../util/assertUnreachable.js"; import { checkLogicInvariant } from "../../util/invariants.js"; import { GetReadOnlyAccess, GetReadWriteAccess } from "../../util/query.js"; -import { makeCoinAvailable, makeTombstoneId, makeTransactionId, TombstoneTag } from "../common.js"; +import { + makeCoinAvailable, + makeTombstoneId, + makeTransactionId, + TombstoneTag, +} from "../common.js"; import { getExchangeDetails } from "../exchanges.js"; import { extractContractData } from "../pay-merchant.js"; import { provideBackupState } from "./state.js"; @@ -360,11 +365,12 @@ export async function importBackup( } for (const backupExchangeDetails of backupBlob.exchange_details) { - const existingExchangeDetails = await tx.exchangeDetails.get([ - backupExchangeDetails.base_url, - backupExchangeDetails.currency, - backupExchangeDetails.master_public_key, - ]); + const existingExchangeDetails = + await tx.exchangeDetails.indexes.byPointer.get([ + backupExchangeDetails.base_url, + backupExchangeDetails.currency, + backupExchangeDetails.master_public_key, + ]); if (!existingExchangeDetails) { const wireInfo: WireInfo = { @@ -422,13 +428,6 @@ export async function importBackup( purseTimeout: x.purseTimeout, startDate: x.startDate, })), - signingKeys: backupExchangeDetails.signing_keys.map((x) => ({ - key: x.key, - master_sig: x.master_sig, - stamp_end: x.stamp_end, - stamp_expire: x.stamp_expire, - stamp_start: x.stamp_start, - })), }); } @@ -789,7 +788,10 @@ export async function importBackup( } for (const backupTip of backupBlob.tips) { - const ts = makeTombstoneId(TombstoneTag.DeleteTip, backupTip.wallet_tip_id); + const ts = makeTombstoneId( + TombstoneTag.DeleteTip, + backupTip.wallet_tip_id, + ); if (tombstoneSet.has(ts)) { continue; } -- cgit v1.2.3