Version 4.0 The main changes from the earlier version 3.xx is the introduction of the MIP, Miracl Instance Pointer. This is to facilitate the development of multi-threaded applications. The manual has been updated, and a few small bugs dealt with. From a programmers point of view, the main change is that previously Global variables like IOBASE, must now be accessed via the MIP, so IOBASE=16; gets replaced by mip->IOBASE=16; The MIP itself is returned by mirsys(), so mirsys(200,256); now becomes miracl *mip=mirsys(200,256); Version 4.01 New example programs pk-demo.c and pk-demo.cpp demonstrate popular public key methods, viz. The Diffie-Hellman key exchange, and the RSA public key system Version 4.1 Support for Elliptic Curve PK Crypto systems. New fast Elliptic Curve module mrcurve.c. This will be very fast on an 32-bit Pentium+ if for example MR_COMBA is defined as 5 in mirdef.h for 160-bit curve (5*32 = 160) Implementation of Elliptic Curve variant of the Digital Signature Standard. Montgomery arithmetic now used more extensively internally. pk-demo.c/cpp now also implements Elliptic Curve key exchange, and the El Gamal PK method. Version 4.1.1 In mrprime.c - New trial_divison() function - dual purpose routine to quickly test primality status of a big integer. New nxsafeprime() function - speeds up search for so-called safe primes, for example a prime p for which (p-1)/2 is also prime. New Lucus exponentiation module mrlucas.c Version 4.1.2 Implementation of Complex Multiplication method for the generation of Elliptic curves (the previously used method has been shown to generate weak curves). This was implemented from description in Annex to IEEE P1363 Note the free executable CM.EXE Version V4.1.3 Inline assembly support for DJGPP C/C++ Compiler. Version V4.1.4 New module for implementing Brickell et al's method for exponentiation with precomputation. New facility for user-specified function called periodically by time- consuming MIRACL functions. Useful for doing a Windows message-pump, or responding to real-time events. See set_user_function(). Version V4.1.5 New multiple-exponentiation program powmodn(), calculates a^b.c^d.e^f....x^y mod n. Also ecurve_multn() which does the same for elliptic curves. Brickel et al method extended to Elliptic curves. Version V4.2.0 C version of KCM method implemented. Might be advantageous for extreme RISC processors with no integer multiply instruction. Ask for C only build in config program (you will need to specify a double length type), and follow instructions. Elliptic curve point multiplication speeded up a bit. C only code improved. Interesting to note that the 32-bit Microsoft C compiler - using __int64 as a double length type - now generates code that is nearly as fast as optimized assembly language (with /O2 flag). New low level routine muldvd2() introduced - speeds up time critical loops. See mrmuldv.any Version V4.2.1 New bmark.c benchmarking program. Shows timings for typical public key crypto methods. Useful for comparing MIRACL with other Libraries, and for determining the optimal MIRACL build for a particular application. MIRACL routine entry and exit tidied up, and skipped if MR_STRIPPED_DOWN is defined. Version 4.2.2 Implementation of AES encryption algorithm (in fact RIJNDAEL). This is a "place-holder" for now until actual AES winner is decided. Implementation of Cramer-Shoup PK algorithm - see files crencode.cpp/crdecode.cpp/crsetup.cpp/crgen.cpp .. and Schoof's algorithm! Counts number of rational points on an elliptic curve defined over the field GF(p). Note the free Windows Command Prompt executable SCHOOF.EXE, available from download site Version 4.2.3 Implementation of Schoof-Elkies-Atkin algorithm , for more efficient elliptic curve point-counting. Again free Windows Command Prompt executables (MUELLER.EXE, PROCESS.EXE and SEA.EXE) are available for download. Version 4.2.4 Schoof and Schoof-Elkies-Atkin algorithm implementations greatly optimized. Version 4.3.0 Support for Elliptic Curve Cryptography over GF(2^m). ECDSA implemented for same - see ecsgen2.c ecsign2.c ecsver2.c. The C++ class is implemented in ec2.h and ec2.cpp Also Schoof's algorithm for point-counting over GF(2^m) curves Version 4.4.0 By popular demand! Multi-threaded support. Read the new section in the manual Version 4.4.1 new routines bytes_to_big(), big_to_bytes() for easy conversion between pure binary and bigs. Also strong_bigrand() for ease of access to cryptographically strong big numbers Version 4.4.2 New P1363 wrapper/DLL introduced. Lim-Lee prime generation. General tidy-up, and more installation help. Version 4.4.3 Fuller support for new AES (we were right - it was Rijndael). Also implemenations of the Lim-Lee algorithm for generating primes, and implementations of the new SHA-256, SHA-384 and SHA512 hashing algorithms. Version 4.4.3a Maintainance release. A few bug fixes. Domain data in common.dss/common.ecs/common2.ecs is now in Hex, as Hex is used in the standards documents. Schoof fixed for anomalous curves. New section on error messages in the manual. I/O buffer size is now set dynamically via set_io_buffer_size() routine - no longer fixed in mirdef.h Version 4.5 New mechanisms for implementing fastest embedded code. The Comba and KCM methods have been extended and supported for more compiler/processor combinations. Through the use of the Macro EXpansion program MEX.C macros can be inserted into supplied templates. If your compiler supports in-line assembly, this is probably the mechanism to use for best performance on embedded processors. See kcmcomba.txt for more details. Version 4.6 Internal structure of big numbers changed, from an array to a simple struct. Memory alignment problems solved. Support for use of floating-point "double" type - see double.txt. More IEEE 1363 and P1363a support. Version 4.6.1 Implementation of Boneh & Franklin's IBE Identity Based Encryption Version 4.6.2 Extended GCD algorithm speeded by 70%. Some minor bugs dealt with. Version 4.6.3 Jacobi symbol algorithm substantially speeded up. New program imratio.c calculates S/M, I/M and J/M ratios Version 4.6.4 New fast method for assigning C++ Big objects from the stack Version 4.6.5 New alternative Comba/Kcm macros that "interleave" multiplication steps. This should be faster on modern load/store architectures. See makemcs.txt Complex Multiplication utility for counting points on elliptic curves greatly improved. Comba/Kcm macros for 32-bit SPARC implemented - see sparc.txt and sparc.mcs. Double base-type code debugged/optimized. Optimizer problem with Gnu GCC solved. Version 4.7 New improved and updated IEEE 1363 support. Version 4.7.1 New P1363a primitives and methods - DLPSP-NR2/PV, DLSP-NR2, DLVP-NR2, DLSP-PV, DLVP-PV, ECPSP-NR2/PV, ECSP-NR2, ECVP-NR2, ECSP-PV, ECVP-PV, EMSA4, EMSR1, EMSR2, EMSR3, DLSSR, DLSSR-PV, IFSSR New functions memalloc,memkill and mirvar_mem. When many big variables need to be created in a C program multiple calls to mirvar can be slow. Better to allocate space for all in one heap access. See brent.c and p1363.c for an example of use. Version 4.7.2 Cryptographically Strong Pseudo Random Number Generator interface improved. See test1363.c and p1363.c for example of use. It is now possible to allocate bigs in C programs from the stack - see brute.c for an example Version 4.7.3 New style C++ I/O headers supported. C function "round" renamed to "mround", "negate" to "negify", to avoid GCC 3.2 name clashes Version 4.7.4 Base64 I/O supported. Just set IOBASE=64 before input/output Version 4.7.5 config.c fixed for chars > 8 bits. Elliptic curve point comparison speeded up. Minor bug fixes. GCC 3.3 support Version 4.8 Miracl header files now accessed via "*.h" rather than <*.h> (following numerous complaints!) Very minor changes... Example implementation of Cock's ID based PK scheme Version 4.8.1 New Floating Point class - see float.h and float.cpp, and read float.txt. Uses asymptotically fast FFT methods, so efficient for very high precision calculation. New CM program - see cm.cpp and cm.txt. Up to 50 times faster. Version 4.8.2 Full support for Itanium processor. Version 4.8.3 Support for AMD64 processor. Problem with GCC -O2 optimizer fixed. Some new experimental code for pairings - see ake.txt Version 4.8.4 Support for SSE2 Pentium 4 extensions. Up to 60% faster on a PC! See sse2.txt For example use sse2.mcs to create much faster CM.EXE utility - see cm.txt New support for ARM using GCC compiler. Version 4.8.5 Faster C++ wrapper code. Compiler flags /DGF2MS=n and /DZZNS=n speed up programs substantially by allocating from the stack. Some files renamed. Version 5.0.0 New support for very constrained environments. It is now possible to build a miracl library which does not require a heap. Space for big variables can now be claimed from the stack. Internal functions have been reorganised to facilitate these changes. More #define options now allow for a smaller library to be built. These changes apply to both C and C++ programs. See section 2.4 of the manual for more details. Version 5.0.1 Minor bug fixes Version 5.0.2 Precomputation methods updated and improved. Now uses the standard Comb method, as described in Handbook of Applied Cryptography. Much faster. When using precomputation the user now specifies the window size - which allows control over the time-space trade-off. Version 5.1.0 Support for Koblitz curves. This is completely transparent - the user does nothing. See the output of bmark program to see speed-up acheived. Change from IEEE to Lopez-Dahab coordinates for EC(F_2^m}. Significantly faster. Version 5.2.0 ZZn2 arithmetic now absorbed into MIRACL C library, resulting in faster pairings. New Lazy reduction algorithm for ZZn2 multiplications, fully supported by COMBA mechanisms. Version 5.2.1 Full support for PowerPC G5 64-bit processor Version 5.2.2 OpenMP supported for multi-core programming - see threadmp.cpp. New small, fast ECDH example programs ecdh2m.c ecdhp.c (for 32-bit processors) and ecdh2m16.c (for 16-bit processors). This last is ideal for low powered wireless sensor networks. Version 5.3 New program irp.cpp to automatically generate optimal code for insertion in the reduce2(.) function in mrecgf2m.c The program findbase.cpp to find the "best" irreducible polynomial, has been updated. New program newbasis.cpp converts a value from one irreducible polynomial representation to another. New support for 8-bit MIRACL, and for tiny architectures like Atmel AVR ATmega128. This Atmel device is commonly used in Wireless Sensor Networks. See ecdh2m8.c and ecdhp8.c and avr.mcs New mirdef.h option #define MR_SMALL_EWINDOW which if defined uses a smaller sliding window for elliptic curve point multiplication, which is a space-time trade off. Useful when RAM is under pressure.. Also MR_SIMPLE_IO for simple input/output (no base changes, no file I/O, only input from ROM, and I/O as binary bytes) And MR_NO_RAND to disable and remove the built in random number generator. MR_STATIC is now interpreted as a request for the minimum possible code size, and if it is defined, many rarely used routines are removed. Version 5.3.1 Module mrecgf2m.c split into mrgf2m.c and mrec2m.c New amd64.mcs file for very fast 64-bit performance on AMD and newer Intel processors. See amd64.txt. New Hybrid method for multiplication - experimental. See amd64.mcs, avr2.mcs and avr4.mcs for some example code. Version 5.3.2 Support for Pseudo Mersenne Prime moduli of the form 2^n-c, where n is a multiple of the word length, and c is a small constant. See ecdhp32.c for an example of use. Improved support for ARM processor. Version 5.3.3 Solinas's Joint Sparse Form now used for elliptic curve double addition. New C support for E(Fp^2) elliptic curves. Implementation of the R-ate pairing. New smaller/faster jacobi symbol code. New utilities romaker.c and romaker2.c to automatically generate ROMs and precomputed values for elliptic curves. Version 5.4 Edwards Curves now supported - see edwards.txt Full support for Win64 applications (64-bit windows) Some minor improvements to pairings. Some new pairings supported. Version 5.4.1 New faster pairing implementations - using better extension field towerings. Some bug fixes Version 5.4.2 New pairing implementation at high security levels (AES-192 -ake18kssx.cpp). Some bug fixes. Support for .NET managed code - see managed.txt Version 5.4.3 Support for AES-GCM mode of operation. See aesgcm.txt and new module mrgcm.c Precompiled libraries are no longer included in the distribution. Version 5.4.4 New pairing implementation at high security levels (AES-256 - ake24blsa.cpp). Some bug fixes in pairing code. Version 5.5 New high level interface for implementing pairing-based protocols. See pairings.txt Protocols can be implemented very succinctly, at various security levels, and with realistic timings. All known optimizations used. Many example schemes from P1363.3 implemented. Version 5.5.1 Improved high-level pairing interface. More options Version 5.5.2 Support for Analog Devices Blackfin processor Version 5.5.3 Improved high level interface for pairing-based protocols, with new features. Version 5.5.4 More example pairings protocols - Attribute-Based, Predicate Based, HIBE See pairings.txt. Support for Microchip PIC32, see pic32.txt Version 5.6 Some minor bug fixes. New licensing terms. Version 5.6.1 New MIRACL module mrzzn4.c Version 7.0.0 New support for Format Preserving Encryption. See fpe.pdf and new module mrfpe.c New support for SHA3 hash function (Keccak). See mrsha3.c New Macros for MIPS - see mips.mcs Version 7.0.1 New advice om Texas DSP C6713 processor - see texasdsp.txt New Typical Thread-Safe No-Heap API example code for ECC - see testecc.c