[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)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r37282 - gnunet/src/secretsharing,
gnunet <=