123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 |
- #ifndef __PRSONA_SERVER_ENTITY_HPP
- #define __PRSONA_SERVER_ENTITY_HPP
- #include <vector>
- #include "client.hpp"
- #include "server.hpp"
- #include "proof.hpp"
- class PrsonaServerEntity {
- public:
- // CONSTRUCTORS
- PrsonaServerEntity(size_t numServers);
- // BASIC PUBLIC SYSTEM INFO GETTERS
- BGNPublicKey get_bgn_public_key() const;
- BGNPublicKey get_bgn_public_key(
- size_t which
- ) const;
- Twistpoint get_blinding_generator() const;
- Twistpoint get_blinding_generator(
- size_t which
- ) const;
- Twistpoint get_blinding_generator(
- std::vector<Proof>& pi
- ) const;
- Twistpoint get_blinding_generator(
- std::vector<Proof>& pi,
- size_t which
- ) const;
- Twistpoint get_fresh_generator() const;
- Twistpoint get_fresh_generator(
- size_t which
- ) const;
- Twistpoint get_fresh_generator(
- std::vector<Proof>& pi
- ) const;
- Twistpoint get_fresh_generator(
- std::vector<Proof>& pi,
- size_t which
- ) const;
- size_t get_num_clients() const;
- size_t get_num_clients(
- size_t which
- ) const;
- size_t get_num_servers() const;
- size_t get_num_servers(
- size_t which
- ) const;
- // ENCRYPTED DATA GETTERS
- std::vector<TwistBipoint> get_current_votes_by(
- Proof& pi,
- const Twistpoint& shortTermPublicKey
- ) const;
- std::vector<TwistBipoint> get_current_votes_by(
- Proof& pi,
- const Twistpoint& shortTermPublicKey,
- size_t which
- ) const;
- std::vector<std::vector<TwistBipoint>> get_all_current_votes(
- Proof& pi
- ) const;
- std::vector<std::vector<TwistBipoint>> get_all_current_votes(
- Proof& pi,
- size_t which
- ) const;
- EGCiphertext get_current_user_encrypted_tally(
- Proof& pi,
- const Twistpoint& shortTermPublicKey
- ) const;
- EGCiphertext get_current_user_encrypted_tally(
- Proof& pi,
- const Twistpoint& shortTermPublicKey,
- size_t which
- ) const;
- CurveBipoint get_current_server_encrypted_tally(
- Proof& pi,
- const Twistpoint& shortTermPublicKey
- ) const;
- CurveBipoint get_current_server_encrypted_tally(
- Proof& pi,
- const Twistpoint& shortTermPublicKey,
- size_t which
- ) const;
- std::vector<Twistpoint> get_current_pseudonyms(
- Proof& pi
- ) const;
- std::vector<Twistpoint> get_current_pseudonyms(
- Proof& pi,
- size_t which
- ) const;
- // PROOF COMMITMENT GETTERS
- void get_other_vote_row_commitments(
- std::vector<Proof>& pi,
- const Twistpoint& request
- ) const;
- void get_other_vote_row_commitments(
- std::vector<Proof>& pi,
- const Twistpoint& request,
- size_t whichNot
- ) const;
- void get_other_vote_matrix_commitments(
- std::vector<Proof>& pi
- ) const;
- void get_other_vote_matrix_commitments(
- std::vector<Proof>& pi,
- size_t whichNot
- ) const;
- void get_other_user_tally_commitments(
- std::vector<Proof>& pi,
- const Twistpoint& request
- ) const;
- void get_other_user_tally_commitments(
- std::vector<Proof>& pi,
- const Twistpoint& request,
- size_t whichNot
- ) const;
- void get_other_server_tally_commitments(
- std::vector<Proof>& pi,
- const Twistpoint& request
- ) const;
- void get_other_server_tally_commitments(
- std::vector<Proof>& pi,
- const Twistpoint& request,
- size_t whichNot)
- const;
- void get_other_pseudonyms_commitments(
- std::vector<Proof>& pi
- ) const;
- void get_other_pseudonyms_commitments(
- std::vector<Proof>& pi,
- size_t whichNot
- ) const;
- // CLIENT INTERACTIONS
- void add_new_client(
- PrsonaClient& newUser);
- void add_new_client(
- PrsonaClient& newUser,
- size_t which);
- bool receive_vote(
- const std::vector<Proof>& pi,
- const std::vector<TwistBipoint>& newVotes,
- const Twistpoint& shortTermPublicKey);
- bool receive_vote(
- const std::vector<Proof>& pi,
- const std::vector<TwistBipoint>& newVotes,
- const Twistpoint& shortTermPublicKey,
- size_t which);
- void transmit_new_user_data(
- const std::vector<Proof>& pi,
- PrsonaClient& newUser
- ) const;
- void transmit_new_user_data(
- const std::vector<Proof>& pi,
- PrsonaClient& newUser,
- size_t which
- ) const;
- void transmit_updates(
- PrsonaClient& currUser
- ) const;
- void transmit_updates(
- PrsonaClient& currUser,
- size_t which
- ) const;
- // EPOCH
- void epoch();
- void epoch(
- size_t which);
- void print_scores() const;
- void print_votes() const;
- void print_current_votes_by(
- const Twistpoint& index
- ) const;
- private:
- std::vector<PrsonaServer> servers;
- // SCORE TALLYING
- void tally_scores(
- const Twistpoint& nextGenerator,
- std::vector<EGCiphertext>& userTallyScores,
- std::vector<CurveBipoint>& serverTallyScores,
- size_t which);
- void distribute_tallied_scores(
- const std::vector<EGCiphertext>& userScores,
- const std::vector<CurveBipoint>& serverScores);
-
- // BINARY SEARCH
- size_t binary_search(
- const Twistpoint& shortTermPublicKey,
- size_t which
- ) const;
- };
- #endif
|