- fixes
[oweals/gnunet.git] / src / secretsharing / secretsharing_protocol.h
1 /*
2       This file is part of GNUnet
3       (C) 2012 Christian Grothoff (and other contributing authors)
4
5       GNUnet is free software; you can redistribute it and/or modify
6       it under the terms of the GNU General Public License as published
7       by the Free Software Foundation; either version 3, or (at your
8       option) any later version.
9
10       GNUnet is distributed in the hope that it will be useful, but
11       WITHOUT ANY WARRANTY; without even the implied warranty of
12       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13       General Public License for more details.
14
15       You should have received a copy of the GNU General Public License
16       along with GNUnet; see the file COPYING.  If not, write to the
17       Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18       Boston, MA 02111-1307, USA.
19 */
20
21
22 /**
23  * @file secretsharing/secretsharing_protocol.h
24  * @brief p2p message definitions for secretsharing
25  * @author Florian Dold
26  */
27
28 #ifndef GNUNET_SECRETSHARING_PROTOCOL_H
29 #define GNUNET_SECRETSHARING_PROTOCOL_H
30
31 #include "platform.h"
32 #include "gnunet_common.h"
33 #include "gnunet_protocols.h"
34 #include "secretsharing.h"
35
36 /**
37  * Bit length used for the Paillier crypto system.
38  */
39 #define PAILLIER_BITS 2048
40
41 GNUNET_NETWORK_STRUCT_BEGIN
42
43
44 /**
45  * Public key for the Paillier crypto system.
46  */
47 struct PaillierPublicKey
48 {
49   /**
50    * Network order representation of the
51    * n-component.
52    */
53   uint32_t n[PAILLIER_BITS / 8 / sizeof (uint32_t)];
54 };
55
56
57 /**
58  * Consensus element data used in the first round of key generation.
59  */
60 struct GNUNET_SECRETSHARING_KeygenCommitData
61 {
62   /**
63    * Signature over the rest of the message.
64    */
65   struct GNUNET_CRYPTO_EddsaSignature signature;
66   /**
67    * Signature purpose for signing the keygen commit data.
68    */
69   struct GNUNET_CRYPTO_EccSignaturePurpose purpose;
70   /**
71    * Peer that inserts this element.
72    */
73   struct GNUNET_PeerIdentity peer;
74   /**
75    * Ephemeral paillier public key used by 'peer' for
76    * this session.
77    */
78   struct PaillierPublicKey pubkey GNUNET_PACKED;
79   /**
80    * Commitment of 'peer' to his presecret.
81    */
82   struct GNUNET_HashCode commitment GNUNET_PACKED;
83 };
84
85
86 struct GNUNET_SECRETSHARING_KeygenRevealData
87 {
88   /**
89    * Signature over rest of the message.
90    */
91   struct GNUNET_CRYPTO_EddsaSignature signature;
92   /*
93    * Signature purpose for signing the keygen commit data.
94    */
95   struct GNUNET_CRYPTO_EccSignaturePurpose purpose;
96   /**
97    * Peer that inserts this element.
98    */
99   struct GNUNET_PeerIdentity peer;
100
101   /* values follow */
102 };
103
104
105 /**
106  * Data of then element put in consensus
107  * for decrypting a value.
108  */
109 struct GNUNET_SECRETSHARING_DecryptData
110 {
111   /*
112    * Signature over rest of the message.
113    */
114   struct GNUNET_CRYPTO_EddsaSignature signature;
115   /*
116    * Signature purpose for signing the keygen commit data.
117    */
118   struct GNUNET_CRYPTO_EccSignaturePurpose purpose;
119   /**
120    * Ciphertext we want to decrypt.
121    */
122   struct GNUNET_SECRETSHARING_Ciphertext ciphertext;
123   /**
124    * Peer that inserts this element.
125    */
126   struct GNUNET_PeerIdentity peer;
127   /**
128    * Partial decryption, computed as c_1^{s_i}
129    */
130   struct GNUNET_SECRETSHARING_FieldElement partial_decryption;
131   /**
132    * Commitment for the non-interactive zero knowledge proof.
133    * g^\beta, with \beta < q
134    */
135   struct GNUNET_SECRETSHARING_FieldElement nizk_commit1;
136   /**
137    * Commitment for the non-interactive zero knowledge proof.
138    * c_1^\beta, with \beta < q
139    */
140   struct GNUNET_SECRETSHARING_FieldElement nizk_commit2;
141   /**
142    * Reponse to the challenge computed from the protocol transcript.
143    * r = \beta + challenge \cdot share_i
144    */
145   struct GNUNET_SECRETSHARING_FieldElement nizk_response;
146 };
147
148 GNUNET_NETWORK_STRUCT_END
149
150 #endif