Crypto++ 8.6 Free C++ class library of cryptographic schemes

Classes | Typedefs | Functions
integer.h File Reference

Multiple precision integer with arithmetic operations. More...

Go to the source code of this file.

## Classes
struct | InitializeInteger
| Performs static initialization of the Integer class. More...
class | Integer
| Multiple precision integer with arithmetic operations. More...
class | Integer::DivideByZero
| Exception thrown when division by 0 is encountered. More...
class | Integer::RandomNumberNotFound
| Exception thrown when a random number cannot be found that satisfies the condition. More...
class | Integer::OpenPGPDecodeErr
| Exception thrown when an error is encountered decoding an OpenPGP integer. More...

## Typedefs
typedef SecBlock< word, AllocatorWithCleanup< word, true > > | IntegerSecBlock

## Functions
bool | operator== (const ::Integer &a, const ::Integer &b)
| Comparison.
bool | operator!= (const ::Integer &a, const ::Integer &b)
| Comparison.
bool | operator> (const ::Integer &a, const ::Integer &b)
| Comparison.
bool | operator>= (const ::Integer &a, const ::Integer &b)
| Comparison.
bool | operator< (const ::Integer &a, const ::Integer &b)
| Comparison.
bool | operator<= (const ::Integer &a, const ::Integer &b)
| Comparison.
inline ::Integer | operator+ (const ::Integer &a, const ::Integer &b)
| Addition.
inline ::Integer | operator- (const ::Integer &a, const ::Integer &b)
| Subtraction.
inline ::Integer | operator* (const ::Integer &a, const ::Integer &b)
| Multiplication. More...
inline ::Integer | operator/ (const ::Integer &a, const ::Integer &b)
| Division.
inline ::Integer | operator% (const ::Integer &a, const ::Integer &b)
| Remainder. More...
inline ::Integer | operator/ (const ::Integer &a, ::word b)
| Division.
inline ::word | operator% (const ::Integer &a, ::word b)
| Remainder. More...
inline ::Integer | operator& (const ::Integer &a, const ::Integer &b)
| Bitwise AND. More...
inline ::Integer | operator| (const ::Integer &a, const ::Integer &b)
| Bitwise OR. More...
inline ::Integer | operator^ (const ::Integer &a, const ::Integer &b)
| Bitwise XOR. More...
void | swap (::Integer &a, ::Integer &b)

## Detailed Description

Multiple precision integer with arithmetic operations.

The Integer class can represent positive and negative integers with absolute value less than (256**sizeof(word))(256**sizeof(int)).

Internally, the library uses a sign magnitude representation, and the class has two data members. The first is a IntegerSecBlock (a SecBlock<word>) and it is used to hold the representation. The second is a Sign (an enumeration), and it is used to track the sign of the Integer.

For details on how the Integer class initializes its function pointers using InitializeInteger and how it creates Integer::Zero(), Integer::One(), and Integer::Two(), then see the comments at the top of `integer.cpp`.

Since
  Crypto++ 1.0

Definition in file integer.h.

## Function Documentation

## ◆ operator*()

inline ::Integer operator* | ( | const ::Integer & | a,
|  | const ::Integer & | b
| ) |  |

Multiplication.

See also
  a_times_b_mod_c() and a_exp_b_mod_c()

Definition at line 774 of file integer.h.

## ◆ operator%() [1/2]

inline ::Integer operator% | ( | const ::Integer & | a,
|  | const ::Integer & | b
| ) |  |

Remainder.

See also
  a_times_b_mod_c() and a_exp_b_mod_c()

Definition at line 779 of file integer.h.

## ◆ operator%() [2/2]

inline ::word operator% | ( | const ::Integer & | a,
|  | ::word | b
| ) |  |

Remainder.

See also
  a_times_b_mod_c() and a_exp_b_mod_c()

Definition at line 784 of file integer.h.

## ◆ operator&()

inline ::Integer operator& | ( | const ::Integer & | a,
|  | const ::Integer & | b
| ) |  |

Bitwise AND.

Parameters

  a | the first Integer
  b | the second Integer

Returns
  the result of a & b

operator&() performs a bitwise AND on the operands. Missing bits are truncated at the most significant bit positions, so the result is as small as the smaller of the operands.

Internally, Crypto++ uses a sign-magnitude representation. The library does not attempt to interpret bits, and the result is always POSITIVE. If needed, the integer should be converted to a 2's compliment representation before performing the operation.

Since
  Crypto++ 6.0

Definition at line 798 of file integer.h.

## ◆ operator|()

inline ::Integer operator| | ( | const ::Integer & | a,
|  | const ::Integer & | b
| ) |  |

Bitwise OR.

Parameters

  a | the first Integer
  b | the second Integer

Returns
  the result of a | b

operator|() performs a bitwise OR on the operands. Missing bits are shifted in at the most significant bit positions, so the result is as large as the larger of the operands.

Internally, Crypto++ uses a sign-magnitude representation. The library does not attempt to interpret bits, and the result is always POSITIVE. If needed, the integer should be converted to a 2's compliment representation before performing the operation.

Since
  Crypto++ 6.0

Definition at line 812 of file integer.h.

## ◆ operator^()

inline ::Integer operator^ | ( | const ::Integer & | a,
|  | const ::Integer & | b
| ) |  |

Bitwise XOR.

Parameters

  a | the first Integer
  b | the second Integer

Returns
  the result of a ^ b

operator^() performs a bitwise XOR on the operands. Missing bits are shifted in at the most significant bit positions, so the result is as large as the larger of the operands.

Internally, Crypto++ uses a sign-magnitude representation. The library does not attempt to interpret bits, and the result is always POSITIVE. If needed, the integer should be converted to a 2's compliment representation before performing the operation.

Since
  Crypto++ 6.0

Definition at line 826 of file integer.h.