Fabcoin Core  0.16.2
P2P Digital Currency
Classes | Private Attributes | Friends | List of all members
PolynomialMod2 Class Reference

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

#include <gf2n.h>

Collaboration diagram for PolynomialMod2:
[legend]

Classes

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

Private Attributes

SecWordBlock reg
 

Friends

class GF2NT
 

ENUMS, EXCEPTIONS, and TYPEDEFS

typedef unsigned int RandomizationParameter
 

CREATORS

 PolynomialMod2 ()
 Construct the zero polynomial. More...
 
 PolynomialMod2 (const PolynomialMod2 &t)
 Copy construct a PolynomialMod2. More...
 
 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. More...
 
 PolynomialMod2 (BufferedTransformation &encodedPoly, size_t byteCount)
 Construct a PolynomialMod2 from big-endian form stored in a BufferedTransformation. More...
 
 PolynomialMod2 (RandomNumberGenerator &rng, size_t bitcount)
 Create a uniformly distributed random polynomial. More...
 
static PolynomialMod2 CRYPTOPP_API Monomial (size_t i)
 Provides x^i. More...
 
static PolynomialMod2 CRYPTOPP_API Trinomial (size_t t0, size_t t1, size_t t2)
 Provides x^t0 + x^t1 + x^t2. More...
 
static PolynomialMod2 CRYPTOPP_API 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 CRYPTOPP_API AllOnes (size_t n)
 Provides x^(n-1) + ... More...
 
static const PolynomialMod2 &CRYPTOPP_API Zero ()
 The Zero polinomial. More...
 
static const PolynomialMod2 &CRYPTOPP_API 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 More...
 
void BERDecodeAsOctetString (BufferedTransformation &bt, size_t length)
 decode value as big-endian octet string More...
 

ACCESSORS

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

MANIPULATORS

PolynomialMod2operator= (const PolynomialMod2 &t)
 
PolynomialMod2operator&= (const PolynomialMod2 &t)
 
PolynomialMod2operator^= (const PolynomialMod2 &t)
 
PolynomialMod2operator+= (const PolynomialMod2 &t)
 
PolynomialMod2operator-= (const PolynomialMod2 &t)
 
PolynomialMod2operator*= (const PolynomialMod2 &t)
 
PolynomialMod2operator/= (const PolynomialMod2 &t)
 
PolynomialMod2operator%= (const PolynomialMod2 &t)
 
PolynomialMod2operator<<= (unsigned int)
 
PolynomialMod2operator>>= (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 More...
 
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 More...
 
bool IsIrreducible () const
 check for irreducibility More...
 
PolynomialMod2 Doubled () const
 is always zero since we're working modulo 2 More...
 
PolynomialMod2 Squared () const
 
bool IsUnit () const
 only 1 is a unit More...
 
PolynomialMod2 MultiplicativeInverse () const
 return inverse if *this is a unit, otherwise return 0 More...
 
PolynomialMod2 InverseMod (const PolynomialMod2 &) const
 calculate multiplicative inverse of *this mod n More...
 
static PolynomialMod2 CRYPTOPP_API Gcd (const PolynomialMod2 &a, const PolynomialMod2 &n)
 greatest common divisor More...
 
static void CRYPTOPP_API 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)) More...
 

INPUT/OUTPUT

std::ostream & operator<< (std::ostream &out, const PolynomialMod2 &a)
 

Detailed Description

Polynomial with Coefficients in GF(2)

Definition at line 21 of file gf2n.h.

Member Typedef Documentation

Definition at line 33 of file gf2n.h.

Constructor & Destructor Documentation

PolynomialMod2::PolynomialMod2 ( )

Construct the zero polynomial.

Definition at line 29 of file gf2n.cpp.

Here is the caller graph for this function:

PolynomialMod2::PolynomialMod2 ( const PolynomialMod2 t)

Copy construct a PolynomialMod2.

Definition at line 45 of file gf2n.cpp.

Here is the call graph for this function:

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 33 of file gf2n.cpp.

Here is the call graph for this function:

PolynomialMod2::PolynomialMod2 ( const byte encodedPoly,
size_t  byteCount 
)
inline

Construct a PolynomialMod2 from big-endian byte array.

Definition at line 50 of file gf2n.h.

PolynomialMod2::PolynomialMod2 ( BufferedTransformation encodedPoly,
size_t  byteCount 
)
inline

Construct a PolynomialMod2 from big-endian form stored in a BufferedTransformation.

Definition at line 54 of file gf2n.h.

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 59 of file gf2n.h.

Member Function Documentation

PolynomialMod2 PolynomialMod2::AllOnes ( size_t  n)
static

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

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

Definition at line 60 of file gf2n.cpp.

Here is the call graph for this function:

PolynomialMod2 PolynomialMod2::And ( const PolynomialMod2 b) const

Definition at line 253 of file gf2n.cpp.

Here is the call graph for this function:

void PolynomialMod2::BERDecodeAsOctetString ( BufferedTransformation bt,
size_t  length 
)

decode value as big-endian octet string

