10#include <botan/internal/mp_core.h>
11#include <botan/internal/mp_monty.h>
12#include <botan/internal/mp_madd.h>
13#include <botan/internal/mp_asmi.h>
14#include <botan/internal/ct_utils.h>
15#include <botan/mem_ops.h>
16#include <botan/exceptn.h>
29void bigint_monty_redc_generic(word z[],
size_t z_size,
30 const word p[],
size_t p_size, word p_dash,
33 word w2 = 0, w1 = 0, w0 = 0;
45 for(
size_t i = 1; i != p_size; ++i)
47 for(
size_t j = 0; j < i; ++j)
63 for(
size_t i = 0; i != p_size; ++i)
65 for(
size_t j = i + 1; j != p_size; ++j)
97 for(
size_t i = 0; i != p_size; ++i)
98 ws[p_size + 1 + i] =
word_sub(ws[i], p[i], &borrow);
99 ws[2*p_size+1] =
word_sub(ws[p_size], 0, &borrow);
104 clear_mem(z + p_size, z_size - p_size - 2);
110 const word p[],
size_t p_size, word p_dash,
111 word ws[],
size_t ws_size)
113 const size_t z_size = 2*(p_size+1);
123 else if(p_size == 16)
125 else if(p_size == 24)
127 else if(p_size == 32)
130 bigint_monty_redc_generic(z, z_size, p, p_size, p_dash, ws);
#define BOTAN_DEBUG_ASSERT(expr)
#define BOTAN_ARG_CHECK(expr, msg)
Mask< T > conditional_copy_mem(T cnd, T *to, const T *from0, const T *from1, size_t elems)
word word_sub(word x, word y, word *carry)
void word3_muladd(word *w2, word *w1, word *w0, word x, word y)
void bigint_monty_redc_24(word z[], const word p[], word p_dash, word ws[])
void bigint_monty_redc_8(word z[], const word p[], word p_dash, word ws[])
void bigint_monty_redc_16(word z[], const word p[], word p_dash, word ws[])
void bigint_monty_redc_4(word z[], const word p[], word p_dash, word ws[])
void bigint_monty_redc(word z[], const word p[], size_t p_size, word p_dash, word workspace[], size_t ws_size)
void word3_add(word *w2, word *w1, word *w0, word x)
void bigint_monty_redc_32(word z[], const word p[], word p_dash, word ws[])
void bigint_monty_redc_6(word z[], const word p[], word p_dash, word ws[])
void clear_mem(T *ptr, size_t n)