Next: SchindelhauerTMCG, Previous: GrothVSSHE, Up: Classes [Contents][Index]
De Hoogh, Schoenmakers, Skoric, and Villegas [HSSV09] has proposed an efficient solution to perform a verifiable rotation (also known as cyclic shift) of homomorphically encrypted values. Other solutions (e.g. Reiter and Wang, Fragile Mixing, ACM CCS, 2004) do not provide that level of efficency. LibTMCG provides the first known implementation of their protocol. It can only be used with the VTMF card encoding scheme of Barnett and Smart [BS03].
Further, to the best of our knowledge it is not known, whether their protocol retains the zero-knowledge property when it is executed in a concurrent setting. Thus the application programmer should be careful and avoid parallel invocations of the same instance.
This class provides the low-level interface for their protocol. There are just a few methods that might be of general interest. All other components are only used internally by high-level operations and thus their description is omitted here.
mpz_srcptr
p_ENC, mpz_srcptr
q_ENC, mpz_srcptr
k_ENC, mpz_srcptr
g_ENC, mpz_srcptr
h_ENC, unsigned long int
fieldsize =TMCG_DDH_SIZE
, unsigned long int
subgroupsize =TMCG_DLSE_SIZE
)This constructor creates a new instance. The low-level operations
are later used to show the correctness of a rotation of the cards.
The protocol and some of its parameters are initialized by the
members of the corresponding VTMF instance. Consequently, p_ENC
is the prime number p which determines the field
{\bf Z}/p{\bf Z}, q_ENC is the order of the underlying
subgroup G, i.e. the prime number q, and k_ENC is
the integer such that p = qk + 1 holds. Further, g_ENC is
the generator g, and finally h_ENC is the common public
key h.
The fieldsize and the subgroupsize are supplied to internal
classes and are only of interest, if p_ENC or q_ENC have
lengths different from the default. If these arguments are omitted,
they are set to TMCG_DDH_SIZE
and TMCG_DLSE_SIZE
, respectively.
This constructor should be instantiated only once by the session leader. All other instances must be created by the second constructor. Further, it is very important that the VTMF key generation protocol has been finished before the value of h is passed to the constructor. Otherwise, the correctness verification will definitely fail.
std::istream&
in, unsigned long int
fieldsize =TMCG_DDH_SIZE
, unsigned long int
subgroupsize =TMCG_DLSE_SIZE
)This constructor initializes the instance from a correctly formatted
input stream in. For example, such a stream can be generated by
calling the method PublishGroup
of an already created instance.
Later the instance can be used to show the correctness of a rotation.
This method checks whether the initialized commitment scheme is sound.
It returns true
, if all tests have been passed successfully.
std::ostream&
out)This method exports the instance configuration to the output stream out such that other instances can be initialized, e.g. with the second constructor.
This destructor releases all occupied resources.
Next: SchindelhauerTMCG, Previous: GrothVSSHE, Up: Classes [Contents][Index]