gf2x.h
/* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0"
*
* Written by Nir Drucker, Shay Gueron and Dusan Kostic,
* AWS Cryptographic Algorithms Group.
*/
#pragma once
#include "types.h"
// c = a+b mod (x^r - 1)
_INLINE_ void
gf2x_mod_add(OUT pad_r_t *c, IN const pad_r_t *a, IN const pad_r_t *b)
{
REG_T va, vb;
const uint64_t *a_qwords = (const uint64_t *)a;
const uint64_t *b_qwords = (const uint64_t *)b;
uint64_t * c_qwords = (uint64_t *)c;
for(size_t i = 0; i < R_PADDED_QWORDS; i += REG_QWORDS) {
va = LOAD(&a_qwords[i]);
vb = LOAD(&b_qwords[i]);
STORE(&c_qwords[i], va ^ vb);
}
}
// c = a*b mod (x^r - 1)
void gf2x_mod_mul(OUT pad_r_t *c, IN const pad_r_t *a, IN const pad_r_t *b);
// c = a^-1 mod (x^r - 1)
void gf2x_mod_inv(OUT pad_r_t *c, IN const pad_r_t *a);