[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r31254 - in gnunet/src: include secretsharing util
From: |
gnunet |
Subject: |
[GNUnet-SVN] r31254 - in gnunet/src: include secretsharing util |
Date: |
Tue, 10 Dec 2013 12:14:22 +0100 |
Author: dold
Date: 2013-12-10 12:14:22 +0100 (Tue, 10 Dec 2013)
New Revision: 31254
Modified:
gnunet/src/include/gnunet_protocols.h
gnunet/src/include/gnunet_secretsharing_service.h
gnunet/src/secretsharing/Makefile.am
gnunet/src/secretsharing/gnunet-service-secretsharing.c
gnunet/src/secretsharing/secretsharing.h
gnunet/src/secretsharing/secretsharing_api.c
gnunet/src/secretsharing/secretsharing_protocol.h
gnunet/src/util/gnunet-ecc.c
Log:
- key generation for secretsharing
- gnunet-ecc -E also prints hex
Modified: gnunet/src/include/gnunet_protocols.h
===================================================================
--- gnunet/src/include/gnunet_protocols.h 2013-12-10 10:57:12 UTC (rev
31253)
+++ gnunet/src/include/gnunet_protocols.h 2013-12-10 11:14:22 UTC (rev
31254)
@@ -2289,7 +2289,7 @@
* The cryptosystem has been established.
* Contains the peer's share.
*/
-#define GNUNET_MESSAGE_TYPE_SECRETSHARING_CLIENT_ESTABLISHED 783
+#define GNUNET_MESSAGE_TYPE_SECRETSHARING_CLIENT_SECRET_READY 783
Modified: gnunet/src/include/gnunet_secretsharing_service.h
===================================================================
--- gnunet/src/include/gnunet_secretsharing_service.h 2013-12-10 10:57:12 UTC
(rev 31253)
+++ gnunet/src/include/gnunet_secretsharing_service.h 2013-12-10 11:14:22 UTC
(rev 31254)
@@ -119,7 +119,7 @@
*/
typedef void (*GNUNET_SECRETSHARING_SecretReadyCallback) (void *cls,
const struct
GNUNET_SECRETSHARING_Share *my_share,
- const struct
GNUNET_SECRETSHARING_PublicKey public_key,
+ const struct
GNUNET_SECRETSHARING_PublicKey *public_key,
unsigned int
num_ready_peers,
const struct
GNUNET_PeerIdentity *ready_peers);
@@ -157,7 +157,7 @@
const struct GNUNET_HashCode *session_id,
struct GNUNET_TIME_Absolute deadline,
unsigned int threshold,
- GNUNET_SECRETSHARING_SecretReadyCallback
*cb,
+ GNUNET_SECRETSHARING_SecretReadyCallback
cb,
void *cls);
Modified: gnunet/src/secretsharing/Makefile.am
===================================================================
--- gnunet/src/secretsharing/Makefile.am 2013-12-10 10:57:12 UTC (rev
31253)
+++ gnunet/src/secretsharing/Makefile.am 2013-12-10 11:14:22 UTC (rev
31254)
@@ -15,12 +15,27 @@
AM_CFLAGS = -fprofile-arcs -ftest-coverage
endif
+
+bin_PROGRAMS = \
+ gnunet-secretsharing-profiler
+
libexec_PROGRAMS = \
gnunet-service-secretsharing
lib_LTLIBRARIES = \
libgnunetsecretsharing.la
+
+gnunet_secretsharing_profiler_SOURCES = \
+ gnunet-secretsharing-profiler.c
+gnunet_secretsharing_profiler_LDADD = \
+ $(top_builddir)/src/util/libgnunetutil.la \
+ $(top_builddir)/src/secretsharing/libgnunetsecretsharing.la \
+ $(top_builddir)/src/testbed/libgnunettestbed.la \
+ $(GN_LIBINTL)
+gnunet_secretsharing_profiler_DEPENDENCIES = \
+ libgnunetsecretsharing.la
+
gnunet_service_secretsharing_SOURCES = \
gnunet-service-secretsharing.c
gnunet_service_secretsharing_LDADD = \
Modified: gnunet/src/secretsharing/gnunet-service-secretsharing.c
===================================================================
--- gnunet/src/secretsharing/gnunet-service-secretsharing.c 2013-12-10
10:57:12 UTC (rev 31253)
+++ gnunet/src/secretsharing/gnunet-service-secretsharing.c 2013-12-10
11:14:22 UTC (rev 31254)
@@ -32,7 +32,6 @@
#include <gcrypt.h>
-
/**
* Info about a peer in a key generation session.
*/
@@ -51,7 +50,7 @@
/**
* mu-component of the peer's paillier public key.
*/
- gcry_mpi_t paillier_mu;
+ gcry_mpi_t paillier_n;
/**
* The peer's commitment to his presecret.
@@ -59,6 +58,17 @@
gcry_mpi_t presecret_commitment;
/**
+ * The peer's preshare that we could decrypt
+ * with out private key.
+ */
+ gcry_mpi_t decrypted_preshare;
+
+ /**
+ * Multiplicative share of the public key.
+ */
+ gcry_mpi_t public_key_share;
+
+ /**
* GNUNET_YES if the peer has been disqualified,
* GNUNET_NO otherwise.
*/
@@ -93,6 +103,11 @@
struct GNUNET_SERVER_Client *client;
/**
+ * Message queue for 'client'
+ */
+ struct GNUNET_MQ_Handle *client_mq;
+
+ /**
* Randomly generated coefficients of the polynomial for sharing our
* pre-secret, where 'preshares[0]' is our pre-secret. Contains 'threshold'
* elements, thus represents a polynomial of degree 'threshold-1', which can
@@ -136,7 +151,7 @@
/**
* g-component of our peer's paillier private key.
*/
- gcry_mpi_t paillier_g;
+ gcry_mpi_t paillier_lambda;
/**
* g-component of our peer's paillier private key.
@@ -166,12 +181,12 @@
/**
* Decrypt sessions are held in a linked list.
*/
-static struct DecryptSession *decrypt_sessions_head;
+//static struct DecryptSession *decrypt_sessions_head;
/**
* Decrypt sessions are held in a linked list.
*/
-static struct DecryptSession *decrypt_sessions_tail;
+//static struct DecryptSession *decrypt_sessions_tail;
/**
* Decrypt sessions are held in a linked list.
@@ -298,9 +313,14 @@
*
* Uses the simplified key generation of Jonathan Katz, Yehuda Lindell,
* "Introduction to Modern Cryptography: Principles and Protocols".
+ *
+ * @param g g-component of public key
+ * @param n n-component of public key
+ * @param lambda lambda-component of private key
+ * @param mu mu-componenent of private key
*/
static void
-paillier_create (unsigned int s, gcry_mpi_t n, gcry_mpi_t g, gcry_mpi_t
lambda, gcry_mpi_t mu)
+paillier_create (gcry_mpi_t g, gcry_mpi_t n, gcry_mpi_t lambda, gcry_mpi_t mu)
{
gcry_mpi_t p;
gcry_mpi_t q;
@@ -311,9 +331,9 @@
GNUNET_assert (0 != (tmp = gcry_mpi_new (PAILLIER_BITS)));
// generate rsa modulus
- GNUNET_assert (0 == gcry_prime_generate (&p, s, 0, NULL, NULL, NULL,
+ GNUNET_assert (0 == gcry_prime_generate (&p, PAILLIER_BITS / 2, 0, NULL,
NULL, NULL,
GCRY_WEAK_RANDOM, 0));
- GNUNET_assert (0 == gcry_prime_generate (&q, s, 0, NULL, NULL, NULL,
+ GNUNET_assert (0 == gcry_prime_generate (&q, PAILLIER_BITS / 2, 0, NULL,
NULL, NULL,
GCRY_WEAK_RANDOM, 0));
gcry_mpi_mul (n, p, q);
gcry_mpi_add_ui (g, n, 1);
@@ -332,6 +352,14 @@
}
+/**
+ * Encrypt a value using Paillier's scheme.
+ *
+ * @param c resulting ciphertext
+ * @param m plaintext to encrypt
+ * @param g g-component of public key
+ * @param n n-component of public key
+ */
static void
paillier_encrypt (gcry_mpi_t c, gcry_mpi_t m, gcry_mpi_t g, gcry_mpi_t n)
{
@@ -359,6 +387,14 @@
}
+/**
+ * Decrypt a ciphertext using Paillier's scheme.
+ *
+ * @param m[out] resulting plaintext
+ * @param c ciphertext to decrypt
+ * @param lambda lambda-component of private key
+ * @param mu mu-component of private key
+ */
static void
paillier_decrypt (gcry_mpi_t m, gcry_mpi_t c, gcry_mpi_t mu, gcry_mpi_t
lambda, gcry_mpi_t n)
{
@@ -422,13 +458,18 @@
{
if (0 == memcmp (&d->peer, &ks->info[i].peer, sizeof (struct
GNUNET_PeerIdentity)))
{
- // TODO: check signature and store key data
+ // TODO: check signature
+ GNUNET_assert (0 == gcry_mpi_scan (&ks->info[i].paillier_g,
GCRYMPI_FMT_USG,
+ &d->pubkey.g, sizeof d->pubkey.g,
NULL));
+ GNUNET_assert (0 == gcry_mpi_scan (&ks->info[i].paillier_n,
GCRYMPI_FMT_USG,
+ &d->pubkey.n, sizeof d->pubkey.n,
NULL));
+ GNUNET_assert (0 == gcry_mpi_scan (&ks->info[i].presecret_commitment,
GCRYMPI_FMT_USG,
+ &d->commitment, sizeof d->commitment,
NULL));
return;
}
}
GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "keygen commit data with wrong peer
identity in consensus\n");
-
}
@@ -460,39 +501,116 @@
static void
keygen_round2_conclude (void *cls)
{
- // TODO: recombine shares and send to client
- GNUNET_assert (0);
+ struct KeygenSession *ks = cls;
+ struct GNUNET_SECRETSHARING_SecretReadyMessage *m;
+ struct GNUNET_MQ_Envelope *ev;
+ unsigned int i;
+ gcry_mpi_t s;
+ gcry_mpi_t h;
+ struct GNUNET_PeerIdentity *pid;
+
+ GNUNET_assert (0 != (s = gcry_mpi_new (PAILLIER_BITS)));
+ GNUNET_assert (0 != (h = gcry_mpi_new (PAILLIER_BITS)));
+
+ // multiplicative identity
+ gcry_mpi_set_ui (s, 1);
+
+ pid = (void *) &m[1];
+
+ for (i = 0; i < ks->num_peers; i++)
+ {
+ if (GNUNET_NO == ks->info[i].disqualified)
+ {
+ gcry_mpi_addm (s, s, ks->info[i].decrypted_preshare, elgamal_p);
+ gcry_mpi_mulm (h, h, ks->info[i].public_key_share, elgamal_p);
+ m->num_secret_peers++;
+ *pid = ks->info[i].peer;
+ pid++;
+ }
+ }
+
+ ev = GNUNET_MQ_msg (m,
GNUNET_MESSAGE_TYPE_SECRETSHARING_CLIENT_SECRET_READY);
+
+ gcry_mpi_print (GCRYMPI_FMT_USG, (void *) &m->secret, PAILLIER_BITS / 8,
NULL, s);
+ gcry_mpi_print (GCRYMPI_FMT_USG, (void *) &m->public_key, PAILLIER_BITS / 8,
NULL, s);
+
+ GNUNET_MQ_send (ks->client_mq, ev);
}
+/**
+ * Insert round 2 element in the consensus, consisting of
+ * (1) The exponentiated pre-share polynomial coefficients A_{i,l}=g^{a_{i,l}}
+ * (2) The exponentiated pre-shares y_{i,j}=g^{s_{i,j}}
+ * (3) The encrypted pre-shares Y_{i,j}
+ * (4) The zero knowledge proof for correctness of
+ * the encryption
+ *
+ * @param ks session to use
+ */
static void
insert_round2_element (struct KeygenSession *ks)
{
struct GNUNET_SET_Element *element;
+ struct GNUNET_SECRETSHARING_KeygenRevealData *msg;
+ unsigned char *pos;
+ unsigned char *last_pos;
+ size_t element_size;
unsigned int i;
- uint16_t big_y_size;
gcry_mpi_t c;
gcry_mpi_t idx;
- gcry_mpi_t preshare;
+ gcry_mpi_t v;
GNUNET_assert (0 != (c = gcry_mpi_new (PAILLIER_BITS)));
- GNUNET_assert (0 != (preshare = gcry_mpi_new (PAILLIER_BITS)));
+ GNUNET_assert (0 != (v = gcry_mpi_new (PAILLIER_BITS)));
GNUNET_assert (0 != (idx = gcry_mpi_new (PAILLIER_BITS)));
- big_y_size = PAILLIER_BITS / 8 * ks->num_peers;
+ element_size = (sizeof (struct GNUNET_SECRETSHARING_KeygenRevealData) +
+ 2 * PAILLIER_BITS / 8 * ks->num_peers +
+ 1 * PAILLIER_BITS / 8 * ks->threshold);
- element = GNUNET_malloc (sizeof (struct GNUNET_SET_Element) + big_y_size);
+ element = GNUNET_malloc (sizeof (struct GNUNET_SET_Element) + element_size);
+ msg = (void *) element->data;
+ pos = (void *) &msg[1];
+ last_pos = pos + element_size;
+
+ // exponentiated pre-shares
+ for (i = 0; i <= ks->threshold; i++)
+ {
+ ptrdiff_t remaining = last_pos - pos;
+ GNUNET_assert (remaining > 0);
+ gcry_mpi_set_ui (idx, i);
+ // evaluate the polynomial
+ horner_eval (v, ks->presecret_polynomial, ks->threshold, idx, elgamal_p);
+ // take g to the result
+ gcry_mpi_powm (v, elgamal_g, v, elgamal_p);
+ gcry_mpi_print (GCRYMPI_FMT_USG, pos, (size_t) remaining, NULL, v);
+ pos += PAILLIER_BITS / 8;
+ }
+
+ // exponentiated coefficients
for (i = 0; i < ks->num_peers; i++)
{
- gcry_mpi_set_ui (idx, i + 1);
- horner_eval (preshare, ks->presecret_polynomial, ks->threshold, idx,
elgamal_p);
- // concat 'A', 'y' and 'Y' to the vector
+ ptrdiff_t remaining = last_pos - pos;
+ GNUNET_assert (remaining > 0);
+ gcry_mpi_powm (v, elgamal_g, ks->presecret_polynomial[0], elgamal_p);
+ gcry_mpi_print (GCRYMPI_FMT_USG, pos, (size_t) remaining, NULL, v);
+ pos += PAILLIER_BITS / 8;
}
+ // encrypted pre-shares
for (i = 0; i < ks->threshold; i++)
{
- // concat 'a' to the vector
+ ptrdiff_t remaining = last_pos - pos;
+ GNUNET_assert (remaining > 0);
+ if (GNUNET_YES == ks->info[i].disqualified)
+ gcry_mpi_set_ui (v, 0);
+ else
+ paillier_encrypt (v, ks->presecret_polynomial[0],
+ ks->info[i].paillier_g, ks->info[i].paillier_g);
+ gcry_mpi_print (GCRYMPI_FMT_USG, pos, (size_t) remaining, NULL, v);
+ pos += PAILLIER_BITS / 8;
}
GNUNET_CONSENSUS_insert (ks->consensus, element, NULL, NULL);
@@ -500,15 +618,75 @@
}
+static struct KeygenPeerInfo *
+get_keygen_peer_info (const struct KeygenSession *ks,
+ struct GNUNET_PeerIdentity *peer)
+{
+ unsigned int i;
+ for (i = 0; i < ks->num_peers; i++)
+ if (0 == memcmp (peer, &ks->info[i].peer, sizeof (struct
GNUNET_PeerIdentity)))
+ return &ks->info[i];
+ return NULL;
+}
+
+
static void
+keygen_round2_new_element (void *cls,
+ const struct GNUNET_SET_Element *element)
+{
+ struct KeygenSession *ks = cls;
+ struct GNUNET_SECRETSHARING_KeygenRevealData *msg;
+ struct KeygenPeerInfo *info;
+ unsigned char *pos;
+ unsigned char *last_pos;
+ gcry_mpi_t c;
+
+ msg = (void *) element->data;
+ pos = (void *) &msg[1];
+ // skip exp. pre-shares
+ pos += PAILLIER_BITS / 8 * ks->num_peers;
+ // skip exp. coefficients
+ pos += PAILLIER_BITS / 8 * ks->threshold;
+ // skip to the value for our peer
+ pos += PAILLIER_BITS / 8 * ks->local_peer_idx;
+
+ last_pos = element->size + (unsigned char *) element->data;
+
+ if ((pos >= last_pos) || ((last_pos - pos) < (PAILLIER_BITS / 8)))
+ {
+ GNUNET_break_op (0);
+ return;
+ }
+
+ GNUNET_assert (0 == gcry_mpi_scan (&c, GCRYMPI_FMT_USG,
+ pos, PAILLIER_BITS / 8, NULL));
+
+ info = get_keygen_peer_info (ks, &msg->peer);
+
+ if (NULL == info)
+ {
+ GNUNET_break_op (0);
+ return;
+ }
+
+ paillier_decrypt (info->decrypted_preshare, c, ks->paillier_lambda,
ks->paillier_mu,
+ ks->info[ks->local_peer_idx].paillier_n);
+
+ // TODO: validate signature and proofs
+
+}
+
+
+static void
keygen_round1_conclude (void *cls)
{
struct KeygenSession *ks = cls;
// TODO: destroy old consensus
+ // TODO: mark peers without keys as disqualified
ks->consensus = GNUNET_CONSENSUS_create (cfg, ks->num_peers, ks->peers,
&ks->session_id,
- keygen_round1_new_element, ks);
+ keygen_round2_new_element, ks);
insert_round2_element (ks);
@@ -516,12 +694,20 @@
}
+/**
+ * Insert the ephemeral key and the presecret commitment
+ * of this peer in the consensus of the given session.
+ *
+ * @param ks session to use
+ */
static void
insert_round1_element (struct KeygenSession *ks)
{
struct GNUNET_SET_Element *element;
struct GNUNET_SECRETSHARING_KeygenCommitData *d;
+ // g^a_{i,0}
gcry_mpi_t v;
+ // big-endian representation of 'v'
unsigned char v_data[PAILLIER_BITS / 8];
element = GNUNET_malloc (sizeof *element + sizeof *d);
@@ -541,11 +727,11 @@
GNUNET_assert (0 == gcry_mpi_print (GCRYMPI_FMT_USG,
(unsigned char *) d->pubkey.g,
PAILLIER_BITS / 8, NULL,
- ks->paillier_g));
+
ks->info[ks->local_peer_idx].paillier_g));
GNUNET_assert (0 == gcry_mpi_print (GCRYMPI_FMT_USG,
- (unsigned char *) d->pubkey.mu,
PAILLIER_BITS / 8, NULL,
- ks->paillier_mu));
+ (unsigned char *) d->pubkey.n,
PAILLIER_BITS / 8, NULL,
+
ks->info[ks->local_peer_idx].paillier_n));
// FIXME: sign stuff
@@ -572,6 +758,8 @@
(const struct GNUNET_SECRETSHARING_CreateMessage *) message;
struct KeygenSession *ks;
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO, "client requested key generation\n");
+
ks = GNUNET_new (struct KeygenSession);
GNUNET_CONTAINER_DLL_insert (keygen_sessions_head, keygen_sessions_tail, ks);
@@ -583,9 +771,17 @@
ks->peers = normalize_peers ((struct GNUNET_PeerIdentity *) &msg[1],
ks->num_peers,
&ks->num_peers, &ks->local_peer_idx);
+ // TODO: initialize MPIs in peer structure
+
ks->consensus = GNUNET_CONSENSUS_create (cfg, ks->num_peers, ks->peers,
&msg->session_id,
keygen_round1_new_element, ks);
+ paillier_create (ks->info[ks->local_peer_idx].paillier_g,
+ ks->info[ks->local_peer_idx].paillier_n,
+ ks->paillier_lambda,
+ ks->paillier_mu);
+
+
generate_presecret_polynomial (ks);
insert_round1_element (ks);
Modified: gnunet/src/secretsharing/secretsharing.h
===================================================================
--- gnunet/src/secretsharing/secretsharing.h 2013-12-10 10:57:12 UTC (rev
31253)
+++ gnunet/src/secretsharing/secretsharing.h 2013-12-10 11:14:22 UTC (rev
31254)
@@ -67,10 +67,10 @@
};
-struct GNUNET_SECRETSHARING_SecretEstablishedMessage
+struct GNUNET_SECRETSHARING_SecretReadyMessage
{
/**
- * Type: GNUNET_MESSAGE_TYPE_SECRETSHARING_CLIENT_ESTABLISHED
+ * Type: GNUNET_MESSAGE_TYPE_SECRETSHARING_CLIENT_SECRET_READY
*/
struct GNUNET_MessageHeader header;
@@ -80,6 +80,11 @@
unsigned char secret[GNUNET_SECRETSHARING_KEY_BITS / 8];
/**
+ * Secret share in network byte order.
+ */
+ struct GNUNET_SECRETSHARING_PublicKey public_key;
+
+ /**
* Number of peers at the end of this message.
* Includes peers that are part of the established
* threshold crypto system.
@@ -90,10 +95,10 @@
};
-struct GNUNET_SECRETSHARING_DecryptMessage
+struct GNUNET_SECRETSHARING_DecryptRequestMessage
{
/**
- * Type: GNUNET_MESSAGE_TYPE_SECRETSHARING_CLIENT_DECRYPT
+ * Type: GNUNET_MESSAGE_TYPE_SECRETSHARING_CLIENT_DECRYPT_REQUEST
*/
struct GNUNET_MessageHeader header;
@@ -113,10 +118,10 @@
};
-struct GNUNET_SECRETSHARING_DecryptDoneMessage
+struct GNUNET_SECRETSHARING_DecryptResponseMessage
{
/**
- * Type: GNUNET_MESSAGE_TYPE_SECRETSHARING_CLIENT_DECRYPT_DONE
+ * Type: GNUNET_MESSAGE_TYPE_SECRETSHARING_CLIENT_DECRYPT_RESPONSE
*/
struct GNUNET_MessageHeader header;
Modified: gnunet/src/secretsharing/secretsharing_api.c
===================================================================
--- gnunet/src/secretsharing/secretsharing_api.c 2013-12-10 10:57:12 UTC
(rev 31253)
+++ gnunet/src/secretsharing/secretsharing_api.c 2013-12-10 11:14:22 UTC
(rev 31254)
@@ -25,8 +25,102 @@
*/
#include "platform.h"
#include "gnunet_util_lib.h"
+#include "gnunet_secretsharing_service.h"
+#include "secretsharing.h"
#define LOG(kind,...) GNUNET_log_from (kind, "secretsharing-api",__VA_ARGS__)
+
+/**
+ * Session that will eventually establish a shared secred between
+ * the involved peers and allow encryption and cooperative decryption.
+ */
+struct GNUNET_SECRETSHARING_Session
+{
+ /**
+ * Client connected to the secretsharing service.
+ */
+ struct GNUNET_CLIENT_Connection *client;
+
+ /**
+ * Message queue for 'client'.
+ */
+ struct GNUNET_MQ_Handle *mq;
+
+ /**
+ * Called when the secret sharing is done.
+ */
+ GNUNET_SECRETSHARING_SecretReadyCallback secret_ready_cb;
+
+ /**
+ * Closure for 'secret_ready_cb'.
+ */
+ void *secret_ready_cls;
+};
+
+
+static void
+handle_session_client_error (void *cls, enum GNUNET_MQ_Error error)
+{
+ struct GNUNET_SECRETSHARING_Session *s = cls;
+
+ s->secret_ready_cb (s->secret_ready_cls, NULL, NULL, 0, NULL);
+}
+
+static void
+handle_secret_ready (void *cls, const struct GNUNET_MessageHeader *msg)
+{
+ struct GNUNET_SECRETSHARING_Session *s = cls;
+ const struct GNUNET_SECRETSHARING_SecretReadyMessage *m = (const void *) msg;
+
+ s->secret_ready_cb (s->secret_ready_cls,
+ NULL,
+ &m->public_key,
+ ntohs (m->num_secret_peers),
+ (struct GNUNET_PeerIdentity *) &m[1]);
+
+}
+
+
+struct GNUNET_SECRETSHARING_Session *
+GNUNET_SECRETSHARING_create_session (const struct GNUNET_CONFIGURATION_Handle
*cfg,
+ unsigned int num_peers,
+ const struct GNUNET_PeerIdentity *peers,
+ const struct GNUNET_HashCode *session_id,
+ struct GNUNET_TIME_Absolute deadline,
+ unsigned int threshold,
+ GNUNET_SECRETSHARING_SecretReadyCallback
cb,
+ void *cls)
+{
+ struct GNUNET_SECRETSHARING_Session *s;
+ 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);
+ s->secret_ready_cb = cb;
+ s->secret_ready_cls = cls;
+ GNUNET_assert (NULL != s->client);
+
+ s->mq = GNUNET_MQ_queue_for_connection_client (s->client, mq_handlers,
+
handle_session_client_error, s);
+ GNUNET_assert (NULL != s->mq);
+
+ ev = GNUNET_MQ_msg (msg, GNUNET_MESSAGE_TYPE_SECRETSHARING_CLIENT_GENERATE);
+ msg->threshold = htons (threshold);
+ GNUNET_MQ_send (s->mq, ev);
+
+ LOG (GNUNET_ERROR_TYPE_DEBUG, "secretsharing session created\n");
+ return s;
+
+}
+
+
+
Modified: gnunet/src/secretsharing/secretsharing_protocol.h
===================================================================
--- gnunet/src/secretsharing/secretsharing_protocol.h 2013-12-10 10:57:12 UTC
(rev 31253)
+++ gnunet/src/secretsharing/secretsharing_protocol.h 2013-12-10 11:14:22 UTC
(rev 31254)
@@ -60,9 +60,9 @@
/**
* Network order representation of the
- * g-component.
+ * n-component.
*/
- uint32_t mu[PAILLIER_BITS / 8 / sizeof (uint32_t)];
+ uint32_t n[PAILLIER_BITS / 8 / sizeof (uint32_t)];
};
@@ -72,6 +72,10 @@
struct GNUNET_SECRETSHARING_KeygenCommitData
{
/**
+ * Signature over the rest of the message.
+ */
+ struct GNUNET_CRYPTO_EddsaSignature signature;
+ /**
* Signature purpose for signing the keygen commit data.
*/
struct GNUNET_CRYPTO_EccSignaturePurpose purpose;
@@ -88,10 +92,25 @@
* Commitment of 'peer' to his presecret.
*/
struct GNUNET_HashCode commitment GNUNET_PACKED;
+};
+
+
+struct GNUNET_SECRETSHARING_KeygenRevealData
+{
/**
- * Signature over the previous values.
+ * Signature over rest of the message.
*/
struct GNUNET_CRYPTO_EddsaSignature signature;
+ /*
+ * Signature purpose for signing the keygen commit data.
+ */
+ struct GNUNET_CRYPTO_EccSignaturePurpose purpose;
+ /**
+ * Peer that inserts this element.
+ */
+ struct GNUNET_PeerIdentity peer;
+
+ /* values follow */
};
GNUNET_NETWORK_STRUCT_END
Modified: gnunet/src/util/gnunet-ecc.c
===================================================================
--- gnunet/src/util/gnunet-ecc.c 2013-12-10 10:57:12 UTC (rev 31253)
+++ gnunet/src/util/gnunet-ecc.c 2013-12-10 11:14:22 UTC (rev 31254)
@@ -113,6 +113,19 @@
static void
+print_hex (char *msg, void *buf, size_t size)
+{
+ size_t i;
+ printf ("%s: ", msg);
+ for (i = 0; i < size; i++)
+ {
+ printf ("%02hhx", ((char *)buf)[i]);
+ }
+ printf ("\n");
+}
+
+
+static void
print_examples_ecdh ()
{
struct GNUNET_CRYPTO_EcdhePrivateKey *dh_priv1;
@@ -132,14 +145,18 @@
GNUNET_assert (NULL != GNUNET_STRINGS_data_to_string (dh_priv1, 32, buf,
128));
printf ("ECDHE key 1:\n");
printf ("private: %s\n", buf);
+ print_hex ("private(hex)", dh_priv1, sizeof *dh_priv1);
GNUNET_assert (NULL != GNUNET_STRINGS_data_to_string (dh_pub1, 32, buf,
128));
printf ("public: %s\n", buf);
+ print_hex ("public(hex)", dh_pub1, sizeof *dh_pub1);
GNUNET_assert (NULL != GNUNET_STRINGS_data_to_string (dh_priv2, 32, buf,
128));
printf ("ECDHE key 2:\n");
printf ("private: %s\n", buf);
+ print_hex ("private(hex)", dh_priv2, sizeof *dh_priv2);
GNUNET_assert (NULL != GNUNET_STRINGS_data_to_string (dh_pub2, 32, buf,
128));
printf ("public: %s\n", buf);
+ print_hex ("public(hex)", dh_pub2, sizeof *dh_pub2);
GNUNET_assert (GNUNET_OK == GNUNET_CRYPTO_ecc_ecdh (dh_priv1, dh_pub2,
&hash));
GNUNET_assert (NULL != GNUNET_STRINGS_data_to_string (&hash, 64, buf, 128));
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r31254 - in gnunet/src: include secretsharing util,
gnunet <=