Crypto++
8.4
Free C++ class library of cryptographic schemes
|
Go to the documentation of this file.
16 #ifndef CRYPTOPP_INTEGER_H
17 #define CRYPTOPP_INTEGER_H
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;
636 bool IsSquare()
const;
643 Integer MultiplicativeInverse()
const;
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);}
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)
inline ::Integer operator|(const ::Integer &a, const ::Integer &b)
Bitwise OR.
Integer & operator*=(const Integer &t)
Multiplication Assignment.
Integer operator>>(size_t n) const
Right-shift.
void swap(::SecBlock< T, A > &a, ::SecBlock< T, A > &b)
Swap two SecBlocks.
bool NotZero() const
Determines if the Integer is non-0.
void SetPositive()
Sets the Integer to positive.
Integer Squared() const
Multiply this integer by itself.
@ BIG_ENDIAN_ORDER
byte order is big-endian
Interface for encoding and decoding ASN1 objects.
Integer & operator/=(const Integer &t)
Division Assignment.
Classes and functions for secure memory allocations.
Ring of congruence classes modulo n.
inline ::Integer operator%(const ::Integer &a, const ::Integer &b)
Remainder.
@ ANY
a number with no special properties
inline ::Integer operator-(const ::Integer &a, const ::Integer &b)
Subtraction.
@ UNSIGNED
an unsigned value
Integer operator++(int)
Post-increment.
bool IsEven() const
Determines if the Integer is even parity.
unsigned int GetByte(ByteOrder order, T value, unsigned int index)
Gets a byte from a value.
Integer Doubled() const
Add this integer to itself.
bool IsZero() const
Determines if the Integer is 0.
inline ::Integer operator&(const ::Integer &a, const ::Integer &b)
Bitwise AND.
bool operator==(const ::Integer &a, const ::Integer &b)
Comparison.
inline ::Integer operator+(const ::Integer &a, const ::Integer &b)
Addition.
RandomNumberType
Properties of a random integer.
Interface for random number generators.
Integer operator--(int)
Post-decrement.
bool operator!=(const ::Integer &a, const ::Integer &b)
Comparison.
Integer operator+() const
Addition.
bool operator<=(const ::Integer &a, const ::Integer &b)
Comparison.
Base class for all exceptions thrown by the library.
virtual void BERDecode(BufferedTransformation &bt)=0
Decode this object from a BufferedTransformation.
Exception thrown when a random number cannot be found that satisfies the condition.
word64 word
Full word used for multiprecision integer arithmetic.
Integer & operator%=(word t)
Remainder Assignment.
bool IsOdd() const
Determines if the Integer is odd parity.
Signedness
Used when importing and exporting integers.
bool NotPositive() const
Determines if the Integer is non-positive.
ByteOrder
Provides the byte ordering.
void GenerateRandom(RandomNumberGenerator &rng, const NameValuePairs ¶ms=g_nullNameValuePairs)
Generate a random number.
Integer operator<<(size_t n) const
Left-shift.
bool NotNegative() const
Determines if the Integer is non-negative.
std::ostream & operator<<(std::ostream &out, const OID &oid)
Print a OID value.
void SetNegative()
Sets the Integer to negative.
word64 lword
Large word type.
Sign
Used internally to represent the integer.
bool IsPositive() const
Determines if the Integer is positive.
Exception thrown when division by 0 is encountered.
Performs static initialization of the Integer class.
const NameValuePairs & g_nullNameValuePairs
An empty set of name-value pairs.
inline ::Integer operator^(const ::Integer &a, const ::Integer &b)
Bitwise XOR.
Exception thrown when an error is encountered decoding an OpenPGP integer.
Crypto++ library namespace.
Integer & operator%=(const Integer &t)
Remainder Assignment.
bool operator>(const ::Integer &a, const ::Integer &b)
Comparison.
#define CRYPTOPP_API
Win32 calling convention.
bool IsNegative() const
Determines if the Integer is negative.
Integer & operator/=(word t)
Division Assignment.
bool operator<(const ::Integer &a, const ::Integer &b)
Comparison.
Secure memory block with allocator and cleanup.
inline ::Integer operator*(const ::Integer &a, const ::Integer &b)
Multiplication.
Performs modular arithmetic in Montgomery representation for increased speed.
virtual void DEREncode(BufferedTransformation &bt) const =0
Encode this object into a BufferedTransformation.
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.
Abstract base classes that provide a uniform interface to this library.
Multiple precision integer with arithmetic operations.