gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-exchange] branch master updated: -crypto for AML decision signatu


From: gnunet
Subject: [taler-exchange] branch master updated: -crypto for AML decision signatures
Date: Sun, 01 Jan 2023 18:42:15 +0100

This is an automated email from the git hooks/post-receive script.

grothoff pushed a commit to branch master
in repository exchange.

The following commit(s) were added to refs/heads/master by this push:
     new 4f0d8593 -crypto for AML decision signatures
4f0d8593 is described below

commit 4f0d85935f5577b9fc6feea5603ac7a0fa210625
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Sun Jan 1 18:36:54 2023 +0100

    -crypto for AML decision signatures
---
 src/include/taler_crypto_lib.h |  53 +++++++++++++++++
 src/util/Makefile.am           |   1 +
 src/util/aml_signatures.c      | 127 +++++++++++++++++++++++++++++++++++++++++
 3 files changed, 181 insertions(+)

diff --git a/src/include/taler_crypto_lib.h b/src/include/taler_crypto_lib.h
index ca80c6cc..35a6bd6d 100644
--- a/src/include/taler_crypto_lib.h
+++ b/src/include/taler_crypto_lib.h
@@ -2354,6 +2354,58 @@ TALER_CRYPTO_contract_decrypt_for_deposit (
   size_t econtract_size);
 
 
