KGC_TEST/KGC/miracl/source/curve/cm.txt

132 lines
3.4 KiB
Plaintext

NOTE: as of version 4.81 the CM program has been much improved. It is now up
to 100 times faster than the original. See comments in cm.cpp
A precompiled Windows executable is available from
ftp://ftp.compapp.dcu.ie/pub/crypto/cm.exe
To build the CM application, you must compile and link the modules
together, and with the MIRACL library.
So for Borland C++
bcc32 cm.cpp poly.cpp flpoly.cpp complex.cpp floating.cpp big.cpp zzn.cpp
ecn.cpp miracl.lib
On UNIX using g++, something like
g++ -I. -c poly.cpp
g++ -I. -c flpoly.cpp
g++ -I. -c complex.cpp
g++ -I. -c floating.cpp
g++ -I. cm.cpp poly.o flpoly.o complex.o floating.o big.o zzn.o ecn.o
miracl.a /usr/lib/libm.a -o cm
should work
For best performance, use a KCM build of MIRACL, with MR_KCM defined in
mirdef.h to be a power of 2, for example 8.
For example on a PC use this mirdef.h file
/*
* 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 __int64
#define mr_unsign64 unsigned __int64
#define MR_FLASH 52
#define MAXBASE ((mr_small)1<<(MIRACL-1))
#define MR_KCM 16
#define MR_BITSINCHAR 8
and compile and run the mex utility
mex 16 ms86 mrkcm
This creates mrkcm.c
IMPORTANT!
If you have a Pentium 4 processor (which has SSE2 extensions), use
mex 16 sse2 mrkcm
to create mrkcm.c This will be much faster.
Remember to include the module mrkcm.obj in the library - using MS C
execute
cl /c /O2 /W3 mrcore.c
cl /c /O2 /W3 mrarth0.c
cl /c /O2 /W3 mrarth1.c
cl /c /O2 /W3 mrarth2.c
cl /c /O2 /W3 mralloc.c
cl /c /O2 /W3 mrsmall.c
cl /c /O2 /W3 mrio1.c
cl /c /O2 /W3 mrio2.c
cl /c /O2 /W3 mrgcd.c
cl /c /O2 /W3 mrjack.c
cl /c /O2 /W3 mrxgcd.c
cl /c /O2 /W3 mrarth3.c
cl /c /O2 /W3 mrrand.c
cl /c /O2 /W3 mrprime.c
cl /c /O2 /W3 mrcrt.c
cl /c /O2 /W3 mrscrt.c
cl /c /O2 /W3 mrmonty.c
cl /c /O2 /W3 mrpower.c
cl /c /O2 /W3 mrsroot.c
cl /c /O2 /W3 mrbits.c
cl /c /O2 /W3 mrcurve.c
cl /c /O2 /W3 mrfast.c
cl /c /O2 /W3 mrlucas.c
cl /c /O2 /W3 mrshs.c
cl /c /O2 /W3 mrshs256.c
cl /c /O2 /W3 mrshs512.c
cl /c /O2 /W3 mraes.c
cl /c /O2 /W3 mrgcm.c
cl /c /O2 /W3 mrstrong.c
cl /c /O2 /W3 mrbrick.c
cl /c /O2 /W3 mrebrick.c
cl /c /O2 /W3 mrec2m.c
cl /c /O2 /W3 mrgf2m.c
cl /c /O2 /W3 mrflash.c
cl /c /O2 /W3 mrfrnd.c
cl /c /O2 /W3 mrdouble.c
cl /c /O2 /W3 mrround.c
cl /c /O2 /W3 mrbuild.c
cl /c /O2 /W3 mrflsh1.c
cl /c /O2 /W3 mrpi.c
cl /c /O2 /W3 mrflsh2.c
cl /c /O2 /W3 mrflsh3.c
cl /c /O2 /W3 mrflsh4.c
cl /c /O2 /W3 mrkcm.c
cl /c /O2 /W3 mrmuldv.c
del miracl.lib
lib /OUT:miracl.lib mrflsh4.obj mrflsh3.obj mrflsh2.obj mrpi.obj mrflsh1.obj
lib /OUT:miracl.lib miracl.lib mrdouble.obj mrflash.obj mrfrnd.obj mrround.obj mrbuild.obj
lib /OUT:miracl.lib miracl.lib mrio2.obj mrio1.obj mrrand.obj mrprime.obj mrcrt.obj mrscrt.obj mrbits.obj mrfast.obj
lib /OUT:miracl.lib miracl.lib mrjack.obj mrxgcd.obj mrgcd.obj mrarth3.obj mrarth2.obj mrpower.obj mrsroot.obj
lib /OUT:miracl.lib miracl.lib mrmonty.obj mralloc.obj mrarth1.obj mrarth0.obj mrsmall.obj mrcore.obj mrmuldv.obj
lib /OUT:miracl.lib miracl.lib mrcurve.obj mrshs.obj mraes.obj mrlucas.obj mrstrong.obj mrbrick.obj mrgcm.obj
lib /OUT:miracl.lib miracl.lib mrshs256.obj mrshs512.obj mrebrick.obj mrgf2m.obj mrec2m.obj mrkcm.obj
del mr*.obj
cl /O2 /GX cm.cpp poly.cpp flpoly.cpp complex.cpp floating.cpp big.cpp zzn.cpp ecn.cpp miracl.lib