Polynomial with Coefficients in GF(2). More...
#include <gf2n.h>
Classes | |
class | DivideByZero |
divide by zero exception More... | |
Friends | |
class | GF2NT |
ENUMS, EXCEPTIONS, and TYPEDEFS | |
| |
typedef unsigned int | RandomizationParameter |
INPUT/OUTPUT | |
| |
std::ostream & | operator<< (std::ostream &out, const PolynomialMod2 &a) |
CREATORS | |
| |
PolynomialMod2 () | |
creates the zero polynomial | |
PolynomialMod2 (const PolynomialMod2 &t) | |
copy constructor | |
PolynomialMod2 (word value, size_t bitLength=WORD_BITS) | |
convert from word | |
PolynomialMod2 (const byte *encodedPoly, size_t byteCount) | |
convert from big-endian byte array | |
PolynomialMod2 (BufferedTransformation &encodedPoly, size_t byteCount) | |
convert from big-endian form stored in a BufferedTransformation | |
PolynomialMod2 (RandomNumberGenerator &rng, size_t bitcount) | |
create a random polynomial uniformly distributed over all polynomials with degree less than bitcount | |
static PolynomialMod2 | Monomial (size_t i) |
return x^i | |
static PolynomialMod2 | Trinomial (size_t t0, size_t t1, size_t t2) |
return x^t0 + x^t1 + x^t2 | |
static PolynomialMod2 | Pentanomial (size_t t0, size_t t1, size_t t2, size_t t3, size_t t4) |
return x^t0 + x^t1 + x^t2 + x^t3 + x^t4 | |
static PolynomialMod2 | AllOnes (size_t n) |
return x^(n-1) + ... + x + 1 | |
static const PolynomialMod2 & | Zero () |
static const PolynomialMod2 & | One () |
ENCODE/DECODE | |
| |
unsigned int | MinEncodedSize () const |
minimum number of bytes to encode this polynomial | |
void | Encode (byte *output, size_t outputLen) const |
encode in big-endian format | |
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)) |
Polynomial with Coefficients in GF(2).
Definition at line 17 of file gf2n.h.
PolynomialMod2::PolynomialMod2 | ( | word | value, | |
size_t | bitLength = WORD_BITS | |||
) |
unsigned int PolynomialMod2::MinEncodedSize | ( | ) | const [inline] |
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 139 of file gf2n.cpp.
Referenced by DEREncodeAsOctetString().