MPHELL  4.0.0
Functions
mphell-number.c File Reference

Definition of arithmetic functions. More...

#include "mphell-number.h"
Include dependency graph for mphell-number.c:

Go to the source code of this file.

Functions

void number_tmp_alloc (number *t, const uint8_t size, uint8_t stack)
 Allocate a temporary number. More...
 
void number_tmp_free (number *t, const uint8_t size, uint8_t stack)
 Free a temporary number. More...
 
void number_init (number *dst, const uint8_t n)
 Allocate a number_ptr on the RAM memory (malloc) More...
 
void number_free (number *dst)
 Free a number_ptr allocated on the RAM memory (malloc) More...
 
void number_copy (number_ptr dst, number_srcptr src)
 Copy src into dst. More...
 
void number_set_ui (number_ptr dst, const block src)
 Set dst to src. More...
 
void number_set (number_ptr dst, const int8_t sign, const uint32_t size,...)
 Set dst to [block_0, block_1, ..., block_(size-1)]. SIZ(dst) must be set before use. More...
 
void number_set_bit (number_ptr dst, const uint32_t bit)
 Set the bit-th of dst to 1, all the others to 0. More...
 
void number_random (number_ptr dst, const uint32_t size)
 Set dst to a random number, the random process is chosen at the MPHELL initialisation. SIZ(dst) must be set before use. More...
 
void number_random1 (number_ptr dst, number_srcptr bound, uint8_t stack)
 Set dst to a random number_ptr between 0 and bound, the random process is chosen at the MPHELL initialisation. More...
 
uint16_t number_log2 (number_srcptr src)
 Calculate log2(src), which is the binary size of src. More...
 
uint8_t number_block_size (number_srcptr src)
 Calculate the number of block used by src. More...
 
uint8_t number_buffer_size (number_srcptr src)
 Give the number of block that src can use. More...
 
void number_set_str (number_ptr dst, const char *str, const uint8_t base)
 Set dst to str. More...
 
void number_str (char **str, number_srcptr src, const uint8_t base)
 Converts src to string format in base specified by base. More...
 
void number_get_ui (block *dst, number_srcptr src)
 Get the less significant block of src. More...
 
void number_to_bit_string (char *str, number_srcptr src)
 Converts src (must be positive) to a bit string. More...
 
void number_print (number_srcptr src, const uint8_t base)
 Print src in base "base". More...
 
bool number_iszero (number_srcptr src)
 Test if src is zero. More...
 
bool number_isequal_ui (number_srcptr src1, const block src2)
 Test if src1 == src2. More...
 
bool number_isequal (number_srcptr src1, number_srcptr src2)
 Test if src1 == src2. More...
 
bool number_isdiff_ui (number_srcptr src1, const block src2)
 Test if src1 != src2. More...
 
bool number_isdiff (number_srcptr src1, number_srcptr src2)
 Test if src1 != src2. More...
 
bool number_islower_ui (number_srcptr src1, const block src2)
 Test if src1 < src2. More...
 
bool number_islower (number_srcptr src1, number_srcptr src2)
 Test if src1 < src2. More...
 
bool number_isgreater_ui (number_srcptr src1, const block src2)
 Test if src1 > src2. More...
 
bool number_isgreater (number_srcptr src1, number_srcptr src2)
 Test if src1 > src2. More...
 
bool number_islowereq_ui (number_srcptr src1, const block src2)
 Test if src1 <= src2. More...
 
bool number_islowereq (number_srcptr src1, number_srcptr src2)
 Test if src1 <= src2. More...
 
bool number_isgreatereq_ui (number_srcptr src1, const block src2)
 Test if src1 >= src2. More...
 
bool number_isgreatereq (number_srcptr src1, number_srcptr src2)
 Test if src1 >= src2. More...
 
int8_t number_cmp_ui (number_srcptr src1, const block src2)
 Compare src1 and src2. More...
 
int8_t number_cmp (number_srcptr src1, number_srcptr src2)
 Compare src1 and src2. More...
 
bool number_iseven (number_srcptr src)
 Test if src is even. More...
 
bool number_isodd (number_srcptr src)
 Test if src is odd. More...
 
block number_and_ui (number_srcptr src1, const block src2, uint8_t stack)
 Apply logical bitwise AND operator between src1 and src2. More...
 
void number_and (number_ptr dst, number_srcptr src1, number_srcptr src2)
 Apply logical bitwise AND operator between src1 and src2. More...
 
