Crypto++ 7.0 Free C++ class library of cryptographic schemes

Public Types | Public Member Functions | List of all members
QuotientRing< T > Class Template Reference

Quotient ring. More...

Inheritance diagram for QuotientRing< T >:

## Public Types
typedef T | EuclideanDomain
typedef T::Element | Element
Public Types inherited from AbstractRing< T::Element >
typedef T | Element
Public Types inherited from AbstractGroup< T >
typedef T | Element

## Public Member Functions
| QuotientRing (const EuclideanDomain &domain, const Element &modulus)
const EuclideanDomain & | GetDomain () const
const Element & | GetModulus () const
bool | Equal (const Element &a, const Element &b) const
| Compare two elements for equality. More...
const Element & | Identity () const
| Provides the Identity element. More...
const Element & | Add (const Element &a, const Element &b) const
| Adds elements in the group. More...
Element & | Accumulate (Element &a, const Element &b) const
| TODO. More...
const Element & | Inverse (const Element &a) const
| Inverts the element in the group. More...
const Element & | Subtract (const Element &a, const Element &b) const
| Subtracts elements in the group. More...
Element & | Reduce (Element &a, const Element &b) const
| Reduces an element in the congruence class. More...
const Element & | Double (const Element &a) const
| Doubles an element in the group. More...
bool | IsUnit (const Element &a) const
| Determines whether an element is a unit in the group. More...
const Element & | MultiplicativeIdentity () const
| Retrieves the multiplicative identity. More...
const Element & | Multiply (const Element &a, const Element &b) const
| Multiplies elements in the group. More...
const Element & | Square (const Element &a) const
| Square an element in the group. More...
const Element & | MultiplicativeInverse (const Element &a) const
| Calculate the multiplicative inverse of an element in the group. More...
bool | operator== (const QuotientRing< T > &rhs) const
Public Member Functions inherited from AbstractRing< T::Element >
| AbstractRing ()
| Construct an AbstractRing.
| AbstractRing (const AbstractRing &source)
| Copy construct an AbstractRing. More...
AbstractRing & | operator= (const AbstractRing &source)
| Assign an AbstractRing. More...
virtual const Element & | Divide (const Element &a, const Element &b) const
| Divides elements in the group. More...
virtual Element | Exponentiate (const Element &a, const Integer &e) const
| Raises a base to an exponent in the group. More...
virtual Element | CascadeExponentiate (const Element &x, const Integer &e1, const Element &y, const Integer &e2) const
| TODO. More...
virtual void | SimultaneousExponentiate (Element *results, const Element &base, const Integer *exponents, unsigned int exponentsCount) const
| Exponentiates a base to multiple exponents in the Ring. More...
virtual const AbstractGroup< T > & | MultiplicativeGroup () const
| Retrieves the multiplicative group. More...
Public Member Functions inherited from AbstractGroup< T >
virtual bool | InversionIsFast () const
| Determine if inversion is fast. More...
virtual Element | ScalarMultiply (const Element &a, const Integer &e) const
| Performs a scalar multiplication. More...
virtual Element | CascadeScalarMultiply (const Element &x, const Integer &e1, const Element &y, const Integer &e2) const
| TODO. More...
virtual void | SimultaneousMultiply (Element *results, const Element &base, const Integer *exponents, unsigned int exponentsCount) const
| Multiplies a base to multiple exponents in a group. More...

## Detailed Description

### template<class T>
class QuotientRing< T >

Quotient ring.

Template Parameters

  T | element class or type

`const Element&` returned by member functions are references to internal data members. Since each object may have only one such data member for holding results, the following code will produce incorrect results:

        abcd = group.Add(group.Add(a,b), group.Add(c,d));

