diff options
Diffstat (limited to 'gf28.h')
-rw-r--r-- | gf28.h | 39 |
1 files changed, 39 insertions, 0 deletions
@@ -0,0 +1,39 @@ +#pragma once + +#include <iostream> +#include <cstdint> + +//The GF(2^8) field used in AES + +class GF28{ + int value; + + static int reduce(int v,int m); + +public: + static const int modulus=0x11b; + + static uint8_t multiply(uint8_t x,uint8_t y); //for when the class is overkill + + GF28(); + explicit GF28(int v); + + explicit operator uint8_t() const; + + GF28& operator+=(GF28 o); + GF28& operator-=(GF28 o); + GF28& operator<<=(int n); //multiplication by x^n + + GF28 operator+(GF28 o) const; + GF28 operator-(GF28 o) const; + GF28 operator*(GF28 o) const; + GF28 operator<<(int n) const; //multiplication by x^n + + bool operator==(GF28 o) const; + + GF28 inverse() const; + + friend std::ostream& operator<<(std::ostream&,GF28); +}; + +std::ostream& operator<<(std::ostream &os,GF28 p); |