Percy++
A C++ implementation of Private Information Retrieval (PIR) protocols
|
An abstract base class for a protocol's parameters. More...
#include <percyparams.h>
Public Member Functions | |
PercyParams (dbsize_t num_blocks, dbsize_t block_size, dbsize_t word_size, PercyMode mode, nservers_t tau=0, dbsize_t virtual_block_size=1) | |
Constructor. More... | |
virtual | ~PercyParams () |
Destructor. More... | |
dbsize_t | num_blocks () const |
Get the number of blocks in the database. More... | |
dbsize_t | block_size () const |
Get the size of each block in the database in bytes. More... | |
virtual dbsize_t | server_block_size () const |
Get the size of each block in the database that the datastore will actually use. More... | |
dbsize_t | word_size () const |
Get the word size used to split blocks. More... | |
dbsize_t | words_per_block () const |
Get the number of words per database block. More... | |
PercyMode | get_mode () const |
Get the protocol being used. More... | |
nservers_t | tau () const |
Get the level of tau-independence. More... | |
dbsize_t | num_virtual_blocks () const |
Get the number of virtual blocks when being used as one iteration of a recursive protocol. More... | |
dbsize_t | virtual_block_size () const |
Get the number of actual blocks in a virtual block when being used as one iteration of a recursive protocol. More... | |
virtual dbsize_t | request_size (nqueries_t num_queries=1) const =0 |
Get the size of a client to server request. More... | |
virtual dbsize_t | response_size (nqueries_t num_queries=1) const =0 |
Get the size of a server to client response. More... | |
void | print (std::ostream &os) const |
Prints the parameters in CSV form. More... | |
virtual void | print_mode_specific (std::ostream &os) const |
Print mode-specific parameters. More... | |
virtual void | write (std::ostream &os) const |
Write the parameters to a stream to check compatibility. More... | |
virtual bool | check_compatible (std::istream &is) const |
Read the parameters from a stream (as written by write()) and check that they are compatible with these parameters. More... | |
virtual std::vector< const PercyParams * > | create_worker_params (std::vector< Dimension > worker_dims) const =0 |
Create protocol parameters for threads/workers. More... | |
virtual bool | is_recursive () const |
Check if the protocol is recursive. More... | |
Protected Attributes | |
unsigned char | version [3] |
Percy++ version. More... | |
dbsize_t | _num_blocks |
Number of database blocks. More... | |
dbsize_t | _block_size |
Size of database blocks in bytes. More... | |
dbsize_t | _word_size |
Word size used to split blocks. More... | |
dbsize_t | _words_per_block |
Number of words per database block. More... | |
PercyMode | mode |
Protocol being used. More... | |
nservers_t | _tau |
Level of tau-independence. More... | |
dbsize_t | _num_virtual_blocks |
Number of virtual blocks when part of a recursive protocol. More... | |
dbsize_t | _virtual_block_size |
Number of actual blocks per virtual block when part of a recursive protocol. More... | |
An abstract base class for a protocol's parameters.
PercyParams | ( | dbsize_t | num_blocks, |
dbsize_t | block_size, | ||
dbsize_t | word_size, | ||
PercyMode | mode, | ||
nservers_t | tau = 0 , |
||
dbsize_t | virtual_block_size = 1 |
||
) |
Constructor.
num_blocks | Number of blocks in the database. |
block_size | Size of the blocks in the database in bytes. |
word_size | Word size used to split the blocks. |
mode | PIR protocol to use. |
tau | Databases are tau-independent. No coalition of up to tau servers can determine the contents of the database. |
virtual_block_size | Number of actual blocks contained in each virtual block when being used as one iteration of a recursive protocol. |
|
inlinevirtual |
Destructor.
|
inline |
Get the size of each block in the database in bytes.
|
virtual |
Read the parameters from a stream (as written by write()) and check that they are compatible with these parameters.
is | Stream to read from. |
Reimplemented in ZZ_pParams, AGParams, and RecursiveParams.
|
pure virtual |
Create protocol parameters for threads/workers.
worker_dims The database dimensions for each thread/worker.
Implemented in ChorParams, GF2EParams, ZZ_pParams, AGParams, and RecursiveParams.
|
inline |
Get the protocol being used.
|
inlinevirtual |
Check if the protocol is recursive.
Reimplemented in RecursiveParams.
|
inline |
Get the number of blocks in the database.
|
inline |
Get the number of virtual blocks when being used as one iteration of a recursive protocol.
void print | ( | std::ostream & | os | ) | const |
Prints the parameters in CSV form.
The fields are:
mode,num_blocks,block_size,word_size,tau,virtual_block_size,mode_specific,
where mode_specific is the result of calling print_mode_specific()
os | Stream to print to. |
|
inlinevirtual |
Print mode-specific parameters.
Meant to be overloaded by subclasses to print more details about that mode. Is used by print() to print the mode_specific column.
os | Stream to print to. |
Reimplemented in RecursiveAGParams, AGParams, RecursiveParams, and HybridParams.
|
pure virtual |
Get the size of a client to server request.
num_queries | The number of queries in the request. (Default: 1) |
Implemented in ChorParams, GF2EParams, ZZ_pParams, AGParams, and RecursiveParams.
|
pure virtual |
Get the size of a server to client response.
num_queries | The number of queries in the request. (Default: 1) |
Implemented in ChorParams, GF2EParams, ZZ_pParams, AGParams, and RecursiveParams.
|
inlinevirtual |
Get the size of each block in the database that the datastore will actually use.
This may be different than block_size() when tau-independence is used.
Reimplemented in ZZ_pParams, and HybridParams.
|
inline |
Get the level of tau-independence.
A value of zero indicates that any server can determine the contents of the database.
|
inline |
Get the number of actual blocks in a virtual block when being used as one iteration of a recursive protocol.
|
inline |
Get the word size used to split blocks.
|
inline |
Get the number of words per database block.
|
virtual |
Write the parameters to a stream to check compatibility.
os | Stream to write to. |
Reimplemented in ZZ_pParams, AGParams, and RecursiveParams.
|
protected |
Size of database blocks in bytes.
|
protected |
Number of database blocks.
|
protected |
Number of virtual blocks when part of a recursive protocol.
|
protected |
Level of tau-independence.
|
protected |
Number of actual blocks per virtual block when part of a recursive protocol.
|
protected |
Word size used to split blocks.
|
protected |
Number of words per database block.
|
protected |
Protocol being used.
|
protected |
Percy++ version.