Rtos API example

Embed: (wiki syntax)

« Back to documentation index

bignum.h File Reference

bignum.h File Reference

Multi-precision integer library. More...

Go to the source code of this file.

Data Structures

struct  mbedtls_mpi
 MPI structure. More...

Functions

void mbedtls_mpi_init (mbedtls_mpi *X)
 Initialize one MPI (make internal references valid) This just makes it ready to be set or freed, but does not define a value for the MPI.
void mbedtls_mpi_free (mbedtls_mpi *X)
 Unallocate one MPI.
int mbedtls_mpi_grow (mbedtls_mpi *X, size_t nblimbs)
 Enlarge to the specified number of limbs.
int mbedtls_mpi_shrink (mbedtls_mpi *X, size_t nblimbs)
 Resize down, keeping at least the specified number of limbs.
int mbedtls_mpi_copy (mbedtls_mpi *X, const mbedtls_mpi *Y)
 Copy the contents of Y into X.
void mbedtls_mpi_swap (mbedtls_mpi *X, mbedtls_mpi *Y)
 Swap the contents of X and Y.
int mbedtls_mpi_safe_cond_assign (mbedtls_mpi *X, const mbedtls_mpi *Y, unsigned char assign)
 Safe conditional assignement X = Y if assign is 1.
int mbedtls_mpi_safe_cond_swap (mbedtls_mpi *X, mbedtls_mpi *Y, unsigned char assign)
 Safe conditional swap X <-> Y if swap is 1.
int mbedtls_mpi_lset (mbedtls_mpi *X, mbedtls_mpi_sint z)
 Set value from integer.
int mbedtls_mpi_get_bit (const mbedtls_mpi *X, size_t pos)
 Get a specific bit from X.
int mbedtls_mpi_set_bit (mbedtls_mpi *X, size_t pos, unsigned char val)
 Set a bit of X to a specific value of 0 or 1.
size_t mbedtls_mpi_lsb (const mbedtls_mpi *X)
 Return the number of zero-bits before the least significant '1' bit.
size_t mbedtls_mpi_bitlen (const mbedtls_mpi *X)
 Return the number of bits up to and including the most significant '1' bit'.
size_t mbedtls_mpi_size (const mbedtls_mpi *X)
 Return the total size in bytes.
int mbedtls_mpi_read_string (mbedtls_mpi *X, int radix, const char *s)
 Import from an ASCII string.
int mbedtls_mpi_write_string (const mbedtls_mpi *X, int radix, char *buf, size_t buflen, size_t *olen)
 Export into an ASCII string.
int mbedtls_mpi_read_file (mbedtls_mpi *X, int radix, FILE *fin)
 Read MPI from a line in an opened file.
int mbedtls_mpi_write_file (const char *p, const mbedtls_mpi *X, int radix, FILE *fout)
 Write X into an opened file, or stdout if fout is NULL.
int mbedtls_mpi_read_binary (mbedtls_mpi *X, const unsigned char *buf, size_t buflen)
 Import X from unsigned binary data, big endian.
int mbedtls_mpi_write_binary (const mbedtls_mpi *X, unsigned char *buf, size_t buflen)
 Export X into unsigned binary data, big endian.
int mbedtls_mpi_shift_l (mbedtls_mpi *X, size_t count)
 Left-shift: X <<= count.
int mbedtls_mpi_shift_r (mbedtls_mpi *X, size_t count)
 Right-shift: X >>= count.
int mbedtls_mpi_cmp_abs (const mbedtls_mpi *X, const mbedtls_mpi *Y)
 Compare unsigned values.
int mbedtls_mpi_cmp_mpi (const mbedtls_mpi *X, const mbedtls_mpi *Y)
 Compare signed values.
int mbedtls_mpi_cmp_int (const mbedtls_mpi *X, mbedtls_mpi_sint z)
 Compare signed values.
int mbedtls_mpi_add_abs (mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi *B)
 Unsigned addition: X = |A| + |B|.
int mbedtls_mpi_sub_abs (mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi *B)
 Unsigned subtraction: X = |A| - |B|.
int mbedtls_mpi_add_mpi (mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi *B)
 Signed addition: X = A + B.