Definition at line 181 of file gf2n.cpp.

Here is the call graph for this function:

unsigned int PolynomialMod2::BitCount ( ) const

number of significant bits = Degree() + 1

Definition at line 204 of file gf2n.cpp.

Here is the call graph for this function:

Here is the caller graph for this function:

unsigned int PolynomialMod2::ByteCount ( ) const

number of significant bytes = ceiling(BitCount()/8)

Definition at line 195 of file gf2n.cpp.

Here is the call graph for this function:

Here is the caller graph for this function:

unsigned int PolynomialMod2::CoefficientCount ( ) const
inline

degree + 1

Definition at line 125 of file gf2n.h.

void PolynomialMod2::Decode ( const byte input,
size_t  inputLen 
)

Definition at line 144 of file gf2n.cpp.

Here is the caller graph for this function:

void PolynomialMod2::Decode ( BufferedTransformation bt,
size_t  inputLen 
)

Definition at line 156 of file gf2n.cpp.

Here is the call graph for this function:

signed int PolynomialMod2::Degree ( ) const
inline

the zero polynomial will return a degree of -1

Definition at line 123 of file gf2n.h.

Here is the caller graph for this function:

void PolynomialMod2::DEREncodeAsOctetString ( BufferedTransformation bt,
size_t  length 
) const

encode value as big-endian octet string

Definition at line 174 of file gf2n.cpp.

Here is the call graph for this function:

void PolynomialMod2::Divide ( PolynomialMod2 r,
PolynomialMod2 q,
const PolynomialMod2 a,
const PolynomialMod2 d 
)
static

calculate r and q such that (a == d*q + r) && (deg(r) < deg(d))

Definition at line 293 of file gf2n.cpp.

Here is the call graph for this function:

Here is the caller graph for this function:

PolynomialMod2 PolynomialMod2::DividedBy ( const PolynomialMod2 b) const

Definition at line 318 of file gf2n.cpp.

Here is the call graph for this function:

PolynomialMod2 PolynomialMod2::Doubled ( ) const
inline

is always zero since we're working modulo 2

Definition at line 218 of file gf2n.h.

Here is the caller graph for this function:

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 150 of file gf2n.cpp.

Here is the caller graph for this function:

void PolynomialMod2::Encode ( BufferedTransformation bt,
size_t  outputLen 
) const

Definition at line 168 of file gf2n.cpp.

Here is the call graph for this function:

bool PolynomialMod2::Equals ( const PolynomialMod2 rhs) const

Definition at line 458 of file gf2n.cpp.

Here is the call graph for this function:

PolynomialMod2 PolynomialMod2::Gcd ( const PolynomialMod2 a,
const PolynomialMod2 n 
)
static

greatest common divisor

Definition at line 526 of file gf2n.cpp.

Here is the caller graph for this function:

bool PolynomialMod2::GetBit ( size_t  n) const
inline

return the n-th bit, n=0 being the least significant bit

Definition at line 118 of file gf2n.h.

Here is the call graph for this function:

byte PolynomialMod2::GetByte ( size_t  n) const

return the n-th byte

Definition at line 83 of file gf2n.cpp.

Here is the call graph for this function:

Here is the caller graph for this function:

int PolynomialMod2::GetCoefficient ( size_t  i) const
inline

return coefficient for x^i

Definition at line 127 of file gf2n.h.

PolynomialMod2 PolynomialMod2::InverseMod ( const PolynomialMod2 modulus) const

calculate multiplicative inverse of *this mod n

Definition at line 531 of file gf2n.cpp.

Here is the call graph for this function:

bool PolynomialMod2::IsIrreducible ( ) const

check for irreducibility

Definition at line 537 of file gf2n.cpp.

Here is the call graph for this function:

bool PolynomialMod2::IsUnit ( ) const
inline

only 1 is a unit

Definition at line 223 of file gf2n.h.

Here is the caller graph for this function:

bool PolynomialMod2::IsZero ( ) const
inline

Definition at line 133 of file gf2n.h.

Here is the caller graph for this function:

unsigned int PolynomialMod2::MinEncodedSize ( ) const
inline

minimum number of bytes to encode this polynomial

MinEncodedSize of 0 is 1

Definition at line 87 of file gf2n.h.

Here is the call graph for this function:

PolynomialMod2 PolynomialMod2::Minus ( const PolynomialMod2 b) const
inline

Definition at line 195 of file gf2n.h.

Here is the call graph for this function:

PolynomialMod2 PolynomialMod2::Modulo ( const PolynomialMod2 b) const

Definition at line 325 of file gf2n.cpp.

Here is the call graph for this function:

PolynomialMod2 PolynomialMod2::Monomial ( size_t  i)
static

Provides x^i.

Returns
x^i

Definition at line 98 of file gf2n.cpp.

Here is the call graph for this function:

PolynomialMod2 PolynomialMod2::MultiplicativeInverse ( ) const
inline

return inverse if *this is a unit, otherwise return 0

Definition at line 225 of file gf2n.h.

