From 0e74fbef8dff6b0ab8dde4619c74366ae55267a5 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Tue, 22 Dec 2020 18:38:14 +0100 Subject: [PATCH] add logic to report generation for missing auditor signatures --- contrib/auditor-report.tex.j2 | 33 ++++++++++++++++++++++++ src/auditor/taler-helper-auditor-coins.c | 32 ++++++++++++++++++----- 2 files changed, 59 insertions(+), 6 deletions(-) diff --git a/contrib/auditor-report.tex.j2 b/contrib/auditor-report.tex.j2 index 5aade17da..d96040512 100644 --- a/contrib/auditor-report.tex.j2 +++ b/contrib/auditor-report.tex.j2 @@ -967,6 +967,39 @@ with respect to outgoing wire transfers. \section{Minor irregularities} +\subsection{Denominations without auditor signature} + +This section highlights denomination keys that lack a proper +signature from the {\t taler-auditor-offline} tool. This may be +legitimate, say in case where the auditor's involvement in the +exchange business is ending and a new auditor is responsible for +future denomnations. So this must be read with a keen eye on the +business situation. + + +{% if coins.unsigned_denominations() == 0 %} + {\bf All denominations officially audited by this auditor.} +{% else %} + \begin{longtable}{p{6cm}|r|r|r} + {\bf Denomination} & {\bf Value} & {\bf Start} & {\bf End} \\ \hline \hline +\endfirsthead + {\bf Denomination} & {\bf Value} & {\bf Start} & {\bf End} \\ \hline \hline +\endhead + \hline \hline + {\bf Denomination} & {\bf Value} & {\bf Start} & {\bf End} \\ \hline \hline +\endfoot + \caption{Denominations not officially audited by this auditor.} + \label{table:denominations:denoms_without_signatures} +\endlastfoot +{% for item in coins.unsigned_denominations %} + {\tt \tiny {{ item.denomination }} } & + {{ item.value }} & + {{ item.start_time }} & + {{ item.end_time }} \\ \hline +{% endfor %} + \end{longtable} +{% endif %} + \subsection{Incorrect reserve balance summary in database} This section highlights cases where the reserve balance summary diff --git a/src/auditor/taler-helper-auditor-coins.c b/src/auditor/taler-helper-auditor-coins.c index fe9cf7744..a63426f7a 100644 --- a/src/auditor/taler-helper-auditor-coins.c +++ b/src/auditor/taler-helper-auditor-coins.c @@ -74,6 +74,11 @@ static json_t *report_emergencies_by_count; */ static json_t *report_row_inconsistencies; +/** + * Array of reports about denominations not counter-signed by the auditor. + */ +static json_t *report_denominations_without_sigs; + /** * Report about amount calculation differences (causing profit * or loss at the exchange). @@ -2262,10 +2267,19 @@ check_denomination ( &TALER_ARL_auditor_pub, &auditor_sig)) { - // FIXME: add properly to audit report! - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "Exchange has invalid signature from this auditor for denomination `%s' in its database!\n", - GNUNET_h2s (&issue->denom_hash)); + TALER_ARL_report (report_denominations_without_sigs, + json_pack ("{s:o, s:o, s:o, s:o}", + "denomination", + GNUNET_JSON_from_data_auto ( + &issue->denom_hash), + "value", + TALER_JSON_from_amount (&coin_value), + "start_time", + TALER_ARL_json_from_time_abs_nbo ( + issue->start), + "end_time", + TALER_ARL_json_from_time_abs_nbo ( + issue->expire_legal))); } } } @@ -2580,6 +2594,8 @@ run (void *cls, (report_emergencies_by_count = json_array ())); GNUNET_assert (NULL != (report_row_inconsistencies = json_array ())); + GNUNET_assert (NULL != + (report_denominations_without_sigs = json_array ())); GNUNET_assert (NULL != (report_amount_arithmetic_inconsistencies = json_array ())); @@ -2602,7 +2618,8 @@ run (void *cls, " s:o, s:o, s:o, s:o, s:o," " s:I, s:I, s:I, s:I, s:I," " s:I, s:I, s:I, s:I, s:I," - " s:I, s:I, s:o, s:o, s:o}", + " s:I, s:I, s:o, s:o, s:o," + " s:o}", /* Block #1 */ "total_escrow_balance", TALER_JSON_from_amount (&total_escrow_balance), @@ -2703,7 +2720,10 @@ run (void *cls, GNUNET_TIME_absolute_get ()), "total_irregular_recoups", TALER_JSON_from_amount ( - &total_irregular_recoups) + &total_irregular_recoups), + /* Block #8 */ + "unsigned_denominations", + report_denominations_without_sigs ); GNUNET_break (NULL != report); TALER_ARL_done (report);