#define KEYBITS 2048
/**
- * When performing our crypto, we may add two encrypted values with each
+ * When performing our crypto, we may add two encrypted values with each
* a maximal length of GNUNET_CRYPTO_RSA_DATA_ENCODING_LENGTH.
* thus we can receive a slightly longer element (+1 byte)
*/
#define PAILLIER_ELEMENT_LENGTH (2*KEYBITS/8 +1)
+/**
+ * Maximum count of elements we can put into a multipart message
+ */
+#define MULTIPART_ELEMENT_CAPACITY ((GNUNET_SERVER_MAX_MESSAGE_SIZE - 1 - sizeof (struct GNUNET_SCALARPRODUCT_multipart_message)) / PAILLIER_ELEMENT_LENGTH)
+
/**
* Log an error message at log-level 'level' that indicates
* a failure of the command 'cmd' with the message given
///////////////////////////////////////////////////////////////////////////////
/**
- * Message type passed from client to service
+ * Message type passed from client to service
* to initiate a request or responder role
*/
struct GNUNET_SCALARPRODUCT_client_request
* followed by long vector[element_count] | [unsigned char mask[mask_bytes]]
*/
};
-
+
/**
* Message type passed from requesting service Alice to responding service Bob
* to initiate a request and make bob participate in our protocol
*/
struct GNUNET_MessageHeader header;
+ /**
+ * how many elements the total message including all multipart msgs contains
+ */
+ uint32_t total_element_count GNUNET_PACKED;
+
+ /**
+ * how many elements are actually included after the mask was applied.
+ */
+ uint32_t contained_element_count GNUNET_PACKED;
+
/**
* how many bytes the mask has
*/
uint32_t element_count GNUNET_PACKED;
/**
- * how many elements are actually included after the mask was applied.
+ * followed by mask | public_key | vector[used_element_count]
*/
- uint32_t used_element_count GNUNET_PACKED;
+};
+/**
+ * Multipart Message type passed between to supply additional elements for the peer
+ */
+struct GNUNET_SCALARPRODUCT_multipart_message {
/**
- * followed by mask | public_key | vector[used_element_count]
+ * GNUNET message header
*/
+ struct GNUNET_MessageHeader header;
+
+ /**
+ * how many elements we supply within this message
+ */
+ uint32_t multipart_element_count GNUNET_PACKED;
+
+ // followed by vector[multipart_element_count] or k[i][perm]
};
/**
struct GNUNET_MessageHeader header;
/**
- * how many elements the vector in payload contains
+ * how many elements the session input had
*/
- uint32_t element_count GNUNET_PACKED;
+ uint32_t total_element_count GNUNET_PACKED;
/**
- * how many elements are actually included after the mask was applied.
+ * how many elements were included after the mask was applied including all multipart msgs.
*/
uint32_t used_element_count GNUNET_PACKED;
+ /**
+ * how many elements this individual message delivers
+ */
+ uint32_t contained_element_count GNUNET_PACKED;
+
/**
* the transaction/session key used to identify a session
*/
struct GNUNET_HashCode key;
/**
- * followed by s | s' | kp[] | kq[]
+ * followed by s | s' | k[i][perm]
*/
};
* followed by product of length product_length (or nothing)
*/
};
-
+
#ifdef __cplusplus
}
#endif