+/* **************** AML officer signatures **************** */
+
+
+/**
+ * Sign AML decision.
+ *
+ * @param justification human-readable justification
+ * @param decision_time when was the decision made
+ * @param new_threshold at what monthly amount threshold
+ *                      should a revision be triggered
+ * @param h_payto payto URI hash of the account the
+ *                      decision is about
+ * @param new_state updated AML state
+ * @param officer_priv private key of AML officer
+ * @param[out] officer_sig where to write the signature
+ */
+void
+TALER_officer_aml_decision_sign (
+  const char *justification,
+  struct GNUNET_TIME_Timestamp decision_time,
+  const struct TALER_Amount *new_threshold,
+  const struct TALER_PaytoHashP *h_payto,
+  enum TALER_AmlDecisionState new_state,
+  const struct TALER_AmlOfficerPrivateKeyP *officer_priv,
+  struct TALER_AmlOfficerSignatureP *officer_sig);
+
+
+/**
+ * Verify AML decision.
+ *
+ * @param justification human-readable justification
+ * @param decision_time when was the decision made
+ * @param new_threshold at what monthly amount threshold
+ *                      should a revision be triggered
+ * @param h_payto payto URI hash of the account the
+ *                      decision is about
+ * @param new_state updated AML state
+ * @param officer_pub public key of AML officer
+ * @param officer_sig signature to verify
+ * @return #GNUNET_OK if the signature is valid
+ */
+enum GNUNET_GenericReturnValue
+TALER_officer_aml_decision_verify (
+  const char *justification,
+  struct GNUNET_TIME_Timestamp decision_time,
+  const struct TALER_Amount *new_threshold,
+  const struct TALER_PaytoHashP *h_payto,
+  enum TALER_AmlDecisionState new_state,
+  const struct TALER_AmlOfficerPublicKeyP *officer_pub,
+  const struct TALER_AmlOfficerSignatureP *officer_sig);
+
+
 /* **************** Helper-based RSA operations **************** */
 
 /**
@@ -2522,6 +2574,7 @@ void
 TALER_CRYPTO_helper_rsa_disconnect (
   struct TALER_CRYPTO_RsaDenominationHelper *dh);
 
+
 /* **************** Helper-based CS operations **************** */
 
 /**
diff --git a/src/util/Makefile.am b/src/util/Makefile.am
index acafdae5..656da7c4 100644
--- a/src/util/Makefile.am
+++ b/src/util/Makefile.am
@@ -77,6 +77,7 @@ lib_LTLIBRARIES = \
 libtalerutil_la_SOURCES = \
   age_restriction.c \
   amount.c \
+  aml_signatures.c \
   auditor_signatures.c \
   config.c \
   crypto.c \
diff --git a/src/util/aml_signatures.c b/src/util/aml_signatures.c
new file mode 100644
index 00000000..7d5d3047
--- /dev/null
+++ b/src/util/aml_signatures.c
@@ -0,0 +1,127 @@
+/*
+  This file is part of TALER
+  Copyright (C) 2023 Taler Systems SA
+
+  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.
+
+  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
+  TALER; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
+*/
+/**
+ * @file aml_signatures.c
+ * @brief Utility functions for AML officers
+ * @author Christian Grothoff
+ */
+#include "platform.h"
+#include "taler_util.h"
+#include "taler_signatures.h"
+
+
+GNUNET_NETWORK_STRUCT_BEGIN
+
+/**
+ * @brief Format used to generate the signature on a request to deposit
+ * a coin into the account of a merchant.
+ */
+struct TALER_AmlDecisionPS
+{
+  /**
+   * Purpose must be #TALER_SIGNATURE_AML_DECISION.
+   * Used for an EdDSA signature with the `struct TALER_AmlOfficerPublicKeyP`.
+   */
+  struct GNUNET_CRYPTO_EccSignaturePurpose purpose;
+
+  /**
+   * Hash over the justification text.
+   */
+  struct GNUNET_HashCode h_justification GNUNET_PACKED;
+
+  /**
+   * Time when this decision was made.
+   */
+  struct GNUNET_TIME_TimestampNBO decision_time;
+
+  /**
+   * New threshold for triggering possibly a new AML process.
+   */
+  struct TALER_AmountNBO new_threshold;
+
+  /**
+   * Hash of the account identifier to which the decision applies.
+   */
+  struct TALER_PaytoHashP h_payto GNUNET_PACKED;
+
+  /**
+   * What is the new AML status?
+   */
+  uint32_t new_state GNUNET_PACKED;
+
+};
+
+GNUNET_NETWORK_STRUCT_END
+
+void
+TALER_officer_aml_decision_sign (
+  const char *justification,
+  struct GNUNET_TIME_Timestamp decision_time,
+  const struct TALER_Amount *new_threshold,
+  const struct TALER_PaytoHashP *h_payto,
+  enum TALER_AmlDecisionState new_state,
+  const struct TALER_AmlOfficerPrivateKeyP *officer_priv,
+  struct TALER_AmlOfficerSignatureP *officer_sig)
+{
+  struct TALER_AmlDecisionPS ad = {
+    .purpose.purpose = htonl (TALER_SIGNATURE_AML_DECISION),
+    .purpose.size = htonl (sizeof (ad)),
+    .h_payto = *h_payto,
+    .new_state = htonl ((uint32_t) new_state)
+  };
+
+  GNUNET_CRYPTO_hash (justification,
+                      strlen (justification),
+                      &ad.h_justification);
+  TALER_amount_hton (&ad.new_threshold,
+                     new_threshold);
+  GNUNET_CRYPTO_eddsa_sign (&officer_priv->eddsa_priv,
+                            &ad,
+                            &officer_sig->eddsa_signature);
+}
+
+
+enum GNUNET_GenericReturnValue
+TALER_officer_aml_decision_verify (
+  const char *justification,
+  struct GNUNET_TIME_Timestamp decision_time,
+  const struct TALER_Amount *new_threshold,
+  const struct TALER_PaytoHashP *h_payto,
+  enum TALER_AmlDecisionState new_state,
+  const struct TALER_AmlOfficerPublicKeyP *officer_pub,
+  const struct TALER_AmlOfficerSignatureP *officer_sig)
+{
+  struct TALER_AmlDecisionPS ad = {
+    .purpose.purpose = htonl (TALER_SIGNATURE_AML_DECISION),
+    .purpose.size = htonl (sizeof (ad)),
+    .h_payto = *h_payto,
+    .new_state = htonl ((uint32_t) new_state)
+  };
+
+  GNUNET_CRYPTO_hash (justification,
+                      strlen (justification),
+                      &ad.h_justification);
+  TALER_amount_hton (&ad.new_threshold,
+                     new_threshold);
+  return GNUNET_CRYPTO_eddsa_verify (
+    TALER_SIGNATURE_AML_DECISION,
+    &ad,
+    &officer_sig->eddsa_signature,
+    &officer_pub->eddsa_pub);
+}
+
+
+/* end of aml_signatures.c */

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]