16 #ifndef CRYPTOPP_INTEGER_H 17 #define CRYPTOPP_INTEGER_H 169 static const Integer & CRYPTOPP_API Zero();
173 static const Integer & CRYPTOPP_API One();
177 static const Integer & CRYPTOPP_API Two();
200 static Integer CRYPTOPP_API Power2(
size_t e);
208 size_t MinEncodedSize(
Signedness sign=UNSIGNED)
const;
217 void Encode(byte *output,
size_t outputLen,
Signedness sign=UNSIGNED)
const;
245 size_t OpenPGPEncode(byte *output,
size_t bufferSize)
const;
258 void Decode(
const byte *input,
size_t inputLen,
Signedness sign=UNSIGNED);
270 void BERDecode(
const byte *input,
size_t inputLen);
291 void OpenPGPDecode(
const byte *input,
size_t inputLen);
302 bool IsConvertableToLong()
const;
306 signed long ConvertToLong()
const;
311 unsigned int BitCount()
const;
315 unsigned int ByteCount()
const;
319 unsigned int WordCount()
const;
323 bool GetBit(
size_t i)
const;
329 lword GetBits(
size_t i,
size_t n)
const;
351 bool IsEven()
const {
return GetBit(0) == 0;}
354 bool IsOdd()
const {
return GetBit(0) == 1;}
398 Integer& operator<<=(
size_t n);
402 Integer& operator>>=(
size_t n);
508 if (!GenerateRandomNoThrow(rng, params))
514 void SetBit(
size_t n,
bool value=1);
518 void SetByte(
size_t n, byte value);
536 bool operator!()
const;
558 int Compare(
const Integer& a)
const;
573 Integer DividedBy(word b)
const;
576 word Modulo(word b)
const;
636 bool IsSquare()
const;
643 Integer MultiplicativeInverse()
const;
660 static void CRYPTOPP_API Divide(word &r,
Integer &q,
const Integer &a, word d);
692 word InverseMod(word n)
const;
701 friend CRYPTOPP_DLL std::istream& CRYPTOPP_API operator>>(std::istream& in,
Integer &a);
713 friend CRYPTOPP_DLL std::ostream& CRYPTOPP_API
operator<<(std::ostream& out,
const Integer &a);
736 Integer(word value,
size_t length);
737 int PositiveCompare(
const Integer &t)
const;
742 #ifndef CRYPTOPP_DOXYGEN_PROCESSING 745 friend class HalfMontgomeryRepresentation;
755 inline bool operator==(
const CryptoPP::Integer& a,
const CryptoPP::Integer& b) {
return a.Compare(b)==0;}
757 inline bool operator!=(
const CryptoPP::Integer& a,
const CryptoPP::Integer& b) {
return a.Compare(b)!=0;}
759 inline bool operator> (
const CryptoPP::Integer& a,
const CryptoPP::Integer& b) {
return a.Compare(b)> 0;}
761 inline bool operator>=(
const CryptoPP::Integer& a,
const CryptoPP::Integer& b) {
return a.Compare(b)>=0;}
763 inline bool operator< (
const CryptoPP::Integer& a,
const CryptoPP::Integer& b) {
return a.Compare(b)< 0;}
765 inline bool operator<=(
const CryptoPP::Integer& a,
const CryptoPP::Integer& b) {
return a.Compare(b)<=0;}
767 inline CryptoPP::Integer
operator+(
const CryptoPP::Integer &a,
const CryptoPP::Integer &b) {
return a.
Plus(b);}
769 inline CryptoPP::Integer
operator-(
const CryptoPP::Integer &a,
const CryptoPP::Integer &b) {
return a.
Minus(b);}
772 inline CryptoPP::Integer
operator*(
const CryptoPP::Integer &a,
const CryptoPP::Integer &b) {
return a.
Times(b);}
774 inline CryptoPP::Integer
operator/(
const CryptoPP::Integer &a,
const CryptoPP::Integer &b) {
return a.
DividedBy(b);}
777 inline CryptoPP::Integer
operator%(
const CryptoPP::Integer &a,
const CryptoPP::Integer &b) {
return a.
Modulo(b);}
779 inline CryptoPP::Integer
operator/(
const CryptoPP::Integer &a, CryptoPP::word b) {
return a.
DividedBy(b);}
782 inline CryptoPP::word
operator%(
const CryptoPP::Integer &a, CryptoPP::word b) {
return a.
Modulo(b);}
796 inline CryptoPP::Integer
operator&(
const CryptoPP::Integer &a,
const CryptoPP::Integer &b) {
return a.
And(b);}
810 inline CryptoPP::Integer
operator|(
const CryptoPP::Integer &a,
const CryptoPP::Integer &b) {
return a.
Or(b);}
824 inline CryptoPP::Integer
operator^(
const CryptoPP::Integer &a,
const CryptoPP::Integer &b) {
return a.
Xor(b);}
830 inline void swap(CryptoPP::Integer &a, CryptoPP::Integer &b)
Base class for all exceptions thrown by the library.
void SetNegative()
Sets the Integer to negative.
bool NotZero() const
Determines if the Integer is non-0.
inline ::Integer operator*(const ::Integer &a, const ::Integer &b)
Multiplication.
Integer & operator/=(word t)
Division Assignment.
Integer Or(const Integer &t) const
Bitwise OR.
Integer And(const Integer &t) const
Bitwise AND.
Integer Plus(const Integer &b) const
Addition.
Integer operator--(int)
Post-decrement.
ByteOrder
Provides the byte ordering.
void SetPositive()
Sets the Integer to positive.
inline ::Integer operator%(const ::Integer &a, const ::Integer &b)
Remainder.
Secure memory block with allocator and cleanup.
Abstract base classes that provide a uniform interface to this library.
Signedness
Used when importing and exporting integers.
bool IsNegative() const
Determines if the Integer is negative.
Ring of congruence classes modulo n.
Interface for random number generators.
void GenerateRandom(RandomNumberGenerator &rng, const NameValuePairs ¶ms=g_nullNameValuePairs)
Generate a random number.
bool IsPositive() const
Determines if the Integer is positive.
bool NotNegative() const
Determines if the Integer is non-negative.
bool operator==(const ::Integer &a, const ::Integer &b)
Comparison.
inline ::Integer operator+(const ::Integer &a, const ::Integer &b)
Addition.
Sign
Used internally to represent the integer.
Classes and functions for secure memory allocations.
Integer Modulo(const Integer &b) const
Remainder.
Integer & operator/=(const Integer &t)
Division Assignment.
inline ::Integer operator-(const ::Integer &a, const ::Integer &b)
Subtraction.
Integer DividedBy(const Integer &b) const
Division.
Integer Times(const Integer &b) const
Multiplication.
a number with no special properties
bool operator!=(const ::Integer &a, const ::Integer &b)
Comparison.
bool operator<=(const ::Integer &a, const ::Integer &b)
Comparison.
bool IsZero() const
Determines if the Integer is 0.
Exception thrown when an error is encountered decoding an OpenPGP integer.
Interface for encoding and decoding ASN1 objects.
Performs static initialization of the Integer class.
Multiple precision integer with arithmetic operations.
inline ::Integer operator &(const ::Integer &a, const ::Integer &b)
Bitwise AND.
const NameValuePairs & g_nullNameValuePairs
An empty set of name-value pairs.
RandomNumberType
Properties of a random integer.
bool IsEven() const
Determines if the Integer is even parity.
Integer & operator*=(const Integer &t)
Multiplication Assignment.
bool operator>(const ::Integer &a, const ::Integer &b)
Comparison.
inline ::Integer operator^(const ::Integer &a, const ::Integer &b)
Bitwise XOR.
Integer operator++(int)
Post-increment.
Exception thrown when division by 0 is encountered.
Integer Squared() const
Multiply this integer by itself.
Exception thrown when a random number cannot be found that satisfies the condition.
Performs modular arithmetic in Montgomery representation for increased speed.
Integer operator<<(size_t n) const
Left-shift.
Integer Minus(const Integer &b) const
Subtraction.
Integer Doubled() const
Add this integer to itself.
Integer operator>>(size_t n) const
Right-shift.
bool NotPositive() const
Determines if the Integer is non-positive.
Integer operator+() const
Addition.
Integer Xor(const Integer &t) const
Bitwise XOR.
Crypto++ library namespace.
Integer & operator%=(word t)
Remainder Assignment.
void swap(::SecBlock< T, A > &a, ::SecBlock< T, A > &b)
Swap two SecBlocks.
unsigned int GetByte(ByteOrder order, T value, unsigned int index)
Gets a byte from a value.
std::ostream & operator<<(std::ostream &out, const OID &oid)
Print a OID value.
bool operator<(const ::Integer &a, const ::Integer &b)
Comparison.
Integer & operator%=(const Integer &t)
Remainder Assignment.
inline ::Integer operator|(const ::Integer &a, const ::Integer &b)
Bitwise OR.
bool IsOdd() const
Determines if the Integer is odd parity.
bool operator>=(const ::Integer &a, const ::Integer &b)
Comparison.
inline ::Integer operator/(const ::Integer &a, const ::Integer &b)
Division.
Interface for retrieving values given their names.