From 1db139a7f3b74b2dc4135ab8b42d625415705d63 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Sat, 31 Jul 2021 22:50:16 +0200 Subject: -eliminating some legacy json_pack calls from Anastasis --- src/lib/anastasis_backup.c | 140 +++++++++++++++++++------------------------ src/lib/anastasis_recovery.c | 106 ++++++++++++++++---------------- 2 files changed, 113 insertions(+), 133 deletions(-) (limited to 'src/lib') diff --git a/src/lib/anastasis_backup.c b/src/lib/anastasis_backup.c index ea55e6a..d97bdae 100644 --- a/src/lib/anastasis_backup.c +++ b/src/lib/anastasis_backup.c @@ -134,29 +134,28 @@ ANASTASIS_truth_from_json (const json_t *json) json_t * ANASTASIS_truth_to_json (const struct ANASTASIS_Truth *t) { - return json_pack ( - "{s:o,s:o,s:o,s:o,s:o" - ",s:o,s:s,s:s,s:s,s:s?}", - "uuid", - GNUNET_JSON_from_data_auto (&t->uuid), - "key_share", - GNUNET_JSON_from_data_auto (&t->key_share), - "truth_key", - GNUNET_JSON_from_data_auto (&t->truth_key), - "salt", - GNUNET_JSON_from_data_auto (&t->salt), - "nonce", - GNUNET_JSON_from_data_auto (&t->nonce), - "provider_salt", - GNUNET_JSON_from_data_auto (&t->provider_salt), - "url", - t->url, - "type", - t->type, - "instructions", - t->instructions, - "mime_type", - t->mime_type); + return GNUNET_JSON_PACK ( + GNUNET_JSON_pack_data_auto ("uuid", + &t->uuid), + GNUNET_JSON_pack_data_auto ("key_share", + &t->key_share), + GNUNET_JSON_pack_data_auto ("truth_key", + &t->truth_key), + GNUNET_JSON_pack_data_auto ("salt", + &t->salt), + GNUNET_JSON_pack_data_auto ("nonce", + &t->nonce), + GNUNET_JSON_pack_data_auto ("provider_salt", + &t->provider_salt), + GNUNET_JSON_pack_string ("url", + t->url), + GNUNET_JSON_pack_string ("type", + t->type), + GNUNET_JSON_pack_string ("instructions", + t->instructions), + GNUNET_JSON_pack_allow_null ( + GNUNET_JSON_pack_string ("mime_type", + t->mime_type))); } @@ -778,23 +777,16 @@ ANASTASIS_secret_share (struct GNUNET_CURL_Context *ctx, uuids, GNUNET_JSON_from_data_auto ( &policy->truths[b]->uuid))); - if (0 != - json_array_append_new ( - dec_policies, - json_pack ("{s:o, s:o, s:o}", - "master_key", - GNUNET_JSON_from_data_auto ( - &encrypted_master_keys[k]), - "uuids", - uuids, - "salt", - GNUNET_JSON_from_data_auto (&policy->salt)))) - { - GNUNET_break (0); - json_decref (dec_policies); - ANASTASIS_secret_share_cancel (ss); - return NULL; - } + GNUNET_assert (0 == + json_array_append_new ( + dec_policies, + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_data_auto ("master_key", + &encrypted_master_keys[k]), + GNUNET_JSON_pack_array_steal ("uuids", + uuids), + GNUNET_JSON_pack_data_auto ("salt", + &policy->salt)))); } esc_methods = json_array (); @@ -825,38 +817,24 @@ ANASTASIS_secret_share (struct GNUNET_CURL_Context *ctx, if (! unique) continue; - if (0 != - json_array_append_new ( - esc_methods, - json_pack ("{s:o," /* truth uuid */ - " s:s," /* provider url */ - " s:s," /* instructions */ - " s:o," /* truth key */ - " s:o," /* truth salt */ - " s:o," /* provider salt */ - " s:s}", /* escrow method */ - "uuid", - GNUNET_JSON_from_data_auto ( - &pt->uuid), - "url", - pt->url, - "instructions", - pt->instructions, - "truth_key", GNUNET_JSON_from_data_auto ( - &pt->truth_key), - "salt", GNUNET_JSON_from_data_auto ( - &pt->salt), - "provider_salt", GNUNET_JSON_from_data_auto ( - &pt->provider_salt), - "escrow_type", - pt->type))) - { - GNUNET_break (0); - json_decref (esc_methods); - json_decref (dec_policies); - ANASTASIS_secret_share_cancel (ss); - return NULL; - } + GNUNET_assert (0 == + json_array_append_new ( + esc_methods, + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_data_auto ("uuid", + &pt->uuid), + GNUNET_JSON_pack_string ("url", + pt->url), + GNUNET_JSON_pack_string ("instructions", + pt->instructions), + GNUNET_JSON_pack_data_auto ("truth_key", + &pt->truth_key), + GNUNET_JSON_pack_data_auto ("salt", + &pt->salt), + GNUNET_JSON_pack_data_auto ("provider_salt", + &pt->provider_salt), + GNUNET_JSON_pack_string ("escrow_type", + pt->type)))); } } @@ -869,13 +847,17 @@ ANASTASIS_secret_share (struct GNUNET_CURL_Context *ctx, int ret; uint32_t be_size; - recovery_document = json_pack ( - "{s:s?, s:o, s:o, s:o}", - "secret_name", secret_name, - "policies", dec_policies, - "escrow_methods", esc_methods, - "encrypted_core_secret", GNUNET_JSON_from_data (encrypted_core_secret, - core_secret_size)); + recovery_document = GNUNET_JSON_PACK ( + GNUNET_JSON_pack_allow_null ( + GNUNET_JSON_pack_string ("secret_name", + secret_name)), + GNUNET_JSON_pack_array_steal ("policies", + dec_policies), + GNUNET_JSON_pack_array_steal ("escrow_methods", + esc_methods), + GNUNET_JSON_pack_data_varsize ("encrypted_core_secret", + encrypted_core_secret, + core_secret_size)); GNUNET_assert (NULL != recovery_document); GNUNET_free (encrypted_core_secret); diff --git a/src/lib/anastasis_recovery.c b/src/lib/anastasis_recovery.c index 5b0726f..2a606d2 100644 --- a/src/lib/anastasis_recovery.c +++ b/src/lib/anastasis_recovery.c @@ -963,22 +963,20 @@ ANASTASIS_recovery_serialize (const struct ANASTASIS_Recovery *r) const struct ANASTASIS_Challenge *c = dp->pub_details.challenges[j]; json_t *cs; - cs = json_pack ("{s:o}", - "uuid", - GNUNET_JSON_from_data_auto (&c->ci.uuid)); - GNUNET_assert (NULL != cs); + cs = GNUNET_JSON_PACK ( + GNUNET_JSON_pack_data_auto ("uuid", + &c->ci.uuid)); GNUNET_assert (0 == json_array_append_new (c_arr, cs)); } - dps = json_pack ("{s:o, s:o, s:o}", - "emk", - GNUNET_JSON_from_data_auto (&dp->emk), - "salt", - GNUNET_JSON_from_data_auto (&dp->salt), - "challenges", - c_arr); - GNUNET_assert (NULL != dps); + dps = GNUNET_JSON_PACK ( + GNUNET_JSON_pack_data_auto ("emk", + &dp->emk), + GNUNET_JSON_pack_data_auto ("salt", + &dp->salt), + GNUNET_JSON_pack_array_steal ("challenges", + c_arr)); GNUNET_assert (0 == json_array_append_new (dps_arr, dps)); @@ -990,53 +988,53 @@ ANASTASIS_recovery_serialize (const struct ANASTASIS_Recovery *r) const struct ANASTASIS_Challenge *c = &r->cs[i]; json_t *cs; - cs = json_pack ("{s:o,s:o,s:o,s:o,s:o?," - " s:s,s:s,s:s,s:b}", - "uuid", - GNUNET_JSON_from_data_auto (&c->ci.uuid), - "truth_key", - GNUNET_JSON_from_data_auto (&c->truth_key), - "salt", - GNUNET_JSON_from_data_auto (&c->salt), - "provider_salt", - GNUNET_JSON_from_data_auto (&c->provider_salt), - "key_share", - c->ci.solved - ? GNUNET_JSON_from_data_auto (&c->key_share) - : NULL, - "url", - c->url, - "type", - c->type, - "instructions", - c->instructions, - "solved", - c->ci.solved); - GNUNET_assert (NULL != cs); + cs = GNUNET_JSON_PACK ( + GNUNET_JSON_pack_data_auto ("uuid", + &c->ci.uuid), + GNUNET_JSON_pack_data_auto ("truth_key", + &c->truth_key), + GNUNET_JSON_pack_data_auto ("salt", + &c->salt), + GNUNET_JSON_pack_data_auto ("provider_salt", + &c->provider_salt), + GNUNET_JSON_pack_allow_null ( + GNUNET_JSON_pack_data_varsize ("key_share", + c->ci.solved + ? &c->key_share + : NULL, + sizeof (c->key_share))), + GNUNET_JSON_pack_string ("url", + c->url), + GNUNET_JSON_pack_string ("type", + c->type), + GNUNET_JSON_pack_string ("instructions", + c->instructions), + GNUNET_JSON_pack_bool ("solved", + c->ci.solved)); GNUNET_assert (0 == json_array_append_new (cs_arr, cs)); } - return json_pack ("{s:o, s:o, s:o, s:I, s:O, " - " s:s, s:s?, s:o}", - "id", - GNUNET_JSON_from_data_auto (&r->id), - "dps", - dps_arr, - "cs", - cs_arr, - "version", - (json_int_t) r->ri.version, - "id_data", - r->id_data, - "provider_url", - r->provider_url, - "secret_name", - r->secret_name, - "core_secret", - GNUNET_JSON_from_data (r->enc_core_secret, - r->enc_core_secret_size)); + return GNUNET_JSON_PACK ( + GNUNET_JSON_pack_data_auto ("id", + &r->id), + GNUNET_JSON_pack_array_steal ("dps", + dps_arr), + GNUNET_JSON_pack_array_steal ("cs", + cs_arr), + GNUNET_JSON_pack_uint64 ("version", + r->ri.version), + GNUNET_JSON_pack_object_incref ("id_data", + (json_t *) r->id_data), + GNUNET_JSON_pack_string ("provider_url", + r->provider_url), + GNUNET_JSON_pack_allow_null ( + GNUNET_JSON_pack_string ("secret_name", + r->secret_name)), + GNUNET_JSON_pack_data_varsize ("core_secret", + r->enc_core_secret, + r->enc_core_secret_size)); } -- cgit v1.2.3