int mbedtls_mpi_sub_mpi (mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi *B)
 Signed subtraction: X = A - B.
int mbedtls_mpi_add_int (mbedtls_mpi *X, const mbedtls_mpi *A, mbedtls_mpi_sint b)
 Signed addition: X = A + b.
int mbedtls_mpi_sub_int (mbedtls_mpi *X, const mbedtls_mpi *A, mbedtls_mpi_sint b)
 Signed subtraction: X = A - b.
int mbedtls_mpi_mul_mpi (mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi *B)
 Baseline multiplication: X = A * B.
int mbedtls_mpi_mul_int (mbedtls_mpi *X, const mbedtls_mpi *A, mbedtls_mpi_uint b)
 Baseline multiplication: X = A * b.
int mbedtls_mpi_div_mpi (mbedtls_mpi *Q, mbedtls_mpi *R, const mbedtls_mpi *A, const mbedtls_mpi *B)
 Division by mbedtls_mpi: A = Q * B + R.
int mbedtls_mpi_div_int (mbedtls_mpi *Q, mbedtls_mpi *R, const mbedtls_mpi *A, mbedtls_mpi_sint b)
 Division by int: A = Q * b + R.
int mbedtls_mpi_mod_mpi (mbedtls_mpi *R, const mbedtls_mpi *A, const mbedtls_mpi *B)
 Modulo: R = A mod B.
int mbedtls_mpi_mod_int (mbedtls_mpi_uint *r, const mbedtls_mpi *A, mbedtls_mpi_sint b)
 Modulo: r = A mod b.
int mbedtls_mpi_exp_mod (mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi *E, const mbedtls_mpi *N, mbedtls_mpi *_RR)
 Sliding-window exponentiation: X = A^E mod N.
int mbedtls_mpi_fill_random (mbedtls_mpi *X, size_t size, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng)
 Fill an MPI X with size bytes of random.
int mbedtls_mpi_gcd (mbedtls_mpi *G, const mbedtls_mpi *A, const mbedtls_mpi *B)
 Greatest common divisor: G = gcd(A, B)
int mbedtls_mpi_inv_mod (mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi *N)
 Modular inverse: X = A^-1 mod N.
int mbedtls_mpi_is_prime (const mbedtls_mpi *X, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng)
 Miller-Rabin primality test.
int mbedtls_mpi_gen_prime (mbedtls_mpi *X, size_t nbits, int dh_flag, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng)
 Prime number generation.
int mbedtls_mpi_self_test (int verbose)
 Checkup routine.

Detailed Description

Multi-precision integer library.

Copyright (C) 2006-2015, ARM Limited, All Rights Reserved SPDX-License-Identifier: Apache-2.0

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

