diff options
| author | Christian Grothoff <christian@grothoff.org> | 2021-07-31 20:27:16 +0200 | 
|---|---|---|
| committer | Christian Grothoff <christian@grothoff.org> | 2021-07-31 20:27:16 +0200 | 
| commit | 1d54400a025ff62ad15b77ab117ea5188884b1a1 (patch) | |
| tree | 195b21644b44a24b84bee159ca0011a1d372a109 | |
| parent | 723a3b742e9b284400c5164d146dc953383b4384 (diff) | |
-more eliminations of json_pack
| -rw-r--r-- | src/include/taler_exchange_service.h | 8 | ||||
| -rw-r--r-- | src/include/taler_json_lib.h | 12 | ||||
| -rw-r--r-- | src/lib/auditor_api_deposit_confirmation.c | 62 | ||||
| -rw-r--r-- | src/lib/exchange_api_auditor_add_denomination.c | 14 | ||||
| -rw-r--r-- | src/lib/exchange_api_deposit.c | 57 | ||||
| -rw-r--r-- | src/lib/exchange_api_handle.c | 232 | ||||
| -rw-r--r-- | src/lib/exchange_api_management_auditor_disable.c | 20 | ||||
| -rw-r--r-- | src/lib/exchange_api_management_auditor_enable.c | 32 | ||||
| -rw-r--r-- | src/lib/exchange_api_management_post_keys.c | 90 | ||||
| -rw-r--r-- | src/lib/exchange_api_management_revoke_denomination_key.c | 6 | ||||
| -rw-r--r-- | src/lib/exchange_api_management_revoke_signing_key.c | 16 | ||||
| -rw-r--r-- | src/lib/exchange_api_management_set_wire_fee.c | 36 | ||||
| -rw-r--r-- | src/lib/exchange_api_management_wire_disable.c | 24 | ||||
| -rw-r--r-- | src/lib/exchange_api_management_wire_enable.c | 28 | ||||
| -rw-r--r-- | src/lib/exchange_api_melt.c | 62 | ||||
| -rw-r--r-- | src/lib/exchange_api_recoup.c | 55 | ||||
| -rw-r--r-- | src/lib/exchange_api_refreshes_reveal.c | 58 | ||||
| -rw-r--r-- | src/lib/exchange_api_refund.c | 67 | ||||
| -rw-r--r-- | src/lib/exchange_api_withdraw2.c | 49 | 
19 files changed, 305 insertions, 623 deletions
| diff --git a/src/include/taler_exchange_service.h b/src/include/taler_exchange_service.h index a344771c..3fc5f353 100644 --- a/src/include/taler_exchange_service.h +++ b/src/include/taler_exchange_service.h @@ -155,10 +155,10 @@ struct TALER_EXCHANGE_DenomPublicKey    struct TALER_Amount fee_refund;    /** -   * Set to #GNUNET_YES if this denomination key has been +   * Set to true if this denomination key has been     * revoked by the exchange.     */ -  int revoked; +  bool revoked;  }; @@ -1869,7 +1869,7 @@ typedef void   * @param pk kind of coin to pay back   * @param denom_sig signature over the coin by the exchange using @a pk   * @param ps secret internals of the original planchet - * @param was_refreshed #GNUNET_YES if the coin in @a ps was refreshed + * @param was_refreshed true if the coin in @a ps was refreshed   * @param recoup_cb the callback to call when the final result for this request is available   * @param recoup_cb_cls closure for @a recoup_cb   * @return NULL @@ -1881,7 +1881,7 @@ TALER_EXCHANGE_recoup (struct TALER_EXCHANGE_Handle *exchange,                         const struct TALER_EXCHANGE_DenomPublicKey *pk,                         const struct TALER_DenominationSignature *denom_sig,                         const struct TALER_PlanchetSecretsP *ps, -                       int was_refreshed, +                       bool was_refreshed,                         TALER_EXCHANGE_RecoupResultCallback recoup_cb,                         void *recoup_cb_cls); diff --git a/src/include/taler_json_lib.h b/src/include/taler_json_lib.h index 4ed259b2..0cbeba08 100644 --- a/src/include/taler_json_lib.h +++ b/src/include/taler_json_lib.h @@ -103,9 +103,9 @@ TALER_JSON_pack_time_rel_nbo (const char *name,   * @return json pack specification   */  struct GNUNET_JSON_PackSpec -TALER_JSON_pack_denomination_public_key (const char *name, -                                         const struct -                                         TALER_DenominationPublicKey *pk); +TALER_JSON_pack_denomination_public_key ( +  const char *name, +  const struct TALER_DenominationPublicKey *pk);  /** @@ -117,9 +117,9 @@ TALER_JSON_pack_denomination_public_key (const char *name,   * @return json pack specification   */  struct GNUNET_JSON_PackSpec -TALER_JSON_pack_denomination_signature (const char *name, -                                        const struct -                                        TALER_DenominationSignature *sig); +TALER_JSON_pack_denomination_signature ( +  const char *name, +  const struct TALER_DenominationSignature *sig);  /** diff --git a/src/lib/auditor_api_deposit_confirmation.c b/src/lib/auditor_api_deposit_confirmation.c index eb84aead..2afbfd1e 100644 --- a/src/lib/auditor_api_deposit_confirmation.c +++ b/src/lib/auditor_api_deposit_confirmation.c @@ -1,6 +1,6 @@  /*    This file is part of TALER -  Copyright (C) 2014-2020 Taler Systems SA +  Copyright (C) 2014-2021 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 @@ -323,37 +323,35 @@ TALER_AUDITOR_deposit_confirmation (    }    deposit_confirmation_obj -    = json_pack ("{s:o, s:o," /* h_wire, h_contract_terms */ -                 " s:o, s:o," /* timestamp, refund_deadline */ -                 " s:o, s:o," /* amount_without_fees, coin_pub */ -                 " s:o, s:o," /* merchant_pub, exchange_sig */ -                 " s:o, s:o," /* master_pub, ep_start */ -                 " s:o, s:o," /* ep_expire, ep_end */ -                 " s:o, s:o}", /* master_sig, exchange_pub */ -                 "h_wire", GNUNET_JSON_from_data_auto (h_wire), -                 "h_contract_terms", GNUNET_JSON_from_data_auto ( -                   h_contract_terms), -                 "exchange_timestamp", GNUNET_JSON_from_time_abs ( -                   exchange_timestamp), -                 "refund_deadline", GNUNET_JSON_from_time_abs (refund_deadline), -                 "amount_without_fee", TALER_JSON_from_amount ( -                   amount_without_fee), -                 "coin_pub", GNUNET_JSON_from_data_auto (coin_pub), -                 "merchant_pub", GNUNET_JSON_from_data_auto (merchant_pub), -                 "exchange_sig", GNUNET_JSON_from_data_auto (exchange_sig), -                 "master_pub", GNUNET_JSON_from_data_auto (master_pub), -                 "ep_start", GNUNET_JSON_from_time_abs (ep_start), -                 "ep_expire", GNUNET_JSON_from_time_abs (ep_expire), -                 "ep_end", GNUNET_JSON_from_time_abs (ep_end), -                 "master_sig", GNUNET_JSON_from_data_auto (master_sig), -                 "exchange_pub", GNUNET_JSON_from_data_auto (exchange_pub)); - -  if (NULL == deposit_confirmation_obj) -  { -    GNUNET_break (0); -    return NULL; -  } - +    = GNUNET_JSON_PACK ( +        GNUNET_JSON_pack_data_auto ("h_wire", +                                    h_wire), +        GNUNET_JSON_pack_data_auto ("h_contract_terms", +                                    h_contract_terms), +        GNUNET_JSON_pack_time_abs ("exchange_timestamp", +                                   exchange_timestamp), +        GNUNET_JSON_pack_time_abs ("refund_deadline", +                                   refund_deadline), +        TALER_JSON_pack_amount ("amount_without_fee", +                                amount_without_fee), +        GNUNET_JSON_pack_data_auto ("coin_pub", +                                    coin_pub), +        GNUNET_JSON_pack_data_auto ("merchant_pub", +                                    merchant_pub), +        GNUNET_JSON_pack_data_auto ("exchange_sig", +                                    exchange_sig), +        GNUNET_JSON_pack_data_auto ("master_pub", +                                    master_pub), +        GNUNET_JSON_pack_time_abs ("ep_start", +                                   ep_start), +        GNUNET_JSON_pack_time_abs ("ep_expire", +                                   ep_expire), +        GNUNET_JSON_pack_time_abs ("ep_end", +                                   ep_end), +        GNUNET_JSON_pack_data_auto ("master_sig", +                                    master_sig), +        GNUNET_JSON_pack_data_auto ("exchange_pub", +                                    exchange_pub));    dh = GNUNET_new (struct TALER_AUDITOR_DepositConfirmationHandle);    dh->auditor = auditor;    dh->cb = cb; diff --git a/src/lib/exchange_api_auditor_add_denomination.c b/src/lib/exchange_api_auditor_add_denomination.c index 50bffd97..8952cd2f 100644 --- a/src/lib/exchange_api_auditor_add_denomination.c +++ b/src/lib/exchange_api_auditor_add_denomination.c @@ -187,17 +187,11 @@ TALER_EXCHANGE_add_auditor_denomination (      GNUNET_free (ah);      return NULL;    } -  body = json_pack ("{s:o}", -                    "auditor_sig", -                    GNUNET_JSON_from_data_auto (auditor_sig)); -  if (NULL == body) -  { -    GNUNET_break (0); -    GNUNET_free (ah->url); -    GNUNET_free (ah); -    return NULL; -  } +  body = GNUNET_JSON_PACK ( +    GNUNET_JSON_pack_data_auto ("auditor_sig", +                                auditor_sig));    eh = curl_easy_init (); +  GNUNET_assert (NULL != eh);    if (GNUNET_OK !=        TALER_curl_easy_post (&ah->post_ctx,                              eh, diff --git a/src/lib/exchange_api_deposit.c b/src/lib/exchange_api_deposit.c index 792920c1..f22ae0df 100644 --- a/src/lib/exchange_api_deposit.c +++ b/src/lib/exchange_api_deposit.c @@ -1,6 +1,6 @@  /*    This file is part of TALER -  Copyright (C) 2014-2020 Taler Systems SA +  Copyright (C) 2014-2021 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 @@ -663,38 +663,29 @@ TALER_EXCHANGE_deposit (struct TALER_EXCHANGE_Handle *exchange,      return NULL;    } -  deposit_obj = json_pack ("{s:o, s:O," /* f/wire */ -                           " s:o, s:o," /* h_wire, h_contract_terms */ -                           " s:o," /* denom_pub */ -                           " s:o, s:o," /* ub_sig, timestamp */ -                           " s:o," /* merchant_pub */ -                           " s:o, s:o," /* refund_deadline, wire_deadline */ -                           " s:o}",     /* coin_sig */ -                           "contribution", TALER_JSON_from_amount (amount), -                           "wire", wire_details, -                           "h_wire", GNUNET_JSON_from_data_auto (&h_wire), -                           "h_contract_terms", GNUNET_JSON_from_data_auto ( -                             h_contract_terms), -                           "denom_pub_hash", GNUNET_JSON_from_data_auto ( -                             &denom_pub_hash), -                           "ub_sig", GNUNET_JSON_from_rsa_signature ( -                             denom_sig->rsa_signature), -                           "timestamp", GNUNET_JSON_from_time_abs (timestamp), -                           "merchant_pub", GNUNET_JSON_from_data_auto ( -                             merchant_pub), -                           "refund_deadline", GNUNET_JSON_from_time_abs ( -                             refund_deadline), -                           "wire_transfer_deadline", GNUNET_JSON_from_time_abs ( -                             wire_deadline), -                           "coin_sig", GNUNET_JSON_from_data_auto (coin_sig) -                           ); -  if (NULL == deposit_obj) -  { -    *ec = TALER_EC_GENERIC_JSON_ALLOCATION_FAILURE; -    GNUNET_break (0); -    return NULL; -  } - +  deposit_obj = GNUNET_JSON_PACK ( +    TALER_JSON_pack_amount ("contribution", +                            amount), +    GNUNET_JSON_pack_object_incref ("wire", +                                    wire_details), +    GNUNET_JSON_pack_data_auto ("h_wire", +                                &h_wire), +    GNUNET_JSON_pack_data_auto ("h_contract_terms", +                                h_contract_terms), +    GNUNET_JSON_pack_data_auto ("denom_pub_hash", +                                &denom_pub_hash), +    TALER_JSON_pack_denomination_signature ("ub_sig", +                                            denom_sig), +    GNUNET_JSON_pack_time_abs ("timestamp", +                               timestamp), +    GNUNET_JSON_pack_data_auto ("merchant_pub", +                                merchant_pub), +    GNUNET_JSON_pack_time_abs ("refund_deadline", +                               refund_deadline), +    GNUNET_JSON_pack_time_abs ("wire_transfer_deadline", +                               wire_deadline), +    GNUNET_JSON_pack_data_auto ("coin_sig", +                                coin_sig));    dh = GNUNET_new (struct TALER_EXCHANGE_DepositHandle);    dh->auditor_chance = AUDITOR_CHANCE;    dh->exchange = exchange; diff --git a/src/lib/exchange_api_handle.c b/src/lib/exchange_api_handle.c index 43eac97a..61523972 100644 --- a/src/lib/exchange_api_handle.c +++ b/src/lib/exchange_api_handle.c @@ -1,6 +1,6 @@  /*    This file is part of TALER -  Copyright (C) 2014-2018 Taler Systems SA +  Copyright (C) 2014-2021 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 @@ -1612,22 +1612,17 @@ TALER_EXCHANGE_serialize_data (struct TALER_EXCHANGE_Handle *exchange)      if (now.abs_value_us > sk->valid_until.abs_value_us)        continue; /* skip keys that have expired */ -    signkey = json_pack ("{s:o, s:o, s:o, s:o, s:o}", -                         "key", -                         GNUNET_JSON_from_data_auto -                           (&sk->key), -                         "master_sig", -                         GNUNET_JSON_from_data_auto -                           (&sk->master_sig), -                         "stamp_start", -                         GNUNET_JSON_from_time_abs -                           (sk->valid_from), -                         "stamp_expire", -                         GNUNET_JSON_from_time_abs -                           (sk->valid_until), -                         "stamp_end", -                         GNUNET_JSON_from_time_abs -                           (sk->valid_legal)); +    signkey = GNUNET_JSON_PACK ( +      GNUNET_JSON_pack_data_auto ("key", +                                  &sk->key), +      GNUNET_JSON_pack_data_auto ("master_sig", +                                  &sk->master_sig), +      GNUNET_JSON_pack_time_abs ("stamp_start", +                                 sk->valid_from), +      GNUNET_JSON_pack_time_abs ("stamp_expire", +                                 sk->valid_until), +      GNUNET_JSON_pack_time_abs ("stamp_end", +                                 sk->valid_legal));      if (NULL == signkey)      {        GNUNET_break (0); @@ -1656,57 +1651,35 @@ TALER_EXCHANGE_serialize_data (struct TALER_EXCHANGE_Handle *exchange)      if (now.abs_value_us > dk->expire_deposit.abs_value_us)        continue; /* skip keys that have expired */ -    denom = json_pack ("{s:o, s:o, s:o, s:o, s:o " -                       ",s:o, s:o, s:o, s:o, s:o " -                       ",s:o}", -                       "stamp_expire_deposit", -                       GNUNET_JSON_from_time_abs (dk->expire_deposit), -                       "stamp_expire_withdraw", -                       GNUNET_JSON_from_time_abs (dk->withdraw_valid_until), -                       "stamp_start", -                       GNUNET_JSON_from_time_abs (dk->valid_from), -                       "stamp_expire_legal", -                       GNUNET_JSON_from_time_abs (dk->expire_legal), -                       "value", -                       TALER_JSON_from_amount (&dk->value), -                       "fee_withdraw", -                       /* #6 */ -                       TALER_JSON_from_amount (&dk->fee_withdraw), -                       "fee_deposit", -                       TALER_JSON_from_amount (&dk->fee_deposit), -                       "fee_refresh", -                       TALER_JSON_from_amount (&dk->fee_refresh), -                       "fee_refund", -                       TALER_JSON_from_amount (&dk->fee_refund), -                       "master_sig", -                       GNUNET_JSON_from_data_auto (&dk->master_sig), -                       /* #10 */ -                       "denom_pub", -                       GNUNET_JSON_from_rsa_public_key ( -                         dk->key.rsa_public_key)); -    if (NULL == denom) -    { -      GNUNET_break (0); -      continue; -    } -    if (0 != json_array_append_new (denoms, -                                    denom)) -    { -      GNUNET_break (0); -      json_decref (denom); -      json_decref (denoms); -      json_decref (signkeys); -      return NULL; -    } +    denom = GNUNET_JSON_PACK ( +      GNUNET_JSON_pack_time_abs ("stamp_expire_deposit", +                                 dk->expire_deposit), +      GNUNET_JSON_pack_time_abs ("stamp_expire_withdraw", +                                 dk->withdraw_valid_until), +      GNUNET_JSON_pack_time_abs ("stamp_start", +                                 dk->valid_from), +      GNUNET_JSON_pack_time_abs ("stamp_expire_legal", +                                 dk->expire_legal), +      TALER_JSON_pack_amount ("value", +                              &dk->value), +      TALER_JSON_pack_amount ("fee_withdraw", +                              &dk->fee_withdraw), +      TALER_JSON_pack_amount ("fee_deposit", +                              &dk->fee_deposit), +      TALER_JSON_pack_amount ("fee_refresh", +                              &dk->fee_refresh), +      TALER_JSON_pack_amount ("fee_refund", +                              &dk->fee_refund), +      GNUNET_JSON_pack_data_auto ("master_sig", +                                  &dk->master_sig), +      TALER_JSON_pack_denomination_public_key ("denom_pub", +                                               &dk->key)); +    GNUNET_assert (0 == +                   json_array_append_new (denoms, +                                          denom));    }    auditors = json_array (); -  if (NULL == auditors) -  { -    GNUNET_break (0); -    json_decref (denoms); -    json_decref (signkeys); -    return NULL; -  } +  GNUNET_assert (NULL != auditors);    for (unsigned int i = 0; i<kd->num_auditors; i++)    {      const struct TALER_EXCHANGE_AuditorInformation *ai = &kd->auditors[i]; @@ -1733,92 +1706,53 @@ TALER_EXCHANGE_serialize_data (struct TALER_EXCHANGE_Handle *exchange)        if (now.abs_value_us > dk->expire_deposit.abs_value_us)          continue; /* skip auditor signatures for denomination keys that have expired */        GNUNET_assert (adi->denom_key_offset < kd->num_denom_keys); -      k = json_pack ("{s:o, s:o}", -                     "denom_pub_h", -                     GNUNET_JSON_from_data_auto (&dk->h_key), -                     "auditor_sig", -                     GNUNET_JSON_from_data_auto (&adi->auditor_sig)); -      if (NULL == k) -      { -        GNUNET_break (0); -        json_decref (adenoms); -        json_decref (denoms); -        json_decref (signkeys); -        json_decref (auditors); -        return NULL; -      } -      if (0 != json_array_append_new (adenoms, -                                      k)) -      { -        GNUNET_break (0); -        json_decref (k); -        json_decref (adenoms); -        json_decref (denoms); -        json_decref (signkeys); -        json_decref (auditors); -        return NULL; -      } +      k = GNUNET_JSON_PACK ( +        GNUNET_JSON_pack_data_auto ("denom_pub_h", +                                    &dk->h_key), +        GNUNET_JSON_pack_data_auto ("auditor_sig", +                                    &adi->auditor_sig)); +      GNUNET_assert (0 == +                     json_array_append_new (adenoms, +                                            k));      } -    a = json_pack ("{s:o, s:s, s:o}", -                   "auditor_pub", -                   GNUNET_JSON_from_data_auto (&ai->auditor_pub), -                   "auditor_url", -                   ai->auditor_url, -                   "denomination_keys", -                   adenoms); -    if (NULL == a) -    { -      json_decref (adenoms); -      json_decref (denoms); -      json_decref (signkeys); -      json_decref (auditors); -      return NULL; -    } -    if (0 != json_array_append_new (auditors, -                                    a)) -    { -      json_decref (a); -      json_decref (denoms); -      json_decref (signkeys); -      json_decref (auditors); -      return NULL; -    } -  } -  keys = json_pack ("{s:s, s:s, s:o, s:o, s:o, s:o" -                    ",s:o, s:o}", -                    /* 1 */ -                    "version", -                    kd->version, -                    "currency", -                    kd->currency, -                    "master_public_key", -                    GNUNET_JSON_from_data_auto (&kd->master_pub), -                    "reserve_closing_delay", -                    GNUNET_JSON_from_time_rel (kd->reserve_closing_delay), -                    "list_issue_date", -                    GNUNET_JSON_from_time_abs (kd->list_issue_date), -                    "signkeys", -                    signkeys, -                    /* #7 */ -                    "denoms", -                    denoms, -                    "auditors", -                    auditors); -  if (NULL == keys) -  { -    GNUNET_break (0); -    return NULL; +    a = GNUNET_JSON_PACK ( +      GNUNET_JSON_pack_data_auto ("auditor_pub", +                                  &ai->auditor_pub), +      GNUNET_JSON_pack_string ("auditor_url", +                               ai->auditor_url), +      GNUNET_JSON_pack_array_steal ("denomination_keys", +                                    adenoms)); +    GNUNET_assert (0 == +                   json_array_append_new (auditors, +                                          a));    } -  return json_pack ("{s:I, s:o, s:s, s:o}", -                    "version", -                    (json_int_t) EXCHANGE_SERIALIZATION_FORMAT_VERSION, -                    "expire", -                    GNUNET_JSON_from_time_abs (exchange->key_data_expiration), -                    "exchange_url", -                    exchange->url, -                    "keys", -                    keys); +  keys = GNUNET_JSON_PACK ( +    GNUNET_JSON_pack_string ("version", +                             kd->version), +    GNUNET_JSON_pack_string ("currency", +                             kd->currency), +    GNUNET_JSON_pack_data_auto ("master_public_key", +                                &kd->master_pub), +    GNUNET_JSON_pack_time_rel ("reserve_closing_delay", +                               kd->reserve_closing_delay), +    GNUNET_JSON_pack_time_abs ("list_issue_date", +                               kd->list_issue_date), +    GNUNET_JSON_pack_array_steal ("signkeys", +                                  signkeys), +    GNUNET_JSON_pack_array_steal ("denoms", +                                  denoms), +    GNUNET_JSON_pack_array_steal ("auditors", +                                  auditors)); +  return GNUNET_JSON_PACK ( +    GNUNET_JSON_pack_uint64 ("version", +                             EXCHANGE_SERIALIZATION_FORMAT_VERSION), +    GNUNET_JSON_pack_time_abs ("expire", +                               exchange->key_data_expiration), +    GNUNET_JSON_pack_string ("exchange_url", +                             exchange->url), +    GNUNET_JSON_pack_object_steal ("keys", +                                   keys));  } diff --git a/src/lib/exchange_api_management_auditor_disable.c b/src/lib/exchange_api_management_auditor_disable.c index 1ae65774..fb68ad6d 100644 --- a/src/lib/exchange_api_management_auditor_disable.c +++ b/src/lib/exchange_api_management_auditor_disable.c @@ -1,6 +1,6 @@  /*    This file is part of TALER -  Copyright (C) 2015-2020 Taler Systems SA +  Copyright (C) 2015-2021 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 @@ -166,19 +166,13 @@ TALER_EXCHANGE_management_disable_auditor (      GNUNET_free (ah);      return NULL;    } -  body = json_pack ("{s:o, s:o}", -                    "master_sig", -                    GNUNET_JSON_from_data_auto (master_sig), -                    "validity_end", -                    GNUNET_JSON_from_time_abs (validity_end)); -  if (NULL == body) -  { -    GNUNET_break (0); -    GNUNET_free (ah->url); -    GNUNET_free (ah); -    return NULL; -  } +  body = GNUNET_JSON_PACK ( +    GNUNET_JSON_pack_data_auto ("master_sig", +                                master_sig), +    GNUNET_JSON_pack_time_abs ("validity_end", +                               validity_end));    eh = curl_easy_init (); +  GNUNET_assert (NULL != eh);    if (GNUNET_OK !=        TALER_curl_easy_post (&ah->post_ctx,                              eh, diff --git a/src/lib/exchange_api_management_auditor_enable.c b/src/lib/exchange_api_management_auditor_enable.c index 8bad2026..1f53cb12 100644 --- a/src/lib/exchange_api_management_auditor_enable.c +++ b/src/lib/exchange_api_management_auditor_enable.c @@ -1,6 +1,6 @@  /*    This file is part of TALER -  Copyright (C) 2015-2020 Taler Systems SA +  Copyright (C) 2015-2021 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 @@ -150,25 +150,19 @@ TALER_EXCHANGE_management_enable_auditor (      GNUNET_free (ah);      return NULL;    } -  body = json_pack ("{s:s, s:s, s:o, s:o, s:o}", -                    "auditor_url", -                    auditor_url, -                    "auditor_name", -                    auditor_name, -                    "auditor_pub", -                    GNUNET_JSON_from_data_auto (auditor_pub), -                    "master_sig", -                    GNUNET_JSON_from_data_auto (master_sig), -                    "validity_start", -                    GNUNET_JSON_from_time_abs (validity_start)); -  if (NULL == body) -  { -    GNUNET_break (0); -    GNUNET_free (ah->url); -    GNUNET_free (ah); -    return NULL; -  } +  body = GNUNET_JSON_PACK ( +    GNUNET_JSON_pack_string ("auditor_url", +                             auditor_url), +    GNUNET_JSON_pack_string ("auditor_name", +                             auditor_name), +    GNUNET_JSON_pack_data_auto ("auditor_pub", +                                auditor_pub), +    GNUNET_JSON_pack_data_auto ("master_sig", +                                master_sig), +    GNUNET_JSON_pack_time_abs ("validity_start", +                               validity_start));    eh = curl_easy_init (); +  GNUNET_assert (NULL != eh);    if (GNUNET_OK !=        TALER_curl_easy_post (&ah->post_ctx,                              eh, diff --git a/src/lib/exchange_api_management_post_keys.c b/src/lib/exchange_api_management_post_keys.c index 6273299a..e956cfd5 100644 --- a/src/lib/exchange_api_management_post_keys.c +++ b/src/lib/exchange_api_management_post_keys.c @@ -1,6 +1,6 @@  /*    This file is part of TALER -  Copyright (C) 2015-2020 Taler Systems SA +  Copyright (C) 2015-2021 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 @@ -149,72 +149,44 @@ TALER_EXCHANGE_post_management_keys (      return NULL;    }    denom_sigs = json_array (); -  if (NULL == denom_sigs) -  { -    GNUNET_free (ph->url); -    GNUNET_free (ph); -    return NULL; -  } +  GNUNET_assert (NULL != denom_sigs);    for (unsigned int i = 0; i<pkd->num_denom_sigs; i++)    { -    if (0 != -        json_array_append_new ( -          denom_sigs, -          json_pack ("{s:o, s:o}", -                     "h_denom_pub", -                     GNUNET_JSON_from_data_auto ( -                       &pkd->denom_sigs[i].h_denom_pub), -                     "master_sig", -                     GNUNET_JSON_from_data_auto ( -                       &pkd->denom_sigs[i].master_sig)))) -    { -      json_decref (denom_sigs); -      GNUNET_free (ph->url); -      GNUNET_free (ph); -      return NULL; -    } +    const struct TALER_EXCHANGE_DenominationKeySignature *dks +      = &pkd->denom_sigs[i]; + +    GNUNET_assert (0 == +                   json_array_append_new ( +                     denom_sigs, +                     GNUNET_JSON_PACK ( +                       GNUNET_JSON_pack_data_auto ("h_denom_pub", +                                                   &dks->h_denom_pub), +                       GNUNET_JSON_pack_data_auto ("master_sig", +                                                   &dks->master_sig))));    }    signkey_sigs = json_array (); -  if (NULL == signkey_sigs) -  { -    json_decref (denom_sigs); -    GNUNET_free (ph->url); -    GNUNET_free (ph); -    return NULL; -  } +  GNUNET_assert (NULL != signkey_sigs);    for (unsigned int i = 0; i<pkd->num_sign_sigs; i++)    { -    if (0 != -        json_array_append_new ( -          signkey_sigs, -          json_pack ("{s:o, s:o}", -                     "exchange_pub", -                     GNUNET_JSON_from_data_auto ( -                       &pkd->sign_sigs[i].exchange_pub), -                     "master_sig", -                     GNUNET_JSON_from_data_auto ( -                       &pkd->sign_sigs[i].master_sig)))) -    { -      json_decref (signkey_sigs); -      json_decref (denom_sigs); -      GNUNET_free (ph->url); -      GNUNET_free (ph); -      return NULL; -    } -  } -  body = json_pack ("{s:o, s:o}", -                    "denom_sigs", -                    denom_sigs, -                    "signkey_sigs", -                    signkey_sigs); -  if (NULL == body) -  { -    GNUNET_break (0); -    GNUNET_free (ph->url); -    GNUNET_free (ph); -    return NULL; +    const struct TALER_EXCHANGE_SigningKeySignature *sks +      = &pkd->sign_sigs[i]; + +    GNUNET_assert (0 == +                   json_array_append_new ( +                     signkey_sigs, +                     GNUNET_JSON_PACK ( +                       GNUNET_JSON_pack_data_auto ("exchange_pub", +                                                   &sks->exchange_pub), +                       GNUNET_JSON_pack_data_auto ("master_sig", +                                                   &sks->master_sig))));    } +  body = GNUNET_JSON_PACK ( +    GNUNET_JSON_pack_array_steal ("denom_sigs", +                                  denom_sigs), +    GNUNET_JSON_pack_array_steal ("signkey_sigs", +                                  signkey_sigs));    eh = curl_easy_init (); +  GNUNET_assert (NULL != eh);    if (GNUNET_OK !=        TALER_curl_easy_post (&ph->post_ctx,                              eh, diff --git a/src/lib/exchange_api_management_revoke_denomination_key.c b/src/lib/exchange_api_management_revoke_denomination_key.c index 492ece7e..b9e2a556 100644 --- a/src/lib/exchange_api_management_revoke_denomination_key.c +++ b/src/lib/exchange_api_management_revoke_denomination_key.c @@ -163,9 +163,9 @@ TALER_EXCHANGE_management_revoke_denomination_key (      GNUNET_free (rh);      return NULL;    } -  body = json_pack ("{s:o}", -                    "master_sig", -                    GNUNET_JSON_from_data_auto (master_sig)); +  body = GNUNET_JSON_PACK ( +    GNUNET_JSON_pack_data_auto ("master_sig", +                                master_sig));    if (NULL == body)    {      GNUNET_break (0); diff --git a/src/lib/exchange_api_management_revoke_signing_key.c b/src/lib/exchange_api_management_revoke_signing_key.c index f403cee2..f43a46c4 100644 --- a/src/lib/exchange_api_management_revoke_signing_key.c +++ b/src/lib/exchange_api_management_revoke_signing_key.c @@ -1,6 +1,6 @@  /*    This file is part of TALER -  Copyright (C) 2015-2020 Taler Systems SA +  Copyright (C) 2015-2021 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 @@ -160,17 +160,11 @@ TALER_EXCHANGE_management_revoke_signing_key (      GNUNET_free (rh);      return NULL;    } -  body = json_pack ("{s:o}", -                    "master_sig", -                    GNUNET_JSON_from_data_auto (master_sig)); -  if (NULL == body) -  { -    GNUNET_break (0); -    GNUNET_free (rh->url); -    GNUNET_free (rh); -    return NULL; -  } +  body = GNUNET_JSON_PACK ( +    GNUNET_JSON_pack_data_auto ("master_sig", +                                master_sig));    eh = curl_easy_init (); +  GNUNET_assert (NULL != eh);    if (GNUNET_OK !=        TALER_curl_easy_post (&rh->post_ctx,                              eh, diff --git a/src/lib/exchange_api_management_set_wire_fee.c b/src/lib/exchange_api_management_set_wire_fee.c index 6048bf65..075dbbbb 100644 --- a/src/lib/exchange_api_management_set_wire_fee.c +++ b/src/lib/exchange_api_management_set_wire_fee.c @@ -1,6 +1,6 @@  /*    This file is part of TALER -  Copyright (C) 2020 Taler Systems SA +  Copyright (C) 2020-2021 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 @@ -152,27 +152,21 @@ TALER_EXCHANGE_management_set_wire_fees (      GNUNET_free (swfh);      return NULL;    } -  body = json_pack ("{s:s, s:o, s:o, s:o, s:o, s:o}", -                    "wire_method", -                    wire_method, -                    "master_sig", -                    GNUNET_JSON_from_data_auto (master_sig), -                    "fee_start", -                    GNUNET_JSON_from_time_abs (validity_start), -                    "fee_end", -                    GNUNET_JSON_from_time_abs (validity_end), -                    "closing_fee", -                    TALER_JSON_from_amount (closing_fee), -                    "wire_fee", -                    TALER_JSON_from_amount (wire_fee)); -  if (NULL == body) -  { -    GNUNET_break (0); -    GNUNET_free (swfh->url); -    GNUNET_free (swfh); -    return NULL; -  } +  body = GNUNET_JSON_PACK ( +    GNUNET_JSON_pack_string ("wire_method", +                             wire_method), +    GNUNET_JSON_pack_data_auto ("master_sig", +                                master_sig), +    GNUNET_JSON_pack_time_abs ("fee_start", +                               validity_start), +    GNUNET_JSON_pack_time_abs ("fee_end", +                               validity_end), +    TALER_JSON_pack_amount ("closing_fee", +                            closing_fee), +    TALER_JSON_pack_amount ("wire_fee", +                            wire_fee));    eh = curl_easy_init (); +  GNUNET_assert (NULL != eh);    if (GNUNET_OK !=        TALER_curl_easy_post (&swfh->post_ctx,                              eh, diff --git a/src/lib/exchange_api_management_wire_disable.c b/src/lib/exchange_api_management_wire_disable.c index 613358fd..fbc6626a 100644 --- a/src/lib/exchange_api_management_wire_disable.c +++ b/src/lib/exchange_api_management_wire_disable.c @@ -1,6 +1,6 @@  /*    This file is part of TALER -  Copyright (C) 2015-2020 Taler Systems SA +  Copyright (C) 2015-2021 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 @@ -154,21 +154,15 @@ TALER_EXCHANGE_management_disable_wire (      GNUNET_free (wh);      return NULL;    } -  body = json_pack ("{s:s, s:o, s:o}", -                    "payto_uri", -                    payto_uri, -                    "master_sig_del", -                    GNUNET_JSON_from_data_auto (master_sig), -                    "validity_end", -                    GNUNET_JSON_from_time_abs (validity_end)); -  if (NULL == body) -  { -    GNUNET_break (0); -    GNUNET_free (wh->url); -    GNUNET_free (wh); -    return NULL; -  } +  body = GNUNET_JSON_PACK ( +    GNUNET_JSON_pack_string ("payto_uri", +                             payto_uri), +    GNUNET_JSON_pack_data_auto ("master_sig_del", +                                master_sig), +    GNUNET_JSON_pack_time_abs ("validity_end", +                               validity_end));    eh = curl_easy_init (); +  GNUNET_assert (NULL != eh);    if (GNUNET_OK !=        TALER_curl_easy_post (&wh->post_ctx,                              eh, diff --git a/src/lib/exchange_api_management_wire_enable.c b/src/lib/exchange_api_management_wire_enable.c index a4576296..43eb2ce9 100644 --- a/src/lib/exchange_api_management_wire_enable.c +++ b/src/lib/exchange_api_management_wire_enable.c @@ -1,6 +1,6 @@  /*    This file is part of TALER -  Copyright (C) 2015-2020 Taler Systems SA +  Copyright (C) 2015-2021 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 @@ -151,23 +151,17 @@ TALER_EXCHANGE_management_enable_wire (      GNUNET_free (wh);      return NULL;    } -  body = json_pack ("{s:s, s:o, s:o, s:o}", -                    "payto_uri", -                    payto_uri, -                    "master_sig_add", -                    GNUNET_JSON_from_data_auto (master_sig1), -                    "master_sig_wire", -                    GNUNET_JSON_from_data_auto (master_sig2), -                    "validity_start", -                    GNUNET_JSON_from_time_abs (validity_start)); -  if (NULL == body) -  { -    GNUNET_break (0); -    GNUNET_free (wh->url); -    GNUNET_free (wh); -    return NULL; -  } +  body = GNUNET_JSON_PACK ( +    GNUNET_JSON_pack_string ("payto_uri", +                             payto_uri), +    GNUNET_JSON_pack_data_auto ("master_sig_add", +                                master_sig1), +    GNUNET_JSON_pack_data_auto ("master_sig_wire", +                                master_sig2), +    GNUNET_JSON_pack_time_abs ("validity_start", +                               validity_start));    eh = curl_easy_init (); +  GNUNET_assert (NULL != eh);    if (GNUNET_OK !=        TALER_curl_easy_post (&wh->post_ctx,                              eh, diff --git a/src/lib/exchange_api_melt.c b/src/lib/exchange_api_melt.c index 1f369c11..dcee66a8 100644 --- a/src/lib/exchange_api_melt.c +++ b/src/lib/exchange_api_melt.c @@ -1,6 +1,6 @@  /*    This file is part of TALER -  Copyright (C) 2015-2020 Taler Systems SA +  Copyright (C) 2015-2021 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 @@ -449,26 +449,6 @@ handle_melt_finished (void *cls,  } -/** - * Submit a melt request to the exchange and get the exchange's - * response. - * - * This API is typically used by a wallet.  Note that to ensure that - * no money is lost in case of hardware failures, the provided - * argument should have been constructed using - * #TALER_EXCHANGE_refresh_prepare and committed to persistent storage - * prior to calling this function. - * - * @param exchange the exchange handle; the exchange must be ready to operate - * @param refresh_data_length size of the @a refresh_data (returned - *        in the `res_size` argument from #TALER_EXCHANGE_refresh_prepare()) - * @param refresh_data the refresh data as returned from -          #TALER_EXCHANGE_refresh_prepare()) - * @param melt_cb the callback to call with the result - * @param melt_cb_cls closure for @a melt_cb - * @return a handle for this request; NULL if the argument was invalid. - *         In this case, neither callback will be called. - */  struct TALER_EXCHANGE_MeltHandle *  TALER_EXCHANGE_melt (struct TALER_EXCHANGE_Handle *exchange,                       size_t refresh_data_length, @@ -511,27 +491,19 @@ TALER_EXCHANGE_melt (struct TALER_EXCHANGE_Handle *exchange,    GNUNET_CRYPTO_eddsa_sign (&md->melted_coin.coin_priv.eddsa_priv,                              &melt,                              &confirm_sig.eddsa_signature); -  melt_obj = json_pack ("{s:o, s:o, s:o, s:o, s:o, s:o}", -                        "coin_pub", -                        GNUNET_JSON_from_data_auto (&melt.coin_pub), -                        "denom_pub_hash", -                        GNUNET_JSON_from_data_auto (&melt.h_denom_pub), -                        "denom_sig", -                        GNUNET_JSON_from_rsa_signature ( -                          md->melted_coin.sig.rsa_signature), -                        "confirm_sig", -                        GNUNET_JSON_from_data_auto (&confirm_sig), -                        "value_with_fee", -                        TALER_JSON_from_amount ( -                          &md->melted_coin.melt_amount_with_fee), -                        "rc", -                        GNUNET_JSON_from_data_auto (&melt.rc)); -  if (NULL == melt_obj) -  { -    GNUNET_break (0); -    TALER_EXCHANGE_free_melt_data_ (md); -    return NULL; -  } +  melt_obj = GNUNET_JSON_PACK ( +    GNUNET_JSON_pack_data_auto ("coin_pub", +                                &melt.coin_pub), +    GNUNET_JSON_pack_data_auto ("denom_pub_hash", +                                &melt.h_denom_pub), +    TALER_JSON_pack_denomination_signature ("denom_sig", +                                            &md->melted_coin.sig), +    GNUNET_JSON_pack_data_auto ("confirm_sig", +                                &confirm_sig), +    TALER_JSON_pack_amount ("value_with_fee", +                            &md->melted_coin.melt_amount_with_fee), +    GNUNET_JSON_pack_data_auto ("rc", +                                &melt.rc));    {      char pub_str[sizeof (struct TALER_CoinSpendPublicKeyP) * 2];      char *end; @@ -596,12 +568,6 @@ TALER_EXCHANGE_melt (struct TALER_EXCHANGE_Handle *exchange,  } -/** - * Cancel a melt request.  This function cannot be used - * on a request handle if either callback was already invoked. - * - * @param mh the refresh melt handle - */  void  TALER_EXCHANGE_melt_cancel (struct TALER_EXCHANGE_MeltHandle *mh)  { diff --git a/src/lib/exchange_api_recoup.c b/src/lib/exchange_api_recoup.c index e4093a01..09d99b23 100644 --- a/src/lib/exchange_api_recoup.c +++ b/src/lib/exchange_api_recoup.c @@ -1,6 +1,6 @@  /*    This file is part of TALER -  Copyright (C) 2017-2020 Taler Systems SA +  Copyright (C) 2017-2021 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 @@ -300,28 +300,12 @@ handle_recoup_finished (void *cls,  } -/** - * Ask the exchange to pay back a coin due to the exchange triggering - * the emergency recoup protocol for a given denomination.  The value - * of the coin will be refunded to the original customer (without fees). - * - * @param exchange the exchange handle; the exchange must be ready to operate - * @param pk kind of coin to pay back - * @param denom_sig signature over the coin by the exchange using @a pk - * @param ps secret internals of the original planchet - * @param was_refreshed #GNUNET_YES if the coin in @a ps was refreshed - * @param recoup_cb the callback to call when the final result for this request is available - * @param recoup_cb_cls closure for @a recoup_cb - * @return NULL - *         if the inputs are invalid (i.e. denomination key not with this exchange). - *         In this case, the callback is not called. - */  struct TALER_EXCHANGE_RecoupHandle *  TALER_EXCHANGE_recoup (struct TALER_EXCHANGE_Handle *exchange,                         const struct TALER_EXCHANGE_DenomPublicKey *pk,                         const struct TALER_DenominationSignature *denom_sig,                         const struct TALER_PlanchetSecretsP *ps, -                       int was_refreshed, +                       bool was_refreshed,                         TALER_EXCHANGE_RecoupResultCallback recoup_cb,                         void *recoup_cb_cls)  { @@ -347,24 +331,17 @@ TALER_EXCHANGE_recoup (struct TALER_EXCHANGE_Handle *exchange,    GNUNET_CRYPTO_eddsa_sign (&ps->coin_priv.eddsa_priv,                              &pr,                              &coin_sig.eddsa_signature); -  recoup_obj = json_pack ("{s:o, s:o," /* denom pub/sig */ -                          " s:o,"  /* sig */ -                          " s:o, s:o}",  /* coin_bks */ -                          "denom_pub_hash", GNUNET_JSON_from_data_auto ( -                            &h_denom_pub), -                          "denom_sig", GNUNET_JSON_from_rsa_signature ( -                            denom_sig->rsa_signature), -                          "coin_sig", GNUNET_JSON_from_data_auto (&coin_sig), -                          "coin_blind_key_secret", GNUNET_JSON_from_data_auto ( -                            &ps->blinding_key), -                          "refreshed", json_boolean (was_refreshed) -                          ); -  if (NULL == recoup_obj) -  { -    GNUNET_break (0); -    return NULL; -  } - +  recoup_obj = GNUNET_JSON_PACK ( +    GNUNET_JSON_pack_data_auto ("denom_pub_hash", +                                &h_denom_pub), +    TALER_JSON_pack_denomination_signature ("denom_sig", +                                            denom_sig), +    GNUNET_JSON_pack_data_auto ("coin_sig", +                                &coin_sig), +    GNUNET_JSON_pack_data_auto ("coin_blind_key_secret", +                                &ps->blinding_key), +    GNUNET_JSON_pack_bool ("refreshed", +                           was_refreshed));    {      char pub_str[sizeof (struct TALER_CoinSpendPublicKeyP) * 2];      char *end; @@ -426,12 +403,6 @@ TALER_EXCHANGE_recoup (struct TALER_EXCHANGE_Handle *exchange,  } -/** - * Cancel a recoup request.  This function cannot be used on a - * request handle if the callback was already invoked. - * - * @param ph the recoup handle - */  void  TALER_EXCHANGE_recoup_cancel (struct TALER_EXCHANGE_RecoupHandle *ph)  { diff --git a/src/lib/exchange_api_refreshes_reveal.c b/src/lib/exchange_api_refreshes_reveal.c index d0ca605a..f54487ae 100644 --- a/src/lib/exchange_api_refreshes_reveal.c +++ b/src/lib/exchange_api_refreshes_reveal.c @@ -1,6 +1,6 @@  /*    This file is part of TALER -  Copyright (C) 2015-2020 Taler Systems SA +  Copyright (C) 2015-2021 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 @@ -287,28 +287,6 @@ handle_refresh_reveal_finished (void *cls,  } -/** - * Submit a /refresh/reval request to the exchange and get the exchange's - * response. - * - * This API is typically used by a wallet.  Note that to ensure that - * no money is lost in case of hardware failures, the provided - * arguments should have been committed to persistent storage - * prior to calling this function. - * - * @param exchange the exchange handle; the exchange must be ready to operate - * @param refresh_data_length size of the @a refresh_data (returned - *        in the `res_size` argument from #TALER_EXCHANGE_refresh_prepare()) - * @param refresh_data the refresh data as returned from -          #TALER_EXCHANGE_refresh_prepare()) - * @param noreveal_index response from the exchange to the - *        #TALER_EXCHANGE_melt() invocation - * @param reveal_cb the callback to call with the final result of the - *        refresh operation - * @param reveal_cb_cls closure for the above callback - * @return a handle for this request; NULL if the argument was invalid. - *         In this case, neither callback will be called. - */  struct TALER_EXCHANGE_RefreshesRevealHandle *  TALER_EXCHANGE_refreshes_reveal (    struct TALER_EXCHANGE_Handle *exchange, @@ -425,23 +403,17 @@ TALER_EXCHANGE_refreshes_reveal (    }    /* build main JSON request */ -  reveal_obj = json_pack ("{s:o, s:o, s:o, s:o, s:o}", -                          "transfer_pub", -                          GNUNET_JSON_from_data_auto (&transfer_pub), -                          "transfer_privs", -                          transfer_privs, -                          "link_sigs", -                          link_sigs, -                          "new_denoms_h", -                          new_denoms_h, -                          "coin_evs", -                          coin_evs); -  if (NULL == reveal_obj) -  { -    GNUNET_break (0); -    return NULL; -  } - +  reveal_obj = GNUNET_JSON_PACK ( +    GNUNET_JSON_pack_data_auto ("transfer_pub", +                                &transfer_pub), +    GNUNET_JSON_pack_array_steal ("transfer_privs", +                                  transfer_privs), +    GNUNET_JSON_pack_array_steal ("link_sigs", +                                  link_sigs), +    GNUNET_JSON_pack_array_steal ("new_denoms_h", +                                  new_denoms_h), +    GNUNET_JSON_pack_array_steal ("coin_evs", +                                  coin_evs));    {      char pub_str[sizeof (struct TALER_RefreshCommitmentP) * 2];      char *end; @@ -498,12 +470,6 @@ TALER_EXCHANGE_refreshes_reveal (  } -/** - * Cancel a refresh reveal request.  This function cannot be used - * on a request handle if the callback was already invoked. - * - * @param rrh the refresh reval handle - */  void  TALER_EXCHANGE_refreshes_reveal_cancel (    struct TALER_EXCHANGE_RefreshesRevealHandle *rrh) diff --git a/src/lib/exchange_api_refund.c b/src/lib/exchange_api_refund.c index 2ac612db..f83a2985 100644 --- a/src/lib/exchange_api_refund.c +++ b/src/lib/exchange_api_refund.c @@ -1,6 +1,6 @@  /*    This file is part of TALER -  Copyright (C) 2014-2020 Taler Systems SA +  Copyright (C) 2014-2021 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 @@ -635,35 +635,6 @@ handle_refund_finished (void *cls,  } -/** - * Submit a refund request to the exchange and get the exchange's - * response.  This API is used by a merchant.  Note that - * while we return the response verbatim to the caller for further - * processing, we do already verify that the response is well-formed - * (i.e. that signatures included in the response are all valid).  If - * the exchange's reply is not well-formed, we return an HTTP status code - * of zero to @a cb. - * - * The @a exchange must be ready to operate (i.e.  have - * finished processing the /keys reply).  If this check fails, we do - * NOT initiate the transaction with the exchange and instead return NULL. - * - * @param exchange the exchange handle; the exchange must be ready to operate - * @param amount the amount to be refunded; must be larger than the refund fee - *        (as that fee is still being subtracted), and smaller than the amount - *        (with deposit fee) of the original deposit contribution of this coin - * @param h_contract_terms hash of the contact of the merchant with the customer that is being refunded - * @param coin_pub coin’s public key of the coin from the original deposit operation - * @param rtransaction_id transaction id for the transaction between merchant and customer (of refunding operation); - *                        this is needed as we may first do a partial refund and later a full refund.  If both - *                        refunds are also over the same amount, we need the @a rtransaction_id to make the disjoint - *                        refund requests different (as requests are idempotent and otherwise the 2nd refund might not work). - * @param merchant_priv the private key of the merchant, used to generate signature for refund request - * @param cb the callback to call when a reply for this request is available - * @param cb_cls closure for the above callback - * @return a handle for this request; NULL if the inputs are invalid (i.e. - *         signatures fail to verify).  In this case, the callback is not called. - */  struct TALER_EXCHANGE_RefundHandle *  TALER_EXCHANGE_refund (struct TALER_EXCHANGE_Handle *exchange,                         const struct TALER_Amount *amount, @@ -714,25 +685,17 @@ TALER_EXCHANGE_refund (struct TALER_EXCHANGE_Handle *exchange,                       "/coins/%s/refund",                       pub_str);    } -  refund_obj = json_pack ("{s:o," /* amount */ -                          " s:o," /* h_contract_terms */ -                          " s:I," /* rtransaction id */ -                          " s:o, s:o}", /* merchant_pub, merchant_sig */ -                          "refund_amount", TALER_JSON_from_amount (amount), -                          "h_contract_terms", GNUNET_JSON_from_data_auto ( -                            h_contract_terms), -                          "rtransaction_id", (json_int_t) rtransaction_id, -                          "merchant_pub", GNUNET_JSON_from_data_auto ( -                            &rr.merchant), -                          "merchant_sig", GNUNET_JSON_from_data_auto ( -                            &merchant_sig) -                          ); -  if (NULL == refund_obj) -  { -    GNUNET_break (0); -    return NULL; -  } - +  refund_obj = GNUNET_JSON_PACK ( +    TALER_JSON_pack_amount ("refund_amount", +                            amount), +    GNUNET_JSON_pack_data_auto ("h_contract_terms", +                                h_contract_terms), +    GNUNET_JSON_pack_uint64 ("rtransaction_id", +                             rtransaction_id), +    GNUNET_JSON_pack_data_auto ("merchant_pub", +                                &rr.merchant), +    GNUNET_JSON_pack_data_auto ("merchant_sig", +                                &merchant_sig));    rh = GNUNET_new (struct TALER_EXCHANGE_RefundHandle);    rh->exchange = exchange;    rh->cb = cb; @@ -783,12 +746,6 @@ TALER_EXCHANGE_refund (struct TALER_EXCHANGE_Handle *exchange,  } -/** - * Cancel a refund permission request.  This function cannot be used - * on a request handle if a response is already served for it. - * - * @param refund the refund permission request handle - */  void  TALER_EXCHANGE_refund_cancel (struct TALER_EXCHANGE_RefundHandle *refund)  { diff --git a/src/lib/exchange_api_withdraw2.c b/src/lib/exchange_api_withdraw2.c index 6adf8552..c8a95968 100644 --- a/src/lib/exchange_api_withdraw2.c +++ b/src/lib/exchange_api_withdraw2.c @@ -1,6 +1,6 @@  /*    This file is part of TALER -  Copyright (C) 2014-2020 Taler Systems SA +  Copyright (C) 2014-2021 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 @@ -344,25 +344,6 @@ handle_reserve_withdraw_finished (void *cls,  } -/** - * Withdraw a coin from the exchange using a /reserve/withdraw - * request.  This API is typically used by a wallet to withdraw a tip - * where the reserve's signature was created by the merchant already. - * - * Note that to ensure that no money is lost in case of hardware - * failures, the caller must have committed (most of) the arguments to - * disk before calling, and be ready to repeat the request with the - * same arguments in case of failures. - * - * @param exchange the exchange handle; the exchange must be ready to operate - * @param pd planchet details of the planchet to withdraw - * @param reserve_priv private key of the reserve to withdraw from - * @param res_cb the callback to call when the final result for this request is available - * @param res_cb_cls closure for @a res_cb - * @return NULL - *         if the inputs are invalid (i.e. denomination key not with this exchange). - *         In this case, the callback is not called. - */  struct TALER_EXCHANGE_Withdraw2Handle *  TALER_EXCHANGE_withdraw2 (    struct TALER_EXCHANGE_Handle *exchange, @@ -445,20 +426,14 @@ TALER_EXCHANGE_withdraw2 (    {      json_t *withdraw_obj; -    withdraw_obj = json_pack ("{s:o, s:o, s:o}", -                              "denom_pub_hash", -                              GNUNET_JSON_from_data_auto (&pd->denom_pub_hash), -                              "coin_ev", -                              GNUNET_JSON_from_data (pd->coin_ev, -                                                     pd->coin_ev_size), -                              "reserve_sig", -                              GNUNET_JSON_from_data_auto (&reserve_sig)); -    if (NULL == withdraw_obj) -    { -      GNUNET_break (0); -      GNUNET_free (wh); -      return NULL; -    } +    withdraw_obj = GNUNET_JSON_PACK ( +      GNUNET_JSON_pack_data_auto ("denom_pub_hash", +                                  &pd->denom_pub_hash), +      GNUNET_JSON_pack_data_varsize ("coin_ev", +                                     pd->coin_ev, +                                     pd->coin_ev_size), +      GNUNET_JSON_pack_data_auto ("reserve_sig", +                                  &reserve_sig));      GNUNET_log (GNUNET_ERROR_TYPE_INFO,                  "Attempting to withdraw from reserve %s\n",                  TALER_B2S (&wh->reserve_pub)); @@ -502,12 +477,6 @@ TALER_EXCHANGE_withdraw2 (  } -/** - * Cancel a withdraw status request.  This function cannot be used - * on a request handle if a response is already served for it. - * - * @param wh the withdraw sign request handle - */  void  TALER_EXCHANGE_withdraw2_cancel (struct TALER_EXCHANGE_Withdraw2Handle *wh)  { | 
