diff options
| author | Florian Dold <florian@dold.me> | 2022-01-24 21:14:21 +0100 | 
|---|---|---|
| committer | Florian Dold <florian@dold.me> | 2022-01-24 21:14:28 +0100 | 
| commit | 26ee8e3c717701be9170d45da94c46ae850e1f21 (patch) | |
| tree | 38875f6538f7dfa489feed08b187a3a1084b254a /packages/taler-util | |
| parent | 1374b37d2650ab428c9c2b07422afd6083697dfd (diff) | |
fix exchange-timetravel test case with latest exchange version
Diffstat (limited to 'packages/taler-util')
| -rw-r--r-- | packages/taler-util/src/talerTypes.ts | 42 | 
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") | 
