taler-typescript-core

Wallet core logic and WebUIs for various components
Log | Files | Refs | Submodules | README | LICENSE

commit 30383d956d23f6f798854b9103b4f0f66bec4b2e
parent 21295823e89354e4faff8ff28ef7ce1a4ad8290e
Author: Florian Dold <florian@dold.me>
Date:   Tue, 25 Feb 2025 23:15:24 +0100

remove duplicate, outdated implementation of AML decision signing

Diffstat:
Mpackages/taler-util/src/http-client/exchange.ts | 40++--------------------------------------
1 file changed, 2 insertions(+), 38 deletions(-)

diff --git a/packages/taler-util/src/http-client/exchange.ts b/packages/taler-util/src/http-client/exchange.ts @@ -23,7 +23,6 @@ import { import { HttpStatusCode } from "../http-status-codes.js"; import { createPlatformHttpLib } from "../http.js"; import { LibtoolVersion } from "../libtool-version.js"; -import { hash } from "../nacl-fast.js"; import { FailCasesByMethod, OperationFail, @@ -39,13 +38,9 @@ import { import { TalerSignaturePurpose, amountToBuffer, - bufferForUint64, buildSigPS, - decodeCrock, eddsaSign, encodeCrock, - stringToBytes, - timestampRoundedToBuffer, } from "../taler-crypto.js"; import { AccessToken, @@ -79,8 +74,7 @@ import { import { CacheEvictor, addPaginationParams, nullEvictor } from "./utils.js"; import { TalerError } from "../errors.js"; -import { canonicalJson } from "../helpers.js"; -import { AmountJson, Amounts } from "../index.js"; +import { AmountJson, Amounts, signAmlDecision } from "../index.js"; import { TalerErrorCode } from "../taler-error-codes.js"; import { AbsoluteTime } from "../time.js"; import { codecForEmptyObject } from "../types-taler-wallet.js"; @@ -994,8 +988,7 @@ export class TalerExchangeHttpClient { decision: Omit<AmlDecisionRequest, "officer_sig">, ) { const url = new URL(`aml/${auth.id}/decision`, this.baseUrl); - - const body = buildAMLDecisionSignature(auth.signingKey, decision); + const body = signAmlDecision(auth.signingKey, decision); const resp = await this.httpLib.fetch(url.href, { method: "POST", headers: { @@ -1003,7 +996,6 @@ export class TalerExchangeHttpClient { }, body, }); - switch (resp.status) { case HttpStatusCode.NoContent: { this.cacheEvictor.notifySuccess( @@ -1165,31 +1157,3 @@ function buildAMLQuerySignature(key: SigningKey): string { return encodeCrock(eddsaSign(sigBlob, key)); } - -function buildAMLDecisionSignature( - key: SigningKey, - decision: Omit<AmlDecisionRequest, "officer_sig">, -): AmlDecisionRequest { - const zero = new Uint8Array(new ArrayBuffer(64)); - - const sigBlob = buildSigPS(TalerSignaturePurpose.AML_DECISION) - .put(timestampRoundedToBuffer(decision.decision_time)) - .put(decodeCrock(decision.h_payto)) - .put(hash(stringToBytes(decision.justification))) - .put(hash(stringToBytes(canonicalJson(decision.properties) + "\0"))) - .put(hash(stringToBytes(canonicalJson(decision.new_rules) + "\0"))) - .put( - decision.new_measures != null - ? hash(stringToBytes(decision.new_measures)) - : zero, - ) - .put(bufferForUint64(decision.keep_investigating ? 1 : 0)) - .build(); - - const officer_sig = encodeCrock(eddsaSign(sigBlob, key)); - - return { - ...decision, - officer_sig, - }; -}