arithm::PSubGroup Class Reference

Implements a p-subgroup (as defined in Sylow theory) of any multiplicative group. More...

#include <psubgroup.hpp>

+ Inheritance diagram for arithm::PSubGroup:
+ Collaboration diagram for arithm::PSubGroup:

Public Member Functions

 PSubGroup (Group *bgrp, mpz_class order, mpz_class gen)
 Initializes a p-subgroup instance.
Elmt multiplication (Elmt e1, Elmt e2)
 Returns the product of the two elements as an element of this group.
Elmt multInverse (Elmt e)
 Returns $e^{-1}$ as an element of this group.
Elmt exponentiation (Elmt e, Elmt s)
 Returns the $e^s$ as an element of this group.
unsigned int getLeafSize ()
 Returns the byte size the leaves representing element of this group must have.
bool isIn (mpz_class r)
 Returns true if and only if $r^{order}$ is equal to 1.
std::string getType ()
 Returns a string containing the name of this Group.
- Public Member Functions inherited from arithm::Group
 Group (mpz_class order, mpz_class gen)
 Sets the attributes of a new group instance.
virtual verifierUtils::ByteTreetoByteTree ()
 Returns the bytetree representation of this group.
bool compare (Elmt e1, Elmt e2)
 Returns true if e1 and e2 have identical values, false otherwise.
ArrayOfElmts multiplication (ArrayOfElmts e1, ArrayOfElmts e2)
 Returns $R ~|~ R_i = e_{1,i} \times e_{2,i}$ as an array of elements of this group.
ArrayOfElmts multInverse (ArrayOfElmts e)
 Returns $R ~|~ R_i = e_i^{-1}$ as an array of elements of this group.
ArrayOfElmts exponentiation (ArrayOfElmts e, ArrayOfElmts s)
 Returns $R ~|~ R_i = e_i^{s_i}$ as an array of elements of this group.
Elmt product (ArrayOfElmts e)
 Returns $r = \prod e_i$ as an element of this group.
Elmt expProduct (ArrayOfElmts e, ArrayOfElmts s)
 Returns $r = \prod e_i^{s_i}$ as an element of this group.
bool compare (ArrayOfElmts e1, ArrayOfElmts e2)
 Returns true if e1 and e2 have identical values component-wise, false if at least one of the component is different.
virtual Elmt encode (std::vector< uint8_t > message)
 Encodes the message into a element of this group.
virtual std::vector< uint8_t > decode (Elmt e)
 Returns the element encoded in the element given as a paramater.
Elmt getOne ()
 Returns an element containing the unit of this group.
ArrayOfElmts getOne (unsigned int n)
 Returns an array containing n copies of the unit of this group.
Elmt getElmt (mpz_class repr)
 Returns the element of this group which has repr as a representative.
Elmt getElmt (verifierUtils::ByteTree *bt)
 Returns the element of this group which bt as a bytetree representation.
ArrayOfElmts getArray (verifierUtils::ByteTree *bt)
 Returns the array of elements of this group which has bt as a bytetree representation.
virtual ArrayOfElmts getRandArray (cryptoTools::PRG *prg, unsigned int nr, unsigned int n0)
 Returns an array of elements of size n0 derived using a prg.
mpz_class getMultOrder ()
 Returns the multiplicative generator of this group.
Elmt getGenerator ()
 Returns the multiplicative generator of this group as an element of this group.
ArrayOfElmts getGenerator (unsigned int n)
 Returns an array containing n copies of the multiplicative order of this group.

Protected Attributes

GroupbaseGroup
 The group this instance is a p-subgroup of.
mpz_class coOrder
 The order of baseGroup divided by that of this one.
- Protected Attributes inherited from arithm::Group
mpz_class multOrder
 The order of this multiplicative group.
mpz_class generator
 The generator to use for this group.

Detailed Description

Implements a p-subgroup (as defined in Sylow theory) of any multiplicative group.

Definition at line 26 of file psubgroup.hpp.

Constructor & Destructor Documentation

PSubGroup::PSubGroup ( Group bgrp,
mpz_class  order,
mpz_class  gen 
)

Initializes a p-subgroup instance.

Parameters
bgrpThe group this instance is a subgroup of.
orderThe order of this subgroup.
genA generator of this subgroup.

Definition at line 18 of file psubgroup.cpp.

:
Group(order, gen)
{
baseGroup = bgrp;
if (!isIn(generator))
{
std::cout<<"ERROR: in PSubGroup(bgrp, order, gen), the "
<<"generator is not of the correct order."
<<"\ngen="<<gen.get_str(16)
<<"\norder="<<order.get_str(16)<<std::endl;
}
}

Member Function Documentation

Elmt PSubGroup::exponentiation ( Elmt  e,
Elmt  s 
)
virtual

Returns the $e^s$ as an element of this group.

Reimplemented from arithm::Group.

Definition at line 45 of file psubgroup.cpp.

{
return Elmt(baseGroup->exponentiation(e,s).getValue(), this);
}
unsigned int PSubGroup::getLeafSize ( )
virtual

Returns the byte size the leaves representing element of this group must have.

Reimplemented from arithm::Group.

Definition at line 51 of file psubgroup.cpp.

{
}
std::string PSubGroup::getType ( )
virtual

Returns a string containing the name of this Group.

Reimplemented from arithm::Group.

Definition at line 65 of file psubgroup.cpp.

{
return "PSubGroup of a " + baseGroup->getType();
}
bool PSubGroup::isIn ( mpz_class  r)
virtual

Returns true if and only if $r^{order}$ is equal to 1.

Reimplemented from arithm::Group.

Definition at line 57 of file psubgroup.cpp.

{
return (trial.getValue() == 1);
}
Elmt PSubGroup::multInverse ( Elmt  e)
virtual

Returns $e^{-1}$ as an element of this group.

Reimplemented from arithm::Group.

Definition at line 39 of file psubgroup.cpp.

{
return Elmt(baseGroup->multInverse(e).getValue(), this);
}
Elmt PSubGroup::multiplication ( Elmt  e1,
Elmt  e2 
)
virtual

Returns the product of the two elements as an element of this group.

Reimplemented from arithm::Group.

Definition at line 33 of file psubgroup.cpp.

{
return Elmt(baseGroup->multiplication(e1,e2).getValue(), this);
}

Member Data Documentation

Group* arithm::PSubGroup::baseGroup
protected

The group this instance is a p-subgroup of.

Definition at line 32 of file psubgroup.hpp.

mpz_class arithm::PSubGroup::coOrder
protected

The order of baseGroup divided by that of this one.

Definition at line 37 of file psubgroup.hpp.


The documentation for this class was generated from the following files: