Crypto++ 8.7
Free C++ class library of cryptographic schemes
|
Ring of congruence classes modulo n. More...
#include <modarith.h>
Public Types | |
typedef int | RandomizationParameter |
typedef Integer | Element |
Public Types inherited from AbstractRing< Integer > | |
typedef Integer | Element |
Public Types inherited from AbstractGroup< Integer > | |
typedef Integer | Element |
Public Member Functions | |
ModularArithmetic (const Integer &modulus=Integer::One()) | |
Construct a ModularArithmetic. More... | |
ModularArithmetic (const ModularArithmetic &ma) | |
Copy construct a ModularArithmetic. More... | |
ModularArithmetic & | operator= (const ModularArithmetic &ma) |
Assign a ModularArithmetic. More... | |
ModularArithmetic (BufferedTransformation &bt) | |
Construct a ModularArithmetic. More... | |
virtual ModularArithmetic * | Clone () const |
Clone a ModularArithmetic. More... | |
void | DEREncode (BufferedTransformation &bt) const |
Encodes in DER format. More... | |
void | DEREncodeElement (BufferedTransformation &out, const Element &a) const |
Encodes element in DER format. More... | |
void | BERDecodeElement (BufferedTransformation &in, Element &a) const |
Decodes element in DER format. More... | |
const Integer & | GetModulus () const |
Retrieves the modulus. More... | |
void | SetModulus (const Integer &newModulus) |
Sets the modulus. More... | |
virtual bool | IsMontgomeryRepresentation () const |
Retrieves the representation. More... | |
virtual Integer | ConvertIn (const Integer &a) const |
Reduces an element in the congruence class. More... | |
virtual Integer | ConvertOut (const Integer &a) const |
Reduces an element in the congruence class. More... | |
const Integer & | Half (const Integer &a) const |
Divides an element by 2. More... | |
bool | Equal (const Integer &a, const Integer &b) const |
Compare two elements for equality. More... | |
const Integer & | Identity () const |
Provides the Identity element. More... | |
const Integer & | Add (const Integer &a, const Integer &b) const |
Adds elements in the ring. More... | |
Integer & | Accumulate (Integer &a, const Integer &b) const |
TODO. More... | |
const Integer & | Inverse (const Integer &a) const |
Inverts the element in the ring. More... | |
const Integer & | Subtract (const Integer &a, const Integer &b) const |
Subtracts elements in the ring. More... | |
Integer & | Reduce (Integer &a, const Integer &b) const |
TODO. More... | |
const Integer & | Double (const Integer &a) const |
Doubles an element in the ring. More... | |
const Integer & | MultiplicativeIdentity () const |
Retrieves the multiplicative identity. More... | |
const Integer & | Multiply (const Integer &a, const Integer &b) const |
Multiplies elements in the ring. More... | |
const Integer & | Square (const Integer &a) const |
Square an element in the ring. More... | |
bool | IsUnit (const Integer &a) const |
Determines whether an element is a unit in the ring. More... | |
const Integer & | MultiplicativeInverse (const Integer &a) const |
Calculate the multiplicative inverse of an element in the ring. More... | |
const Integer & | Divide (const Integer &a, const Integer &b) const |
Divides elements in the ring. More... | |
Integer | CascadeExponentiate (const Integer &x, const Integer &e1, const Integer &y, const Integer &e2) const |
TODO. More... | |
void | SimultaneousExponentiate (Element *results, const Element &base, const Integer *exponents, unsigned int exponentsCount) const |
Exponentiates a base to multiple exponents in the ring. More... | |
unsigned int | MaxElementBitLength () const |
Provides the maximum bit size of an element in the ring. More... | |
unsigned int | MaxElementByteLength () const |
Provides the maximum byte size of an element in the ring. More... | |
Element | RandomElement (RandomNumberGenerator &rng, const RandomizationParameter &ignore_for_now=0) const |
Provides a random element in the ring. More... | |
bool | operator== (const ModularArithmetic &rhs) const |
Compares two ModularArithmetic for equality. More... | |
Public Member Functions inherited from AbstractRing< Integer > | |
AbstractRing () | |
Construct an AbstractRing. More... | |
AbstractRing (const AbstractRing &source) | |
Copy construct an AbstractRing. More... | |
AbstractRing & | operator= (const AbstractRing &source) |
Assign an AbstractRing. More... | |
virtual bool | IsUnit (const Element &a) const=0 |
Determines whether an element is a unit in the group. More... | |
virtual const Element & | MultiplicativeIdentity () const=0 |
Retrieves the multiplicative identity. More... | |
virtual const Element & | Multiply (const Element &a, const Element &b) const=0 |
Multiplies elements in the group. More... | |
virtual const Element & | MultiplicativeInverse (const Element &a) const=0 |
Calculate the multiplicative inverse of an element in the group. More... | |
virtual const Element & | Square (const Element &a) const |
Square an element in the group. 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< Integer > & | MultiplicativeGroup () const |
Retrieves the multiplicative group. More... | |
Public Member Functions inherited from AbstractGroup< Integer > | |
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... | |
Static Public Attributes | |
static const RandomizationParameter | DefaultRandomizationParameter |
Ring of congruence classes modulo n.
This implementation represents each congruence class as the smallest non-negative integer in that class.
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, you should use the class like this:
abcd = group.Add(a, group.Add(b, group.Add(c,d));
The following code will produce incorrect results:
abcd = group.Add(group.Add(a,b), group.Add(c,d));
If a ModularArithmetic() is copied or assigned the modulus is copied, but not the internal data members. The internal data members are undefined after copy or assignment.
Definition at line 43 of file modarith.h.
typedef int ModularArithmetic::RandomizationParameter |
Definition at line 47 of file modarith.h.
typedef Integer ModularArithmetic::Element |
Definition at line 48 of file modarith.h.
|
inlinevirtual |
Definition at line 50 of file modarith.h.
|
inline |
Construct a ModularArithmetic.
modulus | congruence class modulus |
Definition at line 54 of file modarith.h.
|
inline |
Copy construct a ModularArithmetic.
ma | other ModularArithmetic |
Definition at line 59 of file modarith.h.
ModularArithmetic::ModularArithmetic | ( | BufferedTransformation & | bt | ) |
Construct a ModularArithmetic.
bt | BER encoded ModularArithmetic |
|
inline |
Assign a ModularArithmetic.
ma | other ModularArithmetic |
Definition at line 64 of file modarith.h.
|
inlinevirtual |
Clone a ModularArithmetic.
Clone effectively copy constructs a new ModularArithmetic. The caller is responsible for deleting the pointer returned from this method.
Reimplemented in MontgomeryRepresentation.
Definition at line 81 of file modarith.h.
void ModularArithmetic::DEREncode | ( | BufferedTransformation & | bt | ) | const |
Encodes in DER format.
bt | BufferedTransformation object |
void ModularArithmetic::DEREncodeElement | ( | BufferedTransformation & | out, |
const Element & | a | ||
) | const |
Encodes element in DER format.
out | BufferedTransformation object |
a | Element to encode |
void ModularArithmetic::BERDecodeElement | ( | BufferedTransformation & | in, |
Element & | a | ||
) | const |
Decodes element in DER format.
in | BufferedTransformation object |
a | Element to decode |
|
inline |
|
inline |
|
inlinevirtual |
Retrieves the representation.
Reimplemented in MontgomeryRepresentation.
Definition at line 108 of file modarith.h.
Reduces an element in the congruence class.
a | element to convert |
ConvertIn is useful for derived classes, like MontgomeryRepresentation, which must convert between representations.
Reimplemented in MontgomeryRepresentation.
Definition at line 115 of file modarith.h.
Reduces an element in the congruence class.
a | element to convert |
ConvertOut is useful for derived classes, like MontgomeryRepresentation, which must convert between representations.
Reimplemented in MontgomeryRepresentation.
Definition at line 123 of file modarith.h.
Divides an element by 2.
a | element to convert |
Compare two elements for equality.
a | first element |
b | second element |
Equal() tests the elements for equality using a==b
Implements AbstractGroup< Integer >.
Definition at line 135 of file modarith.h.
|
inlinevirtual |
Provides the Identity element.
Implements AbstractGroup< Integer >.
Definition at line 140 of file modarith.h.
Adds elements in the ring.
a | first element |
b | second element |
a
and b
Implements AbstractGroup< Integer >.
TODO.
a | first element |
b | second element |
Reimplemented from AbstractGroup< Integer >.
Inverts the element in the ring.
a | first element |
Implements AbstractGroup< Integer >.
Subtracts elements in the ring.
a | first element |
b | second element |
a
and b
. The element a
must provide a Subtract member function. Reimplemented from AbstractGroup< Integer >.
TODO.
a | first element |
b | second element |
Reimplemented from AbstractGroup< Integer >.
Doubles an element in the ring.
a | the element |
Double returns Add(a, a)
. The element a
must provide an Add member function.
Reimplemented from AbstractGroup< Integer >.
Definition at line 176 of file modarith.h.
|
inlinevirtual |
Retrieves the multiplicative identity.
the base class implementations returns 1.
Implements AbstractRing< Integer >.
Reimplemented in MontgomeryRepresentation.
Definition at line 182 of file modarith.h.
|
inlinevirtual |
Multiplies elements in the ring.
a | the multiplicand |
b | the multiplier |
Multiply returns a*b%n
.
Implements AbstractRing< Integer >.
Reimplemented in MontgomeryRepresentation.
Definition at line 190 of file modarith.h.
Square an element in the ring.
a | the element |
Square returns a*a%n
. The element a
must provide a Square member function.
Reimplemented from AbstractRing< Integer >.
Reimplemented in MontgomeryRepresentation.
Definition at line 197 of file modarith.h.
|
inlinevirtual |
Determines whether an element is a unit in the ring.
a | the element |
Implements AbstractRing< Integer >.
Definition at line 203 of file modarith.h.
Calculate the multiplicative inverse of an element in the ring.
a | the element |
MultiplicativeInverse returns a-1%n
. The element a
must provide a InverseMod member function.
Implements AbstractRing< Integer >.
Reimplemented in MontgomeryRepresentation.
Definition at line 210 of file modarith.h.
|
inlinevirtual |
Divides elements in the ring.
a | the dividend |
b | the divisor |
Divide returns a*b-1%n
.
Reimplemented from AbstractRing< Integer >.
Definition at line 218 of file modarith.h.
|
virtual |
TODO.
x | first element |
e1 | first exponent |
y | second element |
e2 | second exponent |
Reimplemented from AbstractRing< Integer >.
Reimplemented in MontgomeryRepresentation.
|
virtual |
Exponentiates a base to multiple exponents in the ring.
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.
COUNTOF(results) == exponentsCount
COUNTOF(exponents) == exponentsCount
Reimplemented from AbstractRing< Integer >.
Reimplemented in MontgomeryRepresentation.
|
inline |
Provides the maximum bit size of an element in the ring.
Definition at line 243 of file modarith.h.
|
inline |
Provides the maximum byte size of an element in the ring.
Definition at line 248 of file modarith.h.
|
inline |
Provides a random element in the ring.
rng | RandomNumberGenerator used to generate material |
ignore_for_now | unused |
RandomElement constructs a new element in the range [0,n-1]
, inclusive. The element's class must provide a constructor with the signature Element(RandomNumberGenerator rng,
Element min, Element max)
.
Definition at line 258 of file modarith.h.
|
inline |
Compares two ModularArithmetic for equality.
rhs | other ModularArithmetic |
The operator tests for equality using this.m_modulus == rhs.m_modulus
.
Definition at line 269 of file modarith.h.
|
static |
Definition at line 272 of file modarith.h.