networkClient.hpp 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. #ifndef __PRSONA_NETWORK_CLIENT_HPP
  2. #define __PRSONA_NETWORK_CLIENT_HPP
  3. #include <string>
  4. #include <vector>
  5. #include <random>
  6. #include "client.hpp"
  7. #include "networking.hpp"
  8. enum EventType {
  9. CLIENT_MAKE_VOTE = 1,
  10. CLIENT_MAKE_REP_PROOF
  11. };
  12. /* "PUBLIC" FUNCTIONS */
  13. // CREATOR FOR A NEW CLIENT
  14. PrsonaClient *create_client(
  15. std::default_random_engine& rng,
  16. const std::vector<std::string>& serverIPs,
  17. const std::vector<int>& serverPorts,
  18. size_t numServers);
  19. // FUNCTIONS TO PERFORM OPERATIONS FOR EXPERIMENT
  20. void make_vote(
  21. std::default_random_engine& rng,
  22. PrsonaClient* prsonaClient,
  23. const std::vector<std::string>& serverIPs,
  24. const std::vector<int>& serverPorts,
  25. const std::string& target,
  26. int targetPort,
  27. size_t numClients,
  28. const CivetServer& civetServer,
  29. std::mutex& outputMtx,
  30. const std::string& outputFilename);
  31. bool make_reputation_proof(
  32. std::default_random_engine& rng,
  33. PrsonaClient* prsonaClient,
  34. const std::vector<std::string>& serverIPs,
  35. const std::vector<int>& serverPorts,
  36. const std::string& target,
  37. int targetPort,
  38. size_t numClients,
  39. const CivetServer& civetServer,
  40. std::mutex& outputMtx,
  41. const std::string& outputFilename);
  42. /* "PRIVATE" FUNCTIONS */
  43. // HELPERS TO ADD THIS CLIENT TO SERVERS
  44. void register_new_client(
  45. std::default_random_engine& rng,
  46. PrsonaClient *newUser,
  47. const std::vector<std::string>& serverIPs,
  48. const std::vector<int>& serverPorts,
  49. const Proof& proofOfValidSTPK,
  50. const Twistpoint& shortTermPublicKey);
  51. void verify_valid_addition(
  52. std::default_random_engine& rng,
  53. PrsonaClient *newUser,
  54. const std::vector<std::string>& serverIPs,
  55. const std::vector<int>& serverPorts,
  56. const std::vector<Proof>& proofOfValidAddition,
  57. const Twistpoint& shortTermPublicKey);
  58. // GETTERS FOR VARIOUS SERVER VALUES
  59. Twistpoint get_generator(
  60. std::default_random_engine& rng,
  61. const std::vector<std::string>& serverIPs,
  62. const std::vector<int>& serverPorts,
  63. bool fresh,
  64. std::vector<Proof>& pi,
  65. std::vector<size_t>& bandwidthData);
  66. BGNPublicKey get_bgn_public_key(
  67. std::default_random_engine& rng,
  68. const std::vector<std::string>& serverIPs,
  69. const std::vector<int>& serverPorts);
  70. template <typename T>
  71. T get_server_committed_val(
  72. std::default_random_engine& rng,
  73. const std::vector<std::string>& serverIPs,
  74. const std::vector<int>& serverPorts,
  75. const char *firstUri,
  76. const char *commitUri,
  77. std::vector<Proof>& pi,
  78. const Twistpoint& shortTermPublicKey,
  79. std::vector<size_t>& bandwidthData);
  80. // HELPERS FOR GENERALIZED GETTER FUNCTION
  81. template <typename T>
  82. T get_first_committed_val(
  83. std::default_random_engine& rng,
  84. const std::string& serverIP,
  85. int serverPort,
  86. const char *firstUri,
  87. Proof& pi,
  88. const Twistpoint& shortTermPublicKey,
  89. std::vector<size_t>& bandwidthData);
  90. void get_additional_commitment(
  91. std::default_random_engine& rng,
  92. const std::vector<std::string>& serverIPs,
  93. const std::vector<int>& serverPorts,
  94. const std::string& skipIP,
  95. int skipPort,
  96. const char *commitUri,
  97. std::vector<Proof>& pi,
  98. const Twistpoint& shortTermPublicKey,
  99. std::vector<size_t>& bandwidthData);
  100. // FILE I/O HELPERS FOR ALL GETTERS
  101. std::vector<Proof> get_valid_addition_proof_from_file(
  102. const char *filename);
  103. Twistpoint get_generator_from_file(
  104. const char *filename,
  105. std::vector<Proof>& pi);
  106. BGNPublicKey get_bgn_public_key_from_file(
  107. const char *filename);
  108. template <typename T>
  109. T get_committed_val_from_file(
  110. const char *filename,
  111. Proof& pi);
  112. Proof get_commitment_from_file(
  113. struct synchronization_tool *sync,
  114. const char *filename);
  115. // GENERALIZED SENDER FOR ORCHESTRATOR-SIGNALED OPERATIONS
  116. char *send_item(
  117. std::default_random_engine& rng,
  118. const std::string& target,
  119. int targetPort,
  120. const char* whichUri,
  121. const std::string& data,
  122. bool responseExpected,
  123. std::vector<size_t>& bandwidthData);
  124. // DATA SERIALIZERS
  125. std::string make_vote_string(
  126. const std::vector<Proof>& pi,
  127. const std::vector<TwistBipoint>& newVotes,
  128. const Twistpoint& shortTermPublicKey);
  129. std::string make_rep_proof_string(
  130. const std::vector<Proof>& pi,
  131. const Twistpoint& shortTermPublicKey,
  132. const Scalar& threshold);
  133. /* OTHER CLIENT-RELEVANT HANDLERS */
  134. // Used to tell orchestrator when the client is no longer doing a triggered task
  135. class ClientReadyHandler : public CivetHandler
  136. {
  137. public:
  138. ClientReadyHandler(
  139. struct synchronization_tool *exitSync);
  140. bool handleGet(
  141. CivetServer *server,
  142. struct mg_connection *conn);
  143. private:
  144. struct synchronization_tool *exitSync;
  145. };
  146. /* CLIENT-SPECIFIC HANDLER */
  147. class PrsonaClientWebSocketHandler : public CivetWebSocketHandler {
  148. public:
  149. // CONSTRUCTOR
  150. PrsonaClientWebSocketHandler(
  151. std::default_random_engine& rng,
  152. PrsonaClient *prsonaClient,
  153. const std::vector<std::string>& serverIPs,
  154. const std::vector<int>& serverPorts,
  155. std::mutex& outputMtx,
  156. const std::string& outputFilename);
  157. // REQUIRED BY INHERITED CLASS
  158. virtual bool handleConnection(
  159. CivetServer *server,
  160. const struct mg_connection *conn);
  161. virtual void handleReadyState(
  162. CivetServer *server,
  163. struct mg_connection *conn);
  164. virtual bool handleData(
  165. CivetServer *server,
  166. struct mg_connection *conn,
  167. int bits,
  168. char *data,
  169. size_t data_len);
  170. virtual void handleClose(
  171. CivetServer *server,
  172. const struct mg_connection *conn);
  173. private:
  174. std::default_random_engine &rng;
  175. PrsonaClient *prsonaClient;
  176. const std::vector<std::string> serverIPs;
  177. const std::vector<int> serverPorts;
  178. std::mutex& outputMtx;
  179. const std::string outputFilename;
  180. // RESPONSE ROUTER FUNCTION
  181. void generate_response(
  182. CivetServer *server,
  183. struct mg_connection *conn,
  184. const char *filename);
  185. // REPUTATION PROOF RESPONSE
  186. void verify_reputation_proof(
  187. CivetServer *civetServer,
  188. struct mg_connection *conn,
  189. const char *filename);
  190. };
  191. #endif