/*
This file is part of GNUnet
- (C) 2012 Christian Grothoff (and other contributing authors)
+ Copyright (C) 2012 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
You should have received a copy of the GNU General Public License
along with GNUnet; see the file COPYING. If not, write to the
- Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA.
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
*/
#include "platform.h"
#include "gnunet_common.h"
#include "gnunet_protocols.h"
-
-/**
- * Bit length used for the Paillier crypto system.
- */
-#define PAILLIER_BITS 2048
-
-/**
- * Big endian representation of the prime field order used
- * for ElGamal.
- */
-#define ELGAMAL_Q_DATA {0x00 /* FIXME */};
+#include "secretsharing.h"
GNUNET_NETWORK_STRUCT_BEGIN
/**
- * Public key for the Paillier crypto system.
+ * Consensus element data used in the first round of key generation.
*/
-struct PaillierPublicKey
+struct GNUNET_SECRETSHARING_KeygenCommitData
{
/**
- * Network order representation of the
- * g-component.
+ * Signature over the rest of the message.
*/
- uint32_t g[PAILLIER_BITS / 8 / sizeof (uint32_t)];
+ 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;
+ /**
+ * Ephemeral paillier public key used by 'peer' for
+ * this session.
+ */
+ struct GNUNET_CRYPTO_PaillierPublicKey pubkey;
+ /**
+ * Commitment of 'peer' to his presecret.
+ */
+ struct GNUNET_HashCode commitment GNUNET_PACKED;
+};
+
+struct GNUNET_SECRETSHARING_KeygenRevealData
+{
/**
- * Network order representation of the
- * g-component.
+ * Signature over rest of the message.
*/
- uint32_t mu[PAILLIER_BITS / 8 / sizeof (uint32_t)];
+ 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 */
};
/**
- * Consensus element data used in the first round of key generation.
+ * Data of then element put in consensus
+ * for decrypting a value.
*/
-struct GNUNET_SECRETSHARING_KeygenCommitData
+struct GNUNET_SECRETSHARING_DecryptData
{
- /**
+ /*
+ * Signature over rest of the message.
+ */
+ struct GNUNET_CRYPTO_EddsaSignature signature;
+ /*
* Signature purpose for signing the keygen commit data.
*/
struct GNUNET_CRYPTO_EccSignaturePurpose purpose;
+ /**
+ * Ciphertext we want to decrypt.
+ */
+ struct GNUNET_SECRETSHARING_Ciphertext ciphertext;
/**
* Peer that inserts this element.
*/
struct GNUNET_PeerIdentity peer;
/**
- * Ephemeral paillier public key used by 'peer' for
- * this session.
+ * Partial decryption, computed as c_1^{s_i}
*/
- struct PaillierPublicKey pubkey GNUNET_PACKED;
+ struct GNUNET_SECRETSHARING_FieldElement partial_decryption;
/**
- * Commitment of 'peer' to his presecret.
+ * Commitment for the non-interactive zero knowledge proof.
+ * g^\beta, with \beta < q
*/
- struct GNUNET_HashCode commitment GNUNET_PACKED;
+ struct GNUNET_SECRETSHARING_FieldElement nizk_commit1;
/**
- * Signature over the previous values.
+ * Commitment for the non-interactive zero knowledge proof.
+ * c_1^\beta, with \beta < q
*/
- struct GNUNET_CRYPTO_EddsaSignature signature;
+ struct GNUNET_SECRETSHARING_FieldElement nizk_commit2;
+ /**
+ * Reponse to the challenge computed from the protocol transcript.
+ * r = \beta + challenge \cdot share_i
+ */
+ struct GNUNET_SECRETSHARING_FieldElement nizk_response;
+};
+
+
+struct GNUNET_SECRETSHARING_FairEncryption
+{
+ struct GNUNET_CRYPTO_PaillierCiphertext c;
+ /**
+ * h = g^x, where x is the fairly encrypte secret.
+ */
+ char h[GNUNET_SECRETSHARING_ELGAMAL_BITS / 8];
+ char t1[GNUNET_SECRETSHARING_ELGAMAL_BITS / 8];
+ char t2[GNUNET_CRYPTO_PAILLIER_BITS * 2 / 8];
+ char z[GNUNET_SECRETSHARING_ELGAMAL_BITS / 8];
+ char w[GNUNET_CRYPTO_PAILLIER_BITS / 8];
};
GNUNET_NETWORK_STRUCT_END