-improve UDP logging
[oweals/gnunet.git] / src / secretsharing / secretsharing_protocol.h
index 470002f10153be4b4459818398ce479f336ce340..5438b14d4559867e73f495158987ce368112bf47 100644 (file)
@@ -1,6 +1,6 @@
 /*
       This file is part of GNUnet
-      (C) 2012 Christian Grothoff (and other contributing authors)
+      Copyright (C) 2012 Christian Grothoff (and other contributing authors)
 
       GNUnet is free software; you can redistribute it and/or modify
       it under the terms of the GNU General Public License as published
 #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.
- */
-struct PaillierPublicKey
-{
-  /**
-   * Network order representation of the
-   * g-component.
-   */
-  uint32_t g[PAILLIER_BITS / 8 / sizeof (uint32_t)];
-
-  /**
-   * Network order representation of the
-   * n-component.
-   */
-  uint32_t n[PAILLIER_BITS / 8 / sizeof (uint32_t)];
-};
-
-
 /**
  * Consensus element data used in the first round of key generation.
  */
@@ -87,7 +58,7 @@ struct GNUNET_SECRETSHARING_KeygenCommitData
    * Ephemeral paillier public key used by 'peer' for
    * this session.
    */
-  struct PaillierPublicKey pubkey GNUNET_PACKED;
+  struct GNUNET_CRYPTO_PaillierPublicKey pubkey;
   /**
    * Commitment of 'peer' to his presecret.
    */
@@ -113,6 +84,64 @@ struct GNUNET_SECRETSHARING_KeygenRevealData
   /* values follow */
 };
 
+
+/**
+ * Data of then element put in consensus
+ * for decrypting a value.
+ */
+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;
+  /**
+   * Partial decryption, computed as c_1^{s_i}
+   */
+  struct GNUNET_SECRETSHARING_FieldElement partial_decryption;
+  /**
+   * Commitment for the non-interactive zero knowledge proof.
+   * g^\beta, with \beta < q
+   */
+  struct GNUNET_SECRETSHARING_FieldElement nizk_commit1;
+  /**
+   * Commitment for the non-interactive zero knowledge proof.
+   * c_1^\beta, with \beta < q
+   */
+  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
 
 #endif