summaryrefslogtreecommitdiff
path: root/packages/taler-wallet-core/src/operations/backup
diff options
context:
space:
mode:
authorFlorian Dold <florian@dold.me>2021-11-27 20:56:58 +0100
committerFlorian Dold <florian@dold.me>2021-11-27 20:57:07 +0100
commit5c4c25516df9d65d29dc7f3f38b5a2a1a8e9e374 (patch)
tree4665e79a6033ab949de211fd9de8de8ca681c2e0 /packages/taler-wallet-core/src/operations/backup
parent403de8170ef538ef74505859b1c04e3542cad9fb (diff)
downloadwallet-core-5c4c25516df9d65d29dc7f3f38b5a2a1a8e9e374.tar.gz
wallet-core-5c4c25516df9d65d29dc7f3f38b5a2a1a8e9e374.tar.bz2
wallet-core-5c4c25516df9d65d29dc7f3f38b5a2a1a8e9e374.zip
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.ts6
-rw-r--r--packages/taler-wallet-core/src/operations/backup/index.ts30
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(