2015-01-08 18:37:20 +01:00
|
|
|
/*
|
|
|
|
This file is part of TALER
|
2020-01-19 19:21:58 +01:00
|
|
|
Copyright (C) 2014-2017 Taler Systems SA
|
2015-01-08 18:37:20 +01:00
|
|
|
|
|
|
|
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
|
|
|
|
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 General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License along with
|
2016-07-07 17:55:25 +02:00
|
|
|
TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
|
2015-01-08 18:37:20 +01:00
|
|
|
*/
|
|
|
|
/**
|
2015-01-09 18:18:59 +01:00
|
|
|
* @file taler_signatures.h
|
|
|
|
* @brief message formats and signature constants used to define
|
|
|
|
* the binary formats of signatures in Taler
|
2015-01-08 18:37:20 +01:00
|
|
|
* @author Florian Dold
|
|
|
|
* @author Benedikt Mueller
|
2015-01-09 18:18:59 +01:00
|
|
|
*
|
2015-03-28 13:31:09 +01:00
|
|
|
* This file should define the constants and C structs that one needs
|
|
|
|
* to know to implement Taler clients (wallets or merchants or
|
|
|
|
* auditor) that need to produce or verify Taler signatures.
|
2015-01-08 18:37:20 +01:00
|
|
|
*/
|
|
|
|
#ifndef TALER_SIGNATURES_H
|
|
|
|
#define TALER_SIGNATURES_H
|
|
|
|
|
2015-07-20 10:34:32 +02:00
|
|
|
#include <gnunet/gnunet_util_lib.h>
|
|
|
|
#include "taler_amount_lib.h"
|
|
|
|
#include "taler_crypto_lib.h"
|
2015-01-09 18:18:59 +01:00
|
|
|
|
2015-03-24 17:25:00 +01:00
|
|
|
/**
|
|
|
|
* Cut-and-choose size for refreshing. Client looses the gamble (of
|
2015-03-27 19:58:40 +01:00
|
|
|
* unaccountable transfers) with probability 1/TALER_CNC_KAPPA. Refresh cost
|
|
|
|
* increases linearly with TALER_CNC_KAPPA, and 3 is sufficient up to a
|
2015-03-24 17:25:00 +01:00
|
|
|
* income/sales tax of 66% of total transaction value. As there is
|
|
|
|
* no good reason to change this security parameter, we declare it
|
|
|
|
* fixed and part of the protocol.
|
|
|
|
*/
|
2015-03-27 19:58:40 +01:00
|
|
|
#define TALER_CNC_KAPPA 3
|
2015-03-24 17:25:00 +01:00
|
|
|
|
2015-06-11 13:14:59 +02:00
|
|
|
|
2015-03-28 14:22:21 +01:00
|
|
|
/*********************************************/
|
2016-03-01 15:35:04 +01:00
|
|
|
/* Exchange offline signatures (with master key) */
|
2015-03-28 14:22:21 +01:00
|
|
|
/*********************************************/
|
2015-03-24 17:25:00 +01:00
|
|
|
|
2015-01-08 18:37:20 +01:00
|
|
|
/**
|
2016-03-01 15:35:04 +01:00
|
|
|
* Purpose for signing public keys signed by the exchange master key.
|
2015-01-08 18:37:20 +01:00
|
|
|
*/
|
2015-04-17 19:45:30 +02:00
|
|
|
#define TALER_SIGNATURE_MASTER_SIGNING_KEY_VALIDITY 1024
|
2015-01-08 18:37:20 +01:00
|
|
|
|
|
|
|
/**
|
2016-03-01 15:35:04 +01:00
|
|
|
* Purpose for denomination keys signed by the exchange master key.
|
2015-01-08 18:37:20 +01:00
|
|
|
*/
|
2015-04-17 19:45:30 +02:00
|
|
|
#define TALER_SIGNATURE_MASTER_DENOMINATION_KEY_VALIDITY 1025
|
2015-01-08 18:37:20 +01:00
|
|
|
|
2017-03-03 20:31:29 +01:00
|
|
|
/**
|
|
|
|
* Fees charged per (aggregate) wire transfer to the merchant.
|
|
|
|
*/
|
|
|
|
#define TALER_SIGNATURE_MASTER_WIRE_FEES 1028
|
|
|
|
|
2017-04-07 22:37:00 +02:00
|
|
|
/**
|
|
|
|
* The given revocation key was revoked and must no longer be used.
|
|
|
|
*/
|
|
|
|
#define TALER_SIGNATURE_MASTER_DENOMINATION_KEY_REVOKED 1029
|
2015-01-08 18:37:20 +01:00
|
|
|
|
2018-04-02 14:24:45 +02:00
|
|
|
/**
|
2019-06-08 19:55:18 +02:00
|
|
|
* Signature where the Exchange confirms its IBAN details in
|
2018-04-02 14:24:45 +02:00
|
|
|
* the /wire response.
|
|
|
|
*/
|
|
|
|
#define TALER_SIGNATURE_MASTER_WIRE_DETAILS 1030
|
|
|
|
|
2015-03-28 14:22:21 +01:00
|
|
|
/*********************************************/
|
2016-03-01 15:35:04 +01:00
|
|
|
/* Exchange online signatures (with signing key) */
|
2015-03-28 14:22:21 +01:00
|
|
|
/*********************************************/
|
2015-01-08 18:37:20 +01:00
|
|
|
|
|
|
|
/**
|
2016-03-01 15:35:04 +01:00
|
|
|
* Purpose for the state of a reserve, signed by the exchange's signing
|
2015-03-28 14:22:21 +01:00
|
|
|
* key.
|
2015-01-08 18:37:20 +01:00
|
|
|
*/
|
2016-03-01 15:35:04 +01:00
|
|
|
#define TALER_SIGNATURE_EXCHANGE_RESERVE_STATUS 1032
|
2015-01-08 18:37:20 +01:00
|
|
|
|
|
|
|
/**
|
2016-03-01 15:35:04 +01:00
|
|
|
* Signature where the Exchange confirms a deposit request.
|
2015-01-08 18:37:20 +01:00
|
|
|
*/
|
2016-03-01 15:35:04 +01:00
|
|
|
#define TALER_SIGNATURE_EXCHANGE_CONFIRM_DEPOSIT 1033
|
2015-01-08 18:37:20 +01:00
|
|
|
|
2015-01-28 19:48:41 +01:00
|
|
|
/**
|
2016-03-01 15:35:04 +01:00
|
|
|
* Signature where the exchange (current signing key) confirms the
|
2015-03-28 14:22:21 +01:00
|
|
|
* no-reveal index for cut-and-choose and the validity of the melted
|
|
|
|
* coins.
|
2015-01-28 19:48:41 +01:00
|
|
|
*/
|
2016-03-01 15:35:04 +01:00
|
|
|
#define TALER_SIGNATURE_EXCHANGE_CONFIRM_MELT 1034
|
2015-01-28 19:48:41 +01:00
|
|
|
|
2015-03-24 17:53:13 +01:00
|
|
|
/**
|
2016-03-01 15:35:04 +01:00
|
|
|
* Signature where the Exchange confirms the full /keys response set.
|
2015-03-24 17:53:13 +01:00
|
|
|
*/
|
2016-03-01 15:35:04 +01:00
|
|
|
#define TALER_SIGNATURE_EXCHANGE_KEY_SET 1035
|
2015-03-24 17:53:13 +01:00
|
|
|
|
2016-01-17 18:19:09 +01:00
|
|
|
/**
|
2016-06-09 19:18:13 +02:00
|
|
|
* Signature where the Exchange confirms the /track/transaction response.
|
2016-01-17 18:19:09 +01:00
|
|
|
*/
|
2016-03-01 15:35:04 +01:00
|
|
|
#define TALER_SIGNATURE_EXCHANGE_CONFIRM_WIRE 1036
|
2016-01-17 18:19:09 +01:00
|
|
|
|
2016-04-11 19:54:54 +02:00
|
|
|
/**
|
|
|
|
* Signature where the Exchange confirms the /wire/deposit response.
|
|
|
|
*/
|
|
|
|
#define TALER_SIGNATURE_EXCHANGE_CONFIRM_WIRE_DEPOSIT 1037
|
|
|
|
|
2016-05-04 09:42:52 +02:00
|
|
|
/**
|
|
|
|
* Signature where the Exchange confirms a refund request.
|
|
|
|
*/
|
|
|
|
#define TALER_SIGNATURE_EXCHANGE_CONFIRM_REFUND 1038
|
|
|
|
|
2017-03-19 07:50:16 +01:00
|
|
|
/**
|
2020-01-18 23:49:37 +01:00
|
|
|
* Signature where the Exchange confirms a recoup.
|
2017-03-19 07:50:16 +01:00
|
|
|
*/
|
2020-01-18 23:49:37 +01:00
|
|
|
#define TALER_SIGNATURE_EXCHANGE_CONFIRM_RECOUP 1039
|
2017-03-19 07:50:16 +01:00
|
|
|
|
2017-04-03 16:40:31 +02:00
|
|
|
/**
|
|
|
|
* Signature where the Exchange confirms it closed a reserve.
|
|
|
|
*/
|
|
|
|
#define TALER_SIGNATURE_EXCHANGE_RESERVE_CLOSED 1040
|
|
|
|
|
2019-07-22 13:28:48 +02:00
|
|
|
/**
|
2020-01-18 23:49:37 +01:00
|
|
|
* Signature where the Exchange confirms a recoup-refresh operation.
|
2019-07-22 13:28:48 +02:00
|
|
|
*/
|
2020-01-18 23:49:37 +01:00
|
|
|
#define TALER_SIGNATURE_EXCHANGE_CONFIRM_RECOUP_REFRESH 1041
|
2019-07-22 13:28:48 +02:00
|
|
|
|
2015-01-28 19:48:41 +01:00
|
|
|
|
2019-06-26 15:34:14 +02:00
|
|
|
/**********************/
|
|
|
|
/* Auditor signatures */
|
|
|
|
/**********************/
|
2015-07-06 10:16:49 +02:00
|
|
|
|
|
|
|
/**
|
2015-07-08 09:59:51 +02:00
|
|
|
* Signature where the auditor confirms that he is
|
2016-03-01 15:35:04 +01:00
|
|
|
* aware of certain denomination keys from the exchange.
|
2015-07-06 10:16:49 +02:00
|
|
|
*/
|
2016-03-01 15:35:04 +01:00
|
|
|
#define TALER_SIGNATURE_AUDITOR_EXCHANGE_KEYS 1064
|
2015-07-06 10:16:49 +02:00
|
|
|
|
|
|
|
|
2015-01-08 18:37:20 +01:00
|
|
|
/***********************/
|
|
|
|
/* Merchant signatures */
|
|
|
|
/***********************/
|
|
|
|
|
|
|
|
/**
|
2015-03-28 14:22:21 +01:00
|
|
|
* Signature where the merchant confirms a contract (to the customer).
|
2015-01-08 18:37:20 +01:00
|
|
|
*/
|
2015-04-17 19:45:30 +02:00
|
|
|
#define TALER_SIGNATURE_MERCHANT_CONTRACT 1101
|
2015-01-08 18:37:20 +01:00
|
|
|
|
2015-03-28 14:22:21 +01:00
|
|
|
/**
|
|
|
|
* Signature where the merchant confirms a refund (of a coin).
|
|
|
|
*/
|
2015-04-17 19:45:30 +02:00
|
|
|
#define TALER_SIGNATURE_MERCHANT_REFUND 1102
|
2015-03-28 14:22:21 +01:00
|
|
|
|
2015-11-11 18:09:19 +01:00
|
|
|
/**
|
|
|
|
* Signature where the merchant confirms that he needs the wire
|
|
|
|
* transfer identifier for a deposit operation.
|
|
|
|
*/
|
2016-06-09 19:18:13 +02:00
|
|
|
#define TALER_SIGNATURE_MERCHANT_TRACK_TRANSACTION 1103
|
2015-11-11 18:09:19 +01:00
|
|
|
|
2016-10-03 10:32:17 +02:00
|
|
|
/**
|
|
|
|
* Signature where the merchant confirms that the payment was
|
|
|
|
* successful
|
|
|
|
*/
|
|
|
|
#define TALER_SIGNATURE_MERCHANT_PAYMENT_OK 1104
|
|
|
|
|
2018-01-04 13:47:03 +01:00
|
|
|
/**
|
|
|
|
* Signature where the merchant confirms that the user replayed
|
|
|
|
* a payment for a browser session.
|
|
|
|
*/
|
|
|
|
#define TALER_SIGNATURE_MERCHANT_PAY_SESSION 1106
|
|
|
|
|
2018-10-06 15:05:06 +02:00
|
|
|
/**
|
|
|
|
* Signature where the merchant confirms its own (salted)
|
|
|
|
* wire details (not yet really used).
|
|
|
|
*/
|
|
|
|
#define TALER_SIGNATURE_MERCHANT_WIRE_DETAILS 1107
|
|
|
|
|
2015-03-28 14:22:21 +01:00
|
|
|
|
2015-01-08 18:37:20 +01:00
|
|
|
/*********************/
|
|
|
|
/* Wallet signatures */
|
|
|
|
/*********************/
|
|
|
|
|
|
|
|
/**
|
2015-03-28 14:22:21 +01:00
|
|
|
* Signature where the reserve key confirms a withdraw request.
|
2015-01-08 18:37:20 +01:00
|
|
|
*/
|
2015-04-17 19:45:30 +02:00
|
|
|
#define TALER_SIGNATURE_WALLET_RESERVE_WITHDRAW 1200
|
2015-01-08 18:37:20 +01:00
|
|
|
|
|
|
|
/**
|
2015-03-28 14:22:21 +01:00
|
|
|
* Signature made by the wallet of a user to confirm a deposit of a coin.
|
2015-01-08 18:37:20 +01:00
|
|
|
*/
|
2015-04-17 19:45:30 +02:00
|
|
|
#define TALER_SIGNATURE_WALLET_COIN_DEPOSIT 1201
|
2015-03-28 14:22:21 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Signature using a coin key confirming the melting of a coin.
|
|
|
|
*/
|
2015-04-17 19:45:30 +02:00
|
|
|
#define TALER_SIGNATURE_WALLET_COIN_MELT 1202
|
|
|
|
|
2017-03-19 07:50:16 +01:00
|
|
|
/**
|
2020-01-18 23:49:37 +01:00
|
|
|
* Signature using a coin key requesting recoup.
|
2017-03-19 07:50:16 +01:00
|
|
|
*/
|
2020-01-18 23:49:37 +01:00
|
|
|
#define TALER_SIGNATURE_WALLET_COIN_RECOUP 1203
|
2017-03-19 07:50:16 +01:00
|
|
|
|
2019-06-26 15:34:14 +02:00
|
|
|
/**
|
|
|
|
* Signature using a coin key authenticating link data.
|
|
|
|
*/
|
|
|
|
#define TALER_SIGNATURE_WALLET_COIN_LINK 1204
|
|
|
|
|
2015-07-06 10:16:49 +02:00
|
|
|
|
2015-04-17 19:45:30 +02:00
|
|
|
/*******************/
|
|
|
|
/* Test signatures */
|
|
|
|
/*******************/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* EdDSA test signature.
|
|
|
|
*/
|
|
|
|
#define TALER_SIGNATURE_CLIENT_TEST_EDDSA 1302
|
|
|
|
|
|
|
|
/**
|
|
|
|
* EdDSA test signature.
|
|
|
|
*/
|
2016-03-01 15:35:04 +01:00
|
|
|
#define TALER_SIGNATURE_EXCHANGE_TEST_EDDSA 1303
|
2015-01-08 18:37:20 +01:00
|
|
|
|
2015-01-09 18:18:59 +01:00
|
|
|
|
2019-10-08 18:07:33 +02:00
|
|
|
/************************/
|
|
|
|
/* Anastasis signatures */
|
|
|
|
/************************/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* EdDSA signature for a policy upload.
|
|
|
|
*/
|
|
|
|
#define TALER_SIGNATURE_ANASTASIS_POLICY_UPLOAD 1400
|
|
|
|
|
|
|
|
/**
|
|
|
|
* EdDSA signature for a policy download.
|
|
|
|
*/
|
|
|
|
#define TALER_SIGNATURE_ANASTASIS_POLICY_DOWNLOAD 1401
|
|
|
|
|
2015-01-09 18:18:59 +01:00
|
|
|
|
2019-11-17 17:04:23 +01:00
|
|
|
/*******************/
|
|
|
|
/* Sync signatures */
|
|
|
|
/*******************/
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* EdDSA signature for a backup upload.
|
|
|
|
*/
|
|
|
|
#define TALER_SIGNATURE_SYNC_BACKUP_UPLOAD 1450
|
|
|
|
|
|
|
|
|
2015-01-09 18:18:59 +01:00
|
|
|
GNUNET_NETWORK_STRUCT_BEGIN
|
|
|
|
|
2019-06-26 15:34:14 +02:00
|
|
|
/**
|
|
|
|
* @brief Format used for to allow the wallet to authenticate
|
|
|
|
* link data provided by the exchange.
|
|
|
|
*/
|
|
|
|
struct TALER_LinkDataPS
|
|
|
|
{
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Purpose must be #TALER_SIGNATURE_WALLET_COIN_LINK.
|
|
|
|
* Used with an EdDSA signature of a `struct TALER_CoinPublicKeyP`.
|
|
|
|
*/
|
|
|
|
struct GNUNET_CRYPTO_EccSignaturePurpose purpose;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Hash of the denomination public key of the new coin.
|
|
|
|
*/
|
|
|
|
struct GNUNET_HashCode h_denom_pub;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Public key of the old coin being refreshed.
|
|
|
|
*/
|
|
|
|
struct TALER_CoinSpendPublicKeyP old_coin_pub;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Transfer public key (for which the private key was not revealed)
|
|
|
|
*/
|
|
|
|
struct TALER_TransferPublicKeyP transfer_pub;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Hash of the blinded new coin.
|
|
|
|
*/
|
|
|
|
struct GNUNET_HashCode coin_envelope_hash;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
2015-01-09 18:18:59 +01:00
|
|
|
/**
|
2015-03-28 15:53:53 +01:00
|
|
|
* @brief Format used for to generate the signature on a request to withdraw
|
2015-01-26 12:22:26 +01:00
|
|
|
* coins from a reserve.
|
2015-01-09 18:18:59 +01:00
|
|
|
*/
|
2015-03-27 19:58:40 +01:00
|
|
|
struct TALER_WithdrawRequestPS
|
2015-01-09 18:18:59 +01:00
|
|
|
{
|
|
|
|
|
|
|
|
/**
|
2015-03-28 14:22:21 +01:00
|
|
|
* Purpose must be #TALER_SIGNATURE_WALLET_RESERVE_WITHDRAW.
|
|
|
|
* Used with an EdDSA signature of a `struct TALER_ReservePublicKeyP`.
|
2015-01-09 18:18:59 +01:00
|
|
|
*/
|
|
|
|
struct GNUNET_CRYPTO_EccSignaturePurpose purpose;
|
|
|
|
|
|
|
|
/**
|
2015-01-26 12:22:26 +01:00
|
|
|
* Reserve public key (which reserve to withdraw from). This is
|
|
|
|
* the public key which must match the signature.
|
2015-01-09 18:18:59 +01:00
|
|
|
*/
|
2015-03-27 19:58:40 +01:00
|
|
|
struct TALER_ReservePublicKeyP reserve_pub;
|
2015-01-09 18:18:59 +01:00
|
|
|
|
2015-03-22 16:09:01 +01:00
|
|
|
/**
|
2016-03-01 15:35:04 +01:00
|
|
|
* Value of the coin being exchangeed (matching the denomination key)
|
2015-03-22 16:09:01 +01:00
|
|
|
* plus the transaction fee. We include this in what is being
|
|
|
|
* signed so that we can verify a reserve's remaining total balance
|
|
|
|
* without needing to access the respective denomination key
|
|
|
|
* information each time.
|
|
|
|
*/
|
|
|
|
struct TALER_AmountNBO amount_with_fee;
|
|
|
|
|
2015-01-09 18:18:59 +01:00
|
|
|
/**
|
2015-01-26 12:22:26 +01:00
|
|
|
* Hash of the denomination public key for the coin that is withdrawn.
|
2015-01-09 18:18:59 +01:00
|
|
|
*/
|
2015-08-17 03:56:49 +02:00
|
|
|
struct GNUNET_HashCode h_denomination_pub GNUNET_PACKED;
|
2015-01-09 18:18:59 +01:00
|
|
|
|
|
|
|
/**
|
2016-03-01 15:35:04 +01:00
|
|
|
* Hash of the (blinded) message to be signed by the Exchange.
|
2015-01-09 18:18:59 +01:00
|
|
|
*/
|
2015-08-17 03:56:49 +02:00
|
|
|
struct GNUNET_HashCode h_coin_envelope GNUNET_PACKED;
|
2015-01-09 18:18:59 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
|
2015-01-28 14:55:25 +01:00
|
|
|
/**
|
2015-03-28 15:53:53 +01:00
|
|
|
* @brief Format used to generate the signature on a request to deposit
|
2015-01-28 14:55:25 +01:00
|
|
|
* a coin into the account of a merchant.
|
|
|
|
*/
|
2015-03-27 19:58:40 +01:00
|
|
|
struct TALER_DepositRequestPS
|
2015-01-28 14:55:25 +01:00
|
|
|
{
|
|
|
|
/**
|
2015-03-28 14:22:21 +01:00
|
|
|
* Purpose must be #TALER_SIGNATURE_WALLET_COIN_DEPOSIT.
|
2015-05-16 14:15:34 +02:00
|
|
|
* Used for an EdDSA signature with the `struct TALER_CoinSpendPublicKeyP`.
|
2015-01-28 14:55:25 +01:00
|
|
|
*/
|
|
|
|
struct GNUNET_CRYPTO_EccSignaturePurpose purpose;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Hash over the contract for which this deposit is made.
|
|
|
|
*/
|
2017-05-29 01:15:41 +02:00
|
|
|
struct GNUNET_HashCode h_contract_terms GNUNET_PACKED;
|
2015-01-28 14:55:25 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Hash over the wiring information of the merchant.
|
|
|
|
*/
|
2015-08-17 03:56:49 +02:00
|
|
|
struct GNUNET_HashCode h_wire GNUNET_PACKED;
|
2015-01-28 14:55:25 +01:00
|
|
|
|
2015-03-28 14:22:21 +01:00
|
|
|
/**
|
|
|
|
* Time when this request was generated. Used, for example, to
|
|
|
|
* assess when (roughly) the income was achieved for tax purposes.
|
2016-03-01 15:35:04 +01:00
|
|
|
* Note that the Exchange will only check that the timestamp is not "too
|
2015-03-28 14:22:21 +01:00
|
|
|
* far" into the future (i.e. several days). The fact that the
|
|
|
|
* timestamp falls within the validity period of the coin's
|
|
|
|
* denomination key is irrelevant for the validity of the deposit
|
|
|
|
* request, as obviously the customer and merchant could conspire to
|
2016-03-01 15:35:04 +01:00
|
|
|
* set any timestamp. Also, the Exchange must accept very old deposit
|
2015-03-28 14:22:21 +01:00
|
|
|
* requests, as the merchant might have been unable to transmit the
|
|
|
|
* deposit request in a timely fashion (so back-dating is not
|
|
|
|
* prevented).
|
|
|
|
*/
|
2020-05-07 20:22:02 +02:00
|
|
|
struct GNUNET_TIME_AbsoluteNBO wallet_timestamp;
|
2015-03-28 14:22:21 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* How much time does the merchant have to issue a refund request?
|
|
|
|
* Zero if refunds are not allowed. After this time, the coin
|
|
|
|
* cannot be refunded.
|
|
|
|
*/
|
|
|
|
struct GNUNET_TIME_AbsoluteNBO refund_deadline;
|
|
|
|
|
2015-01-28 14:55:25 +01:00
|
|
|
/**
|
2015-03-28 14:22:21 +01:00
|
|
|
* Amount to be deposited, including deposit fee charged by the
|
2016-03-01 15:35:04 +01:00
|
|
|
* exchange. This is the total amount that the coin's value at the exchange
|
2015-03-28 14:22:21 +01:00
|
|
|
* will be reduced by.
|
2015-01-28 14:55:25 +01:00
|
|
|
*/
|
2015-03-22 16:09:01 +01:00
|
|
|
struct TALER_AmountNBO amount_with_fee;
|
2015-01-28 14:55:25 +01:00
|
|
|
|
|
|
|
/**
|
2016-03-01 15:35:04 +01:00
|
|
|
* Depositing fee charged by the exchange. This must match the Exchange's
|
2015-03-28 14:22:21 +01:00
|
|
|
* denomination key's depositing fee. If the client puts in an
|
|
|
|
* invalid deposit fee (too high or too low) that does not match the
|
2016-03-01 15:35:04 +01:00
|
|
|
* Exchange's denomination key, the deposit operation is invalid and
|
|
|
|
* will be rejected by the exchange. The @e amount_with_fee minus the
|
2015-03-28 14:22:21 +01:00
|
|
|
* @e deposit_fee is the amount that will be transferred to the
|
|
|
|
* account identified by @e h_wire.
|
|
|
|
*/
|
|
|
|
struct TALER_AmountNBO deposit_fee;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The Merchant's public key. Allows the merchant to later refund
|
2015-11-11 18:09:19 +01:00
|
|
|
* the transaction or to inquire about the wire transfer identifier.
|
2015-03-28 14:22:21 +01:00
|
|
|
*/
|
|
|
|
struct TALER_MerchantPublicKeyP merchant;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The coin's public key. This is the value that must have been
|
2016-03-01 15:35:04 +01:00
|
|
|
* signed (blindly) by the Exchange. The deposit request is to be
|
2015-05-16 14:15:34 +02:00
|
|
|
* signed by the corresponding private key (using EdDSA).
|
2015-01-28 14:55:25 +01:00
|
|
|
*/
|
2015-05-16 14:15:34 +02:00
|
|
|
struct TALER_CoinSpendPublicKeyP coin_pub;
|
2015-01-28 14:55:25 +01:00
|
|
|
|
|
|
|
};
|
|
|
|
|
2015-01-09 18:18:59 +01:00
|
|
|
|
2015-01-28 19:48:41 +01:00
|
|
|
/**
|
2015-03-28 15:53:53 +01:00
|
|
|
* @brief Format used to generate the signature on a confirmation
|
2016-03-01 15:35:04 +01:00
|
|
|
* from the exchange that a deposit request succeeded.
|
2015-01-28 19:48:41 +01:00
|
|
|
*/
|
2015-03-27 19:58:40 +01:00
|
|
|
struct TALER_DepositConfirmationPS
|
2015-01-28 19:48:41 +01:00
|
|
|
{
|
|
|
|
/**
|
2016-03-01 15:35:04 +01:00
|
|
|
* Purpose must be #TALER_SIGNATURE_EXCHANGE_CONFIRM_DEPOSIT. Signed
|
|
|
|
* by a `struct TALER_ExchangePublicKeyP` using EdDSA.
|
2015-01-28 19:48:41 +01:00
|
|
|
*/
|
|
|
|
struct GNUNET_CRYPTO_EccSignaturePurpose purpose;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Hash over the contract for which this deposit is made.
|
|
|
|
*/
|
2017-05-29 01:15:41 +02:00
|
|
|
struct GNUNET_HashCode h_contract_terms GNUNET_PACKED;
|
2015-01-28 19:48:41 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Hash over the wiring information of the merchant.
|
|
|
|
*/
|
2015-08-17 03:56:49 +02:00
|
|
|
struct GNUNET_HashCode h_wire GNUNET_PACKED;
|
2015-01-28 19:48:41 +01:00
|
|
|
|
|
|
|
/**
|
2020-05-07 20:22:02 +02:00
|
|
|
* Time when this confirmation was generated / when the exchange received
|
|
|
|
* the deposit request.
|
2015-01-28 19:48:41 +01:00
|
|
|
*/
|
2020-05-07 20:22:02 +02:00
|
|
|
struct GNUNET_TIME_AbsoluteNBO exchange_timestamp;
|
2015-03-28 14:22:21 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* How much time does the @e merchant have to issue a refund
|
|
|
|
* request? Zero if refunds are not allowed. After this time, the
|
|
|
|
* coin cannot be refunded. Note that the wire transfer will not be
|
2016-03-01 15:35:04 +01:00
|
|
|
* performed by the exchange until the refund deadline. This value
|
2015-03-28 14:22:21 +01:00
|
|
|
* is taken from the original deposit request.
|
|
|
|
*/
|
|
|
|
struct GNUNET_TIME_AbsoluteNBO refund_deadline;
|
2015-03-22 16:09:01 +01:00
|
|
|
|
2015-03-28 14:22:21 +01:00
|
|
|
/**
|
|
|
|
* Amount to be deposited, excluding fee. Calculated from the
|
|
|
|
* amount with fee and the fee from the deposit request.
|
|
|
|
*/
|
|
|
|
struct TALER_AmountNBO amount_without_fee;
|
2015-01-28 19:48:41 +01:00
|
|
|
|
|
|
|
/**
|
2015-03-28 14:22:21 +01:00
|
|
|
* The coin's public key. This is the value that must have been
|
2016-03-01 15:35:04 +01:00
|
|
|
* signed (blindly) by the Exchange. The deposit request is to be
|
2015-05-16 14:15:34 +02:00
|
|
|
* signed by the corresponding private key (using EdDSA).
|
2015-01-28 19:48:41 +01:00
|
|
|
*/
|
2015-05-16 14:15:34 +02:00
|
|
|
struct TALER_CoinSpendPublicKeyP coin_pub;
|
2015-01-28 19:48:41 +01:00
|
|
|
|
|
|
|
/**
|
2015-03-28 14:22:21 +01:00
|
|
|
* The Merchant's public key. Allows the merchant to later refund
|
2015-11-11 18:09:19 +01:00
|
|
|
* the transaction or to inquire about the wire transfer identifier.
|
2015-01-28 19:48:41 +01:00
|
|
|
*/
|
2015-03-27 19:58:40 +01:00
|
|
|
struct TALER_MerchantPublicKeyP merchant;
|
2015-01-28 19:48:41 +01:00
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
2016-04-20 02:50:52 +02:00
|
|
|
/**
|
|
|
|
* @brief Format used to generate the signature on a request to refund
|
|
|
|
* a coin into the account of the customer.
|
|
|
|
*/
|
|
|
|
struct TALER_RefundRequestPS
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* Purpose must be #TALER_SIGNATURE_MERCHANT_REFUND.
|
|
|
|
*/
|
|
|
|
struct GNUNET_CRYPTO_EccSignaturePurpose purpose;
|
|
|
|
|
|
|
|
/**
|
2017-02-06 15:41:39 +01:00
|
|
|
* Hash over the proposal data to identify the contract
|
|
|
|
* which is being refunded.
|
2016-04-20 02:50:52 +02:00
|
|
|
*/
|
2017-05-29 01:15:41 +02:00
|
|
|
struct GNUNET_HashCode h_contract_terms GNUNET_PACKED;
|
2016-04-20 02:50:52 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The coin's public key. This is the value that must have been
|
2016-05-03 07:57:49 +02:00
|
|
|
* signed (blindly) by the Exchange.
|
2016-04-20 02:50:52 +02:00
|
|
|
*/
|
|
|
|
struct TALER_CoinSpendPublicKeyP coin_pub;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The Merchant's public key. Allows the merchant to later refund
|
|
|
|
* the transaction or to inquire about the wire transfer identifier.
|
|
|
|
*/
|
|
|
|
struct TALER_MerchantPublicKeyP merchant;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Merchant-generated transaction ID for the refund.
|
|
|
|
*/
|
|
|
|
uint64_t rtransaction_id GNUNET_PACKED;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Amount to be refunded, including refund fee charged by the
|
|
|
|
* exchange to the customer.
|
|
|
|
*/
|
|
|
|
struct TALER_AmountNBO refund_amount;
|
2016-05-04 09:42:52 +02:00
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief Format used to generate the signature on a request to refund
|
|
|
|
* a coin into the account of the customer.
|
|
|
|
*/
|
|
|
|
struct TALER_RefundConfirmationPS
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* Purpose must be #TALER_SIGNATURE_EXCHANGE_CONFIRM_REFUND.
|
|
|
|
*/
|
|
|
|
struct GNUNET_CRYPTO_EccSignaturePurpose purpose;
|
|
|
|
|
|
|
|
/**
|
2017-02-06 15:41:39 +01:00
|
|
|
* Hash over the proposal data to identify the contract
|
|
|
|
* which is being refunded.
|
2016-05-04 09:42:52 +02:00
|
|
|
*/
|
2017-05-29 01:15:41 +02:00
|
|
|
struct GNUNET_HashCode h_contract_terms GNUNET_PACKED;
|
2016-05-04 09:42:52 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The coin's public key. This is the value that must have been
|
|
|
|
* signed (blindly) by the Exchange.
|
|
|
|
*/
|
|
|
|
struct TALER_CoinSpendPublicKeyP coin_pub;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The Merchant's public key. Allows the merchant to later refund
|
|
|
|
* the transaction or to inquire about the wire transfer identifier.
|
|
|
|
*/
|
|
|
|
struct TALER_MerchantPublicKeyP merchant;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Merchant-generated transaction ID for the refund.
|
|
|
|
*/
|
|
|
|
uint64_t rtransaction_id GNUNET_PACKED;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Amount to be refunded, including refund fee charged by the
|
|
|
|
* exchange to the customer.
|
|
|
|
*/
|
|
|
|
struct TALER_AmountNBO refund_amount;
|
2016-04-20 02:50:52 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Refund fee charged by the exchange. This must match the
|
|
|
|
* Exchange's denomination key's refund fee. If the client puts in
|
|
|
|
* an invalid refund fee (too high or too low) that does not match
|
|
|
|
* the Exchange's denomination key, the refund operation is invalid
|
|
|
|
* and will be rejected by the exchange. The @e amount_with_fee
|
|
|
|
* minus the @e refund_fee is the amount that will be credited to
|
|
|
|
* the original coin.
|
|
|
|
*/
|
|
|
|
struct TALER_AmountNBO refund_fee;
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
2015-01-29 20:00:21 +01:00
|
|
|
/**
|
2015-03-28 15:53:53 +01:00
|
|
|
* @brief Message signed by a coin to indicate that the coin should be
|
2015-03-28 14:22:21 +01:00
|
|
|
* melted.
|
2015-01-29 20:00:21 +01:00
|
|
|
*/
|
2015-03-27 19:58:40 +01:00
|
|
|
struct TALER_RefreshMeltCoinAffirmationPS
|
2015-01-29 20:00:21 +01:00
|
|
|
{
|
|
|
|
/**
|
2015-03-28 14:22:21 +01:00
|
|
|
* Purpose is #TALER_SIGNATURE_WALLET_COIN_MELT.
|
2015-05-16 14:15:34 +02:00
|
|
|
* Used for an EdDSA signature with the `struct TALER_CoinSpendPublicKeyP`.
|
2015-01-29 20:00:21 +01:00
|
|
|
*/
|
|
|
|
struct GNUNET_CRYPTO_EccSignaturePurpose purpose;
|
|
|
|
|
2015-03-10 16:15:14 +01:00
|
|
|
/**
|
2017-11-27 23:42:17 +01:00
|
|
|
* Which melt commitment is made by the wallet.
|
2015-03-10 16:15:14 +01:00
|
|
|
*/
|
2017-11-27 23:42:17 +01:00
|
|
|
struct TALER_RefreshCommitmentP rc GNUNET_PACKED;
|
2015-03-10 16:15:14 +01:00
|
|
|
|
2015-03-09 12:29:41 +01:00
|
|
|
/**
|
2015-03-22 16:09:01 +01:00
|
|
|
* How much of the value of the coin should be melted? This amount
|
|
|
|
* includes the fees, so the final amount contributed to the melt is
|
|
|
|
* this value minus the fee for melting the coin. We include the
|
|
|
|
* fee in what is being signed so that we can verify a reserve's
|
|
|
|
* remaining total balance without needing to access the respective
|
|
|
|
* denomination key information each time.
|
2015-03-09 12:29:41 +01:00
|
|
|
*/
|
2015-03-22 16:09:01 +01:00
|
|
|
struct TALER_AmountNBO amount_with_fee;
|
|
|
|
|
2015-03-28 14:22:21 +01:00
|
|
|
/**
|
2016-03-01 15:35:04 +01:00
|
|
|
* Melting fee charged by the exchange. This must match the Exchange's
|
2015-03-28 14:22:21 +01:00
|
|
|
* denomination key's melting fee. If the client puts in an invalid
|
2016-03-01 15:35:04 +01:00
|
|
|
* melting fee (too high or too low) that does not match the Exchange's
|
2015-03-28 14:22:21 +01:00
|
|
|
* denomination key, the melting operation is invalid and will be
|
2016-03-01 15:35:04 +01:00
|
|
|
* rejected by the exchange. The @e amount_with_fee minus the @e
|
2015-03-28 14:22:21 +01:00
|
|
|
* melt_fee is the amount that will be credited to the melting
|
|
|
|
* session.
|
|
|
|
*/
|
|
|
|
struct TALER_AmountNBO melt_fee;
|
2015-03-10 17:00:12 +01:00
|
|
|
|
|
|
|
/**
|
2015-03-28 14:22:21 +01:00
|
|
|
* The coin's public key. This is the value that must have been
|
2016-03-01 15:35:04 +01:00
|
|
|
* signed (blindly) by the Exchange. The deposit request is to be
|
2015-05-16 14:15:34 +02:00
|
|
|
* signed by the corresponding private key (using EdDSA).
|
2015-03-10 17:00:12 +01:00
|
|
|
*/
|
2015-05-16 14:15:34 +02:00
|
|
|
struct TALER_CoinSpendPublicKeyP coin_pub;
|
2015-01-09 18:18:59 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2016-03-01 15:35:04 +01:00
|
|
|
* @brief Format of the block signed by the Exchange in response to a successful
|
|
|
|
* "/refresh/melt" request. Hereby the exchange affirms that all of the
|
|
|
|
* coins were successfully melted. This also commits the exchange to a
|
2015-03-10 16:15:14 +01:00
|
|
|
* particular index to not be revealed during the refresh.
|
2015-01-09 18:18:59 +01:00
|
|
|
*/
|
2015-03-27 19:58:40 +01:00
|
|
|
struct TALER_RefreshMeltConfirmationPS
|
2015-01-09 18:18:59 +01:00
|
|
|
{
|
2015-03-09 12:29:41 +01:00
|
|
|
/**
|
2016-03-01 15:35:04 +01:00
|
|
|
* Purpose is #TALER_SIGNATURE_EXCHANGE_CONFIRM_MELT. Signed
|
|
|
|
* by a `struct TALER_ExchangePublicKeyP` using EdDSA.
|
2015-03-09 12:29:41 +01:00
|
|
|
*/
|
2015-01-09 18:18:59 +01:00
|
|
|
struct GNUNET_CRYPTO_EccSignaturePurpose purpose;
|
2015-03-09 12:29:41 +01:00
|
|
|
|
2015-03-09 13:21:55 +01:00
|
|
|
/**
|
2017-11-27 23:42:17 +01:00
|
|
|
* Commitment made in the /refresh/melt.
|
2015-03-09 13:21:55 +01:00
|
|
|
*/
|
2017-11-27 23:42:17 +01:00
|
|
|
struct TALER_RefreshCommitmentP rc GNUNET_PACKED;
|
2015-03-09 13:21:55 +01:00
|
|
|
|
2015-03-09 12:29:41 +01:00
|
|
|
/**
|
2015-03-28 14:22:21 +01:00
|
|
|
* Index that the client will not have to reveal, in NBO.
|
|
|
|
* Must be smaller than #TALER_CNC_KAPPA.
|
2015-03-09 12:29:41 +01:00
|
|
|
*/
|
2017-11-27 23:42:17 +01:00
|
|
|
uint32_t noreveal_index GNUNET_PACKED;
|
2015-08-14 15:01:11 +02:00
|
|
|
|
2015-01-09 18:18:59 +01:00
|
|
|
};
|
|
|
|
|
2015-03-09 12:29:41 +01:00
|
|
|
|
2015-01-09 18:18:59 +01:00
|
|
|
/**
|
2016-03-01 15:35:04 +01:00
|
|
|
* @brief Information about a signing key of the exchange. Signing keys are used
|
|
|
|
* to sign exchange messages other than coins, i.e. to confirm that a
|
2015-03-15 18:18:14 +01:00
|
|
|
* deposit was successful or that a refresh was accepted.
|
2015-01-09 18:18:59 +01:00
|
|
|
*/
|
2016-03-01 15:35:04 +01:00
|
|
|
struct TALER_ExchangeSigningKeyValidityPS
|
2015-01-09 18:18:59 +01:00
|
|
|
{
|
2015-03-15 18:18:14 +01:00
|
|
|
|
|
|
|
/**
|
2015-03-28 14:22:21 +01:00
|
|
|
* Purpose is #TALER_SIGNATURE_MASTER_SIGNING_KEY_VALIDITY.
|
2015-03-15 18:18:14 +01:00
|
|
|
*/
|
2015-01-09 18:18:59 +01:00
|
|
|
struct GNUNET_CRYPTO_EccSignaturePurpose purpose;
|
2015-03-15 18:18:14 +01:00
|
|
|
|
|
|
|
/**
|
2016-03-01 15:35:04 +01:00
|
|
|
* Master public key of the exchange corresponding to @e signature.
|
|
|
|
* This is the long-term offline master key of the exchange.
|
2015-03-15 18:18:14 +01:00
|
|
|
*/
|
2015-03-27 19:58:40 +01:00
|
|
|
struct TALER_MasterPublicKeyP master_public_key;
|
2015-03-15 18:18:14 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* When does this signing key begin to be valid?
|
|
|
|
*/
|
2015-03-09 12:29:41 +01:00
|
|
|
struct GNUNET_TIME_AbsoluteNBO start;
|
2015-03-15 18:18:14 +01:00
|
|
|
|
|
|
|
/**
|
2015-03-28 14:22:21 +01:00
|
|
|
* When does this signing key expire? Note: This is currently when
|
2016-03-01 15:35:04 +01:00
|
|
|
* the Exchange will definitively stop using it. Signatures made with
|
2015-03-28 14:22:21 +01:00
|
|
|
* the key remain valid until @e end. When checking validity periods,
|
|
|
|
* clients should allow for some overlap between keys and tolerate
|
|
|
|
* the use of either key during the overlap time (due to the
|
|
|
|
* possibility of clock skew).
|
2015-03-15 18:18:14 +01:00
|
|
|
*/
|
2015-03-09 12:29:41 +01:00
|
|
|
struct GNUNET_TIME_AbsoluteNBO expire;
|
2015-03-15 18:18:14 +01:00
|
|
|
|
2015-03-28 14:22:21 +01:00
|
|
|
/**
|
|
|
|
* When do signatures with this signing key become invalid? After
|
|
|
|
* this point, these signatures cannot be used in (legal) disputes
|
2016-03-01 15:35:04 +01:00
|
|
|
* anymore, as the Exchange is then allowed to destroy its side of the
|
2015-03-28 14:22:21 +01:00
|
|
|
* evidence. @e end is expected to be significantly larger than @e
|
|
|
|
* expire (by a year or more).
|
|
|
|
*/
|
|
|
|
struct GNUNET_TIME_AbsoluteNBO end;
|
|
|
|
|
2015-03-15 18:18:14 +01:00
|
|
|
/**
|
2016-03-01 15:35:04 +01:00
|
|
|
* The public online signing key that the exchange will use
|
2015-03-15 18:18:14 +01:00
|
|
|
* between @e start and @e expire.
|
|
|
|
*/
|
2016-03-01 15:35:04 +01:00
|
|
|
struct TALER_ExchangePublicKeyP signkey_pub;
|
2015-01-09 18:18:59 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
|
2015-03-24 17:53:13 +01:00
|
|
|
/**
|
2016-03-01 15:35:04 +01:00
|
|
|
* @brief Signature made by the exchange over the full set of keys, used
|
|
|
|
* to detect cheating exchanges that give out different sets to
|
2015-03-24 17:53:13 +01:00
|
|
|
* different users.
|
|
|
|
*/
|
2016-03-01 15:35:04 +01:00
|
|
|
struct TALER_ExchangeKeySetPS
|
2015-03-24 17:53:13 +01:00
|
|
|
{
|
|
|
|
|
|
|
|
/**
|
2016-03-01 15:35:04 +01:00
|
|
|
* Purpose is #TALER_SIGNATURE_EXCHANGE_KEY_SET. Signed
|
|
|
|
* by a `struct TALER_ExchangePublicKeyP` using EdDSA.
|
2015-03-24 17:53:13 +01:00
|
|
|
*/
|
|
|
|
struct GNUNET_CRYPTO_EccSignaturePurpose purpose;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Time of the key set issue.
|
|
|
|
*/
|
|
|
|
struct GNUNET_TIME_AbsoluteNBO list_issue_date;
|
|
|
|
|
2015-08-11 16:11:22 +02:00
|
|
|
/**
|
2015-04-19 15:10:48 +02:00
|
|
|
* Hash over the various denomination signing keys returned.
|
2015-03-24 17:53:13 +01:00
|
|
|
*/
|
2015-08-14 15:01:11 +02:00
|
|
|
struct GNUNET_HashCode hc GNUNET_PACKED;
|
2015-03-24 17:53:13 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
|
2015-01-09 18:18:59 +01:00
|
|
|
/**
|
2015-03-28 15:53:53 +01:00
|
|
|
* @brief Information about a denomination key. Denomination keys
|
2015-03-15 18:18:14 +01:00
|
|
|
* are used to sign coins of a certain value into existence.
|
2015-01-09 18:18:59 +01:00
|
|
|
*/
|
2015-03-27 19:58:40 +01:00
|
|
|
struct TALER_DenominationKeyValidityPS
|
2015-01-09 18:18:59 +01:00
|
|
|
{
|
2015-03-15 18:18:14 +01:00
|
|
|
|
|
|
|
/**
|
2015-03-28 14:22:21 +01:00
|
|
|
* Purpose is #TALER_SIGNATURE_MASTER_DENOMINATION_KEY_VALIDITY.
|
2015-03-15 18:18:14 +01:00
|
|
|
*/
|
2015-01-09 18:18:59 +01:00
|
|
|
struct GNUNET_CRYPTO_EccSignaturePurpose purpose;
|
2015-03-15 18:18:14 +01:00
|
|
|
|
|
|
|
/**
|
2016-03-01 15:35:04 +01:00
|
|
|
* The long-term offline master key of the exchange that was
|
2015-03-15 18:18:14 +01:00
|
|
|
* used to create @e signature.
|
|
|
|
*/
|
2015-03-27 19:58:40 +01:00
|
|
|
struct TALER_MasterPublicKeyP master;
|
2015-03-15 18:18:14 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Start time of the validity period for this key.
|
|
|
|
*/
|
2015-03-09 12:29:41 +01:00
|
|
|
struct GNUNET_TIME_AbsoluteNBO start;
|
2015-03-15 18:18:14 +01:00
|
|
|
|
|
|
|
/**
|
2016-03-01 15:35:04 +01:00
|
|
|
* The exchange will sign fresh coins between @e start and this time.
|
2015-03-28 14:22:21 +01:00
|
|
|
* @e expire_withdraw will be somewhat larger than @e start to
|
|
|
|
* ensure a sufficiently large anonymity set, while also allowing
|
2016-03-01 15:35:04 +01:00
|
|
|
* the Exchange to limit the financial damage in case of a key being
|
|
|
|
* compromised. Thus, exchanges with low volume are expected to have a
|
|
|
|
* longer withdraw period (@e expire_withdraw - @e start) than exchanges
|
2015-03-28 14:22:21 +01:00
|
|
|
* with high transaction volume. The period may also differ between
|
2016-03-01 15:35:04 +01:00
|
|
|
* types of coins. A exchange may also have a few denomination keys
|
2015-03-28 14:22:21 +01:00
|
|
|
* with the same value with overlapping validity periods, to address
|
|
|
|
* issues such as clock skew.
|
2015-03-15 18:18:14 +01:00
|
|
|
*/
|
2015-03-09 12:29:41 +01:00
|
|
|
struct GNUNET_TIME_AbsoluteNBO expire_withdraw;
|
2015-03-15 18:18:14 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Coins signed with the denomination key must be spent or refreshed
|
|
|
|
* between @e start and this expiration time. After this time, the
|
2016-03-01 15:35:04 +01:00
|
|
|
* exchange will refuse transactions involving this key as it will
|
2015-03-15 18:18:14 +01:00
|
|
|
* "drop" the table with double-spending information (shortly after)
|
|
|
|
* this time. Note that wallets should refresh coins significantly
|
2016-05-02 05:10:40 +02:00
|
|
|
* before this time to be on the safe side. @e expire_deposit must be
|
2015-03-28 14:22:21 +01:00
|
|
|
* significantly larger than @e expire_withdraw (by months or even
|
|
|
|
* years).
|
2015-03-15 18:18:14 +01:00
|
|
|
*/
|
2016-05-02 05:10:40 +02:00
|
|
|
struct GNUNET_TIME_AbsoluteNBO expire_deposit;
|
2015-03-15 18:18:14 +01:00
|
|
|
|
2015-03-28 14:22:21 +01:00
|
|
|
/**
|
|
|
|
* When do signatures with this denomination key become invalid?
|
|
|
|
* After this point, these signatures cannot be used in (legal)
|
2016-03-01 15:35:04 +01:00
|
|
|
* disputes anymore, as the Exchange is then allowed to destroy its side
|
2015-03-28 14:22:21 +01:00
|
|
|
* of the evidence. @e expire_legal is expected to be significantly
|
2016-05-02 05:10:40 +02:00
|
|
|
* larger than @e expire_deposit (by a year or more).
|
2015-03-28 14:22:21 +01:00
|
|
|
*/
|
|
|
|
struct GNUNET_TIME_AbsoluteNBO expire_legal;
|
|
|
|
|
2015-03-15 18:18:14 +01:00
|
|
|
/**
|
|
|
|
* The value of the coins signed with this denomination key.
|
|
|
|
*/
|
2015-03-09 12:29:41 +01:00
|
|
|
struct TALER_AmountNBO value;
|
2015-03-15 18:18:14 +01:00
|
|
|
|
|
|
|
/**
|
2016-03-01 15:35:04 +01:00
|
|
|
* The fee the exchange charges when a coin of this type is withdrawn.
|
2015-03-15 18:18:14 +01:00
|
|
|
* (can be zero).
|
|
|
|
*/
|
2015-03-09 12:29:41 +01:00
|
|
|
struct TALER_AmountNBO fee_withdraw;
|
2015-03-15 18:18:14 +01:00
|
|
|
|
|
|
|
/**
|
2016-03-01 15:35:04 +01:00
|
|
|
* The fee the exchange charges when a coin of this type is deposited.
|
2015-03-15 18:18:14 +01:00
|
|
|
* (can be zero).
|
|
|
|
*/
|
2015-03-09 12:29:41 +01:00
|
|
|
struct TALER_AmountNBO fee_deposit;
|
2015-03-15 18:18:14 +01:00
|
|
|
|
|
|
|
/**
|
2016-03-01 15:35:04 +01:00
|
|
|
* The fee the exchange charges when a coin of this type is refreshed.
|
2015-03-15 18:18:14 +01:00
|
|
|
* (can be zero).
|
|
|
|
*/
|
2015-03-09 12:29:41 +01:00
|
|
|
struct TALER_AmountNBO fee_refresh;
|
2015-03-15 18:18:14 +01:00
|
|
|
|
2016-04-20 01:50:26 +02:00
|
|
|
/**
|
|
|
|
* The fee the exchange charges when a coin of this type is refunded.
|
|
|
|
* (can be zero). Note that refund fees are charged to the customer;
|
|
|
|
* if a refund is given, the deposit fee is also refunded.
|
|
|
|
*/
|
|
|
|
struct TALER_AmountNBO fee_refund;
|
|
|
|
|
2015-03-15 18:27:32 +01:00
|
|
|
/**
|
2015-03-28 14:22:21 +01:00
|
|
|
* Hash code of the denomination public key. (Used to avoid having
|
2015-06-04 10:35:37 +02:00
|
|
|
* the variable-size RSA key in this struct.)
|
2015-03-15 18:27:32 +01:00
|
|
|
*/
|
2015-08-14 15:01:11 +02:00
|
|
|
struct GNUNET_HashCode denom_hash GNUNET_PACKED;
|
2015-03-15 18:27:32 +01:00
|
|
|
|
2015-01-09 18:18:59 +01:00
|
|
|
};
|
|
|
|
|
2015-07-06 10:16:49 +02:00
|
|
|
|
|
|
|
/**
|
2015-07-06 10:25:52 +02:00
|
|
|
* @brief Information signed by an auditor affirming
|
|
|
|
* the master public key and the denomination keys
|
2016-03-01 15:35:04 +01:00
|
|
|
* of a exchange.
|
2015-07-06 10:16:49 +02:00
|
|
|
*/
|
2016-03-01 15:35:04 +01:00
|
|
|
struct TALER_ExchangeKeyValidityPS
|
2015-07-06 10:16:49 +02:00
|
|
|
{
|
|
|
|
|
|
|
|
/**
|
2016-03-01 15:35:04 +01:00
|
|
|
* Purpose is #TALER_SIGNATURE_AUDITOR_EXCHANGE_KEYS.
|
2015-07-06 10:16:49 +02:00
|
|
|
*/
|
|
|
|
struct GNUNET_CRYPTO_EccSignaturePurpose purpose;
|
|
|
|
|
2016-03-21 01:45:53 +01:00
|
|
|
/**
|
2017-09-26 15:05:27 +02:00
|
|
|
* Hash of the auditor's URL (including 0-terminator).
|
2016-03-21 01:45:53 +01:00
|
|
|
*/
|
|
|
|
struct GNUNET_HashCode auditor_url_hash;
|
|
|
|
|
2015-07-06 10:16:49 +02:00
|
|
|
/**
|
2016-03-01 15:35:04 +01:00
|
|
|
* The long-term offline master key of the exchange, affirmed by the
|
2016-03-21 01:45:53 +01:00
|
|
|
* auditor. Hashed string, including 0-terminator.
|
2015-07-06 10:16:49 +02:00
|
|
|
*/
|
|
|
|
struct TALER_MasterPublicKeyP master;
|
|
|
|
|
|
|
|
/**
|
2015-09-19 16:11:31 +02:00
|
|
|
* Start time of the validity period for this key.
|
|
|
|
*/
|
|
|
|
struct GNUNET_TIME_AbsoluteNBO start;
|
|
|
|
|
|
|
|
/**
|
2016-03-01 15:35:04 +01:00
|
|
|
* The exchange will sign fresh coins between @e start and this time.
|
2015-09-19 16:11:31 +02:00
|
|
|
* @e expire_withdraw will be somewhat larger than @e start to
|
|
|
|
* ensure a sufficiently large anonymity set, while also allowing
|
2016-03-01 15:35:04 +01:00
|
|
|
* the Exchange to limit the financial damage in case of a key being
|
|
|
|
* compromised. Thus, exchanges with low volume are expected to have a
|
|
|
|
* longer withdraw period (@e expire_withdraw - @e start) than exchanges
|
2015-09-19 16:11:31 +02:00
|
|
|
* with high transaction volume. The period may also differ between
|
2016-03-01 15:35:04 +01:00
|
|
|
* types of coins. A exchange may also have a few denomination keys
|
2015-09-19 16:11:31 +02:00
|
|
|
* with the same value with overlapping validity periods, to address
|
|
|
|
* issues such as clock skew.
|
|
|
|
*/
|
|
|
|
struct GNUNET_TIME_AbsoluteNBO expire_withdraw;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Coins signed with the denomination key must be spent or refreshed
|
|
|
|
* between @e start and this expiration time. After this time, the
|
2016-03-01 15:35:04 +01:00
|
|
|
* exchange will refuse transactions involving this key as it will
|
2015-09-19 16:11:31 +02:00
|
|
|
* "drop" the table with double-spending information (shortly after)
|
|
|
|
* this time. Note that wallets should refresh coins significantly
|
2016-05-02 05:10:40 +02:00
|
|
|
* before this time to be on the safe side. @e expire_deposit must be
|
2015-09-19 16:11:31 +02:00
|
|
|
* significantly larger than @e expire_withdraw (by months or even
|
|
|
|
* years).
|
|
|
|
*/
|
2016-05-02 05:10:40 +02:00
|
|
|
struct GNUNET_TIME_AbsoluteNBO expire_deposit;
|
2015-09-19 16:11:31 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* When do signatures with this denomination key become invalid?
|
|
|
|
* After this point, these signatures cannot be used in (legal)
|
2016-03-01 15:35:04 +01:00
|
|
|
* disputes anymore, as the Exchange is then allowed to destroy its side
|
2015-09-19 16:11:31 +02:00
|
|
|
* of the evidence. @e expire_legal is expected to be significantly
|
2016-05-02 05:10:40 +02:00
|
|
|
* larger than @e expire_deposit (by a year or more).
|
2015-07-06 10:16:49 +02:00
|
|
|
*/
|
2015-09-19 16:11:31 +02:00
|
|
|
struct GNUNET_TIME_AbsoluteNBO expire_legal;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The value of the coins signed with this denomination key.
|
|
|
|
*/
|
|
|
|
struct TALER_AmountNBO value;
|
|
|
|
|
|
|
|
/**
|
2016-03-01 15:35:04 +01:00
|
|
|
* The fee the exchange charges when a coin of this type is withdrawn.
|
2015-09-19 16:11:31 +02:00
|
|
|
* (can be zero).
|
|
|
|
*/
|
|
|
|
struct TALER_AmountNBO fee_withdraw;
|
|
|
|
|
|
|
|
/**
|
2016-03-01 15:35:04 +01:00
|
|
|
* The fee the exchange charges when a coin of this type is deposited.
|
2015-09-19 16:11:31 +02:00
|
|
|
* (can be zero).
|
|
|
|
*/
|
|
|
|
struct TALER_AmountNBO fee_deposit;
|
|
|
|
|
|
|
|
/**
|
2016-03-01 15:35:04 +01:00
|
|
|
* The fee the exchange charges when a coin of this type is refreshed.
|
2015-09-19 16:11:31 +02:00
|
|
|
* (can be zero).
|
|
|
|
*/
|
|
|
|
struct TALER_AmountNBO fee_refresh;
|
|
|
|
|
2016-04-20 01:50:26 +02:00
|
|
|
/**
|
|
|
|
* The fee the exchange charges when a coin of this type is refreshed.
|
|
|
|
* (can be zero).
|
|
|
|
*/
|
|
|
|
struct TALER_AmountNBO fee_refund;
|
|
|
|
|
2015-09-19 16:11:31 +02:00
|
|
|
/**
|
|
|
|
* Hash code of the denomination public key. (Used to avoid having
|
|
|
|
* the variable-size RSA key in this struct.)
|
|
|
|
*/
|
|
|
|
struct GNUNET_HashCode denom_hash GNUNET_PACKED;
|
2015-07-06 10:16:49 +02:00
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
2015-08-11 14:40:09 +02:00
|
|
|
/**
|
2016-03-01 15:35:04 +01:00
|
|
|
* @brief Information signed by the exchange's master
|
2019-06-08 19:55:18 +02:00
|
|
|
* key affirming the IBAN details for the exchange.
|
2015-08-11 14:40:09 +02:00
|
|
|
*/
|
2016-04-02 20:58:22 +02:00
|
|
|
struct TALER_MasterWireDetailsPS
|
2015-08-11 14:40:09 +02:00
|
|
|
{
|
|
|
|
|
|
|
|
/**
|
2018-04-02 14:24:45 +02:00
|
|
|
* Purpose is #TALER_SIGNATURE_MASTER_WIRE_DETAILS.
|
2015-08-11 14:40:09 +02:00
|
|
|
*/
|
|
|
|
struct GNUNET_CRYPTO_EccSignaturePurpose purpose;
|
|
|
|
|
|
|
|
/**
|
2018-04-02 14:24:45 +02:00
|
|
|
* Hash over the account holder's payto:// URL and
|
2020-01-18 23:19:48 +01:00
|
|
|
* the salt, as done by #TALER_exchange_wire_signature_hash().
|
2015-08-11 14:40:09 +02:00
|
|
|
*/
|
2018-04-02 14:24:45 +02:00
|
|
|
struct GNUNET_HashCode h_wire_details GNUNET_PACKED;
|
2015-08-11 14:40:09 +02:00
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
2017-03-03 20:31:29 +01:00
|
|
|
/**
|
|
|
|
* @brief Information signed by the exchange's master
|
|
|
|
* key stating the wire fee to be paid per wire transfer.
|
|
|
|
*/
|
|
|
|
struct TALER_MasterWireFeePS
|
|
|
|
{
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Purpose is #TALER_SIGNATURE_MASTER_WIRE_FEES.
|
|
|
|
*/
|
|
|
|
struct GNUNET_CRYPTO_EccSignaturePurpose purpose;
|
|
|
|
|
|
|
|
/**
|
2019-06-08 19:55:18 +02:00
|
|
|
* Hash over the wire method (yes, H("x-taler-bank") or H("iban")), in lower
|
2017-03-04 18:09:39 +01:00
|
|
|
* case, including 0-terminator. Used to uniquely identify which
|
|
|
|
* wire method these fees apply to.
|
|
|
|
*/
|
|
|
|
struct GNUNET_HashCode h_wire_method;
|
|
|
|
|
|
|
|
/**
|
2017-03-03 20:31:29 +01:00
|
|
|
* Start date when the fee goes into effect.
|
|
|
|
*/
|
|
|
|
struct GNUNET_TIME_AbsoluteNBO start_date;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* End date when the fee stops being in effect (exclusive)
|
|
|
|
*/
|
|
|
|
struct GNUNET_TIME_AbsoluteNBO end_date;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Fee charged to the merchant per wire transfer.
|
|
|
|
*/
|
|
|
|
struct TALER_AmountNBO wire_fee;
|
|
|
|
|
2017-04-17 14:01:55 +02:00
|
|
|
/**
|
|
|
|
* Closing fee charged when we wire back funds of a reserve.
|
|
|
|
*/
|
|
|
|
struct TALER_AmountNBO closing_fee;
|
|
|
|
|
2017-03-03 20:31:29 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
|
2017-04-07 22:37:00 +02:00
|
|
|
/**
|
|
|
|
* @brief Message confirming that a denomination key was revoked.
|
|
|
|
*/
|
2019-02-23 14:47:44 +01:00
|
|
|
struct TALER_MasterDenominationKeyRevocationPS
|
2017-04-07 22:37:00 +02:00
|
|
|
{
|
|
|
|
/**
|
|
|
|
* Purpose is #TALER_SIGNATURE_MASTER_DENOMINATION_KEY_REVOKED.
|
|
|
|
*/
|
|
|
|
struct GNUNET_CRYPTO_EccSignaturePurpose purpose;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Hash of the denomination key.
|
|
|
|
*/
|
|
|
|
struct GNUNET_HashCode h_denom_pub;
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
2015-11-11 18:09:19 +01:00
|
|
|
/**
|
|
|
|
* @brief Format used to generate the signature on a request to obtain
|
|
|
|
* the wire transfer identifier associated with a deposit.
|
|
|
|
*/
|
|
|
|
struct TALER_DepositTrackPS
|
|
|
|
{
|
|
|
|
/**
|
2016-06-09 19:18:13 +02:00
|
|
|
* Purpose must be #TALER_SIGNATURE_MERCHANT_TRACK_TRANSACTION.
|
2015-11-11 18:09:19 +01:00
|
|
|
*/
|
|
|
|
struct GNUNET_CRYPTO_EccSignaturePurpose purpose;
|
|
|
|
|
|
|
|
/**
|
2017-02-06 15:41:39 +01:00
|
|
|
* Hash over the proposal data of the contract for which this deposit is made.
|
2015-11-11 18:09:19 +01:00
|
|
|
*/
|
2017-05-29 01:15:41 +02:00
|
|
|
struct GNUNET_HashCode h_contract_terms GNUNET_PACKED;
|
2015-11-11 18:09:19 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Hash over the wiring information of the merchant.
|
|
|
|
*/
|
|
|
|
struct GNUNET_HashCode h_wire GNUNET_PACKED;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The Merchant's public key. The deposit inquiry request is to be
|
|
|
|
* signed by the corresponding private key (using EdDSA).
|
|
|
|
*/
|
|
|
|
struct TALER_MerchantPublicKeyP merchant;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The coin's public key. This is the value that must have been
|
2016-03-01 15:35:04 +01:00
|
|
|
* signed (blindly) by the Exchange.
|
2015-11-11 18:09:19 +01:00
|
|
|
*/
|
|
|
|
struct TALER_CoinSpendPublicKeyP coin_pub;
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
2016-04-11 19:54:54 +02:00
|
|
|
/**
|
|
|
|
* @brief Format internally used for packing the detailed information
|
2016-06-09 19:18:13 +02:00
|
|
|
* to generate the signature for /track/transfer signatures.
|
2016-04-11 19:54:54 +02:00
|
|
|
*/
|
|
|
|
struct TALER_WireDepositDetailP
|
|
|
|
{
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Hash of the contract
|
|
|
|
*/
|
2017-05-29 01:15:41 +02:00
|
|
|
struct GNUNET_HashCode h_contract_terms;
|
2016-04-11 19:54:54 +02:00
|
|
|
|
2016-09-26 15:08:00 +02:00
|
|
|
/**
|
|
|
|
* Time when the wire transfer was performed by the exchange.
|
|
|
|
*/
|
|
|
|
struct GNUNET_TIME_AbsoluteNBO execution_time;
|
|
|
|
|
2016-04-11 19:54:54 +02:00
|
|
|
/**
|
|
|
|
* Coin's public key.
|
|
|
|
*/
|
|
|
|
struct TALER_CoinSpendPublicKeyP coin_pub;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Total value of the coin.
|
|
|
|
*/
|
|
|
|
struct TALER_AmountNBO deposit_value;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Fees charged by the exchange for the deposit.
|
|
|
|
*/
|
|
|
|
struct TALER_AmountNBO deposit_fee;
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief Format used to generate the signature for /wire/deposit
|
|
|
|
* replies.
|
|
|
|
*/
|
|
|
|
struct TALER_WireDepositDataPS
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* Purpose header for the signature over the contract with
|
|
|
|
* purpose #TALER_SIGNATURE_EXCHANGE_CONFIRM_WIRE_DEPOSIT.
|
|
|
|
*/
|
|
|
|
struct GNUNET_CRYPTO_EccSignaturePurpose purpose;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Total amount that was transferred.
|
|
|
|
*/
|
|
|
|
struct TALER_AmountNBO total;
|
|
|
|
|
2017-03-04 16:49:33 +01:00
|
|
|
/**
|
|
|
|
* Wire fee that was charged.
|
|
|
|
*/
|
|
|
|
struct TALER_AmountNBO wire_fee;
|
|
|
|
|
2016-04-11 19:54:54 +02:00
|
|
|
/**
|
|
|
|
* Public key of the merchant (for all aggregated transactions).
|
|
|
|
*/
|
|
|
|
struct TALER_MerchantPublicKeyP merchant_pub;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Hash of wire details of the merchant.
|
|
|
|
*/
|
|
|
|
struct GNUNET_HashCode h_wire;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Hash of the individual deposits that were aggregated,
|
|
|
|
* each in the format of a `struct TALER_WireDepositDetailP`.
|
|
|
|
*/
|
|
|
|
struct GNUNET_HashCode h_details;
|
|
|
|
|
|
|
|
};
|
|
|
|
|
2015-11-25 13:37:38 +01:00
|
|
|
/**
|
|
|
|
* The contract sent by the merchant to the wallet.
|
|
|
|
*/
|
2017-02-03 18:32:03 +01:00
|
|
|
struct TALER_ProposalDataPS
|
2015-11-25 13:37:38 +01:00
|
|
|
{
|
|
|
|
/**
|
2017-02-03 18:26:47 +01:00
|
|
|
* Purpose header for the signature over the proposal data
|
|
|
|
* with purpose #TALER_SIGNATURE_MERCHANT_CONTRACT.
|
2015-11-25 13:37:38 +01:00
|
|
|
*/
|
|
|
|
struct GNUNET_CRYPTO_EccSignaturePurpose purpose;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Hash of the JSON contract in UTF-8 including 0-termination,
|
|
|
|
* using JSON_COMPACT | JSON_SORT_KEYS
|
|
|
|
*/
|
2017-02-06 13:54:17 +01:00
|
|
|
struct GNUNET_HashCode hash;
|
2015-11-25 13:37:38 +01:00
|
|
|
};
|
|
|
|
|
2016-10-03 14:08:14 +02:00
|
|
|
/**
|
|
|
|
* Used by merchants to return signed responses to /pay requests.
|
|
|
|
* Currently only used to return 200 OK signed responses.
|
|
|
|
*/
|
|
|
|
struct PaymentResponsePS
|
|
|
|
{
|
2016-10-07 18:21:12 +02:00
|
|
|
/**
|
2020-06-25 10:40:56 +02:00
|
|
|
* Set to #TALER_SIGNATURE_MERCHANT_PAYMENT_OK. Note that
|
|
|
|
* unsuccessful payments are usually proven by some exchange's signature.
|
2016-10-07 18:21:12 +02:00
|
|
|
*/
|
2016-10-03 14:08:14 +02:00
|
|
|
struct GNUNET_CRYPTO_EccSignaturePurpose purpose;
|
2016-10-07 18:21:12 +02:00
|
|
|
|
|
|
|
/**
|
2017-02-04 11:07:15 +01:00
|
|
|
* Hash of the proposal data associated with this confirmation
|
2016-10-07 18:21:12 +02:00
|
|
|
*/
|
2017-05-29 01:15:41 +02:00
|
|
|
struct GNUNET_HashCode h_contract_terms;
|
2016-10-03 14:08:14 +02:00
|
|
|
};
|
|
|
|
|
2015-11-11 18:09:19 +01:00
|
|
|
|
2016-01-17 18:19:09 +01:00
|
|
|
/**
|
2016-03-01 15:35:04 +01:00
|
|
|
* Details affirmed by the exchange about a wire transfer the exchange
|
2016-01-17 18:19:09 +01:00
|
|
|
* claims to have done with respect to a deposit operation.
|
|
|
|
*/
|
|
|
|
struct TALER_ConfirmWirePS
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* Purpose header for the signature over the contract with
|
2016-03-01 15:35:04 +01:00
|
|
|
* purpose #TALER_SIGNATURE_EXCHANGE_CONFIRM_WIRE.
|
2016-01-17 18:19:09 +01:00
|
|
|
*/
|
|
|
|
struct GNUNET_CRYPTO_EccSignaturePurpose purpose;
|
|
|
|
|
2016-01-20 18:03:44 +01:00
|
|
|
/**
|
|
|
|
* Hash over the wiring information of the merchant.
|
|
|
|
*/
|
|
|
|
struct GNUNET_HashCode h_wire GNUNET_PACKED;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Hash over the contract for which this deposit is made.
|
|
|
|
*/
|
2017-05-29 01:15:41 +02:00
|
|
|
struct GNUNET_HashCode h_contract_terms GNUNET_PACKED;
|
2016-01-20 18:03:44 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Raw value (binary encoding) of the wire transfer subject.
|
|
|
|
*/
|
2016-01-20 18:50:19 +01:00
|
|
|
struct TALER_WireTransferIdentifierRawP wtid;
|
2016-01-20 18:03:44 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The coin's public key. This is the value that must have been
|
2016-03-01 15:35:04 +01:00
|
|
|
* signed (blindly) by the Exchange.
|
2016-01-20 18:03:44 +01:00
|
|
|
*/
|
|
|
|
struct TALER_CoinSpendPublicKeyP coin_pub;
|
|
|
|
|
|
|
|
/**
|
2016-03-01 15:35:04 +01:00
|
|
|
* When did the exchange execute this transfer? Note that the
|
2016-01-20 18:03:44 +01:00
|
|
|
* timestamp may not be exactly the same on the wire, i.e.
|
|
|
|
* because the wire has a different timezone or resolution.
|
|
|
|
*/
|
|
|
|
struct GNUNET_TIME_AbsoluteNBO execution_time;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The contribution of @e coin_pub to the total transfer volume.
|
|
|
|
* This is the value of the deposit minus the fee.
|
|
|
|
*/
|
|
|
|
struct TALER_AmountNBO coin_contribution;
|
|
|
|
|
2016-01-17 18:19:09 +01:00
|
|
|
};
|
2015-11-11 18:09:19 +01:00
|
|
|
|
2017-03-19 07:50:16 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Signed data to request that a coin should be refunded as part of
|
2020-01-18 23:49:37 +01:00
|
|
|
* the "emergency" /recoup protocol. The refund will go back to the bank
|
2017-03-19 07:50:16 +01:00
|
|
|
* account that created the reserve.
|
|
|
|
*/
|
2020-01-18 23:49:37 +01:00
|
|
|
struct TALER_RecoupRequestPS
|
2017-03-19 07:50:16 +01:00
|
|
|
{
|
|
|
|
/**
|
2020-01-18 23:49:37 +01:00
|
|
|
* Purpose is #TALER_SIGNATURE_WALLET_COIN_RECOUP
|
2017-03-19 07:50:16 +01:00
|
|
|
*/
|
|
|
|
struct GNUNET_CRYPTO_EccSignaturePurpose purpose;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Public key of the coin to be refunded.
|
|
|
|
*/
|
|
|
|
struct TALER_CoinSpendPublicKeyP coin_pub;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Hash of the denomination public key of the coin.
|
|
|
|
*/
|
|
|
|
struct GNUNET_HashCode h_denom_pub;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Blinding factor that was used to withdraw the coin.
|
|
|
|
*/
|
|
|
|
struct TALER_DenominationBlindingKeyP coin_blind;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Response by which the exchange affirms that it will
|
2020-01-18 23:49:37 +01:00
|
|
|
* refund a coin as part of the emergency /recoup
|
|
|
|
* protocol. The recoup will go back to the bank
|
2017-03-19 07:50:16 +01:00
|
|
|
* account that created the reserve.
|
|
|
|
*/
|
2020-01-18 23:49:37 +01:00
|
|
|
struct TALER_RecoupConfirmationPS
|
2017-03-19 07:50:16 +01:00
|
|
|
{
|
|
|
|
|
|
|
|
/**
|
2020-01-18 23:49:37 +01:00
|
|
|
* Purpose is #TALER_SIGNATURE_EXCHANGE_CONFIRM_RECOUP
|
2017-03-19 07:50:16 +01:00
|
|
|
*/
|
|
|
|
struct GNUNET_CRYPTO_EccSignaturePurpose purpose;
|
|
|
|
|
|
|
|
/**
|
2020-01-18 23:49:37 +01:00
|
|
|
* When did the exchange receive the recoup request?
|
2017-04-03 16:40:31 +02:00
|
|
|
* Indirectly determines when the wire transfer is (likely)
|
|
|
|
* to happen.
|
2017-03-19 07:50:16 +01:00
|
|
|
*/
|
2017-04-03 16:40:31 +02:00
|
|
|
struct GNUNET_TIME_AbsoluteNBO timestamp;
|
2017-03-19 07:50:16 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* How much of the coin's value will the exchange transfer?
|
|
|
|
* (Needed in case the coin was partially spent.)
|
|
|
|
*/
|
2020-01-18 23:49:37 +01:00
|
|
|
struct TALER_AmountNBO recoup_amount;
|
2017-03-19 07:50:16 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Public key of the coin.
|
|
|
|
*/
|
|
|
|
struct TALER_CoinSpendPublicKeyP coin_pub;
|
|
|
|
|
|
|
|
/**
|
2020-01-18 23:49:37 +01:00
|
|
|
* Public key of the reserve that will receive the recoup.
|
2017-03-19 07:50:16 +01:00
|
|
|
*/
|
2017-04-01 23:43:55 +02:00
|
|
|
struct TALER_ReservePublicKeyP reserve_pub;
|
2017-03-19 07:50:16 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
|
2019-07-22 13:28:48 +02:00
|
|
|
/**
|
|
|
|
* Response by which the exchange affirms that it will refund a refreshed coin
|
2020-01-18 23:49:37 +01:00
|
|
|
* as part of the emergency /recoup protocol. The recoup will go back to the
|
2019-07-22 13:28:48 +02:00
|
|
|
* old coin's balance.
|
|
|
|
*/
|
2020-01-18 23:49:37 +01:00
|
|
|
struct TALER_RecoupRefreshConfirmationPS
|
2019-07-22 13:28:48 +02:00
|
|
|
{
|
|
|
|
|
|
|
|
/**
|
2020-01-18 23:49:37 +01:00
|
|
|
* Purpose is #TALER_SIGNATURE_EXCHANGE_CONFIRM_RECOUP_REFRESH
|
2019-07-22 13:28:48 +02:00
|
|
|
*/
|
|
|
|
struct GNUNET_CRYPTO_EccSignaturePurpose purpose;
|
|
|
|
|
|
|
|
/**
|
2020-01-18 23:49:37 +01:00
|
|
|
* When did the exchange receive the recoup request?
|
2019-07-22 13:28:48 +02:00
|
|
|
* Indirectly determines when the wire transfer is (likely)
|
|
|
|
* to happen.
|
|
|
|
*/
|
|
|
|
struct GNUNET_TIME_AbsoluteNBO timestamp;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* How much of the coin's value will the exchange transfer?
|
|
|
|
* (Needed in case the coin was partially spent.)
|
|
|
|
*/
|
2020-01-18 23:49:37 +01:00
|
|
|
struct TALER_AmountNBO recoup_amount;
|
2019-07-22 13:28:48 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Public key of the refreshed coin.
|
|
|
|
*/
|
|
|
|
struct TALER_CoinSpendPublicKeyP coin_pub;
|
|
|
|
|
|
|
|
/**
|
2020-01-18 23:49:37 +01:00
|
|
|
* Public key of the old coin that will receive the recoup.
|
2019-07-22 13:28:48 +02:00
|
|
|
*/
|
|
|
|
struct TALER_CoinSpendPublicKeyP old_coin_pub;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
2017-04-03 16:40:31 +02:00
|
|
|
/**
|
|
|
|
* Response by which the exchange affirms that it has
|
|
|
|
* closed a reserve and send back the funds.
|
|
|
|
*/
|
|
|
|
struct TALER_ReserveCloseConfirmationPS
|
|
|
|
{
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Purpose is #TALER_SIGNATURE_EXCHANGE_RESERVE_CLOSED
|
|
|
|
*/
|
|
|
|
struct GNUNET_CRYPTO_EccSignaturePurpose purpose;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* When did the exchange initiate the wire transfer.
|
|
|
|
*/
|
|
|
|
struct GNUNET_TIME_AbsoluteNBO timestamp;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* How much did the exchange send?
|
|
|
|
*/
|
|
|
|
struct TALER_AmountNBO closing_amount;
|
|
|
|
|
2017-04-18 21:05:27 +02:00
|
|
|
/**
|
|
|
|
* How much did the exchange charge for closing the reserve?
|
|
|
|
*/
|
|
|
|
struct TALER_AmountNBO closing_fee;
|
|
|
|
|
2017-04-03 16:40:31 +02:00
|
|
|
/**
|
2020-01-18 23:49:37 +01:00
|
|
|
* Public key of the reserve that received the recoup.
|
2017-04-03 16:40:31 +02:00
|
|
|
*/
|
|
|
|
struct TALER_ReservePublicKeyP reserve_pub;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Hash of the receiver's bank account.
|
|
|
|
*/
|
|
|
|
struct GNUNET_HashCode h_wire;
|
2017-04-19 14:15:48 +02:00
|
|
|
|
|
|
|
/**
|
2017-04-20 21:38:02 +02:00
|
|
|
* Wire transfer subject.
|
2017-04-19 14:15:48 +02:00
|
|
|
*/
|
2017-04-20 21:38:02 +02:00
|
|
|
struct TALER_WireTransferIdentifierRawP wtid;
|
2017-04-03 16:40:31 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
|
2017-07-05 14:11:42 +02:00
|
|
|
/**
|
|
|
|
* Used by the merchant to confirm with a signature that the refund has
|
|
|
|
* been successfully done. Even though the frontend doesn't usually do crypto,
|
|
|
|
* this signature may turn useful in court.
|
|
|
|
*/
|
|
|
|
struct TALER_MerchantRefundConfirmationPS
|
|
|
|
{
|
|
|
|
/**
|
2017-11-30 11:21:51 +01:00
|
|
|
* Set to #TALER_SIGNATURE_MERCHANT_REFUND_OK.
|
2017-07-05 14:11:42 +02:00
|
|
|
*/
|
|
|
|
struct GNUNET_CRYPTO_EccSignaturePurpose purpose;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Hashed order id; in case frontend wants to check it.
|
2017-11-30 11:21:51 +01:00
|
|
|
* Hashed without the 0-termination.
|
2017-07-05 14:11:42 +02:00
|
|
|
*/
|
|
|
|
struct GNUNET_HashCode h_order_id GNUNET_PACKED;
|
|
|
|
|
|
|
|
};
|
|
|
|
|
2018-01-04 13:47:03 +01:00
|
|
|
/**
|
|
|
|
* Used by the merchant to confirm to the frontend that
|
|
|
|
* the user did a payment replay with the current browser session.
|
|
|
|
*/
|
|
|
|
struct TALER_MerchantPaySessionSigPS
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* Set to #TALER_SIGNATURE_MERCHANT_PAY_SESSION.
|
|
|
|
*/
|
|
|
|
struct GNUNET_CRYPTO_EccSignaturePurpose purpose;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Hashed order id.
|
|
|
|
* Hashed without the 0-termination.
|
|
|
|
*/
|
|
|
|
struct GNUNET_HashCode h_order_id GNUNET_PACKED;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Hashed session id.
|
|
|
|
* Hashed without the 0-termination.
|
|
|
|
*/
|
|
|
|
struct GNUNET_HashCode h_session_id GNUNET_PACKED;
|
|
|
|
|
|
|
|
};
|
|
|
|
|
2019-11-17 17:04:23 +01:00
|
|
|
|
2015-01-09 18:18:59 +01:00
|
|
|
GNUNET_NETWORK_STRUCT_END
|
|
|
|
|
2015-01-08 18:37:20 +01:00
|
|
|
#endif
|