aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Blättler <blatc2@bfh.ch>2024-05-11 15:59:55 +0200
committerChristian Blättler <blatc2@bfh.ch>2024-05-11 15:59:55 +0200
commit67ced977a3b6d39e932d53d3b4f6f16085b19745 (patch)
tree108ecbc2961c04353a9521a6528fe7acf91a38dd
parent77dec74367f3c9b201972197135ec338d32713d1 (diff)
downloadexchange-67ced977a3b6d39e932d53d3b4f6f16085b19745.tar.xz
use new gnunet json spec functions
-rw-r--r--src/json/json_helper.c368
1 files changed, 6 insertions, 362 deletions
diff --git a/src/json/json_helper.c b/src/json/json_helper.c
index 9870f252e..7cad6a38c 100644
--- a/src/json/json_helper.c
+++ b/src/json/json_helper.c
@@ -531,261 +531,23 @@ TALER_JSON_spec_age_commitment (const char *name,
return ret;
}
-
-/**
- * Parse given JSON object to token issue signature.
- * TODO: Exctract common code between this and parse_denom_sig function to a helper.
- *
- * @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_token_issue_sig (void *cls,
- json_t *root,
- struct GNUNET_JSON_Specification *spec)
-{
- struct TALER_TokenIssueSignatureP *issue_sig = spec->ptr;
- struct GNUNET_CRYPTO_UnblindedSignature *unblinded_sig;
- 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;
- }
- unblinded_sig = GNUNET_new (struct GNUNET_CRYPTO_UnblindedSignature);
- unblinded_sig->cipher = string_to_cipher (cipher);
- unblinded_sig->rc = 1;
- switch (unblinded_sig->cipher)
- {
- case GNUNET_CRYPTO_BSA_INVALID:
- break;
- case GNUNET_CRYPTO_BSA_RSA:
- {
- struct GNUNET_JSON_Specification ispec[] = {
- GNUNET_JSON_spec_rsa_signature (
- "rsa_signature",
- &unblinded_sig->details.rsa_signature),
- GNUNET_JSON_spec_end ()
- };
-
- if (GNUNET_OK !=
- GNUNET_JSON_parse (root,
- ispec,
- &emsg,
- &eline))
- {
- GNUNET_break_op (0);
- GNUNET_free (unblinded_sig);
- return GNUNET_SYSERR;
- }
- issue_sig->signature = unblinded_sig;
- return GNUNET_OK;
- }
- case GNUNET_CRYPTO_BSA_CS:
- {
- struct GNUNET_JSON_Specification ispec[] = {
- GNUNET_JSON_spec_fixed_auto ("cs_signature_r",
- &unblinded_sig->details.cs_signature.
- r_point),
- GNUNET_JSON_spec_fixed_auto ("cs_signature_s",
- &unblinded_sig->details.cs_signature.
- s_scalar),
- GNUNET_JSON_spec_end ()
- };
-
- if (GNUNET_OK !=
- GNUNET_JSON_parse (root,
- ispec,
- &emsg,
- &eline))
- {
- GNUNET_break_op (0);
- GNUNET_free (unblinded_sig);
- return GNUNET_SYSERR;
- }
- issue_sig->signature = unblinded_sig;
- return GNUNET_OK;
- }
- }
- GNUNET_break_op (0);
- GNUNET_free (unblinded_sig);
- return GNUNET_SYSERR;
-}
-
-
-/**
- * Cleanup data left from parsing token issue signature.
- *
- * @param cls closure, NULL
- * @param[out] spec where to free the data
- */
-static void
-clean_token_issue_sig (void *cls,
- struct GNUNET_JSON_Specification *spec)
-{
- struct TALER_TokenIssueSignatureP *issue_sig = spec->ptr;
-
- (void) cls;
- TALER_token_issue_sig_free (issue_sig);
-}
-
-
struct GNUNET_JSON_Specification
TALER_JSON_spec_token_issue_sig (const char *field,
struct TALER_TokenIssueSignatureP *sig)
{
- struct GNUNET_JSON_Specification ret = {
- .parser = &parse_token_issue_sig,
- .cleaner = &clean_token_issue_sig,
- .field = field,
- .ptr = sig
- };
-
sig->signature = NULL;
- return ret;
+ return GNUNET_JSON_spec_unblinded_signature (field,
+ &sig->signature);
}
-
-/**
- * Parse given JSON object to blinded token issue 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_token_issue_sig (void *cls,
- json_t *root,
- struct GNUNET_JSON_Specification *spec)
-{
- struct TALER_TokenIssueBlindSignatureP *issue_sig = spec->ptr;
- struct GNUNET_CRYPTO_BlindedSignature *blinded_sig;
- 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_sig = GNUNET_new (struct GNUNET_CRYPTO_BlindedSignature);
- blinded_sig->cipher = string_to_cipher (cipher);
- blinded_sig->rc = 1;
- switch (blinded_sig->cipher)
- {
- case GNUNET_CRYPTO_BSA_INVALID:
- break;
- case GNUNET_CRYPTO_BSA_RSA:
- {
- struct GNUNET_JSON_Specification ispec[] = {
- GNUNET_JSON_spec_rsa_signature (
- "blinded_rsa_signature",
- &blinded_sig->details.blinded_rsa_signature),
- GNUNET_JSON_spec_end ()
- };
-
- if (GNUNET_OK !=
- GNUNET_JSON_parse (root,
- ispec,
- &emsg,
- &eline))
- {
- GNUNET_break_op (0);
- GNUNET_free (blinded_sig);
- return GNUNET_SYSERR;
- }
- issue_sig->signature = blinded_sig;
- return GNUNET_OK;
- }
- case GNUNET_CRYPTO_BSA_CS:
- {
- struct GNUNET_JSON_Specification ispec[] = {
- GNUNET_JSON_spec_uint32 ("b",
- &blinded_sig->details.blinded_cs_answer.b),
- GNUNET_JSON_spec_fixed_auto ("s",
- &blinded_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);
- GNUNET_free (blinded_sig);
- return GNUNET_SYSERR;
- }
- issue_sig->signature = blinded_sig;
- return GNUNET_OK;
- }
- }
- GNUNET_break_op (0);
- GNUNET_free (blinded_sig);
- return GNUNET_SYSERR;
-}
-
-
-/**
- * Cleanup data left from parsing blinded token sisue sig.
- *
- * @param cls closure, NULL
- * @param[out] spec where to free the data
- */
-static void
-clean_blinded_token_issue_sig (void *cls,
- struct GNUNET_JSON_Specification *spec)
-{
- struct TALER_TokenIssueBlindSignatureP *issue_sig = spec->ptr;
-
- (void) cls;
- TALER_blinded_issue_sig_free (issue_sig);
-}
-
-
struct GNUNET_JSON_Specification
TALER_JSON_spec_blinded_token_issue_sig (
const char *field,
struct TALER_TokenIssueBlindSignatureP *sig)
{
- struct GNUNET_JSON_Specification ret = {
- .parser = &parse_blinded_token_issue_sig,
- .cleaner = &clean_blinded_token_issue_sig,
- .field = field,
- .ptr = sig
- };
-
sig->signature = NULL;
- return ret;
+ return GNUNET_JSON_spec_blinded_signature (field,
+ &sig->signature);
}
@@ -1030,131 +792,13 @@ TALER_JSON_spec_denom_pub_cipher (const char *field,
}
-/**
- * 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;
- struct GNUNET_CRYPTO_UnblindedSignature *unblinded_sig;
- 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;
- }
- unblinded_sig = GNUNET_new (struct GNUNET_CRYPTO_UnblindedSignature);
- unblinded_sig->cipher = string_to_cipher (cipher);
- unblinded_sig->rc = 1;
- switch (unblinded_sig->cipher)
- {
- case GNUNET_CRYPTO_BSA_INVALID:
- break;
- case GNUNET_CRYPTO_BSA_RSA:
- {
- struct GNUNET_JSON_Specification ispec[] = {
- GNUNET_JSON_spec_rsa_signature (
- "rsa_signature",
- &unblinded_sig->details.rsa_signature),
- GNUNET_JSON_spec_end ()
- };
-
- if (GNUNET_OK !=
- GNUNET_JSON_parse (root,
- ispec,
- &emsg,
- &eline))
- {
- GNUNET_break_op (0);
- GNUNET_free (unblinded_sig);
- return GNUNET_SYSERR;
- }
- denom_sig->unblinded_sig = unblinded_sig;
- return GNUNET_OK;
- }
- case GNUNET_CRYPTO_BSA_CS:
- {
- struct GNUNET_JSON_Specification ispec[] = {
- GNUNET_JSON_spec_fixed_auto ("cs_signature_r",
- &unblinded_sig->details.cs_signature.
- r_point),
- GNUNET_JSON_spec_fixed_auto ("cs_signature_s",
- &unblinded_sig->details.cs_signature.
- s_scalar),
- GNUNET_JSON_spec_end ()
- };
-
- if (GNUNET_OK !=
- GNUNET_JSON_parse (root,
- ispec,
- &emsg,
- &eline))
- {
- GNUNET_break_op (0);
- GNUNET_free (unblinded_sig);
- return GNUNET_SYSERR;
- }
- denom_sig->unblinded_sig = unblinded_sig;
- return GNUNET_OK;
- }
- }
- GNUNET_break_op (0);
- GNUNET_free (unblinded_sig);
- 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->unblinded_sig = NULL;
- return ret;
+ return GNUNET_JSON_spec_unblinded_signature (field,
+ &sig->unblinded_sig);
}