gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-docs] branch master updated: added protocol changes to the mercha


From: gnunet
Subject: [taler-docs] branch master updated: added protocol changes to the merchant API
Date: Sun, 17 Oct 2021 13:07:27 +0200

This is an automated email from the git hooks/post-receive script.

oec pushed a commit to branch master
in repository docs.

The following commit(s) were added to refs/heads/master by this push:
     new 2d7ebea  added protocol changes to the merchant API
     new 400e586  Merge branch 'master' of ssh://git.taler.net/docs
2d7ebea is described below

commit 2d7ebea9c5e3474350bf7d82b41d411ef3319e49
Author: Özgür Kesim <oec-taler@kesim.org>
AuthorDate: Sun Oct 17 13:06:53 2021 +0200

    added protocol changes to the merchant API
---
 design-documents/024-age-restriction.rst | 104 ++++++++++++++++++++++++++++---
 1 file changed, 96 insertions(+), 8 deletions(-)

diff --git a/design-documents/024-age-restriction.rst 
b/design-documents/024-age-restriction.rst
index efa140c..48a258d 100644
--- a/design-documents/024-age-restriction.rst
+++ b/design-documents/024-age-restriction.rst
@@ -103,8 +103,8 @@ TODO: Summarize the design based on the five functions 
``Commit()``,
 Özgür and Christian is published.
 
 
-Changes in the Exchange
-^^^^^^^^^^^^^^^^^^^^^^^
+Changes in the Exchange API
+^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 The necessary changes in the exchange involve
 
@@ -292,7 +292,7 @@ Refresh - reveal phase
 During the reveal phase -- that is upon POST to ``/refreshes/$RCH/reveal`` --
 the client has to provide the original age commitment of the old coin (i.e. the
 vector of public keys), iff the corresponding denomination had support for age
-restriction.  The size of the vector ist defined by the Exchange implictely as
+restriction.  The size of the vector ist defined by the Exchange implicetly as
 the amount of age groups defined in the field ``.age_groups`` of the
 ``ExtensionAgeRestriction``.
 
@@ -304,7 +304,7 @@ the amount of age groups defined in the field 
``.age_groups`` of the
       // Iff the corresponding denomination has support for age restriction,
       // the client MUST provide the original age commitment, i.e. the vector
       // of public keys.
-      // The size of the vector ist defined by the Exchange implictely as the
+      // The size of the vector ist defined by the Exchange implicetly as the
       // amount of age groups defined in the field ``.age_groups`` of the
       // ``ExtensionAgeRestriction``.
       old_age_commitment?: EddsaPublicKey[];
@@ -342,7 +342,8 @@ purchase.
    ...
    }
 
-Again, the exchange can now check the validity of the coin by evaluating
+Again, the exchange can now check the validity of the coin with age restriction
+by evaluating
 
 .. math::
    \text{FDH}_N(C_p, h_a)\; \stackrel{?}{=}\; \left(\sigma_C\right)^{e} 
\;\;\text{mod}N
@@ -357,10 +358,97 @@ TODO: maybe rename this field into something more opaque, 
like
 
 
 
-Changes in the Merchant
-^^^^^^^^^^^^^^^^^^^^^^^
+Changes in the Merchant API
+^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-TODO: Spending protocol
+
+Claiming the order
+------------------
+
+If an order requires a minimum age, the merchant MUST express that required
+minimum age in response to order claim by the wallet, that is, a POST to
+``[/instances/$INSTANCE]/orders/$ORDER_ID/claim``.
+
+The object ``ContractTerms`` is extended by an optional field
+``required_minimum_age`` that can be any integer greater than 0.  In reality
+this value will not be smaller than, say, 8, and not larger than, say, 21.
+
+.. ts:def:: ContractTerms
+
+   interface ContractTerms {
+   ...
+   
+   // If the order requires a minimum age greater than 0, this field is set
+   // to the integer value of that age.  In reality this value will not be
+   // smaller than, say, 8, and not larger than, say, 21.
+   required_minimum_age?: Integer;
+
+   ...
+   }
+
+By sending the contract term with the field ``required_minimum_age`` set to an
+non-zero integer value, the merchant implicetly signals that it understands the
+extension ``age_restriction.v1`` for age restriction from the exchange.
+
+
+Making the payment
+------------------
+
+If the ``ContractTerms`` had a non-zero value in field
+``required_minimum_age``, the wallet has to provide evidence of that minimum
+age
+
+#. by using coins which are of denominations that have age support enabled
+
+#. *and*  ―for each coin― it has the right private key of the restricted age
+   commitment to the age group into which the required minimum age falls (i.e.
+   a non-empty entry at the right index in vector of EdDSA keys, see above).
+
+#. and signs the required minimum age with each coin's private key
+   corresponding to the age group,
+
+#. and sends ―for each coin― the complete age commitment and the signature to
+   the merchant.
+
+
+For doing so, the object ``CoinPaySig`` used within a ``PayRequest`` during a
+POST to ``[/instances/$INSTANCE]/orders/$ORDER_ID/pay`` is extended as follows:
+
+.. ts:def:: CoinPaySig
+
+   export interface CoinPaySig {
+   ...
+
+   // If a minimum age was required by the order and the wallet had coins that
+   // are at least commited to the corresponding age group, this is the
+   // signature of the minimum age as a string, using the private key to the
+   // corresponding age group.
+   minimum_age_sig?: EddsaSignature;
+
+   // If a minium age was required by the order, this is age commitment bound
+   // to the coin, i.e. the complete vector of EdDSA public keys, one for each
+   // age group (as defined by the exchange).
+   age_commitment?: EddsaPublicKey[];
+
+   }
+
+
+The merchant can now verify
+
+#. the validity of each (age restricted) coin by evaluating
+
+      .. math:: \text{FDH}_N(C_p, h_a)\; \stackrel{?}{=}\; 
\left(\sigma_C\right)^{e} \;\;\text{mod}N
+
+   Again, :math:`C_p` is the EdDSA public key of a coin, :math:`\sigma_C` is 
its
+   signature, :math:`\langle e, N \rangle` is the RSA public key of the
+   denomination and :math:`h_a` is the SHA512 hash value of the vector in
+   ``age_commitment``.
+
+#. the minimum age requirement by checking the signature in ``minimum_age_sig``
+   against the public key ``age_commitment[k]`` of the corresponding age group,
+   say, ``k``.  (The minimum age must fall into the age group at index ``k`` as
+   defined by the exchange)
+   
 
 
 Changes in the Wallet

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]