39 { .
name =
"bigint_mod_multiply" };
43 { .
name =
"bigint_mod_multiply.multiply" };
47 { .
name =
"bigint_mod_multiply.rescale" };
51 { .
name =
"bigint_mod_multiply.subtract" };
67 unsigned int size,
void *
tmp ) {
69 ( (
const void * ) multiplicand0 );
71 ( (
const void * ) multiplier0 );
73 ( (
const void * ) modulus0 );
75 ( (
void * ) result0 );
105 for ( i = 0 ; i <=
rotation ; i++ ) {
110 profile_stop ( &bigint_mod_multiply_subtract_profiler );
137 unsigned int size,
unsigned int exponent_size,
140 ( (
const void * ) base0 );
142 ( (
const void * ) modulus0 );
144 *exponent = ( (
const void * ) exponent0 );
146 ( (
void * ) result0 );
150 bigint_t ( exponent_size ) exponent;
151 uint8_t mod_multiply[mod_multiply_len];
155 memcpy ( &temp->base,
base, sizeof ( temp->base ) );
156 memcpy ( &temp->exponent, exponent, sizeof ( temp->exponent ) );
162 result, temp->mod_multiply );
166 &temp->base, temp->mod_multiply );
void bigint_mod_exp_raw(const bigint_element_t *base0, const bigint_element_t *modulus0, const bigint_element_t *exponent0, bigint_element_t *result0, unsigned int size, unsigned int exponent_size, void *tmp)
Perform modular exponentiation of big integers.
#define bigint_max_set_bit(value)
Find highest bit set in big integer.
#define bigint_ror(value)
Rotate big integer right.
void bigint_mod_multiply_raw(const bigint_element_t *multiplicand0, const bigint_element_t *multiplier0, const bigint_element_t *modulus0, bigint_element_t *result0, unsigned int size, void *tmp)
Perform modular multiplication of big integers.
#define bigint_grow(source, dest)
Grow big integer.
#define bigint_init(value, data, len)
Initialise big integer.
A data structure for storing profiling information.
#define bigint_is_zero(value)
Test if big integer is equal to zero.
static void profile_stop(struct profiler *profiler)
Stop profiling.
uint8_t multiplier
Port multiplier number.
static struct profiler bigint_mod_multiply_profiler __profiler
Modular multiplication overall profiler.
uint32_t start
Starting offset.
#define bigint_is_geq(value, reference)
Compare big integers.
void * memcpy(void *dest, const void *src, size_t len) __nonnull
assert((readw(&hdr->flags) &(GTF_reading|GTF_writing))==0)
#define bigint_shrink(source, dest)
Shrink big integer.
uint32_t bigint_element_t
Element of a big integer.
#define bigint_t(size)
Define a big-integer type.
static void profile_start(struct profiler *profiler)
Start profiling.
#define bigint_rol(value)
Rotate big integer left.
static unsigned int rotation
uint16_t base
Base address.
FILE_LICENCE(GPL2_OR_LATER_OR_UBDL)
#define bigint_mod_multiply(multiplicand, multiplier, modulus, result, tmp)
Perform modular multiplication of big integers.
#define bigint_mod_multiply_tmp_len(modulus)
Calculate temporary working space required for moduluar multiplication.
#define bigint_multiply(multiplicand, multiplier, result)
Multiply big integers.
uint8_t size
Entry size (in 32-bit words)
#define bigint_bit_is_set(value, bit)
Test if bit is set in big integer.
#define bigint_subtract(subtrahend, value)
Subtract big integers.