16 #ifndef CRYPTOPP_INTEGER_H 17 #define CRYPTOPP_INTEGER_H 210 size_t MinEncodedSize(Signedness sign=UNSIGNED)
const;
219 void Encode(
byte *output,
size_t outputLen, Signedness sign=UNSIGNED)
const;
247 size_t OpenPGPEncode(
byte *output,
size_t bufferSize)
const;
260 void Decode(
const byte *input,
size_t inputLen, Signedness sign=UNSIGNED);
293 void OpenPGPDecode(
const byte *input,
size_t inputLen);
304 bool IsConvertableToLong()
const;
308 signed long ConvertToLong()
const;
313 unsigned int BitCount()
const;
317 unsigned int ByteCount()
const;
321 unsigned int WordCount()
const;
325 bool GetBit(
size_t i)
const;
331 lword GetBits(
size_t i,
size_t n)
const;
353 bool IsEven()
const {
return GetBit(0) == 0;}
356 bool IsOdd()
const {
return GetBit(0) == 1;}
400 Integer& operator<<=(
size_t n);
404 Integer& operator>>=(
size_t n);
511 if (!GenerateRandomNoThrow(rng, params))
517 void SetBit(
size_t n,
bool value=1);
521 void SetByte(
size_t n,
byte value);
539 bool operator!()
const;
561 int Compare(
const Integer& a)
const;
639 bool IsSquare()
const;
646 Integer MultiplicativeInverse()
const;
740 int PositiveCompare(
const Integer &t)
const;
745 #ifndef CRYPTOPP_DOXYGEN_PROCESSING 748 friend class HalfMontgomeryRepresentation;
758 inline bool operator==(
const CryptoPP::Integer& a,
const CryptoPP::Integer& b) {
return a.Compare(b)==0;}
760 inline bool operator!=(
const CryptoPP::Integer& a,
const CryptoPP::Integer& b) {
return a.Compare(b)!=0;}
762 inline bool operator> (
const CryptoPP::Integer& a,
const CryptoPP::Integer& b) {
return a.Compare(b)> 0;}
764 inline bool operator>=(
const CryptoPP::Integer& a,
const CryptoPP::Integer& b) {
return a.Compare(b)>=0;}
766 inline bool operator< (
const CryptoPP::Integer& a,
const CryptoPP::Integer& b) {
return a.Compare(b)< 0;}
768 inline bool operator<=(
const CryptoPP::Integer& a,
const CryptoPP::Integer& b) {
return a.Compare(b)<=0;}
770 inline CryptoPP::Integer
operator+(
const CryptoPP::Integer &a,
const CryptoPP::Integer &b) {
return a.Plus(b);}
772 inline CryptoPP::Integer
operator-(
const CryptoPP::Integer &a,
const CryptoPP::Integer &b) {
return a.Minus(b);}
775 inline CryptoPP::Integer
operator*(
const CryptoPP::Integer &a,
const CryptoPP::Integer &b) {
return a.Times(b);}
777 inline CryptoPP::Integer
operator/(
const CryptoPP::Integer &a,
const CryptoPP::Integer &b) {
return a.DividedBy(b);}
780 inline CryptoPP::Integer
operator%(
const CryptoPP::Integer &a,
const CryptoPP::Integer &b) {
return a.Modulo(b);}
799 inline CryptoPP::Integer
operator&(
const CryptoPP::Integer &a,
const CryptoPP::Integer &b) {
return a.And(b);}
813 inline CryptoPP::Integer
operator|(
const CryptoPP::Integer &a,
const CryptoPP::Integer &b) {
return a.Or(b);}
827 inline CryptoPP::Integer
operator^(
const CryptoPP::Integer &a,
const CryptoPP::Integer &b) {
return a.Xor(b);}
833 inline void swap(CryptoPP::Integer &a, CryptoPP::Integer &b)
Base class for all exceptions thrown by the library.
virtual void DEREncode(BufferedTransformation &bt) const =0
Encode this object into a BufferedTransformation.
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.
#define CRYPTOPP_API
Win32 calling convention.
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 & operator/=(const Integer &t)
Division Assignment.
inline ::Integer operator-(const ::Integer &a, const ::Integer &b)
Subtraction.
a number with no special properties
bool operator!=(const ::Integer &a, const ::Integer &b)
Comparison.
bool operator<=(const ::Integer &a, const ::Integer &b)
Comparison.
word64 word
Full word used for multiprecision integer arithmetic.
virtual void BERDecode(BufferedTransformation &bt)=0
Decode this object from a BufferedTransformation.
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.
word64 lword
Large word type.
unsigned char byte
8-bit unsigned datatype
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 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.
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.