gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r37282 - gnunet/src/secretsharing


From: gnunet
Subject: [GNUnet-SVN] r37282 - gnunet/src/secretsharing
Date: Sat, 18 Jun 2016 23:19:27 +0200

Author: grothoff
Date: 2016-06-18 23:19:27 +0200 (Sat, 18 Jun 2016)
New Revision: 37282

Modified:
   gnunet/src/secretsharing/secretsharing.h
   gnunet/src/secretsharing/secretsharing_api.c
   gnunet/src/secretsharing/secretsharing_common.c
   gnunet/src/secretsharing/test_secretsharing_api.c
Log:
update secretsharing to new MQ API

Modified: gnunet/src/secretsharing/secretsharing.h
===================================================================
--- gnunet/src/secretsharing/secretsharing.h    2016-06-18 21:07:25 UTC (rev 
37281)
+++ gnunet/src/secretsharing/secretsharing.h    2016-06-18 21:19:27 UTC (rev 
37282)
@@ -157,7 +157,7 @@
 struct GNUNET_SECRETSHARING_DecryptResponseMessage
 {
   /**
-   * Type: GNUNET_MESSAGE_TYPE_SECRETSHARING_CLIENT_DECRYPT_DONE
+   * Type: #GNUNET_MESSAGE_TYPE_SECRETSHARING_CLIENT_DECRYPT_DONE
    */
   struct GNUNET_MessageHeader header;
 
@@ -165,7 +165,7 @@
    * Zero if decryption failed, non-zero if decryption succeeded.
    * If the decryption failed, plaintext is also zero.
    */
-  uint32_t success;
+  uint32_t success GNUNET_PACKED;
 
   /**
    * Decrypted plaintext.

Modified: gnunet/src/secretsharing/secretsharing_api.c
===================================================================
--- gnunet/src/secretsharing/secretsharing_api.c        2016-06-18 21:07:25 UTC 
(rev 37281)
+++ gnunet/src/secretsharing/secretsharing_api.c        2016-06-18 21:19:27 UTC 
(rev 37282)
@@ -1,6 +1,6 @@
 /*
      This file is part of GNUnet.
-     Copyright (C) 2012 GNUnet e.V.
+     Copyright (C) 2012, 2016 GNUnet e.V.
 
      GNUnet is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
@@ -166,38 +166,51 @@
  * result to the application.
  *
  * @param cls the `struct GNUNET_SECRETSHARING_Session`
- * @param msg message with the result
+ * @param m message with the result
  */
+static int
+check_secret_ready (void *cls,
+                    const struct GNUNET_SECRETSHARING_SecretReadyMessage *m)
+{
+  /* FIXME: actually check m is well-formed here! */
+  return GNUNET_OK;
+}
+
+
+/**
+ * Handler invoked with the final result message from
+ * secret sharing.  Decodes the message and passes the
+ * result to the application.
+ *
+ * @param cls the `struct GNUNET_SECRETSHARING_Session`
+ * @param m message with the result
+ */
 static void
 handle_secret_ready (void *cls,
-                     const struct GNUNET_MessageHeader *msg)
+                     const struct GNUNET_SECRETSHARING_SecretReadyMessage *m)
 {
   struct GNUNET_SECRETSHARING_Session *s = cls;
-  const struct GNUNET_SECRETSHARING_SecretReadyMessage *m;
   struct GNUNET_SECRETSHARING_Share *share;
   size_t share_size;
 
   LOG (GNUNET_ERROR_TYPE_DEBUG,
        "Got secret ready message of size %u\n",
-       ntohs (msg->size));
-  if (ntohs (msg->size) < sizeof (struct 
GNUNET_SECRETSHARING_SecretReadyMessage))
-  {
-    GNUNET_break (0);
-    s->secret_ready_cb (s->secret_ready_cls, NULL, NULL, 0, NULL);
-    GNUNET_SECRETSHARING_session_destroy (s);
-    return;
-  }
-  m = (const struct GNUNET_SECRETSHARING_SecretReadyMessage *) msg;
+       ntohs (m->header.size));
   share_size = ntohs (m->header.size) - sizeof (struct 
GNUNET_SECRETSHARING_SecretReadyMessage);
 
   share = GNUNET_SECRETSHARING_share_read (&m[1],
                                            share_size,
                                            NULL);
+  GNUNET_assert (NULL != share); // FIXME: this can fail!
+  // should have been checked in #check_secret_ready!
+  // FIXME: below we never check &m[1] is valid!
+  // FIXME: do we leak 'share' here?
   s->secret_ready_cb (s->secret_ready_cls,
                       share, /* FIXME */
                       &share->public_key,
                       share->num_peers,
-                      (struct GNUNET_PeerIdentity *) &m[1]);
+                      (const struct GNUNET_PeerIdentity *) &m[1]);
+
   GNUNET_SECRETSHARING_session_destroy (s);
 }
 
