blob: 36f143f6e713bad4eb9ba9c3f4145b0de376a0e2 [file] [log] [blame]
Namespaces are sinulated to separate different curves.
To this end the BIG type is renamed to BIG_XXX, where XXX can be changed to
describe the size and layout of the BIG variable. Similarily the FP type
is renamed FP_YYY, where YYY reflects the modulus used. Also the ECP type
is renamed ECP_ZZZ, where ZZZ describes the actual curve. Function names
are also decorated in the same way.
So for example to support both ED25519 and the NIST P256 curve on a 64-bit
processor, we would need to create BIG_256_56, FP_25519, ECP_ED25519 and
BIG_256_56, FP_NIST256, ECP_NIST256. Note that both curves could be built
on top of BIG_256_56, as both require support for 256-bit numbers using
an internal number base of 2^56.
Separate ROM files provide the constants required for each curve. The
associated header files (big.h, fp.h and ecp.h) also specify
certain constants that must be set for the particular curve.
--------------------------------------
To build the library and see it in action, copy all of the files in this
directory to a fresh directory. Then execute the python3 script config32.py
for a 32-bit build, or config64.py for a 64-bit build, and select the curves
that you wish to support. Note that support for 16-bit builds is currently
somewhat limited - see config16.py. A library is built automatically
including all of the modules that you will need.
The configuration files assume the gcc compiler. For clang edit the
config32.py and config64.py files and substitute "clang" for "gcc".
Note that clang is about 10-15% faster.*
NOTE: In the file config_curve.h a couple of methods with possible IP issues
are commented out. For faster pairing code, edit this file.
As a quick example execute
py config32.py
or
python3 config32.py
Then select options 1, 3, 7, 18, 20, 25, 26 and 27, which are fixed for the example
program. (For a 16-bit build select 1,3 and 5). Select 0 then to exit.
Then compile
gcc -O2 -std=c99 testall.c amcl.a -o testall.exe
if using MINGW in Windows. Or for Linux
gcc -O2 -std=c99 testall.c amcl.a -o testall
The test program exercises 3 different ordinary elliptic curves, a
pairing friendly curve and RSA, all in the one binary.
The correct PIN is 1234
Next compile
gcc -O2 -std=c99 testbls.c amcl.a -o testbls.exe
if using MINGW in Windows. Or for Linux
gcc -O2 -std=c99 testbls.c amcl.a -o testbls
This program implements the pairing-based BLS signature
Next compile
gcc -O2 -std=c99 benchtest_all.c amcl.a -o benchtest_all.exe
if using MINGW in Windows. Or for Linux
gcc -O2 -std=c99 benchtest_all.c amcl.a -o benchtest_all
This program provides some timings.
Finally
gcc -O2 -std=c99 testnhs.c amcl.a -o testnhs
*Using clang on Windows
Download latest clang from http://releases.llvm.org/download.html
Choose Clang for Windows (64-bit) (.sig)
Install a free version of Microsoft Visual C++ https://www.visualstudio.com/downloads/
Now use "clang" wherever "gcc" was used before.