MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-ubuntu22-11-04-24/includes
..
.gitignore
aes.cpp
arch.h
benchtest_all
benchtest_all.cpp
big_B160_56.h
big_B168_60.h
big_B256_56.h
big_B288_60.h
big_B336_60.h
big_B384_56.h
big_B384_58.h
big_B416_60.h
big_B448_58.h
big_B448_60.h
big_B464_60.h
big_B480_56.h
big_B512_60.h
big_B528_60.h
big_B560_58.h
big_B584_60.h
big.cpp
big.h
bls192_BLS24479.h
bls192.cpp
bls192.h
bls256_BLS48286.h
bls256_BLS48556.h
bls256_BLS48581.h
bls256.cpp
bls256.h
bls_BLS12381.h
bls_BLS12383.h
bls_BLS12443.h
bls_BLS12461.h
bls_BN158.h
bls_BN254.h
bls_BN254CX.h
bls_BN462.h
bls_FP256BN.h
bls_FP512BN.h
bls.cpp
bls.h
blsrev192.cpp
blsrev256.cpp
blsrev.cpp
config16.py
config32.py
config64.py
config_big_B160_56.h
config_big_B168_60.h
config_big_B256_56.h
config_big_B288_60.h
config_big_B336_60.h
config_big_B384_56.h
config_big_B384_58.h
config_big_B416_60.h
config_big_B448_58.h
config_big_B448_60.h
config_big_B464_60.h
config_big_B480_56.h
config_big_B512_60.h
config_big_B528_60.h
config_big_B560_58.h
config_big_B584_60.h
config_big.h
config_curve_ANSSI.h
config_curve_BLS12381.h
config_curve_BLS12383.h
config_curve_BLS12443.h
config_curve_BLS12461.h
config_curve_BLS24479.h
config_curve_BLS48286.h
config_curve_BLS48556.h
config_curve_BLS48581.h
config_curve_BN158.h
config_curve_BN254.h
config_curve_BN254CX.h
config_curve_BN462.h
config_curve_BRAINPOOL.h
config_curve_C1174.h
config_curve_C1665.h
config_curve_C13318.h
config_curve_C25519.h
config_curve_C41417.h
config_curve_Ed448.h
config_curve_Ed25519.h
config_curve_FP256BN.h
config_curve_FP512BN.h
config_curve_HIFIVE.h
config_curve_JUBJUB.h
config_curve_MDC.h
config_curve_NIST256.h
config_curve_NIST384.h
config_curve_NIST521.h
config_curve_NUMS256E.h
config_curve_NUMS256W.h
config_curve_NUMS384E.h
config_curve_NUMS384W.h
config_curve_NUMS512E.h
config_curve_NUMS512W.h
config_curve_SECP160R1.h
config_curve_SECP256K1.h
config_curve_SM2.h
config_curve_TWEEDLEDEE.h
config_curve_TWEEDLEDUM.h
config_curve_X448.h
config_curve.h
config_ff_RSA2048.h
config_ff_RSA3072.h
config_ff_RSA4096.h
config_ff.h
config_field_ANSSI.h
config_field_BLS12381.h
config_field_BLS12383.h
config_field_BLS12443.h
config_field_BLS12461.h
config_field_BLS24479.h
config_field_BLS48286.h
config_field_BLS48556.h
config_field_BLS48581.h
config_field_BN158.h
config_field_BN254.h
config_field_BN254CX.h
config_field_BN462.h
config_field_BRAINPOOL.h
config_field_C1174.h
config_field_C1665.h
config_field_C41417.h
config_field_F256PME.h
config_field_F256PMW.h
config_field_F384PM.h
config_field_F448.h
config_field_F512PM.h
config_field_F25519.h
config_field_FP256BN.h
config_field_FP512BN.h
config_field_HIFIVE.h
config_field_JUBJUB.h
config_field_MDC.h
config_field_NIST256.h
config_field_NIST384.h
config_field_NIST521.h
config_field_SECP160R1.h
config_field_SECP256K1.h
config_field_SM2.h
config_field_TWEEDLEDEE.h
config_field_TWEEDLEDUM.h
config_field.h
core.h
dilithium.cpp
dilithium.h
ecdh_ANSSI.h
ecdh_BLS12381.h
ecdh_BLS12383.h
ecdh_BLS12443.h
ecdh_BLS12461.h
ecdh_BLS24479.h
ecdh_BLS48286.h
ecdh_BLS48556.h
ecdh_BLS48581.h
ecdh_BN158.h
ecdh_BN254.h
ecdh_BN254CX.h
ecdh_BN462.h
ecdh_BRAINPOOL.h
ecdh_C1174.h
ecdh_C1665.h
ecdh_C13318.h
ecdh_C25519.h
ecdh_C41417.h
ecdh_Ed448.h
ecdh_Ed25519.h
ecdh_FP256BN.h
ecdh_FP512BN.h
ecdh_HIFIVE.h
ecdh_JUBJUB.h
ecdh_MDC.h
ecdh_NIST256.h
ecdh_NIST384.h
ecdh_NIST521.h
ecdh_NUMS256E.h
ecdh_NUMS256W.h
ecdh_NUMS384E.h
ecdh_NUMS384W.h
ecdh_NUMS512E.h
ecdh_NUMS512W.h
ecdh_SECP160R1.h
ecdh_SECP256K1.h
ecdh_SM2.h
ecdh_TWEEDLEDEE.h
ecdh_TWEEDLEDUM.h
ecdh_X448.h
ecdh.cpp
ecdh.h
ecp2_BLS12381.h
ecp2_BLS12383.h
ecp2_BLS12443.h
ecp2_BLS12461.h
ecp2_BN158.h
ecp2_BN254.h
ecp2_BN254CX.h
ecp2_BN462.h
ecp2_FP256BN.h
ecp2_FP512BN.h
ecp2.cpp
ecp2.h
ecp4_BLS24479.h
ecp4.cpp
ecp4.h
ecp8_BLS48286.h
ecp8_BLS48556.h
ecp8_BLS48581.h
ecp8.cpp
ecp8.h
ecp_ANSSI.h
ecp_BLS12381.h
ecp_BLS12383.h
ecp_BLS12443.h
ecp_BLS12461.h
ecp_BLS24479.h
ecp_BLS48286.h
ecp_BLS48556.h
ecp_BLS48581.h
ecp_BN158.h
ecp_BN254.h
ecp_BN254CX.h
ecp_BN462.h
ecp_BRAINPOOL.h
ecp_C1174.h
ecp_C1665.h
ecp_C13318.h
ecp_C25519.h
ecp_C41417.h
ecp_Ed448.h
ecp_Ed25519.h
ecp_FP256BN.h
ecp_FP512BN.h
ecp_HIFIVE.h
ecp_JUBJUB.h
ecp_MDC.h
ecp_NIST256.h
ecp_NIST384.h
ecp_NIST521.h
ecp_NUMS256E.h
ecp_NUMS256W.h
ecp_NUMS384E.h
ecp_NUMS384W.h
ecp_NUMS512E.h
ecp_NUMS512W.h
ecp_SECP160R1.h
ecp_SECP256K1.h
ecp_SM2.h
ecp_TWEEDLEDEE.h
ecp_TWEEDLEDUM.h
ecp_X448.h
ecp.cpp
ecp.h
eddsa_ANSSI.h
eddsa_BLS12381.h
eddsa_BLS12383.h
eddsa_BLS12443.h
eddsa_BLS12461.h
eddsa_BLS24479.h
eddsa_BLS48286.h
eddsa_BLS48556.h
eddsa_BLS48581.h
eddsa_BN158.h
eddsa_BN254.h
eddsa_BN254CX.h
eddsa_BN462.h
eddsa_BRAINPOOL.h
eddsa_C1174.h
eddsa_C1665.h
eddsa_C13318.h
eddsa_C25519.h
eddsa_C41417.h
eddsa_Ed448.h
eddsa_Ed25519.h
eddsa_FP256BN.h
eddsa_FP512BN.h
eddsa_HIFIVE.h
eddsa_JUBJUB.h
eddsa_MDC.h
eddsa_NIST256.h
eddsa_NIST384.h
eddsa_NIST521.h
eddsa_NUMS256E.h
eddsa_NUMS256W.h
eddsa_NUMS384E.h
eddsa_NUMS384W.h
eddsa_NUMS512E.h
eddsa_NUMS512W.h
eddsa_SECP160R1.h
eddsa_SECP256K1.h
eddsa_SM2.h
eddsa_TWEEDLEDEE.h
eddsa_TWEEDLEDUM.h
eddsa_X448.h
eddsa.cpp
eddsa.h
ff_RSA2048.h
ff_RSA3072.h
ff_RSA4096.h
ff.cpp
ff.h
fp2_BLS12381.h
fp2_BLS12383.h
fp2_BLS12443.h
fp2_BLS12461.h
fp2_BLS24479.h
fp2_BLS48286.h
fp2_BLS48556.h
fp2_BLS48581.h
fp2_BN158.h
fp2_BN254.h
fp2_BN254CX.h
fp2_BN462.h
fp2_FP256BN.h
fp2_FP512BN.h
fp2.cpp
fp2.h
fp4_BLS12381.h
fp4_BLS12383.h
fp4_BLS12443.h
fp4_BLS12461.h
fp4_BLS24479.h
fp4_BLS48286.h
fp4_BLS48556.h
fp4_BLS48581.h
fp4_BN158.h
fp4_BN254.h
fp4_BN254CX.h
fp4_BN462.h
fp4_FP256BN.h
fp4_FP512BN.h
fp4.cpp
fp4.h
fp8_BLS24479.h
fp8_BLS48286.h
fp8_BLS48556.h
fp8_BLS48581.h
fp8.cpp
fp8.h
fp12_BLS12381.h
fp12_BLS12383.h
fp12_BLS12443.h
fp12_BLS12461.h
fp12_BN158.h
fp12_BN254.h
fp12_BN254CX.h
fp12_BN462.h
fp12_FP256BN.h
fp12_FP512BN.h
fp12.cpp
fp12.h
fp16_BLS48286.h
fp16_BLS48556.h
fp16_BLS48581.h
fp16.cpp
fp16.h
fp24_BLS24479.h
fp24.cpp
fp24.h
fp48_BLS48286.h
fp48_BLS48556.h
fp48_BLS48581.h
fp48.cpp
fp48.h
fp_ANSSI.h
fp_BLS12381.h
fp_BLS12383.h
fp_BLS12443.h
fp_BLS12461.h
fp_BLS24479.h
fp_BLS48286.h
fp_BLS48556.h
fp_BLS48581.h
fp_BN158.h
fp_BN254.h
fp_BN254CX.h
fp_BN462.h
fp_BRAINPOOL.h
fp_C1174.h
fp_C1665.h
fp_C41417.h
fp_F256PME.h
fp_F256PMW.h
fp_F384PM.h
fp_F448.h
fp_F512PM.h
fp_F25519.h
fp_FP256BN.h
fp_FP512BN.h
fp_HIFIVE.h
fp_JUBJUB.h
fp_MDC.h
fp_NIST256.h
fp_NIST384.h
fp_NIST521.h
fp_SECP160R1.h
fp_SECP256K1.h
fp_SM2.h
fp_TWEEDLEDEE.h
fp_TWEEDLEDUM.h
fp.cpp
fp.h
gcm.cpp
hash.cpp
hmac.cpp
hpke_ANSSI.h
hpke_BLS12381.h
hpke_BLS12383.h
hpke_BLS12443.h
hpke_BLS12461.h
hpke_BLS24479.h
hpke_BLS48286.h
hpke_BLS48556.h
hpke_BLS48581.h
hpke_BN158.h
hpke_BN254.h
hpke_BN254CX.h
hpke_BN462.h
hpke_BRAINPOOL.h
hpke_C1174.h
hpke_C1665.h
hpke_C13318.h
hpke_C25519.h
hpke_C41417.h
hpke_Ed448.h
hpke_Ed25519.h
hpke_FP256BN.h
hpke_FP512BN.h
hpke_HIFIVE.h
hpke_JUBJUB.h
hpke_MDC.h
hpke_NIST256.h
hpke_NIST384.h
hpke_NIST521.h
hpke_NUMS256E.h
hpke_NUMS256W.h
hpke_NUMS384E.h
hpke_NUMS384W.h
hpke_NUMS512E.h
hpke_NUMS512W.h
hpke_SECP160R1.h
hpke_SECP256K1.h
hpke_SM2.h
hpke_TWEEDLEDEE.h
hpke_TWEEDLEDUM.h
hpke_X448.h
hpke.cpp
hpke.h
kyber.cpp
kyber.h
mpin192_BLS24479.h
mpin192.cpp
mpin192.h
mpin256_BLS48286.h
mpin256_BLS48556.h
mpin256_BLS48581.h
mpin256.cpp
mpin256.h
mpin_BLS12381.h
mpin_BLS12383.h
mpin_BLS12443.h
mpin_BLS12461.h
mpin_BN158.h
mpin_BN254.h
mpin_BN254CX.h
mpin_BN462.h
mpin_FP256BN.h
mpin_FP512BN.h
mpin.cpp
mpin.h
newhope.cpp
newhope.h
oct.cpp
pair4_BLS24479.h
pair4.cpp
pair4.h
pair8_BLS48286.h
pair8_BLS48556.h
pair8_BLS48581.h
pair8.cpp
pair8.h
pair_BLS12381.h
pair_BLS12383.h
pair_BLS12443.h
pair_BLS12461.h
pair_BN158.h
pair_BN254.h
pair_BN254CX.h
pair_BN462.h
pair_FP256BN.h
pair_FP512BN.h
pair.cpp
pair.h
rand.cpp
randapi.cpp
randapi.h
readme.md
rom_curve_ANSSI.cpp
rom_curve_BLS12381.cpp
rom_curve_BLS12383.cpp
rom_curve_BLS12443.cpp
rom_curve_BLS12461.cpp
rom_curve_BLS24479.cpp
rom_curve_BLS48286.cpp
rom_curve_BLS48556.cpp
rom_curve_BLS48581.cpp
rom_curve_BN158.cpp
rom_curve_BN254.cpp
rom_curve_BN254CX.cpp
rom_curve_BN462.cpp
rom_curve_BRAINPOOL.cpp
rom_curve_C1174.cpp
rom_curve_C1665.cpp
rom_curve_C13318.cpp
rom_curve_C25519.cpp
rom_curve_C41417.cpp
rom_curve_Ed448.cpp
rom_curve_Ed25519.cpp
rom_curve_FP256BN.cpp
rom_curve_FP512BN.cpp
rom_curve_HIFIVE.cpp
rom_curve_JUBJUB.cpp
rom_curve_MDC.cpp
rom_curve_NIST256.cpp
rom_curve_NIST384.cpp
rom_curve_NIST521.cpp
rom_curve_NUMS256E.cpp
rom_curve_NUMS256W.cpp
rom_curve_NUMS384E.cpp
rom_curve_NUMS384W.cpp
rom_curve_NUMS512E.cpp
rom_curve_NUMS512W.cpp
rom_curve_SECP160R1.cpp
rom_curve_SECP256K1.cpp
rom_curve_SM2.cpp
rom_curve_TWEEDLEDEE.cpp
rom_curve_TWEEDLEDUM.cpp
rom_curve_X448.cpp
rom_field_ANSSI.cpp
rom_field_BLS12381.cpp
rom_field_BLS12383.cpp
rom_field_BLS12443.cpp
rom_field_BLS12461.cpp
rom_field_BLS24479.cpp
rom_field_BLS48286.cpp
rom_field_BLS48556.cpp
rom_field_BLS48581.cpp
rom_field_BN158.cpp
rom_field_BN254.cpp
rom_field_BN254CX.cpp
rom_field_BN462.cpp
rom_field_BRAINPOOL.cpp
rom_field_C1174.cpp
rom_field_C1665.cpp
rom_field_C41417.cpp
rom_field_F256PME.cpp
rom_field_F256PMW.cpp
rom_field_F384PM.cpp
rom_field_F448.cpp
rom_field_F512PM.cpp
rom_field_F25519.cpp
rom_field_FP256BN.cpp
rom_field_FP512BN.cpp
rom_field_HIFIVE.cpp
rom_field_JUBJUB.cpp
rom_field_MDC.cpp
rom_field_NIST256.cpp
rom_field_NIST384.cpp
rom_field_NIST521.cpp
rom_field_SECP160R1.cpp
rom_field_SECP256K1.cpp
rom_field_SM2.cpp
rom_field_TWEEDLEDEE.cpp
rom_field_TWEEDLEDUM.cpp
rsa_RSA2048.h
rsa_RSA3072.h
rsa_RSA4096.h
rsa.cpp
rsa.h
share.cpp
testbls
testbls.cpp
testdlthm
testdlthm.cpp
testecc
testecc.cpp
testeddsa
testeddsa.cpp
testhpke.cpp
testhtp.cpp
testkyber
testkyber.cpp
testmpin
testmpin.cpp
testnhs
testnhs.cpp
testx509.cpp
x509.cpp
x509.h

