Computing over F256

The field with 256 elements is isomorphic to the set of polynomials modulo p(X)=X8+X7+X2+X+1 in F2[X] où F2 is the field with 2 elements (integers modulo 2). We denote by
F256 = F2[X]/(p(X))
One could replace p(X) by any other irreducible polynomial of degree 8 over F2[X]. Here, p(X) has an additional property, it is primitive, which means that any polynomial of degree no more than 7 is a remainder of a Xi modulo p(X) for some i. In practice, this provides us with two representations of elements of the field, which are complementary to perform additions and multiplications.

&Elements of the field F256 Machine representation
exponant polynomial exponant polynomial
0 0 -1 0
1 1 0 1
X X 1 2
X2 X2 2 4
X3 X3 3 8
X4 X4 4 16
X5 X5 5 32
X6 X6 6 64
X7 X7 7 128
X8 X7+X2+X+1 8 135
X9 X7+X3+1 9 137
X10 X7+X4+X2+1 10 149
X11 X7+X5+X3+X2+1 11 173
X12 X7+X6+X4+X3+X2+1 12 221
X13 X5+X4+X3+X2+1 13 61
X14 X6+X5+X4+X3+X 14 122
X15 X7+X6+X5+X4+X2 15 244
X16 X6+X5+X3+X2+X+1 16 111
X17 X7+X6+X4+X3+X2+X 17 222
X18 X5+X4+X3+X+1 18 59
X19 X6+X5+X4+X2+X 19 118
X20 X7+X6+X5+X3+X2 20 236
X21 X6+X4+X3+X2+X+1 21 95
X22 X7+X5+X4+X3+X2+X 22 190
X23 X7+X6+X5+X4+X3+X+1 23 251
X24 X6+X5+X4+1 24 113
X25 X7+X6+X5+X 25 226
X26 X6+X+1 26 67
X27 X7+X2+X 27 134
X28 X7+X3+X+1 28 139
X29 X7+X4+1 29 145
X30 X7+X5+X2+1 30 165
X31 X7+X6+X3+X2+1 31 205
X32 X4+X3+X2+1 32 29
X33 X5+X4+X3+X 33 58
X34 X6+X5+X4+X2 34 116
X35 X7+X6+X5+X3 35 232
X36 X6+X4+X2+X+1 36 87
X37 X7+X5+X3+X2+X 37 174
X38 X7+X6+X4+X3+X+1 38 219
X39 X5+X4+1 39 49
X40 X6+X5+X 40 98
X41 X7+X6+X2 41 196
X42 X3+X2+X+1 42 15
X43 X4+X3+X2+X 43 30
X44 X5+X4+X3+X2 44 60
X45 X6+X5+X4+X3 45 120
X46 X7+X6+X5+X4 46 240
X47 X6+X5+X2+X+1 47 103
X48 X7+X6+X3+X2+X 48 206
X49 X4+X3+X+1 49 27
X50 X5+X4+X2+X 50 54
X51 X6+X5+X3+X2 51 108
X52 X7+X6+X4+X3 52 216
X53 X5+X4+X2+X+1 53 55
X54 X6+X5+X3+X2+X 54 110
X55 X7+X6+X4+X3+X2 55 220
X56 X5+X4+X3+X2+X+1 56 63
X57 X6+X5+X4+X3+X2+X 57 126
X58 X7+X6+X5+X4+X3+X2 58 252
X59 X6+X5+X4+X3+X2+X+1 59 127
X60 X7+X6+X5+X4+X3+X2+X 60 254
X61 X6+X5+X4+X3+X+1 61 123
X62 X7+X6+X5+X4+X2+X 62 246
X63 X6+X5+X3+X+1 63 107
X64 X7+X6+X4+X2+X 64 214
X65 X5+X3+X+1 65 43
X66 X6+X4+X2+X 66 86
X67 X7+X5+X3+X2 67 172
X68 X7+X6+X4+X3+X2+X+1 68 223
X69 X5+X4+X3+1 69 57
X70 X6+X5+X4+X 70 114
X71 X7+X6+X5+X2 71 228
X72 X6+X3+X2+X+1 72 79
X73 X7+X4+X3+X2+X 73 158
X74 X7+X5+X4+X3+X+1 74 187
X75 X7+X6+X5+X4+1 75 241
X76 X6+X5+X2+1 76 101
X77 X7+X6+X3+X 77 202
X78 X4+X+1 78 19
X79 X5+X2+X 79 38
X80 X6+X3+X2 80 76
X81 X7+X4+X3 81 152
X82 X7+X5+X4+X2+X+1 82 183
X83 X7+X6+X5+X3+1 83 233
X84 X6+X4+X2+1 84 85
X85 X7+X5+X3+X 85 170
X86 X7+X6+X4+X+1 86 211
X87 X5+1 87 33
X88 X6+X 88 66
X89 X7+X2 89 132
X90 X7+X3+X2+X+1 90 143
X91 X7+X4+X3+1 91 153
X92 X7+X5+X4+X2+1 92 181
X93 X7+X6+X5+X3+X2+1 93 237
X94 X6+X4+X3+X2+1 94 93
X95 X7+X5+X4+X3+X 95 186
X96 X7+X6+X5+X4+X+1 96 243
X97 X6+X5+1 97 97
X98 X7+X6+X 98 194
X99 X+1 99 3
X100 X2+X 100 6
X101 X3+X2 101 12
X102 X4+X3 102 24
X103 X5+X4 103 48
X104 X6+X5 104 96
X105 X7+X6 105 192
X106 X2+X+1 106 7
X107 X3+X2+X 107 14
X108 X4+X3+X2 108 28
X109 X5+X4+X3 109 56
X110 X6+X5+X4 110 112
X111 X7+X6+X5 111 224
X112 X6+X2+X+1 112 71
X113 X7+X3+X2+X 113 142
X114 X7+X4+X3+X+1 114 155
X115 X7+X5+X4+1 115 177
X116 X7+X6+X5+X2+1 116 229
X117 X6+X3+X2+1 117 77
X118 X7+X4+X3+X 118 154
X119 X7+X5+X4+X+1 119 179
X120 X7+X6+X5+1 120 225
X121 X6+X2+1 121 69
X122 X7+X3+X 122 138
X123 X7+X4+X+1 123 147
X124 X7+X5+1 124 161
X125 X7+X6+X2+1 125 197
X126 X3+X2+1 126 13
X127 X4+X3+X 127 26
X128 X5+X4+X2 128 52
X129 X6+X5+X3 129 104
X130 X7+X6+X4 130 208
X131 X5+X2+X+1 131 39
X132 X6+X3+X2+X 132 78
X133 X7+X4+X3+X2 133 156
X134 X7+X5+X4+X3+X2+X+1 134 191
X135 X7+X6+X5+X4+X3+1 135 249
X136 X6+X5+X4+X2+1 136 117
X137 X7+X6+X5+X3+X 137 234
X138 X6+X4+X+1 138 83
X139 X7+X5+X2+X 139 166
X140 X7+X6+X3+X+1 140 203
X141 X4+1 141 17
X142 X5+X 142 34
X143 X6+X2 143 68
X144 X7+X3 144 136
X145 X7+X4+X2+X+1 145 151
X146 X7+X5+X3+1 146 169
X147 X7+X6+X4+X2+1 147 213
X148 X5+X3+X2+1 148 45
X149 X6+X4+X3+X 149 90
X150 X7+X5+X4+X2 150 180
X151 X7+X6+X5+X3+X2+X+1 151 239
X152 X6+X4+X3+1 152 89
X153 X7+X5+X4+X 153 178
X154 X7+X6+X5+X+1 154 227
X155 X6+1 155 65
X156 X7+X 156 130
X157 X7+X+1 157 131
X158 X7+1 158 129
X159 X7+X2+1 159 133
X160 X7+X3+X2+1 160 141
X161 X7+X4+X3+X2+1 161 157
X162 X7+X5+X4+X3+X2+1 162 189
X163 X7+X6+X5+X4+X3+X2+1 163 253
X164 X6+X5+X4+X3+X2+1 164 125
X165 X7+X6+X5+X4+X3+X 165 250
X166 X6+X5+X4+X+1 166 115
X167 X7+X6+X5+X2+X 167 230
X168 X6+X3+X+1 168 75
X169 X7+X4+X2+X 169 150
X170 X7+X5+X3+X+1 170 171
X171 X7+X6+X4+1 171 209
X172 X5+X2+1 172 37
X173 X6+X3+X 173 74
X174 X7+X4+X2 174 148
X175 X7+X5+X3+X2+X+1 175 175
X176 X7+X6+X4+X3+1 176 217
X177 X5+X4+X2+1 177 53
X178 X6+X5+X3+X 178 106
X179 X7+X6+X4+X2 179 212
X180 X5+X3+X2+X+1 180 47
X181 X6+X4+X3+X2+X 181 94
X182 X7+X5+X4+X3+X2 182 188
X183 X7+X6+X5+X4+X3+X2+X+1 183 255
X184 X6+X5+X4+X3+1 184 121
X185 X7+X6+X5+X4+X 185 242
X186 X6+X5+X+1 186 99
X187 X7+X6+X2+X 187 198
X188 X3+X+1 188 11
X189 X4+X2+X 189 22
X190 X5+X3+X2 190 44
X191 X6+X4+X3 191 88
X192 X7+X5+X4 192 176
X193 X7+X6+X5+X2+X+1 193 231
X194 X6+X3+1 194 73
X195 X7+X4+X 195 146
X196 X7+X5+X+1 196 163
X197 X7+X6+1 197 193
X198 X2+1 198 5
X199 X3+X 199 10
X200 X4+X2 200 20
X201 X5+X3 201 40
X202 X6+X4 202 80
X203 X7+X5 203 160
X204 X7+X6+X2+X+1 204 199
X205 X3+1 205 9
X206 X4+X 206 18
X207 X5+X2 207 36
X208 X6+X3 208 72
X209 X7+X4 209 144
X210 X7+X5+X2+X+1 210 167
X211 X7+X6+X3+1 211 201
X212 X4+X2+1 212 21
X213 X5+X3+X 213 42
X214 X6+X4+X2 214 84
X215 X7+X5+X3 215 168
X216 X7+X6+X4+X2+X+1 216 215
X217 X5+X3+1 217 41
X218 X6+X4+X 218 82
X219 X7+X5+X2 219 164
X220 X7+X6+X3+X2+X+1 220 207
X221 X4+X3+1 221 25
X222 X5+X4+X 222 50
X223 X6+X5+X2 223 100
X224 X7+X6+X3 224 200
X225 X4+X2+X+1 225 23
X226 X5+X3+X2+X 226 46
X227 X6+X4+X3+X2 227 92
X228 X7+X5+X4+X3 228 184
X229 X7+X6+X5+X4+X2+X+1 229 247
X230 X6+X5+X3+1 230 105
X231 X7+X6+X4+X 231 210
X232 X5+X+1 232 35
X233 X6+X2+X 233 70
X234 X7+X3+X2 234 140
X235 X7+X4+X3+X2+X+1 235 159
X236 X7+X5+X4+X3+1 236 185
X237 X7+X6+X5+X4+X2+1 237 245
X238 X6+X5+X3+X2+1 238 109
X239 X7+X6+X4+X3+X 239 218
X240 X5+X4+X+1 240 51
X241 X6+X5+X2+X 241 102
X242 X7+X6+X3+X2 242 204
X243 X4+X3+X2+X+1 243 31
X244 X5+X4+X3+X2+X 244 62
X245 X6+X5+X4+X3+X2 245 124
X246 X7+X6+X5+X4+X3 246 248
X247 X6+X5+X4+X2+X+1 247 119
X248 X7+X6+X5+X3+X2+X 248 238
X249 X6+X4+X3+X+1 249 91
X250 X7+X5+X4+X2+X 250 182
X251 X7+X6+X5+X3+X+1 251 235
X252 X6+X4+1 252 81
X253 X7+X5+X 253 162
X254 X7+X6+X+1 254 195

Another option for addition is to tabulate values of (1+ [k]) for any non-zero [k] (ie k != -1);
Indeed, let TabXplusUn(k) = j with [j] = 1+[k].
Then, we have, for j >=i et i!=-1:
[i]+[j] = [i]*(1 + [j]/[i]) = [i] * ( 1+ [j-i mod 255] ) = [i]*[TabXplusUn(j-i)] = [ i + TabXplusUn(j-i) mod 255 ]

In practice, for a small field (as here with only 256 elements), the tabulation is the best option.