Here is the call graph for this function:

Here is the caller graph for this function:

const PolynomialMod2 & PolynomialMod2::One ( )
static

The One polinomial.

Returns
the one polynomial

Definition at line 139 of file gf2n.cpp.

bool PolynomialMod2::operator! ( ) const

Definition at line 451 of file gf2n.cpp.

Here is the call graph for this function:

PolynomialMod2& PolynomialMod2::operator%= ( const PolynomialMod2 t)
PolynomialMod2& PolynomialMod2::operator&= ( const PolynomialMod2 t)
PolynomialMod2& PolynomialMod2::operator*= ( const PolynomialMod2 t)
PolynomialMod2 PolynomialMod2::operator+ ( ) const
inline

Definition at line 181 of file gf2n.h.

PolynomialMod2& PolynomialMod2::operator+= ( const PolynomialMod2 t)
inline

Definition at line 147 of file gf2n.h.

PolynomialMod2 PolynomialMod2::operator- ( ) const
inline

Definition at line 183 of file gf2n.h.

PolynomialMod2& PolynomialMod2::operator-= ( const PolynomialMod2 t)
inline

Definition at line 149 of file gf2n.h.

PolynomialMod2& PolynomialMod2::operator/= ( const PolynomialMod2 t)
PolynomialMod2 PolynomialMod2::operator<< ( unsigned int  n) const

Definition at line 439 of file gf2n.cpp.

PolynomialMod2 & PolynomialMod2::operator<<= ( unsigned int  n)

Definition at line 332 of file gf2n.cpp.

Here is the call graph for this function:

PolynomialMod2 & PolynomialMod2::operator= ( const PolynomialMod2 t)

Definition at line 222 of file gf2n.cpp.

Here is the call graph for this function:

PolynomialMod2 PolynomialMod2::operator>> ( unsigned int  n) const

Definition at line 445 of file gf2n.cpp.

PolynomialMod2 & PolynomialMod2::operator>>= ( unsigned int  n)

Definition at line 403 of file gf2n.cpp.

Here is the call graph for this function:

int PolynomialMod2::operator[] ( unsigned int  i) const
inline

return coefficient for x^i

Definition at line 130 of file gf2n.h.

PolynomialMod2 & PolynomialMod2::operator^= ( const PolynomialMod2 t)

Definition at line 228 of file gf2n.cpp.

Here is the call graph for this function:

unsigned int PolynomialMod2::Parity ( ) const

sum modulo 2 of all coefficients

Definition at line 213 of file gf2n.cpp.

Here is the call graph for this function:

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 114 of file gf2n.cpp.

Here is the call graph for this function:

PolynomialMod2 PolynomialMod2::Plus ( const PolynomialMod2 b) const
inline

Definition at line 193 of file gf2n.h.

void PolynomialMod2::Randomize ( RandomNumberGenerator rng,
size_t  bitcount 
)

Definition at line 51 of file gf2n.cpp.

Here is the call graph for this function:

void PolynomialMod2::SetBit ( size_t  i,
int  value = 1 
)

Definition at line 69 of file gf2n.cpp.

Here is the call graph for this function:

Here is the caller graph for this function:

void PolynomialMod2::SetByte ( size_t  n,
byte  value 
)

set the n-th byte to value

Definition at line 91 of file gf2n.cpp.

Here is the call graph for this function:

void PolynomialMod2::SetCoefficient ( size_t  i,
int  value 
)
inline

Definition at line 170 of file gf2n.h.

PolynomialMod2 PolynomialMod2::Squared ( ) const

Definition at line 273 of file gf2n.cpp.

Here is the call graph for this function:

Here is the caller graph for this function:

void PolynomialMod2::swap ( PolynomialMod2 a)
inline

Definition at line 173 of file gf2n.h.

Here is the caller graph for this function:

PolynomialMod2 PolynomialMod2::Times ( const PolynomialMod2 b) const

Definition at line 260 of file gf2n.cpp.

Here is the call graph for this function:

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 105 of file gf2n.cpp.

Here is the call graph for this function:

unsigned int PolynomialMod2::WordCount ( ) const

number of significant words = ceiling(ByteCount()/sizeof(word))

Definition at line 190 of file gf2n.cpp.

Here is the call graph for this function:

Here is the caller graph for this function:

PolynomialMod2 PolynomialMod2::Xor ( const PolynomialMod2 b) const

Definition at line 235 of file gf2n.cpp.

Here is the call graph for this function:

const PolynomialMod2 & PolynomialMod2::Zero ( )
static

The Zero polinomial.

Returns
the zero polynomial

Definition at line 134 of file gf2n.cpp.

Here is the caller graph for this function:

Friends And Related Function Documentation

friend class GF2NT
friend

Definition at line 243 of file gf2n.h.

std::ostream& operator<< ( std::ostream &  out,
const PolynomialMod2 a 
)
friend

Definition at line 474 of file gf2n.cpp.

Member Data Documentation

SecWordBlock PolynomialMod2::reg
private

Definition at line 245 of file gf2n.h.


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