diff options
author | Özgür Kesim <oec-taler@kesim.org> | 2021-11-10 17:25:11 +0100 |
---|---|---|
committer | Özgür Kesim <oec-taler@kesim.org> | 2021-11-10 17:27:49 +0100 |
commit | 7c510388b9d789c35fc05bead7677b3de52a318e (patch) | |
tree | 43750109ca78184551dff403c881aa7e205152f9 /src/include | |
parent | 77bab625607514a628dfda101e55c7d57f6b623d (diff) |
age restriction progress 2/n
Signed-off-by: Özgür Kesim <oec-taler@kesim.org>
Diffstat (limited to 'src/include')
-rw-r--r-- | src/include/taler_amount_lib.h | 3 | ||||
-rw-r--r-- | src/include/taler_crypto_lib.h | 60 | ||||
-rw-r--r-- | src/include/taler_extensions.h | 35 |
3 files changed, 83 insertions, 15 deletions
diff --git a/src/include/taler_amount_lib.h b/src/include/taler_amount_lib.h index c1f42e473..c6d2f474e 100644 --- a/src/include/taler_amount_lib.h +++ b/src/include/taler_amount_lib.h @@ -21,6 +21,9 @@ #ifndef TALER_AMOUNT_LIB_H #define TALER_AMOUNT_LIB_H +#include <stdint.h> +#include "gnunet/gnunet_common.h" + #ifdef __cplusplus extern "C" { diff --git a/src/include/taler_crypto_lib.h b/src/include/taler_crypto_lib.h index c521541fe..7261d4de5 100644 --- a/src/include/taler_crypto_lib.h +++ b/src/include/taler_crypto_lib.h @@ -280,6 +280,37 @@ struct TALER_MasterSignatureP struct GNUNET_CRYPTO_EddsaSignature eddsa_signature; }; +/* + * @brief Type of a list of age groups, represented as bit mask. + * + * The bits set in the mask mark the edges at the beginning of a next age + * group. F.e. for the age groups + * 0-7, 8-9, 10-11, 12-14, 14-15, 16-17, 18-21, 21-* + * the following bits are set: + * + * 31 24 16 8 0 + * | | | | | + * oooooooo oo1oo1o1 o1o1o1o1 ooooooo1 + * + * A value of 0 means that the exchange does not support the extension for + * age-restriction. + */ +struct TALER_AgeMask +{ + uint32_t mask; +}; + +/** + * @brief Age restriction commitment of a coin. + */ +struct TALER_AgeHash +{ + /** + * The commitment is a SHA-256 hash code. + */ + struct GNUNET_ShortHashCode shash; +}; + /** * @brief Type of public keys for Taler coins. The same key material is used @@ -292,6 +323,10 @@ struct TALER_CoinSpendPublicKeyP */ struct GNUNET_CRYPTO_EddsaPublicKey eddsa_pub; + /* + * If age restriction applies to the coin, it must come with a hash of the age commitment + */ + struct TALER_AgeHash age_commitment_hash; }; @@ -346,18 +381,6 @@ struct TALER_RefreshCommitmentP /** - * Age restriction commitment of a coin. - */ -struct TALER_AgeHash -{ - /** - * The commitment is a SHA-256 hash code. - */ - struct GNUNET_ShortHashCode shash; -}; - - -/** * Token used for access control to the merchant's unclaimed * orders. */ @@ -569,7 +592,7 @@ struct TALER_DenominationPublicKey /** * Age restriction mask used for the key. */ - uint32_t age_mask; + struct TALER_AgeMask age_mask; /** * Details, depending on @e cipher. @@ -631,6 +654,11 @@ struct TALER_CoinPublicInfo struct TALER_DenominationHash denom_pub_hash; /** + * Hash of the age commitment. + */ + struct TALER_AgeHash age_commitment_hash; + + /** * (Unblinded) signature over @e coin_pub with @e denom_pub, * which demonstrates that the coin is valid. */ @@ -880,7 +908,7 @@ TALER_blinded_denom_sig_cmp ( */ void TALER_denom_priv_to_pub (const struct TALER_DenominationPrivateKey *denom_priv, - uint32_t age_mask, + const struct TALER_AgeMask age_mask, struct TALER_DenominationPublicKey *denom_pub); @@ -929,7 +957,6 @@ TALER_coin_ev_hash (const void *coin_ev, /** * Compute the hash of a coin. - * FIXME-Oec: add age restriction hash here! * * @param coin_pub public key of the coin * @param[out] coin_h where to write the hash @@ -1020,6 +1047,9 @@ struct TALER_FreshCoin */ struct TALER_CoinSpendPrivateKeyP coin_priv; + /** + * FIXME-Oec: Age-verification vector, as pointer: Dyn alloc! + */ }; diff --git a/src/include/taler_extensions.h b/src/include/taler_extensions.h new file mode 100644 index 000000000..c22a23b86 --- /dev/null +++ b/src/include/taler_extensions.h @@ -0,0 +1,35 @@ +/* + This file is part of TALER + Copyright (C) 2014-2021 Taler Systems SA + + 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 + TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/> +*/ +/** + * @file include/taler_extensions.h + * @brief Interface for extensions + * @author Özgür Kesim + */ +#ifndef TALER_EXTENSIONS_H +#define TALER_EXTENSIONS_H + +/** + * + * @param cfg + * @param[out] mask for age restriction + * @return Error if extension for age restriction was set but age groups were + * invalid, OK otherwise. + */ +enum GNUNET_GenericReturnValue +TALER_get_age_mask (const struct GNUNET_CONFIGURATION_Handle *cfg, struct + TALER_AgeMask *mask); + +#endif |