|
#define | bigint_t(size) |
| Define a big-integer type. More...
|
|
#define | bigint_required_size(len) |
| Determine number of elements required for a big-integer type. More...
|
|
#define | bigint_size(bigint) ( sizeof ( *(bigint) ) / sizeof ( (bigint)->element[0] ) ) |
| Determine number of elements in big-integer type. More...
|
|
#define | bigint_init(value, data, len) |
| Initialise big integer. More...
|
|
#define | bigint_done(value, out, len) |
| Finalise big integer. More...
|
|
#define | bigint_add(addend, value) |
| Add big integers. More...
|
|
#define | bigint_subtract(subtrahend, value) |
| Subtract big integers. More...
|
|
#define | bigint_rol(value) |
| Rotate big integer left. More...
|
|
#define | bigint_ror(value) |
| Rotate big integer right. More...
|
|
#define | bigint_is_zero(value) |
| Test if big integer is equal to zero. More...
|
|
#define | bigint_is_geq(value, reference) |
| Compare big integers. More...
|
|
#define | bigint_bit_is_set(value, bit) |
| Test if bit is set in big integer. More...
|
|
#define | bigint_max_set_bit(value) |
| Find highest bit set in big integer. More...
|
|
#define | bigint_grow(source, dest) |
| Grow big integer. More...
|
|
#define | bigint_shrink(source, dest) |
| Shrink big integer. More...
|
|
#define | bigint_copy(source, dest) |
| Copy big integer. More...
|
|
#define | bigint_swap(first, second, swap) |
| Conditionally swap big integers (in constant time) More...
|
|
#define | bigint_multiply(multiplicand, multiplier, result) |
| Multiply big integers. More...
|
|
#define | bigint_mod_multiply(multiplicand, multiplier, modulus, result, tmp) |
| Perform modular multiplication of big integers. More...
|
|
#define | bigint_mod_multiply_tmp_len(modulus) |
| Calculate temporary working space required for moduluar multiplication. More...
|
|
#define | bigint_mod_exp(base, modulus, exponent, result, tmp) |
| Perform modular exponentiation of big integers. More...
|
|
#define | bigint_mod_exp_tmp_len(modulus, exponent) |
| Calculate temporary working space required for moduluar exponentiation. More...
|
|
|
| FILE_LICENCE (GPL2_OR_LATER_OR_UBDL) |
|
void | bigint_init_raw (bigint_element_t *value0, unsigned int size, const void *data, size_t len) |
|
void | bigint_done_raw (const bigint_element_t *value0, unsigned int size, void *out, size_t len) |
|
void | bigint_add_raw (const bigint_element_t *addend0, bigint_element_t *value0, unsigned int size) |
|
void | bigint_subtract_raw (const bigint_element_t *subtrahend0, bigint_element_t *value0, unsigned int size) |
|
void | bigint_rol_raw (bigint_element_t *value0, unsigned int size) |
|
void | bigint_ror_raw (bigint_element_t *value0, unsigned int size) |
|
int | bigint_is_zero_raw (const bigint_element_t *value0, unsigned int size) |
|
int | bigint_is_geq_raw (const bigint_element_t *value0, const bigint_element_t *reference0, unsigned int size) |
|
int | bigint_bit_is_set_raw (const bigint_element_t *value0, unsigned int size, unsigned int bit) |
|
int | bigint_max_set_bit_raw (const bigint_element_t *value0, unsigned int size) |
|
void | bigint_grow_raw (const bigint_element_t *source0, unsigned int source_size, bigint_element_t *dest0, unsigned int dest_size) |
|
void | bigint_shrink_raw (const bigint_element_t *source0, unsigned int source_size, bigint_element_t *dest0, unsigned int dest_size) |
|
void | bigint_swap_raw (bigint_element_t *first0, bigint_element_t *second0, unsigned int size, int swap) |
| Conditionally swap big integers (in constant time) More...
|
|
void | bigint_multiply_raw (const bigint_element_t *multiplicand0, unsigned int multiplicand_size, const bigint_element_t *multiplier0, unsigned int multiplier_size, bigint_element_t *result0) |
| Multiply big integers. More...
|
|
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. More...
|
|
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. More...
|
|
Big integer support.
Definition in file bigint.h.
Perform modular multiplication of big integers.
- Parameters
-
multiplicand0 | Element 0 of big integer to be multiplied |
multiplier0 | Element 0 of big integer to be multiplied |
modulus0 | Element 0 of big integer modulus |
result0 | Element 0 of big integer to hold result |
size | Number of elements in base, modulus, and result |
tmp | Temporary working space |
Definition at line 88 of file bigint.c.
94 ( (
const void * ) multiplicand0 );
96 ( (
const void * ) multiplier0 );
98 ( (
const void * ) modulus0 );
100 ( (
void * ) result0 );
117 profile_stop ( &bigint_mod_multiply_multiply_profiler );
130 for ( i = 0 ; i <=
rotation ; i++ ) {
135 profile_stop ( &bigint_mod_multiply_subtract_profiler );
static const void const void void * result
#define bigint_max_set_bit(value)
Find highest bit set in big integer.
#define bigint_ror(value)
Rotate big integer right.
#define bigint_grow(source, dest)
Grow big integer.
static void profile_stop(struct profiler *profiler)
Stop profiling.
uint8_t multiplier
Port multiplier number.
#define bigint_is_geq(value, reference)
Compare big integers.
assert((readw(&hdr->flags) &(GTF_reading|GTF_writing))==0)
#define bigint_shrink(source, dest)
Shrink big integer.
static void profile_start(struct profiler *profiler)
Start profiling.
#define bigint_rol(value)
Rotate big integer left.
static unsigned int rotation
#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_subtract(subtrahend, value)
Subtract big integers.
typedef bigint_t(X25519_SIZE) x25519_t
An X25519 unsigned big integer used in internal calculations.
References __attribute__, assert(), bigint_grow, bigint_is_geq, bigint_max_set_bit, bigint_mod_multiply_tmp_len, bigint_multiply, bigint_rol, bigint_ror, bigint_shrink, bigint_subtract, bigint_t(), multiplier, profile_start(), profile_stop(), result, rotation, size, and tmp.
Perform modular exponentiation of big integers.
- Parameters
-
base0 | Element 0 of big integer base |
modulus0 | Element 0 of big integer modulus |
exponent0 | Element 0 of big integer exponent |
result0 | Element 0 of big integer to hold result |
size | Number of elements in base, modulus, and result |
exponent_size | Number of elements in exponent |
tmp | Temporary working space |
Definition at line 158 of file bigint.c.
165 ( (
const void * ) base0 );
167 ( (
const void * ) modulus0 );
169 *exponent = ( (
const void * ) exponent0 );
171 ( (
void * ) result0 );
175 bigint_t ( exponent_size ) exponent;
176 uint8_t mod_multiply[mod_multiply_len];
180 memcpy ( &temp->base,
base, sizeof ( temp->base ) );
181 memcpy ( &temp->exponent, exponent, sizeof ( temp->exponent ) );
187 result, temp->mod_multiply );
191 &temp->base, temp->mod_multiply );
static const void const void void * result
#define bigint_ror(value)
Rotate big integer right.
#define bigint_init(value, data, len)
Initialise big integer.
#define bigint_is_zero(value)
Test if big integer is equal to zero.
static const void * base
Base address.
uint32_t start
Starting offset.
void * memcpy(void *dest, const void *src, size_t len) __nonnull
#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.
uint8_t size
Entry size (in 32-bit words)
#define bigint_bit_is_set(value, bit)
Test if bit is set in big integer.
typedef bigint_t(X25519_SIZE) x25519_t
An X25519 unsigned big integer used in internal calculations.
References __attribute__, base, bigint_bit_is_set, bigint_init, bigint_is_zero, bigint_mod_multiply, bigint_mod_multiply_tmp_len, bigint_ror, bigint_t(), memcpy(), result, size, start, and tmp.