void number_or_ui (number_ptr dst, number_srcptr src1, const block src2, uint8_t stack)
 Apply logical bitwise OR operator between src1 and src2. More...
 
void number_or (number_ptr dst, number_srcptr src1, number_srcptr src2)
 Apply logical bitwise OR operator between src1 and src2. More...
 
void number_xor_ui (number_ptr dst, number_srcptr src1, const block src2, uint8_t stack)
 Apply logical bitwise XOR operator between src1 and src2. More...
 
void number_xor (number_ptr dst, number_srcptr src1, number_srcptr src2)
 Apply logical bitwise XOR operator between src1 and src2. More...
 
void number_lshift (number_ptr dst, number_srcptr src, const uint16_t shift)
 Set dst to src << shift. More...
 
void number_rshift (number_ptr dst, number_srcptr src, const uint16_t shift)
 Set dst to src >> shift. More...
 
void number_add_ui (number_ptr dst, number_srcptr src1, const block src2)
 Set dst to src1 + src2 if src1 + src2 fit in dst. More...
 
void number_add (number_ptr dst, number_srcptr src1, number_srcptr src2)
 Set dst to src1 + src2 if src1 + src2 fit in dst. More...
 
void number_inc (number_ptr dst, number_srcptr src)
 Set dst to src + 1 if src + 1 fit in dst. More...
 
void number_sub_ui (number_ptr dst, number_srcptr src1, const block src2)
 Set dst to src1 - src2 if src1 - src2 fit in dst. More...
 
void number_sub (number_ptr dst, number_srcptr src1, number_srcptr src2)
 Set dst to src1 - src2 if src1 - src2 fit in dst. More...
 
void number_dec (number_ptr dst, number_srcptr src)
 Set dst to src - 1 if src - 1 fit in dst. More...
 
void number_mul_ui (number_ptr dst, number_srcptr src1, const block src2)
 Set dst to src1 * src2. More...
 
void number_addmul_ui (number_ptr dst, number_srcptr src1, const block src2)
 Set dst to dst + src1 * src2. More...
 
void number_mul (number_ptr dst, number_srcptr src1, number_srcptr src2)
 Set dst to src1 * src2. More...
 
void number_mul_mod (number_ptr dst, number_srcptr src1, number_srcptr src2, number_srcptr mod, uint8_t stack)
 Set dst to (src1 * src2) % mod. More...
 
void number_addmul (number_ptr dst, number_srcptr src1, number_srcptr src2)
 Set dst to dst + src1 * src2. More...
 
void number_pow (number_ptr dst, number_srcptr src1, number_srcptr src2, uint8_t stack)
 Set dst to src1^src2. More...
 
void number_powm (number_ptr dst, number_srcptr src1, number_srcptr src2, number_srcptr mod, uint8_t stack)
 Set dst to src1^src2 modulo mod. More...
 
void number_powm_ui (number_ptr dst, number_srcptr src1, const block src2, number_srcptr mod, uint8_t stack)
 Set dst to src1^src2 modulo mod. More...
 
void number_sqr (number_ptr dst, number_srcptr src)
 Set dst to src1^2. More...
 
void number_divmod_ui (number_ptr q, block *r, number_srcptr src1, const block src2)
 Compute (q, r) such that src1 = q * src2 + r ; r < src2. More...
 
void number_divmod (number_ptr q, number_ptr r, number_srcptr src1, number_srcptr src2)
 Compute (q, r) such that src1 = q * src2 + r ; r < src2. More...
 
void number_div_ui (number_ptr dst, number_srcptr src1, const block src2)
 Compute dst such that src1 = dst * src2 + r ; r < src2. More...
 
void number_div (number_ptr dst, number_srcptr src1, number_srcptr src2)
 Compute dst such that src1 = dst * src2 + r ; r < src2. More...
 
void number_mod_ui (block *dst, number_srcptr src1, const block src2)
 Compute dst such that src1 = q * src2 + dst ; dst < src2. More...
 
void number_mod (number_ptr dst, number_srcptr src1, number_srcptr src2)
 Compute dst such that src1 = q * src2 + dst ; dst < src2. More...
 
void number_invmod (number_ptr dst, number_srcptr src1, number_srcptr src2)
 Compute dst such that dst = src1^(-1) mod src2. More...
 
