MontgomeryRepresentation Class Reference

Performs modular arithmetic in Montgomery representation for increased speed. More...

`#include <modarith.h>`

Inheritance diagram for MontgomeryRepresentation:

## Public Member Functions

| MontgomeryRepresentation (const Integer &modulus)
| Construct a MontgomeryRepresentation.
virtual ModularArithmetic * | Clone () const
| Clone a MontgomeryRepresentation.
bool | IsMontgomeryRepresentation () const
| Retrieves the representation.
Integer | ConvertIn (const Integer &a) const
| Reduces an element in the congruence class.
Integer | ConvertOut (const Integer &a) const
| Reduces an element in the congruence class.
const Integer & | MultiplicativeIdentity () const
| Retrieves the multiplicative identity.
const Integer & | Multiply (const Integer &a, const Integer &b) const
| Multiplies elements in the ring.
const Integer & | Square (const Integer &a) const
| Square an element in the ring.
const Integer & | MultiplicativeInverse (const Integer &a) const
| Calculate the multiplicative inverse of an element in the ring.
Integer | CascadeExponentiate (const Integer &x, const Integer &e1, const Integer &y, const Integer &e2) const
| TODO.
void | SimultaneousExponentiate (Element *results, const Element &base, const Integer *exponents, unsigned int exponentsCount) const
| Exponentiates a base to multiple exponents in the ring.
Public Member Functions inherited from ModularArithmetic
| ModularArithmetic (const Integer &modulus=Integer::One())
| Construct a ModularArithmetic.
| ModularArithmetic (const ModularArithmetic &ma)
| Copy construct a ModularArithmetic.
ModularArithmetic & | operator= (const ModularArithmetic &ma)
| Assign a ModularArithmetic.
| ModularArithmetic (BufferedTransformation &bt)
| Construct a ModularArithmetic.
void | DEREncode (BufferedTransformation &bt) const
| Encodes in DER format.
void | DEREncodeElement (BufferedTransformation &out, const Element &a) const
| Encodes element in DER format.
void | BERDecodeElement (BufferedTransformation &in, Element &a) const
| Decodes element in DER format.
const Integer & | GetModulus () const
| Retrieves the modulus.
void | SetModulus (const Integer &newModulus)
| Sets the modulus.
const Integer & | Half (const Integer &a) const
| Divides an element by 2.
bool | Equal (const Integer &a, const Integer &b) const
| Compare two elements for equality.
const Integer & | Identity () const
| Provides the Identity element.
const Integer & | Add (const Integer &a, const Integer &b) const
| Adds elements in the ring.
Integer & | Accumulate (Integer &a, const Integer &b) const
| TODO.
const Integer & | Inverse (const Integer &a) const
| Inverts the element in the ring.
const Integer & | Subtract (const Integer &a, const Integer &b) const
| Subtracts elements in the ring.
Integer & | Reduce (Integer &a, const Integer &b) const
| TODO.
const Integer & | Double (const Integer &a) const
| Doubles an element in the ring.
bool | IsUnit (const Integer &a) const
| Determines whether an element is a unit in the ring.
const Integer & | Divide (const Integer &a, const Integer &b) const
| Divides elements in the ring.
unsigned int | MaxElementBitLength () const
| Provides the maximum bit size of an element in the ring.
unsigned int | MaxElementByteLength () const
| Provides the maximum byte size of an element in the ring.
Element | RandomElement (RandomNumberGenerator &rng, const RandomizationParameter &ignore_for_now=0) const
| Provides a random element in the ring.
bool | operator== (const ModularArithmetic &rhs) const
| Compares two ModularArithmetic for equality.
Public Member Functions inherited from AbstractRing< Integer >
| AbstractRing ()
| Construct an AbstractRing.
| AbstractRing (const AbstractRing &source)
| Copy construct an AbstractRing.
AbstractRing & | operator= (const AbstractRing &source)
| Assign an AbstractRing.
virtual Element | Exponentiate (const Element &a, const Integer &e) const
| Raises a base to an exponent in the group.
virtual const AbstractGroup< Integer > & | MultiplicativeGroup () const
| Retrieves the multiplicative group.
Public Member Functions inherited from AbstractGroup< T >
virtual bool | Equal (const Element &a, const Element &b) const =0
| Compare two elements for equality.
virtual const Element & | Add (const Element &a, const Element &b) const =0
| Adds elements in the group.
virtual const Element & | Inverse (const Element &a) const =0
| Inverts the element in the group.
virtual bool | InversionIsFast () const
| Determine if inversion is fast.
virtual const Element & | Double (const Element &a) const
| Doubles an element in the group.
virtual const Element & | Subtract (const Element &a, const Element &b) const
| Subtracts elements in the group.
virtual Element & | Accumulate (Element &a, const Element &b) const
| TODO.
virtual Element & | Reduce (Element &a, const Element &b) const
| Reduces an element in the congruence class.
virtual Element | ScalarMultiply (const Element &a, const Integer &e) const
| Performs a scalar multiplication.
virtual Element | CascadeScalarMultiply (const Element &x, const Integer &e1, const Element &y, const Integer &e2) const
| TODO.
virtual void | SimultaneousMultiply (Element *results, const Element &base, const Integer *exponents, unsigned int exponentsCount) const
| Multiplies a base to multiple exponents in a group.

