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

Classes | Friends | List of all members
PolynomialMod2 Class Reference

Polynomial with Coefficients in GF(2) More...

## Classes
class | DivideByZero
| Excpetion thrown when divide by zero is encountered. More...

## Friends
class | GF2NT
class | GF2NT233

## ENUMS, EXCEPTIONS, and TYPEDEFS
typedef unsigned int | RandomizationParameter

## CREATORS
| PolynomialMod2 ()
| Construct the zero polynomial.
| PolynomialMod2 (const PolynomialMod2 &t)
| Copy construct a PolynomialMod2.
| PolynomialMod2 (word value, size_t bitLength=WORD_BITS)
| Construct a PolynomialMod2 from a word. More...
| PolynomialMod2 (const byte *encodedPoly, size_t byteCount)
| Construct a PolynomialMod2 from big-endian byte array.
| PolynomialMod2 (BufferedTransformation &encodedPoly, size_t byteCount)
| Construct a PolynomialMod2 from big-endian form stored in a BufferedTransformation.
| PolynomialMod2 (RandomNumberGenerator &rng, size_t bitcount)
| Create a uniformly distributed random polynomial. More...
static PolynomialMod2 | Monomial (size_t i)
| Provides x^i. More...
static PolynomialMod2 | Trinomial (size_t t0, size_t t1, size_t t2)
| Provides x^t0 + x^t1 + x^t2. More...
static PolynomialMod2 | Pentanomial (size_t t0, size_t t1, size_t t2, size_t t3, size_t t4)
| Provides x^t0 + x^t1 + x^t2 + x^t3 + x^t4. More...
static PolynomialMod2 | AllOnes (size_t n)
| Provides x^(n-1) + ... More...
static const PolynomialMod2 & | Zero ()
| The Zero polinomial. More...
static const PolynomialMod2 & | One ()
| The One polinomial. More...

## ENCODE/DECODE
unsigned int | MinEncodedSize () const
| minimum number of bytes to encode this polynomial More...
void | Encode (byte *output, size_t outputLen) const
| encode in big-endian format More...
void | Encode (BufferedTransformation &bt, size_t outputLen) const
void | Decode (const byte *input, size_t inputLen)
void | Decode (BufferedTransformation &bt, size_t inputLen)
void | DEREncodeAsOctetString (BufferedTransformation &bt, size_t length) const
| encode value as big-endian octet string
void | BERDecodeAsOctetString (BufferedTransformation &bt, size_t length)
| decode value as big-endian octet string

## ACCESSORS
unsigned int | BitCount () const
| number of significant bits = Degree() + 1
unsigned int | ByteCount () const
| number of significant bytes = ceiling(BitCount()/8)
unsigned int | WordCount () const
| number of significant words = ceiling(ByteCount()/sizeof(word))
bool | GetBit (size_t n) const
| return the n-th bit, n=0 being the least significant bit
byte | GetByte (size_t n) const
| return the n-th byte
signed int | Degree () const
| the zero polynomial will return a degree of -1
unsigned int | CoefficientCount () const
| degree + 1
int | GetCoefficient (size_t i) const
| return coefficient for x^i
int | operator[] (unsigned int i) const
| return coefficient for x^i
bool | IsZero () const
bool | Equals (const PolynomialMod2 &rhs) const

## MANIPULATORS
PolynomialMod2 & | operator= (const PolynomialMod2 &t)
PolynomialMod2 & | operator &= (const PolynomialMod2 &t)
PolynomialMod2 & | operator^= (const PolynomialMod2 &t)
PolynomialMod2 & | operator+= (const PolynomialMod2 &t)
PolynomialMod2 & | operator-= (const PolynomialMod2 &t)
PolynomialMod2 & | operator*= (const PolynomialMod2 &t)
PolynomialMod2 & | operator/= (const PolynomialMod2 &t)
PolynomialMod2 & | operator%= (const PolynomialMod2 &t)
PolynomialMod2 & | operator<<= (unsigned int)
PolynomialMod2 & | operator>>= (unsigned int)
void | Randomize (RandomNumberGenerator &rng, size_t bitcount)
void | SetBit (size_t i, int value=1)
void | SetByte (size_t n, byte value)
| set the n-th byte to value
void | SetCoefficient (size_t i, int value)
void | swap (PolynomialMod2 &a)

## UNARY OPERATORS
bool | operator! () const
PolynomialMod2 | operator+ () const
PolynomialMod2 | operator- () const

## BINARY OPERATORS
PolynomialMod2 | And (const PolynomialMod2 &b) const
PolynomialMod2 | Xor (const PolynomialMod2 &b) const
PolynomialMod2 | Plus (const PolynomialMod2 &b) const
PolynomialMod2 | Minus (const PolynomialMod2 &b) const
PolynomialMod2 | Times (const PolynomialMod2 &b) const
PolynomialMod2 | DividedBy (const PolynomialMod2 &b) const
PolynomialMod2 | Modulo (const PolynomialMod2 &b) const
PolynomialMod2 | operator>> (unsigned int n) const
PolynomialMod2 | operator<< (unsigned int n) const