@@ -246,16 +259,18 @@
                                      GNUNET_SECRETSHARING_SecretReadyCallback 
cb,
                                      void *cls)
 {
-  struct GNUNET_SECRETSHARING_Session *s;
+  GNUNET_MQ_hd_var_size (secret_ready,
+                         GNUNET_MESSAGE_TYPE_SECRETSHARING_CLIENT_SECRET_READY,
+                         struct GNUNET_SECRETSHARING_SecretReadyMessage);
+  struct GNUNET_SECRETSHARING_Session *s
+    = GNUNET_new (struct GNUNET_SECRETSHARING_Session);
+  struct GNUNET_MQ_MessageHandler mq_handlers[] = {
+    make_secret_ready_handler (s),
+    GNUNET_MQ_handler_end ()
+  };
   struct GNUNET_MQ_Envelope *ev;
   struct GNUNET_SECRETSHARING_CreateMessage *msg;
-  static const struct GNUNET_MQ_MessageHandler mq_handlers[] = {
-    { &handle_secret_ready,
-      GNUNET_MESSAGE_TYPE_SECRETSHARING_CLIENT_SECRET_READY, 0},
-    GNUNET_MQ_HANDLERS_END
-  };
 
-  s = GNUNET_new (struct GNUNET_SECRETSHARING_Session);
   s->client = GNUNET_CLIENT_connect ("secretsharing", cfg);
   if (NULL == s->client)
   {
@@ -293,11 +308,9 @@
 
 static void
 handle_decrypt_done (void *cls,
-                     const struct GNUNET_MessageHeader *msg)
+                     const struct GNUNET_SECRETSHARING_DecryptResponseMessage 
*m)
 {
   struct GNUNET_SECRETSHARING_DecryptionHandle *dh = cls;
-  const struct GNUNET_SECRETSHARING_DecryptResponseMessage *m =
-    (const void *) msg; // FIXME: size check!?
   const struct GNUNET_SECRETSHARING_Plaintext *plaintext;
 
   if (m->success == 0)
@@ -304,9 +317,7 @@
     plaintext = NULL;
   else
     plaintext = (void *) &m->plaintext;
-
   dh->decrypt_cb (dh->decrypt_cls, plaintext);
-
   GNUNET_SECRETSHARING_decrypt_cancel (dh);
 }
 
@@ -333,17 +344,19 @@
                               GNUNET_SECRETSHARING_DecryptCallback decrypt_cb,
                               void *decrypt_cb_cls)
 {
-  struct GNUNET_SECRETSHARING_DecryptionHandle *s;
+  GNUNET_MQ_hd_fixed_size (decrypt_done,
+                           
GNUNET_MESSAGE_TYPE_SECRETSHARING_CLIENT_DECRYPT_DONE,
+                           struct GNUNET_SECRETSHARING_DecryptResponseMessage);
+  struct GNUNET_SECRETSHARING_DecryptionHandle *s
+    = GNUNET_new (struct GNUNET_SECRETSHARING_DecryptionHandle);
+  struct GNUNET_MQ_MessageHandler mq_handlers[] = {
+    make_decrypt_done_handler (s),
+    GNUNET_MQ_handler_end ()
+  };
   struct GNUNET_MQ_Envelope *ev;
   struct GNUNET_SECRETSHARING_DecryptRequestMessage *msg;
-  static const struct GNUNET_MQ_MessageHandler mq_handlers[] = {
-    {handle_decrypt_done, 
GNUNET_MESSAGE_TYPE_SECRETSHARING_CLIENT_DECRYPT_DONE, 0},
-    GNUNET_MQ_HANDLERS_END
-  };
   size_t share_size;
 
-
-  s = GNUNET_new (struct GNUNET_SECRETSHARING_DecryptionHandle);
   s->client = GNUNET_CLIENT_connect ("secretsharing", cfg);
   s->decrypt_cb = decrypt_cb;
   s->decrypt_cls = decrypt_cb_cls;
@@ -354,13 +367,19 @@
                                                  s);
   GNUNET_assert (NULL != s->mq);
 
-  GNUNET_assert (GNUNET_OK == GNUNET_SECRETSHARING_share_write (share, NULL, 
0, &share_size));
+  GNUNET_assert (GNUNET_OK ==
+                 GNUNET_SECRETSHARING_share_write (share, NULL, 0,
+                                                   &share_size));
 
   ev = GNUNET_MQ_msg_extra (msg,
                             share_size,
                             GNUNET_MESSAGE_TYPE_SECRETSHARING_CLIENT_DECRYPT);
 