## Additional Inherited Members

Public Types inherited from ModularArithmetic
typedef int | RandomizationParameter
typedef Integer | Element
Public Types inherited from AbstractRing< Integer >
typedef Integer | Element
Public Types inherited from AbstractGroup< T >
typedef T | Element
Static Public Attributes inherited from ModularArithmetic
static const RandomizationParameter | DefaultRandomizationParameter

## Detailed Description

Performs modular arithmetic in Montgomery representation for increased speed.

The Montgomery representation represents each congruence class `[a]` as `a*r%n`, where `r` is a convenient power of 2.

`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 295 of file modarith.h.

## Constructor & Destructor Documentation

## ~MontgomeryRepresentation()

virtual MontgomeryRepresentation::~MontgomeryRepresentation | ( |  | ) |

inline virtual

Definition at line 298 of file modarith.h.

## MontgomeryRepresentation()

MontgomeryRepresentation::MontgomeryRepresentation | ( | const Integer & | modulus | ) |

Construct a MontgomeryRepresentation.

Parameters

  modulus | congruence class modulus

Note
  The modulus must be odd.

## Member Function Documentation

## Clone()

virtual ModularArithmetic * MontgomeryRepresentation::Clone | ( |  | ) | const

inline virtual

Clone a MontgomeryRepresentation.

Returns
  pointer to a new MontgomeryRepresentation

Clone effectively copy constructs a new MontgomeryRepresentation. The caller is responsible for deleting the pointer returned from this method.

Reimplemented from ModularArithmetic.

Definition at line 309 of file modarith.h.

## IsMontgomeryRepresentation()

bool MontgomeryRepresentation::IsMontgomeryRepresentation | ( |  | ) | const

inline virtual

Retrieves the representation.

Returns
  true if the if the modulus is in Montgomery form for multiplication, false otherwise

Reimplemented from ModularArithmetic.

Definition at line 311 of file modarith.h.

## ConvertIn()

Integer MontgomeryRepresentation::ConvertIn | ( | const Integer & | a | ) | const

inline virtual

Reduces an element in the congruence class.

Parameters

  a | element to convert

Returns
  the reduced element

ConvertIn is useful for derived classes, like MontgomeryRepresentation, which must convert between representations.

Reimplemented from ModularArithmetic.

Definition at line 313 of file modarith.h.

## ConvertOut()

Integer MontgomeryRepresentation::ConvertOut | ( | const Integer & | a | ) | const

virtual

Reduces an element in the congruence class.

Parameters

  a | element to convert

Returns
  the reduced element

ConvertOut is useful for derived classes, like MontgomeryRepresentation, which must convert between representations.

Reimplemented from ModularArithmetic.

## MultiplicativeIdentity()

const Integer & MontgomeryRepresentation::MultiplicativeIdentity | ( |  | ) | const

inline virtual

Retrieves the multiplicative identity.

Returns
  the multiplicative identity

the base class implementations returns 1.

Reimplemented from ModularArithmetic.

Definition at line 318 of file modarith.h.

## Multiply()

const Integer & MontgomeryRepresentation::Multiply | ( | const Integer & | a,
|  | const Integer & | b
| ) |  | const

virtual

Multiplies elements in the ring.

Parameters

  a | the multiplicand
  b | the multiplier

Returns
  the product of a and b

Multiply returns `a*b%n`.

Reimplemented from ModularArithmetic.

## Square()

const Integer & MontgomeryRepresentation::Square | ( | const Integer & | a | ) | const

virtual

Square an element in the ring.

Parameters

  a | the element

Returns
  the element squared

Square returns `a*a%n`. The element `a` must provide a Square member function.

Reimplemented from ModularArithmetic.

## MultiplicativeInverse()

const Integer & MontgomeryRepresentation::MultiplicativeInverse | ( | const Integer & | a | ) | const

virtual

Calculate the multiplicative inverse of an element in the ring.

Parameters

  a | the element

MultiplicativeInverse returns `a-1%n`. The element `a` must provide a InverseMod member function.

Reimplemented from ModularArithmetic.

## CascadeExponentiate()

Integer MontgomeryRepresentation::CascadeExponentiate | ( | const Integer & | x,
|  | const Integer & | e1,
|  | const Integer & | y,
|  | const Integer & | e2
| ) |  | const

inline virtual

TODO.

Parameters

  x | first element
  e1 | first exponent
  y | second element
  e2 | second exponent

Returns
  TODO

Reimplemented from ModularArithmetic.

Definition at line 327 of file modarith.h.

## SimultaneousExponentiate()

void MontgomeryRepresentation::SimultaneousExponentiate | ( | Element * | results,
|  | const Element & | base,
|  | const Integer * | exponents,
|  | unsigned int | exponentsCount
| ) |  | const

inline virtual

Exponentiates a base to multiple exponents in the ring.

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

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

SimultaneousExponentiate() must be implemented in a derived class.

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

Reimplemented from ModularArithmetic.

Definition at line 330 of file modarith.h.

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

- modarith.h