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

Public Types | Public Member Functions | List of all members
AbstractGroup< T > Class Template Referenceabstract

Abstract group. More...

Inheritance diagram for AbstractGroup< T >:

## Public Types
typedef T | Element

## Public Member Functions
virtual bool | Equal (const Element &a, const Element &b) const =0
| Compare two elements for equality. More...
virtual const Element & | Identity () const =0
| Provides the Identity element. More...
virtual const Element & | Add (const Element &a, const Element &b) const =0
| Adds elements in the group. More...
virtual const Element & | Inverse (const Element &a) const =0
| Inverts the element in the group. More...
virtual bool | InversionIsFast () const
| Determine if inversion is fast. More...
virtual const Element & | Double (const Element &a) const
| Doubles an element in the group. More...
virtual const Element & | Subtract (const Element &a, const Element &b) const
| Subtracts elements in the group. More...
virtual Element & | Accumulate (Element &a, const Element &b) const
| TODO. More...
virtual Element & | Reduce (Element &a, const Element &b) const
| Reduces an element in the congruence class. 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 AbstractGroup< T >

Abstract group.

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 26 of file algebra.h.

## Member Function Documentation

## ◆ Equal()

template<class T >

virtual bool AbstractGroup< T >::Equal | ( | const Element & | a,
|  | const Element & | b
| ) |  | const
| pure 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`

Implemented in ECP, EC2N, ModularArithmetic, GFP2_ONB< F >, RingOfPolynomialsOver< T >, GF2NP, QuotientRing< T >, QuotientRing< EuclideanDomainOf< PolynomialMod2 > >, and EuclideanDomainOf< T >.

## ◆ Identity()

template<class T >

virtual const Element& AbstractGroup< T >::Identity | ( |  | ) | const
| pure virtual

Provides the Identity element.

Returns
  the Identity element

Implemented in GFP2_ONB< F >, RingOfPolynomialsOver< T >, ModularArithmetic, ECP, EC2N, QuotientRing< T >, QuotientRing< EuclideanDomainOf< PolynomialMod2 > >, and EuclideanDomainOf< T >.

## ◆ Add()

template<class T >

virtual const Element& AbstractGroup< T >::Add | ( | const Element & | a,
|  | const Element & | b
| ) |  | const
| pure virtual

Adds elements in the group.

Parameters

  a | first element
  b | second element

Returns
  the sum of `a` and `b`

Implemented in ECP, EC2N, ModularArithmetic, GFP2_ONB< F >, RingOfPolynomialsOver< T >, QuotientRing< T >, QuotientRing< EuclideanDomainOf< PolynomialMod2 > >, and EuclideanDomainOf< T >.

## ◆ Inverse()

template<class T >

virtual const Element& AbstractGroup< T >::Inverse | ( | const Element & | a | ) | const
| pure virtual

Inverts the element in the group.

Parameters

  a | first element

Returns
  the inverse of the element

Implemented in ECP, EC2N, ModularArithmetic, GFP2_ONB< F >, RingOfPolynomialsOver< T >, QuotientRing< T >, QuotientRing< EuclideanDomainOf< PolynomialMod2 > >, and EuclideanDomainOf< T >.

## ◆ InversionIsFast()

template<class T >

virtual bool AbstractGroup< T >::InversionIsFast | ( |  | ) | const
| inline virtual

Determine if inversion is fast.

Returns
  true if inversion is fast, false otherwise

Reimplemented in ECP, and EC2N.

Definition at line 57 of file algebra.h.

## ◆ Double()

template<class T >

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

Doubles an element in the group.

Parameters

  a | the element

Returns
  the element doubled

Reimplemented in RingOfPolynomialsOver< T >, QuotientRing< T >, QuotientRing< EuclideanDomainOf< PolynomialMod2 > >, and EuclideanDomainOf< T >.

Definition at line 15 of file algebra.cpp.

## ◆ Subtract()

template<class T >

const T & AbstractGroup< T >::Subtract | ( | const Element & | a,
|  | const Element & | b
| ) |  | const
| 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 in RingOfPolynomialsOver< T >, QuotientRing< T >, QuotientRing< EuclideanDomainOf< PolynomialMod2 > >, and EuclideanDomainOf< T >.

Definition at line 20 of file algebra.cpp.

## ◆ Accumulate()

template<class T >

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

TODO.

Parameters

  a | first element
  b | second element

Returns
  TODO

Reimplemented in RingOfPolynomialsOver< T >, QuotientRing< T >, QuotientRing< EuclideanDomainOf< PolynomialMod2 > >, and EuclideanDomainOf< T >.

Definition at line 27 of file algebra.cpp.

## ◆ Reduce()

template<class T >

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

Reduces an element in the congruence class.

Parameters

  a | element to reduce
  b | the congruence class

Returns
  the reduced element

Reimplemented in RingOfPolynomialsOver< T >, QuotientRing< T >, QuotientRing< EuclideanDomainOf< PolynomialMod2 > >, and EuclideanDomainOf< T >.

Definition at line 32 of file algebra.cpp.

## ◆ ScalarMultiply()

template<class T >

T AbstractGroup< T >::ScalarMultiply | ( | const Element & | a,
|  | const Integer & | e
| ) |  | const
| virtual

Performs a scalar multiplication.

Parameters

  a | multiplicand
  e | multiplier

Returns
  the product

Definition at line 90 of file algebra.cpp.

## ◆ CascadeScalarMultiply()

template<class T >

T AbstractGroup< T >::CascadeScalarMultiply | ( | const Element & | x,
|  | const Integer & | e1,
|  | const Element & | y,
|  | const Integer & | e2
| ) |  | const
| virtual

TODO.

Parameters

  x | first multiplicand
  e1 | the first multiplier
  y | second multiplicand
  e2 | the second multiplier

Returns
  TODO

Definition at line 97 of file algebra.cpp.

## ◆ SimultaneousMultiply()

template<class T >

void AbstractGroup< T >::SimultaneousMultiply | ( | Element * | results,
|  | const Element & | base,
|  | const Integer * | exponents,
|  | unsigned int | exponentsCount
| ) |  | const
| virtual

Multiplies a base to multiple exponents in a group.

Parameters

  results | an array of Elements
  base | the base to raise to the exponents
  exponents | an array of exponents
  exponentsCount | the number of exponents in the array

SimultaneousMultiply() multiplies the base to each exponent in the exponents array and stores the result at the respective position in the results array.

SimultaneousMultiply() must be implemented in a derived class.

Precondition
  `COUNTOF(results) == exponentsCount`
  `COUNTOF(exponents) == exponentsCount`

Definition at line 256 of file algebra.cpp.

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

- algebra.h
- algebra.cpp