anastasis

Credential backup and recovery protocol and service
Log | Files | Refs | Submodules | README | LICENSE

commit c2527bedd52f4c0bfd45d8a3f598a3660607ddc8
parent c8a07345235becde44717fb50b44d851eca8f400
Author: Christian Grothoff <christian@grothoff.org>
Date:   Fri, 13 Dec 2024 15:32:15 +0100

check return values and other minor bugs

Diffstat:
Msrc/authorization/anastasis_authorization_plugin_post.c | 2--
Msrc/authorization/anastasis_authorization_plugin_sms.c | 2--
Msrc/reducer/anastasis_api_backup_redux.c | 11++++++++---
Msrc/reducer/anastasis_api_recovery_redux.c | 18+++++++++++-------
Msrc/reducer/anastasis_api_redux.c | 9+++++----
Msrc/testing/testing_api_helpers.c | 5+++--
Msrc/util/anastasis-crypto-tvg.c | 86+++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------
Msrc/util/anastasis_crypto.c | 25+++++++++++++------------
8 files changed, 100 insertions(+), 58 deletions(-)

diff --git a/src/authorization/anastasis_authorization_plugin_post.c b/src/authorization/anastasis_authorization_plugin_post.c @@ -463,8 +463,6 @@ post_challenge (struct ANASTASIS_AUTHORIZATION_State *as, { ssize_t ret; - if (0 == left) - break; ret = GNUNET_DISK_file_write (pipe_stdin, off, left); diff --git a/src/authorization/anastasis_authorization_plugin_sms.c b/src/authorization/anastasis_authorization_plugin_sms.c @@ -386,8 +386,6 @@ sms_challenge (struct ANASTASIS_AUTHORIZATION_State *as, { ssize_t ret; - if (0 == left) - break; ret = GNUNET_DISK_file_write (pipe_stdin, off, left); diff --git a/src/reducer/anastasis_api_backup_redux.c b/src/reducer/anastasis_api_backup_redux.c @@ -194,8 +194,11 @@ ANASTASIS_backup_start (const struct GNUNET_CONFIGURATION_Handle *cfg) pid = fork (); if (pid == 0) { - close (pipefd_stdout[0]); - dup2 (pipefd_stdout[1], STDOUT_FILENO); + GNUNET_assert (0 == + close (pipefd_stdout[0])); + GNUNET_assert (STDOUT_FILENO == + dup2 (pipefd_stdout[1], + STDOUT_FILENO)); execlp (external_reducer, external_reducer, "-b", @@ -203,9 +206,11 @@ ANASTASIS_backup_start (const struct GNUNET_CONFIGURATION_Handle *cfg) GNUNET_assert (0); } - close (pipefd_stdout[1]); + GNUENT_assert (0 == + close (pipefd_stdout[1])); reducer_stdout = fdopen (pipefd_stdout[0], "r"); + GNUNET_assert (NULL != reducer_stdout); { json_error_t err; diff --git a/src/reducer/anastasis_api_recovery_redux.c b/src/reducer/anastasis_api_recovery_redux.c @@ -99,9 +99,11 @@ ANASTASIS_recovery_start (const struct GNUNET_CONFIGURATION_Handle *cfg) pid = fork (); if (pid == 0) { - (void) close (pipefd_stdout[0]); - (void) dup2 (pipefd_stdout[1], - STDOUT_FILENO); + GNUNET_assert (0 == + close (pipefd_stdout[0])); + GNUNET_assert (STDOUT_FILENO == + dup2 (pipefd_stdout[1], + STDOUT_FILENO)); execlp (external_reducer, external_reducer, "-r", @@ -109,7 +111,8 @@ ANASTASIS_recovery_start (const struct GNUNET_CONFIGURATION_Handle *cfg) GNUNET_assert (0); } - close (pipefd_stdout[1]); + GNUNET_assert (0 == + close (pipefd_stdout[1])); reducer_stdout = fdopen (pipefd_stdout[0], "r"); { @@ -2661,9 +2664,10 @@ ANASTASIS_REDUX_recovery_challenge_begin_ (json_t *state, "'identity_attributes' missing"); return NULL; } - json_object_set (state, - "identity_attributes", - attributes); + GNUNET_assert (0 == + json_object_set (state, + "identity_attributes", + attributes)); set_state (state, ANASTASIS_RECOVERY_STATE_SECRET_SELECTING); cb (cb_cls, diff --git a/src/reducer/anastasis_api_redux.c b/src/reducer/anastasis_api_redux.c @@ -1662,10 +1662,11 @@ cleanup_external_reducer (void *cls) GNUNET_assert (GNUNET_SYSERR != pwret); if (GNUNET_NO == pwret) { - GNUNET_OS_process_kill (red_cls->reducer_process, - SIGTERM); - GNUNET_assert (GNUNET_SYSERR != GNUNET_OS_process_wait ( - red_cls->reducer_process)); + GNUNET_assert (0 == + GNUNET_OS_process_kill (red_cls->reducer_process, + SIGTERM)); + GNUNET_assert (GNUNET_SYSERR != + GNUNET_OS_process_wait (red_cls->reducer_process)); } GNUNET_OS_process_destroy (red_cls->reducer_process); diff --git a/src/testing/testing_api_helpers.c b/src/testing/testing_api_helpers.c @@ -64,8 +64,9 @@ ANASTASIS_TESTING_run_anastasis (const char *config_filename, { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Failed to launch `anastasis-httpd' (or `wget')\n"); - GNUNET_OS_process_kill (anastasis_proc, - SIGTERM); + GNUNET_break (0 == + GNUNET_OS_process_kill (anastasis_proc, + SIGTERM)); GNUNET_OS_process_wait (anastasis_proc); GNUNET_OS_process_destroy (anastasis_proc); ANASTASIS_FAIL (); diff --git a/src/util/anastasis-crypto-tvg.c b/src/util/anastasis-crypto-tvg.c @@ -74,9 +74,10 @@ vec_for (json_t *vecs, const char *vecname) { json_t *t = json_object (); - json_object_set_new (t, - "operation", - json_string (vecname)); + GNUNET_assert (0 == + json_object_set_new (t, + "operation", + json_string (vecname))); json_array_append_new (vecs, t); return t; } @@ -100,12 +101,16 @@ d2j (json_t *vec, char *buf; json_t *json; - buf = GNUNET_STRINGS_data_to_string_alloc (data, size); + buf = GNUNET_STRINGS_data_to_string_alloc (data, + size); json = json_string (buf); GNUNET_free (buf); GNUNET_break (NULL != json); - json_object_set_new (vec, label, json); + GNUNET_assert (0 == + json_object_set_new (vec, + label, + json)); } @@ -117,7 +122,8 @@ d2j_append (json_t *arr, char *buf; json_t *json; - buf = GNUNET_STRINGS_data_to_string_alloc (data, size); + buf = GNUNET_STRINGS_data_to_string_alloc (data, + size); json = json_string (buf); GNUNET_free (buf); GNUNET_break (NULL != json); @@ -312,17 +318,21 @@ output_vectors () json_t *vecfile = json_object (); json_t *vecs = json_array (); - json_object_set_new (vecfile, - "encoding", - json_string ("base32crockford")); - json_object_set_new (vecfile, - "producer", - json_string ( - "GNU Anastasis (C implementation) " PACKAGE_VERSION " " - VCS_VERSION)); - json_object_set_new (vecfile, - "vectors", - vecs); + GNUNET_assert (0 == + json_object_set_new (vecfile, + "encoding", + json_string ("base32crockford"))); + GNUNET_assert (0 == + json_object_set_new (vecfile, + "producer", + json_string ( + "GNU Anastasis (C implementation) " + PACKAGE_VERSION " " + VCS_VERSION))); + GNUNET_assert (0 == + json_object_set_new (vecfile, + "vectors", + vecs)); { json_t *vec = vec_for (vecs, "hash"); @@ -350,9 +360,16 @@ output_vectors () ANASTASIS_CRYPTO_user_identifier_derive (id_data, &provider_salt, &id); - json_object_set_new (vec, "input_id_data", id_data); - d2j_auto (vec, "input_provider_salt", &provider_salt); - d2j_auto (vec, "output_id", &id); + GNUNET_assert (0 == + json_object_set_new (vec, + "input_id_data", + id_data)); + d2j_auto (vec, + "input_provider_salt", + &provider_salt); + d2j_auto (vec, + "output_id", + &id); } { @@ -380,8 +397,14 @@ output_vectors () random_auto (&uuid); random_auto (&salt); - ANASTASIS_CRYPTO_secure_answer_hash (answer, &uuid, &salt, &result); - json_object_set_new (vec, "input_answer", json_string (answer)); + ANASTASIS_CRYPTO_secure_answer_hash (answer, + &uuid, + &salt, + &result); + GNUNET_assert (0 == + json_object_set_new (vec, + "input_answer", + json_string (answer))); d2j_auto (vec, "input_uuid", &uuid); d2j_auto (vec, "input_salt", &salt); d2j_auto (vec, "output_hash", &result); @@ -424,8 +447,13 @@ output_vectors () &enc_key_share); d2j_auto (vec, "input_key_share", &key_share); d2j_auto (vec, "input_user_id", &id); - json_object_set_new (vec, "input_xsalt", json_string (xsalt)); - d2j_auto (vec, "output_enc_key_share", &enc_key_share); + GNUNET_assert (0 == + json_object_set_new (vec, + "input_xsalt", + json_string (xsalt))); + d2j_auto (vec, + "output_enc_key_share", + &enc_key_share); } { @@ -445,7 +473,10 @@ output_vectors () &enc_key_share); d2j_auto (vec, "input_key_share", &key_share); d2j_auto (vec, "input_user_id", &id); - json_object_set_new (vec, "input_xsalt", json_null ()); + GNUNET_assert (0 == + json_object_set_new (vec, + "input_xsalt", + json_null ())); d2j_auto (vec, "output_enc_key_share", &enc_key_share); } @@ -496,7 +527,10 @@ output_vectors () d2j_append_auto (key_shares_json, &key_shares[0]); d2j_append_auto (key_shares_json, &key_shares[1]); - json_object_set_new (vec, "input_key_shares", key_shares_json); + GNUNET_assert (0 == + json_object_set_new (vec, + "input_key_shares", + key_shares_json)); d2j_auto (vec, "input_salt", &salt); d2j_auto (vec, "output_policy_key", &policy_key); } diff --git a/src/util/anastasis_crypto.c b/src/util/anastasis_crypto.c @@ -438,18 +438,19 @@ ANASTASIS_CRYPTO_policy_key_derive ( const struct ANASTASIS_CRYPTO_MasterSaltP *salt, struct ANASTASIS_CRYPTO_PolicyKeyP *policy_key) { - GNUNET_CRYPTO_kdf (policy_key, - sizeof (*policy_key), - /* salt / XTS */ - salt, - sizeof (*salt), - /* ikm */ - key_shares, - keyshare_length * sizeof (*key_shares), - /* info chunks */ - "anastasis-policy-key-derive", - strlen ("anastasis-policy-key-derive"), - NULL, 0); + GNUNET_assert (GNUNET_YES == + GNUNET_CRYPTO_kdf (policy_key, + sizeof (*policy_key), + /* salt / XTS */ + salt, + sizeof (*salt), + /* ikm */ + key_shares, + keyshare_length * sizeof (*key_shares), + /* info chunks */ + "anastasis-policy-key-derive", + strlen ("anastasis-policy-key-derive"), + NULL, 0)); }