Webserver+3d print

Dependents:   Nucleo

Embed: (wiki syntax)

« Back to documentation index

mpi.h File Reference

mpi.h File Reference

MPI (Multiple Precision Integer Arithmetic) More...

Go to the source code of this file.

Data Structures

struct  Mpi
 Arbitrary precision integer. More...

Functions

void mpiInit (Mpi *r)
 Initialize a multiple precision integer.
void mpiFree (Mpi *r)
 Release a multiple precision integer.
error_t mpiGrow (Mpi *r, uint_t size)
 Adjust the size of multiple precision integer.
uint_t mpiGetLength (const Mpi *a)
 Get the actual length in words.
uint_t mpiGetByteLength (const Mpi *a)
 Get the actual length in bytes.
uint_t mpiGetBitLength (const Mpi *a)
 Get the actual length in bits.
error_t mpiSetBitValue (Mpi *r, uint_t index, uint_t value)
 Set the bit value at the specified index.
uint_t mpiGetBitValue (const Mpi *a, uint_t index)
 Get the bit value at the specified index.
int_t mpiComp (const Mpi *a, const Mpi *b)
 Compare two multiple precision integers.
int_t mpiCompInt (const Mpi *a, int_t b)
 Compare a multiple precision integer with an integer.
int_t mpiCompAbs (const Mpi *a, const Mpi *b)
 Compare the absolute value of two multiple precision integers.
error_t mpiCopy (Mpi *r, const Mpi *a)
 Copy a multiple precision integer.
error_t mpiSetValue (Mpi *a, int_t b)
 Set the value of a multiple precision integer.
error_t mpiRand (Mpi *r, uint_t length, const PrngAlgo *prngAlgo, void *prngContext)
 Generate a random value.
error_t mpiReadRaw (Mpi *r, const uint8_t *data, uint_t length)
 Octet string to integer conversion.
error_t mpiWriteRaw (const Mpi *a, uint8_t *data, uint_t length)
 Integer to octet string conversion.
error_t mpiAdd (Mpi *r, const Mpi *a, const Mpi *b)
 Multiple precision addition.
error_t mpiAddInt (Mpi *r, const Mpi *a, int_t b)
 Add an integer to a multiple precision integer.
error_t mpiSub (Mpi *r, const Mpi *a, const Mpi *b)
 Multiple precision subtraction.
error_t mpiSubInt (Mpi *r, const Mpi *a, int_t b)
 Subtract an integer from a multiple precision integer.
error_t mpiAddAbs (Mpi *r, const Mpi *a, const Mpi *b)
 Helper routine for multiple precision addition.
error_t mpiSubAbs (Mpi *r, const Mpi *a, const Mpi *b)
 Helper routine for multiple precision subtraction.
error_t mpiShiftLeft (Mpi *r, uint_t n)
 Left shift operation.
error_t mpiShiftRight (Mpi *r, uint_t n)
 Right shift operation.
error_t mpiMul (Mpi *r, const Mpi *a, const Mpi *b)
 Multiple precision multiplication.
error_t mpiMulInt (Mpi *r, const Mpi *a, int_t b)
 Multiply a multiple precision integer by an integer.
error_t mpiDiv (Mpi *q, Mpi *r, const Mpi *a, const Mpi *b)
 Multiple precision division.
error_t mpiDivInt (Mpi *q, Mpi *r, const Mpi *a, int_t b)
 Divide a multiple precision integer by an integer.
error_t mpiMod (Mpi *r, const Mpi *a, const Mpi *p)
 Modulo operation.
error_t mpiAddMod (Mpi *r, const Mpi *a, const Mpi *b, const Mpi *p)
 Modular addition.
error_t mpiSubMod (Mpi *r, const Mpi *a, const Mpi *b, const Mpi *p)
 Modular subtraction.
error_t mpiMulMod (Mpi *r, const Mpi *a, const Mpi *b, const Mpi *p)
 Modular multiplication.
error_t mpiInvMod (Mpi *r, const Mpi *a, const Mpi *p)
 Modular inverse.
error_t mpiExpMod (Mpi *r, const Mpi *a, const Mpi *e, const Mpi *p)
 Modular exponentiation.
error_t mpiMontgomeryMul (Mpi *r, const Mpi *a, const Mpi *b, uint_t k, const Mpi *p, Mpi *t)
 Montgomery multiplication.
