Fabcoin Core
0.16.2
P2P Digital Currency
|
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 | |
virtual | ~ModularArithmetic () |
ModularArithmetic (const Integer &modulus=Integer::One()) | |
Construct a ModularArithmetic. More... | |
ModularArithmetic (const ModularArithmetic &ma) | |
Copy construct 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 Element | Exponentiate (const Element &a, const Integer &e) const |
Raises a base to an exponent in the group. More... | |
virtual const AbstractGroup< Integer > & | MultiplicativeGroup () const |
Retrieves the multiplicative group. More... | |
Public Member Functions inherited from AbstractGroup< Integer > | |
virtual | ~AbstractGroup () |
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... | |
Static Public Attributes | |
static const RandomizationParameter | DefaultRandomizationParameter |
Protected Attributes | |
Integer | m_modulus |
Integer | m_result |
Integer | m_result1 |
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, 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 34 of file modarith.h.
typedef Integer ModularArithmetic::Element |
Definition at line 39 of file modarith.h.
typedef int ModularArithmetic::RandomizationParameter |
Definition at line 38 of file modarith.h.
|
inlinevirtual |
Definition at line 41 of file modarith.h.
|
inline |
Construct a ModularArithmetic.
modulus | congruence class modulus |
Definition at line 45 of file modarith.h.
|
inline |
Copy construct a ModularArithmetic.
ma | other ModularArithmetic |
Definition at line 50 of file modarith.h.
ModularArithmetic::ModularArithmetic | ( | BufferedTransformation & | bt | ) |
Construct a ModularArithmetic.
bt | BER encoded ModularArithmetic |
Definition at line 4422 of file integer.cpp.
TODO.
a | first element |
b | second element |
Reimplemented from AbstractGroup< Integer >.
Definition at line 4482 of file integer.cpp.
Adds elements in the ring.
a | first element |
b | second element |
a
and b
Implements AbstractGroup< Integer >.
Definition at line 4462 of file integer.cpp.
void ModularArithmetic::BERDecodeElement | ( | BufferedTransformation & | in, |
Element & | a | ||
) | const |
Decodes element in DER format.
in | BufferedTransformation object |
a | Element to decode |
Definition at line 4446 of file integer.cpp.
|
virtual |
TODO.
x | first element |
e1 | first exponent |
y | second element |
e2 | second exponent |
Reimplemented from AbstractRing< Integer >.
Reimplemented in MontgomeryRepresentation.
Definition at line 4548 of file integer.cpp.
|
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 61 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 95 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 103 of file modarith.h.
void ModularArithmetic::DEREncode | ( | BufferedTransformation & | bt | ) | const |
Encodes in DER format.
bt | BufferedTransformation object |
Definition at line 4433 of file integer.cpp.
void ModularArithmetic::DEREncodeElement | ( | BufferedTransformation & | out, |
const Element & | a | ||
) | const |
Encodes element in DER format.
out | BufferedTransformation object |
a | Element to encode |
Definition at line 4441 of file integer.cpp.
|
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 198 of file modarith.h.
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 156 of file modarith.h.
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 115 of file modarith.h.
|
inline |
Retrieves the modulus.
Definition at line 79 of file modarith.h.
Divides an element by 2.
a | element to convert |
Definition at line 4451 of file integer.cpp.
|
inlinevirtual |
Provides the Identity element.
Implements AbstractGroup< Integer >.
Definition at line 120 of file modarith.h.
Inverts the element in the ring.
a | first element |
Implements AbstractGroup< Integer >.
Definition at line 4536 of file integer.cpp.
|
inlinevirtual |
Retrieves the representation.
Reimplemented in MontgomeryRepresentation.
Definition at line 88 of file modarith.h.
|
inlinevirtual |
Determines whether an element is a unit in the ring.
a | the element |
Implements AbstractRing< Integer >.
Definition at line 183 of file modarith.h.
|
inline |
Provides the maximum bit size of an element in the ring.
Definition at line 223 of file modarith.h.
|
inline |
Provides the maximum byte size of an element in the ring.
Definition at line 228 of file modarith.h.
|
inlinevirtual |
Retrieves the multiplicative identity.
the base class implementations returns 1.
Implements AbstractRing< Integer >.
Reimplemented in MontgomeryRepresentation.
Definition at line 162 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 190 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 170 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 249 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 238 of file modarith.h.
TODO.
a | first element |
b | second element |
Reimplemented from AbstractGroup< Integer >.
Definition at line 4519 of file integer.cpp.
|
inline |
|
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.
Definition at line 4559 of file integer.cpp.
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 177 of file modarith.h.
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 >.
Definition at line 4502 of file integer.cpp.
|
static |
Definition at line 252 of file modarith.h.
|
protected |
Definition at line 255 of file modarith.h.
|
mutableprotected |
Definition at line 256 of file modarith.h.
|
mutableprotected |
Definition at line 256 of file modarith.h.