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) 47 typedef int RandomizationParameter;
55 : m_modulus(modulus), m_result(static_cast<
word>(0), modulus.reg.size()) {}
67 m_modulus = ma.m_modulus;
68 m_result =
Integer(static_cast<word>(0), m_modulus.reg.size());
104 {m_modulus = newModulus; m_result.reg.
resize(m_modulus.reg.size());}
116 {
return a%m_modulus;}
191 {
return m_result1 = a*b%m_modulus;}
198 {
return m_result1 = a.Squared()%m_modulus;}
211 {
return m_result1 = a.InverseMod(m_modulus);}
244 {
return (m_modulus-1).BitCount();}
249 {
return (m_modulus-1).ByteCount();}
261 CRYPTOPP_UNUSED(ignore_for_now);
270 {
return m_modulus == rhs.m_modulus;}
272 static const RandomizationParameter DefaultRandomizationParameter;
281 mutable Integer m_result, m_result1;
314 {
return (a<<(
WORD_BITS*m_modulus.reg.size()))%m_modulus;}
340 #if CRYPTOPP_MSC_VERSION 341 # 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.
static const Integer & One()
Integer representing 1.
virtual const Element & Subtract(const Element &a, const Element &b) const
Subtracts elements in the group.
const unsigned int WORD_BITS
Size of a platform word in bits.
virtual const Element & Multiply(const Element &a, const Element &b) const =0
Multiplies elements in the group.
void resize(size_type newSize)
Change size and preserve contents.
virtual Integer ConvertOut(const Integer &a) const
Reduces an element in the congruence class.
static Integer Gcd(const Integer &a, const Integer &n)
Calculate greatest common divisor.
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.
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.
word64 word
Full word used for multiprecision integer arithmetic.
virtual const Element & MultiplicativeInverse(const Element &a) const =0
Calculate the multiplicative inverse of an element in the group.
Multiple precision integer with arithmetic operations.
#define CRYPTOPP_DLL_TEMPLATE_CLASS
Instantiate templates in a dynamic library.
const Integer & GetModulus() const
Retrieves the modulus.
ModularArithmetic & operator=(const ModularArithmetic &ma)
Assign a ModularArithmetic.
const Integer & MultiplicativeIdentity() const
Retrieves the multiplicative identity.
virtual const Element & Inverse(const Element &a) const =0
Inverts the element in the group.
static Integer Power2(size_t e)
Exponentiates to a power of 2.
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.