exchange

Base system with REST service to issue digital coins, run by the payment service provider
Log | Files | Refs | Submodules | README | LICENSE

commit 04849cb64430b4c05f0628e3045e81749f4a37a6
parent c7bbc121a50da91ca5603fbecfaab47319da88b0
Author: Christian Grothoff <christian@grothoff.org>
Date:   Thu, 13 Aug 2026 20:01:12 +0200

do not use revoked keys (defense-in-depth)

Diffstat:
Msrc/util/secmod_cs.c | 18++++++++++++++++++
Msrc/util/secmod_rsa.c | 9+++++++++
2 files changed, 27 insertions(+), 0 deletions(-)

diff --git a/src/util/secmod_cs.c b/src/util/secmod_cs.c @@ -459,6 +459,15 @@ do_sign (const struct TALER_CsPubHashP *h_cs, GNUNET_h2s (&h_cs->hash)); return TALER_EC_EXCHANGE_GENERIC_DENOMINATION_KEY_UNKNOWN; } + if (dk->purge) + { + /* key was revoked, it must not be used for signing anymore */ + GNUNET_assert (0 == pthread_mutex_unlock (&keys_lock)); + GNUNET_log (GNUNET_ERROR_TYPE_INFO, + "Signing request failed, denomination key %s was revoked\n", + GNUNET_h2s (&h_cs->hash)); + return TALER_EC_EXCHANGE_GENERIC_DENOMINATION_REVOKED; + } if (GNUNET_TIME_absolute_is_future (dk->anchor_start.abs_time)) { GNUNET_assert (0 == pthread_mutex_unlock (&keys_lock)); @@ -634,6 +643,15 @@ do_derive (const struct TALER_CsPubHashP *h_cs, GNUNET_h2s (&h_cs->hash)); return TALER_EC_EXCHANGE_GENERIC_DENOMINATION_KEY_UNKNOWN; } + if (dk->purge) + { + /* key was revoked, it must not be used for deriving anymore */ + GNUNET_assert (0 == pthread_mutex_unlock (&keys_lock)); + GNUNET_log (GNUNET_ERROR_TYPE_INFO, + "R Derive request failed, denomination key %s was revoked\n", + GNUNET_h2s (&h_cs->hash)); + return TALER_EC_EXCHANGE_GENERIC_DENOMINATION_REVOKED; + } if (GNUNET_TIME_absolute_is_future (dk->anchor_start.abs_time)) { GNUNET_assert (0 == pthread_mutex_unlock (&keys_lock)); diff --git a/src/util/secmod_rsa.c b/src/util/secmod_rsa.c @@ -438,6 +438,15 @@ do_sign (const struct TALER_RsaPubHashP *h_rsa, GNUNET_h2s (&h_rsa->hash)); return TALER_EC_EXCHANGE_GENERIC_DENOMINATION_KEY_UNKNOWN; } + if (dk->purge) + { + /* key was revoked, it must not be used for signing anymore */ + GNUNET_assert (0 == pthread_mutex_unlock (&keys_lock)); + GNUNET_log (GNUNET_ERROR_TYPE_INFO, + "Signing request failed, denomination key %s was revoked\n", + GNUNET_h2s (&h_rsa->hash)); + return TALER_EC_EXCHANGE_GENERIC_DENOMINATION_REVOKED; + } if (GNUNET_TIME_absolute_is_future (dk->anchor_start.abs_time)) { /* it is too early */