void number_inv_mod_basis (block *dst, const block src)
 Compute dst such that dst * (-src) = -1 mod (2^(BLOCK_SIZE)) More...
 
void number_mul_montgomery (number_ptr dst, number_srcptr src1, number_srcptr src2, number_srcptr p, const block invp, uint8_t stack)
 Compute dst such that dst = (src1 * src2) mod(p) into the Montgomery form. More...
 
void number_mul_montgomery_block (number_ptr dst, number_srcptr src1, number_srcptr src2, number_srcptr p, const block invp, uint8_t stack)
 Compute dst such that dst = (src1 * src2) mod(p) into the Montgomery form, use when SIZ(src1) or SIZ(src2) != SIZ(p) More...
 
void number_inv_montgomery (number_ptr dst, number_srcptr src, number_srcptr p, const block invp, number_srcptr R2, number_srcptr one, uint8_t stack)
 Compute dst such that dst = src^(-1) mod(p) into the Montgomery form. More...
 
int8_t number_legendre (number_srcptr src1, number_srcptr src2, uint8_t stack)
 Compute the legendre symbole of src1 and src2. More...
 
void number_gcd_ui (block *dst, number_srcptr src1, const block src2)
 Set dst to GCD(src1, src2) More...
 
void number_gcd (number_ptr dst, number_srcptr src1, number_srcptr src2)
 Set dst to GCD(src1, src2) More...
 
uint8_t number_Rabin_Miller (number_srcptr src, const uint16_t bound)
 Apply the Rabin-Miller test to src with the bound. More...
 

Detailed Description

Definition of arithmetic functions.

Definition in file mphell-number.c.

Function Documentation

◆ number_add()

void number_add ( number_ptr  dst,
number_srcptr  src1,
number_srcptr  src2 
)

Set dst to src1 + src2 if src1 + src2 fit in dst.

Parameters
dstDestination number
src1Source number_ptr (array of blocks)
src2Source number_ptr (array of blocks)

Definition at line 1334 of file mphell-number.c.

◆ number_add_ui()

void number_add_ui ( number_ptr  dst,
number_srcptr  src1,
const block  src2 
)

Set dst to src1 + src2 if src1 + src2 fit in dst.

Parameters
dstDestination number
src1Source number_ptr (array of blocks)
src2Source number_ptr (block)

Definition at line 1317 of file mphell-number.c.

◆ number_addmul()

void number_addmul ( number_ptr  dst,
number_srcptr  src1,
number_srcptr  src2 
)

Set dst to dst + src1 * src2.

Parameters
dstDestination number, must be of size == size(src1) * 2
src1Source number_ptr (array of blocks)
src2Source number_ptr (array of blocks) must be of size <= size(src1)

Definition at line 1468 of file mphell-number.c.

◆ number_addmul_ui()

void number_addmul_ui ( number_ptr  dst,
number_srcptr  src1,
const block  src2 
)

Set dst to dst + src1 * src2.

Parameters
dstDestination number, must be of size >= size(src1) + 1
src1Source number_ptr (array of blocks)
src2Source number_ptr (block)

Definition at line 1405 of file mphell-number.c.

◆ number_and()

void number_and ( number_ptr  dst,
number_srcptr  src1,
number_srcptr  src2 
)

Apply logical bitwise AND operator between src1 and src2.

Parameters
dstDestination number
src1Source number
src2Source number

Definition at line 1041 of file mphell-number.c.

◆ number_and_ui()

block number_and_ui ( number_srcptr  src1,
const block  src2,
uint8_t  stack 
)

Apply logical bitwise AND operator between src1 and src2.

Parameters
src1Source number
src2Source block
stackTemporary memory stack to use
Returns
src1 AND src2

Definition at line 1021 of file mphell-number.c.

◆ number_block_size()

uint8_t number_block_size ( number_srcptr  src)

Calculate the number of block used by src.

Parameters
srcSource number
Returns
Size in block used by src

Definition at line 271 of file mphell-number.c.

◆ number_buffer_size()

uint8_t number_buffer_size ( number_srcptr  src)

Give the number of block that src can use.

Parameters
srcSource number
Returns
Size in block dedicated for src

Definition at line 285 of file mphell-number.c.

◆ number_cmp()

int8_t number_cmp ( number_srcptr  src1,
number_srcptr  src2 
)

Compare src1 and src2.

Parameters
src1Source number
src2Source number
Returns
0 if src1 == src2
1 if src1 > src2
-1 if src1 < src2

