[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-donau] branch master updated: [build] comment files in "json" dir
From: |
gnunet |
Subject: |
[taler-donau] branch master updated: [build] comment files in "json" directory to compile |
Date: |
Mon, 13 Nov 2023 19:59:23 +0100 |
This is an automated email from the git hooks/post-receive script.
pius-loosli pushed a commit to branch master
in repository donau.
The following commit(s) were added to refs/heads/master by this push:
new 90956cd [build] comment files in "json" directory to compile
90956cd is described below
commit 90956cdecb97c50b85e20e460460d64dd619a2c2
Author: Pius Loosli <loosp2@bfh.ch>
AuthorDate: Mon Nov 13 19:58:08 2023 +0100
[build] comment files in "json" directory to compile
---
src/json/json_helper.c | 2658 ++++++++++++++++++++++++------------------------
src/json/json_pack.c | 558 +++++-----
2 files changed, 1608 insertions(+), 1608 deletions(-)
diff --git a/src/json/json_helper.c b/src/json/json_helper.c
index a254876..9d2b405 100644
--- a/src/json/json_helper.c
+++ b/src/json/json_helper.c
@@ -32,1335 +32,1335 @@
* @param cipher_s input string
* @return numeric cipher value
*/
-static enum TALER_DenominationCipher
-string_to_cipher (const char *cipher_s)
-{
- if ((0 == strcasecmp (cipher_s,
- "RSA")) ||
- (0 == strcasecmp (cipher_s,
- "RSA+age_restricted")))
- return TALER_DENOMINATION_RSA;
- if ((0 == strcasecmp (cipher_s,
- "CS")) ||
- (0 == strcasecmp (cipher_s,
- "CS+age_restricted")))
- return TALER_DENOMINATION_CS;
- return TALER_DENOMINATION_INVALID;
-}
-
-
-json_t *
-TALER_JSON_from_amount (const struct TALER_Amount *amount)
-{
- char *amount_str = TALER_amount_to_string (amount);
-
- GNUNET_assert (NULL != amount_str);
- {
- json_t *j = json_string (amount_str);
-
- GNUNET_free (amount_str);
- return j;
- }
-}
-
-
-/**
- * Parse given JSON object to Amount
- *
- * @param cls closure, expected currency, or NULL
- * @param root the json object representing data
- * @param[out] spec where to write the data
- * @return #GNUNET_OK upon successful parsing; #GNUNET_SYSERR upon error
- */
-static enum GNUNET_GenericReturnValue
-parse_amount (void *cls,
- json_t *root,
- struct GNUNET_JSON_Specification *spec)
-{
- const char *currency = cls;
- struct TALER_Amount *r_amount = spec->ptr;
-
- (void) cls;
- if (! json_is_string (root))
- {
- GNUNET_break_op (0);
- return GNUNET_SYSERR;
- }
- if (GNUNET_OK !=
- TALER_string_to_amount (json_string_value (root),
- r_amount))
- {
- GNUNET_break_op (0);
- return GNUNET_SYSERR;
- }
- if ( (NULL != currency) &&
- (0 !=
- strcasecmp (currency,
- r_amount->currency)) )
- {
- GNUNET_break_op (0);
- GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
- "Expected currency `%s', but amount used currency `%s' in
field `%s'\n",
- currency,
- r_amount->currency,
- spec->field);
- return GNUNET_SYSERR;
- }
- return GNUNET_OK;
-}
-
-
-struct GNUNET_JSON_Specification
-TALER_JSON_spec_amount (const char *name,
- const char *currency,
- struct TALER_Amount *r_amount)
-{
- struct GNUNET_JSON_Specification ret = {
- .parser = &parse_amount,
- .cleaner = NULL,
- .cls = (void *) currency,
- .field = name,
- .ptr = r_amount,
- .ptr_size = 0,
- .size_ptr = NULL
- };
-
- GNUNET_assert (NULL != currency);
- return ret;
-}
-
-
-struct GNUNET_JSON_Specification
-TALER_JSON_spec_amount_any (const char *name,
- struct TALER_Amount *r_amount)
-{
- struct GNUNET_JSON_Specification ret = {
- .parser = &parse_amount,
- .cleaner = NULL,
- .cls = NULL,
- .field = name,
- .ptr = r_amount,
- .ptr_size = 0,
- .size_ptr = NULL
- };
-
- return ret;
-}
-
-
-/**
- * Parse given JSON object to currency spec.
- *
- * @param cls closure, NULL
- * @param root the json object representing data
- * @param[out] spec where to write the data
- * @return #GNUNET_OK upon successful parsing; #GNUNET_SYSERR upon error
- */
-static enum GNUNET_GenericReturnValue
-parse_cspec (void *cls,
- json_t *root,
- struct GNUNET_JSON_Specification *spec)
-{
- struct TALER_CurrencySpecification *r_cspec = spec->ptr;
- const char *name;
- const char *currency;
- const char *decimal_separator;
- uint32_t fid;
- uint32_t fnd;
- uint32_t ftzd;
- const json_t *map;
- struct GNUNET_JSON_Specification gspec[] = {
- GNUNET_JSON_spec_string ("currency",
- ¤cy),
- GNUNET_JSON_spec_string ("name",
- &name),
- GNUNET_JSON_spec_string ("decimal_separator",
- &decimal_separator),
- GNUNET_JSON_spec_uint32 ("num_fractional_input_digits",
- &fid),
- GNUNET_JSON_spec_uint32 ("num_fractional_normal_digits",
- &fnd),
- GNUNET_JSON_spec_uint32 ("num_fractional_trailing_zero_digits",
- &ftzd),
- GNUNET_JSON_spec_bool ("is_currency_name_leading",
- &r_cspec->is_currency_name_leading),
- GNUNET_JSON_spec_object_const ("alt_unit_names",
- &map),
- GNUNET_JSON_spec_end ()
- };
- const char *emsg;
- unsigned int eline;
-
- (void) cls;
- memset (r_cspec->currency,
- 0,
- sizeof (r_cspec->currency));
- if (GNUNET_OK !=
- GNUNET_JSON_parse (root,
- gspec,
- &emsg,
- &eline))
- {
- GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
- "Failed to parse %s at %u: %s\n",
- spec[eline].field,
- eline,
- emsg);
- GNUNET_break_op (0);
- return GNUNET_SYSERR;
- }
- if (strlen (currency) >= TALER_CURRENCY_LEN)
- {
- GNUNET_break_op (0);
- return GNUNET_SYSERR;
- }
- if ( (fid > TALER_AMOUNT_FRAC_LEN) ||
- (fnd > TALER_AMOUNT_FRAC_LEN) ||
- (ftzd > TALER_AMOUNT_FRAC_LEN) )
- {
- GNUNET_break_op (0);
- return GNUNET_SYSERR;
- }
- if (GNUNET_OK !=
- TALER_check_currency (currency))
- {
- GNUNET_break_op (0);
- return GNUNET_SYSERR;
- }
- strcpy (r_cspec->currency,
- currency);
- if (GNUNET_OK !=
- TALER_check_currency_scale_map (map))
- {
- GNUNET_break_op (0);
- return GNUNET_SYSERR;
- }
- r_cspec->name = GNUNET_strdup (name);
- r_cspec->decimal_separator = GNUNET_strdup (decimal_separator);
- r_cspec->map_alt_unit_names = json_incref ((json_t *) map);
- return GNUNET_OK;
-}
-
-
-/**
- * Cleanup data left from parsing encrypted contract.
- *
- * @param cls closure, NULL
- * @param[out] spec where to free the data
- */
-static void
-clean_cspec (void *cls,
- struct GNUNET_JSON_Specification *spec)
-{
- struct TALER_CurrencySpecification *cspec = spec->ptr;
-
- (void) cls;
- GNUNET_free (cspec->name);
- GNUNET_free (cspec->decimal_separator);
- json_decref (cspec->map_alt_unit_names);
-}
-
-
-struct GNUNET_JSON_Specification
-TALER_JSON_spec_currency_specification (
- const char *name,
- struct TALER_CurrencySpecification *r_cspec)
-{
- struct GNUNET_JSON_Specification ret = {
- .parser = &parse_cspec,
- .cleaner = &clean_cspec,
- .cls = NULL,
- .field = name,
- .ptr = r_cspec,
- .ptr_size = 0,
- .size_ptr = NULL
- };
-
- return ret;
-}
-
-
-static enum GNUNET_GenericReturnValue
-parse_denomination_group (void *cls,
- json_t *root,
- struct GNUNET_JSON_Specification *spec)
-{
- struct TALER_DenominationGroup *group = spec->ptr;
- const char *cipher;
- const char *currency = cls;
- bool age_mask_missing = false;
- bool has_age_restricted_suffix = false;
- struct GNUNET_JSON_Specification gspec[] = {
- GNUNET_JSON_spec_string ("cipher",
- &cipher),
- TALER_JSON_spec_amount ("value",
- currency,
- &group->value),
- TALER_JSON_SPEC_DENOM_FEES ("fee",
- currency,
- &group->fees),
- GNUNET_JSON_spec_mark_optional (
- GNUNET_JSON_spec_uint32 ("age_mask",
- &group->age_mask.bits),
- &age_mask_missing),
- GNUNET_JSON_spec_end ()
- };
- const char *emsg;
- unsigned int eline;
-
- if (GNUNET_OK !=
- GNUNET_JSON_parse (root,
- gspec,
- &emsg,
- &eline))
- {
- GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
- "Failed to parse %s at %u: %s\n",
- spec[eline].field,
- eline,
- emsg);
- GNUNET_break_op (0);
- return GNUNET_SYSERR;
- }
-
- group->cipher = string_to_cipher (cipher);
- if (TALER_DENOMINATION_INVALID == group->cipher)
- {
- GNUNET_break_op (0);
- return GNUNET_SYSERR;
- }
-
- /* age_mask and suffix must be consistent */
- has_age_restricted_suffix =
- (NULL != strstr (cipher, "+age_restricted"));
- if (has_age_restricted_suffix && age_mask_missing)
- {
- GNUNET_break_op (0);
- return GNUNET_SYSERR;
- }
-
- if (age_mask_missing)
- group->age_mask.bits = 0;
-
- return GNUNET_OK;
-}
-
-
-struct GNUNET_JSON_Specification
-TALER_JSON_spec_denomination_group (const char *name,
- const char *currency,
- struct TALER_DenominationGroup *group)
-{
- struct GNUNET_JSON_Specification ret = {
- .cls = (void *) currency,
- .parser = &parse_denomination_group,
- .cleaner = NULL,
- .field = name,
- .ptr = group,
- .ptr_size = sizeof(*group),
- .size_ptr = NULL,
- };
-
- return ret;
-}
-
-
-/**
- * Parse given JSON object to an encrypted contract.
- *
- * @param cls closure, NULL
- * @param root the json object representing data
- * @param[out] spec where to write the data
- * @return #GNUNET_OK upon successful parsing; #GNUNET_SYSERR upon error
- */
-static enum GNUNET_GenericReturnValue
-parse_econtract (void *cls,
- json_t *root,
- struct GNUNET_JSON_Specification *spec)
-{
- struct TALER_EncryptedContract *econtract = spec->ptr;
- struct GNUNET_JSON_Specification ispec[] = {
- GNUNET_JSON_spec_varsize ("econtract",
- &econtract->econtract,
- &econtract->econtract_size),
- GNUNET_JSON_spec_fixed_auto ("econtract_sig",
- &econtract->econtract_sig),
- GNUNET_JSON_spec_fixed_auto ("contract_pub",
- &econtract->contract_pub),
- GNUNET_JSON_spec_end ()
- };
- const char *emsg;
- unsigned int eline;
-
- (void) cls;
- if (GNUNET_OK !=
- GNUNET_JSON_parse (root,
- ispec,
- &emsg,
- &eline))
- {
- GNUNET_break_op (0);
- return GNUNET_SYSERR;
- }
- return GNUNET_OK;
-}
-
-
-/**
- * Cleanup data left from parsing encrypted contract.
- *
- * @param cls closure, NULL
- * @param[out] spec where to free the data
- */
-static void
-clean_econtract (void *cls,
- struct GNUNET_JSON_Specification *spec)
-{
- struct TALER_EncryptedContract *econtract = spec->ptr;
-
- (void) cls;
- GNUNET_free (econtract->econtract);
-}
-
-
-struct GNUNET_JSON_Specification
-TALER_JSON_spec_econtract (const char *name,
- struct TALER_EncryptedContract *econtract)
-{
- struct GNUNET_JSON_Specification ret = {
- .parser = &parse_econtract,
- .cleaner = &clean_econtract,
- .cls = NULL,
- .field = name,
- .ptr = econtract,
- .ptr_size = 0,
- .size_ptr = NULL
- };
-
- return ret;
-}
-
-
-/**
- * Parse given JSON object to an age commitmnet
- *
- * @param cls closure, NULL
- * @param root the json object representing data
- * @param[out] spec where to write the data
- * @return #GNUNET_OK upon successful parsing; #GNUNET_SYSERR upon error
- */
-static enum GNUNET_GenericReturnValue
-parse_age_commitment (void *cls,
- json_t *root,
- struct GNUNET_JSON_Specification *spec)
-{
- struct TALER_AgeCommitment *age_commitment = spec->ptr;
- json_t *pk;
- unsigned int idx;
- size_t num;
-
- (void) cls;
- if ( (NULL == root) ||
- (! json_is_array (root)))
- {
- GNUNET_break_op (0);
- return GNUNET_SYSERR;
- }
-
- num = json_array_size (root);
- if (32 <= num || 0 == num)
- {
- GNUNET_break_op (0);
- return GNUNET_SYSERR;
- }
-
- age_commitment->num = num;
- age_commitment->keys =
- GNUNET_new_array (num,
- struct TALER_AgeCommitmentPublicKeyP);
-
- json_array_foreach (root, idx, pk) {
- const char *emsg;
- unsigned int eline;
- struct GNUNET_JSON_Specification pkspec[] = {
- GNUNET_JSON_spec_fixed_auto (
- NULL,
- &age_commitment->keys[idx].pub),
- GNUNET_JSON_spec_end ()
- };
-
- if (GNUNET_OK !=
- GNUNET_JSON_parse (pk,
- pkspec,
- &emsg,
- &eline))
- {
- GNUNET_break_op (0);
- GNUNET_JSON_parse_free (spec);
- return GNUNET_SYSERR;
- }
- };
-
- return GNUNET_OK;
-}
-
-
-/**
- * Cleanup data left fom parsing age commitment
- *
- * @param cls closure, NULL
- * @param[out] spec where to free the data
- */
-static void
-clean_age_commitment (void *cls,
- struct GNUNET_JSON_Specification *spec)
-{
- struct TALER_AgeCommitment *age_commitment = spec->ptr;
-
- (void) cls;
-
- if (NULL == age_commitment ||
- NULL == age_commitment->keys)
- return;
-
- age_commitment->num = 0;
- GNUNET_free (age_commitment->keys);
-}
-
-
-struct GNUNET_JSON_Specification
-TALER_JSON_spec_age_commitment (const char *name,
- struct TALER_AgeCommitment *age_commitment)
-{
- struct GNUNET_JSON_Specification ret = {
- .parser = &parse_age_commitment,
- .cleaner = &clean_age_commitment,
- .cls = NULL,
- .field = name,
- .ptr = age_commitment,
- .ptr_size = 0,
- .size_ptr = NULL
- };
-
- return ret;
-}
-
-
-/**
- * Parse given JSON object to denomination public key.
- *
- * @param cls closure, NULL
- * @param root the json object representing data
- * @param[out] spec where to write the data
- * @return #GNUNET_OK upon successful parsing; #GNUNET_SYSERR upon error
- */
-static enum GNUNET_GenericReturnValue
-parse_denom_pub (void *cls,
- json_t *root,
- struct GNUNET_JSON_Specification *spec)
-{
- struct TALER_DenominationPublicKey *denom_pub = spec->ptr;
- const char *cipher;
- bool age_mask_missing = false;
- struct GNUNET_JSON_Specification dspec[] = {
- GNUNET_JSON_spec_string ("cipher",
- &cipher),
- GNUNET_JSON_spec_mark_optional (
- GNUNET_JSON_spec_uint32 ("age_mask",
- &denom_pub->age_mask.bits),
- &age_mask_missing),
- GNUNET_JSON_spec_end ()
- };
- const char *emsg;
- unsigned int eline;
-
- (void) cls;
- if (GNUNET_OK !=
- GNUNET_JSON_parse (root,
- dspec,
- &emsg,
- &eline))
- {
- GNUNET_break_op (0);
- return GNUNET_SYSERR;
- }
-
- if (age_mask_missing)
- denom_pub->age_mask.bits = 0;
-
- denom_pub->cipher = string_to_cipher (cipher);
- switch (denom_pub->cipher)
- {
- case TALER_DENOMINATION_RSA:
- {
- struct GNUNET_JSON_Specification ispec[] = {
- GNUNET_JSON_spec_rsa_public_key (
- "rsa_public_key",
- &denom_pub->details.rsa_public_key),
- GNUNET_JSON_spec_end ()
- };
-
- if (GNUNET_OK !=
- GNUNET_JSON_parse (root,
- ispec,
- &emsg,
- &eline))
- {
- GNUNET_break_op (0);
- return GNUNET_SYSERR;
- }
- return GNUNET_OK;
- }
- case TALER_DENOMINATION_CS:
- {
- struct GNUNET_JSON_Specification ispec[] = {
- GNUNET_JSON_spec_fixed ("cs_public_key",
- &denom_pub->details.cs_public_key,
- sizeof (denom_pub->details.cs_public_key)),
- GNUNET_JSON_spec_end ()
- };
-
- if (GNUNET_OK !=
- GNUNET_JSON_parse (root,
- ispec,
- &emsg,
- &eline))
- {
- GNUNET_break_op (0);
- return GNUNET_SYSERR;
- }
- return GNUNET_OK;
- }
- default:
- GNUNET_break_op (0);
- return GNUNET_SYSERR;
- }
-}
-
-
-/**
- * Cleanup data left from parsing denomination public key.
- *
- * @param cls closure, NULL
- * @param[out] spec where to free the data
- */
-static void
-clean_denom_pub (void *cls,
- struct GNUNET_JSON_Specification *spec)
-{
- struct TALER_DenominationPublicKey *denom_pub = spec->ptr;
-
- (void) cls;
- TALER_denom_pub_free (denom_pub);
-}
-
-
-struct GNUNET_JSON_Specification
-TALER_JSON_spec_denom_pub (const char *field,
- struct TALER_DenominationPublicKey *pk)
-{
- struct GNUNET_JSON_Specification ret = {
- .parser = &parse_denom_pub,
- .cleaner = &clean_denom_pub,
- .field = field,
- .ptr = pk
- };
-
- pk->cipher = TALER_DENOMINATION_INVALID;
- return ret;
-}
-
-
-/**
- * Parse given JSON object partially into a denomination public key.
- *
- * Depending on the cipher in cls, it parses the corresponding public key type.
- *
- * @param cls closure, enum TALER_DenominationCipher
- * @param root the json object representing data
- * @param[out] spec where to write the data
- * @return #GNUNET_OK upon successful parsing; #GNUNET_SYSERR upon error
- */
-static enum GNUNET_GenericReturnValue
-parse_denom_pub_cipher (void *cls,
- json_t *root,
- struct GNUNET_JSON_Specification *spec)
-{
- struct TALER_DenominationPublicKey *denom_pub = spec->ptr;
- enum TALER_DenominationCipher cipher =
- (enum TALER_DenominationCipher) (long) cls;
- const char *emsg;
- unsigned int eline;
-
- switch (cipher)
- {
- case TALER_DENOMINATION_RSA:
- {
- struct GNUNET_JSON_Specification ispec[] = {
- GNUNET_JSON_spec_rsa_public_key (
- "rsa_pub",
- &denom_pub->details.rsa_public_key),
- GNUNET_JSON_spec_end ()
- };
-
- if (GNUNET_OK !=
- GNUNET_JSON_parse (root,
- ispec,
- &emsg,
- &eline))
- {
- GNUNET_break_op (0);
- return GNUNET_SYSERR;
- }
- denom_pub->cipher = cipher;
- return GNUNET_OK;
- }
- case TALER_DENOMINATION_CS:
- {
- struct GNUNET_JSON_Specification ispec[] = {
- GNUNET_JSON_spec_fixed ("cs_pub",
- &denom_pub->details.cs_public_key,
- sizeof (denom_pub->details.cs_public_key)),
- GNUNET_JSON_spec_end ()
- };
-
- if (GNUNET_OK !=
- GNUNET_JSON_parse (root,
- ispec,
- &emsg,
- &eline))
- {
- GNUNET_break_op (0);
- return GNUNET_SYSERR;
- }
- denom_pub->cipher = cipher;
- return GNUNET_OK;
- }
- default:
- GNUNET_break_op (0);
- denom_pub->cipher = 0;
- return GNUNET_SYSERR;
- }
-}
-
-
-struct GNUNET_JSON_Specification
-TALER_JSON_spec_denom_pub_cipher (const char *field,
- enum TALER_DenominationCipher cipher,
- struct TALER_DenominationPublicKey *pk)
-{
- struct GNUNET_JSON_Specification ret = {
- .parser = &parse_denom_pub_cipher,
- .cleaner = &clean_denom_pub,
- .field = field,
- .cls = (void *) cipher,
- .ptr = pk
- };
-
- return ret;
-}
-
-
-/**
- * Parse given JSON object to denomination signature.
- *
- * @param cls closure, NULL
- * @param root the json object representing data
- * @param[out] spec where to write the data
- * @return #GNUNET_OK upon successful parsing; #GNUNET_SYSERR upon error
- */
-static enum GNUNET_GenericReturnValue
-parse_denom_sig (void *cls,
- json_t *root,
- struct GNUNET_JSON_Specification *spec)
-{
- struct TALER_DenominationSignature *denom_sig = spec->ptr;
- const char *cipher;
- struct GNUNET_JSON_Specification dspec[] = {
- GNUNET_JSON_spec_string ("cipher",
- &cipher),
- GNUNET_JSON_spec_end ()
- };
- const char *emsg;
- unsigned int eline;
-
- (void) cls;
- if (GNUNET_OK !=
- GNUNET_JSON_parse (root,
- dspec,
- &emsg,
- &eline))
- {
- GNUNET_break_op (0);
- return GNUNET_SYSERR;
- }
- denom_sig->cipher = string_to_cipher (cipher);
- switch (denom_sig->cipher)
- {
- case TALER_DENOMINATION_RSA:
- {
- struct GNUNET_JSON_Specification ispec[] = {
- GNUNET_JSON_spec_rsa_signature (
- "rsa_signature",
- &denom_sig->details.rsa_signature),
- GNUNET_JSON_spec_end ()
- };
-
- if (GNUNET_OK !=
- GNUNET_JSON_parse (root,
- ispec,
- &emsg,
- &eline))
- {
- GNUNET_break_op (0);
- return GNUNET_SYSERR;
- }
- return GNUNET_OK;
- }
- case TALER_DENOMINATION_CS:
- {
- struct GNUNET_JSON_Specification ispec[] = {
- GNUNET_JSON_spec_fixed_auto ("cs_signature_r",
- &denom_sig->details.cs_signature.r_point),
- GNUNET_JSON_spec_fixed_auto ("cs_signature_s",
-
&denom_sig->details.cs_signature.s_scalar),
- GNUNET_JSON_spec_end ()
- };
-
- if (GNUNET_OK !=
- GNUNET_JSON_parse (root,
- ispec,
- &emsg,
- &eline))
- {
- GNUNET_break_op (0);
- return GNUNET_SYSERR;
- }
- return GNUNET_OK;
- }
- default:
- GNUNET_break_op (0);
- return GNUNET_SYSERR;
- }
-}
-
-
-/**
- * Cleanup data left from parsing denomination public key.
- *
- * @param cls closure, NULL
- * @param[out] spec where to free the data
- */
-static void
-clean_denom_sig (void *cls,
- struct GNUNET_JSON_Specification *spec)
-{
- struct TALER_DenominationSignature *denom_sig = spec->ptr;
-
- (void) cls;
- TALER_denom_sig_free (denom_sig);
-}
-
-
-struct GNUNET_JSON_Specification
-TALER_JSON_spec_denom_sig (const char *field,
- struct TALER_DenominationSignature *sig)
-{
- struct GNUNET_JSON_Specification ret = {
- .parser = &parse_denom_sig,
- .cleaner = &clean_denom_sig,
- .field = field,
- .ptr = sig
- };
-
- sig->cipher = TALER_DENOMINATION_INVALID;
- return ret;
-}
-
-
-/**
- * Parse given JSON object to blinded denomination signature.
- *
- * @param cls closure, NULL
- * @param root the json object representing data
- * @param[out] spec where to write the data
- * @return #GNUNET_OK upon successful parsing; #GNUNET_SYSERR upon error
- */
-static enum GNUNET_GenericReturnValue
-parse_blinded_denom_sig (void *cls,
- json_t *root,
- struct GNUNET_JSON_Specification *spec)
-{
- struct TALER_BlindedDenominationSignature *denom_sig = spec->ptr;
- const char *cipher;
- struct GNUNET_JSON_Specification dspec[] = {
- GNUNET_JSON_spec_string ("cipher",
- &cipher),
- GNUNET_JSON_spec_end ()
- };
- const char *emsg;
- unsigned int eline;
-
- (void) cls;
- if (GNUNET_OK !=
- GNUNET_JSON_parse (root,
- dspec,
- &emsg,
- &eline))
- {
- GNUNET_break_op (0);
- return GNUNET_SYSERR;
- }
- denom_sig->cipher = string_to_cipher (cipher);
- switch (denom_sig->cipher)
- {
- case TALER_DENOMINATION_RSA:
- {
- struct GNUNET_JSON_Specification ispec[] = {
- GNUNET_JSON_spec_rsa_signature (
- "blinded_rsa_signature",
- &denom_sig->details.blinded_rsa_signature),
- GNUNET_JSON_spec_end ()
- };
-
- if (GNUNET_OK !=
- GNUNET_JSON_parse (root,
- ispec,
- &emsg,
- &eline))
- {
- GNUNET_break_op (0);
- return GNUNET_SYSERR;
- }
- return GNUNET_OK;
- }
- case TALER_DENOMINATION_CS:
- {
- struct GNUNET_JSON_Specification ispec[] = {
- GNUNET_JSON_spec_uint32 ("b",
- &denom_sig->details.blinded_cs_answer.b),
- GNUNET_JSON_spec_fixed_auto ("s",
- &denom_sig->details.blinded_cs_answer.
- s_scalar),
- GNUNET_JSON_spec_end ()
- };
-
- if (GNUNET_OK !=
- GNUNET_JSON_parse (root,
- ispec,
- &emsg,
- &eline))
- {
- GNUNET_break_op (0);
- return GNUNET_SYSERR;
- }
- return GNUNET_OK;
- }
- break;
- default:
- GNUNET_break_op (0);
- return GNUNET_SYSERR;
- }
-}
-
-
-/**
- * Cleanup data left from parsing denomination public key.
- *
- * @param cls closure, NULL
- * @param[out] spec where to free the data
- */
-static void
-clean_blinded_denom_sig (void *cls,
- struct GNUNET_JSON_Specification *spec)
-{
- struct TALER_BlindedDenominationSignature *denom_sig = spec->ptr;
-
- (void) cls;
- TALER_blinded_denom_sig_free (denom_sig);
-}
-
-
-struct GNUNET_JSON_Specification
-TALER_JSON_spec_blinded_denom_sig (
- const char *field,
- struct TALER_BlindedDenominationSignature *sig)
-{
- struct GNUNET_JSON_Specification ret = {
- .parser = &parse_blinded_denom_sig,
- .cleaner = &clean_blinded_denom_sig,
- .field = field,
- .ptr = sig
- };
-
- sig->cipher = TALER_DENOMINATION_INVALID;
- return ret;
-}
-
-
-/**
- * Parse given JSON object to blinded planchet.
- *
- * @param cls closure, NULL
- * @param root the json object representing data
- * @param[out] spec where to write the data
- * @return #GNUNET_OK upon successful parsing; #GNUNET_SYSERR upon error
- */
-static enum GNUNET_GenericReturnValue
-parse_blinded_planchet (void *cls,
- json_t *root,
- struct GNUNET_JSON_Specification *spec)
-{
- struct TALER_BlindedPlanchet *blinded_planchet = spec->ptr;
- const char *cipher;
- struct GNUNET_JSON_Specification dspec[] = {
- GNUNET_JSON_spec_string ("cipher",
- &cipher),
- GNUNET_JSON_spec_end ()
- };
- const char *emsg;
- unsigned int eline;
-
- (void) cls;
- if (GNUNET_OK !=
- GNUNET_JSON_parse (root,
- dspec,
- &emsg,
- &eline))
- {
- GNUNET_break_op (0);
- return GNUNET_SYSERR;
- }
- blinded_planchet->cipher = string_to_cipher (cipher);
- switch (blinded_planchet->cipher)
- {
- case TALER_DENOMINATION_RSA:
- {
- struct GNUNET_JSON_Specification ispec[] = {
- GNUNET_JSON_spec_varsize (
- "rsa_blinded_planchet",
- &blinded_planchet->details.rsa_blinded_planchet.blinded_msg,
- &blinded_planchet->details.rsa_blinded_planchet.blinded_msg_size),
- GNUNET_JSON_spec_end ()
- };
-
- if (GNUNET_OK !=
- GNUNET_JSON_parse (root,
- ispec,
- &emsg,
- &eline))
- {
- GNUNET_break_op (0);
- return GNUNET_SYSERR;
- }
- return GNUNET_OK;
- }
- case TALER_DENOMINATION_CS:
- {
- struct GNUNET_JSON_Specification ispec[] = {
- GNUNET_JSON_spec_fixed_auto (
- "cs_nonce",
- &blinded_planchet->details.cs_blinded_planchet.nonce),
- GNUNET_JSON_spec_fixed_auto (
- "cs_blinded_c0",
- &blinded_planchet->details.cs_blinded_planchet.c[0]),
- GNUNET_JSON_spec_fixed_auto (
- "cs_blinded_c1",
- &blinded_planchet->details.cs_blinded_planchet.c[1]),
- GNUNET_JSON_spec_end ()
- };
-
- if (GNUNET_OK !=
- GNUNET_JSON_parse (root,
- ispec,
- &emsg,
- &eline))
- {
- GNUNET_break_op (0);
- return GNUNET_SYSERR;
- }
- return GNUNET_OK;
- }
- break;
- default:
- GNUNET_break_op (0);
- return GNUNET_SYSERR;
- }
-}
-
-
-/**
- * Cleanup data left from parsing blinded planchet.
- *
- * @param cls closure, NULL
- * @param[out] spec where to free the data
- */
-static void
-clean_blinded_planchet (void *cls,
- struct GNUNET_JSON_Specification *spec)
-{
- struct TALER_BlindedPlanchet *blinded_planchet = spec->ptr;
-
- (void) cls;
- TALER_blinded_planchet_free (blinded_planchet);
-}
-
-
-struct GNUNET_JSON_Specification
-TALER_JSON_spec_blinded_planchet (const char *field,
- struct TALER_BlindedPlanchet
*blinded_planchet)
-{
- struct GNUNET_JSON_Specification ret = {
- .parser = &parse_blinded_planchet,
- .cleaner = &clean_blinded_planchet,
- .field = field,
- .ptr = blinded_planchet
- };
-
- blinded_planchet->cipher = TALER_DENOMINATION_INVALID;
- return ret;
-}
-
-
-/**
- * Parse given JSON object to exchange withdraw values (/csr).
- *
- * @param cls closure, NULL
- * @param root the json object representing data
- * @param[out] spec where to write the data
- * @return #GNUNET_OK upon successful parsing; #GNUNET_SYSERR upon error
- */
-static enum GNUNET_GenericReturnValue
-parse_exchange_withdraw_values (void *cls,
- json_t *root,
- struct GNUNET_JSON_Specification *spec)
-{
- struct TALER_ExchangeWithdrawValues *ewv = spec->ptr;
- const char *cipher;
- struct GNUNET_JSON_Specification dspec[] = {
- GNUNET_JSON_spec_string ("cipher",
- &cipher),
- GNUNET_JSON_spec_end ()
- };
- const char *emsg;
- unsigned int eline;
-
- (void) cls;
- if (GNUNET_OK !=
- GNUNET_JSON_parse (root,
- dspec,
- &emsg,
- &eline))
- {
- GNUNET_break_op (0);
- return GNUNET_SYSERR;
- }
- ewv->cipher = string_to_cipher (cipher);
- switch (ewv->cipher)
- {
- case TALER_DENOMINATION_RSA:
- return GNUNET_OK;
- case TALER_DENOMINATION_CS:
- {
- struct GNUNET_JSON_Specification ispec[] = {
- GNUNET_JSON_spec_fixed (
- "r_pub_0",
- &ewv->details.cs_values.r_pub[0],
- sizeof (struct GNUNET_CRYPTO_CsRPublic)),
- GNUNET_JSON_spec_fixed (
- "r_pub_1",
- &ewv->details.cs_values.r_pub[1],
- sizeof (struct GNUNET_CRYPTO_CsRPublic)),
- GNUNET_JSON_spec_end ()
- };
-
- if (GNUNET_OK !=
- GNUNET_JSON_parse (root,
- ispec,
- &emsg,
- &eline))
- {
- GNUNET_break_op (0);
- return GNUNET_SYSERR;
- }
- return GNUNET_OK;
- }
- default:
- GNUNET_break_op (0);
- return GNUNET_SYSERR;
- }
-}
-
-
-struct GNUNET_JSON_Specification
-TALER_JSON_spec_exchange_withdraw_values (
- const char *field,
- struct TALER_ExchangeWithdrawValues *ewv)
-{
- struct GNUNET_JSON_Specification ret = {
- .parser = &parse_exchange_withdraw_values,
- .field = field,
- .ptr = ewv
- };
-
- ewv->cipher = TALER_DENOMINATION_INVALID;
- return ret;
-}
-
-
-/**
- * Closure for #parse_i18n_string.
- */
-struct I18nContext
-{
- /**
- * Language pattern to match.
- */
- char *lp;
-
- /**
- * Name of the field to match.
- */
- const char *field;
-};
-
-
-/**
- * Parse given JSON object to internationalized string.
- *
- * @param cls closure, our `struct I18nContext *`
- * @param root the json object representing data
- * @param[out] spec where to write the data
- * @return #GNUNET_OK upon successful parsing; #GNUNET_SYSERR upon error
- */
-static enum GNUNET_GenericReturnValue
-parse_i18n_string (void *cls,
- json_t *root,
- struct GNUNET_JSON_Specification *spec)
-{
- struct I18nContext *ctx = cls;
- json_t *i18n;
- json_t *val;
-
- {
- char *i18nf;
-
- GNUNET_asprintf (&i18nf,
- "%s_i18n",
- ctx->field);
- i18n = json_object_get (root,
- i18nf);
- GNUNET_free (i18nf);
- }
-
- val = json_object_get (root,
- ctx->field);
- if ( (NULL != i18n) &&
- (NULL != ctx->lp) )
- {
- double best = 0.0;
- json_t *pos;
- const char *lang;
-
- json_object_foreach (i18n, lang, pos)
- {
- double score;
-
- score = TALER_language_matches (ctx->lp,
- lang);
- if (score > best)
- {
- best = score;
- val = pos;
- }
- }
- }
-
- {
- const char *str;
-
- str = json_string_value (val);
- *(const char **) spec->ptr = str;
- }
- return GNUNET_OK;
-}
-
-
-/**
- * Function called to clean up data from earlier parsing.
- *
- * @param cls closure
- * @param spec our specification entry with data to clean.
- */
-static void
-i18n_cleaner (void *cls,
- struct GNUNET_JSON_Specification *spec)
-{
- struct I18nContext *ctx = cls;
-
- (void) spec;
- if (NULL != ctx)
- {
- GNUNET_free (ctx->lp);
- GNUNET_free (ctx);
- }
-}
-
-
-struct GNUNET_JSON_Specification
-TALER_JSON_spec_i18n_string (const char *name,
- const char *language_pattern,
- const char **strptr)
-{
- struct I18nContext *ctx = GNUNET_new (struct I18nContext);
- struct GNUNET_JSON_Specification ret = {
- .parser = &parse_i18n_string,
- .cleaner = &i18n_cleaner,
- .cls = ctx,
- .field = NULL, /* we want the main object */
- .ptr = strptr,
- .ptr_size = 0,
- .size_ptr = NULL
- };
-
- ctx->lp = (NULL != language_pattern)
- ? GNUNET_strdup (language_pattern)
- : NULL;
- ctx->field = name;
- *strptr = NULL;
- return ret;
-}
-
-
-struct GNUNET_JSON_Specification
-TALER_JSON_spec_i18n_str (const char *name,
- const char **strptr)
-{
- const char *lang = getenv ("LANG");
- char *dot;
- char *l;
- struct GNUNET_JSON_Specification ret;
-
- if (NULL != lang)
- {
- dot = strchr (lang,
- '.');
- if (NULL == dot)
- l = GNUNET_strdup (lang);
- else
- l = GNUNET_strndup (lang,
- dot - lang);
- }
- else
- {
- l = NULL;
- }
- ret = TALER_JSON_spec_i18n_string (name,
- l,
- strptr);
- GNUNET_free (l);
- return ret;
-}
+// static enum TALER_DenominationCipher
+// string_to_cipher (const char *cipher_s)
+// {
+// if ((0 == strcasecmp (cipher_s,
+// "RSA")) ||
+// (0 == strcasecmp (cipher_s,
+// "RSA+age_restricted")))
+// return TALER_DENOMINATION_RSA;
+// if ((0 == strcasecmp (cipher_s,
+// "CS")) ||
+// (0 == strcasecmp (cipher_s,
+// "CS+age_restricted")))
+// return TALER_DENOMINATION_CS;
+// return TALER_DENOMINATION_INVALID;
+// }
+
+
+// json_t *
+// TALER_JSON_from_amount (const struct TALER_Amount *amount)
+// {
+// char *amount_str = TALER_amount_to_string (amount);
+
+// GNUNET_assert (NULL != amount_str);
+// {
+// json_t *j = json_string (amount_str);
+
+// GNUNET_free (amount_str);
+// return j;
+// }
+// }
+
+
+// /**
+// * Parse given JSON object to Amount
+// *
+// * @param cls closure, expected currency, or NULL
+// * @param root the json object representing data
+// * @param[out] spec where to write the data
+// * @return #GNUNET_OK upon successful parsing; #GNUNET_SYSERR upon error
+// */
+// static enum GNUNET_GenericReturnValue
+// parse_amount (void *cls,
+// json_t *root,
+// struct GNUNET_JSON_Specification *spec)
+// {
+// const char *currency = cls;
+// struct TALER_Amount *r_amount = spec->ptr;
+
+// (void) cls;
+// if (! json_is_string (root))
+// {
+// GNUNET_break_op (0);
+// return GNUNET_SYSERR;
+// }
+// if (GNUNET_OK !=
+// TALER_string_to_amount (json_string_value (root),
+// r_amount))
+// {
+// GNUNET_break_op (0);
+// return GNUNET_SYSERR;
+// }
+// if ( (NULL != currency) &&
+// (0 !=
+// strcasecmp (currency,
+// r_amount->currency)) )
+// {
+// GNUNET_break_op (0);
+// GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+// "Expected currency `%s', but amount used currency `%s' in
field `%s'\n",
+// currency,
+// r_amount->currency,
+// spec->field);
+// return GNUNET_SYSERR;
+// }
+// return GNUNET_OK;
+// }
+
+
+// struct GNUNET_JSON_Specification
+// TALER_JSON_spec_amount (const char *name,
+// const char *currency,
+// struct TALER_Amount *r_amount)
+// {
+// struct GNUNET_JSON_Specification ret = {
+// .parser = &parse_amount,
+// .cleaner = NULL,
+// .cls = (void *) currency,
+// .field = name,
+// .ptr = r_amount,
+// .ptr_size = 0,
+// .size_ptr = NULL
+// };
+
+// GNUNET_assert (NULL != currency);
+// return ret;
+// }
+
+
+// struct GNUNET_JSON_Specification
+// TALER_JSON_spec_amount_any (const char *name,
+// struct TALER_Amount *r_amount)
+// {
+// struct GNUNET_JSON_Specification ret = {
+// .parser = &parse_amount,
+// .cleaner = NULL,
+// .cls = NULL,
+// .field = name,
+// .ptr = r_amount,
+// .ptr_size = 0,
+// .size_ptr = NULL
+// };
+
+// return ret;
+// }
+
+
+// /**
+// * Parse given JSON object to currency spec.
+// *
+// * @param cls closure, NULL
+// * @param root the json object representing data
+// * @param[out] spec where to write the data
+// * @return #GNUNET_OK upon successful parsing; #GNUNET_SYSERR upon error
+// */
+// static enum GNUNET_GenericReturnValue
+// parse_cspec (void *cls,
+// json_t *root,
+// struct GNUNET_JSON_Specification *spec)
+// {
+// struct TALER_CurrencySpecification *r_cspec = spec->ptr;
+// const char *name;
+// const char *currency;
+// const char *decimal_separator;
+// uint32_t fid;
+// uint32_t fnd;
+// uint32_t ftzd;
+// const json_t *map;
+// struct GNUNET_JSON_Specification gspec[] = {
+// GNUNET_JSON_spec_string ("currency",
+// ¤cy),
+// GNUNET_JSON_spec_string ("name",
+// &name),
+// GNUNET_JSON_spec_string ("decimal_separator",
+// &decimal_separator),
+// GNUNET_JSON_spec_uint32 ("num_fractional_input_digits",
+// &fid),
+// GNUNET_JSON_spec_uint32 ("num_fractional_normal_digits",
+// &fnd),
+// GNUNET_JSON_spec_uint32 ("num_fractional_trailing_zero_digits",
+// &ftzd),
+// GNUNET_JSON_spec_bool ("is_currency_name_leading",
+// &r_cspec->is_currency_name_leading),
+// GNUNET_JSON_spec_object_const ("alt_unit_names",
+// &map),
+// GNUNET_JSON_spec_end ()
+// };
+// const char *emsg;
+// unsigned int eline;
+
+// (void) cls;
+// memset (r_cspec->currency,
+// 0,
+// sizeof (r_cspec->currency));
+// if (GNUNET_OK !=
+// GNUNET_JSON_parse (root,
+// gspec,
+// &emsg,
+// &eline))
+// {
+// GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+// "Failed to parse %s at %u: %s\n",
+// spec[eline].field,
+// eline,
+// emsg);
+// GNUNET_break_op (0);
+// return GNUNET_SYSERR;
+// }
+// if (strlen (currency) >= TALER_CURRENCY_LEN)
+// {
+// GNUNET_break_op (0);
+// return GNUNET_SYSERR;
+// }
+// if ( (fid > TALER_AMOUNT_FRAC_LEN) ||
+// (fnd > TALER_AMOUNT_FRAC_LEN) ||
+// (ftzd > TALER_AMOUNT_FRAC_LEN) )
+// {
+// GNUNET_break_op (0);
+// return GNUNET_SYSERR;
+// }
+// if (GNUNET_OK !=
+// TALER_check_currency (currency))
+// {
+// GNUNET_break_op (0);
+// return GNUNET_SYSERR;
+// }
+// strcpy (r_cspec->currency,
+// currency);
+// if (GNUNET_OK !=
+// TALER_check_currency_scale_map (map))
+// {
+// GNUNET_break_op (0);
+// return GNUNET_SYSERR;
+// }
+// r_cspec->name = GNUNET_strdup (name);
+// r_cspec->decimal_separator = GNUNET_strdup (decimal_separator);
+// r_cspec->map_alt_unit_names = json_incref ((json_t *) map);
+// return GNUNET_OK;
+// }
+
+
+// /**
+// * Cleanup data left from parsing encrypted contract.
+// *
+// * @param cls closure, NULL
+// * @param[out] spec where to free the data
+// */
+// static void
+// clean_cspec (void *cls,
+// struct GNUNET_JSON_Specification *spec)
+// {
+// struct TALER_CurrencySpecification *cspec = spec->ptr;
+
+// (void) cls;
+// GNUNET_free (cspec->name);
+// GNUNET_free (cspec->decimal_separator);
+// json_decref (cspec->map_alt_unit_names);
+// }
+
+
+// struct GNUNET_JSON_Specification
+// TALER_JSON_spec_currency_specification (
+// const char *name,
+// struct TALER_CurrencySpecification *r_cspec)
+// {
+// struct GNUNET_JSON_Specification ret = {
+// .parser = &parse_cspec,
+// .cleaner = &clean_cspec,
+// .cls = NULL,
+// .field = name,
+// .ptr = r_cspec,
+// .ptr_size = 0,
+// .size_ptr = NULL
+// };
+
+// return ret;
+// }
+
+
+// static enum GNUNET_GenericReturnValue
+// parse_denomination_group (void *cls,
+// json_t *root,
+// struct GNUNET_JSON_Specification *spec)
+// {
+// struct TALER_DenominationGroup *group = spec->ptr;
+// const char *cipher;
+// const char *currency = cls;
+// bool age_mask_missing = false;
+// bool has_age_restricted_suffix = false;
+// struct GNUNET_JSON_Specification gspec[] = {
+// GNUNET_JSON_spec_string ("cipher",
+// &cipher),
+// TALER_JSON_spec_amount ("value",
+// currency,
+// &group->value),
+// TALER_JSON_SPEC_DENOM_FEES ("fee",
+// currency,
+// &group->fees),
+// GNUNET_JSON_spec_mark_optional (
+// GNUNET_JSON_spec_uint32 ("age_mask",
+// &group->age_mask.bits),
+// &age_mask_missing),
+// GNUNET_JSON_spec_end ()
+// };
+// const char *emsg;
+// unsigned int eline;
+
+// if (GNUNET_OK !=
+// GNUNET_JSON_parse (root,
+// gspec,
+// &emsg,
+// &eline))
+// {
+// GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+// "Failed to parse %s at %u: %s\n",
+// spec[eline].field,
+// eline,
+// emsg);
+// GNUNET_break_op (0);
+// return GNUNET_SYSERR;
+// }
+
+// group->cipher = string_to_cipher (cipher);
+// if (TALER_DENOMINATION_INVALID == group->cipher)
+// {
+// GNUNET_break_op (0);
+// return GNUNET_SYSERR;
+// }
+
+// /* age_mask and suffix must be consistent */
+// has_age_restricted_suffix =
+// (NULL != strstr (cipher, "+age_restricted"));
+// if (has_age_restricted_suffix && age_mask_missing)
+// {
+// GNUNET_break_op (0);
+// return GNUNET_SYSERR;
+// }
+
+// if (age_mask_missing)
+// group->age_mask.bits = 0;
+
+// return GNUNET_OK;
+// }
+
+
+// struct GNUNET_JSON_Specification
+// TALER_JSON_spec_denomination_group (const char *name,
+// const char *currency,
+// struct TALER_DenominationGroup *group)
+// {
+// struct GNUNET_JSON_Specification ret = {
+// .cls = (void *) currency,
+// .parser = &parse_denomination_group,
+// .cleaner = NULL,
+// .field = name,
+// .ptr = group,
+// .ptr_size = sizeof(*group),
+// .size_ptr = NULL,
+// };
+
+// return ret;
+// }
+
+
+// /**
+// * Parse given JSON object to an encrypted contract.
+// *
+// * @param cls closure, NULL
+// * @param root the json object representing data
+// * @param[out] spec where to write the data
+// * @return #GNUNET_OK upon successful parsing; #GNUNET_SYSERR upon error
+// */
+// static enum GNUNET_GenericReturnValue
+// parse_econtract (void *cls,
+// json_t *root,
+// struct GNUNET_JSON_Specification *spec)
+// {
+// struct TALER_EncryptedContract *econtract = spec->ptr;
+// struct GNUNET_JSON_Specification ispec[] = {
+// GNUNET_JSON_spec_varsize ("econtract",
+// &econtract->econtract,
+// &econtract->econtract_size),
+// GNUNET_JSON_spec_fixed_auto ("econtract_sig",
+// &econtract->econtract_sig),
+// GNUNET_JSON_spec_fixed_auto ("contract_pub",
+// &econtract->contract_pub),
+// GNUNET_JSON_spec_end ()
+// };
+// const char *emsg;
+// unsigned int eline;
+
+// (void) cls;
+// if (GNUNET_OK !=
+// GNUNET_JSON_parse (root,
+// ispec,
+// &emsg,
+// &eline))
+// {
+// GNUNET_break_op (0);
+// return GNUNET_SYSERR;
+// }
+// return GNUNET_OK;
+// }
+
+
+// /**
+// * Cleanup data left from parsing encrypted contract.
+// *
+// * @param cls closure, NULL
+// * @param[out] spec where to free the data
+// */
+// static void
+// clean_econtract (void *cls,
+// struct GNUNET_JSON_Specification *spec)
+// {
+// struct TALER_EncryptedContract *econtract = spec->ptr;
+
+// (void) cls;
+// GNUNET_free (econtract->econtract);
+// }
+
+
+// struct GNUNET_JSON_Specification
+// TALER_JSON_spec_econtract (const char *name,
+// struct TALER_EncryptedContract *econtract)
+// {
+// struct GNUNET_JSON_Specification ret = {
+// .parser = &parse_econtract,
+// .cleaner = &clean_econtract,
+// .cls = NULL,
+// .field = name,
+// .ptr = econtract,
+// .ptr_size = 0,
+// .size_ptr = NULL
+// };
+
+// return ret;
+// }
+
+
+// /**
+// * Parse given JSON object to an age commitmnet
+// *
+// * @param cls closure, NULL
+// * @param root the json object representing data
+// * @param[out] spec where to write the data
+// * @return #GNUNET_OK upon successful parsing; #GNUNET_SYSERR upon error
+// */
+// static enum GNUNET_GenericReturnValue
+// parse_age_commitment (void *cls,
+// json_t *root,
+// struct GNUNET_JSON_Specification *spec)
+// {
+// struct TALER_AgeCommitment *age_commitment = spec->ptr;
+// json_t *pk;
+// unsigned int idx;
+// size_t num;
+
+// (void) cls;
+// if ( (NULL == root) ||
+// (! json_is_array (root)))
+// {
+// GNUNET_break_op (0);
+// return GNUNET_SYSERR;
+// }
+
+// num = json_array_size (root);
+// if (32 <= num || 0 == num)
+// {
+// GNUNET_break_op (0);
+// return GNUNET_SYSERR;
+// }
+
+// age_commitment->num = num;
+// age_commitment->keys =
+// GNUNET_new_array (num,
+// struct TALER_AgeCommitmentPublicKeyP);
+
+// json_array_foreach (root, idx, pk) {
+// const char *emsg;
+// unsigned int eline;
+// struct GNUNET_JSON_Specification pkspec[] = {
+// GNUNET_JSON_spec_fixed_auto (
+// NULL,
+// &age_commitment->keys[idx].pub),
+// GNUNET_JSON_spec_end ()
+// };
+
+// if (GNUNET_OK !=
+// GNUNET_JSON_parse (pk,
+// pkspec,
+// &emsg,
+// &eline))
+// {
+// GNUNET_break_op (0);
+// GNUNET_JSON_parse_free (spec);
+// return GNUNET_SYSERR;
+// }
+// };
+
+// return GNUNET_OK;
+// }
+
+
+// /**
+// * Cleanup data left fom parsing age commitment
+// *
+// * @param cls closure, NULL
+// * @param[out] spec where to free the data
+// */
+// static void
+// clean_age_commitment (void *cls,
+// struct GNUNET_JSON_Specification *spec)
+// {
+// struct TALER_AgeCommitment *age_commitment = spec->ptr;
+
+// (void) cls;
+
+// if (NULL == age_commitment ||
+// NULL == age_commitment->keys)
+// return;
+
+// age_commitment->num = 0;
+// GNUNET_free (age_commitment->keys);
+// }
+
+
+// struct GNUNET_JSON_Specification
+// TALER_JSON_spec_age_commitment (const char *name,
+// struct TALER_AgeCommitment *age_commitment)
+// {
+// struct GNUNET_JSON_Specification ret = {
+// .parser = &parse_age_commitment,
+// .cleaner = &clean_age_commitment,
+// .cls = NULL,
+// .field = name,
+// .ptr = age_commitment,
+// .ptr_size = 0,
+// .size_ptr = NULL
+// };
+
+// return ret;
+// }
+
+
+// /**
+// * Parse given JSON object to denomination public key.
+// *
+// * @param cls closure, NULL
+// * @param root the json object representing data
+// * @param[out] spec where to write the data
+// * @return #GNUNET_OK upon successful parsing; #GNUNET_SYSERR upon error
+// */
+// static enum GNUNET_GenericReturnValue
+// parse_denom_pub (void *cls,
+// json_t *root,
+// struct GNUNET_JSON_Specification *spec)
+// {
+// struct TALER_DenominationPublicKey *denom_pub = spec->ptr;
+// const char *cipher;
+// bool age_mask_missing = false;
+// struct GNUNET_JSON_Specification dspec[] = {
+// GNUNET_JSON_spec_string ("cipher",
+// &cipher),
+// GNUNET_JSON_spec_mark_optional (
+// GNUNET_JSON_spec_uint32 ("age_mask",
+// &denom_pub->age_mask.bits),
+// &age_mask_missing),
+// GNUNET_JSON_spec_end ()
+// };
+// const char *emsg;
+// unsigned int eline;
+
+// (void) cls;
+// if (GNUNET_OK !=
+// GNUNET_JSON_parse (root,
+// dspec,
+// &emsg,
+// &eline))
+// {
+// GNUNET_break_op (0);
+// return GNUNET_SYSERR;
+// }
+
+// if (age_mask_missing)
+// denom_pub->age_mask.bits = 0;
+
+// denom_pub->cipher = string_to_cipher (cipher);
+// switch (denom_pub->cipher)
+// {
+// case TALER_DENOMINATION_RSA:
+// {
+// struct GNUNET_JSON_Specification ispec[] = {
+// GNUNET_JSON_spec_rsa_public_key (
+// "rsa_public_key",
+// &denom_pub->details.rsa_public_key),
+// GNUNET_JSON_spec_end ()
+// };
+
+// if (GNUNET_OK !=
+// GNUNET_JSON_parse (root,
+// ispec,
+// &emsg,
+// &eline))
+// {
+// GNUNET_break_op (0);
+// return GNUNET_SYSERR;
+// }
+// return GNUNET_OK;
+// }
+// case TALER_DENOMINATION_CS:
+// {
+// struct GNUNET_JSON_Specification ispec[] = {
+// GNUNET_JSON_spec_fixed ("cs_public_key",
+// &denom_pub->details.cs_public_key,
+// sizeof (denom_pub->details.cs_public_key)),
+// GNUNET_JSON_spec_end ()
+// };
+
+// if (GNUNET_OK !=
+// GNUNET_JSON_parse (root,
+// ispec,
+// &emsg,
+// &eline))
+// {
+// GNUNET_break_op (0);
+// return GNUNET_SYSERR;
+// }
+// return GNUNET_OK;
+// }
+// default:
+// GNUNET_break_op (0);
+// return GNUNET_SYSERR;
+// }
+// }
+
+
+// /**
+// * Cleanup data left from parsing denomination public key.
+// *
+// * @param cls closure, NULL
+// * @param[out] spec where to free the data
+// */
+// static void
+// clean_denom_pub (void *cls,
+// struct GNUNET_JSON_Specification *spec)
+// {
+// struct TALER_DenominationPublicKey *denom_pub = spec->ptr;
+
+// (void) cls;
+// TALER_denom_pub_free (denom_pub);
+// }
+
+
+// struct GNUNET_JSON_Specification
+// TALER_JSON_spec_denom_pub (const char *field,
+// struct TALER_DenominationPublicKey *pk)
+// {
+// struct GNUNET_JSON_Specification ret = {
+// .parser = &parse_denom_pub,
+// .cleaner = &clean_denom_pub,
+// .field = field,
+// .ptr = pk
+// };
+
+// pk->cipher = TALER_DENOMINATION_INVALID;
+// return ret;
+// }
+
+
+// /**
+// * Parse given JSON object partially into a denomination public key.
+// *
+// * Depending on the cipher in cls, it parses the corresponding public key
type.
+// *
+// * @param cls closure, enum TALER_DenominationCipher
+// * @param root the json object representing data
+// * @param[out] spec where to write the data
+// * @return #GNUNET_OK upon successful parsing; #GNUNET_SYSERR upon error
+// */
+// static enum GNUNET_GenericReturnValue
+// parse_denom_pub_cipher (void *cls,
+// json_t *root,
+// struct GNUNET_JSON_Specification *spec)
+// {
+// struct TALER_DenominationPublicKey *denom_pub = spec->ptr;
+// enum TALER_DenominationCipher cipher =
+// (enum TALER_DenominationCipher) (long) cls;
+// const char *emsg;
+// unsigned int eline;
+
+// switch (cipher)
+// {
+// case TALER_DENOMINATION_RSA:
+// {
+// struct GNUNET_JSON_Specification ispec[] = {
+// GNUNET_JSON_spec_rsa_public_key (
+// "rsa_pub",
+// &denom_pub->details.rsa_public_key),
+// GNUNET_JSON_spec_end ()
+// };
+
+// if (GNUNET_OK !=
+// GNUNET_JSON_parse (root,
+// ispec,
+// &emsg,
+// &eline))
+// {
+// GNUNET_break_op (0);
+// return GNUNET_SYSERR;
+// }
+// denom_pub->cipher = cipher;
+// return GNUNET_OK;
+// }
+// case TALER_DENOMINATION_CS:
+// {
+// struct GNUNET_JSON_Specification ispec[] = {
+// GNUNET_JSON_spec_fixed ("cs_pub",
+// &denom_pub->details.cs_public_key,
+// sizeof (denom_pub->details.cs_public_key)),
+// GNUNET_JSON_spec_end ()
+// };
+
+// if (GNUNET_OK !=
+// GNUNET_JSON_parse (root,
+// ispec,
+// &emsg,
+// &eline))
+// {
+// GNUNET_break_op (0);
+// return GNUNET_SYSERR;
+// }
+// denom_pub->cipher = cipher;
+// return GNUNET_OK;
+// }
+// default:
+// GNUNET_break_op (0);
+// denom_pub->cipher = 0;
+// return GNUNET_SYSERR;
+// }
+// }
+
+
+// struct GNUNET_JSON_Specification
+// TALER_JSON_spec_denom_pub_cipher (const char *field,
+// enum TALER_DenominationCipher cipher,
+// struct TALER_DenominationPublicKey *pk)
+// {
+// struct GNUNET_JSON_Specification ret = {
+// .parser = &parse_denom_pub_cipher,
+// .cleaner = &clean_denom_pub,
+// .field = field,
+// .cls = (void *) cipher,
+// .ptr = pk
+// };
+
+// return ret;
+// }
+
+
+// /**
+// * Parse given JSON object to denomination signature.
+// *
+// * @param cls closure, NULL
+// * @param root the json object representing data
+// * @param[out] spec where to write the data
+// * @return #GNUNET_OK upon successful parsing; #GNUNET_SYSERR upon error
+// */
+// static enum GNUNET_GenericReturnValue
+// parse_denom_sig (void *cls,
+// json_t *root,
+// struct GNUNET_JSON_Specification *spec)
+// {
+// struct TALER_DenominationSignature *denom_sig = spec->ptr;
+// const char *cipher;
+// struct GNUNET_JSON_Specification dspec[] = {
+// GNUNET_JSON_spec_string ("cipher",
+// &cipher),
+// GNUNET_JSON_spec_end ()
+// };
+// const char *emsg;
+// unsigned int eline;
+
+// (void) cls;
+// if (GNUNET_OK !=
+// GNUNET_JSON_parse (root,
+// dspec,
+// &emsg,
+// &eline))
+// {
+// GNUNET_break_op (0);
+// return GNUNET_SYSERR;
+// }
+// denom_sig->cipher = string_to_cipher (cipher);
+// switch (denom_sig->cipher)
+// {
+// case TALER_DENOMINATION_RSA:
+// {
+// struct GNUNET_JSON_Specification ispec[] = {
+// GNUNET_JSON_spec_rsa_signature (
+// "rsa_signature",
+// &denom_sig->details.rsa_signature),
+// GNUNET_JSON_spec_end ()
+// };
+
+// if (GNUNET_OK !=
+// GNUNET_JSON_parse (root,
+// ispec,
+// &emsg,
+// &eline))
+// {
+// GNUNET_break_op (0);
+// return GNUNET_SYSERR;
+// }
+// return GNUNET_OK;
+// }
+// case TALER_DENOMINATION_CS:
+// {
+// struct GNUNET_JSON_Specification ispec[] = {
+// GNUNET_JSON_spec_fixed_auto ("cs_signature_r",
+//
&denom_sig->details.cs_signature.r_point),
+// GNUNET_JSON_spec_fixed_auto ("cs_signature_s",
+//
&denom_sig->details.cs_signature.s_scalar),
+// GNUNET_JSON_spec_end ()
+// };
+
+// if (GNUNET_OK !=
+// GNUNET_JSON_parse (root,
+// ispec,
+// &emsg,
+// &eline))
+// {
+// GNUNET_break_op (0);
+// return GNUNET_SYSERR;
+// }
+// return GNUNET_OK;
+// }
+// default:
+// GNUNET_break_op (0);
+// return GNUNET_SYSERR;
+// }
+// }
+
+
+// /**
+// * Cleanup data left from parsing denomination public key.
+// *
+// * @param cls closure, NULL
+// * @param[out] spec where to free the data
+// */
+// static void
+// clean_denom_sig (void *cls,
+// struct GNUNET_JSON_Specification *spec)
+// {
+// struct TALER_DenominationSignature *denom_sig = spec->ptr;
+
+// (void) cls;
+// TALER_denom_sig_free (denom_sig);
+// }
+
+
+// struct GNUNET_JSON_Specification
+// TALER_JSON_spec_denom_sig (const char *field,
+// struct TALER_DenominationSignature *sig)
+// {
+// struct GNUNET_JSON_Specification ret = {
+// .parser = &parse_denom_sig,
+// .cleaner = &clean_denom_sig,
+// .field = field,
+// .ptr = sig
+// };
+
+// sig->cipher = TALER_DENOMINATION_INVALID;
+// return ret;
+// }
+
+
+// /**
+// * Parse given JSON object to blinded denomination signature.
+// *
+// * @param cls closure, NULL
+// * @param root the json object representing data
+// * @param[out] spec where to write the data
+// * @return #GNUNET_OK upon successful parsing; #GNUNET_SYSERR upon error
+// */
+// static enum GNUNET_GenericReturnValue
+// parse_blinded_denom_sig (void *cls,
+// json_t *root,
+// struct GNUNET_JSON_Specification *spec)
+// {
+// struct TALER_BlindedDenominationSignature *denom_sig = spec->ptr;
+// const char *cipher;
+// struct GNUNET_JSON_Specification dspec[] = {
+// GNUNET_JSON_spec_string ("cipher",
+// &cipher),
+// GNUNET_JSON_spec_end ()
+// };
+// const char *emsg;
+// unsigned int eline;
+
+// (void) cls;
+// if (GNUNET_OK !=
+// GNUNET_JSON_parse (root,
+// dspec,
+// &emsg,
+// &eline))
+// {
+// GNUNET_break_op (0);
+// return GNUNET_SYSERR;
+// }
+// denom_sig->cipher = string_to_cipher (cipher);
+// switch (denom_sig->cipher)
+// {
+// case TALER_DENOMINATION_RSA:
+// {
+// struct GNUNET_JSON_Specification ispec[] = {
+// GNUNET_JSON_spec_rsa_signature (
+// "blinded_rsa_signature",
+// &denom_sig->details.blinded_rsa_signature),
+// GNUNET_JSON_spec_end ()
+// };
+
+// if (GNUNET_OK !=
+// GNUNET_JSON_parse (root,
+// ispec,
+// &emsg,
+// &eline))
+// {
+// GNUNET_break_op (0);
+// return GNUNET_SYSERR;
+// }
+// return GNUNET_OK;
+// }
+// case TALER_DENOMINATION_CS:
+// {
+// struct GNUNET_JSON_Specification ispec[] = {
+// GNUNET_JSON_spec_uint32 ("b",
+// &denom_sig->details.blinded_cs_answer.b),
+// GNUNET_JSON_spec_fixed_auto ("s",
+// &denom_sig->details.blinded_cs_answer.
+// s_scalar),
+// GNUNET_JSON_spec_end ()
+// };
+
+// if (GNUNET_OK !=
+// GNUNET_JSON_parse (root,
+// ispec,
+// &emsg,
+// &eline))
+// {
+// GNUNET_break_op (0);
+// return GNUNET_SYSERR;
+// }
+// return GNUNET_OK;
+// }
+// break;
+// default:
+// GNUNET_break_op (0);
+// return GNUNET_SYSERR;
+// }
+// }
+
+
+// /**
+// * Cleanup data left from parsing denomination public key.
+// *
+// * @param cls closure, NULL
+// * @param[out] spec where to free the data
+// */
+// static void
+// clean_blinded_denom_sig (void *cls,
+// struct GNUNET_JSON_Specification *spec)
+// {
+// struct TALER_BlindedDenominationSignature *denom_sig = spec->ptr;
+
+// (void) cls;
+// TALER_blinded_denom_sig_free (denom_sig);
+// }
+
+
+// struct GNUNET_JSON_Specification
+// TALER_JSON_spec_blinded_denom_sig (
+// const char *field,
+// struct TALER_BlindedDenominationSignature *sig)
+// {
+// struct GNUNET_JSON_Specification ret = {
+// .parser = &parse_blinded_denom_sig,
+// .cleaner = &clean_blinded_denom_sig,
+// .field = field,
+// .ptr = sig
+// };
+
+// sig->cipher = TALER_DENOMINATION_INVALID;
+// return ret;
+// }
+
+
+// /**
+// * Parse given JSON object to blinded planchet.
+// *
+// * @param cls closure, NULL
+// * @param root the json object representing data
+// * @param[out] spec where to write the data
+// * @return #GNUNET_OK upon successful parsing; #GNUNET_SYSERR upon error
+// */
+// static enum GNUNET_GenericReturnValue
+// parse_blinded_planchet (void *cls,
+// json_t *root,
+// struct GNUNET_JSON_Specification *spec)
+// {
+// struct TALER_BlindedPlanchet *blinded_planchet = spec->ptr;
+// const char *cipher;
+// struct GNUNET_JSON_Specification dspec[] = {
+// GNUNET_JSON_spec_string ("cipher",
+// &cipher),
+// GNUNET_JSON_spec_end ()
+// };
+// const char *emsg;
+// unsigned int eline;
+
+// (void) cls;
+// if (GNUNET_OK !=
+// GNUNET_JSON_parse (root,
+// dspec,
+// &emsg,
+// &eline))
+// {
+// GNUNET_break_op (0);
+// return GNUNET_SYSERR;
+// }
+// blinded_planchet->cipher = string_to_cipher (cipher);
+// switch (blinded_planchet->cipher)
+// {
+// case TALER_DENOMINATION_RSA:
+// {
+// struct GNUNET_JSON_Specification ispec[] = {
+// GNUNET_JSON_spec_varsize (
+// "rsa_blinded_planchet",
+// &blinded_planchet->details.rsa_blinded_planchet.blinded_msg,
+// &blinded_planchet->details.rsa_blinded_planchet.blinded_msg_size),
+// GNUNET_JSON_spec_end ()
+// };
+
+// if (GNUNET_OK !=
+// GNUNET_JSON_parse (root,
+// ispec,
+// &emsg,
+// &eline))
+// {
+// GNUNET_break_op (0);
+// return GNUNET_SYSERR;
+// }
+// return GNUNET_OK;
+// }
+// case TALER_DENOMINATION_CS:
+// {
+// struct GNUNET_JSON_Specification ispec[] = {
+// GNUNET_JSON_spec_fixed_auto (
+// "cs_nonce",
+// &blinded_planchet->details.cs_blinded_planchet.nonce),
+// GNUNET_JSON_spec_fixed_auto (
+// "cs_blinded_c0",
+// &blinded_planchet->details.cs_blinded_planchet.c[0]),
+// GNUNET_JSON_spec_fixed_auto (
+// "cs_blinded_c1",
+// &blinded_planchet->details.cs_blinded_planchet.c[1]),
+// GNUNET_JSON_spec_end ()
+// };
+
+// if (GNUNET_OK !=
+// GNUNET_JSON_parse (root,
+// ispec,
+// &emsg,
+// &eline))
+// {
+// GNUNET_break_op (0);
+// return GNUNET_SYSERR;
+// }
+// return GNUNET_OK;
+// }
+// break;
+// default:
+// GNUNET_break_op (0);
+// return GNUNET_SYSERR;
+// }
+// }
+
+
+// /**
+// * Cleanup data left from parsing blinded planchet.
+// *
+// * @param cls closure, NULL
+// * @param[out] spec where to free the data
+// */
+// static void
+// clean_blinded_planchet (void *cls,
+// struct GNUNET_JSON_Specification *spec)
+// {
+// struct TALER_BlindedPlanchet *blinded_planchet = spec->ptr;
+
+// (void) cls;
+// TALER_blinded_planchet_free (blinded_planchet);
+// }
+
+
+// struct GNUNET_JSON_Specification
+// TALER_JSON_spec_blinded_planchet (const char *field,
+// struct TALER_BlindedPlanchet
*blinded_planchet)
+// {
+// struct GNUNET_JSON_Specification ret = {
+// .parser = &parse_blinded_planchet,
+// .cleaner = &clean_blinded_planchet,
+// .field = field,
+// .ptr = blinded_planchet
+// };
+
+// blinded_planchet->cipher = TALER_DENOMINATION_INVALID;
+// return ret;
+// }
+
+
+// /**
+// * Parse given JSON object to exchange withdraw values (/csr).
+// *
+// * @param cls closure, NULL
+// * @param root the json object representing data
+// * @param[out] spec where to write the data
+// * @return #GNUNET_OK upon successful parsing; #GNUNET_SYSERR upon error
+// */
+// static enum GNUNET_GenericReturnValue
+// parse_exchange_withdraw_values (void *cls,
+// json_t *root,
+// struct GNUNET_JSON_Specification *spec)
+// {
+// struct TALER_ExchangeWithdrawValues *ewv = spec->ptr;
+// const char *cipher;
+// struct GNUNET_JSON_Specification dspec[] = {
+// GNUNET_JSON_spec_string ("cipher",
+// &cipher),
+// GNUNET_JSON_spec_end ()
+// };
+// const char *emsg;
+// unsigned int eline;
+
+// (void) cls;
+// if (GNUNET_OK !=
+// GNUNET_JSON_parse (root,
+// dspec,
+// &emsg,
+// &eline))
+// {
+// GNUNET_break_op (0);
+// return GNUNET_SYSERR;
+// }
+// ewv->cipher = string_to_cipher (cipher);
+// switch (ewv->cipher)
+// {
+// case TALER_DENOMINATION_RSA:
+// return GNUNET_OK;
+// case TALER_DENOMINATION_CS:
+// {
+// struct GNUNET_JSON_Specification ispec[] = {
+// GNUNET_JSON_spec_fixed (
+// "r_pub_0",
+// &ewv->details.cs_values.r_pub[0],
+// sizeof (struct GNUNET_CRYPTO_CsRPublic)),
+// GNUNET_JSON_spec_fixed (
+// "r_pub_1",
+// &ewv->details.cs_values.r_pub[1],
+// sizeof (struct GNUNET_CRYPTO_CsRPublic)),
+// GNUNET_JSON_spec_end ()
+// };
+
+// if (GNUNET_OK !=
+// GNUNET_JSON_parse (root,
+// ispec,
+// &emsg,
+// &eline))
+// {
+// GNUNET_break_op (0);
+// return GNUNET_SYSERR;
+// }
+// return GNUNET_OK;
+// }
+// default:
+// GNUNET_break_op (0);
+// return GNUNET_SYSERR;
+// }
+// }
+
+
+// struct GNUNET_JSON_Specification
+// TALER_JSON_spec_exchange_withdraw_values (
+// const char *field,
+// struct TALER_ExchangeWithdrawValues *ewv)
+// {
+// struct GNUNET_JSON_Specification ret = {
+// .parser = &parse_exchange_withdraw_values,
+// .field = field,
+// .ptr = ewv
+// };
+
+// ewv->cipher = TALER_DENOMINATION_INVALID;
+// return ret;
+// }
+
+
+// /**
+// * Closure for #parse_i18n_string.
+// */
+// struct I18nContext
+// {
+// /**
+// * Language pattern to match.
+// */
+// char *lp;
+
+// /**
+// * Name of the field to match.
+// */
+// const char *field;
+// };
+
+
+// /**
+// * Parse given JSON object to internationalized string.
+// *
+// * @param cls closure, our `struct I18nContext *`
+// * @param root the json object representing data
+// * @param[out] spec where to write the data
+// * @return #GNUNET_OK upon successful parsing; #GNUNET_SYSERR upon error
+// */
+// static enum GNUNET_GenericReturnValue
+// parse_i18n_string (void *cls,
+// json_t *root,
+// struct GNUNET_JSON_Specification *spec)
+// {
+// struct I18nContext *ctx = cls;
+// json_t *i18n;
+// json_t *val;
+
+// {
+// char *i18nf;
+
+// GNUNET_asprintf (&i18nf,
+// "%s_i18n",
+// ctx->field);
+// i18n = json_object_get (root,
+// i18nf);
+// GNUNET_free (i18nf);
+// }
+
+// val = json_object_get (root,
+// ctx->field);
+// if ( (NULL != i18n) &&
+// (NULL != ctx->lp) )
+// {
+// double best = 0.0;
+// json_t *pos;
+// const char *lang;
+
+// json_object_foreach (i18n, lang, pos)
+// {
+// double score;
+
+// score = TALER_language_matches (ctx->lp,
+// lang);
+// if (score > best)
+// {
+// best = score;
+// val = pos;
+// }
+// }
+// }
+
+// {
+// const char *str;
+
+// str = json_string_value (val);
+// *(const char **) spec->ptr = str;
+// }
+// return GNUNET_OK;
+// }
+
+
+// /**
+// * Function called to clean up data from earlier parsing.
+// *
+// * @param cls closure
+// * @param spec our specification entry with data to clean.
+// */
+// static void
+// i18n_cleaner (void *cls,
+// struct GNUNET_JSON_Specification *spec)
+// {
+// struct I18nContext *ctx = cls;
+
+// (void) spec;
+// if (NULL != ctx)
+// {
+// GNUNET_free (ctx->lp);
+// GNUNET_free (ctx);
+// }
+// }
+
+
+// struct GNUNET_JSON_Specification
+// TALER_JSON_spec_i18n_string (const char *name,
+// const char *language_pattern,
+// const char **strptr)
+// {
+// struct I18nContext *ctx = GNUNET_new (struct I18nContext);
+// struct GNUNET_JSON_Specification ret = {
+// .parser = &parse_i18n_string,
+// .cleaner = &i18n_cleaner,
+// .cls = ctx,
+// .field = NULL, /* we want the main object */
+// .ptr = strptr,
+// .ptr_size = 0,
+// .size_ptr = NULL
+// };
+
+// ctx->lp = (NULL != language_pattern)
+// ? GNUNET_strdup (language_pattern)
+// : NULL;
+// ctx->field = name;
+// *strptr = NULL;
+// return ret;
+// }
+
+
+// struct GNUNET_JSON_Specification
+// TALER_JSON_spec_i18n_str (const char *name,
+// const char **strptr)
+// {
+// const char *lang = getenv ("LANG");
+// char *dot;
+// char *l;
+// struct GNUNET_JSON_Specification ret;
+
+// if (NULL != lang)
+// {
+// dot = strchr (lang,
+// '.');
+// if (NULL == dot)
+// l = GNUNET_strdup (lang);
+// else
+// l = GNUNET_strndup (lang,
+// dot - lang);
+// }
+// else
+// {
+// l = NULL;
+// }
+// ret = TALER_JSON_spec_i18n_string (name,
+// l,
+// strptr);
+// GNUNET_free (l);
+// return ret;
+// }
/* end of json/json_helper.c */
diff --git a/src/json/json_pack.c b/src/json/json_pack.c
index 5292aed..91b2b13 100644
--- a/src/json/json_pack.c
+++ b/src/json/json_pack.c
@@ -24,285 +24,285 @@
#include "taler/taler_json_lib.h"
-struct GNUNET_JSON_PackSpec
-TALER_JSON_pack_time_abs_human (const char *name,
- struct GNUNET_TIME_Absolute at)
-{
- struct GNUNET_JSON_PackSpec ps = {
- .field_name = name,
- .object = json_string (
- GNUNET_STRINGS_absolute_time_to_string (at))
- };
-
- return ps;
-}
-
-
-struct GNUNET_JSON_PackSpec
-TALER_JSON_pack_econtract (
- const char *name,
- const struct TALER_EncryptedContract *econtract)
-{
- struct GNUNET_JSON_PackSpec ps = {
- .field_name = name,
- };
-
- if (NULL == econtract)
- return ps;
- ps.object
- = GNUNET_JSON_PACK (
- GNUNET_JSON_pack_data_varsize ("econtract",
- econtract->econtract,
- econtract->econtract_size),
- GNUNET_JSON_pack_data_auto ("econtract_sig",
- &econtract->econtract_sig),
- GNUNET_JSON_pack_data_auto ("contract_pub",
- &econtract->contract_pub));
- return ps;
-}
-
-
-struct GNUNET_JSON_PackSpec
-TALER_JSON_pack_age_commitment (
- const char *name,
- const struct TALER_AgeCommitment *age_commitment)
-{
- struct GNUNET_JSON_PackSpec ps = {
- .field_name = name,
- };
- json_t *keys;
-
- if (NULL == age_commitment ||
- 0 == age_commitment->num)
- return ps;
-
- GNUNET_assert (NULL !=
- (keys = json_array ()));
-
- for (size_t i = 0;
- i < age_commitment->num;
- i++)
- {
- json_t *val;
- val = GNUNET_JSON_from_data (&age_commitment->keys[i],
- sizeof(age_commitment->keys[i]));
- GNUNET_assert (NULL != val);
- GNUNET_assert (0 ==
- json_array_append_new (keys, val));
- }
-
- ps.object = keys;
- return ps;
-}
-
-
-struct GNUNET_JSON_PackSpec
-TALER_JSON_pack_denom_pub (
- const char *name,
- const struct TALER_DenominationPublicKey *pk)
-{
- struct GNUNET_JSON_PackSpec ps = {
- .field_name = name,
- };
-
- if (NULL == pk)
- return ps;
- switch (pk->cipher)
- {
- case TALER_DENOMINATION_RSA:
- ps.object
- = GNUNET_JSON_PACK (
- GNUNET_JSON_pack_string ("cipher", "RSA"),
- GNUNET_JSON_pack_uint64 ("age_mask",
- pk->age_mask.bits),
- GNUNET_JSON_pack_rsa_public_key ("rsa_public_key",
- pk->details.rsa_public_key));
- break;
- case TALER_DENOMINATION_CS:
- ps.object
- = GNUNET_JSON_PACK (
- GNUNET_JSON_pack_string ("cipher", "CS"),
- GNUNET_JSON_pack_uint64 ("age_mask",
- pk->age_mask.bits),
- GNUNET_JSON_pack_data_varsize ("cs_public_key",
- &pk->details.cs_public_key,
- sizeof (pk->details.cs_public_key)));
- break;
- default:
- GNUNET_assert (0);
- }
-
- return ps;
-}
-
-
-struct GNUNET_JSON_PackSpec
-TALER_JSON_pack_denom_sig (
- const char *name,
- const struct TALER_DenominationSignature *sig)
-{
- struct GNUNET_JSON_PackSpec ps = {
- .field_name = name,
- };
-
- if (NULL == sig)
- return ps;
- switch (sig->cipher)
- {
- case TALER_DENOMINATION_RSA:
- ps.object = GNUNET_JSON_PACK (
- GNUNET_JSON_pack_string ("cipher",
- "RSA"),
- GNUNET_JSON_pack_rsa_signature ("rsa_signature",
- sig->details.rsa_signature));
- break;
- case TALER_DENOMINATION_CS:
- ps.object = GNUNET_JSON_PACK (
- GNUNET_JSON_pack_string ("cipher",
- "CS"),
- GNUNET_JSON_pack_data_auto ("cs_signature_r",
- &sig->details.cs_signature.r_point),
- GNUNET_JSON_pack_data_auto ("cs_signature_s",
- &sig->details.cs_signature.s_scalar));
- break;
- default:
- GNUNET_assert (0);
- }
- return ps;
-}
-
-
-struct GNUNET_JSON_PackSpec
-TALER_JSON_pack_exchange_withdraw_values (
- const char *name,
- const struct TALER_ExchangeWithdrawValues *ewv)
-{
- struct GNUNET_JSON_PackSpec ps = {
- .field_name = name,
- };
-
- if (NULL == ewv)
- return ps;
- switch (ewv->cipher)
- {
- case TALER_DENOMINATION_RSA:
- ps.object = GNUNET_JSON_PACK (
- GNUNET_JSON_pack_string ("cipher",
- "RSA"));
- break;
- case TALER_DENOMINATION_CS:
- ps.object = GNUNET_JSON_PACK (
- GNUNET_JSON_pack_string ("cipher",
- "CS"),
- GNUNET_JSON_pack_data_varsize (
- "r_pub_0",
- &ewv->details.cs_values.r_pub[0],
- sizeof(struct GNUNET_CRYPTO_CsRPublic)),
- GNUNET_JSON_pack_data_varsize (
- "r_pub_1",
- &ewv->details.cs_values.r_pub[1],
- sizeof(struct GNUNET_CRYPTO_CsRPublic))
- );
- break;
- default:
- GNUNET_assert (0);
- }
- return ps;
-}
-
-
-struct GNUNET_JSON_PackSpec
-TALER_JSON_pack_blinded_denom_sig (
- const char *name,
- const struct TALER_BlindedDenominationSignature *sig)
-{
- struct GNUNET_JSON_PackSpec ps = {
- .field_name = name,
- };
-
- if (NULL == sig)
- return ps;
- switch (sig->cipher)
- {
- case TALER_DENOMINATION_RSA:
- ps.object = GNUNET_JSON_PACK (
- GNUNET_JSON_pack_string ("cipher",
- "RSA"),
- GNUNET_JSON_pack_rsa_signature ("blinded_rsa_signature",
- sig->details.blinded_rsa_signature));
- break;
- case TALER_DENOMINATION_CS:
- ps.object = GNUNET_JSON_PACK (
- GNUNET_JSON_pack_string ("cipher",
- "CS"),
- GNUNET_JSON_pack_uint64 ("b",
- sig->details.blinded_cs_answer.b),
- GNUNET_JSON_pack_data_auto ("s",
- &sig->details.blinded_cs_answer.s_scalar));
- break;
- default:
- GNUNET_assert (0);
- }
- return ps;
-}
-
-
-struct GNUNET_JSON_PackSpec
-TALER_JSON_pack_blinded_planchet (
- const char *name,
- const struct TALER_BlindedPlanchet *blinded_planchet)
-{
- struct GNUNET_JSON_PackSpec ps = {
- .field_name = name,
- };
-
- if (NULL == blinded_planchet)
- return ps;
- switch (blinded_planchet->cipher)
- {
- case TALER_DENOMINATION_RSA:
- ps.object = GNUNET_JSON_PACK (
- GNUNET_JSON_pack_string ("cipher",
- "RSA"),
- GNUNET_JSON_pack_data_varsize (
- "rsa_blinded_planchet",
- blinded_planchet->details.rsa_blinded_planchet.blinded_msg,
- blinded_planchet->details.rsa_blinded_planchet.blinded_msg_size));
- break;
- case TALER_DENOMINATION_CS:
- ps.object = GNUNET_JSON_PACK (
- GNUNET_JSON_pack_string ("cipher",
- "CS"),
- GNUNET_JSON_pack_data_auto (
- "cs_nonce",
- &blinded_planchet->details.cs_blinded_planchet.nonce),
- GNUNET_JSON_pack_data_auto (
- "cs_blinded_c0",
- &blinded_planchet->details.cs_blinded_planchet.c[0]),
- GNUNET_JSON_pack_data_auto (
- "cs_blinded_c1",
- &blinded_planchet->details.cs_blinded_planchet.c[1]));
- break;
- default:
- GNUNET_assert (0);
- }
- return ps;
-}
-
-
-struct GNUNET_JSON_PackSpec
-TALER_JSON_pack_amount (const char *name,
- const struct TALER_Amount *amount)
-{
- struct GNUNET_JSON_PackSpec ps = {
- .field_name = name,
- .object = (NULL != amount)
- ? TALER_JSON_from_amount (amount)
- : NULL
- };
-
- return ps;
-}
+// struct GNUNET_JSON_PackSpec
+// TALER_JSON_pack_time_abs_human (const char *name,
+// struct GNUNET_TIME_Absolute at)
+// {
+// struct GNUNET_JSON_PackSpec ps = {
+// .field_name = name,
+// .object = json_string (
+// GNUNET_STRINGS_absolute_time_to_string (at))
+// };
+
+// return ps;
+// }
+
+
+// struct GNUNET_JSON_PackSpec
+// TALER_JSON_pack_econtract (
+// const char *name,
+// const struct TALER_EncryptedContract *econtract)
+// {
+// struct GNUNET_JSON_PackSpec ps = {
+// .field_name = name,
+// };
+
+// if (NULL == econtract)
+// return ps;
+// ps.object
+// = GNUNET_JSON_PACK (
+// GNUNET_JSON_pack_data_varsize ("econtract",
+// econtract->econtract,
+// econtract->econtract_size),
+// GNUNET_JSON_pack_data_auto ("econtract_sig",
+// &econtract->econtract_sig),
+// GNUNET_JSON_pack_data_auto ("contract_pub",
+// &econtract->contract_pub));
+// return ps;
+// }
+
+
+// struct GNUNET_JSON_PackSpec
+// TALER_JSON_pack_age_commitment (
+// const char *name,
+// const struct TALER_AgeCommitment *age_commitment)
+// {
+// struct GNUNET_JSON_PackSpec ps = {
+// .field_name = name,
+// };
+// json_t *keys;
+
+// if (NULL == age_commitment ||
+// 0 == age_commitment->num)
+// return ps;
+
+// GNUNET_assert (NULL !=
+// (keys = json_array ()));
+
+// for (size_t i = 0;
+// i < age_commitment->num;
+// i++)
+// {
+// json_t *val;
+// val = GNUNET_JSON_from_data (&age_commitment->keys[i],
+// sizeof(age_commitment->keys[i]));
+// GNUNET_assert (NULL != val);
+// GNUNET_assert (0 ==
+// json_array_append_new (keys, val));
+// }
+
+// ps.object = keys;
+// return ps;
+// }
+
+
+// struct GNUNET_JSON_PackSpec
+// TALER_JSON_pack_denom_pub (
+// const char *name,
+// const struct TALER_DenominationPublicKey *pk)
+// {
+// struct GNUNET_JSON_PackSpec ps = {
+// .field_name = name,
+// };
+
+// if (NULL == pk)
+// return ps;
+// switch (pk->cipher)
+// {
+// case TALER_DENOMINATION_RSA:
+// ps.object
+// = GNUNET_JSON_PACK (
+// GNUNET_JSON_pack_string ("cipher", "RSA"),
+// GNUNET_JSON_pack_uint64 ("age_mask",
+// pk->age_mask.bits),
+// GNUNET_JSON_pack_rsa_public_key ("rsa_public_key",
+// pk->details.rsa_public_key));
+// break;
+// case TALER_DENOMINATION_CS:
+// ps.object
+// = GNUNET_JSON_PACK (
+// GNUNET_JSON_pack_string ("cipher", "CS"),
+// GNUNET_JSON_pack_uint64 ("age_mask",
+// pk->age_mask.bits),
+// GNUNET_JSON_pack_data_varsize ("cs_public_key",
+// &pk->details.cs_public_key,
+// sizeof
(pk->details.cs_public_key)));
+// break;
+// default:
+// GNUNET_assert (0);
+// }
+
+// return ps;
+// }
+
+
+// struct GNUNET_JSON_PackSpec
+// TALER_JSON_pack_denom_sig (
+// const char *name,
+// const struct TALER_DenominationSignature *sig)
+// {
+// struct GNUNET_JSON_PackSpec ps = {
+// .field_name = name,
+// };
+
+// if (NULL == sig)
+// return ps;
+// switch (sig->cipher)
+// {
+// case TALER_DENOMINATION_RSA:
+// ps.object = GNUNET_JSON_PACK (
+// GNUNET_JSON_pack_string ("cipher",
+// "RSA"),
+// GNUNET_JSON_pack_rsa_signature ("rsa_signature",
+// sig->details.rsa_signature));
+// break;
+// case TALER_DENOMINATION_CS:
+// ps.object = GNUNET_JSON_PACK (
+// GNUNET_JSON_pack_string ("cipher",
+// "CS"),
+// GNUNET_JSON_pack_data_auto ("cs_signature_r",
+// &sig->details.cs_signature.r_point),
+// GNUNET_JSON_pack_data_auto ("cs_signature_s",
+// &sig->details.cs_signature.s_scalar));
+// break;
+// default:
+// GNUNET_assert (0);
+// }
+// return ps;
+// }
+
+
+// struct GNUNET_JSON_PackSpec
+// TALER_JSON_pack_exchange_withdraw_values (
+// const char *name,
+// const struct TALER_ExchangeWithdrawValues *ewv)
+// {
+// struct GNUNET_JSON_PackSpec ps = {
+// .field_name = name,
+// };
+
+// if (NULL == ewv)
+// return ps;
+// switch (ewv->cipher)
+// {
+// case TALER_DENOMINATION_RSA:
+// ps.object = GNUNET_JSON_PACK (
+// GNUNET_JSON_pack_string ("cipher",
+// "RSA"));
+// break;
+// case TALER_DENOMINATION_CS:
+// ps.object = GNUNET_JSON_PACK (
+// GNUNET_JSON_pack_string ("cipher",
+// "CS"),
+// GNUNET_JSON_pack_data_varsize (
+// "r_pub_0",
+// &ewv->details.cs_values.r_pub[0],
+// sizeof(struct GNUNET_CRYPTO_CsRPublic)),
+// GNUNET_JSON_pack_data_varsize (
+// "r_pub_1",
+// &ewv->details.cs_values.r_pub[1],
+// sizeof(struct GNUNET_CRYPTO_CsRPublic))
+// );
+// break;
+// default:
+// GNUNET_assert (0);
+// }
+// return ps;
+// }
+
+
+// struct GNUNET_JSON_PackSpec
+// TALER_JSON_pack_blinded_denom_sig (
+// const char *name,
+// const struct TALER_BlindedDenominationSignature *sig)
+// {
+// struct GNUNET_JSON_PackSpec ps = {
+// .field_name = name,
+// };
+
+// if (NULL == sig)
+// return ps;
+// switch (sig->cipher)
+// {
+// case TALER_DENOMINATION_RSA:
+// ps.object = GNUNET_JSON_PACK (
+// GNUNET_JSON_pack_string ("cipher",
+// "RSA"),
+// GNUNET_JSON_pack_rsa_signature ("blinded_rsa_signature",
+// sig->details.blinded_rsa_signature));
+// break;
+// case TALER_DENOMINATION_CS:
+// ps.object = GNUNET_JSON_PACK (
+// GNUNET_JSON_pack_string ("cipher",
+// "CS"),
+// GNUNET_JSON_pack_uint64 ("b",
+// sig->details.blinded_cs_answer.b),
+// GNUNET_JSON_pack_data_auto ("s",
+//
&sig->details.blinded_cs_answer.s_scalar));
+// break;
+// default:
+// GNUNET_assert (0);
+// }
+// return ps;
+// }
+
+
+// struct GNUNET_JSON_PackSpec
+// TALER_JSON_pack_blinded_planchet (
+// const char *name,
+// const struct TALER_BlindedPlanchet *blinded_planchet)
+// {
+// struct GNUNET_JSON_PackSpec ps = {
+// .field_name = name,
+// };
+
+// if (NULL == blinded_planchet)
+// return ps;
+// switch (blinded_planchet->cipher)
+// {
+// case TALER_DENOMINATION_RSA:
+// ps.object = GNUNET_JSON_PACK (
+// GNUNET_JSON_pack_string ("cipher",
+// "RSA"),
+// GNUNET_JSON_pack_data_varsize (
+// "rsa_blinded_planchet",
+// blinded_planchet->details.rsa_blinded_planchet.blinded_msg,
+// blinded_planchet->details.rsa_blinded_planchet.blinded_msg_size));
+// break;
+// case TALER_DENOMINATION_CS:
+// ps.object = GNUNET_JSON_PACK (
+// GNUNET_JSON_pack_string ("cipher",
+// "CS"),
+// GNUNET_JSON_pack_data_auto (
+// "cs_nonce",
+// &blinded_planchet->details.cs_blinded_planchet.nonce),
+// GNUNET_JSON_pack_data_auto (
+// "cs_blinded_c0",
+// &blinded_planchet->details.cs_blinded_planchet.c[0]),
+// GNUNET_JSON_pack_data_auto (
+// "cs_blinded_c1",
+// &blinded_planchet->details.cs_blinded_planchet.c[1]));
+// break;
+// default:
+// GNUNET_assert (0);
+// }
+// return ps;
+// }
+
+
+// struct GNUNET_JSON_PackSpec
+// TALER_JSON_pack_amount (const char *name,
+// const struct TALER_Amount *amount)
+// {
+// struct GNUNET_JSON_PackSpec ps = {
+// .field_name = name,
+// .object = (NULL != amount)
+// ? TALER_JSON_from_amount (amount)
+// : NULL
+// };
+
+// return ps;
+// }
/* End of json/json_pack.c */
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [taler-donau] branch master updated: [build] comment files in "json" directory to compile,
gnunet <=