diff options
author | Christian Grothoff <christian@grothoff.org> | 2022-01-19 14:38:57 +0100 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2022-01-19 14:38:57 +0100 |
commit | 21e28d6d049a948fe71817da7cb3e3b0f1639eb6 (patch) | |
tree | 40dc5e591676cf64d67d4986ab580402d5db498b /src/lib/anastasis_backup.c | |
parent | 18c53ce9ac45efbf6bcb53995eb5d10a357c5846 (diff) | |
download | anastasis-21e28d6d049a948fe71817da7cb3e3b0f1639eb6.tar.gz anastasis-21e28d6d049a948fe71817da7cb3e3b0f1639eb6.tar.bz2 anastasis-21e28d6d049a948fe71817da7cb3e3b0f1639eb6.zip |
implement routine to download meta data and decrypt to libanastasis; improve API to include timestamp
Diffstat (limited to 'src/lib/anastasis_backup.c')
-rw-r--r-- | src/lib/anastasis_backup.c | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/src/lib/anastasis_backup.c b/src/lib/anastasis_backup.c index 20c77e4..2e769ca 100644 --- a/src/lib/anastasis_backup.c +++ b/src/lib/anastasis_backup.c @@ -734,6 +734,8 @@ ANASTASIS_secret_share (struct GNUNET_CURL_Context *ctx, json_t *esc_methods; size_t recovery_document_size; char *recovery_document_str; + size_t meta_size; + void *meta; if (0 == pss_length) { @@ -889,6 +891,18 @@ ANASTASIS_secret_share (struct GNUNET_CURL_Context *ctx, recovery_document_str = (char *) cbuf; } + meta_size = sizeof (struct GNUNET_HashCode); + if (NULL != secret_name) + meta_size += strlen (secret_name) + 1; + meta = GNUNET_malloc (meta_size); + GNUNET_CRYPTO_hash (recovery_document_str, + recovery_document_size, + (struct GNUNET_HashCode *) meta); + if (NULL != secret_name) + memcpy (meta + sizeof (struct GNUNET_HashCode), + secret_name, + strlen (secret_name) + 1); + for (unsigned int l = 0; l < ss->pss_length; l++) { struct PolicyStoreState *pss = &ss->pss[l]; @@ -905,12 +919,11 @@ ANASTASIS_secret_share (struct GNUNET_CURL_Context *ctx, ANASTASIS_CRYPTO_user_identifier_derive (id_data, &pss->server_salt, &pss->id); - if (NULL != secret_name) - ANASTASIS_CRYPTO_recovery_metadata_encrypt (&pss->id, - secret_name, - strlen (secret_name), - &enc_meta, - &enc_meta_size); + ANASTASIS_CRYPTO_recovery_metadata_encrypt (&pss->id, + meta, + meta_size, + &enc_meta, + &enc_meta_size); ANASTASIS_CRYPTO_account_private_key_derive (&pss->id, &anastasis_priv); ANASTASIS_CRYPTO_recovery_document_encrypt (&pss->id, @@ -943,9 +956,11 @@ ANASTASIS_secret_share (struct GNUNET_CURL_Context *ctx, GNUNET_break (0); ANASTASIS_secret_share_cancel (ss); GNUNET_free (recovery_document_str); + GNUNET_free (meta); return NULL; } } + GNUNET_free (meta); GNUNET_free (recovery_document_str); return ss; } |