Definition at line 966 of file mphell-number.c.

◆ number_cmp_ui()

int8_t number_cmp_ui ( number_srcptr  src1,
const block  src2 
)

Compare src1 and src2.

Parameters
src1Source number
src2Source block
Returns
0 if src1 == src2
1 if src1 > src2
-1 if src1 < src2

Definition at line 946 of file mphell-number.c.

◆ number_copy()

void number_copy ( number_ptr  dst,
number_srcptr  src 
)

Copy src into dst.

Parameters
srcSource number
dstDestination number

Definition at line 87 of file mphell-number.c.

◆ number_dec()

void number_dec ( number_ptr  dst,
number_srcptr  src 
)

Set dst to src - 1 if src - 1 fit in dst.

Parameters
dstDestination number
srcSource number

Definition at line 1383 of file mphell-number.c.

◆ number_div()

void number_div ( number_ptr  dst,
number_srcptr  src1,
number_srcptr  src2 
)

Compute dst such that src1 = dst * src2 + r ; r < src2.

Parameters
dstDestination quotient (array of blocks)
src1Source dividende (array of blocks)
src2Source divisor (array of blocks)

Definition at line 1733 of file mphell-number.c.

◆ number_div_ui()

void number_div_ui ( number_ptr  dst,
number_srcptr  src1,
const block  src2 
)

Compute dst such that src1 = dst * src2 + r ; r < src2.

Parameters
dstDestination quotient (array of blocks)
src1Source dividende (array of blocks)
src2Source divisor (block)

Definition at line 1709 of file mphell-number.c.

◆ number_divmod()

void number_divmod ( number_ptr  q,
number_ptr  r,
number_srcptr  src1,
number_srcptr  src2 
)

Compute (q, r) such that src1 = q * src2 + r ; r < src2.

Parameters
qDestination quotient (array of blocks)
rDestination rest (array block)
src1Source dividende (array of blocks)
src2Source divisor (array of blocks)

Definition at line 1696 of file mphell-number.c.

◆ number_divmod_ui()

void number_divmod_ui ( number_ptr  q,
block *  r,
number_srcptr  src1,
const block  src2 
)

Compute (q, r) such that src1 = q * src2 + r ; r < src2.

Parameters
qDestination quotient (array of blocks)
rDestination rest (block)
src1Source dividende (array of blocks)
src2Source divisor (block)

Definition at line 1667 of file mphell-number.c.

◆ number_free()

void number_free ( number *  dst)

Free a number_ptr allocated on the RAM memory (malloc)

Parameters
dstAdress of the destination number_ptr to free

Definition at line 75 of file mphell-number.c.

◆ number_gcd()

void number_gcd ( number_ptr  dst,
number_srcptr  src1,
number_srcptr  src2 
)

Set dst to GCD(src1, src2)

Parameters
dstDestination (array block)
src1Source (array of blocks)
src2Source (array of blocks)

Definition at line 2477 of file mphell-number.c.

◆ number_gcd_ui()

void number_gcd_ui ( block *  dst,
number_srcptr  src1,
const block  src2 
)

Set dst to GCD(src1, src2)

Parameters
dstDestination block
src1Source (array of blocks)
src2Source block

Definition at line 2444 of file mphell-number.c.

◆ number_get_ui()

void number_get_ui ( block *  dst,
number_srcptr  src 
)

Get the less significant block of src.

Parameters
srcSource number
dstUnsigned integer

Definition at line 649 of file mphell-number.c.

◆ number_inc()

void number_inc ( number_ptr  dst,
number_srcptr  src 
)

Set dst to src + 1 if src + 1 fit in dst.

Parameters
dstDestination number
srcSource number

Definition at line 1347 of file mphell-number.c.

◆ number_init()

void number_init ( number *  dst,
const uint8_t  n 
)

Allocate a number_ptr on the RAM memory (malloc)

Parameters
dstAdress of the destination number
nNumber of block to allocate for t (ex: 4 for a 4 * 64 = 256 bits number_ptr on a 64 bits architecture)

Definition at line 59 of file mphell-number.c.

◆ number_inv_mod_basis()

void number_inv_mod_basis ( block *  dst,
const block  src 
)

Compute dst such that dst * (-src) = -1 mod (2^(BLOCK_SIZE))

Parameters
dstDestination (block)
srcSource (block)

