aboutsummaryrefslogtreecommitdiff
path: root/packages/taler-util/src/taler-signatures.ts
diff options
context:
space:
mode:
authorFlorian Dold <florian@dold.me>2024-08-08 16:49:37 +0200
committerFlorian Dold <florian@dold.me>2024-08-14 13:22:41 +0200
commit3c86bfb1435deba091771ca4e6135fbfd29b70ec (patch)
tree1f7833e9a903deb90f040f8e73663e5f104e945a /packages/taler-util/src/taler-signatures.ts
parent947aa424ca0bc214c3e175221636fe6193c939c2 (diff)
downloadwallet-core-3c86bfb1435deba091771ca4e6135fbfd29b70ec.tar.xz
wallet-core: implement basic wallet KYC for balance thresholds
Diffstat (limited to 'packages/taler-util/src/taler-signatures.ts')
-rw-r--r--packages/taler-util/src/taler-signatures.ts63
1 files changed, 63 insertions, 0 deletions
diff --git a/packages/taler-util/src/taler-signatures.ts b/packages/taler-util/src/taler-signatures.ts
new file mode 100644
index 000000000..81b7c242e
--- /dev/null
+++ b/packages/taler-util/src/taler-signatures.ts
@@ -0,0 +1,63 @@
+/*
+ This file is part of GNU Taler
+ (C) 2024 GNUnet e.V.
+
+ GNU Taler is free software; you can redistribute it and/or modify it under the
+ terms of the GNU General Public License as published by the Free Software
+ Foundation; either version 3, or (at your option) any later version.
+
+ GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along with
+ GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
+ */
+
+import { canonicalJson } from "./index.js";
+import {
+ bufferForUint64,
+ buildSigPS,
+ decodeCrock,
+ eddsaSign,
+ hash,
+ stringToBytes,
+ TalerSignaturePurpose,
+ timestampRoundedToBuffer,
+} from "./taler-crypto.js";
+import { AmlDecisionRequestWithoutSignature } from "./types-taler-exchange.js";
+
+/**
+ * Implementation of Taler protocol signatures.
+ *
+ * In this file, we have implementations of signatures that are not used in the wallet,
+ * but in other places (tests, SPAs, ...).
+ */
+
+/**
+ * Signature for the POST /aml/$OFFICER_PUB/decisions endpoint.
+ */
+export function signAmlDecision(
+ priv: Uint8Array,
+ decision: AmlDecisionRequestWithoutSignature,
+): Uint8Array {
+ const builder = buildSigPS(TalerSignaturePurpose.AML_DECISION);
+
+ const flags: number = decision.keep_investigating ? 1 : 0;
+
+ builder.put(timestampRoundedToBuffer(decision.decision_time));
+ builder.put(decodeCrock(decision.h_payto));
+ builder.put(hash(stringToBytes(decision.justification)));
+ builder.put(hash(stringToBytes(canonicalJson(decision.properties) + "\0")));
+ builder.put(hash(stringToBytes(canonicalJson(decision.new_rules) + "\0")));
+ if (decision.new_measure != null) {
+ builder.put(hash(stringToBytes(decision.new_measure)));
+ } else {
+ builder.put(new Uint8Array(64));
+ }
+ builder.put(bufferForUint64(flags));
+
+ const sigBlob = builder.build();
+
+ return eddsaSign(sigBlob, priv);
+}