Crypto++
8.8
Free C++ class library of cryptographic schemes
|
Go to the documentation of this file.
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)
void SetModulus(const Integer &newModulus)
Sets the modulus.
bool IsUnit(const Integer &a) const
Determines whether an element is a unit in the ring.
bool IsMontgomeryRepresentation() const
Retrieves the representation.
static Integer Power2(size_t e)
Exponentiates to a power of 2.
const Integer & MultiplicativeInverse(const Integer &a) const
Calculate the multiplicative inverse of an element in the ring.
virtual const Element & Multiply(const Element &a, const Element &b) const =0
Multiplies elements in the group.
virtual Element CascadeExponentiate(const Element &x, const Integer &e1, const Element &y, const Integer &e2) const
TODO.
unsigned int MaxElementBitLength() const
Provides the maximum bit size of an element in the ring.
Classes and functions for secure memory allocations.
Ring of congruence classes modulo n.
Integer ConvertIn(const Integer &a) const
Reduces an element in the congruence class.
virtual Integer ConvertOut(const Integer &a) const
Reduces an element in the congruence class.
bool IsUnit() const
Determine if 1 or -1.
const Integer & Multiply(const Integer &a, const Integer &b) const
Multiplies elements in the ring.
unsigned int MaxElementByteLength() const
Provides the maximum byte size of an element in the ring.
const unsigned int WORD_BITS
Size of a platform word in bits.
Integer CascadeExponentiate(const Integer &x, const Integer &e1, const Integer &y, const Integer &e2) const
TODO.
virtual const Element & Subtract(const Element &a, const Element &b) const
Subtracts elements in the group.
const Integer & Square(const Integer &a) const
Square an element in the ring.
Interface for random number generators.
void resize(size_type newSize)
Change size and preserve contents.
virtual ModularArithmetic * Clone() const
Clone a MontgomeryRepresentation.
const Integer & GetModulus() const
Retrieves the modulus.
Utility functions for the Crypto++ library.
bool operator==(const ModularArithmetic &rhs) const
Compares two ModularArithmetic for equality.
const Integer & Identity() const
Provides the Identity element.
word64 word
Full word used for multiprecision integer arithmetic.
ModularArithmetic(const Integer &modulus=Integer::One())
Construct a ModularArithmetic.
static const Integer & Zero()
Integer representing 0.
virtual const Element & MultiplicativeInverse(const Element &a) const =0
Calculate the multiplicative inverse of an element in the group.
Element RandomElement(RandomNumberGenerator &rng, const RandomizationParameter &ignore_for_now=0) const
Provides a random element in the ring.
Abstract Euclidean domain.
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 Integer ConvertIn(const Integer &a) const
Reduces an element in the congruence class.
Classes for performing mathematics over different fields.
const Integer & MultiplicativeIdentity() const
Retrieves the multiplicative identity.
Crypto++ library namespace.
#define CRYPTOPP_DLL_TEMPLATE_CLASS
Instantiate templates in a dynamic library.
virtual ModularArithmetic * Clone() const
Clone a ModularArithmetic.
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 const Element & Inverse(const Element &a) const =0
Inverts the element in the group.
virtual const Element & Add(const Element &a, const Element &b) const =0
Adds elements in the group.
const Integer & Double(const Integer &a) const
Doubles an element in the ring.
Performs modular arithmetic in Montgomery representation for increased speed.
ModularArithmetic & operator=(const ModularArithmetic &ma)
Assign a ModularArithmetic.
bool Equal(const Integer &a, const Integer &b) const
Compare two elements for equality.
static const Integer & One()
Integer representing 1.
const Integer & Divide(const Integer &a, const Integer &b) const
Divides elements in the ring.
virtual bool IsMontgomeryRepresentation() const
Retrieves the representation.
Abstract base classes that provide a uniform interface to this library.
static Integer Gcd(const Integer &a, const Integer &n)
Calculate greatest common divisor.
Multiple precision integer with arithmetic operations.
Multiple precision integer with arithmetic operations.
ModularArithmetic(const ModularArithmetic &ma)
Copy construct a ModularArithmetic.