summaryrefslogtreecommitdiff
path: root/packages/taler-util/src/talerTypes.ts
diff options
context:
space:
mode:
authorFlorian Dold <florian@dold.me>2022-01-24 21:14:21 +0100
committerFlorian Dold <florian@dold.me>2022-01-24 21:14:28 +0100
commit26ee8e3c717701be9170d45da94c46ae850e1f21 (patch)
tree38875f6538f7dfa489feed08b187a3a1084b254a /packages/taler-util/src/talerTypes.ts
parent1374b37d2650ab428c9c2b07422afd6083697dfd (diff)
downloadwallet-core-26ee8e3c717701be9170d45da94c46ae850e1f21.tar.gz
wallet-core-26ee8e3c717701be9170d45da94c46ae850e1f21.tar.bz2
wallet-core-26ee8e3c717701be9170d45da94c46ae850e1f21.zip
fix exchange-timetravel test case with latest exchange version
Diffstat (limited to 'packages/taler-util/src/talerTypes.ts')
-rw-r--r--packages/taler-util/src/talerTypes.ts42
1 files changed, 42 insertions, 0 deletions
diff --git a/packages/taler-util/src/talerTypes.ts b/packages/taler-util/src/talerTypes.ts
index 2f2576d82..37350c661 100644
--- a/packages/taler-util/src/talerTypes.ts
+++ b/packages/taler-util/src/talerTypes.ts
@@ -47,6 +47,7 @@ import {
codecForDuration,
} from "./time.js";
import { Amounts, codecForAmountString } from "./amounts.js";
+import { strcmp } from "./helpers.js";
/**
* Denomination as found in the /keys response from the exchange.
@@ -1125,6 +1126,47 @@ export interface CsDenominationPubKey {
// FIXME: finish definition
}
+export namespace DenominationPubKey {
+ export function cmp(
+ p1: DenominationPubKey,
+ p2: DenominationPubKey,
+ ): -1 | 0 | 1 {
+ if (p1.cipher < p2.cipher) {
+ return -1;
+ } else if (p1.cipher > p2.cipher) {
+ return +1;
+ }
+ if (
+ p1.cipher === DenomKeyType.LegacyRsa &&
+ p2.cipher === DenomKeyType.LegacyRsa
+ ) {
+ return strcmp(p1.rsa_public_key, p2.rsa_public_key);
+ } else if (
+ p1.cipher === DenomKeyType.Rsa &&
+ p2.cipher === DenomKeyType.Rsa
+ ) {
+ if ((p1.age_mask ?? 0) < (p2.age_mask ?? 0)) {
+ return -1;
+ } else if ((p1.age_mask ?? 0) > (p2.age_mask ?? 0)) {
+ return 1;
+ }
+ return strcmp(p1.rsa_public_key, p2.rsa_public_key);
+ } else {
+ throw Error("unsupported cipher");
+ }
+ }
+
+ export function lift(p1: DenominationPubKey | string): DenominationPubKey {
+ if (typeof p1 === "string") {
+ return {
+ cipher: DenomKeyType.LegacyRsa,
+ rsa_public_key: p1,
+ };
+ }
+ return p1;
+ }
+}
+
export const codecForDenominationPubKey = () =>
buildCodecForUnion<DenominationPubKey>()
.discriminateOn("cipher")