diff options
author | Florian Dold <florian@dold.me> | 2021-11-27 20:56:58 +0100 |
---|---|---|
committer | Florian Dold <florian@dold.me> | 2021-11-27 20:57:07 +0100 |
commit | 5c4c25516df9d65d29dc7f3f38b5a2a1a8e9e374 (patch) | |
tree | 4665e79a6033ab949de211fd9de8de8ca681c2e0 /packages/taler-wallet-core/src/operations/backup | |
parent | 403de8170ef538ef74505859b1c04e3542cad9fb (diff) | |
download | wallet-core-5c4c25516df9d65d29dc7f3f38b5a2a1a8e9e374.tar.xz |
wallet: support both protocol versions
Diffstat (limited to 'packages/taler-wallet-core/src/operations/backup')
-rw-r--r-- | packages/taler-wallet-core/src/operations/backup/import.ts | 6 | ||||
-rw-r--r-- | packages/taler-wallet-core/src/operations/backup/index.ts | 30 |
2 files changed, 30 insertions, 6 deletions
diff --git a/packages/taler-wallet-core/src/operations/backup/import.ts b/packages/taler-wallet-core/src/operations/backup/import.ts index 40fa4cdec..564d39797 100644 --- a/packages/taler-wallet-core/src/operations/backup/import.ts +++ b/packages/taler-wallet-core/src/operations/backup/import.ts @@ -27,6 +27,7 @@ import { BackupRefundState, RefreshReason, BackupRefreshReason, + DenomKeyType, } from "@gnu-taler/taler-util"; import { WalletContractData, @@ -331,7 +332,10 @@ export async function importBackup( } for (const backupDenomination of backupExchangeDetails.denominations) { - if (backupDenomination.denom_pub.cipher !== 1) { + if ( + backupDenomination.denom_pub.cipher !== DenomKeyType.Rsa && + backupDenomination.denom_pub.cipher !== DenomKeyType.LegacyRsa + ) { throw Error("unsupported cipher"); } const denomPubHash = diff --git a/packages/taler-wallet-core/src/operations/backup/index.ts b/packages/taler-wallet-core/src/operations/backup/index.ts index 9027625cd..e3950ef90 100644 --- a/packages/taler-wallet-core/src/operations/backup/index.ts +++ b/packages/taler-wallet-core/src/operations/backup/index.ts @@ -38,14 +38,15 @@ import { codecForString, codecOptional, ConfirmPayResultType, + DenomKeyType, durationFromSpec, getTimestampNow, hashDenomPub, HttpStatusCode, j2s, + LibtoolVersion, Logger, notEmpty, - NotificationType, PreparePayResultType, RecoveryLoadRequest, RecoveryMergeStrategy, @@ -167,7 +168,10 @@ async function computeBackupCryptoData( }; for (const backupExchangeDetails of backupContent.exchange_details) { for (const backupDenom of backupExchangeDetails.denominations) { - if (backupDenom.denom_pub.cipher !== 1) { + if ( + backupDenom.denom_pub.cipher !== DenomKeyType.Rsa && + backupDenom.denom_pub.cipher !== DenomKeyType.LegacyRsa + ) { throw Error("unsupported cipher"); } for (const backupCoin of backupDenom.coins) { @@ -184,9 +188,25 @@ async function computeBackupCryptoData( coinPub, }; } - cryptoData.rsaDenomPubToHash[ - backupDenom.denom_pub.rsa_public_key - ] = encodeCrock(hashDenomPub(backupDenom.denom_pub)); + if ( + LibtoolVersion.compare(backupExchangeDetails.protocol_version, "9") + ?.compatible + ) { + cryptoData.rsaDenomPubToHash[ + backupDenom.denom_pub.rsa_public_key + ] = encodeCrock( + hash(decodeCrock(backupDenom.denom_pub.rsa_public_key)), + ); + } else if ( + LibtoolVersion.compare(backupExchangeDetails.protocol_version, "10") + ?.compatible + ) { + cryptoData.rsaDenomPubToHash[ + backupDenom.denom_pub.rsa_public_key + ] = encodeCrock(hashDenomPub(backupDenom.denom_pub)); + } else { + throw Error("unsupported exchange protocol version"); + } } for (const backupReserve of backupExchangeDetails.reserves) { cryptoData.reservePrivToPub[backupReserve.reserve_priv] = encodeCrock( |