error_t mpiMontgomeryRed (Mpi *r, const Mpi *a, uint_t k, const Mpi *p, Mpi *t)
 Montgomery reduction.
void mpiMulAccCore (uint_t *r, const uint_t *a, int_t m, const uint_t b)
 Multiply-accumulate operation.
void mpiDump (FILE *stream, const char_t *prepend, const Mpi *a)
 Display the contents of a multiple precision integer.

Detailed Description

MPI (Multiple Precision Integer Arithmetic)

License

Copyright (C) 2010-2017 Oryx Embedded SARL. All rights reserved.

This file is part of CycloneCrypto Open.

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

Author:
Oryx Embedded SARL (www.oryx-embedded.com)
Version:
1.7.6

Definition in file mpi.h.


Function Documentation

error_t mpiAdd ( Mpi r,
const Mpi a,
const Mpi b 
)

Multiple precision addition.

Parameters:
[out]rResulting integer R = A + B
[in]aFirst operand A
[in]bSecond operand B
Returns:
Error code

Definition at line 591 of file mpi.c.

error_t mpiAddAbs ( Mpi r,
const Mpi a,
const Mpi b 
)

Helper routine for multiple precision addition.

Parameters:
[out]rResulting integer R = |A + B|
[in]aFirst operand A
[in]bSecond operand B
Returns:
Error code

Definition at line 737 of file mpi.c.

error_t mpiAddInt ( Mpi r,
const Mpi a,
int_t  b 
)

Add an integer to a multiple precision integer.

Parameters:
[out]rResulting integer R = A + B
[in]aFirst operand A
[in]bSecond operand B
Returns:
Error code

Definition at line 640 of file mpi.c.

error_t mpiAddMod ( Mpi r,
const Mpi a,
const Mpi b,
const Mpi p 
)

Modular addition.

Parameters:
[out]rResulting integer R = A + B mod P
[in]aThe first operand A
[in]bThe second operand B
[in]pThe modulus P
Returns:
Error code

Definition at line 1259 of file mpi.c.

int_t mpiComp ( const Mpi a,
const Mpi b 
)

Compare two multiple precision integers.

Parameters:
[in]aThe first multiple precision integer to be compared
[in]bThe second multiple precision integer to be compared
Returns:
Comparison result

Definition at line 289 of file mpi.c.

int_t mpiCompAbs ( const Mpi a,
const Mpi b 
)

Compare the absolute value of two multiple precision integers.

Parameters:
[in]aThe first multiple precision integer to be compared
[in]bThe second multiple precision integer to be compared
Returns:
Comparison result

Definition at line 356 of file mpi.c.

int_t mpiCompInt ( const Mpi a,
int_t  b 
)

Compare a multiple precision integer with an integer.

Parameters:
[in]aMultiple precision integer to be compared
[in]bInteger to be compared
Returns:
Comparison result

Definition at line 333 of file mpi.c.

error_t mpiCopy ( Mpi r,
const Mpi a 
)

Copy a multiple precision integer.

Parameters:
[out]rPointer to a multiple precision integer (destination)
[in]aPointer to a multiple precision integer (source)
Returns:
Error code

Definition at line 394 of file mpi.c.

error_t mpiDiv ( Mpi q,
Mpi r,
const Mpi a,
const Mpi b 
)

Multiple precision division.

Parameters:
[out]qThe quotient Q = A / B
[out]rThe remainder R = A mod B
[in]aThe dividend A
[in]bThe divisor B
Returns:
Error code

Definition at line 1103 of file mpi.c.

error_t mpiDivInt ( Mpi q,
Mpi r,
const Mpi a,
int_t  b 
)

Divide a multiple precision integer by an integer.

Parameters:
[out]qThe quotient Q = A / B
[out]rThe remainder R = A mod B
[in]aThe dividend A
[in]bThe divisor B
Returns:
Error code

Definition at line 1170 of file mpi.c.

void mpiDump ( FILE *  stream,
const char_t *  prepend,
const Mpi a 
)

Display the contents of a multiple precision integer.

Parameters:
[in]streamPointer to a FILE object that identifies an output stream
[in]prependString to prepend to the left of each line
[in]aPointer to a multiple precision integer