## OTHER ARITHMETIC FUNCTIONS
unsigned int | Parity () const
| sum modulo 2 of all coefficients
bool | IsIrreducible () const
| check for irreducibility
PolynomialMod2 | Doubled () const
| is always zero since we're working modulo 2
PolynomialMod2 | Squared () const
bool | IsUnit () const
| only 1 is a unit
PolynomialMod2 | MultiplicativeInverse () const
| return inverse if *this is a unit, otherwise return 0
PolynomialMod2 | InverseMod (const PolynomialMod2 &) const
| calculate multiplicative inverse of *this mod n
static PolynomialMod2 | Gcd (const PolynomialMod2 &a, const PolynomialMod2 &n)
| greatest common divisor
static void | Divide (PolynomialMod2 &r, PolynomialMod2 &q, const PolynomialMod2 &a, const PolynomialMod2 &d)
| calculate r and q such that (a == d*q + r) && (deg(r) < deg(d))

## INPUT/OUTPUT
std::ostream & | operator<< (std::ostream &out, const PolynomialMod2 &a)

## Detailed Description

Polynomial with Coefficients in GF(2)

Definition at line 26 of file gf2n.h.

## Constructor & Destructor Documentation

## ◆ PolynomialMod2() [1/2]

PolynomialMod2::PolynomialMod2 | ( | word | value,
|  | size_t | bitLength = `WORD_BITS`
| ) |  |

Construct a PolynomialMod2 from a word.

value should be encoded with the least significant bit as coefficient to x^0 and most significant bit as coefficient to x^(WORD_BITS-1) bitLength denotes how much memory to allocate initially

Definition at line 64 of file gf2n.cpp.

## ◆ PolynomialMod2() [2/2]

PolynomialMod2::PolynomialMod2 | ( | RandomNumberGenerator & | rng,
|  | size_t | bitcount
| ) |  |
| inline

Create a uniformly distributed random polynomial.

Create a random polynomial uniformly distributed over all polynomials with degree less than bitcount

Definition at line 64 of file gf2n.h.

## Member Function Documentation

## ◆ Monomial()

PolynomialMod2 PolynomialMod2::Monomial | ( | size_t | i | ) |
| static

Provides x^i.

Returns
  x^i

Definition at line 129 of file gf2n.cpp.

## ◆ Trinomial()

PolynomialMod2 PolynomialMod2::Trinomial | ( | size_t | t0,
|  | size_t | t1,
|  | size_t | t2
| ) |  |
| static

Provides x^t0 + x^t1 + x^t2.

Returns
  x^t0 + x^t1 + x^t2

Definition at line 136 of file gf2n.cpp.

## ◆ Pentanomial()

PolynomialMod2 PolynomialMod2::Pentanomial | ( | size_t | t0,
|  | size_t | t1,
|  | size_t | t2,
|  | size_t | t3,
|  | size_t | t4
| ) |  |
| static

Provides x^t0 + x^t1 + x^t2 + x^t3 + x^t4.

Returns
  x^t0 + x^t1 + x^t2 + x^t3 + x^t4

Definition at line 145 of file gf2n.cpp.

## ◆ AllOnes()

PolynomialMod2 PolynomialMod2::AllOnes | ( | size_t | n | ) |
| static

Provides x^(n-1) + ...

+ x + 1

Returns
  x^(n-1) + ... + x + 1

Definition at line 91 of file gf2n.cpp.

## ◆ Zero()

const PolynomialMod2 & PolynomialMod2::Zero | ( |  | ) |
| static

The Zero polinomial.

Returns
  the zero polynomial

Definition at line 165 of file gf2n.cpp.

## ◆ One()

const PolynomialMod2 & PolynomialMod2::One | ( |  | ) |
| static

The One polinomial.

Returns
  the one polynomial

Definition at line 177 of file gf2n.cpp.

## ◆ MinEncodedSize()

unsigned int PolynomialMod2::MinEncodedSize | ( |  | ) | const
| inline

minimum number of bytes to encode this polynomial

MinEncodedSize of 0 is 1

Definition at line 92 of file gf2n.h.

## ◆ Encode()

void PolynomialMod2::Encode | ( | byte * | output,
|  | size_t | outputLen
| ) |  | const

encode in big-endian format

if outputLen < MinEncodedSize, the most significant bytes will be dropped if outputLen > MinEncodedSize, the most significant bytes will be padded

Definition at line 195 of file gf2n.cpp.

The documentation for this class was generated from the following files:

- gf2n.h
- gf2n.cpp