git: c56f6dae426c - stable/13 - Add 'crypto/libecc/' from commit '736d663976d1768533badbf06581481d01fade4c'

From: Kyle Evans <kevans_at_FreeBSD.org>
Date: Sat, 11 Jan 2025 02:48:42 UTC
The branch stable/13 has been updated by kevans:

URL: https://cgit.FreeBSD.org/src/commit/?id=c56f6dae426c76bf060c1986fe9bdd4efbd13813

commit c56f6dae426c76bf060c1986fe9bdd4efbd13813
Author:     Kyle Evans <kevans@FreeBSD.org>
AuthorDate: 2025-01-01 21:11:18 +0000
Commit:     Kyle Evans <kevans@FreeBSD.org>
CommitDate: 2025-01-11 02:48:29 +0000

    Add 'crypto/libecc/' from commit '736d663976d1768533badbf06581481d01fade4c'
    
    git-subtree-dir: crypto/libecc
    git-subtree-mainline: f59bb61e1eb4d1e4fc3c60cc14779d0668267cb2
    git-subtree-split: 736d663976d1768533badbf06581481d01fade4c
    (cherry picked from commit f0865ec9906d5a18fa2a3b61381f22ce16e606ad)
---
 crypto/libecc/.github/workflows/libecc_cifuzz.yml  |     26 +
 .../.github/workflows/libecc_compilation_tests.yml |     57 +
 .../.github/workflows/libecc_crossarch_tests.yml   |     55 +
 .../libecc/.github/workflows/libecc_examples.yml   |     39 +
 .../.github/workflows/libecc_meson_build.yml       |     37 +
 .../.github/workflows/libecc_python_tests.yml      |     43 +
 .../.github/workflows/libecc_runtime_tests.yml     |     39 +
 crypto/libecc/.gitignore                           |      4 +
 crypto/libecc/.travis.yml                          |    287 +
 crypto/libecc/LICENSE                              |     50 +
 crypto/libecc/Makefile                             |    175 +
 crypto/libecc/README.md                            |   1345 +
 crypto/libecc/build/.gitignore                     |      3 +
 crypto/libecc/common.mk                            |    349 +
 crypto/libecc/include/libecc/curves/aff_pt.h       |    136 +
 crypto/libecc/include/libecc/curves/curves.h       |     31 +
 crypto/libecc/include/libecc/curves/curves_list.h  |    248 +
 crypto/libecc/include/libecc/curves/ec_edwards.h   |     39 +
 .../libecc/include/libecc/curves/ec_montgomery.h   |     34 +
 crypto/libecc/include/libecc/curves/ec_params.h    |     91 +
 crypto/libecc/include/libecc/curves/ec_shortw.h    |     45 +
 .../libecc/curves/known/ec_params_bign256v1.h      |    315 +
 .../libecc/curves/known/ec_params_bign384v1.h      |    337 +
 .../libecc/curves/known/ec_params_bign512v1.h      |    359 +
 .../curves/known/ec_params_brainpoolp192r1.h       |    334 +
 .../curves/known/ec_params_brainpoolp192t1.h       |    316 +
 .../curves/known/ec_params_brainpoolp224r1.h       |    295 +
 .../curves/known/ec_params_brainpoolp224t1.h       |    333 +
 .../curves/known/ec_params_brainpoolp256r1.h       |    227 +
 .../curves/known/ec_params_brainpoolp256t1.h       |    333 +
 .../curves/known/ec_params_brainpoolp320r1.h       |    350 +
 .../curves/known/ec_params_brainpoolp320t1.h       |    350 +
 .../curves/known/ec_params_brainpoolp384r1.h       |    265 +
 .../curves/known/ec_params_brainpoolp384t1.h       |    367 +
 .../curves/known/ec_params_brainpoolp512r1.h       |    276 +
 .../curves/known/ec_params_brainpoolp512t1.h       |    401 +
 .../libecc/curves/known/ec_params_external.h       |    104 +
 .../libecc/curves/known/ec_params_frp256v1.h       |    233 +
 .../libecc/curves/known/ec_params_gost256.h        |    233 +
 .../libecc/curves/known/ec_params_gost512.h        |    286 +
 ...c_params_gost_R3410_2001_CryptoPro_A_ParamSet.h |    315 +
 ...c_params_gost_R3410_2001_CryptoPro_B_ParamSet.h |    324 +
 ...c_params_gost_R3410_2001_CryptoPro_C_ParamSet.h |    333 +
 ...arams_gost_R3410_2001_CryptoPro_XchA_ParamSet.h |    315 +
 ...arams_gost_R3410_2001_CryptoPro_XchB_ParamSet.h |    333 +
 .../known/ec_params_gost_R3410_2001_TestParamSet.h |    324 +
 .../ec_params_gost_R3410_2012_256_paramSetA.h      |    316 +
 .../ec_params_gost_R3410_2012_256_paramSetB.h      |    315 +
 .../ec_params_gost_R3410_2012_256_paramSetC.h      |    324 +
 .../ec_params_gost_R3410_2012_256_paramSetD.h      |    333 +
 .../ec_params_gost_R3410_2012_512_paramSetA.h      |    359 +
 .../ec_params_gost_R3410_2012_512_paramSetB.h      |    380 +
 .../ec_params_gost_R3410_2012_512_paramSetC.h      |    359 +
 .../ec_params_gost_R3410_2012_512_paramSetTest.h   |    401 +
 .../libecc/curves/known/ec_params_secp192k1.h      |    307 +
 .../libecc/curves/known/ec_params_secp192r1.h      |    312 +
 .../libecc/curves/known/ec_params_secp224k1.h      |    320 +
 .../libecc/curves/known/ec_params_secp224r1.h      |    279 +
 .../libecc/curves/known/ec_params_secp256k1.h      |    318 +
 .../libecc/curves/known/ec_params_secp256r1.h      |    227 +
 .../libecc/curves/known/ec_params_secp384r1.h      |    250 +
 .../libecc/curves/known/ec_params_secp521r1.h      |    327 +
 .../libecc/curves/known/ec_params_sm2p192test.h    |    326 +
 .../libecc/curves/known/ec_params_sm2p256test.h    |    349 +
 .../libecc/curves/known/ec_params_sm2p256v1.h      |    350 +
 .../libecc/curves/known/ec_params_wei25519.h       |    334 +
 .../include/libecc/curves/known/ec_params_wei448.h |    391 +
 crypto/libecc/include/libecc/curves/prj_pt.h       |     88 +
 crypto/libecc/include/libecc/ecdh/ecccdh.h         |     63 +
 crypto/libecc/include/libecc/ecdh/ecdh.h           |     21 +
 crypto/libecc/include/libecc/ecdh/x25519_448.h     |     62 +
 crypto/libecc/include/libecc/external_deps/print.h |     34 +
 crypto/libecc/include/libecc/external_deps/rand.h  |     22 +
 crypto/libecc/include/libecc/external_deps/time.h  |     23 +
 crypto/libecc/include/libecc/fp/fp.h               |     98 +
 crypto/libecc/include/libecc/fp/fp_add.h           |     26 +
 crypto/libecc/include/libecc/fp/fp_config.h        |     25 +
 crypto/libecc/include/libecc/fp/fp_montgomery.h    |     30 +
 crypto/libecc/include/libecc/fp/fp_mul.h           |     26 +
 crypto/libecc/include/libecc/fp/fp_mul_redc1.h     |     25 +
 crypto/libecc/include/libecc/fp/fp_pow.h           |     22 +
 crypto/libecc/include/libecc/fp/fp_rand.h          |     22 +
 crypto/libecc/include/libecc/fp/fp_sqrt.h          |     25 +
 crypto/libecc/include/libecc/hash/bash.h           |    162 +
 crypto/libecc/include/libecc/hash/bash224.h        |     64 +
 crypto/libecc/include/libecc/hash/bash256.h        |     64 +
 crypto/libecc/include/libecc/hash/bash384.h        |     64 +
 crypto/libecc/include/libecc/hash/bash512.h        |     64 +
 crypto/libecc/include/libecc/hash/belt-hash.h      |    164 +
 crypto/libecc/include/libecc/hash/hash_algs.h      |    554 +
 crypto/libecc/include/libecc/hash/hmac.h           |     38 +
 crypto/libecc/include/libecc/hash/keccak.h         |    112 +
 crypto/libecc/include/libecc/hash/ripemd160.h      |     73 +
 crypto/libecc/include/libecc/hash/sha2.h           |    219 +
 crypto/libecc/include/libecc/hash/sha224.h         |     79 +
 crypto/libecc/include/libecc/hash/sha256.h         |     79 +
 crypto/libecc/include/libecc/hash/sha3-224.h       |     69 +
 crypto/libecc/include/libecc/hash/sha3-256.h       |     69 +
 crypto/libecc/include/libecc/hash/sha3-384.h       |     69 +
 crypto/libecc/include/libecc/hash/sha3-512.h       |     69 +
 crypto/libecc/include/libecc/hash/sha3.h           |     46 +
 crypto/libecc/include/libecc/hash/sha384.h         |     79 +
 crypto/libecc/include/libecc/hash/sha512-224.h     |     71 +
 crypto/libecc/include/libecc/hash/sha512-256.h     |     71 +
 crypto/libecc/include/libecc/hash/sha512.h         |     71 +
 crypto/libecc/include/libecc/hash/sha512_core.h    |     46 +
 crypto/libecc/include/libecc/hash/shake.h          |     41 +
 crypto/libecc/include/libecc/hash/shake256.h       |     68 +
 crypto/libecc/include/libecc/hash/sm3.h            |     73 +
 crypto/libecc/include/libecc/hash/streebog.h       |   1301 +
 crypto/libecc/include/libecc/hash/streebog256.h    |     65 +
 crypto/libecc/include/libecc/hash/streebog512.h    |     65 +
 crypto/libecc/include/libecc/lib_ecc_config.h      |    134 +
 crypto/libecc/include/libecc/lib_ecc_types.h       |    288 +
 crypto/libecc/include/libecc/libarith.h            |     41 +
 crypto/libecc/include/libecc/libec.h               |     30 +
 crypto/libecc/include/libecc/libsig.h              |     37 +
 crypto/libecc/include/libecc/meson.build           |    156 +
 crypto/libecc/include/libecc/nn/nn.h               |     96 +
 crypto/libecc/include/libecc/nn/nn_add.h           |     32 +
 crypto/libecc/include/libecc/nn/nn_config.h        |    220 +
 crypto/libecc/include/libecc/nn/nn_div.h           |     43 +
 crypto/libecc/include/libecc/nn/nn_div_public.h    |     30 +
 crypto/libecc/include/libecc/nn/nn_logical.h       |     34 +
 crypto/libecc/include/libecc/nn/nn_mod_pow.h       |     23 +
 crypto/libecc/include/libecc/nn/nn_modinv.h        |     26 +
 crypto/libecc/include/libecc/nn/nn_mul.h           |     29 +
 crypto/libecc/include/libecc/nn/nn_mul_public.h    |     24 +
 crypto/libecc/include/libecc/nn/nn_mul_redc1.h     |     26 +
 crypto/libecc/include/libecc/nn/nn_rand.h          |     24 +
 crypto/libecc/include/libecc/sig/bign.h            |     40 +
 crypto/libecc/include/libecc/sig/bign_common.h     |    101 +
 crypto/libecc/include/libecc/sig/bip0340.h         |     73 +
 crypto/libecc/include/libecc/sig/dbign.h           |     40 +
 crypto/libecc/include/libecc/sig/decdsa.h          |     48 +
 crypto/libecc/include/libecc/sig/ec_key.h          |    224 +
 crypto/libecc/include/libecc/sig/ecdsa.h           |     48 +
 crypto/libecc/include/libecc/sig/ecdsa_common.h    |     88 +
 crypto/libecc/include/libecc/sig/ecfsdsa.h         |     94 +
 crypto/libecc/include/libecc/sig/ecgdsa.h          |     85 +
 crypto/libecc/include/libecc/sig/eckcdsa.h         |     84 +
 crypto/libecc/include/libecc/sig/ecosdsa.h         |     69 +
 crypto/libecc/include/libecc/sig/ecrdsa.h          |     85 +
 crypto/libecc/include/libecc/sig/ecsdsa.h          |     81 +
 crypto/libecc/include/libecc/sig/ecsdsa_common.h   |     51 +
 crypto/libecc/include/libecc/sig/eddsa.h           |    134 +
 crypto/libecc/include/libecc/sig/fuzzing_ecdsa.h   |     28 +
 crypto/libecc/include/libecc/sig/fuzzing_ecgdsa.h  |     28 +
 crypto/libecc/include/libecc/sig/fuzzing_ecrdsa.h  |     28 +
 crypto/libecc/include/libecc/sig/sig_algs.h        |    113 +
 .../libecc/include/libecc/sig/sig_algs_internal.h  |    650 +
 crypto/libecc/include/libecc/sig/sm2.h             |     83 +
 crypto/libecc/include/libecc/utils/dbg_sig.h       |     61 +
 crypto/libecc/include/libecc/utils/print_buf.h     |     18 +
 crypto/libecc/include/libecc/utils/print_curves.h  |     28 +
 crypto/libecc/include/libecc/utils/print_fp.h      |     28 +
 crypto/libecc/include/libecc/utils/print_keys.h    |     26 +
 crypto/libecc/include/libecc/utils/print_nn.h      |     24 +
 crypto/libecc/include/libecc/utils/utils.h         |    196 +
 crypto/libecc/include/libecc/utils/utils_rand.h    |     22 +
 crypto/libecc/include/libecc/words/types.h         |    163 +
 crypto/libecc/include/libecc/words/words.h         |    129 +
 crypto/libecc/include/libecc/words/words_16.h      |     73 +
 crypto/libecc/include/libecc/words/words_32.h      |     73 +
 crypto/libecc/include/libecc/words/words_64.h      |     74 +
 crypto/libecc/meson.build                          |    282 +
 crypto/libecc/meson.options                        |    127 +
 crypto/libecc/scripts/crossbuild.sh                |    315 +
 crypto/libecc/scripts/crossrun.sh                  |    124 +
 crypto/libecc/scripts/expand_libecc.py             |   1956 +
 crypto/libecc/scripts/gen_curves_tests.sh          |     89 +
 crypto/libecc/scripts/gen_openssl_curves_tests.sh  |     52 +
 crypto/libecc/scripts/sha3.py                      |    115 +
 crypto/libecc/scripts/test_ec_utils.sh             |     82 +
 crypto/libecc/src/arithmetic_tests/Makefile        |     26 +
 .../libecc/src/arithmetic_tests/arithmetic_tests.c |   1233 +
 .../arithmetic_tests/arithmetic_tests_generator.py |   2009 +
 crypto/libecc/src/curves/aff_pt.c                  |    346 +
 crypto/libecc/src/curves/aff_pt_edwards.c          |    855 +
 crypto/libecc/src/curves/aff_pt_montgomery.c       |    579 +
 crypto/libecc/src/curves/curves.c                  |    256 +
 crypto/libecc/src/curves/ec_edwards.c              |     79 +
 crypto/libecc/src/curves/ec_montgomery.c           |     85 +
 crypto/libecc/src/curves/ec_params.c               |    194 +
 crypto/libecc/src/curves/ec_shortw.c               |    107 +
 crypto/libecc/src/curves/meson.build               |     11 +
 crypto/libecc/src/curves/prj_pt.c                  |   2113 +
 crypto/libecc/src/ecdh/ecccdh.c                    |    242 +
 crypto/libecc/src/ecdh/meson.build                 |      4 +
 crypto/libecc/src/ecdh/x25519_448.c                |    435 +
 crypto/libecc/src/examples/Makefile                |     50 +
 crypto/libecc/src/examples/basic/Makefile          |     43 +
 .../src/examples/basic/curve_basic_examples.c      |    401 +
 crypto/libecc/src/examples/basic/curve_ecdh.c      |    284 +
 .../libecc/src/examples/basic/fp_square_residue.c  |    131 +
 crypto/libecc/src/examples/basic/nn_miller_rabin.c |    223 +
 crypto/libecc/src/examples/basic/nn_pollard_rho.c  |    259 +
 crypto/libecc/src/examples/hash/Makefile           |     37 +
 crypto/libecc/src/examples/hash/gostr34_11_94.c    |    631 +
 crypto/libecc/src/examples/hash/gostr34_11_94.h    |    193 +
 crypto/libecc/src/examples/hash/hash.c             |    510 +
 crypto/libecc/src/examples/hash/hash.h             |    106 +
 crypto/libecc/src/examples/hash/md2.c              |    228 +
 crypto/libecc/src/examples/hash/md2.h              |     63 +
 crypto/libecc/src/examples/hash/md4.c              |    264 +
 crypto/libecc/src/examples/hash/md4.h              |    136 +
 crypto/libecc/src/examples/hash/md5.c              |    265 +
 crypto/libecc/src/examples/hash/md5.h              |    137 +
 crypto/libecc/src/examples/hash/mdc2.c             |    305 +
 crypto/libecc/src/examples/hash/mdc2.h             |    102 +
 crypto/libecc/src/examples/hash/sha0.c             |    264 +
 crypto/libecc/src/examples/hash/sha0.h             |    135 +
 crypto/libecc/src/examples/hash/sha1.c             |    264 +
 crypto/libecc/src/examples/hash/sha1.h             |    135 +
 crypto/libecc/src/examples/hash/tdes.c             |    492 +
 crypto/libecc/src/examples/hash/tdes.h             |     77 +
 crypto/libecc/src/examples/sig/Makefile            |     52 +
 crypto/libecc/src/examples/sig/common/common.h     |    248 +
 crypto/libecc/src/examples/sig/dsa/Makefile        |     34 +
 crypto/libecc/src/examples/sig/dsa/dsa.c           |    555 +
 crypto/libecc/src/examples/sig/dsa/dsa.h           |     75 +
 .../libecc/src/examples/sig/gostr34_10_94/Makefile |     34 +
 .../src/examples/sig/gostr34_10_94/gostr34_10_94.c |    521 +
 .../src/examples/sig/gostr34_10_94/gostr34_10_94.h |     72 +
 crypto/libecc/src/examples/sig/kcdsa/Makefile      |     37 +
 crypto/libecc/src/examples/sig/kcdsa/kcdsa.c       |    759 +
 crypto/libecc/src/examples/sig/kcdsa/kcdsa.h       |     72 +
 crypto/libecc/src/examples/sig/rsa/Makefile        |     36 +
 crypto/libecc/src/examples/sig/rsa/rsa.c           |   2057 +
 crypto/libecc/src/examples/sig/rsa/rsa.h           |    187 +
 .../libecc/src/examples/sig/rsa/rsa_pkcs1_tests.h  | 111724 +++
 crypto/libecc/src/examples/sig/rsa/rsa_tests.h     |    215 +
 crypto/libecc/src/examples/sig/sdsa/Makefile       |     34 +
 crypto/libecc/src/examples/sig/sdsa/sdsa.c         |    467 +
 crypto/libecc/src/examples/sig/sdsa/sdsa.h         |     72 +
 crypto/libecc/src/examples/sss/Makefile            |     44 +
 crypto/libecc/src/examples/sss/sss.c               |    772 +
 crypto/libecc/src/examples/sss/sss.h               |     98 +
 crypto/libecc/src/examples/sss/sss_private.h       |     30 +
 crypto/libecc/src/external_deps/meson.build        |      5 +
 crypto/libecc/src/external_deps/print.c            |     31 +
 crypto/libecc/src/external_deps/rand.c             |    121 +
 crypto/libecc/src/external_deps/time.c             |     72 +
 crypto/libecc/src/fp/fp.c                          |    470 +
 crypto/libecc/src/fp/fp_add.c                      |    140 +
 crypto/libecc/src/fp/fp_montgomery.c               |     91 +
 crypto/libecc/src/fp/fp_mul.c                      |    138 +
 crypto/libecc/src/fp/fp_mul_redc1.c                |    112 +
 crypto/libecc/src/fp/fp_pow.c                      |     79 +
 crypto/libecc/src/fp/fp_rand.c                     |     34 +
 crypto/libecc/src/fp/fp_sqrt.c                     |    281 +
 crypto/libecc/src/fp/meson.build                   |     10 +
 crypto/libecc/src/hash/bash.c                      |    138 +
 crypto/libecc/src/hash/bash224.c                   |    110 +
 crypto/libecc/src/hash/bash256.c                   |    110 +
 crypto/libecc/src/hash/bash384.c                   |    114 +
 crypto/libecc/src/hash/bash512.c                   |    110 +
 crypto/libecc/src/hash/belt-hash.c                 |    471 +
 crypto/libecc/src/hash/hash_algs.c                 |    429 +
 crypto/libecc/src/hash/hmac.c                      |    185 +
 crypto/libecc/src/hash/meson.build                 |     27 +
 crypto/libecc/src/hash/ripemd160.c                 |    348 +
 crypto/libecc/src/hash/sha224.c                    |    250 +
 crypto/libecc/src/hash/sha256.c                    |    241 +
 crypto/libecc/src/hash/sha3-224.c                  |    115 +
 crypto/libecc/src/hash/sha3-256.c                  |    115 +
 crypto/libecc/src/hash/sha3-384.c                  |    119 +
 crypto/libecc/src/hash/sha3-512.c                  |    115 +
 crypto/libecc/src/hash/sha3.c                      |    116 +
 crypto/libecc/src/hash/sha384.c                    |    255 +
 crypto/libecc/src/hash/sha512-224.c                |    124 +
 crypto/libecc/src/hash/sha512-256.c                |    124 +
 crypto/libecc/src/hash/sha512.c                    |    125 +
 crypto/libecc/src/hash/sha512_core.c               |    189 +
 crypto/libecc/src/hash/shake.c                     |    103 +
 crypto/libecc/src/hash/shake256.c                  |     96 +
 crypto/libecc/src/hash/sm3.c                       |    360 +
 crypto/libecc/src/hash/streebog.c                  |    344 +
 crypto/libecc/src/nn/meson.build                   |     11 +
 crypto/libecc/src/nn/nn.c                          |    608 +
 crypto/libecc/src/nn/nn_add.c                      |    613 +
 crypto/libecc/src/nn/nn_div.c                      |   1271 +
 crypto/libecc/src/nn/nn_div.h                      |     43 +
 crypto/libecc/src/nn/nn_logical.c                  |    577 +
 crypto/libecc/src/nn/nn_mod_pow.c                  |    334 +
 crypto/libecc/src/nn/nn_modinv.c                   |    587 +
 crypto/libecc/src/nn/nn_mul.c                      |    197 +
 crypto/libecc/src/nn/nn_mul.h                      |     29 +
 crypto/libecc/src/nn/nn_mul_redc1.c                |    342 +
 crypto/libecc/src/nn/nn_rand.c                     |    133 +
 crypto/libecc/src/sig/bign.c                       |     79 +
 crypto/libecc/src/sig/bign_common.c                |   1001 +
 crypto/libecc/src/sig/bip0340.c                    |   1325 +
 crypto/libecc/src/sig/dbign.c                      |    115 +
 crypto/libecc/src/sig/decdsa.c                     |    121 +
 crypto/libecc/src/sig/ec_key.c                     |    620 +
 crypto/libecc/src/sig/ecdsa.c                      |     85 +
 crypto/libecc/src/sig/ecdsa_common.c               |   1039 +
 crypto/libecc/src/sig/ecfsdsa.c                    |   1087 +
 crypto/libecc/src/sig/ecgdsa.c                     |    621 +
 crypto/libecc/src/sig/eckcdsa.c                    |    841 +
 crypto/libecc/src/sig/ecosdsa.c                    |     99 +
 crypto/libecc/src/sig/ecrdsa.c                     |    623 +
 crypto/libecc/src/sig/ecsdsa.c                     |     97 +
 crypto/libecc/src/sig/ecsdsa_common.c              |    632 +
 crypto/libecc/src/sig/eddsa.c                      |   2935 +
 crypto/libecc/src/sig/fuzzing_ecdsa.c              |    434 +
 crypto/libecc/src/sig/fuzzing_ecgdsa.c             |    391 +
 crypto/libecc/src/sig/fuzzing_ecrdsa.c             |    425 +
 crypto/libecc/src/sig/meson.build                  |     26 +
 crypto/libecc/src/sig/sig_algs.c                   |   1112 +
 crypto/libecc/src/sig/sm2.c                        |    724 +
 crypto/libecc/src/tests/bign_test_vectors.h        |    448 +
 crypto/libecc/src/tests/bip0340_test_vectors.h     |    204 +
 crypto/libecc/src/tests/dbign_test_vectors.h       |    232 +
 crypto/libecc/src/tests/decdsa_test_vectors.h      |   1362 +
 crypto/libecc/src/tests/ec_self_tests.c            |    302 +
 crypto/libecc/src/tests/ec_self_tests.h            |     21 +
 crypto/libecc/src/tests/ec_self_tests_core.c       |   1975 +
 crypto/libecc/src/tests/ec_self_tests_core.h       |   5757 +
 crypto/libecc/src/tests/ec_utils.c                 |   1878 +
 crypto/libecc/src/tests/ecccdh_test_vectors.h      |   3750 +
 crypto/libecc/src/tests/ed25519_test_vectors.h     |  24610 +
 crypto/libecc/src/tests/ed25519ctx_test_vectors.h  |    138 +
 crypto/libecc/src/tests/ed25519ph_test_vectors.h   |     45 +
 crypto/libecc/src/tests/ed448_test_vectors.h       |    317 +
 crypto/libecc/src/tests/ed448ph_test_vectors.h     |     74 +
 crypto/libecc/src/tests/meson.build                |     55 +
 crypto/libecc/src/tests/x25519_test_vectors.h      |    142 +
 crypto/libecc/src/tests/x448_test_vectors.h        |     75 +
 crypto/libecc/src/utils/meson.build                |     15 +
 crypto/libecc/src/utils/print_buf.c                |     31 +
 crypto/libecc/src/utils/print_curves.c             |     76 +
 crypto/libecc/src/utils/print_fp.c                 |     65 +
 crypto/libecc/src/utils/print_keys.c               |     42 +
 crypto/libecc/src/utils/print_nn.c                 |     37 +
 crypto/libecc/src/utils/utils.c                    |    233 +
 crypto/libecc/src/utils/utils_rand.c               |     51 +
 crypto/libecc/src/utils/utils_rand.h               |     22 +
 crypto/libecc/src/wycheproof_tests/Makefile        |     17 +
 .../src/wycheproof_tests/libecc_wycheproof.c       |    838 +
 .../src/wycheproof_tests/libecc_wycheproof.h       |    151 +
 .../src/wycheproof_tests/libecc_wycheproof_tests.h | 728074 ++++++++++++++++++
 crypto/libecc/support/meson/armv7em-noneabi.ini    |     17 +
 344 files changed, 959066 insertions(+)

