summaryrefslogtreecommitdiff
path: root/src/lib/anastasis_backup.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2022-01-19 14:38:57 +0100
committerChristian Grothoff <christian@grothoff.org>2022-01-19 14:38:57 +0100
commit21e28d6d049a948fe71817da7cb3e3b0f1639eb6 (patch)
tree40dc5e591676cf64d67d4986ab580402d5db498b /src/lib/anastasis_backup.c
parent18c53ce9ac45efbf6bcb53995eb5d10a357c5846 (diff)
downloadanastasis-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.c27
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;
}