Definition at line 1735 of file mpi.c.

error_t mpiExpMod ( Mpi r,
const Mpi a,
const Mpi e,
const Mpi p 
)

Modular exponentiation.

Parameters:
[out]rResulting integer R = A ^ E mod P
[in]aPointer to a multiple precision integer
[in]eExponent
[in]pModulus
Returns:
Error code

Definition at line 1403 of file mpi.c.

void mpiFree ( Mpi r )

Release a multiple precision integer.

Parameters:
[in,out]rPointer to the multiple precision integer to be freed

Definition at line 62 of file mpi.c.

uint_t mpiGetBitLength ( const Mpi a )

Get the actual length in bits.

Parameters:
[in]aPointer to a multiple precision integer
Returns:
The actual bit count

Definition at line 192 of file mpi.c.

uint_t mpiGetBitValue ( const Mpi a,
uint_t  index 
)

Get the bit value at the specified index.

Parameters:
[in]aPointer to a multiple precision integer
[in]indexPosition where to read the bit
Returns:
The actual bit value

Definition at line 264 of file mpi.c.

uint_t mpiGetByteLength ( const Mpi a )

Get the actual length in bytes.

Parameters:
[in]aPointer to a multiple precision integer
Returns:
The actual byte count

Definition at line 156 of file mpi.c.

uint_t mpiGetLength ( const Mpi a )

Get the actual length in words.

Parameters:
[in]aPointer to a multiple precision integer
Returns:
The actual length in words

Definition at line 129 of file mpi.c.

error_t mpiGrow ( Mpi r,
uint_t  size 
)

Adjust the size of multiple precision integer.

Parameters:
[in,out]rA multiple precision integer whose size is to be increased
[in]sizeDesired size in words
Returns:
Error code

Definition at line 85 of file mpi.c.

void mpiInit ( Mpi r )

Initialize a multiple precision integer.

Parameters:
[in,out]rPointer to the multiple precision integer to be initialized

Definition at line 48 of file mpi.c.

error_t mpiInvMod ( Mpi r,
const Mpi a,
const Mpi p 
)

Modular inverse.

Parameters:
[out]rResulting integer R = A^-1 mod P
[in]aThe multiple precision integer A
[in]pThe modulus P
Returns:
Error code

Definition at line 1327 of file mpi.c.

error_t mpiMod ( Mpi r,
const Mpi a,
const Mpi p 
)

Modulo operation.

Parameters:
[out]rResulting integer R = A mod P
[in]aThe multiple precision integer to be reduced
[in]pThe modulus P
Returns:
Error code

Definition at line 1194 of file mpi.c.

error_t mpiMontgomeryMul ( Mpi r,
const Mpi a,
const Mpi b,
uint_t  k,
const Mpi p,
Mpi t 
)

Montgomery multiplication.

Parameters:
[out]rResulting integer R = A * B / 2^k mod P
[in]aAn integer A such as 0 <= A < 2^k
[in]bAn integer B such as 0 <= B < 2^k
[in]kAn integer k such as P < 2^k
[in]pModulus P
[in]tAn preallocated integer T (for internal operation)
Returns:
Error code

Definition at line 1591 of file mpi.c.

error_t mpiMontgomeryRed ( Mpi r,
const Mpi a,
uint_t  k,
const Mpi p,
Mpi t 
)

Montgomery reduction.

Parameters:
[out]rResulting integer R = A / 2^k mod P
[in]aAn integer A such as 0 <= A < 2^k
[in]kAn integer k such as P < 2^k
[in]pModulus P
[in]tAn preallocated integer T (for internal operation)
Returns:
Error code

Definition at line 1661 of file mpi.c.

error_t mpiMul ( Mpi r,
const Mpi a,
const Mpi b 
)

Multiple precision multiplication.

Parameters:
[out]rResulting integer R = A * B
[in]aFirst operand A
[in]bSecond operand B
Returns:
Error code

Definition at line 1005 of file mpi.c.

void mpiMulAccCore ( uint_t *  r,
const uint_t *  a,
int_t  m,
const uint_t  b 
)

Multiply-accumulate operation.

Parameters:
[out]rResulting integer
[in]aFirst operand A
[in]mSize of A in words
[in]bSecond operand B

