* [Intro](README.md)
* [Installation](installation.md)
* [The UI](the-ui.md)
* [Internal Rep](internal-rep.md)
* [Implementation](implementation.md)
* [Floating Slash Nums](floating-slash-nums.md)
* [The C++ Interface](the-cpp-interface.md)
* [Example Programs](example-progs.md)
* [The MIRACL Routines](miracl-explained/reference-manual/low-level-routines.md)
* [Instance Variables](instance-variables.md)
* MIRACL Error Messages
* [Hardware Compiler Interface](hardware-compiler-interface.md)
* [Bibliography](bibliography.md)
MIRACL Error Messages
---
* [Number base too big for representation](#toobig)
* [Division by zero attempted](#zero)
* [Overflow - number too big](#overflow)
* [Internal result is negative](#negative)
* [Input format error](#formaterror)
* [Illegal number base](#illegalnumberbase)
* [Illegal parameter usage](#illegalparameterusage)
* [Out of space](#outofspace)
* [Even root of a negative number](#evenroot)
* [Raising integer to negative power](#negpower)
* [Integer operation attempted on flash number](#integer)
* [Flash overflow](#flashoverflow)
* [Numbers too big](#numberstoobig)
* [Log of a non-positive number](#logofpositive)
* [Flash to double conversion failure](#doubleconversion)
* [MIRACL not initialised](#notinitialised)
* [I/O buffer overflow](#bufferoverflow)
* [Illegal modulus](#illegalmodulus)
* [No modulus defined](#nomodulus)
* [Exponent too big](#exponent)
* [Number base must be power of 2](#power)
* [Specified double-length type isn't](#specified)
* [Specified basis is not irreducible](#notirreducible)
## Number base too big for representation
**Diagnosis**
An attempt has been made to input or output a number using a number base that is too big. For example, outputting using a number base of 232 is clearly impossible. For efficiency, the largest possible internal number base is used, but numbers in this format should be input/output to a much smaller number base £ 256. This error typically arises when using using *innum(.)* or *otnum(.)* after *mirsys(.,0)*.
**Response**
Perform a change of base prior to input/output. For example set the instance variable **IOBASE** to 10, and then use *cinnum(.)* or *cotnum(.)* . To avoid the change in number base, an alternatively is to initialise MIRACL using something like *mirsys*(400,16) which uses an internal base of 16. Now Hex I/O can be performed using *innum*(.) and *otnum*(.) . This will not impact performance on a 32-bit processor as 8 Hex digits will be packed into each computer word.
## Division by zero attempted
**Diagnosis**
Self-explanatory.
**Response**
Don't do it!
## Overflow - Number too big
**Diagnosis**
A number in a calculation is too big to be stored in its fixed length allocation of memory.
**Response**
Specify more storage space for all *big* and *flash* variables by increasing the value of *n* in the initial call to *mirsys*(n.b);
## Internal Result is Negative
**Diagnosis**
This is an internal error that should not occur using the high-level MIRACL functions. It may be caused by user-induced memory over-runs.
**Response**
Report to .
## Input Format Error
**Diagnosis**
The number being input contains one or more illegal symbols with respect to the current I/O number base. For example, this error might occur if IOBASE is set to 10, and a Hex number is input.
**Response**
Re-input the number, and be careful to use only legal symbols. Note that for Hex input only upper-case A-F are permissible.
## Illegal number base
**Diagnosis**
The number base specified in the call to *mirsys*(.) is illegal. For example, a number base of 1 is not allowed.
**Response**
Use a different number base.
## Illegal parameter usage
**Diagnosis**
The parameters used in a function call are not allowed. In certain cases, certain parameters must be distinct - for example in *divide*(.) the first two parameters must refer to distinct *big* variables.
**Response**
Read the documentation for the function in question.
## Out of space
**Diagnosis**
An attempt has been made by a MIRACL function to allocate too much heap memory.
**Response**
Reduce your memory requirements. Try using a smaller value of *n* in your initial call to *mirsys(n,b)*.
## Even root of a negative number
**Diagnosis**
An attempt has been made to find the square root of a negative number, for example.
**Response**
Don't do it!
## Raising integer to negative power
**Diagnosis**
Self-explanatory.
**Response**
Don't do it!
## Integer operation attempted on flash number
**Diagnosis**
Certain functions should only be used with *big* numbers, and do not make sense for *flash* numbers. Note that this error message is often provoked by memory problems, where for example the memory allocated to a *big* variable is accidentally over-written.
**Response**
Don't do it!
## Flash overflow
**Diagnosis**
This error is provoked by Flash overflow or underflow. The result is outside of the representable dynamic range.
**Response**
Use bigger *flash* numbers. Analyse your program carefully for numerical instability.
## Numbers too big
**Diagnosis**
The size of *big* or *flash* numbers requested in your call to *mirsys(.)* are simply too big. The length of each *big* and *flash* is encoded into a single computer word. If there is insufficient room for this encoding, this error message occurs.
**Response**
Build a MIRACL library that uses a bigger "underlying type". If not using Flash arithmetic, build a library without it - this allows much bigger big numbers to be used.
## Log of a non-positive number
**Diagnosis**
An attempt has been made to calculate the logarithm of a non-positive *flash* number.
**Response**
Don't do it!
## Flash to double conversion failure
**Diagnosis**
An attempt to convert a Flash number to the standard built-in C *double* type has failed, probably because the Flash number is outside of the dynamic range that can be represented as a *double*.
**Response**
Don't do it!
## I/O buffer overflow
**Diagnosis**
An input output operation has failed because the I/O buffer is not big enough.
**Response**
Allocate a bigger buffer by calling *set_io_buffer_size(.)* after calling *mirsys(.)*.
## MIRACL not initialised -
**Diagnosis**
Self-explanatory
**Response**
Don't do it!
## Illegal modulus
**Diagnosis**
The modulus specified for use internally for Montgomery reduction, is illegal. Note that this modulus must not be even.
**Response**
Use an odd positive modulus.
## No modulus defined
**Diagnosis**
No modulus has been specified, yet a function which needs it has been called.
**Response**
Set a modulus for use internally
## Exponent too big
**Diagnosis**
An attempt has been made to perform a calculation using a pre-computed table, for an exponent (or multiplier in the case of elliptic curves) bigger than that catered for by the pre-computed table.
**Response**
Re-compute the table to allow bigger exponents, or use a smaller exponent.
## Number base must be power of 2
**Diagnosis**
A small number of functions require that the number base specified in the initial call to *mirsys(.)* is a power of 2.
**Response**
Use another function, or specify a power-of-2 as the number base in the initial call to *mirsys(.)*
## Specified double-length type isn't
**Diagnosis**
MIRACL has determined that the double length type specified in *mirdef.h* is in fact not double length. For example if the underlying type is 32-bits, the double length type should be 64 bits.
**Response**
Don't do it!
## Specified basis is not irreducible
**Diagnosis**
The basis specified for GF(2m) arithmetic is not irreducible.
**Response**
Don't do it!