The SmartMips is an example of the new generation of 32-bit smart cards. Rather than support specialised crypographic co-processors, these smart cards deploy enhanced instruction sets with instructions specially tailored to the requirements of multi-precision arithmetic over GF(p) and GF(2^m). This is a viable approach due to the increased speed and power of these devices. (Smart cards are NOT low powered devices. Power is taken from the card reader, and is thus not particularly limited) These smart cards also support impressive amounts of ROM, Flash memory, EEPROM and RAM. Nonetheless the environment is heavily constrained compared to a desktop workstation, or even a PDA or hand-held mobile device. One major constraint is a limited amount of RAM - typically just 16K bytes. In this context it does not make sense to divide this limited resource between static memory, a heap and a stack. Therefore a MIRACL build which requires only a stack is appropriate. Many big number libraries support elaborate mechanisms so that big numbers can grow without limit. In contrast MIRACL has always supported fixed size big numbers, and this is particularly appropriate in this context. By fixing big number sizes at compile time, memory for big numbers can be allocated very quickly from the stack, with minimal overhead. To do this define #define MR_STATIC X in mirdef.h, where X is the fixed size of the big numbers in 32-bit words. A file smartmip.mcs is supplied so that optimal assembly language can be generated for big number modular multiplication, using the MIRACL macro mechansism (see makemcs.txt and kcmcomba.txt). This also supports very fast GF(2^m) polynomial multiplication, using a special instruction. By setting #define MR_COMBA2 X in mirdef.h, and running the mex utility, very fast code will be generated to the file mrcomba2.c, which can be integrated into the MIRACL library. Here X is again the fixed size of the big numbers in 32-bit words (rounded up). An example mirdef.h configuration header for implementing a fast elliptic curve cryptosystem over GF(2^283) might look like this... /* * MIRACL compiler/hardware definitions - mirdef.h */ #define MR_LITTLE_ENDIAN #define MIRACL 32 #define mr_utype int #define MR_IBITS 32 #define MR_LBITS 32 #define mr_unsign32 unsigned int #define mr_dltype long long #define mr_unsign64 unsigned long long #define MR_STATIC 9 #define MR_NOASM #define MR_ALWAYS_BINARY #define MR_STRIPPED_DOWN #define MR_GENERIC_MT #define MR_NO_STANDARD_IO #define MR_NO_FILE_IO #define MR_COMBA2 9 #define MAXBASE ((mr_small)1<<(MIRACL-1)) #define MR_BITSINCHAR 8 #define MR_SHORT_OF_MEMORY