Definition at line 1851 of file mphell-number.c.

◆ number_inv_montgomery()

void number_inv_montgomery ( number_ptr  dst,
number_srcptr  src,
number_srcptr  p,
const block  invp,
number_srcptr  R2,
number_srcptr  one,
uint8_t  stack 
)

Compute dst such that dst = src^(-1) mod(p) into the Montgomery form.

Parameters
dstDestination (array block)
srcSource (array of blocks)
pPrime number_ptr (array of blocks)
invpComputed with: number_inv_mod_basis(invp, p->limb[0]);
R2Square of the Montgomery basis
oneNeutral element for the multiplication
stackTemporary memory stack to use

Definition at line 2288 of file mphell-number.c.

◆ number_invmod()

void number_invmod ( number_ptr  dst,
number_srcptr  src1,
number_srcptr  src2 
)

Compute dst such that dst = src1^(-1) mod src2.

Parameters
dstDestination rest (array block)
src1Source (array of blocks)
src2Source modulus (array of blocks)

Definition at line 1797 of file mphell-number.c.

◆ number_isdiff()

bool number_isdiff ( number_srcptr  src1,
number_srcptr  src2 
)

Test if src1 != src2.

Parameters
src1Source number
src2Source number
Returns
true if src1 != src2
false if src1 == src2

Definition at line 805 of file mphell-number.c.

◆ number_isdiff_ui()

bool number_isdiff_ui ( number_srcptr  src1,
const block  src2 
)

Test if src1 != src2.

Parameters
src1Source number
src2Source block
Returns
true if src1 != src2
false if src1 == src2

Definition at line 795 of file mphell-number.c.

◆ number_isequal()

bool number_isequal ( number_srcptr  src1,
number_srcptr  src2 
)

Test if src1 == src2.

Parameters
src1Source number
src2Source number
Returns
true if src1 == src2
false if src1 != src2

Definition at line 781 of file mphell-number.c.

◆ number_isequal_ui()

bool number_isequal_ui ( number_srcptr  src1,
const block  src2 
)

Test if src1 == src2.

Parameters
src1Source number
src2Source block
Returns
true if src1 == src2
false if src1 != src2

Definition at line 758 of file mphell-number.c.

◆ number_iseven()

bool number_iseven ( number_srcptr  src)

Test if src is even.

Parameters
srcSource number
Returns
true if src == 0 % 2
false otherwise

Definition at line 991 of file mphell-number.c.

◆ number_isgreater()

bool number_isgreater ( number_srcptr  src1,
number_srcptr  src2 
)

Test if src1 > src2.

Parameters
src1Source number
src2Source number
Returns
true if src1 > src2
false otherwise

Definition at line 883 of file mphell-number.c.

◆ number_isgreater_ui()

bool number_isgreater_ui ( number_srcptr  src1,
const block  src2 
)

Test if src1 > src2.

Parameters
src1Source number
src2Source block
Returns
true if src1 > src2
false otherwise

Definition at line 856 of file mphell-number.c.

◆ number_isgreatereq()

bool number_isgreatereq ( number_srcptr  src1,
number_srcptr  src2 
)

Test if src1 >= src2.

Parameters
src1Source number
src2Source number
Returns
true if src1 >= src2
false otherwise

Definition at line 934 of file mphell-number.c.

◆ number_isgreatereq_ui()

bool number_isgreatereq_ui ( number_srcptr  src1,
const block  src2 
)

Test if src1 >= src2.

Parameters
src1Source number
src2Source block
Returns
true if src1 >= src2
false otherwise

Definition at line 922 of file mphell-number.c.

◆ number_islower()

bool number_islower ( number_srcptr  src1,
number_srcptr  src2 
)

Test if src1 < src2.

Parameters
src1Source number
src2Source number
Returns
true if src1 < src2
false otherwise

Definition at line 842 of file mphell-number.c.

◆ number_islower_ui()

bool number_islower_ui ( number_srcptr  src1,
const block  src2 
)

Test if src1 < src2.

Parameters
src1Source number
src2Source block
Returns
true if src1 < src2
false otherwise

Definition at line 815 of file mphell-number.c.

◆ number_islowereq()

bool number_islowereq ( number_srcptr  src1,
number_srcptr  src2 
)

Test if src1 <= src2.

Parameters
src1Source number
src2Source number
Returns
true if src1 <= src2
false otherwise

