/*
This file is part of TALER
Copyright (C) 2022 Taler Systems SA
TALER is free software; you can redistribute it and/or modify it under the
terms of the GNU Affero General Public License as published by the Free Software
Foundation; either version 3, or (at your option) any later version.
TALER is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License along with
TALER; see the file COPYING. If not, see
*/
/**
* @file taler-exchange-httpd_common_deposit.h
* @brief shared logic for handling deposited coins
* @author Christian Grothoff
*/
#ifndef TALER_EXCHANGE_HTTPD_COMMON_DEPOSIT_H
#define TALER_EXCHANGE_HTTPD_COMMON_DEPOSIT_H
#include
#include
#include
#include
#include "taler_json_lib.h"
#include "taler_mhd_lib.h"
/**
* Information about an individual coin being deposited.
*/
struct TEH_PurseDepositedCoin
{
/**
* Public information about the coin.
*/
struct TALER_CoinPublicInfo cpi;
/**
* Signature affirming spending the coin.
*/
struct TALER_CoinSpendSignatureP coin_sig;
/**
* Amount to be put into the purse from this coin.
*/
struct TALER_Amount amount;
/**
* Deposit fee applicable for this coin.
*/
struct TALER_Amount deposit_fee;
/**
* Amount to be put into the purse from this coin.
*/
struct TALER_Amount amount_minus_fee;
/**
* Age attestation provided, set if @e no_attest is false.
*/
struct TALER_AgeAttestation attest;
/**
* Age commitment provided, set if @e cpi.no_age_commitment is false.
*/
struct TALER_AgeCommitment age_commitment;
/**
* ID of the coin in known_coins.
*/
uint64_t known_coin_id;
/**
* True if @e attest was not provided.
*/
bool no_attest;
};
/**
* Parse a coin and check signature of the coin and the denomination
* signature over the coin.
*
* @param[in,out] connection our HTTP connection
* @param[out] coin coin to initialize
* @param jcoin coin to parse
* @return #GNUNET_OK on success, #GNUNET_NO if an error was returned,
* #GNUNET_SYSERR on failure and no error could be returned
*/
enum GNUNET_GenericReturnValue
TEH_common_purse_deposit_parse_coin (
struct MHD_Connection *connection,
struct TEH_PurseDepositedCoin *coin,
const json_t *jcoin);
/**
* Check that the deposited @a coin is valid for @a purse_pub
* and has a valid age commitment for @a min_age.
*
* @param[in,out] connection our HTTP connection
* @param coin the coin to evaluate
* @param purse_pub public key of the purse the coin was deposited into
* @param min_age minimum age restriction expected for this purse
* @return #GNUNET_OK on success, #GNUNET_NO if an error was returned,
* #GNUNET_SYSERR on failure and no error could be returned
*/
enum GNUNET_GenericReturnValue
TEH_common_deposit_check_purse_deposit (
struct MHD_Connection *connection,
const struct TEH_PurseDepositedCoin *coin,
const struct TALER_PurseContractPublicKeyP *purse_pub,
uint32_t min_age);
/**
* Release data structures of @a coin. Note that
* @a coin itself is NOT freed.
*
* @param[in] coin information to release
*/
void
TEH_common_purse_deposit_free_coin (struct TEH_PurseDepositedCoin *coin);
#endif