1#ifndef CRYPTOPP_GF256_H
2#define CRYPTOPP_GF256_H
3
4#include "cryptlib.h"
5
6NAMESPACE_BEGIN(CryptoPP)
7
8//! GF(256) with polynomial basis
9class GF256
10{
11public:
12	typedef byte Element;
13	typedef int RandomizationParameter;
14
15	GF256(byte modulus) : m_modulus(modulus) {}
16
17	Element RandomElement(RandomNumberGenerator &rng, int ignored = 0) const
18		{return rng.GenerateByte();}
19
20	bool Equal(Element a, Element b) const
21		{return a==b;}
22
23	Element Zero() const
24		{return 0;}
25
26	Element Add(Element a, Element b) const
27		{return a^b;}
28
29	Element& Accumulate(Element &a, Element b) const
30		{return a^=b;}
31
32	Element Inverse(Element a) const
33		{return a;}
34
35	Element Subtract(Element a, Element b) const
36		{return a^b;}
37
38	Element& Reduce(Element &a, Element b) const
39		{return a^=b;}
40
41	Element Double(Element a) const
42		{return 0;}
43
44	Element One() const
45		{return 1;}
46
47	Element Multiply(Element a, Element b) const;
48
49	Element Square(Element a) const
50		{return Multiply(a, a);}
51
52	bool IsUnit(Element a) const
53		{return a != 0;}
54
55	Element MultiplicativeInverse(Element a) const;
56
57	Element Divide(Element a, Element b) const
58		{return Multiply(a, MultiplicativeInverse(b));}
59
60private:
61	word m_modulus;
62};
63
64NAMESPACE_END
65
66#endif
67