diff options
author | Florian Dold <florian@dold.me> | 2024-08-08 16:49:37 +0200 |
---|---|---|
committer | Florian Dold <florian@dold.me> | 2024-08-14 13:22:41 +0200 |
commit | 3c86bfb1435deba091771ca4e6135fbfd29b70ec (patch) | |
tree | 1f7833e9a903deb90f040f8e73663e5f104e945a /packages/taler-util/src/taler-signatures.ts | |
parent | 947aa424ca0bc214c3e175221636fe6193c939c2 (diff) | |
download | wallet-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.ts | 63 |
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); +} |