-improve UDP logging
[oweals/gnunet.git] / src / secretsharing / secretsharing_protocol.h
index 71e6d50a90dcd339ca605fefde7ec377dc5b032d..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.
+ * 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