add one more p2p signature

This commit is contained in:
Christian Grothoff 2022-03-22 12:11:40 +01:00
parent 6868b78692
commit 6505f69869
No known key found for this signature in database
GPG Key ID: 939E6BE1E29FC3CC
3 changed files with 140 additions and 1 deletions

View File

@ -195,7 +195,7 @@ struct TALER_TransferPublicKeyP
/**
* @brief Type of transfer public keys used during refresh
* @brief Type of transfer private keys used during refresh
* operations.
*/
struct TALER_TransferPrivateKeyP
@ -207,6 +207,32 @@ struct TALER_TransferPrivateKeyP
};
/**
* @brief Type of public keys used for contract
* encryption.
*/
struct TALER_ContractDiffiePublicP
{
/**
* Taler uses ECDHE for contract encryption.
*/
struct GNUNET_CRYPTO_EcdhePublicKey ecdhe_pub;
};
/**
* @brief Type of private keys used for contract
* encryption.
*/
struct TALER_ContractDiffiePrivateP
{
/**
* Taler uses ECDHE for contract encryption.
*/
struct GNUNET_CRYPTO_EcdhePrivateKey ecdhe_priv;
};
/**
* @brief Type of online public keys used by the exchange to sign
* messages.
@ -3427,6 +3453,32 @@ TALER_exchange_offline_denom_validity_verify (
const struct TALER_MasterSignatureP *master_sig);
// FIXME: document
void
TALER_exchange_offline_partner_details_sign (
const struct TALER_MasterPublicKeyP *partner_pub,
struct GNUNET_TIME_Timestamp start_date,
struct GNUNET_TIME_Timestamp end_date,
struct GNUNET_TIME_Relative wad_frequency,
const struct TALER_Amount *wad_fee,
const char *partner_base_url,
const struct TALER_MasterPrivateKeyP *master_priv,
struct TALER_MasterSignatureP *master_sig);
// FIXME: document
enum GNUNET_GenericReturnValue
TALER_exchange_offline_partner_details_verify (
const struct TALER_MasterPublicKeyP *partner_pub,
struct GNUNET_TIME_Timestamp start_date,
struct GNUNET_TIME_Timestamp end_date,
struct GNUNET_TIME_Relative wad_frequency,
const struct TALER_Amount *wad_fee,
const char *partner_base_url,
const struct TALER_MasterPublicKeyP *master_pub,
const struct TALER_MasterSignatureP *master_sig);
/**
* Create security module EdDSA signature.
*

View File

@ -97,6 +97,11 @@
*/
#define TALER_SIGNATURE_MASTER_EXTENSION 1031
/**
* Signature affirming a partner configuration for wads.
*/
#define TALER_SIGNATURE_MASTER_PARTNER_DETAILS 1032
/*********************************************/
/* Exchange online signatures (with signing key) */
/*********************************************/

View File

@ -888,4 +888,86 @@ TALER_exchange_wire_signature_make (
}
/**
* Message signed by account to merge a purse into a reserve.
*/
struct TALER_PartnerConfigurationPS
{
/**
* Purpose is #TALER_SIGNATURE_MASTER_PARNTER_DETAILS
*/
struct GNUNET_CRYPTO_EccSignaturePurpose purpose;
struct TALER_MasterPublicKeyP partner_pub;
struct GNUNET_TIME_TimestampNBO start_date;
struct GNUNET_TIME_TimestampNBO end_date;
struct GNUNET_TIME_RelativeNBO wad_frequency;
struct TALER_AmountNBO wad_fee;
struct GNUNET_HashCode h_url;
};
void
TALER_exchange_offline_partner_details_sign (
const struct TALER_MasterPublicKeyP *partner_pub,
struct GNUNET_TIME_Timestamp start_date,
struct GNUNET_TIME_Timestamp end_date,
struct GNUNET_TIME_Relative wad_frequency,
const struct TALER_Amount *wad_fee,
const char *partner_base_url,
const struct TALER_MasterPrivateKeyP *master_priv,
struct TALER_MasterSignatureP *master_sig)
{
struct TALER_PartnerConfigurationPS wd = {
.purpose.purpose = htonl (TALER_SIGNATURE_MASTER_PARTNER_DETAILS),
.purpose.size = htonl (sizeof (wd)),
.partner_pub = *partner_pub,
.start_date = GNUNET_TIME_timestamp_hton (start_date),
.end_date = GNUNET_TIME_timestamp_hton (end_date),
.wad_frequency = GNUNET_TIME_relative_hton (wad_frequency),
};
GNUNET_CRYPTO_hash (partner_base_url,
strlen (partner_base_url) + 1,
&wd.h_url);
TALER_amount_hton (&wd.wad_fee,
wad_fee);
GNUNET_CRYPTO_eddsa_sign (&master_priv->eddsa_priv,
&wd,
&master_sig->eddsa_signature);
}
enum GNUNET_GenericReturnValue
TALER_exchange_offline_partner_details_verify (
const struct TALER_MasterPublicKeyP *partner_pub,
struct GNUNET_TIME_Timestamp start_date,
struct GNUNET_TIME_Timestamp end_date,
struct GNUNET_TIME_Relative wad_frequency,
const struct TALER_Amount *wad_fee,
const char *partner_base_url,
const struct TALER_MasterPublicKeyP *master_pub,
const struct TALER_MasterSignatureP *master_sig)
{
struct TALER_PartnerConfigurationPS wd = {
.purpose.purpose = htonl (TALER_SIGNATURE_MASTER_PARTNER_DETAILS),
.purpose.size = htonl (sizeof (wd)),
.partner_pub = *partner_pub,
.start_date = GNUNET_TIME_timestamp_hton (start_date),
.end_date = GNUNET_TIME_timestamp_hton (end_date),
.wad_frequency = GNUNET_TIME_relative_hton (wad_frequency),
};
GNUNET_CRYPTO_hash (partner_base_url,
strlen (partner_base_url) + 1,
&wd.h_url);
TALER_amount_hton (&wd.wad_fee,
wad_fee);
return GNUNET_CRYPTO_eddsa_verify (TALER_SIGNATURE_MASTER_PARTNER_DETAILS,
&wd,
&master_sig->eddsa_signature,
&master_pub->eddsa_pub);
}
/* end of offline_signatures.c */