gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-anastasis] branch master updated: secretshare


From: gnunet
Subject: [taler-anastasis] branch master updated: secretshare
Date: Mon, 20 Apr 2020 01:16:17 +0200

This is an automated email from the git hooks/post-receive script.

ds-meister pushed a commit to branch master
in repository anastasis.

The following commit(s) were added to refs/heads/master by this push:
     new c04ec7d  secretshare
c04ec7d is described below

commit c04ec7d856c44388741077fe7c0d19d8b7822dd6
Author: Dominik Meister <address@hidden>
AuthorDate: Mon Apr 20 01:16:06 2020 +0200

    secretshare
---
 src/include/anastasis.h |  24 +++++++--
 src/lib/anastasis.c     | 141 ++++++++++++++++++++++++++++++++++++++++--------
 2 files changed, 138 insertions(+), 27 deletions(-)

diff --git a/src/include/anastasis.h b/src/include/anastasis.h
index 31ddcc7..2eaaf38 100644
--- a/src/include/anastasis.h
+++ b/src/include/anastasis.h
@@ -23,6 +23,7 @@
 #include "platform.h"
 #include <taler/taler_json_lib.h>
 #include <gnunet/gnunet_util_lib.h>
+#include <uuid/uuid.h>
 
 
 /*Download api*/
@@ -42,11 +43,18 @@ struct ANASTASIS_EscrowMethod
 */
 struct ANASTASIS_DecryptionPolicy
 {
-  // subset of methods that must be satisfied for this dp
-  struct ANASTASIS_EscrowMethod *ems;
-
-  unsigned int ems_len;
-
+  /**
+   * Set of escrow methods identfied by their uuids
+   */
+  uuid_t *escrow_uuids;
+  /**
+   * length of the methods in this policy
+   */
+  unsigned int uuids_length;
+  /**
+   * encrypted masterkey ( encrypted with the policy key)
+   */
+  struct ANASTASIS_CRYPTO_EncryptedMasterKey *emk;
 };
 
 /**
@@ -59,6 +67,10 @@ struct ANASTASIS_RecoveryInformation
 
   unsigned int dps_len;
 
+  struct ANSTASIS_EscrowMethod *ems;
+
+  unsigned int ems_len;
+
   unsigned int version;     // actual version obtained
 
 };
@@ -373,6 +385,8 @@ ANASTASIS_secret_share (const json_t *id_data,
                         const struct GNUNET_HashCode *last_etag,
                         struct ANASTASIS_Policy *policies[],
                         unsigned int policies_len,
+                        struct ANASTASIS_Truth *truths[],
+                        unsigned int truths_len,
                         ANASTASIS_SharePaymentCallback spc,
                         void *spc_cls,
                         ANASTASIS_ShareResultCallback src,
diff --git a/src/lib/anastasis.c b/src/lib/anastasis.c
index ef82156..dfc7d8e 100644
--- a/src/lib/anastasis.c
+++ b/src/lib/anastasis.c
@@ -120,6 +120,22 @@ struct ANASTASIS_Challenge
    * uuid which defines this challenge
    */
   uuid_t challenge_uuid;
+  /**
+   * Key used to encrypt the truth passed to the server
+   */
+   struct ANASTASIS_CRYPTO_TruthKey truth_key;
+  /**
+   * Salt used to encrypt the truth
+   */
+   struct ANASTASIS_CRYPTO_Salt truth_salt;
+  /**
+   * plaintext challenge which is sent to the client
+   */
+   void *challenge;
+   /**
+    * size of the challenge
+    */
+   size_t challenge_size;
 };
 
 /**
@@ -669,13 +685,13 @@ struct ANASTASIS_Policy
    */
   struct ANASTASIS_CRYPTO_Salt salt;
   /**
-  * size of the truths
-  */
-  unsigned int truths_len;
+   * set of truths inside this policy
+   */
+  uuid_t *uuids;
   /**
-  * set of truths inside this policy
-  */
-  struct ANASTASIS_Truth *truths[];
+   * length of methods used
+   */
+  unsigned int uuid_length;
 };
 
 /**
@@ -690,21 +706,20 @@ ANASTASIS_policy_create (struct ANASTASIS_Truth *truths[],
 {
   struct ANASTASIS_Policy *p;
   p = GNUNET_new (struct ANASTASIS_Policy);
-  struct ANASTASIS_CRYPTO_PolicyKey policy_key;
   struct ANASTASIS_CRYPTO_KeyShare key_shares[truths_len];
-  // FIXME
-  // p->truths = truths;
-  p->truths_len = truths_len;
-
+  uuid_t uuids[truths_len];
   for (unsigned int i = 0; i < truths_len; i++)
   {
     key_shares[i] = truths[i]->key_share;
+    memcpy(uuids[i], truths[i]->uuid, sizeof(uuid_t));
   }
   // FIXME SALT
   ANASTASIS_CRYPTO_policy_key_derive (key_shares,
                                       truths_len,
                                       &p->salt,
                                       &p->policy_key);
+  p->uuids = uuids;
+  p->uuid_length = truths_len;
   return p;
 }
 
@@ -748,6 +763,36 @@ struct ANASTASIS_SecretShare
    * Hash of the current upload.
    */
   struct GNUNET_HashCode curr_hash;
