6 #ifndef CRYPTOPP_MODARITH_H 7 #define CRYPTOPP_MODARITH_H 17 #if CRYPTOPP_MSC_VERSION 18 # pragma warning(push) 19 # pragma warning(disable: 4231 4275) 42 typedef int RandomizationParameter;
50 :
AbstractRing<
Integer>(), m_modulus(modulus), m_result(static_cast<word>(0), modulus.reg.size()) {}
55 :
AbstractRing<
Integer>(), m_modulus(ma.m_modulus), m_result(static_cast<word>(0), ma.m_modulus.reg.size()) {}
88 {m_modulus = newModulus; m_result.reg.
resize(m_modulus.reg.size());}
100 {
return a%m_modulus;}
175 {
return m_result1 = a*b%m_modulus;}
182 {
return m_result1 = a.Squared()%m_modulus;}
195 {
return m_result1 = a.InverseMod(m_modulus);}
228 {
return (m_modulus-1).BitCount();}
233 {
return (m_modulus-1).ByteCount();}
245 CRYPTOPP_UNUSED(ignore_for_now);
254 {
return m_modulus == rhs.m_modulus;}
256 static const RandomizationParameter DefaultRandomizationParameter ;
260 mutable Integer m_result, m_result1;
293 {
return (a<<(WORD_BITS*m_modulus.reg.size()))%m_modulus;}
298 {
return m_result1 =
Integer::Power2(WORD_BITS*m_modulus.reg.size())%m_modulus;}
319 #if CRYPTOPP_MSC_VERSION 320 # pragma warning(pop) const Integer & Double(const Integer &a) const
Doubles an element in the ring.
bool Equal(const Integer &a, const Integer &b) const
Compare two elements for equality.
const Integer & Square(const Integer &a) const
Square an element in the ring.
bool IsMontgomeryRepresentation() const
Retrieves the representation.
const Integer & Divide(const Integer &a, const Integer &b) const
Divides elements in the ring.
Utility functions for the Crypto++ library.
virtual const Element & Subtract(const Element &a, const Element &b) const
Subtracts elements in the group.
virtual const Element & Multiply(const Element &a, const Element &b) const =0
Multiplies elements in the group.
static Integer Gcd(const Integer &a, const Integer &n)
Calculate greatest common divisor.
void resize(size_type newSize)
Change size and preserve contents.
virtual Integer ConvertOut(const Integer &a) const
Reduces an element in the congruence class.
virtual Element CascadeExponentiate(const Element &x, const Integer &e1, const Element &y, const Integer &e2) const
TODO.
Abstract base classes that provide a uniform interface to this library.
const Integer & MultiplicativeInverse(const Integer &a) const
Calculate the multiplicative inverse of an element in the ring.
Abstract Euclidean domain.
unsigned int MaxElementByteLength() const
Provides the maximum byte size of an element in the ring.
Ring of congruence classes modulo n.
Interface for random number generators.
unsigned int MaxElementBitLength() const
Provides the maximum bit size of an element in the ring.
Classes for performing mathematics over different fields.
static const Integer & One()
Integer representing 1.
Integer ConvertIn(const Integer &a) const
Reduces an element in the congruence class.
const Integer & Identity() const
Provides the Identity element.
bool IsUnit() const
Determine if 1 or -1.
Classes and functions for secure memory allocations.
virtual ModularArithmetic * Clone() const
Clone a MontgomeryRepresentation.
bool operator==(const ModularArithmetic &rhs) const
Compares two ModularArithmetic for equality.
const Integer & Multiply(const Integer &a, const Integer &b) const
Multiplies elements in the ring.
virtual const Element & MultiplicativeInverse(const Element &a) const =0
Calculate the multiplicative inverse of an element in the group.
static Integer Power2(size_t e)
Exponentiates to a power of 2.
Multiple precision integer with arithmetic operations.
const Integer & GetModulus() const
Retrieves the modulus.
const Integer & MultiplicativeIdentity() const
Retrieves the multiplicative identity.
virtual const Element & Inverse(const Element &a) const =0
Inverts the element in the group.
ModularArithmetic(const Integer &modulus=Integer::One())
Construct a ModularArithmetic.
virtual Integer ConvertIn(const Integer &a) const
Reduces an element in the congruence class.
virtual ModularArithmetic * Clone() const
Clone a ModularArithmetic.
virtual Element & Accumulate(Element &a, const Element &b) const
TODO.
void SetModulus(const Integer &newModulus)
Sets the modulus.
Performs modular arithmetic in Montgomery representation for increased speed.
Element RandomElement(RandomNumberGenerator &rng, const RandomizationParameter &ignore_for_now=0) const
Provides a random element in the ring.
Integer CascadeExponentiate(const Integer &x, const Integer &e1, const Integer &y, const Integer &e2) const
TODO.
virtual const Element & Add(const Element &a, const Element &b) const =0
Adds elements in the group.
Multiple precision integer with arithmetic operations.
static const Integer & Zero()
Integer representing 0.
virtual Element & Reduce(Element &a, const Element &b) const
Reduces an element in the congruence class.
Crypto++ library namespace.
ModularArithmetic(const ModularArithmetic &ma)
Copy construct a ModularArithmetic.
const Integer & MultiplicativeIdentity() const
Retrieves the multiplicative identity.
void SimultaneousExponentiate(Element *results, const Element &base, const Integer *exponents, unsigned int exponentsCount) const
Exponentiates a base to multiple exponents in the ring.
virtual void SimultaneousExponentiate(Element *results, const Element &base, const Integer *exponents, unsigned int exponentsCount) const
Exponentiates a base to multiple exponents in the Ring.
virtual bool IsMontgomeryRepresentation() const
Retrieves the representation.
bool IsUnit(const Integer &a) const
Determines whether an element is a unit in the ring.