-  GNUNET_assert (GNUNET_OK == GNUNET_SECRETSHARING_share_write (share, 
&msg[1], share_size, NULL));
+  GNUNET_assert (GNUNET_OK ==
+                 GNUNET_SECRETSHARING_share_write (share,
+                                                   &msg[1],
+                                                   share_size,
+                                                   NULL));
 
   msg->start = GNUNET_TIME_absolute_hton (start);
   msg->deadline = GNUNET_TIME_absolute_hton (deadline);
@@ -368,7 +387,8 @@
 
   GNUNET_MQ_send (s->mq, ev);
 
-  LOG (GNUNET_ERROR_TYPE_DEBUG, "decrypt session created\n");
+  LOG (GNUNET_ERROR_TYPE_DEBUG,
+       "decrypt session created\n");
   return s;
 }
 
@@ -403,7 +423,9 @@
       return GNUNET_SYSERR;
   }
 
-  GNUNET_CRYPTO_mpi_print_unsigned (plaintext, sizeof (struct 
GNUNET_SECRETSHARING_Plaintext), x);
+  GNUNET_CRYPTO_mpi_print_unsigned (plaintext,
+                                    sizeof (struct 
GNUNET_SECRETSHARING_Plaintext),
+                                    x);
 
   return GNUNET_OK;
 }

Modified: gnunet/src/secretsharing/secretsharing_common.c
===================================================================
--- gnunet/src/secretsharing/secretsharing_common.c     2016-06-18 21:07:25 UTC 
(rev 37281)
+++ gnunet/src/secretsharing/secretsharing_common.c     2016-06-18 21:19:27 UTC 
(rev 37282)
@@ -36,7 +36,7 @@
 {
   struct GNUNET_SECRETSHARING_Share *share;
   const struct GNUNET_SECRETSHARING_ShareHeaderNBO *sh = data;
-  char *p;
+  const char *p;
   size_t n;
   uint16_t payload_size;
 
@@ -47,7 +47,7 @@
   if (NULL != readlen)
     *readlen = payload_size + sizeof *sh;
 
-  share = GNUNET_malloc (sizeof *share);
+  share = GNUNET_new (struct GNUNET_SECRETSHARING_Share);
 
   share->threshold = ntohs (sh->threshold);
   share->num_peers = ntohs (sh->num_peers);
@@ -56,20 +56,23 @@
   share->my_share = sh->my_share;
   share->public_key = sh->public_key;
 
-  p = (void *) &sh[1];
+  p = (const char *) &sh[1];
 
   n = share->num_peers * sizeof (struct GNUNET_PeerIdentity);
-  share->peers = GNUNET_malloc (n);
+  share->peers = GNUNET_new_array (share->num_peers,
+                                   struct GNUNET_PeerIdentity);
   memcpy (share->peers, p, n);
   p += n;
 
   n = share->num_peers * sizeof (struct GNUNET_SECRETSHARING_FieldElement);
-  share->sigmas = GNUNET_malloc (n);
+  share->sigmas = GNUNET_new_array (share->num_peers,
+                                    struct GNUNET_SECRETSHARING_FieldElement);
   memcpy (share->sigmas, p, n);
   p += n;
 
   n = share->num_peers * sizeof (uint16_t);
-  share->original_indices = GNUNET_malloc (n);
+  share->original_indices = GNUNET_new_array (share->num_peers,
+                                              uint16_t);
   memcpy (share->original_indices, p, n);
 
   return share;
@@ -148,5 +151,3 @@
   share->peers = NULL;
   GNUNET_free (share);
 }
-
-

Modified: gnunet/src/secretsharing/test_secretsharing_api.c
===================================================================
--- gnunet/src/secretsharing/test_secretsharing_api.c   2016-06-18 21:07:25 UTC 
(rev 37281)
+++ gnunet/src/secretsharing/test_secretsharing_api.c   2016-06-18 21:19:27 UTC 
(rev 37282)
@@ -33,11 +33,12 @@
 static struct GNUNET_SECRETSHARING_Session *keygen;
 
 
-static void secret_ready_cb (void *cls,
-                             struct GNUNET_SECRETSHARING_Share *my_share,
-                             struct GNUNET_SECRETSHARING_PublicKey *public_key,
-                             unsigned int num_ready_peers,
-                             struct GNUNET_PeerIdentity *ready_peers)
+static void
+secret_ready_cb (void *cls,
+                 struct GNUNET_SECRETSHARING_Share *my_share,
+                 struct GNUNET_SECRETSHARING_PublicKey *public_key,
+                 unsigned int num_ready_peers,
+                 const struct GNUNET_PeerIdentity *ready_peers)
 {
   keygen = NULL;
   if (num_ready_peers == 1)




reply via email to

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