Description

This C++ version is really just C plus namespaces. Namespaces are the only feature of C++ that is used

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.

Installation and Testing

To build a 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 g++ compiler. For clang++ edit the config*.py files and substitute "clang++" for "g++". Note that clang++ is about 10-15% faster.*

Make sure to use a 64-bit compiler on a 64-bit architecture.


To create a 32-bit library

python3 config32.py

Then select options 1, 3, 7, 28, 30, 37, 38 and 42, which are fixed for the example programs. (For a 16-bit build select 1, 4 and 6). Select 0 then to exit.

Then compile

g++ -O2  testecc.cpp core.a -o testecc

(if using MINGW-W64 in Windows change -o testecc to -o testecc.exe)

The test program exercises 3 different ordinary elliptic curves (for ECDH Key exchange, ECDSA signature and ECIES encryption), plus RSA, all in the one binary

Next compile

g++ -O2  testeddsa.cpp core.a -o testeddsa

This test program exercises the EDDSA signature algorithm using the Edwards curves Ed25519 and Ed448

Next compile

g++ -O2  testmpin.cpp core.a -o testmpin

This test program exercises 4 different pairing friendly curves using the MPIN authentication protocol.

The correct PIN is 1234

Next compile

g++ -O2  testbls.cpp core.a -o testbls

