8 #include <botan/bigint.h>
9 #include <botan/internal/mp_core.h>
10 #include <botan/internal/bit_ops.h>
22 const size_t reg_size = std::max(x_sw, y_sw) + 1;
38 else if(relative_size == 0)
43 else if(relative_size > 0)
59 const size_t reg_size = std::max(x_sw, y_sw) + 1;
71 else if(relative_size == 0)
81 else if(relative_size > 0)
100 if(x_sw == 0 || y_sw == 0)
105 else if(x_sw == 1 && y_sw)
110 else if(y_sw == 1 && x_sw)
136 (*this) >>= (y.
bits() - 1);
138 (*
this) = (*this) / y;
147 return (*
this = (*
this) % mod);
159 word result = (
word_at(0) & (mod - 1));
174 get_reg()[0] = mod - remainder;
194 grow_to(words + shift_words + (shift_bits ? 1 : 0));
void bigint_shr1(word x[], size_t x_size, size_t word_shift, size_t bit_shift)
void bigint_sub2_rev(word x[], const word y[], size_t y_size)
word word_at(size_t n) const
BigInt & operator*=(const BigInt &y)
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)
Sign reverse_sign() const
SecureVector< word > & get_reg()
word bigint_sub3(word z[], const word x[], size_t x_size, const word y[], size_t y_size)
BigInt & operator<<=(size_t shift)
BigInt & operator>>=(size_t shift)
void bigint_linmul3(word z[], const word x[], size_t x_size, word y)
BigInt & operator%=(const BigInt &y)
const word * data() const
void copy_mem(T *out, const T *in, size_t n)
BigInt & operator/=(const BigInt &y)
BigInt & operator-=(const BigInt &y)
void bigint_shl1(word x[], size_t x_size, size_t word_shift, size_t bit_shift)
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)
void bigint_add2(word x[], size_t x_size, const word y[], size_t y_size)
void zeroise(MemoryRegion< T > &vec)
s32bit bigint_cmp(const word x[], size_t x_size, const word y[], size_t y_size)
BigInt & operator+=(const BigInt &y)
word bigint_modop(word n1, word n0, word d)
const size_t MP_WORD_BITS