diff --git a/crypto/libecc/.github/workflows/libecc_cifuzz.yml b/crypto/libecc/.github/workflows/libecc_cifuzz.yml
new file mode 100644
index 000000000000..d315da238fc6
--- /dev/null
+++ b/crypto/libecc/.github/workflows/libecc_cifuzz.yml
@@ -0,0 +1,26 @@
+name: CIFuzz
+on: [pull_request]
+jobs:
+  Fuzzing:
+    runs-on: ubuntu-latest
+    steps:
+    - name: Build Fuzzers
+      id: build
+      uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@master
+      with:
+        oss-fuzz-project-name: 'libecc'
+        dry-run: false
+        language: c++
+    - name: Run Fuzzers
+      uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@master
+      with:
+        oss-fuzz-project-name: 'libecc'
+        fuzz-seconds: 300
+        dry-run: false
+        language: c++
+    - name: Upload Crash
+      uses: actions/upload-artifact@v3
+      if: failure() && steps.build.outcome == 'success'
+      with:
+        name: artifacts
+        path: ./out/artifacts
diff --git a/crypto/libecc/.github/workflows/libecc_compilation_tests.yml b/crypto/libecc/.github/workflows/libecc_compilation_tests.yml
new file mode 100644
index 000000000000..76aae957f362
--- /dev/null
+++ b/crypto/libecc/.github/workflows/libecc_compilation_tests.yml
@@ -0,0 +1,57 @@
+name: libecc
+
+# Run this workflow every time a new commit pushed to your repository
+on: push
+
+jobs:
+  compilation_tests:
+    runs-on: ubuntu-22.04
+    strategy:
+      #max-parallel: 10
+      matrix:
+        cc: [gcc, clang, g++, clang++]
+        blinding: [0, 1]
+        complete: [0, 1]
+        ladder: [0, 1]
+        cryptofuzz: [0, 1]
+        optflags: ["-O3", "-O2", "-O1"]
+    steps:
+      # Checkout repository
+      - name: checkout repository
+        uses: actions/checkout@v2
+      # Run actions
+      # libecc compilation tests
+      - name: libecc compilation tests
+        env:
+          CC: ${{ matrix.cc }}
+          BLINDING: ${{ matrix.blinding }}
+          COMPLETE: ${{ matrix.complete }}
+          LADDER: ${{ matrix.ladder }}
+          CRYPTOFUZZ: ${{ matrix.cryptofuzz }}
+          EXTRA_LIB_CFLAGS: ${{ matrix.optflags }}
+          EXTRA_BIN_CFLAGS: ${{ matrix.optflags }}
+        shell: bash
+        run: |
+          # Compilation tests of all cases
+          #
+          make && cd src/arithmetic_tests/ && make clean && make bin && make clean && cd -;
+          cd src/examples/ && make clean && make && cd - && make clean;
+          make 16;
+          cd src/examples/ && make clean && make 16 && cd - && make clean;
+          make 32;
+          cd src/examples/ && make clean && make 32 && cd - && make clean;
+          make 64;
+          cd src/examples/ && make clean && make 64 && cd - && make clean;
+          # We perform one test with the sanitizers
+          USE_SANITIZERS=1 make;
+          cd src/examples/ && make clean && USE_SANITIZERS=1 make && cd - && make clean;
+          #
+          make debug;
+          cd src/examples/ && make clean && make debug && cd - && make clean;
+          make debug16;
+          cd src/examples/ && make clean && make debug16 && cd - && make clean;
+          make debug32;
+          cd src/examples/ && make clean && make debug32 && cd - && make clean;
+          make debug64;
+          cd src/examples/ && make clean && make debug64 && cd - && make clean;
+        continue-on-error: false
diff --git a/crypto/libecc/.github/workflows/libecc_crossarch_tests.yml b/crypto/libecc/.github/workflows/libecc_crossarch_tests.yml
new file mode 100644
index 000000000000..93dbca1b5719
--- /dev/null
+++ b/crypto/libecc/.github/workflows/libecc_crossarch_tests.yml
@@ -0,0 +1,55 @@
+name: libecc
+
+# Run this workflow every time a new commit pushed to your repository
+on: push
+
+jobs:
+  cross_arch_tests:
+    runs-on: ubuntu-20.04
+    strategy:
+      #max-parallel: 10
+      matrix:
+        blinding: [0, 1]
+        complete: [1]
+        ladder: [1]
+        #cross_target: [arm-linux-gnueabi, arm-linux-gnueabihf, aarch64-linux-gnu, powerpc64le-linux-gnu, mipsel-linux-gnu, i686-w64-mingw32, x86_64-w64-mingw32, i386-apple-darwin, x86_64-apple-darwin, x86_64h-apple-darwin]
+        cross_target: [arm-linux-gnueabi, arm-linux-gnueabihf, aarch64-linux-gnu, powerpc64le-linux-gnu, mipsel-linux-gnu, i686-w64-mingw32, x86_64-w64-mingw32]
+        cross_size: [16, 32, 64]
+    steps:
+      # Add swap because of possible out of memory issues
+      - name: Set Swap Space
+        uses: pierotofy/set-swap-space@master
+        with:
+          swap-size-gb: 10
+      # Checkout repository
+      - name: checkout repository
+        uses: actions/checkout@v2
+      # Run actions
+      # Cross build and cross run tests
+      - name: libecc cross-arch tests
+        env:
+          BLINDING: ${{ matrix.blinding }}
+          COMPLETE: ${{ matrix.complete }}
+          LADDER: ${{ matrix.ladder }}
+          CROSS_TARGET: ${{ matrix.cross_target }}
+          CROSS_SIZE: ${{ matrix.cross_size }}
+          CRYPTOFUZZ: 1
+        shell: bash
+        run: |
+          # Install stuff
+          sudo apt-get update;
+          # This oddity is due to ubuntu (18.04 and 20.04) issue with wine32 in
+          # githbub actions runners ...
+          sudo apt-get -y install software-properties-common;
+          sudo apt-add-repository "ppa:ondrej/php" -y;
+          sudo dpkg --add-architecture i386;
+          sudo apt-get update;
+          sudo apt-get -y install qemu-user-static wine-stable wine32 wine64;
+          # Cross build jobs
+          docker pull multiarch/crossbuild;
+          sh scripts/crossbuild.sh -triplet "${CROSS_TARGET}" "${CROSS_SIZE}";
+          # Check for errors
+          [ ! -z "$(ls -A scripts/crossbuild_out/error_log/)" ] && exit -1;
+          # Test generated cross binaries through qemu-static;
+          sh scripts/crossrun.sh -triplet "${CROSS_TARGET}" "${CROSS_SIZE}";
+        continue-on-error: false
diff --git a/crypto/libecc/.github/workflows/libecc_examples.yml b/crypto/libecc/.github/workflows/libecc_examples.yml
new file mode 100644
index 000000000000..f50e6da9ee60
--- /dev/null
+++ b/crypto/libecc/.github/workflows/libecc_examples.yml
@@ -0,0 +1,39 @@
+name: libecc
+
+# Run this workflow every time a new commit pushed to your repository
+on: push
+
+jobs:
+  examples:
+    runs-on: ubuntu-22.04
+    strategy:
+      #max-parallel: 10
+      matrix:
+        cc: [gcc, clang]
+        blinding: [0, 1]
+        cryptofuzz: [1]
+    steps:
+      # Checkout repository
+      - name: checkout repository
+        uses: actions/checkout@v2
+      # Run actions
+      # libecc examples tests
+      - name: libecc examples tests
+        env:
+          CC: ${{ matrix.cc }}
+          BLINDING: ${{ matrix.blinding }}
+          CRYPTOFUZZ: ${{ matrix.cryptofuzz }}
+          ASSERT_PRINT: 1
+          # We want to parallelize self tests
+          OPENMP_SELF_TESTS: 1
+        shell: bash
+        run: |
+          # Install OpenMP
+          sudo apt-get update;
+          sudo apt-get -y install libomp-dev;
+          # Compile and compile the tests
+          #
+          EXTRA_CFLAGS="-DUSER_NN_BIT_LEN=4096" make && cd src/examples/ && EXTRA_CFLAGS="-DUSER_NN_BIT_LEN=4096" make && ./sig/rsa/rsa && ./sig/dsa/dsa && ./sig/kcdsa/kcdsa && ./sig/sdsa/sdsa && ./sig/gostr34_10_94/gostr34_10_94 && ./sss/sss && ./basic/curve_basic_examples && ./basic/curve_ecdh && make clean && cd - && make clean;
+          make 32 && cd src/examples/ && make 32 && ./sss/sss && ./basic/curve_basic_examples && ./basic/curve_ecdh && make clean && cd - && make clean;
+          make 16 && cd src/examples/ && make 16 && ./sss/sss && ./basic/curve_basic_examples && ./basic/curve_ecdh && make clean && cd - && make clean;
+        continue-on-error: false
diff --git a/crypto/libecc/.github/workflows/libecc_meson_build.yml b/crypto/libecc/.github/workflows/libecc_meson_build.yml
new file mode 100644
index 000000000000..e942ae9c2470
--- /dev/null
+++ b/crypto/libecc/.github/workflows/libecc_meson_build.yml
@@ -0,0 +1,37 @@
+name: libecc
+
+# Run this workflow every time a new commit pushed to your repository
+on: push
+
+jobs:
+  compilation_tests:
+    runs-on: ubuntu-22.04
+    strategy:
+      #max-parallel: 10
+      matrix:
+        cc: [gcc, clang, g++, clang++]
+        blinding: [0, 1]
+        complete: [0, 1]
+        ladder: [0, 1]
+        cryptofuzz: [0, 1]
+        optflags: ["-O3", "-O2", "-O1"]
+    steps:
+      # Checkout repository
+      - name: checkout repository
+        uses: actions/checkout@v2
+      # Run actions
+      # libecc compilation tests using meson
+      - name: libecc meson compilation tests
+        shell: bash
+        run: |
+          sudo apt-get update;
+          sudo apt-get -y install python3-pip;
+          pip install meson;
+          pip install ninja;
+          pip install dunamai;
+          # Compilation tests of all cases
+          #
+          rm -rf builddir/ && meson setup -Dwith_wordsize=16 builddir && cd builddir && meson dist && cd -;
+          rm -rf builddir/ && meson setup -Dwith_wordsize=32 builddir && cd builddir && meson dist && cd -;
+          rm -rf builddir/ && meson setup -Dwith_wordsize=64 builddir && cd builddir && meson dist && cd -;
+        continue-on-error: false
diff --git a/crypto/libecc/.github/workflows/libecc_python_tests.yml b/crypto/libecc/.github/workflows/libecc_python_tests.yml
new file mode 100644
index 000000000000..895760f7369e
--- /dev/null
+++ b/crypto/libecc/.github/workflows/libecc_python_tests.yml
@@ -0,0 +1,43 @@
+name: libecc
+
+# Run this workflow every time a new commit pushed to your repository
+on: push
+
+jobs:
+  runtime_tests:
+    runs-on: ubuntu-22.04
+    strategy:
+      #max-parallel: 10
+      matrix:
+        cc: [gcc, clang]
+        blinding: [0, 1]
+        cryptofuzz: [1]
+    steps:
+      # Checkout repository
+      - name: checkout repository
+        uses: actions/checkout@v2
+      # Run actions
+      # libecc python tests
+      - name: libecc python tests
+        env:
+          CC: ${{ matrix.cc }}
+          BLINDING: ${{ matrix.blinding }}
+          CRYPTOFUZZ: ${{ matrix.cryptofuzz }}
+          ASSERT_PRINT: 1
+          # We want to parallelize self tests
+          OPENMP_SELF_TESTS: 1
+        shell: bash
+        run: |
+          # Install Python2 and OpenMP
+          sudo apt-get update;
+          sudo apt-get -y install python2 libomp-dev;
+          # Test our Python libecc expanding script
+          # Python3
+          echo "y" | python3 scripts/expand_libecc.py --remove-all && PYTHON=python3 sh scripts/gen_curves_tests.sh && make clean && make && ./build/ec_self_tests vectors rand;
+          # Clean
+          echo "y" | python3 scripts/expand_libecc.py --remove-all && make clean;
+          # Python2
+          echo "y" | python2 scripts/expand_libecc.py --remove-all && PYTHON=python2 sh scripts/gen_curves_tests.sh && make clean && make && ./build/ec_self_tests vectors rand;
+          # Clean
+          echo "y" | python2 scripts/expand_libecc.py --remove-all && make clean;
+        continue-on-error: false
diff --git a/crypto/libecc/.github/workflows/libecc_runtime_tests.yml b/crypto/libecc/.github/workflows/libecc_runtime_tests.yml
new file mode 100644
index 000000000000..2432511a1be0
--- /dev/null
+++ b/crypto/libecc/.github/workflows/libecc_runtime_tests.yml
@@ -0,0 +1,39 @@
+name: libecc
+
+# Run this workflow every time a new commit pushed to your repository
+on: push
+
+jobs:
+  runtime_tests:
+    runs-on: ubuntu-22.04
+    strategy:
+      #max-parallel: 10
+      matrix:
+        cc: [gcc, clang]
+        blinding: [1]
+        cryptofuzz: [1]
+        wordsize: [64, 32, 16]
+    steps:
+      # Checkout repository
+      - name: checkout repository
+        uses: actions/checkout@v2
+      # Run actions
+      # libecc runtime tests
+      - name: libecc runtime tests
+        env:
+          CC: ${{ matrix.cc }}
+          BLINDING: ${{ matrix.blinding }}
+          CRYPTOFUZZ: ${{ matrix.cryptofuzz }}
+          ASSERT_PRINT: 1
+          # We want to parallelize self tests
+          OPENMP_SELF_TESTS: 1
+          WORDSIZE: ${{ matrix.wordsize }}
+        shell: bash
+        run: |
+          # Install OpenMP
+          sudo apt-get update;
+          sudo apt-get -y install libomp-dev;
+          # Vanilla tests
+          #
+          make "${WORDSIZE}" && ./build/ec_self_tests vectors rand;
+        continue-on-error: false
diff --git a/crypto/libecc/.gitignore b/crypto/libecc/.gitignore
new file mode 100644
index 000000000000..da8ab177478b
--- /dev/null
+++ b/crypto/libecc/.gitignore
@@ -0,0 +1,4 @@
+*.o
+*.d
+*~
+*.su
\ No newline at end of file
diff --git a/crypto/libecc/.travis.yml b/crypto/libecc/.travis.yml
new file mode 100644
index 000000000000..45f70324466f
--- /dev/null
+++ b/crypto/libecc/.travis.yml
@@ -0,0 +1,287 @@
+language: c
+os: linux
+dist:
+    - bionic
+
+env:
+  global:
+    # COVERITY_SCAN_TOKEN
+    - secure: "jhz0JLrLjWABZfT/mWiwuddUMvJNdrkIWJEqFGtGLO/x/nbiFD8ooHl/Sb+JSOsr8obXYMVmO+7ubTOLeqAbfaqS/5OZSQZjKAl4G6vGK40qY8cm1F7PTv5H3533XJGG6u4SZkMMlecz1UwsdmQ/5uabhzZwa9vMhuWJPkFy6uwvv09+r7cu8p4sN1KKfkIqIwpdpWmoOoltxfLPKkaIuxhftKDCYrcpd9K82NfXm/9Whxfra35Wq9IcxZXfNt6QKw0OLGnwR70hQZrRsd0bQAzeerWHCnqAbY2neNtMjiV905GJkUaCvWTF6P2ZbTCzN3Jy6wGz/LMSyztnWy/0pa9+dEWdCOZPLsrg+BTcBZNwPBho/Lg/diA/8Dz9plDirvogTpz6O0vzqmLRTVUp6uqBsTAnPHvNS1iz7hUwwvuItSAWOywVeVlpZ2mxUsOUyVzp2iZ9VEr4yk15LLbeYTPIMY2QbwBuG6TkgYn5EiCwsaQlSmPeyJlkc2a5tji2Rgms0wcpOReBxyKKN30LqZyac+bdlkwl6IqzaSWGz0wle68+1vNura+a909kGONLAx/0dbBzL1t5pFrJfDN7brBuk1wJuurecn8owdts4iPMaowpje79BG2hTQot969Ig00j4mhg1BJv5kk7c/mO3TqbDW8tPAto5tcWrYfELu4=" 
+
+before_install:
+  - echo -n | openssl s_client -connect https://scan.coverity.com:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | sudo tee -a /etc/ssl/certs/ca-
+
+
+addons:
+    apt:
+        update: true
+        packages:
+            - make
+            - gcc
+            - clang
+            - qemu-user-static
+            - wine-stable
+            - wine32
+            - wine64
+            - python3
+
+    coverity_scan:
+        project:
+            name: "rb-anssi/libecc_local"
+            description: "Build submitted via Travis CI of libecc"
+        notification_email: ryadbenadjila@gmail.com
+        build_command:   make
+        branch_pattern: coverity_scan
+
+cache:
+  apt: true
+
+# We use docker for the cross-build
+services:
+  - docker
+
+# All our jobs
+env:
+    matrix:
+      # Python libecc expand script test
+      - TEST_PYTHON_EXPAND_SCRIPT=1
+      # Vanilla tests (on native plaform)
+      - BLINDING=0 COMPLETE=0 CROSS_BUILD=0 LADDER=1 
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=0 LADDER=1
+      - BLINDING=0 COMPLETE=1 CROSS_BUILD=0 LADDER=1
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=0 LADDER=1
+      - CC=clang BLINDING=0 COMPLETE=0 CROSS_BUILD=0 LADDER=1
+      - CC=clang BLINDING=1 COMPLETE=0 CROSS_BUILD=0 LADDER=1
+      - CC=clang BLINDING=0 COMPLETE=1 CROSS_BUILD=0 LADDER=1
+      - CC=clang BLINDING=1 COMPLETE=1 CROSS_BUILD=0 LADDER=1
+      - BLINDING=0 COMPLETE=0 CROSS_BUILD=0 LADDER=0
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=0 LADDER=0
+      - BLINDING=0 COMPLETE=1 CROSS_BUILD=0 LADDER=0
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=0 LADDER=0
+      - CC=clang BLINDING=0 COMPLETE=0 CROSS_BUILD=0 LADDER=0
+      - CC=clang BLINDING=1 COMPLETE=0 CROSS_BUILD=0 LADDER=0
+      - CC=clang BLINDING=0 COMPLETE=1 CROSS_BUILD=0 LADDER=0
+      - CC=clang BLINDING=1 COMPLETE=1 CROSS_BUILD=0 LADDER=0
+      # Cross compilation tests (using docker and qemu-static)
+      # arm-linux-gnueabi
+      - BLINDING=0 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabi CROSS_SIZE=16 LADDER=1
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabi CROSS_SIZE=16 LADDER=1
+      - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabi CROSS_SIZE=16 LADDER=1
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabi CROSS_SIZE=16 LADDER=1
+      - BLINDING=0 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabi CROSS_SIZE=32 LADDER=1
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabi CROSS_SIZE=32 LADDER=1
+      - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabi CROSS_SIZE=32 LADDER=1
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabi CROSS_SIZE=32 LADDER=1
+      - BLINDING=0 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabi CROSS_SIZE=64 LADDER=1
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabi CROSS_SIZE=64 LADDER=1
+      - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabi CROSS_SIZE=64 LADDER=1
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabi CROSS_SIZE=64 LADDER=1
+      - BLINDING=0 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabi CROSS_SIZE=16 LADDER=0
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabi CROSS_SIZE=16 LADDER=0
+      - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabi CROSS_SIZE=16 LADDER=0
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabi CROSS_SIZE=16 LADDER=0
+      - BLINDING=0 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabi CROSS_SIZE=32 LADDER=0
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabi CROSS_SIZE=32 LADDER=0
+      - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabi CROSS_SIZE=32 LADDER=0
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabi CROSS_SIZE=32 LADDER=0
+      - BLINDING=0 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabi CROSS_SIZE=64 LADDER=0
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabi CROSS_SIZE=64 LADDER=0
+      - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabi CROSS_SIZE=64 LADDER=0
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabi CROSS_SIZE=64 LADDER=0
+      # arm-linux-gnueabihf
+      - BLINDING=0 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabihf CROSS_SIZE=16 LADDER=1
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabihf CROSS_SIZE=16 LADDER=1
+      - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabihf CROSS_SIZE=16 LADDER=1
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabihf CROSS_SIZE=16 LADDER=1
+      - BLINDING=0 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabihf CROSS_SIZE=32 LADDER=1
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabihf CROSS_SIZE=32 LADDER=1
+      - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabihf CROSS_SIZE=32 LADDER=1
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabihf CROSS_SIZE=32 LADDER=1
+      - BLINDING=0 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabihf CROSS_SIZE=64 LADDER=1
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabihf CROSS_SIZE=64 LADDER=1
+      - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabihf CROSS_SIZE=64 LADDER=1
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabihf CROSS_SIZE=64 LADDER=1
+      - BLINDING=0 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabihf CROSS_SIZE=16 LADDER=0
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabihf CROSS_SIZE=16 LADDER=0
+      - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabihf CROSS_SIZE=16 LADDER=0
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabihf CROSS_SIZE=16 LADDER=0
+      - BLINDING=0 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabihf CROSS_SIZE=32 LADDER=0
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabihf CROSS_SIZE=32 LADDER=0
+      - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabihf CROSS_SIZE=32 LADDER=0
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabihf CROSS_SIZE=32 LADDER=0
+      - BLINDING=0 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabihf CROSS_SIZE=64 LADDER=0
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabihf CROSS_SIZE=64 LADDER=0
+      - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabihf CROSS_SIZE=64 LADDER=0
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=arm-linux-gnueabihf CROSS_SIZE=64 LADDER=0
+      # powerpc64le-linux-gnu
+      - BLINDING=0 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=powerpc64le-linux-gnu CROSS_SIZE=16 LADDER=1
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=powerpc64le-linux-gnu CROSS_SIZE=16 LADDER=1
+      - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=powerpc64le-linux-gnu CROSS_SIZE=16 LADDER=1
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=powerpc64le-linux-gnu CROSS_SIZE=16 LADDER=1
+      - BLINDING=0 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=powerpc64le-linux-gnu CROSS_SIZE=32 LADDER=1
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=powerpc64le-linux-gnu CROSS_SIZE=32 LADDER=1
+      - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=powerpc64le-linux-gnu CROSS_SIZE=32 LADDER=1
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=powerpc64le-linux-gnu CROSS_SIZE=32 LADDER=1
+      - BLINDING=0 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=powerpc64le-linux-gnu CROSS_SIZE=64 LADDER=1
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=powerpc64le-linux-gnu CROSS_SIZE=64 LADDER=1
+      - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=powerpc64le-linux-gnu CROSS_SIZE=64 LADDER=1
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=powerpc64le-linux-gnu CROSS_SIZE=64 LADDER=1
+      - BLINDING=0 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=powerpc64le-linux-gnu CROSS_SIZE=16 LADDER=0
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=powerpc64le-linux-gnu CROSS_SIZE=16 LADDER=0
+      - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=powerpc64le-linux-gnu CROSS_SIZE=16 LADDER=0
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=powerpc64le-linux-gnu CROSS_SIZE=16 LADDER=0
+      - BLINDING=0 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=powerpc64le-linux-gnu CROSS_SIZE=32 LADDER=0
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=powerpc64le-linux-gnu CROSS_SIZE=32 LADDER=0
+      - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=powerpc64le-linux-gnu CROSS_SIZE=32 LADDER=0
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=powerpc64le-linux-gnu CROSS_SIZE=32 LADDER=0
+      - BLINDING=0 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=powerpc64le-linux-gnu CROSS_SIZE=64 LADDER=0
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=powerpc64le-linux-gnu CROSS_SIZE=64 LADDER=0
+      - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=powerpc64le-linux-gnu CROSS_SIZE=64 LADDER=0
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=powerpc64le-linux-gnu CROSS_SIZE=64 LADDER=0
+      # aarch64-linux-gnu
+      - BLINDING=0 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=aarch64-linux-gnu CROSS_SIZE=16 LADDER=1
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=aarch64-linux-gnu CROSS_SIZE=16 LADDER=1
+      - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=aarch64-linux-gnu CROSS_SIZE=16 LADDER=1
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=aarch64-linux-gnu CROSS_SIZE=16 LADDER=1
+      - BLINDING=0 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=aarch64-linux-gnu CROSS_SIZE=32 LADDER=1
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=aarch64-linux-gnu CROSS_SIZE=32 LADDER=1
+      - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=aarch64-linux-gnu CROSS_SIZE=32 LADDER=1
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=aarch64-linux-gnu CROSS_SIZE=32 LADDER=1
+      - BLINDING=0 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=aarch64-linux-gnu CROSS_SIZE=64 LADDER=1
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=aarch64-linux-gnu CROSS_SIZE=64 LADDER=1
+      - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=aarch64-linux-gnu CROSS_SIZE=64 LADDER=1
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=aarch64-linux-gnu CROSS_SIZE=64 LADDER=1
+      - BLINDING=0 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=aarch64-linux-gnu CROSS_SIZE=16 LADDER=0
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=aarch64-linux-gnu CROSS_SIZE=16 LADDER=0
+      - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=aarch64-linux-gnu CROSS_SIZE=16 LADDER=0
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=aarch64-linux-gnu CROSS_SIZE=16 LADDER=0
+      - BLINDING=0 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=aarch64-linux-gnu CROSS_SIZE=32 LADDER=0
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=aarch64-linux-gnu CROSS_SIZE=32 LADDER=0
+      - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=aarch64-linux-gnu CROSS_SIZE=32 LADDER=0
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=aarch64-linux-gnu CROSS_SIZE=32 LADDER=0
+      - BLINDING=0 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=aarch64-linux-gnu CROSS_SIZE=64 LADDER=0
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=aarch64-linux-gnu CROSS_SIZE=64 LADDER=0
+      - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=aarch64-linux-gnu CROSS_SIZE=64 LADDER=0
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=aarch64-linux-gnu CROSS_SIZE=64 LADDER=0
+      # mipsel-linux-gnu
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=mipsel-linux-gnu CROSS_SIZE=16 LADDER=1
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=mipsel-linux-gnu CROSS_SIZE=16 LADDER=1
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=mipsel-linux-gnu CROSS_SIZE=32 LADDER=1
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=mipsel-linux-gnu CROSS_SIZE=32 LADDER=1
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=mipsel-linux-gnu CROSS_SIZE=64 LADDER=1
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=mipsel-linux-gnu CROSS_SIZE=64 LADDER=1
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=mipsel-linux-gnu CROSS_SIZE=16 LADDER=0
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=mipsel-linux-gnu CROSS_SIZE=16 LADDER=0
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=mipsel-linux-gnu CROSS_SIZE=32 LADDER=0
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=mipsel-linux-gnu CROSS_SIZE=32 LADDER=0
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=mipsel-linux-gnu CROSS_SIZE=64 LADDER=0
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=mipsel-linux-gnu CROSS_SIZE=64 LADDER=0
+      # i386-apple-darwin
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=i386-apple-darwin CROSS_SIZE=16 LADDER=1
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=i386-apple-darwin CROSS_SIZE=16 LADDER=1
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=i386-apple-darwin CROSS_SIZE=32 LADDER=1
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=i386-apple-darwin CROSS_SIZE=32 LADDER=1
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=i386-apple-darwin CROSS_SIZE=64 LADDER=1
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=i386-apple-darwin CROSS_SIZE=64 LADDER=1
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=i386-apple-darwin CROSS_SIZE=16 LADDER=0
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=i386-apple-darwin CROSS_SIZE=16 LADDER=0
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=i386-apple-darwin CROSS_SIZE=32 LADDER=0
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=i386-apple-darwin CROSS_SIZE=32 LADDER=0
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=i386-apple-darwin CROSS_SIZE=64 LADDER=0
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=i386-apple-darwin CROSS_SIZE=64 LADDER=0
+      # x86_64-apple-darwin
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=x86_64-apple-darwin CROSS_SIZE=16 LADDER=1
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=x86_64-apple-darwin CROSS_SIZE=16 LADDER=1
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=x86_64-apple-darwin CROSS_SIZE=32 LADDER=1
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=x86_64-apple-darwin CROSS_SIZE=32 LADDER=1
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=x86_64-apple-darwin CROSS_SIZE=64 LADDER=1
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=x86_64-apple-darwin CROSS_SIZE=64 LADDER=1
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=x86_64-apple-darwin CROSS_SIZE=16 LADDER=0
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=x86_64-apple-darwin CROSS_SIZE=16 LADDER=0
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=x86_64-apple-darwin CROSS_SIZE=32 LADDER=0
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=x86_64-apple-darwin CROSS_SIZE=32 LADDER=0
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=x86_64-apple-darwin CROSS_SIZE=64 LADDER=0
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=x86_64-apple-darwin CROSS_SIZE=64 LADDER=0
+      # x86_64h-apple-darwin
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=x86_64h-apple-darwin CROSS_SIZE=16 LADDER=1
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=x86_64h-apple-darwin CROSS_SIZE=16 LADDER=1
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=x86_64h-apple-darwin CROSS_SIZE=32 LADDER=1
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=x86_64h-apple-darwin CROSS_SIZE=32 LADDER=1
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=x86_64h-apple-darwin CROSS_SIZE=64 LADDER=1
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=x86_64h-apple-darwin CROSS_SIZE=64 LADDER=1
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=x86_64h-apple-darwin CROSS_SIZE=16 LADDER=0
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=x86_64h-apple-darwin CROSS_SIZE=16 LADDER=0
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=x86_64h-apple-darwin CROSS_SIZE=32 LADDER=0
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=x86_64h-apple-darwin CROSS_SIZE=32 LADDER=0
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=x86_64h-apple-darwin CROSS_SIZE=64 LADDER=0
+      - BLINDING=0 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=x86_64h-apple-darwin CROSS_SIZE=64 LADDER=0
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=x86_64h-apple-darwin CROSS_SIZE=64 LADDER=0
+      # i686-w64-mingw32
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=i686-w64-mingw32 CROSS_SIZE=16 LADDER=1
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=i686-w64-mingw32 CROSS_SIZE=16 LADDER=1
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=i686-w64-mingw32 CROSS_SIZE=32 LADDER=1
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=i686-w64-mingw32 CROSS_SIZE=32 LADDER=1
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=i686-w64-mingw32 CROSS_SIZE=64 LADDER=1
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=i686-w64-mingw32 CROSS_SIZE=64 LADDER=1
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=i686-w64-mingw32 CROSS_SIZE=16 LADDER=0
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=i686-w64-mingw32 CROSS_SIZE=16 LADDER=0
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=i686-w64-mingw32 CROSS_SIZE=32 LADDER=0
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=i686-w64-mingw32 CROSS_SIZE=32 LADDER=0
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=i686-w64-mingw32 CROSS_SIZE=64 LADDER=0
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=i686-w64-mingw32 CROSS_SIZE=64 LADDER=0
+      # x86_64-w64-mingw32
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=x86_64-w64-mingw32 CROSS_SIZE=16 LADDER=1
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=x86_64-w64-mingw32 CROSS_SIZE=16 LADDER=1
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=x86_64-w64-mingw32 CROSS_SIZE=32 LADDER=1
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=x86_64-w64-mingw32 CROSS_SIZE=32 LADDER=1
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=x86_64-w64-mingw32 CROSS_SIZE=64 LADDER=1
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=x86_64-w64-mingw32 CROSS_SIZE=64 LADDER=1
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=x86_64-w64-mingw32 CROSS_SIZE=16 LADDER=0
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=x86_64-w64-mingw32 CROSS_SIZE=16 LADDER=0
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=x86_64-w64-mingw32 CROSS_SIZE=32 LADDER=0
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=x86_64-w64-mingw32 CROSS_SIZE=32 LADDER=0
+      - BLINDING=1 COMPLETE=0 CROSS_BUILD=1 CROSS_TARGET=x86_64-w64-mingw32 CROSS_SIZE=64 LADDER=0
+      - BLINDING=1 COMPLETE=1 CROSS_BUILD=1 CROSS_TARGET=x86_64-w64-mingw32 CROSS_SIZE=64 LADDER=0
+
+script:
+       # Coverity scan static analysis
+       - if [ "${COVERITY_SCAN_BRANCH}" == 1 ]; then make; fi
+       - if [ "${COVERITY_SCAN_BRANCH}" == 1 ]; then exit 0; fi
+       # Test our Python libecc expanding script
+       # Python2
+       - if [ "${TEST_PYTHON_EXPAND_SCRIPT}" == 1 ] && [ "${COVERITY_SCAN_BRANCH}" != 1 ]; then echo "y" | python2 scripts/expand_libecc.py --remove-all && PYTHON=python2 sh scripts/gen_curves_tests.sh && make clean && make && ./build/ec_self_tests vectors && ./build/ec_self_tests rand; fi;
+       # Python3
+       - if [ "${TEST_PYTHON_EXPAND_SCRIPT}" == 1 ] && [ "${COVERITY_SCAN_BRANCH}" != 1 ]; then echo "y" | python3 scripts/expand_libecc.py --remove-all && PYTHON=python3 sh scripts/gen_curves_tests.sh && make clean && make && ./build/ec_self_tests vectors && ./build/ec_self_tests rand; fi;
+       # Clean
+       - if [ "${TEST_PYTHON_EXPAND_SCRIPT}" == 1 ] && [ "${COVERITY_SCAN_BRANCH}" != 1 ]; then echo "y" | python2 scripts/expand_libecc.py --remove-all && make clean; fi;
+       # Vanilla tests
+       - if [ "$TRAVIS_EVENT_TYPE" = "pull_request" ]; then git fetch origin refs/pull/${TRAVIS_PULL_REQUEST}/head && git checkout FETCH_HEAD; fi
+       - if [ "${CROSS_BUILD}" = 0 ] && [ "${COVERITY_SCAN_BRANCH}" != 1 ]; then make && ./build/ec_self_tests vectors && ./build/ec_self_tests rand && cd src/arithmetic_tests/ && make clean && make && make clean && cd -; fi
+       - if [ "${CROSS_BUILD}" = 0 ] && [ "${COVERITY_SCAN_BRANCH}" != 1 ]; then cd src/examples/ && make clean && make && cd - && make clean; fi
+       - if [ "${CROSS_BUILD}" = 0 ] && [ "${COVERITY_SCAN_BRANCH}" != 1 ]; then make 16 && ./build/ec_self_tests vectors && ./build/ec_self_tests rand && cd src/arithmetic_tests/ && make clean && make 16 && make clean && cd -; fi
+       - if [ "${CROSS_BUILD}" = 0 ] && [ "${COVERITY_SCAN_BRANCH}" != 1 ]; then cd src/examples/ && make clean && make 16 && cd - && make clean; fi
+       - if [ "${CROSS_BUILD}" = 0 ] && [ "${COVERITY_SCAN_BRANCH}" != 1 ]; then make 32 && ./build/ec_self_tests vectors && ./build/ec_self_tests rand && cd src/arithmetic_tests/ && make clean && make 32 && make clean && cd -; fi
+       - if [ "${CROSS_BUILD}" = 0 ] && [ "${COVERITY_SCAN_BRANCH}" != 1 ]; then cd src/examples/ && make clean && make 32 && cd - && make clean; fi
+       - if [ "${CROSS_BUILD}" = 0 ] && [ "${COVERITY_SCAN_BRANCH}" != 1 ]; then make 64 && ./build/ec_self_tests vectors && ./build/ec_self_tests rand && cd src/arithmetic_tests/ && make clean && make 64 && make clean && cd -; fi
+       - if [ "${CROSS_BUILD}" = 0 ] && [ "${COVERITY_SCAN_BRANCH}" != 1 ]; then cd src/examples/ && make clean && make 64 && cd - && make clean; fi
+       - if [ "${CROSS_BUILD}" = 0 ] && [ "${COVERITY_SCAN_BRANCH}" != 1 ]; then make debug && ./build/ec_self_tests vectors && ./build/ec_self_tests rand && cd src/arithmetic_tests/ && make clean && make debug && make clean && cd -; fi
+       - if [ "${CROSS_BUILD}" = 0 ] && [ "${COVERITY_SCAN_BRANCH}" != 1 ]; then cd src/examples/ && make clean && make debug && cd - && make clean; fi
*** 960508 LINES SKIPPED ***