+    /**
+   * Identity key material used for the derivation of keys
+  */
+    struct ANASTASIS_CRYPTO_UserIdentifier id;
+    /**
+     * Public key for a request
+    */
+    struct ANASTASIS_CRYPTO_AccountPrivateKey priv_key;
+    /**
+     * Curl context
+    */
+    struct GNUNET_CURL_Context *ctx;
+    // FIXME not sure how to do payment
+    int payment_requested;
+    const char *payment_order_id;
+};
+
+/**
+ * FIXME NOT SURE IF NEEDED
+ * Internal struct which defines an escrow method
+ */
+struct ANASTASIS_TruthMethod
+{
+    char *url;
+    char *escrow_method;
+    uuid_t uuid;
+    struct ANASTASIS_CRYPTO_TruthKey truth_key;
+    struct ANASTASIS_CRYPTO_Salt salt;
+    void *challenge;
+    size_t challenge_size;
 };
 
 
@@ -762,7 +807,6 @@ policy_store_cb (void *cls,
 }
 
 
-
 /**
 * Creates a recovery document with the created policies.
 *
@@ -782,6 +826,8 @@ ANASTASIS_secret_share (const json_t *id_data,
                         const struct GNUNET_HashCode *last_etag,
                         struct ANASTASIS_Policy *policies[],
                         unsigned int policies_len,
+                        struct ANASTASIS_Truth *truths[],
+                        unsigned int truths_len,
                         ANASTASIS_SharePaymentCallback spc,
                         void *spc_cls,
                         ANASTASIS_ShareResultCallback src,
@@ -796,30 +842,81 @@ ANASTASIS_secret_share (const json_t *id_data,
   struct ANASTASIS_CRYPTO_EncryptedMasterKey
     encrypted_master_keys[policies_len];
   struct ANASTASIS_CRYPTO_PolicyKey policy_keys[policies_len];
+  struct ANASTASIS_DecryptionPolicy decryption_policies[policies_len];
+  struct ANASTASIS_TruthMethod truth_methods[truths_len];
+  struct SaltState *st = src_cls;
+  st->http_status = MHD_HTTP_OK;
+  void *enc_rec_doc;
+  size_t enc_rec_doc_size;
   json_t *recovery_document;
 
   for (unsigned int i = 0; i < policies_len; i++)
   {
     policy_keys[i] = policies[i]->policy_key;
   }
+  //FIXME CHALLENGE
+  for (unsigned int l = 0; l < truths_len; l++)
+  {
+    memcpy(truth_methods[l].uuid, truths[l]->uuid, sizeof(uuid_t));
+    truth_methods[l].url = truths[l]->url;
+    truth_methods[l].truth_key = truths[l]->truth_key;
+    truth_methods[l].salt = *truths[l]->salt;
+    truth_methods[l].escrow_method = truths[l]->method;
+  }
 
-  ANASTASIS_CRYPTO_core_secret_encrypt ((struct ANASTASIS_CRYPTO_PolicyKey *)
-                                        &policy_keys,
+  ANASTASIS_CRYPTO_core_secret_encrypt (policy_keys,
                                         policies_len,
                                         core_secret,
                                         core_secret_size,
                                         &encrypted_core_secret,
-                                        (struct
-                                         ANASTASIS_CRYPTO_EncryptedMasterKey *)
-                                        &encrypted_master_keys);
+                                        encrypted_master_keys);
 
+  for (unsigned int j = 0; j < policies_len; j++)
+  {
+    decryption_policies[j].emk  = &encrypted_master_keys[j];
+    decryption_policies[j].uuids_length = policies[j]->uuid_length;
+    decryption_policies[j].escrow_uuids = policies[j]->uuids;
+  }
 
-  // build recovery document in json
-  // Compress recovery document
-  // policy document encrypt
-  // policy upload
+  //FIXME
+  recovery_document = json_pack (
+          " s:[fmt]," /* escrow methods */
+          " s:[fmt]," /* decryption policies */
+          " s:o}", /* encrypted core secret */
+          "escrow_methods", &truth_methods,
+          "decryption_policies", &decryption_policies,
+          "core_secret", GNUNET_JSON_from_data (
+          core_secret, core_secret_size));
+
+  st->so = ANASTASIS_salt (ss->ctx,
+                           truth_methods[0].url,
+                           &salt_cb,
+                           st);
+  ANASTASIS_CRYPTO_user_identifier_derive (id_data,
+                                           &st->so->salt,
+                                           &ss->id);
+  salt_cleanup (st);
+
+ // ANASTASIS_CRYPTO_account_private_key_derive (&ss->id,
+   //                                            &ss->priv_key);
+
+  ANASTASIS_CRYPTO_recovery_document_encrypt (&ss->id,
+                                              recovery_document,
+                                              sizeof(recovery_document),//FIXME
+                                              &enc_rec_doc,
+                                              &enc_rec_doc_size);
+
+  ss->pso = ANASTASIS_policy_store (ss->ctx,
+                                    truth_methods[0].url,
+                                    &ss->priv_key,
+                                    last_etag,
+                                    enc_rec_doc,
+                                    enc_rec_doc_size,
+                                    ss->payment_requested,
+                                    ss->payment_order_id,
+                                    &policy_store_cb,
+                                    ss);
   // Callback handle
-
   return ss;
 }
 

-- 
To stop receiving notification emails like this one, please contact
address@hidden.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]