ST22 32-bit smart-card processor Supported by the files mrmuldv.st2 st22.mcs st22_new.mcs mrkcmx.tpl mrcombax.tpl mrcomb2x.tpl (To obtain these files, please contact us directly at mscott@indigo.ie) The Comba and KCM methods are fully supported. Also support for GF(2^m) methods, so MR_COMBA2 can be defined. The alternative st22_new.mcs file implements the slightly faster hybrid method. The inline assembly feature in the compiler is not as powerful as the GCC compilers, and so special template files are needed to support this processor (the .tpl files above) Note the type "unsigned long long" does not work with the compiler. This program outputs u=0 while the correct answer is u=0xfffffffe. #include int main() { unsigned int a,b; unsigned long long u; a=0xFFFFFFFF; b=0xFFFFFFFF; u=(unsigned long long)a*b; printf("u= %x\n",(unsigned int)(u>>32)); return 0; } This can be fixed by inserting asm("mov $dspmode,1") before the multiplication. For a quick-start example extract all the miracl files into a single directory, and use this mirdef.h header file #define MR_BIG_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 6 #define MR_ALWAYS_BINARY #define MR_STRIPPED_DOWN #define MR_GENERIC_MT #define MAXBASE ((mr_small)1<<(MIRACL-1)) #define MR_BITSINCHAR 8 #define MR_SHORT_OF_MEMORY #define MR_COMBA 6 #define MR_SPECIAL Next compile the standalone utility mex.c Then build the miracl library using del miracl.a mex 6 st22 mrcombax copy mrmuldv.st2 mrmuldv.c sjcc -c -O3 mrcore.c sjcc -c -O3 mrarth0.c sjcc -c -O3 mrarth1.c sjcc -c -O3 mrarth2.c sjcc -c -O3 mrio1.c sjcc -c -O3 mrxgcd.c sjcc -c -O3 mrbits.c sjcc -c -O3 mrmonty.c sjcc -c -O3 mrsroot.c sjcc -c -O3 mrcurve.c sjcc -c -O3 mrjack.c sjcc -c -O3 mrlucas.c sjcc -c -O3 mrebrick.c sjcc -c -O3 mrsmall.c sjcc -c -O3 mrmuldv.c sjcc -c -O3 mrcombax.c sjar rc miracl.a mrcore.obj mrarth0.obj mrarth1.obj mrarth2.obj sjar r miracl.a mrio1.obj mrxgcd.obj mrbits.obj mrjack.obj sjar r miracl.a mrmonty.obj mrcurve.obj mrsroot.obj sjar r miracl.a mrebrick.obj mrmuldv.obj mrlucas.obj sjar r miracl.a mrcombax.obj mrsmall.obj del mr*.obj Create a project using the program ecdhp.c, the above mirdef.h header, the header miracl.h and the miracl.a library