9 #include <botan/internal/mp_core.h>    10 #include <botan/internal/mp_asm.h>    11 #include <botan/internal/mp_asmi.h>    12 #include <botan/mem_ops.h>    22                        const word p[], 
size_t p_size,
    23                        word p_dash, word ws[])
    25    const size_t blocks_of_8 = p_size - (p_size % 8);
    27    for(
size_t i = 0; i != p_size; ++i)
    31       const word y = z_i[0] * p_dash;
    40       for(
size_t j = 0; j != blocks_of_8; j += 8)
    43       for(
size_t j = blocks_of_8; j != p_size; ++j)
    46       word z_sum = z_i[p_size] + carry;
    47       carry = (z_sum < z_i[p_size]);
    50       for(
size_t j = p_size + 1; carry && j != z_size - i; ++j)
    58    for(
size_t i = 0; i != p_size; ++i)
    59       ws[i] = 
word_sub(z[p_size + i], p[i], &borrow);
    61    ws[p_size] = 
word_sub(z[p_size+p_size], 0, &borrow);
    63    copy_mem(ws + p_size + 1, z + p_size, p_size + 1);
    65    copy_mem(z, ws + borrow*(p_size+1), p_size + 1);
    66    clear_mem(z + p_size + 1, z_size - p_size - 1);
    70                       const word x[], 
size_t x_size, 
size_t x_sw,
    71                       const word y[], 
size_t y_size, 
size_t y_sw,
    72                       const word p[], 
size_t p_size, word p_dash,
    80                      &p[0], p_size, p_dash,
    85                       const word x[], 
size_t x_size, 
size_t x_sw,
    86                       const word p[], 
size_t p_size, word p_dash,
    93                      &p[0], p_size, p_dash,
 void clear_mem(T *ptr, size_t n)
word word_madd3(word a, word b, word c, word *d)
void bigint_monty_sqr(word z[], size_t z_size, const word x[], size_t x_size, size_t x_sw, const word p[], size_t p_size, word p_dash, word workspace[])
word word8_madd3(word z[8], const word x[8], word y, word carry)
void bigint_monty_redc(word z[], size_t z_size, const word p[], size_t p_size, word p_dash, word workspace[])
void bigint_sqr(word z[], size_t z_size, word workspace[], const word x[], size_t x_size, size_t x_sw)
void copy_mem(T *out, const T *in, size_t n)
void bigint_monty_mul(word z[], size_t z_size, const word x[], size_t x_size, size_t x_sw, const word y[], size_t y_size, size_t y_sw, const word p[], size_t p_size, word p_dash, word workspace[])
void bigint_mul(word z[], size_t z_size, word workspace[], const word x[], size_t x_size, size_t x_sw, const word y[], size_t y_size, size_t y_sw)
word word_sub(word x, word y, word *carry)