Definition at line 910 of file mphell-number.c.

◆ number_islowereq_ui()

bool number_islowereq_ui ( number_srcptr  src1,
const block  src2 
)

Test if src1 <= src2.

Parameters
src1Source number
src2Source block
Returns
true if src1 <= src2
false otherwise

Definition at line 898 of file mphell-number.c.

◆ number_isodd()

bool number_isodd ( number_srcptr  src)

Test if src is odd.

Parameters
srcSource number
Returns
true if src == 1 % 2
false otherwise

Definition at line 1005 of file mphell-number.c.

◆ number_iszero()

bool number_iszero ( number_srcptr  src)

Test if src is zero.

Parameters
srcSource number
Returns
true if src == 0
false otherwise

Definition at line 744 of file mphell-number.c.

◆ number_legendre()

int8_t number_legendre ( number_srcptr  src1,
number_srcptr  src2,
uint8_t  stack 
)

Compute the legendre symbole of src1 and src2.

Parameters
dstDestination (array block)
src1Source (array of blocks)
src2Source (array of blocks), must be a prime number
stackTemporary memory stack to use
Returns
O if p divide src2
1 if src1 is a square mod src2
-1 if src1 is not a square mod src2

Definition at line 2384 of file mphell-number.c.

◆ number_log2()

uint16_t number_log2 ( number_srcptr  src)

Calculate log2(src), which is the binary size of src.

Parameters
srcSource number
Returns
log2(src)

Definition at line 257 of file mphell-number.c.

◆ number_lshift()

void number_lshift ( number_ptr  dst,
number_srcptr  src,
const uint16_t  shift 
)

Set dst to src << shift.

Parameters
dstDestination number
srcSource number
shiftNumber of bits to shift

Definition at line 1263 of file mphell-number.c.

◆ number_mod()

void number_mod ( number_ptr  dst,
number_srcptr  src1,
number_srcptr  src2 
)

Compute dst such that src1 = q * src2 + dst ; dst < src2.

Parameters
dstDestination rest (array block)
src1Source dividende (array of blocks)
src2Source divisor (array of blocks)

Definition at line 1785 of file mphell-number.c.

◆ number_mod_ui()

void number_mod_ui ( block *  dst,
number_srcptr  src1,
const block  src2 
)

Compute dst such that src1 = q * src2 + dst ; dst < src2.

Parameters
dstDestination rest (block)
src1Source dividende (array of blocks)
src2Source divisor (block)

Definition at line 1751 of file mphell-number.c.

◆ number_mul()

void number_mul ( number_ptr  dst,
number_srcptr  src1,
number_srcptr  src2 
)

Set dst to src1 * src2.

Parameters
dstDestination number, must be of size == size(src1) * 2
src1Source number_ptr (array of blocks)
src2Source number_ptr (array of blocks) must be of size <= size(src1)

Definition at line 1425 of file mphell-number.c.

◆ number_mul_mod()

void static inline number_mul_mod ( number_ptr  dst,
number_srcptr  src1,
number_srcptr  src2,
number_srcptr  mod,
uint8_t  stack 
)

Set dst to (src1 * src2) % mod.

Parameters
dstDestination number, must be of size == size(mod)
src1Source number_ptr (array of blocks)
src2Source number_ptr (array of blocks) must be of size <= size(src1)
modModulus number
stackTemporary memory stack to use

Definition at line 1436 of file mphell-number.c.

◆ number_mul_montgomery()

void number_mul_montgomery ( number_ptr  dst,
number_srcptr  src1,
number_srcptr  src2,
number_srcptr  p,
const block  invp,
uint8_t  stack 
)

Compute dst such that dst = (src1 * src2) mod(p) into the Montgomery form.

Parameters
dstDestination (array block)
src1Source (array of blocks)
src2Source (array of blocks)
pPrime number_ptr (array of blocks)
invpComputed with: number_inv_mod_basis(invp, p->limb[0]);
stackTemporary memory stack to use

Definition at line 2241 of file mphell-number.c.

◆ number_mul_montgomery_block()

void number_mul_montgomery_block ( number_ptr  dst,
number_srcptr  src1,
number_srcptr  src2,
number_srcptr  p,
const block  invp,
uint8_t  stack 
)

Compute dst such that dst = (src1 * src2) mod(p) into the Montgomery form, use when SIZ(src1) or SIZ(src2) != SIZ(p)

