132 lines
3.4 KiB
Plaintext
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
|
|
|