Definition at line 1687 of file mpi.c.

error_t mpiMulInt ( Mpi r,
const Mpi a,
int_t  b 
)

Multiply a multiple precision integer by an integer.

Parameters:
[out]rResulting integer R = A * B
[in]aFirst operand A
[in]bSecond operand B
Returns:
Error code

Definition at line 1078 of file mpi.c.

error_t mpiMulMod ( Mpi r,
const Mpi a,
const Mpi b,
const Mpi p 
)

Modular multiplication.

Parameters:
[out]rResulting integer R = A * B mod P
[in]aThe first operand A
[in]bThe second operand B
[in]pThe modulus P
Returns:
Error code

Definition at line 1305 of file mpi.c.

error_t mpiRand ( Mpi r,
uint_t  length,
const PrngAlgo prngAlgo,
void *  prngContext 
)

Generate a random value.

Parameters:
[out]rPointer to a multiple precision integer
[in]lengthDesired length in bits
[in]prngAlgoPRNG algorithm
[in]prngContextPointer to the PRNG context
Returns:
Error code

Definition at line 462 of file mpi.c.

error_t mpiReadRaw ( Mpi r,
const uint8_t *  data,
uint_t  length 
)

Octet string to integer conversion.

Converts an octet string to a non-negative integer

Parameters:
[out]rNon-negative integer resulting from the conversion
[in]dataOctet string to be converted
[in]lengthLength of the octet string
Returns:
Error code

Definition at line 510 of file mpi.c.

error_t mpiSetBitValue ( Mpi r,
uint_t  index,
uint_t  value 
)

Set the bit value at the specified index.

Parameters:
[in]rPointer to a multiple precision integer
[in]indexPosition of the bit to be written
[in]valueBit value
Returns:
Error code

Definition at line 230 of file mpi.c.

error_t mpiSetValue ( Mpi r,
int_t  a 
)

Set the value of a multiple precision integer.

Parameters:
[out]rPointer to a multiple precision integer
[in]aValue to be assigned to the multiple precision integer
Returns:
Error code

Definition at line 431 of file mpi.c.

error_t mpiShiftLeft ( Mpi r,
uint_t  n 
)

Left shift operation.

Parameters:
[in,out]rThe multiple precision integer to be shifted to the left
[in]nThe number of bits to shift
Returns:
Error code

Definition at line 903 of file mpi.c.

error_t mpiShiftRight ( Mpi r,
uint_t  n 
)

Right shift operation.

Parameters:
[in,out]rThe multiple precision integer to be shifted to the right
[in]nThe number of bits to shift
Returns:
Error code

Definition at line 955 of file mpi.c.

error_t mpiSub ( Mpi r,
const Mpi a,
const Mpi b 
)

Multiple precision subtraction.

Parameters:
[out]rResulting integer R = A - B
[in]aFirst operand A
[in]bSecond operand B
Returns:
Error code

Definition at line 664 of file mpi.c.

error_t mpiSubAbs ( Mpi r,
const Mpi a,
const Mpi b 
)

Helper routine for multiple precision subtraction.

Parameters:
[out]rResulting integer R = |A - B|
[in]aFirst operand A
[in]bSecond operand B
Returns:
Error code

Definition at line 817 of file mpi.c.

error_t mpiSubInt ( Mpi r,
const Mpi a,
int_t  b 
)

Subtract an integer from a multiple precision integer.

Parameters:
[out]rResulting integer R = A - B
[in]aFirst operand A
[in]bSecond operand B
Returns:
Error code

Definition at line 713 of file mpi.c.

error_t mpiSubMod ( Mpi r,
const Mpi a,
const Mpi b,
const Mpi p 
)

Modular subtraction.

Parameters:
[out]rResulting integer R = A - B mod P
[in]aThe first operand A
[in]bThe second operand B
[in]pThe modulus P
Returns:
Error code

Definition at line 1282 of file mpi.c.

error_t mpiWriteRaw ( const Mpi a,
uint8_t *  data,
uint_t  length 
)

Integer to octet string conversion.

Converts an integer to an octet string of a specified length

Parameters:
[in]aNon-negative integer to be converted
[out]dataOctet string resulting from the conversion
[in]lengthIntended length of the resulting octet string
Returns:
Error code

Definition at line 557 of file mpi.c.