Parameters
dstDestination (array block)
src1Source (array of blocks)
src2Source (array of blocks)
pPrime number_ptr (array of blocks)
invpComputed with: number_inv_mod_basis(invp, p->limb[0]);
stackTemporary memory stack to use

Definition at line 2268 of file mphell-number.c.

◆ number_mul_ui()

void number_mul_ui ( number_ptr  dst,
number_srcptr  src1,
const block  src2 
)

Set dst to src1 * src2.

Parameters
dstDestination number, must be of size >= size(src1) + 1
src1Source number_ptr (array of blocks)
src2Source number_ptr (block)

Definition at line 1389 of file mphell-number.c.

◆ number_or()

void number_or ( number_ptr  dst,
number_srcptr  src1,
number_srcptr  src2 
)

Apply logical bitwise OR operator between src1 and src2.

Parameters
dstDestination number
src1Source number
src2Source number

Definition at line 1111 of file mphell-number.c.

◆ number_or_ui()

void number_or_ui ( number_ptr  dst,
number_srcptr  src1,
const block  src2,
uint8_t  stack 
)

Apply logical bitwise OR operator between src1 and src2.

Parameters
dstDestination number
src1Source number
src2Source block
stackTemporary memory stack to use

Definition at line 1091 of file mphell-number.c.

◆ number_pow()

void number_pow ( number_ptr  dst,
number_srcptr  src1,
number_srcptr  src2,
uint8_t  stack 
)

Set dst to src1^src2.

Parameters
dstDestination number, must be of size == size(src1) * size(src2)
src1Source number_ptr (array of blocks)
src2Source number_ptr (array of blocks)
stackTemporary memory stack to use

Definition at line 1484 of file mphell-number.c.

◆ number_powm()

void number_powm ( number_ptr  dst,
number_srcptr  src1,
number_srcptr  src2,
number_srcptr  mod,
uint8_t  stack 
)

Set dst to src1^src2 modulo mod.

Parameters
dstDestination number, must be of size of mod
src1Source number_ptr (array of blocks)
src2Source number_ptr (array of blocks)
modModulus number_ptr (array of blocks)
stackTemporary memory stack to use

Definition at line 1541 of file mphell-number.c.

◆ number_powm_ui()

void number_powm_ui ( number_ptr  dst,
number_srcptr  src1,
const block  src2,
number_srcptr  mod,
uint8_t  stack 
)

Set dst to src1^src2 modulo mod.

Parameters
dstDestination number, must be of size of mod
src1Source number_ptr (array of blocks)
src2Source number_ptr (array of blocks)
modModulus number_ptr (array of blocks)
stackTemporary memory stack to use

Definition at line 1598 of file mphell-number.c.

◆ number_print()

void number_print ( number_srcptr  src,
const uint8_t  base 
)

Print src in base "base".

Parameters
srcSource number
baseBase to use to write str, can be 2, 10 or 16

Definition at line 715 of file mphell-number.c.

◆ number_Rabin_Miller()

uint8_t number_Rabin_Miller ( number_srcptr  src,
const uint16_t  bound 
)

Apply the Rabin-Miller test to src with the bound.

Parameters
srcSource (array of blocks)
boundPositive integer, 50 is a good choice
Returns
0 if src is not prime
2 if src is prime
1 if src is probably prime, a composite number_ptr will be identified as a prime with a probability less than 4^(-bound)

Definition at line 2489 of file mphell-number.c.

◆ number_random()

void number_random ( number_ptr  dst,
const uint32_t  size 
)

Set dst to a random number, the random process is chosen at the MPHELL initialisation. SIZ(dst) must be set before use.

Parameters
sizeNumber of block of dst
dstDestination number

Definition at line 200 of file mphell-number.c.

◆ number_random1()

void number_random1 ( number_ptr  dst,
number_srcptr  bound,
uint8_t  stack 
)

Set dst to a random number_ptr between 0 and bound, the random process is chosen at the MPHELL initialisation.

Parameters
dstDestination number
boundBound for the random number
stackTemporary memory stack to use

Definition at line 230 of file mphell-number.c.

◆ number_rshift()

void number_rshift ( number_ptr  dst,
number_srcptr  src,
const uint16_t  shift 
)

Set dst to src >> shift.

Parameters
dstDestination number
srcSource number
shiftNumber of bits to shift

Definition at line 1288 of file mphell-number.c.

◆ number_set()