This file is part of mbed TLS (https://tls.mbed.org)

Definition in file bignum.h.


Function Documentation

int mbedtls_mpi_add_abs ( mbedtls_mpi X,
const mbedtls_mpi A,
const mbedtls_mpi B 
)

Unsigned addition: X = |A| + |B|.

Parameters:
XDestination MPI
ALeft-hand MPI
BRight-hand MPI
Returns:
0 if successful, MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed

Definition at line 887 of file bignum.c.

int mbedtls_mpi_add_int ( mbedtls_mpi X,
const mbedtls_mpi A,
mbedtls_mpi_sint  b 
)

Signed addition: X = A + b.

Parameters:
XDestination MPI
ALeft-hand MPI
bThe integer value to add
Returns:
0 if successful, MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed

Definition at line 1069 of file bignum.c.

int mbedtls_mpi_add_mpi ( mbedtls_mpi X,
const mbedtls_mpi A,
const mbedtls_mpi B 
)

Signed addition: X = A + B.

Parameters:
XDestination MPI
ALeft-hand MPI
BRight-hand MPI
Returns:
0 if successful, MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed

Definition at line 1007 of file bignum.c.

size_t mbedtls_mpi_bitlen ( const mbedtls_mpi X )

Return the number of bits up to and including the most significant '1' bit'.

Note: Thus also the one-based index of the most significant '1' bit

Parameters:
XMPI to use

Definition at line 380 of file bignum.c.

int mbedtls_mpi_cmp_abs ( const mbedtls_mpi X,
const mbedtls_mpi Y 
)

Compare unsigned values.

Parameters:
XLeft-hand MPI
YRight-hand MPI
Returns:
1 if |X| is greater than |Y|, -1 if |X| is lesser than |Y| or 0 if |X| is equal to |Y|

Definition at line 808 of file bignum.c.

int mbedtls_mpi_cmp_int ( const mbedtls_mpi X,
mbedtls_mpi_sint  z 
)

Compare signed values.

Parameters:
XLeft-hand MPI
zThe integer value to compare to
Returns:
1 if X is greater than z, -1 if X is lesser than z or 0 if X is equal to z

Definition at line 871 of file bignum.c.

int mbedtls_mpi_cmp_mpi ( const mbedtls_mpi X,
const mbedtls_mpi Y 
)

Compare signed values.

Parameters:
XLeft-hand MPI
YRight-hand MPI
Returns:
1 if X is greater than Y, -1 if X is lesser than Y or 0 if X is equal to Y

Definition at line 838 of file bignum.c.

int mbedtls_mpi_copy ( mbedtls_mpi X,
const mbedtls_mpi Y 
)

Copy the contents of Y into X.

Parameters:
XDestination MPI
YSource MPI
Returns:
0 if successful, MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed

Definition at line 180 of file bignum.c.

int mbedtls_mpi_div_int ( mbedtls_mpi Q,
mbedtls_mpi R,
const mbedtls_mpi A,
mbedtls_mpi_sint  b 
)

Division by int: A = Q * b + R.

Parameters:
QDestination MPI for the quotient
RDestination MPI for the rest value
ALeft-hand MPI
bInteger to divide by
Returns:
0 if successful, MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed, MBEDTLS_ERR_MPI_DIVISION_BY_ZERO if b == 0
Note:
Either Q or R can be NULL.

Definition at line 1437 of file bignum.c.

int mbedtls_mpi_div_mpi ( mbedtls_mpi Q,
mbedtls_mpi R,
const mbedtls_mpi A,
const mbedtls_mpi B 
)

Division by mbedtls_mpi: A = Q * B + R.

Parameters:
QDestination MPI for the quotient
RDestination MPI for the rest value
ALeft-hand MPI
BRight-hand MPI
Returns:
0 if successful, MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed, MBEDTLS_ERR_MPI_DIVISION_BY_ZERO if B == 0
Note:
Either Q or R can be NULL.

Definition at line 1322 of file bignum.c.

int mbedtls_mpi_exp_mod ( mbedtls_mpi X,
const mbedtls_mpi A,
const mbedtls_mpi E,
const mbedtls_mpi N,
mbedtls_mpi _RR 
)

Sliding-window exponentiation: X = A^E mod N.

Parameters:
XDestination MPI
ALeft-hand MPI
EExponent MPI
NModular MPI
_RRSpeed-up MPI used for recalculations
Returns:
0 if successful, MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed, MBEDTLS_ERR_MPI_BAD_INPUT_DATA if N is negative or even or if E is negative
Note:
_RR is used to avoid re-computing R*R mod N across multiple calls, which speeds up things a bit. It can be set to NULL if the extra performance is unneeded.

Definition at line 1607 of file bignum.c.

int mbedtls_mpi_fill_random ( mbedtls_mpi X,
size_t  size,
int(*)(void *, unsigned char *, size_t)  f_rng,
void *  p_rng 
)

Fill an MPI X with size bytes of random.

Parameters:
XDestination MPI
sizeSize in bytes
f_rngRNG function
p_rngRNG parameter
Returns:
0 if successful, MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed

Definition at line 1871 of file bignum.c.

void mbedtls_mpi_free ( mbedtls_mpi X )

Unallocate one MPI.

Parameters:
XOne MPI to unallocate.

Definition at line 95 of file bignum.c.

int mbedtls_mpi_gcd ( mbedtls_mpi G,
const mbedtls_mpi A,
const mbedtls_mpi B 
)

Greatest common divisor: G = gcd(A, B)

Parameters:
GDestination MPI
ALeft-hand MPI
BRight-hand MPI
Returns:
0 if successful, MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed

Definition at line 1815 of file bignum.c.

int mbedtls_mpi_gen_prime ( mbedtls_mpi X,
size_t  nbits,
int  dh_flag,
int(*)(void *, unsigned char *, size_t)  f_rng,
void *  p_rng 
)

Prime number generation.

Parameters:
XDestination MPI
nbitsRequired size of X in bits ( 3 <= nbits <= MBEDTLS_MPI_MAX_BITS )
dh_flagIf 1, then (X-1)/2 will be prime too
f_rngRNG function
p_rngRNG parameter
Returns:
0 if successful (probably prime), MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed, MBEDTLS_ERR_MPI_BAD_INPUT_DATA if nbits is < 3

Definition at line 2182 of file bignum.c.

int mbedtls_mpi_get_bit ( const mbedtls_mpi X,
size_t  pos 
)

Get a specific bit from X.

Parameters:
XMPI to use
posZero-based index of the bit in X
Returns:
Either a 0 or a 1

Definition at line 308 of file bignum.c.

int mbedtls_mpi_grow ( mbedtls_mpi X,
size_t  nblimbs 
)

Enlarge to the specified number of limbs.

Parameters:
XMPI to grow
nblimbsThe target number of limbs
Returns:
0 if successful, MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed

Definition at line 114 of file bignum.c.

void mbedtls_mpi_init ( mbedtls_mpi X )

Initialize one MPI (make internal references valid) This just makes it ready to be set or freed, but does not define a value for the MPI.

Parameters:
XOne MPI to initialize.

Definition at line 82 of file bignum.c.

int mbedtls_mpi_inv_mod ( mbedtls_mpi X,
const mbedtls_mpi A,
const mbedtls_mpi N 
)

Modular inverse: X = A^-1 mod N.

Parameters:
XDestination MPI
ALeft-hand MPI
NRight-hand MPI
Returns:
0 if successful, MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed, MBEDTLS_ERR_MPI_BAD_INPUT_DATA if N is <= 1, MBEDTLS_ERR_MPI_NOT_ACCEPTABLE if A has no inverse mod N.

Definition at line 1891 of file bignum.c.

int mbedtls_mpi_is_prime ( const mbedtls_mpi X,
int(*)(void *, unsigned char *, size_t)  f_rng,
void *  p_rng 
)

Miller-Rabin primality test.

Parameters:
XMPI to check
f_rngRNG function
p_rngRNG parameter
Returns:
0 if successful (probably prime), MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed, MBEDTLS_ERR_MPI_NOT_ACCEPTABLE if X is not prime

Definition at line 2150 of file bignum.c.

size_t mbedtls_mpi_lsb ( const mbedtls_mpi X )

Return the number of zero-bits before the least significant '1' bit.

Note: Thus also the zero-based index of the least significant '1' bit

Parameters:
XMPI to use

Definition at line 347 of file bignum.c.

int mbedtls_mpi_lset ( mbedtls_mpi X,
mbedtls_mpi_sint  z 
)

Set value from integer.

Parameters:
XMPI to set
zValue to use
Returns:
0 if successful, MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed

Definition at line 290 of file bignum.c.

int mbedtls_mpi_mod_int ( mbedtls_mpi_uint *  r,
const mbedtls_mpi A,
mbedtls_mpi_sint  b 
)

Modulo: r = A mod b.

Parameters:
rDestination mbedtls_mpi_uint
ALeft-hand MPI
bInteger to divide by
Returns:
0 if successful, MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed, MBEDTLS_ERR_MPI_DIVISION_BY_ZERO if b == 0, MBEDTLS_ERR_MPI_NEGATIVE_VALUE if b < 0

Definition at line 1476 of file bignum.c.

int mbedtls_mpi_mod_mpi ( mbedtls_mpi R,
const mbedtls_mpi A,
const mbedtls_mpi B 
)

Modulo: R = A mod B.

Parameters:
RDestination MPI for the rest value
ALeft-hand MPI
BRight-hand MPI
Returns:
0 if successful, MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed, MBEDTLS_ERR_MPI_DIVISION_BY_ZERO if B == 0, MBEDTLS_ERR_MPI_NEGATIVE_VALUE if B < 0

Definition at line 1453 of file bignum.c.

int mbedtls_mpi_mul_int ( mbedtls_mpi X,
const mbedtls_mpi A,
mbedtls_mpi_uint  b 
)

Baseline multiplication: X = A * b.

Parameters:
XDestination MPI
ALeft-hand MPI
bThe unsigned integer value to multiply with
Note:
b is unsigned
Returns:
0 if successful, MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed

Definition at line 1210 of file bignum.c.

int mbedtls_mpi_mul_mpi ( mbedtls_mpi X,
const mbedtls_mpi A,
const mbedtls_mpi B 
)

Baseline multiplication: X = A * B.

Parameters:
XDestination MPI
ALeft-hand MPI
BRight-hand MPI
Returns:
0 if successful, MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed

Definition at line 1173 of file bignum.c.

int mbedtls_mpi_read_binary ( mbedtls_mpi X,
const unsigned char *  buf,
size_t  buflen 
)

Import X from unsigned binary data, big endian.

Parameters:
XDestination MPI
bufInput buffer
buflenInput buffer size
Returns:
0 if successful, MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed

Definition at line 672 of file bignum.c.

int mbedtls_mpi_read_file ( mbedtls_mpi X,
int  radix,
FILE *  fin 
)

Read MPI from a line in an opened file.

Parameters:
XDestination MPI
radixInput numeric base
finInput file handle
Returns:
0 if successful, MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL if the file read buffer is too small or a MBEDTLS_ERR_MPI_XXX error code
Note:
On success, this function advances the file stream to the end of the current line or to EOF.

The function returns 0 on an empty line.

Leading whitespaces are ignored, as is a '0x' prefix for radix 16.

Definition at line 600 of file bignum.c.

int mbedtls_mpi_read_string ( mbedtls_mpi X,
int  radix,
const char *  s 
)

Import from an ASCII string.

Parameters:
XDestination MPI
radixInput numeric base
sNull-terminated string buffer
Returns:
0 if successful, or a MBEDTLS_ERR_MPI_XXX error code

Definition at line 424 of file bignum.c.

int mbedtls_mpi_safe_cond_assign ( mbedtls_mpi X,
const mbedtls_mpi Y,
unsigned char  assign 
)

Safe conditional assignement X = Y if assign is 1.

Parameters:
XMPI to conditionally assign to
YValue to be assigned
assign1: perform the assignment, 0: keep X's original value
Returns:
0 if successful, MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed,
Note:
This function is equivalent to if( assign ) mbedtls_mpi_copy( X, Y ); except that it avoids leaking any information about whether the assignment was done or not (the above code may leak information through branch prediction and/or memory access patterns analysis).

Definition at line 228 of file bignum.c.

int mbedtls_mpi_safe_cond_swap ( mbedtls_mpi X,
mbedtls_mpi Y,
unsigned char  assign 
)

Safe conditional swap X <-> Y if swap is 1.

Parameters:
XFirst mbedtls_mpi value
YSecond mbedtls_mpi value
assign1: perform the swap, 0: keep X and Y's original values
Returns:
0 if successful, MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed,
Note:
This function is equivalent to if( assign ) mbedtls_mpi_swap( X, Y ); except that it avoids leaking any information about whether the assignment was done or not (the above code may leak information through branch prediction and/or memory access patterns analysis).

Definition at line 256 of file bignum.c.

int mbedtls_mpi_self_test ( int  verbose )

Checkup routine.

Returns:
0 if successful, or 1 if the test failed

Definition at line 2287 of file bignum.c.

int mbedtls_mpi_set_bit ( mbedtls_mpi X,
size_t  pos,
unsigned char  val 
)

Set a bit of X to a specific value of 0 or 1.

Note:
Will grow X if necessary to set a bit to 1 in a not yet existing limb. Will not grow if bit should be set to 0
Parameters:
XMPI to use
posZero-based index of the bit in X
valThe value to set the bit to (0 or 1)
Returns:
0 if successful, MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed, MBEDTLS_ERR_MPI_BAD_INPUT_DATA if val is not 0 or 1

Definition at line 319 of file bignum.c.

int mbedtls_mpi_shift_l ( mbedtls_mpi X,
size_t  count 
)

Left-shift: X <<= count.

Parameters:
XMPI to shift
countAmount to shift
Returns:
0 if successful, MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed

Definition at line 715 of file bignum.c.

int mbedtls_mpi_shift_r ( mbedtls_mpi X,
size_t  count 
)

Right-shift: X >>= count.

Parameters:
XMPI to shift
countAmount to shift
Returns:
0 if successful, MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed

Definition at line 765 of file bignum.c.

int mbedtls_mpi_shrink ( mbedtls_mpi X,
size_t  nblimbs 
)

Resize down, keeping at least the specified number of limbs.

Parameters:
XMPI to shrink
nblimbsThe minimum number of limbs to keep
Returns:
0 if successful, MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed

Definition at line 144 of file bignum.c.

size_t mbedtls_mpi_size ( const mbedtls_mpi X )

Return the total size in bytes.

Parameters:
XMPI to use

Definition at line 399 of file bignum.c.

int mbedtls_mpi_sub_abs ( mbedtls_mpi X,
const mbedtls_mpi A,
const mbedtls_mpi B 
)

Unsigned subtraction: X = |A| - |B|.

Parameters:
XDestination MPI
ALeft-hand MPI
BRight-hand MPI
Returns:
0 if successful, MBEDTLS_ERR_MPI_NEGATIVE_VALUE if B is greater than A

Definition at line 964 of file bignum.c.

int mbedtls_mpi_sub_int ( mbedtls_mpi X,
const mbedtls_mpi A,
mbedtls_mpi_sint  b 
)

Signed subtraction: X = A - b.

Parameters:
XDestination MPI
ALeft-hand MPI
bThe integer value to subtract
Returns:
0 if successful, MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed

Definition at line 1085 of file bignum.c.

int mbedtls_mpi_sub_mpi ( mbedtls_mpi X,
const mbedtls_mpi A,
const mbedtls_mpi B 
)

Signed subtraction: X = A - B.

Parameters:
XDestination MPI
ALeft-hand MPI
BRight-hand MPI
Returns:
0 if successful, MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed

Definition at line 1038 of file bignum.c.

void mbedtls_mpi_swap ( mbedtls_mpi X,
mbedtls_mpi Y 
)

Swap the contents of X and Y.

Parameters:
XFirst MPI value
YSecond MPI value

Definition at line 214 of file bignum.c.

int mbedtls_mpi_write_binary ( const mbedtls_mpi X,
unsigned char *  buf,
size_t  buflen 
)

Export X into unsigned binary data, big endian.

Always fills the whole buffer, which will start with zeros if the number is smaller.

Parameters:
XSource MPI
bufOutput buffer
buflenOutput buffer size
Returns:
0 if successful, MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL if buf isn't large enough

Definition at line 695 of file bignum.c.

int mbedtls_mpi_write_file ( const char *  p,
const mbedtls_mpi X,
int  radix,
FILE *  fout 
)

Write X into an opened file, or stdout if fout is NULL.

Parameters:
pPrefix, can be NULL
XSource MPI
radixOutput numeric base
foutOutput file handle (can be NULL)
Returns:
0 if successful, or a MBEDTLS_ERR_MPI_XXX error code
Note:
Set fout == NULL to print X on the console.

Definition at line 633 of file bignum.c.

int mbedtls_mpi_write_string ( const mbedtls_mpi X,
int  radix,
char *  buf,
size_t  buflen,
size_t *  olen 
)

Export into an ASCII string.

Parameters:
XSource MPI
radixOutput numeric base
bufBuffer to write the string to
buflenLength of buf
olenLength of the string written, including final NUL byte
Returns:
0 if successful, or a MBEDTLS_ERR_MPI_XXX error code. *olen is always updated to reflect the amount of data that has (or would have) been written.
Note:
Call this function with buflen = 0 to obtain the minimum required buffer size in *olen.

Definition at line 523 of file bignum.c.