Unit Big Integer

From Ultibo.org
Jump to: navigation, search

Return to Unit Reference


Description


Ultibo Big Integer Interface unit

This unit implements multiple precision integer arithmetic operations as well as multiple precision modular arithmetic including addition, subtraction, multiplication, division, square, modular reduction and modular exponentiation.

The unit is primarily intended to support the RSA functions within the Crypto unit as well as other cryptographic functionality.

Constants



[Expand]
BigInt specific constants BIGINT_*


Type definitions



Component

[Expand]

PComponent = ^TComponent;

TComponent = LongWord;

Long component

[Expand]

PLongComponent = ^TLongComponent;

TLongComponent = UInt64;

Signed long component

[Expand]

PSignedLongComponent = ^TSignedLongComponent;

TSignedLongComponent = Int64;

BigInt

[Expand]

PPBigInt = ^PBigInt;

PBigInt = ^TBigInt;

TBigInt = record

BigInt context

[Expand]

PBigIntContext = ^TBigIntContext;

TBigIntContext = record


Public variables


None defined

Function declarations



BigInt functions

[Expand]
function BIInitialize:PBigIntContext;
Description: Start a new bigint context


[Expand]
procedure BITerminate(Context:PBigIntContext);
Description: Close the bigint context and free any resources


[Expand]
procedure BIPermanent(BI:PBigInt);
Description: Make a bigint object "unfreeable" if BIFree() is called on it


[Expand]
procedure BIDepermanent(BI:PBigInt);
Description: Take a permanent object and make it freeable


[Expand]
procedure BIClearCache(Context:PBigIntContext);
Description: Clear the memory cache


[Expand]
procedure BIFree(Context:PBigIntContext; BI:PBigInt);
Description: Free a bigint object so it can be used again


[Expand]
function BICopy(BI:PBigInt):PBigInt;
Description: Increment the number of references to this object


[Expand]
function BIClone(Context:PBigIntContext; const BI:TBigInt):PBigInt;
Description: Do a full copy of the bigint object


[Expand]
procedure BIExport(Context:PBigIntContext; BI:PBigInt; Data:PByte; Size:Integer);
Description: Take a bigint and convert it into a byte sequence


[Expand]
function BIImport(Context:PBigIntContext; Data:PByte; Size:Integer):PBigInt;
Description: Allow a binary sequence to be imported as a bigint


[Expand]
function IntToBI(Context:PBigIntContext; I:TComponent):PBigInt;
Description: Convert an (unsigned) integer into a bigint


[Expand]
function BIAdd(Context:PBigIntContext; BIA,BIB:PBigInt):PBigInt;
Description: Perform an addition operation between two bigints


[Expand]
function BISubtract(Context:PBigIntContext; BIA,BIB:PBigInt; var IsNegative:Boolean):PBigInt;
Description: Perform a subtraction operation between two bigints


[Expand]
function BIDivide(Context:PBigIntContext; U,V:PBigInt; IsMod:Boolean):PBigInt;
Description: Does both division and modulo calculations


[Expand]
function BIMultiply(Context:PBigIntContext; BIA,BIB:PBigInt):PBigInt;
Description: Perform a multiplication operation between two bigints


[Expand]
function BIModPower(Context:PBigIntContext; BI,BIExp:PBigInt):PBigInt;
Description: Perform a modular exponentiation


[Expand]
function BIModPower2(Context:PBigIntContext; BI,BIM,BIExp:PBigInt):PBigInt;
Description: Perform a modular exponentiation using a temporary modulus


[Expand]
function BICompare(BIA,BIB:PBigInt):Integer;
Description: Compare two bigints


[Expand]
procedure BISetMod(Context:PBigIntContext; BIM:PBigInt; ModOffset:Integer);
Description: Pre-calculate some of the expensive steps in reduction


[Expand]
procedure BIFreeMod(Context:PBigIntContext; ModOffset:Integer);
Description: Used when cleaning various bigints at the end of a session


[Expand]
function BIMod(Context:PBigIntContext; BI:PBigInt):PBigInt; inline;
Description: Find the residue of BI


[Expand]
function BIResidue(Context:PBigIntContext; BI:PBigInt):PBigInt; inline;
Description: BIResidue is simply an alias for BIBarrett


[Expand]
function BIBarrett(Context:PBigIntContext; BI:PBigInt):PBigInt;
Description: Perform a single Barrett reduction


[Expand]
function BISquare(Context:PBigIntContext; BI:PBigInt):PBigInt;
Description: Perform a square operation on a bigint


[Expand]
function BICRT(Context:PBigIntContext; BI,DP,DQ,P,Q,QInv:PBigInt):PBigInt;
Description: Use the Chinese Remainder Theorem to quickly perform RSA decrypts


BigInt helper functions

[Expand]
function BIToString(BI:PBigInt):String;
Description: Convert a bigint to a string of hex characters


[Expand]
function StringToBI(Context:PBigIntContext; const Value:String):PBigInt;
Description: Convert a string of hex characters to a bigint


Return to Unit Reference