summaryrefslogtreecommitdiff
path: root/src/backend
diff options
context:
space:
mode:
authorFlorian Dold <florian@dold.me>2022-04-26 00:10:44 +0200
committerFlorian Dold <florian@dold.me>2022-04-26 00:10:44 +0200
commit407fd7eb725ce58515c5feab2a61ed4adb596e80 (patch)
tree5d9bdbcb3b7443d0edf579282a642a5dc0822a57 /src/backend
parentc1efc9812ba1593d93a71126923e1e2230f657fa (diff)
downloadmerchant-407fd7eb725ce58515c5feab2a61ed4adb596e80.tar.gz
merchant-407fd7eb725ce58515c5feab2a61ed4adb596e80.tar.bz2
merchant-407fd7eb725ce58515c5feab2a61ed4adb596e80.zip
actually store minimum age sig
Previously the value was parsed, but never actually stored in the place where we later look it up for signature verification.
Diffstat (limited to 'src/backend')
-rw-r--r--src/backend/taler-merchant-httpd_post-orders-ID-pay.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/src/backend/taler-merchant-httpd_post-orders-ID-pay.c b/src/backend/taler-merchant-httpd_post-orders-ID-pay.c
index 4ace33ef..c64eaebf 100644
--- a/src/backend/taler-merchant-httpd_post-orders-ID-pay.c
+++ b/src/backend/taler-merchant-httpd_post-orders-ID-pay.c
@@ -124,9 +124,10 @@ struct DepositConfirmation
/**
* If a minimum age was required (i. e. pc->minimum_age is large enough),
* this is the signature of the minimum age (as a single uint8_t), using the
- * private key to the corresponding age group. Might be NULL.
+ * private key to the corresponding age group. Might be all zeroes for no
+ * age attestation.
*/
- struct TALER_AgeAttestation *minimum_age_sig;
+ struct TALER_AgeAttestation minimum_age_sig;
/* If a minimum age was required (i. e. pc->minimum_age is large enought),
* this is the age commitment (i. e. age mask and vector of EdDSA public
@@ -1193,7 +1194,7 @@ process_pay_with_exchange (void *cls,
}
dc->age_commitment->mask = denom_details->key.age_mask;
- if (dc->age_commitment->num !=
+ if ((dc->age_commitment->num + 1) !=
__builtin_popcount (dc->age_commitment->mask.bits))
{
code =
@@ -1205,7 +1206,7 @@ process_pay_with_exchange (void *cls,
TALER_age_commitment_verify (
dc->age_commitment,
pc->minimum_age,
- dc->minimum_age_sig))
+ &dc->minimum_age_sig))
code = TALER_EC_MERCHANT_POST_ORDERS_ID_PAY_AGE_VERIFICATION_FAILED;
AGE_FAIL:
@@ -2034,7 +2035,6 @@ parse_pay (struct MHD_Connection *connection,
{
struct DepositConfirmation *dc = &pc->dc[coins_index];
const char *exchange_url;
- struct TALER_AgeAttestation minimum_age_sig = {0};
json_t *age_commitment = NULL;
struct GNUNET_JSON_Specification ispec[] = {
GNUNET_JSON_spec_fixed_auto ("coin_sig",
@@ -2052,7 +2052,7 @@ parse_pay (struct MHD_Connection *connection,
&exchange_url),
GNUNET_JSON_spec_mark_optional (
GNUNET_JSON_spec_fixed_auto ("minimum_age_sig",
- &minimum_age_sig),
+ &dc->minimum_age_sig),
NULL),
GNUNET_JSON_spec_mark_optional (
GNUNET_JSON_spec_json ("age_commitment",
@@ -2110,8 +2110,8 @@ parse_pay (struct MHD_Connection *connection,
{
bool has_commitment = (NULL != age_commitment) &&
json_is_array (age_commitment);
- bool has_sig = ! GNUNET_is_zero_ (&minimum_age_sig,
- sizeof(minimum_age_sig));
+ bool has_sig = ! GNUNET_is_zero_ (&dc->minimum_age_sig,
+ sizeof(dc->minimum_age_sig));
if (has_sig != has_commitment)
{
GNUNET_break_op (0);