void number_set ( number_ptr  dst,
const int8_t  sign,
const uint32_t  size,
  ... 
)

Set dst to [block_0, block_1, ..., block_(size-1)]. SIZ(dst) must be set before use.

Parameters
dstDestination number: dst <- [block_0, block_1, ..., block_(size-1)] where block_0 is the smallest and block_(size-1) the biggest
sign1 for positive number, -1 for negative number
sizeNumber of block that follow
...List of blocks

Definition at line 118 of file mphell-number.c.

◆ number_set_bit()

void number_set_bit ( number_ptr  dst,
const uint32_t  bit 
)

Set the bit-th of dst to 1, all the others to 0.

Parameters
bitBit to set to 1
dstDestination number

Definition at line 178 of file mphell-number.c.

◆ number_set_str()

void number_set_str ( number_ptr  dst,
const char *  str,
const uint8_t  base 
)

Set dst to str.

Parameters
dstDestination number
strSource number_ptr under string format in base "base"
baseBase used to write str, can be 2, 10 or 16

Definition at line 299 of file mphell-number.c.

◆ number_set_ui()

void number_set_ui ( number_ptr  dst,
const block  src 
)

Set dst to src.

Parameters
dstDestination number
srcSource block (uint32_t or uint64_t according to your architecture)

Definition at line 103 of file mphell-number.c.

◆ number_sqr()

void number_sqr ( number_ptr  dst,
number_srcptr  src 
)

Set dst to src1^2.

Parameters
dstDestination number, must be of size == size(src1) * 2
src1Source number_ptr (array of blocks)

Definition at line 1655 of file mphell-number.c.

◆ number_str()

void number_str ( char **  str,
number_srcptr  src,
const uint8_t  base 
)

Converts src to string format in base specified by base.

Parameters
strDestination string, allocated by the function, must be free by the user.
srcSource number
baseBase to use to write str, can be 2, 10 or 16

Definition at line 444 of file mphell-number.c.

◆ number_sub()

void number_sub ( number_ptr  dst,
number_srcptr  src1,
number_srcptr  src2 
)

Set dst to src1 - src2 if src1 - src2 fit in dst.

Parameters
dstDestination number
src1Source number_ptr (array of blocks)
src2Source number_ptr (array of blocks)

Definition at line 1370 of file mphell-number.c.

◆ number_sub_ui()

void number_sub_ui ( number_ptr  dst,
number_srcptr  src1,
const block  src2 
)

Set dst to src1 - src2 if src1 - src2 fit in dst.

Parameters
dstDestination number
src1Source number_ptr (array of blocks)
src2Source number_ptr (block)

Definition at line 1353 of file mphell-number.c.

◆ number_tmp_alloc()

void number_tmp_alloc ( number *  t,
const uint8_t  size,
uint8_t  stack 
)

Allocate a temporary number.

Parameters
tAdress of the destination number
sizeNumber of block to allocate for t (ex: 4 for a 4 * 64 = 256 bits number_ptr on a 64 bits architecture)
stackTemporary memory stack to use

Definition at line 31 of file mphell-number.c.

◆ number_tmp_free()

void number_tmp_free ( number *  t,
const uint8_t  size,
uint8_t  stack 
)

Free a temporary number.

Parameters
tAdress of the destination number_ptr to free
sizeNumber of block to allocate for t (ex: 4 for a 4 * 64 = 256 bits number_ptr on a 64 bits architecture)
stackTemporary memory stack to use

Definition at line 45 of file mphell-number.c.

◆ number_to_bit_string()

void number_to_bit_string ( char *  str,
number_srcptr  src 
)

Converts src (must be positive) to a bit string.

Parameters
strDestination string. Must be large enough.
srcSource number

Definition at line 665 of file mphell-number.c.

◆ number_xor()

void number_xor ( number_ptr  dst,
number_srcptr  src1,
number_srcptr  src2 
)

Apply logical bitwise XOR operator between src1 and src2.

Parameters
dstDestination number
src1Source number
src2Source number

Definition at line 1197 of file mphell-number.c.

◆ number_xor_ui()

void number_xor_ui ( number_ptr  dst,
number_srcptr  src1,
const block  src2,
uint8_t  stack 
)

Apply logical bitwise XOR operator between src1 and src2.

Parameters
dstDestination number
src1Source number
src2Source block
stackTemporary memory stack to use

Definition at line 1177 of file mphell-number.c.