* a = data[0..15] + r * b = data[16..31] * c = data[32..47] * d = data[48..63] * * Calculate a*h^4 + b*h^3 + c*h^2 + d*h, or: * (((a*h+b)*h+c)*h+d)*h */
| 256 | * (((a*h+b)*h+c)*h+d)*h |
| 257 | */ |
| 258 | struct gf128 |
| 259 | gf128_mul4b(struct gf128 r, const uint8_t *v, struct gf128table4 *tbl) |
| 260 | { |
| 261 | struct gf128 a, b, c, d; |
| 262 | struct gf128 tmp; |
| 263 | |
| 264 | tmp = MAKE_GF128(0, 0); |
| 265 | |
| 266 | a = gf128_add(r, gf128_read(&v[0*16])); |
| 267 | b = gf128_read(&v[1*16]); |
| 268 | c = gf128_read(&v[2*16]); |
| 269 | d = gf128_read(&v[3*16]); |
| 270 | |
| 271 | tmp = gfmultword4(a.v[1], b.v[1], c.v[1], d.v[1], tmp, tbl); |
| 272 | tmp = gfmultword4(a.v[0], b.v[0], c.v[0], d.v[0], tmp, tbl); |
| 273 | |
| 274 | return tmp; |
| 275 | } |
no test coverage detected