This program implements the pairing-based BLS signature

Next compile

g++ -O2  benchtest_all.cpp core.a -o benchtest_all

This program provides some timings.

Finally

 g++ -O2  testnhs.cpp core.a -o testnhs

Alternatively building and testing can be combined via

python3 configXX.py test

where XX can be 16, 32 or 64

Note that this builds the library for ALL of the options. Executables of the above test programs are created, and can be run immediately.


NEW: support for emerging Hash To Curve standard. See https://datatracker.ietf.org/doc/draft-irtf-cfrg-hash-to-curve/

Create 32 or 64-bit library selecting curves 1, 2, 3, 7, 17 and 31 (Ed25519, C25519, NIST256, Ed448, SECP256K1 and BLS12381)

g++ -O2 testhtp.cpp core.a -o testhtp

Test program runs through test vectors from the draft standard.


NEW: Experimental support for emerging HPKE (Hybrid Public Key Encryption) standard. See https://datatracker.ietf.org/doc/draft-irtf-cfrg-hpke/

New hpke.cpp/.h api files

  • Supports KEM_IDs for X25519, X448, P256 and P521
  • Supports HDF_IDs for SHA256/512
  • Supports AEAD_IDs for AES-GCM-128/256 only

Create 32 or 64-bit library selecting curves 2 and 10 (X25519 and P521)

g++ -O2 testhpke.cpp core.a -o testhpke

Test program runs through test vectors for all modes 0-3.


*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 "g++" was used before.