But this should be fine:

        abcd = group.Add(a, group.Add(b, group.Add(c,d));

Definition at line 386 of file algebra.h.

## Member Function Documentation

## ◆ Equal()

template<class T>

bool QuotientRing< T >::Equal | ( | const Element & | a,
|  | const Element & | b
| ) |  | const
| inline virtual

Compare two elements for equality.

Parameters

  a | first element
  b | second element

Returns
  true if the elements are equal, false otherwise

Equal() tests the elements for equality using `a==b`

Implements AbstractGroup< T >.

Definition at line 401 of file algebra.h.

## ◆ Identity()

template<class T>

const Element& QuotientRing< T >::Identity | ( |  | ) | const
| inline virtual

Provides the Identity element.

Returns
  the Identity element

Implements AbstractGroup< T >.

Definition at line 404 of file algebra.h.

## ◆ Add()

template<class T>

const Element& QuotientRing< T >::Add | ( | const Element & | a,
|  | const Element & | b
| ) |  | const
| inline virtual

Adds elements in the group.

Parameters

  a | first element
  b | second element

Returns
  the sum of `a` and `b`

Implements AbstractGroup< T >.

Definition at line 407 of file algebra.h.

## ◆ Accumulate()

template<class T>

Element& QuotientRing< T >::Accumulate | ( | Element & | a,
|  | const Element & | b
| ) |  | const
| inline virtual

TODO.

Parameters

  a | first element
  b | second element

Returns
  TODO

Reimplemented from AbstractGroup< T >.

Definition at line 410 of file algebra.h.

## ◆ Inverse()

template<class T>

const Element& QuotientRing< T >::Inverse | ( | const Element & | a | ) | const
| inline virtual

Inverts the element in the group.

Parameters

  a | first element

Returns
  the inverse of the element

Implements AbstractGroup< T >.

Definition at line 413 of file algebra.h.

## ◆ Subtract()

template<class T>

const Element& QuotientRing< T >::Subtract | ( | const Element & | a,
|  | const Element & | b
| ) |  | const
| inline virtual

Subtracts elements in the group.

Parameters

  a | first element
  b | second element

Returns
  the difference of `a` and `b`. The element `a` must provide a Subtract member function.

Reimplemented from AbstractGroup< T >.

Definition at line 416 of file algebra.h.

## ◆ Reduce()

template<class T>

Element& QuotientRing< T >::Reduce | ( | Element & | a,
|  | const Element & | b
| ) |  | const
| inline virtual

Reduces an element in the congruence class.

Parameters

  a | element to reduce
  b | the congruence class

Returns
  the reduced element

Reimplemented from AbstractGroup< T >.

Definition at line 419 of file algebra.h.

## ◆ Double()

template<class T>

const Element& QuotientRing< T >::Double | ( | const Element & | a | ) | const
| inline virtual

Doubles an element in the group.

Parameters

  a | the element

Returns
  the element doubled

Reimplemented from AbstractGroup< T >.

Definition at line 422 of file algebra.h.

## ◆ IsUnit()

template<class T>

bool QuotientRing< T >::IsUnit | ( | const Element & | a | ) | const
| inline virtual

Determines whether an element is a unit in the group.

Parameters

  a | the element

Returns
  true if the element is a unit after reduction, false otherwise.

Implements AbstractRing< T::Element >.

Definition at line 425 of file algebra.h.

## ◆ MultiplicativeIdentity()

template<class T>

const Element& QuotientRing< T >::MultiplicativeIdentity | ( |  | ) | const
| inline virtual

Retrieves the multiplicative identity.

Returns
  the multiplicative identity

Implements AbstractRing< T::Element >.

Definition at line 428 of file algebra.h.

## ◆ Multiply()

template<class T>

const Element& QuotientRing< T >::Multiply | ( | const Element & | a,
|  | const Element & | b
| ) |  | const
| inline virtual

Multiplies elements in the group.

Parameters

  a | the multiplicand
  b | the multiplier

Returns
  the product of a and b

Implements AbstractRing< T::Element >.

Definition at line 431 of file algebra.h.

## ◆ Square()

template<class T>

const Element& QuotientRing< T >::Square | ( | const Element & | a | ) | const
| inline virtual

Square an element in the group.

Parameters

  a | the element

Returns
  the element squared

Reimplemented from AbstractRing< T::Element >.

Definition at line 434 of file algebra.h.

## ◆ MultiplicativeInverse()

template<class T >

const QuotientRing< T >::Element & QuotientRing< T >::MultiplicativeInverse | ( | const Element & | a | ) | const
| virtual

Calculate the multiplicative inverse of an element in the group.

Parameters

  a | the element

Implements AbstractRing< T::Element >.

Definition at line 70 of file algebra.cpp.

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

- algebra.h
- algebra.cpp