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:
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,
- };
-}