donau

Donation authority for GNU Taler (experimental)
Log | Files | Refs | Submodules | README | LICENSE

commit d02801a9e19b9376bd05ac4625f5da4932f34557
parent d6285f915cda8b6f98cd720e8c4f43487e9fae5d
Author: Matyja Lukas Adam <lukas.matyja@students.bfh.ch>
Date:   Sun, 22 Oct 2023 21:39:51 +0200

[header] adjust comments and some deletions

Diffstat:
Msrc/include/taler_donau_crypto_lib.h | 1+
Msrc/include/taler_donau_service.h | 1341++++---------------------------------------------------------------------------
Msrc/include/taler_donau_util.h | 1+
3 files changed, 56 insertions(+), 1287 deletions(-)

diff --git a/src/include/taler_donau_crypto_lib.h b/src/include/taler_donau_crypto_lib.h @@ -19,6 +19,7 @@ * @author Sree Harsha Totakura <sreeharsha@totakura.in> * @author Christian Grothoff <christian@grothoff.org> * @author Özgür Kesim <oec-taler@kesim.org> + * @author Lukas Matyja */ #if ! defined (__TALER_DONAU_UTIL_LIB_H_INSIDE__) #error "Only <taler_donau_util.h> can be included directly." diff --git a/src/include/taler_donau_service.h b/src/include/taler_donau_service.h @@ -26,6 +26,7 @@ #include <jansson.h> #include "taler_util.h" +#include "taler_donau_util.h" #include "taler_error_codes.h" #include "taler_kyclogic_lib.h" #include <gnunet/gnunet_curl_lib.h> @@ -588,15 +589,13 @@ typedef void * included in the response are all valid). If the donau's reply is not * well-formed, we return an HTTP status code of zero to @a cb. * - * We also verify that the @a bdr.coin_sig are valid for this - * request, and that the @a bdr.ub_sig are a valid signatures for @a - * coin_pub. Also, the @a donau must be ready to operate (i.e. have - * finished processing the /keys reply). If either check fails, we do - * NOT initiate the transaction with the donau and instead return NULL. + * We also verify that the signature of the charity is valid for this + * request. Also, the donau must be ready to operate (i.e. have + * finished processing the /keys reply). If either check fails, we do + * NOT initiate the receipts with the donau and instead return NULL. * * @param ctx curl context * @param url donau base URL - * @param keys donau keys * @param charity_priv details about the contract the is for * @param num_bdids length of the @a bdid array * @param bdid array with details about the blinded donation envelopes @@ -610,7 +609,6 @@ struct TALER_DONAU_BatchIssueReceiptHandle * TALER_DONAU_charity_issue_receipt ( struct GNUNET_CURL_Context *ctx, const char *url, - struct TALER_DONAU_Keys *keys, const struct TALER_DONAU_CharityPrivateKey *charity_priv, unsigned int num_bdids, const struct TALER_DONAU_BlindedUniqueDonationIdentifier bdid[static num_bdids], @@ -663,7 +661,7 @@ struct TALER_DONAU_DonationReceipt }; /** - * @brief A Batch Submit Handle + * @brief A Batch Submit recipts Handle */ struct TALER_DONAU_DonorReceiptsToStatementHandle; @@ -722,6 +720,30 @@ typedef void void *cls, const struct TALER_DONAU_DonorReceiptsToStatementResult *dr); + +/** + * Submit a batch of receipts to the donau and get the + * donau's response. This API is typically used by a donor. 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 donau's reply is not + * well-formed, we return an HTTP status code of zero to @a cb. + * + * We also verify that the signature of the charity is valid for this + * request. Also, the @a donau must be ready to operate (i.e. have + * finished processing the /keys reply). If either check fails, we do + * NOT initiate the receipts with the donau and instead return NULL. + * + * @param ctx curl context + * @param url donau base URL + * @param num_drs length of the @a drs array + * @param drs array with details about the donation receipts + * @param cb the callback to call when a reply for this request is available + * @param cls closure for the above callback + * @param[out] ec if NULL is returned, set to the error code explaining why the operation failed + * @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_DONAU_DonorReceiptsToStatementHandle * TALER_DONAU_donor_receipts_to_statement ( struct GNUNET_CURL_Context *ctx, @@ -732,10 +754,10 @@ TALER_DONAU_donor_receipts_to_statement ( void *cls); /** - * Cancel a batch permission request. This function cannot be used + * Cancel a batch permission request. This function cannot be used * on a request handle if a response is already served for it. * - * @param[in] the deposit permission request handle + * @param[in] the Batch Submit recipts handle */ void TALER_DONAU_donor_receipts_to_statement_cancel ( @@ -743,7 +765,6 @@ TALER_DONAU_donor_receipts_to_statement_cancel ( - /* ********************* POST /csr batch-issue *********************** */ @@ -1104,7 +1125,7 @@ TALER_DONAU_charity_get ( /** - * Cancel a charity GET request. This function cannot be used + * Cancel a charity GET request. This function cannot be used * on a request handle if a response is already served for it. * * @param rgh the charity request handle @@ -1201,6 +1222,16 @@ TALER_DONAU_charity_post ( TALER_DONAU_PostCharityResponseCallback cb, void *cb_cls); +/** + * Cancel a charity Post request. This function cannot be used + * on a request handle if a response is already served for it. + * + * @param rgh the charity post handle + */ +void +TALER_DONAU_charity_post_cancel ( + struct TALER_DONAU_charityPostHandle *rgh); + /* ********************* PATCH /charities/$CHARITY_ID *********************** */ /** @@ -1265,6 +1296,16 @@ TALER_DONAU_charity_patch ( TALER_DONAU_PatchCharityResponseCallback cb, void *cb_cls); +/** + * Cancel a charity Patch request. This function cannot be used + * on a request handle if a response is already served for it. + * + * @param rgh the charity patch handle + */ +void +TALER_DONAU_charity_patch_cancel ( + struct TALER_DONAU_charityPatchHandle *rgh); + /* ********************* DELETE /charities/$CHARITY_ID *********************** */ @@ -1328,7 +1369,7 @@ TALER_DONAU_charity_delete ( void *cb_cls); /** - * Cancel a charity POST request. This function cannot be used + * Cancel a charity Delete request. This function cannot be used * on a request handle if a response is already served for it. * * @param rgh the charity request handle @@ -1336,1277 +1377,3 @@ TALER_DONAU_charity_delete ( void TALER_DONAU_charity_post_delete ( struct TALER_DONAU_CharityDeleteHandle *rgh); - - - - - - -/** - * Cancel #TALER_DONAU_management_enable_wire() operation. - * - * @param sgfh handle of the operation to cancel - */ -void -TALER_DONAU_management_set_global_fees_cancel ( - struct TALER_DONAU_ManagementSetGlobalFeeHandle *sgfh); - - -/** - * Response when addingdonation unit signature by auditor. - */ -struct TALER_DONAU_AuditorAddDonationUnitResponse -{ - /** - * HTTP response data. - */ - struct TALER_DONAU_HttpResponse hr; -}; - - -/** - * Function called with information about the POST - * /auditor/$AUDITOR_PUB/$H_DENOM_PUB operation result. - * - * @param cls closure - * @param adr HTTP response data - */ -typedef void -(*TALER_DONAU_AuditorAddDonationUnitCallback) ( - void *cls, - const struct TALER_DONAU_AuditorAddDonationUnitResponse *adr); - - -/** - * @brief Handle for a POST /auditor/$AUDITOR_PUB/$H_DENOM_PUB request. - */ -struct TALER_DONAU_AuditorAddDonationUnitHandle; - - -/** - * Provide auditor signatures for adonation unit to the donau. - * - * @param ctx the context - * @param url HTTP base URL for the donau - * @param h_donation_unit_pub hash of the public key of thedonation unit - * @param auditor_pub public key of the auditor - * @param auditor_sig signature of the auditor, of - * purpose #TALER_SIGNATURE_AUDITOR_DONAU_KEYS - * @param cb function to call with the donau's result - * @param cb_cls closure for @a cb - * @return the request handle; NULL upon error - */ -struct TALER_DONAU_AuditorAddDonationUnitHandle * -TALER_DONAU_add_auditor_DonationUnit ( - struct GNUNET_CURL_Context *ctx, - const char *url, - const struct TALER_DonationUnitHashP *h_donation_unit_pub, - const struct TALER_AuditorPublicKeyP *auditor_pub, - const struct TALER_AuditorSignatureP *auditor_sig, - TALER_DONAU_AuditorAddDonationUnitCallback cb, - void *cb_cls); - - -/** - * Cancel #TALER_DONAU_add_auditor_DonationUnit() operation. - * - * @param ah handle of the operation to cancel - */ -void -TALER_DONAU_add_auditor_donation_unit_cancel ( - struct TALER_DONAU_AuditorAddDonationUnitHandle *ah); - - -/* ********************* W2W API ****************** */ - - -/** - * Response generated for a contract get request. - */ -struct TALER_DONAU_ContractGetResponse -{ - /** - * Full HTTP response. - */ - struct TALER_DONAU_HttpResponse hr; - - /** - * Details depending on the HTTP status code. - */ - union - { - /** - * Information returned on #MHD_HTTP_OK. - */ - struct - { - - /** - * Public key of the purse. - */ - struct TALER_PurseContractPublicKeyP purse_pub; - - /** - * Encrypted contract. - */ - const void *econtract; - - /** - * Number of bytes in @e econtract. - */ - size_t econtract_size; - - } ok; - - } details; - -}; - -/** - * Function called with information about the a purse. - * - * @param cls closure - * @param cgr HTTP response data - */ -typedef void -(*TALER_DONAU_ContractGetCallback) ( - void *cls, - const struct TALER_DONAU_ContractGetResponse *cgr); - - -/** - * @brief Handle for a GET /contracts/$CPUB request. - */ -struct TALER_DONAU_ContractsGetHandle; - - -/** - * Request information about a contract from the donau. - * - * @param ctx CURL context - * @param url donau base URL - * @param contract_priv private key of the contract - * @param cb function to call with the donau's result - * @param cb_cls closure for @a cb - * @return the request handle; NULL upon error - */ -struct TALER_DONAU_ContractsGetHandle * -TALER_DONAU_contract_get ( - struct GNUNET_CURL_Context *ctx, - const char *url, - const struct TALER_ContractDiffiePrivateP *contract_priv, - TALER_DONAU_ContractGetCallback cb, - void *cb_cls); - - -/** - * Cancel #TALER_DONAU_contract_get() operation. - * - * @param cgh handle of the operation to cancel - */ -void -TALER_DONAU_contract_get_cancel ( - struct TALER_DONAU_ContractsGetHandle *cgh); - - -/** - * Response generated for a purse get request. - */ -struct TALER_DONAU_PurseGetResponse -{ - /** - * Full HTTP response. - */ - struct TALER_DONAU_HttpResponse hr; - - /** - * Details depending on the HTTP status. - */ - union - { - /** - * Response on #MHD_HTTP_OK. - */ - struct - { - - /** - * Time when the purse was merged (or zero if it - * was not merged). - */ - struct GNUNET_TIME_Timestamp merge_timestamp; - - /** - * Time when the full amount was ed into - * the purse (or zero if a sufficient amount - * was not yet ed). - */ - struct GNUNET_TIME_Timestamp _timestamp; - - /** - * charity balance (how much was ed in - * total into the charity, minus fees). - */ - struct TALER_Amount balance; - - /** - * Time when the purse will expire. - */ - struct GNUNET_TIME_Timestamp purse_expiration; - - } ok; - - } details; - -}; - - -/** - * Function called with information about the a purse. - * - * @param cls closure - * @param pgr HTTP response data - */ -typedef void -(*TALER_DONAU_PurseGetCallback) ( - void *cls, - const struct TALER_DONAU_PurseGetResponse *pgr); - - -/** - * @brief Handle for a GET /purses/$PPUB request. - */ -struct TALER_DONAU_PurseGetHandle; - - -/** - * Request information about a purse from the donau. - * - * @param ctx curl context - * @param url donau base URL - * @param keys donau keys - * @param purse_pub public key of the purse - * @param timeout how long to wait for a change to happen - * @param wait_for_merge true to wait for a merge event, otherwise wait for a event - * @param cb function to call with the donau's result - * @param cb_cls closure for @a cb - * @return the request handle; NULL upon error - */ -struct TALER_DONAU_PurseGetHandle * -TALER_DONAU_purse_get ( - struct GNUNET_CURL_Context *ctx, - const char *url, - struct TALER_DONAU_Keys *keys, - const struct TALER_PurseContractPublicKeyP *purse_pub, - struct GNUNET_TIME_Relative timeout, - bool wait_for_merge, - TALER_DONAU_PurseGetCallback cb, - void *cb_cls); - - -/** - * Cancel #TALER_DONAU_purse_get() operation. - * - * @param pgh handle of the operation to cancel - */ -void -TALER_DONAU_purse_get_cancel ( - struct TALER_DONAU_PurseGetHandle *pgh); - - -/** - * Response generated for a purse creation request. - */ -struct TALER_DONAU_PurseCreateSubmitResponse -{ - /** - * Full HTTP response. - */ - struct TALER_DONAU_HttpResponse hr; - - /** - * Details depending on the HTTP status. - */ - union - { - - /** - * Detailed returned on #MHD_HTTP_OK. - */ - struct - { - /** - * Signing key used by the donau to sign the - * purse create with confirmation. - */ - struct TALER_DONAU_EddsaPublicKeyP donau_pub; - - /** - * Signature from the donau on the - * purse create with confirmation. - */ - struct TALER_DonauSignatureP donau_sig; - - - } ok; - - } details; - -}; - -/** - * Function called with information about the creation - * of a new purse. - * - * @param cls closure - * @param pcr HTTP response data - */ -typedef void -(*TALER_DONAU_PurseCreateSubmitCallback) ( - void *cls, - const struct TALER_DONAU_PurseCreateSubmitResponse *pcr); - - -/** - * @brief Handle for a POST /purses/$PID/create request. - */ -struct TALER_DONAU_PurseCreateSubmitHandle; - - -/** - * Information about a coin to be ed into a purse or charity. - */ -struct TALER_DONAU_PurseSubmit -{ - /** - * Age commitment data, might be NULL. - */ - const struct TALER_AgeCommitmentProof *age_commitment_proof; - - /** - * Private key of the coin. - */ - struct TALER_CoinSpendPrivateKeyP coin_priv; - - /** - * Signature proving the validity of the coin. - */ - struct TALER_DonationUnitSignature donation_unit_sig; - - /** - * Hash of thedonation unit's public key. - */ - struct TALER_DonationUnitHashP h_donation_unit_pub; - - /** - * Amount of the coin to transfer into the purse. - */ - struct TALER_Amount amount; - -}; - - -/** - * Inform the donau that a purse should be created - * and coins ed into it. - * - * @param ctx curl context - * @param url donau base URL - * @param keys donau keys - * @param purse_priv private key of the purse - * @param merge_priv the merge credential - * @param contract_priv key needed to obtain and decrypt the contract - * @param contract_terms contract the purse is about - * @param num_s length of the @a deposits array - * @param s array of deposits to make into the purse - * @param upload_contract true to upload the contract; must - * be FALSE for repeated calls to this API for the - * same purse (i.e. when adding more s). - * @param cb function to call with the donau's result - * @param cb_cls closure for @a cb - * @return the request handle; NULL upon error - */ -struct TALER_DONAU_PurseCreateSubmitHandle * -TALER_DONAU_purse_create_with_ ( - struct GNUNET_CURL_Context *ctx, - const char *url, - struct TALER_DONAU_Keys *keys, - const struct TALER_PurseContractPrivateKeyP *purse_priv, - const struct TALER_PurseMergePrivateKeyP *merge_priv, - const struct TALER_ContractDiffiePrivateP *contract_priv, - const json_t *contract_terms, - unsigned int num_s, - const struct TALER_DONAU_PurseSubmit s[static num_deposits], - bool upload_contract, - TALER_DONAU_PurseCreateSubmitCallback cb, - void *cb_cls); - - -/** - * Cancel #TALER_DONAU_purse_create_with_() operation. - * - * @param pch handle of the operation to cancel - */ -void -TALER_DONAU_purse_create_with__cancel ( - struct TALER_DONAU_PurseCreateSubmitHandle *pch); - - -/** - * Response generated for a purse deletion request. - */ -struct TALER_DONAU_PurseDeleteResponse -{ - /** - * Full HTTP response. - */ - struct TALER_DONAU_HttpResponse hr; -}; - - -/** - * Function called with information about the deletion - * of a purse. - * - * @param cls closure - * @param pdr HTTP response data - */ -typedef void -(*TALER_DONAU_PurseDeleteCallback) ( - void *cls, - const struct TALER_DONAU_PurseDeleteResponse *pdr); - - -/** - * @brief Handle for a DELETE /purses/$PID request. - */ -struct TALER_DONAU_PurseDeleteHandle; - - -/** - * Asks the donau to delete a purse. Will only succeed if - * the purse was not yet merged and did not yet time out. - * - * @param ctx CURL context - * @param url donau base URL - * @param purse_priv private key of the purse - * @param cb function to call with the donau's result - * @param cb_cls closure for @a cb - * @return the request handle; NULL upon error - */ -struct TALER_DONAU_PurseDeleteHandle * -TALER_DONAU_purse_delete ( - struct GNUNET_CURL_Context *ctx, - const char *url, - const struct TALER_PurseContractPrivateKeyP *purse_priv, - TALER_DONAU_PurseDeleteCallback cb, - void *cb_cls); - - -/** - * Cancel #TALER_DONAU_purse_delete() operation. - * - * @param pdh handle of the operation to cancel - */ -void -TALER_DONAU_purse_delete_cancel ( - struct TALER_DONAU_PurseDeleteHandle *pdh); - - -/** - * Response generated for an account merge request. - */ -struct TALER_DONAU_AccountMergeResponse -{ - /** - * Full HTTP response. - */ - struct TALER_DONAU_HttpResponse hr; - - /** - * charity signature affirming the merge. - */ - const struct TALER_charitySignatureP *charity_sig; - - /** - * Details depending on the HTTP status. - */ - union - { - /** - * Detailed returned on #MHD_HTTP_OK. - */ - struct - { - /** - * Signature by the donau affirming the merge. - */ - struct TALER_DonauSignatureP donau_sig; - - /** - * Online signing key used by the donau. - */ - struct TALER_DONAU_EddsaPublicKeyP donau_pub; - - /** - * Timestamp of the donau for @e donau_sig. - */ - struct GNUNET_TIME_Timestamp etime; - - } ok; - - /** - * Details if the status is #MHD_HTTP_UNAVAILABLE_FOR_LEGAL_REASONS. - */ - struct - { - /** - * Requirement row target that the charity should use - * to check for its KYC status. - */ - uint64_t requirement_row; - } unavailable_for_legal_reasons; - - } details; - -}; - -/** - * Function called with information about an account merge - * operation. - * - * @param cls closure - * @param amr HTTP response data - */ -typedef void -(*TALER_DONAU_AccountMergeCallback) ( - void *cls, - const struct TALER_DONAU_AccountMergeResponse *amr); - - -/** - * @brief Handle for a POST /purses/$PID/merge request. - */ -struct TALER_DONAU_AccountMergeHandle; - - -/** - * Inform the donau that a purse should be merged - * with a charity. - * - * @param ctx curl context - * @param url donau base URL - * @param keys donau keys - * @param charity_donau_url base URL of the donau with the charity - * @param charity_priv private key of the charity to merge into - * @param purse_pub public key of the purse to merge - * @param merge_priv private key granting us the right to merge - * @param h_contract_terms hash of the purses' contract - * @param min_age minimum age of s into the purse - * @param purse_value_after_fees amount that should be in the purse - * @param purse_expiration when will the purse expire - * @param merge_timestamp when is the merge happening (current time) - * @param cb function to call with the donau's result - * @param cb_cls closure for @a cb - * @return the request handle; NULL upon error - */ -struct TALER_DONAU_AccountMergeHandle * -TALER_DONAU_account_merge ( - struct GNUNET_CURL_Context *ctx, - const char *url, - struct TALER_DONAU_Keys *keys, - const char *charity_donau_url, - const struct TALER_charityPrivateKeyP *charity_priv, - const struct TALER_PurseContractPublicKeyP *purse_pub, - const struct TALER_PurseMergePrivateKeyP *merge_priv, - const struct TALER_PrivateContractHashP *h_contract_terms, - uint8_t min_age, - const struct TALER_Amount *purse_value_after_fees, - struct GNUNET_TIME_Timestamp purse_expiration, - struct GNUNET_TIME_Timestamp merge_timestamp, - TALER_DONAU_AccountMergeCallback cb, - void *cb_cls); - - -/** - * Cancel #TALER_DONAU_account_merge() operation. - * - * @param amh handle of the operation to cancel - */ -void -TALER_DONAU_account_merge_cancel ( - struct TALER_DONAU_AccountMergeHandle *amh); - - -/** - * Response generated for a purse creation request. - */ -struct TALER_DONAU_PurseCreateMergeResponse -{ - /** - * Full HTTP response. - */ - struct TALER_DONAU_HttpResponse hr; - - /** - * charity signature generated for the request - * (client-side). - */ - const struct TALER_charitySignatureP *charity_sig; - - /** - * Details depending on the HTTP status. - */ - union - { - /** - * Details returned on #MHD_HTTP_OK. - */ - struct - { - - } ok; - - /** - * Details if the status is #MHD_HTTP_UNAVAILABLE_FOR_LEGAL_REASONS. - */ - struct - { - /** - * Requirement row that the charity should use - * to check for its KYC status. - */ - uint64_t requirement_row; - } unavailable_for_legal_reasons; - - } details; - -}; - -/** - * Function called with information about the creation - * of a new purse. - * - * @param cls closure - * @param pcr HTTP response data - */ -typedef void -(*TALER_DONAU_PurseCreateMergeCallback) ( - void *cls, - const struct TALER_DONAU_PurseCreateMergeResponse *pcr); - - -/** - * @brief Handle for a POST /charitys/$RID/purse request. - */ -struct TALER_DONAU_PurseCreateMergeHandle; - - -/** - * Inform the donau that a purse should be created - * and merged with a charity. - * - * @param ctx curl context - * @param url donau base URL - * @param keys donau keys - * @param charity_priv private key of the charity - * @param purse_priv private key of the purse - * @param merge_priv private key of the merge capability - * @param contract_priv private key to get the contract - * @param contract_terms contract the purse is about - * @param upload_contract true to upload the contract - * @param pay_for_purse true to pay for purse creation - * @param merge_timestamp when should the merge happen (use current time) - * @param cb function to call with the donau's result - * @param cb_cls closure for @a cb - * @return the request handle; NULL upon error - */ -struct TALER_DONAU_PurseCreateMergeHandle * -TALER_DONAU_purse_create_with_merge ( - struct GNUNET_CURL_Context *ctx, - const char *url, - struct TALER_DONAU_Keys *keys, - const struct TALER_charityPrivateKeyP *charity_priv, - const struct TALER_PurseContractPrivateKeyP *purse_priv, - const struct TALER_PurseMergePrivateKeyP *merge_priv, - const struct TALER_ContractDiffiePrivateP *contract_priv, - const json_t *contract_terms, - bool upload_contract, - bool pay_for_purse, - struct GNUNET_TIME_Timestamp merge_timestamp, - TALER_DONAU_PurseCreateMergeCallback cb, - void *cb_cls); - - -/** - * Cancel #TALER_DONAU_purse_create_with_merge() operation. - * - * @param pcm handle of the operation to cancel - */ -void -TALER_DONAU_purse_create_with_merge_cancel ( - struct TALER_DONAU_PurseCreateMergeHandle *pcm); - - -/** - * Response generated for purse request. - */ -struct TALER_DONAU_PurseSubmitResponse -{ - /** - * Full HTTP response. - */ - struct TALER_DONAU_HttpResponse hr; - - /** - * Details depending on the HTTP status. - */ - union - { - /** - * Detailed returned on #MHD_HTTP_OK. - */ - struct - { - - /** - * When does the purse expire. - */ - struct GNUNET_TIME_Timestamp purse_expiration; - - /** - * How much was actually ed into the purse. - */ - struct TALER_Amount total_ed; - - /** - * How much should be in the purse in total in the end. - */ - struct TALER_Amount purse_value_after_fees; - - /** - * Hash of the contract (needed to verify signature). - */ - struct TALER_PrivateContractHashP h_contract_terms; - - } ok; - } details; - -}; - -/** - * Function called with information about a purse- - * operation. - * - * @param cls closure - * @param pdr HTTP response data - */ -typedef void -(*TALER_DONAU_PurseSubmitCallback) ( - void *cls, - const struct TALER_DONAU_PurseSubmitResponse *pdr); - - -/** - * @brief Handle for a POST /purses/$PID/ request. - */ -struct TALER_DONAU_PurseSubmitHandle; - - -/** - * Inform the donau that a should be made into - * a purse. - * - * @param ctx curl context - * @param url donau base URL - * @param keys donau keys - * @param purse_donau_url base URL of the donau hosting the purse - * @param purse_pub public key of the purse to merge - * @param min_age minimum age we need to prove for the purse - * @param num_s length of the @a deposits array - * @param s array of deposits to make into the purse - * @param cb function to call with the donau's result - * @param cb_cls closure for @a cb - * @return the request handle; NULL upon error - */ -struct TALER_DONAU_PurseSubmitHandle * -TALER_DONAU_purse_ ( - struct GNUNET_CURL_Context *ctx, - const char *url, - struct TALER_DONAU_Keys *keys, - const char *purse_donau_url, - const struct TALER_PurseContractPublicKeyP *purse_pub, - uint8_t min_age, - unsigned int num_s, - const struct TALER_DONAU_PurseSubmit s[static num_deposits], - TALER_DONAU_PurseSubmitCallback cb, - void *cb_cls); - - -/** - * Cancel #TALER_DONAU_purse_() operation. - * - * @param amh handle of the operation to cancel - */ -void -TALER_DONAU_purse__cancel ( - struct TALER_DONAU_PurseSubmitHandle *amh); - - -/* ********************* /charitys/$RID/open *********************** */ - - -/** - * @brief A /charitys/$RID/open Handle - */ -struct TALER_DONAU_charitysOpenHandle; - - -/** - * @brief charity open result details. - */ -struct TALER_DONAU_charityOpenResult -{ - - /** - * High-level HTTP response details. - */ - struct TALER_DONAU_HttpResponse hr; - - /** - * Details depending on @e hr.http_status. - */ - union - { - - /** - * Information returned on success, if - * @e hr.http_status is #MHD_HTTP_OK - */ - struct - { - /** - * New expiration time - */ - struct GNUNET_TIME_Timestamp expiration_time; - - /** - * Actual cost of the open operation. - */ - struct TALER_Amount open_cost; - - } ok; - - - /** - * Information returned if the payment provided is insufficient, if - * @e hr.http_status is #MHD_HTTP_PAYMENT_REQUIRED - */ - struct - { - /** - * Current expiration time of the charity. - */ - struct GNUNET_TIME_Timestamp expiration_time; - - /** - * Actual cost of the open operation that should have been paid. - */ - struct TALER_Amount open_cost; - - } payment_required; - - - /** - * Information returned if KYC is required to proceed, set if - * @e hr.http_status is #MHD_HTTP_UNAVAILABLE_FOR_LEGAL_REASONS. - */ - struct - { - /** - * Requirement row that the charity should use - * to check for its KYC status. - */ - uint64_t requirement_row; - - /** - * Hash of the payto-URI of the account to KYC; - */ - struct TALER_PaytoHashP h_payto; - - } unavailable_for_legal_reasons; - - } details; - -}; - - -/** - * Callbacks of this type are used to serve the result of submitting a - * charity open request to a donau. - * - * @param cls closure - * @param ror HTTP response data - */ -typedef void -(*TALER_DONAU_charitysOpenCallback) ( - void *cls, - const struct TALER_DONAU_charityOpenResult *ror); - - -/** - * Submit a request to open a charity. - * - * @param ctx curl context - * @param url donau base URL - * @param keys donau keys - * @param charity_priv private key of the charity to open - * @param charity_contribution amount to pay from the charity's balance for the operation - * @param coin_payments_length length of the @a coin_payments array - * @param coin_payments array of coin payments to use for opening the charity - * @param expiration_time desired new expiration time for the charity - * @param min_purses minimum number of purses to allow being concurrently opened per charity - * @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_DONAU_charitysOpenHandle * -TALER_DONAU_charitys_open ( - struct GNUNET_CURL_Context *ctx, - const char *url, - struct TALER_DONAU_Keys *keys, - const struct TALER_charityPrivateKeyP *charity_priv, - const struct TALER_Amount *charity_contribution, - unsigned int coin_payments_length, - const struct TALER_DONAU_PurseSubmit coin_payments[ - static coin_payments_length], - struct GNUNET_TIME_Timestamp expiration_time, - uint32_t min_purses, - TALER_DONAU_charitysOpenCallback cb, - void *cb_cls); - - -/** - * Cancel a charity status request. This function cannot be used - * on a request handle if a response is already served for it. - * - * @param[in] roh the charity open request handle - */ -void -TALER_DONAU_charitys_open_cancel ( - struct TALER_DONAU_charitysOpenHandle *roh); - - -/* ********************* /charitys/$RID/attest *********************** */ - - -/** - * @brief A Get /charitys/$RID/attest Handle - */ -struct TALER_DONAU_charitysGetAttestHandle; - - -/** - * @brief charity GET attest result details. - */ -struct TALER_DONAU_charityGetAttestResult -{ - - /** - * High-level HTTP response details. - */ - struct TALER_DONAU_HttpResponse hr; - - /** - * Details depending on @e hr.http_status. - */ - union - { - - /** - * Information returned on success, if - * @e hr.http_status is #MHD_HTTP_OK - */ - struct - { - - /** - * Length of the @e attributes array. - */ - unsigned int attributes_length; - - /** - * Array of attributes available about the user. - */ - const char **attributes; - - } ok; - - } details; - -}; - - -/** - * Callbacks of this type are used to serve the result of submitting a - * charity attest request to a donau. - * - * @param cls closure - * @param ror HTTP response data - */ -typedef void -(*TALER_DONAU_charitysGetAttestCallback) ( - void *cls, - const struct TALER_DONAU_charityGetAttestResult *ror); - - -/** - * Submit a request to get the list of attestable attributes for a charity. - * - * @param ctx CURL context - * @param url donau base URL - * @param charity_pub public key of the charity to get available attributes for - * @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_DONAU_charitysGetAttestHandle * -TALER_DONAU_charitys_get_attestable ( - struct GNUNET_CURL_Context *ctx, - const char *url, - const struct TALER_charityPublicKeyP *charity_pub, - TALER_DONAU_charitysGetAttestCallback cb, - void *cb_cls); - - -/** - * Cancel a request to get attestable attributes. This function cannot be used - * on a request handle if a response is already served for it. - * - * @param rgah the charity get attestable request handle - */ -void -TALER_DONAU_charitys_get_attestable_cancel ( - struct TALER_DONAU_charitysGetAttestHandle *rgah); - - -/** - * @brief A POST /charitys/$RID/attest Handle - */ -struct TALER_DONAU_charitysPostAttestHandle; - - -/** - * @brief charity attest result details. - */ -struct TALER_DONAU_charityPostAttestResult -{ - - /** - * High-level HTTP response details. - */ - struct TALER_DONAU_HttpResponse hr; - - /** - * Details depending on @e hr.http_status. - */ - union - { - - /** - * Information returned on success, if - * @e hr.http_status is #MHD_HTTP_OK - */ - struct - { - /** - * Time when the donau made the signature. - */ - struct GNUNET_TIME_Timestamp donau_time; - - /** - * Expiration time of the attested attributes. - */ - struct GNUNET_TIME_Timestamp expiration_time; - - /** - * Signature by the donau affirming the attributes. - */ - struct TALER_DonauSignatureP donau_sig; - - /** - * Online signing key used by the donau. - */ - struct TALER_DONAU_EddsaPublicKeyP donau_pub; - - /** - * Attributes being confirmed by the donau. - */ - const json_t *attributes; - - } ok; - - } details; - -}; - - -/** - * Callbacks of this type are used to serve the result of submitting a - * charity attest request to a donau. - * - * @param cls closure - * @param ror HTTP response data - */ -typedef void -(*TALER_DONAU_charitysPostAttestCallback) ( - void *cls, - const struct TALER_DONAU_charityPostAttestResult *ror); - - -/** - * Submit a request to attest attributes about the owner of a charity. - * - * @param ctx CURL context - * @param url donau base URL - * @param charity_priv private key of the charity to attest - * @param attributes_length length of the @a attributes array - * @param attributes array of names of attributes to get attestations for - * @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_DONAU_charitysAttestHandle * -TALER_DONAU_charitys_attest ( - struct GNUNET_CURL_Context *ctx, - const char *url, - const struct TALER_charityPrivateKeyP *charity_priv, - unsigned int attributes_length, - const char *attributes[const static attributes_length], - TALER_DONAU_charitysPostAttestCallback cb, - void *cb_cls); - - -/** - * Cancel a charity attestation request. This function cannot be used - * on a request handle if a response is already served for it. - * - * @param rah the charity attest request handle - */ -void -TALER_DONAU_charitys_attest_cancel ( - struct TALER_DONAU_charitysAttestHandle *rah); - - -/* ********************* /charitys/$RID/close *********************** */ - - -/** - * @brief A /charitys/$RID/close Handle - */ -struct TALER_DONAU_charitysCloseHandle; - - -/** - * @brief charity close result details. - */ -struct TALER_DONAU_charityCloseResult -{ - - /** - * High-level HTTP response details. - */ - struct TALER_DONAU_HttpResponse hr; - - /** - * Details depending on @e hr.http_status. - */ - union - { - - /** - * Information returned on success, if - * @e hr.http_status is #MHD_HTTP_OK - */ - struct - { - - /** - * Amount wired to the target account. - */ - struct TALER_Amount wire_amount; - } ok; - - /** - * Information returned if KYC is required to proceed, set if - * @e hr.http_status is #MHD_HTTP_UNAVAILABLE_FOR_LEGAL_REASONS. - */ - struct - { - /** - * Requirement row that the charity should use - * to check for its KYC status. - */ - uint64_t requirement_row; - - /** - * Hash of the payto-URI of the account to KYC; - */ - struct TALER_PaytoHashP h_payto; - - } unavailable_for_legal_reasons; - - } details; - -}; - - -/** - * Callbacks of this type are used to serve the result of submitting a - * charity close request to a donau. - * - * @param cls closure - * @param ror HTTP response data - */ -typedef void -(*TALER_DONAU_charitysCloseCallback) ( - void *cls, - const struct TALER_DONAU_charityCloseResult *ror); - - -/** - * Submit a request to close a charity. - * - * @param ctx curl context - * @param url donau base URL - * @param charity_priv private key of the charity to close - * @param target_payto_uri where to send the payment, NULL to send to charity origin - * @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_DONAU_charitysCloseHandle * -TALER_DONAU_charitys_close ( - struct GNUNET_CURL_Context *ctx, - const char *url, - const struct TALER_charityPrivateKeyP *charity_priv, - const char *target_payto_uri, - TALER_DONAU_charitysCloseCallback cb, - void *cb_cls); - - -/** - * Cancel a charity status request. This function cannot be used - * on a request handle if a response is already served for it. - * - * @param rch the charity request handle - */ -void -TALER_DONAU_charitys_close_cancel ( - struct TALER_DONAU_charitysCloseHandle *rch); - -#endif /* _TALER_DONAU_SERVICE_H */ diff --git a/src/include/taler_donau_util.h b/src/include/taler_donau_util.h @@ -26,6 +26,7 @@ #include <gnunet/gnunet_util_lib.h> #include <microhttpd.h> +#include "taler_util.h" #include "taler_amount_lib.h" #include "taler_crypto_lib.h"