summaryrefslogtreecommitdiff
path: root/src/util
diff options
context:
space:
mode:
authorThien-Thi Nguyen <ttn@gnuvola.org>2022-04-17 04:53:17 -0400
committerThien-Thi Nguyen <ttn@gnuvola.org>2022-04-17 04:53:17 -0400
commita7ad5a07e2eb80d942fcfd49a41330146ec36e45 (patch)
treecd31aaf48d89d6a894f8040a2095771258610cf0 /src/util
parentba69c32712344a7483641d3f5c010672ab1e32e6 (diff)
downloadexchange-a7ad5a07e2eb80d942fcfd49a41330146ec36e45.tar.gz
exchange-a7ad5a07e2eb80d942fcfd49a41330146ec36e45.tar.bz2
exchange-a7ad5a07e2eb80d942fcfd49a41330146ec36e45.zip
Add abstractions: TALER_merchant_pay_{sign,verify}
Additionally, this change removes ‘struct TALER_PaymentResponsePS’ from the public API. * src/include/taler_crypto_lib.h (TALER_merchant_pay_sign): New func decl. (TALER_merchant_pay_verify): New func decl. * src/include/taler_signatures.h (struct TALER_PaymentResponsePS): Delete. * src/util/merchant_signatures.c (struct TALER_PaymentResponsePS): Move here from taler_signatures.h. (TALER_merchant_pay_sign): New func. (TALER_merchant_pay_verify): New func.
Diffstat (limited to 'src/util')
-rw-r--r--src/util/merchant_signatures.c54
1 files changed, 54 insertions, 0 deletions
diff --git a/src/util/merchant_signatures.c b/src/util/merchant_signatures.c
index 4223b82ba..0a7489f71 100644
--- a/src/util/merchant_signatures.c
+++ b/src/util/merchant_signatures.c
@@ -175,4 +175,58 @@ TALER_merchant_wire_signature_make (
}
+/**
+ * Used by merchants to return signed responses to /pay requests.
+ * Currently only used to return 200 OK signed responses.
+ */
+struct TALER_PaymentResponsePS
+{
+ /**
+ * Set to #TALER_SIGNATURE_MERCHANT_PAYMENT_OK. Note that
+ * unsuccessful payments are usually proven by some exchange's signature.
+ */
+ struct GNUNET_CRYPTO_EccSignaturePurpose purpose;
+
+ /**
+ * Hash of the proposal data associated with this confirmation
+ */
+ struct TALER_PrivateContractHashP h_contract_terms;
+};
+
+void
+TALER_merchant_pay_sign (
+ const struct TALER_PrivateContractHashP *h_contract_terms,
+ const struct TALER_MerchantPrivateKeyP *merch_priv,
+ struct GNUNET_CRYPTO_EddsaSignature *merch_sig)
+{
+ struct TALER_PaymentResponsePS mr = {
+ .purpose.purpose = htonl (TALER_SIGNATURE_MERCHANT_PAYMENT_OK),
+ .purpose.size = htonl (sizeof (mr)),
+ .h_contract_terms = *h_contract_terms
+ };
+
+ GNUNET_CRYPTO_eddsa_sign (&merch_priv->eddsa_priv,
+ &mr,
+ merch_sig);
+}
+
+enum GNUNET_GenericReturnValue
+TALER_merchant_pay_verify (
+ const struct TALER_PrivateContractHashP *h_contract_terms,
+ const struct TALER_MerchantPublicKeyP *merchant_pub,
+ const struct TALER_MerchantSignatureP *merchant_sig)
+{
+ struct TALER_PaymentResponsePS pr = {
+ .purpose.purpose = htonl (TALER_SIGNATURE_MERCHANT_PAYMENT_OK),
+ .purpose.size = htonl (sizeof (pr)),
+ .h_contract_terms = *h_contract_terms
+ };
+
+ return
+ GNUNET_CRYPTO_eddsa_verify (TALER_SIGNATURE_MERCHANT_PAYMENT_OK,
+ &pr,
+ &merchant_sig->eddsa_sig,
+ &merchant_pub->eddsa_pub);
+}
+
/* end of merchant_signatures.c */