9 #include <botan/internal/mp_asm.h> 10 #include <botan/internal/mp_asmi.h> 11 #include <botan/internal/mp_core.h> 12 #include <botan/internal/ct_utils.h> 13 #include <botan/exceptn.h> 14 #include <botan/mem_ops.h> 29 for(
size_t i = 0; i != size; ++i)
47 for(
size_t i = 0; i != size; ++i)
53 const word z =
word_add(x[i], y[i], &carry);
69 for(
size_t i = 0; i != size; ++i)
71 const word z =
word_sub(x[i], y[i], &carry);
82 word carry = mask & 1;
83 for(
size_t i = 0; i != size; ++i)
85 const word z =
word_add(~x[i], 0, &carry);
97 const size_t blocks = y_size - (y_size % 8);
99 for(
size_t i = 0; i != blocks; i += 8)
102 for(
size_t i = blocks; i != y_size; ++i)
103 x[i] =
word_add(x[i], y[i], &carry);
105 for(
size_t i = y_size; i != x_size; ++i)
115 const word y[],
size_t y_size)
122 const size_t blocks = y_size - (y_size % 8);
124 for(
size_t i = 0; i != blocks; i += 8)
125 carry =
word8_add3(z + i, x + i, y + i, carry);
127 for(
size_t i = blocks; i != y_size; ++i)
128 z[i] =
word_add(x[i], y[i], &carry);
130 for(
size_t i = y_size; i != x_size; ++i)
139 void bigint_add2(word x[],
size_t x_size,
const word y[],
size_t y_size)
149 const word y[],
size_t y_size)
151 z[(x_size > y_size ? x_size : y_size)] +=
158 word
bigint_sub2(word x[],
size_t x_size,
const word y[],
size_t y_size)
162 const size_t blocks = y_size - (y_size % 8);
164 for(
size_t i = 0; i != blocks; i += 8)
167 for(
size_t i = blocks; i != y_size; ++i)
168 x[i] =
word_sub(x[i], y[i], &borrow);
170 for(
size_t i = y_size; i != x_size; ++i)
183 const size_t blocks = y_size - (y_size % 8);
185 for(
size_t i = 0; i != blocks; i += 8)
188 for(
size_t i = blocks; i != y_size; ++i)
189 x[i] =
word_sub(y[i], x[i], &borrow);
199 const word y[],
size_t y_size)
203 const size_t blocks = y_size - (y_size % 8);
205 for(
size_t i = 0; i != blocks; i += 8)
206 borrow =
word8_sub3(z + i, x + i, y + i, borrow);
208 for(
size_t i = blocks; i != y_size; ++i)
209 z[i] =
word_sub(x[i], y[i], &borrow);
211 for(
size_t i = y_size; i != x_size; ++i)
222 const size_t blocks = x_size - (x_size % 8);
226 for(
size_t i = 0; i != blocks; i += 8)
229 for(
size_t i = blocks; i != x_size; ++i)
240 const size_t blocks = x_size - (x_size % 8);
244 for(
size_t i = 0; i != blocks; i += 8)
247 for(
size_t i = blocks; i != x_size; ++i)
void bigint_sub2_rev(word x[], const word y[], size_t y_size)
word word8_sub2_rev(word x[8], const word y[8], word carry)
word word8_add2(word x[8], const word y[8], word carry)
word word8_linmul3(word z[8], const word x[8], word y, word carry)
word bigint_sub2(word x[], size_t x_size, const word y[], size_t y_size)
void bigint_linmul2(word x[], size_t x_size, word y)
word bigint_add3_nc(word z[], const word x[], size_t x_size, const word y[], size_t y_size)
word word8_sub2(word x[8], const word y[8], word carry)
word bigint_sub3(word z[], const word x[], size_t x_size, const word y[], size_t y_size)
word word_madd2(word a, word b, word *c)
void bigint_linmul3(word z[], const word x[], size_t x_size, word y)
word bigint_cnd_sub(word cnd, word x[], const word y[], size_t size)
void bigint_cnd_swap(word cnd, word x[], word y[], size_t size)
word word8_linmul2(word x[8], word y, word carry)
T select(T mask, T from0, T from1)
word bigint_add2_nc(word x[], size_t x_size, const word y[], size_t y_size)
word word8_add3(word z[8], const word x[8], const word y[8], word carry)
word word_sub(word x, word y, word *carry)
void bigint_add2(word x[], size_t x_size, const word y[], size_t y_size)
word bigint_cnd_add(word cnd, word x[], const word y[], size_t size)
word word_add(word x, word y, word *carry)
void bigint_cnd_abs(word cnd, word x[], size_t size)
word word8_sub3(word z[8], const word x[8], const word y[8], word carry)
void bigint_add3(word z[], const word x[], size_t x_size, const word y[], size_t y_size)