Add abstraction: TALER_merchant_contract_sign

Additionally, this change removes ‘struct TALER_ProposalDataPS’
from the public API.

* src/include/taler_crypto_lib.h
  (TALER_merchant_contract_sign): New func decl.

* src/include/taler_signatures.h
  (struct TALER_ProposalDataPS): Delete.

* src/util/merchant_signatures.c
  (struct TALER_ProposalDataPS): Move here from taler_signatures.h.
  (TALER_merchant_contract_sign): New func.
This commit is contained in:
Thien-Thi Nguyen 2022-04-17 19:53:17 -04:00
parent a7ad5a07e2
commit 509657bfef
No known key found for this signature in database
GPG Key ID: 670322244C807502
3 changed files with 52 additions and 19 deletions

View File

@ -4601,6 +4601,20 @@ TALER_merchant_pay_verify (
const struct TALER_MerchantSignatureP *merchant_sig); const struct TALER_MerchantSignatureP *merchant_sig);
/**
* Sign contract sent by the merchant to the wallet.
*
* @param h_contract_terms hash of the contract terms
* @param merch_priv private key to sign with
* @param[out] merch_sig where to write the signature
*/
void
TALER_merchant_contract_sign (
const struct TALER_PrivateContractHashP *h_contract_terms,
const struct TALER_MerchantPrivateKeyP *merch_priv,
struct GNUNET_CRYPTO_EddsaSignature *merch_sig);
/* **************** /management/extensions offline signing **************** */ /* **************** /management/extensions offline signing **************** */
/** /**

View File

@ -422,25 +422,6 @@ struct TALER_DepositTrackPS
}; };
/**
* The contract sent by the merchant to the wallet.
*/
struct TALER_ProposalDataPS
{
/**
* Purpose header for the signature over the proposal data
* with purpose #TALER_SIGNATURE_MERCHANT_CONTRACT.
*/
struct GNUNET_CRYPTO_EccSignaturePurpose purpose;
/**
* Hash of the JSON contract in UTF-8 including 0-termination,
* using JSON_COMPACT | JSON_SORT_KEYS
*/
struct TALER_PrivateContractHashP hash;
};
GNUNET_NETWORK_STRUCT_END GNUNET_NETWORK_STRUCT_END
#endif #endif

View File

@ -229,4 +229,42 @@ TALER_merchant_pay_verify (
&merchant_pub->eddsa_pub); &merchant_pub->eddsa_pub);
} }
/**
* The contract sent by the merchant to the wallet.
*/
struct TALER_ProposalDataPS
{
/**
* Purpose header for the signature over the proposal data
* with purpose #TALER_SIGNATURE_MERCHANT_CONTRACT.
*/
struct GNUNET_CRYPTO_EccSignaturePurpose purpose;
/**
* Hash of the JSON contract in UTF-8 including 0-termination,
* using JSON_COMPACT | JSON_SORT_KEYS
*/
struct TALER_PrivateContractHashP hash;
};
void
TALER_merchant_contract_sign (
const struct TALER_PrivateContractHashP *h_contract_terms,
const struct TALER_MerchantPrivateKeyP *merch_priv,
struct GNUNET_CRYPTO_EddsaSignature *merch_sig)
{
struct TALER_ProposalDataPS pdps = {
.purpose.purpose = htonl (TALER_SIGNATURE_MERCHANT_CONTRACT),
.purpose.size = htonl (sizeof (pdps)),
.hash = *h_contract_terms
};
GNUNET_CRYPTO_eddsa_sign (&merch_priv->eddsa_priv,
&pdps,
merch_sig);
}
// NB: "TALER_merchant_contract_verify" not (yet?) needed / not defined.
/* end of merchant_signatures.c */ /* end of merchant_signatures.c */