|
- /* Copyright (c) 2014 Cryptography Research, Inc.
- * Released under the MIT License. See LICENSE.txt for license information.
- */
- #ifndef __BARRETT_FIELD_H__
- #define __BARRETT_FIELD_H__ 1
-
- #include "word.h"
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- void
- barrett_reduce(
- word_t *a,
- int nwords_a,
- word_t a_carry,
- const word_t *p_lo,
- int nwords_p,
- int nwords_lo,
- int p_shift
- );
-
- /*
- * out = a+(c&mask), with carry returned.
- * #out must equal #a (HACK?)
- */
- word_t
- add_nr_ext_packed(
- word_t *out,
- const word_t *a,
- int nwords_a,
- const word_t *c,
- int nwords_c,
- word_t mask
- );
-
- word_t
- sub_nr_ext_packed(
- word_t *out,
- const word_t *a,
- int nwords_a,
- const word_t *c,
- int nwords_c,
- word_t mask
- );
-
- void
- barrett_negate (
- word_t *a,
- int nwords_a,
- const word_t *p_lo,
- int nwords_p,
- int nwords_lo,
- int p_shift
- );
-
- /*
- * If doMac, accum = accum + a*b mod p.
- * Otherwise, accum = a*b mod p.
- *
- * This function is not __restrict__; you may pass accum,
- * a, b, etc all from the same location.
- */
- void
- barrett_mul_or_mac(
- word_t *accum,
- int nwords_accum,
-
- const word_t *a,
- int nwords_a,
-
- const word_t *b,
- int nwords_b,
-
- const word_t *p_lo,
- int nwords_p,
- int nwords_lo,
- int p_shift,
-
- mask_t doMac
- );
-
- static inline void
- barrett_mul(
- word_t *out,
- int nwords_out,
-
- const word_t *a,
- int nwords_a,
-
- const word_t *b,
- int nwords_b,
-
- const word_t *p_lo,
- int nwords_p,
- int nwords_lo,
- int p_shift
- ) {
- barrett_mul_or_mac(out,nwords_out,a,nwords_a,b,nwords_b,p_lo,nwords_p,nwords_lo,p_shift,0);
- }
-
- static inline void
- barrett_mac(
- word_t *out,
- int nwords_out,
-
- const word_t *a,
- int nwords_a,
-
- const word_t *b,
- int nwords_b,
-
- const word_t *p_lo,
- int nwords_p,
- int nwords_lo,
- int p_shift
- ) {
- barrett_mul_or_mac(out,nwords_out,a,nwords_a,b,nwords_b,p_lo,nwords_p,nwords_lo,p_shift,-1);
- }
-
- #ifdef __cplusplus
- }; /* extern "C" */
- #endif
-
- #endif /* __BARRETT_FIELD_H__ */
|